BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

(Pedido Script) Food

(Pedido Script) Food

Ir a la página : Precedente  1, 2, 3  Siguiente

#26 Re: (Pedido Script) Food el Vie Ene 22, 2016 2:45 pm

Daviid95


Aprendiz
CREO
es en
Código:
data\actions\scripts\foods\foods.lua
aqui se ve cuanto te da de alimento (me parece)

------------------------------------------------------------------------------------------------------------------------------
aqui en mi caso es asi porque mi server tiene la carpeta de emporia tendrias que buscar este otro:
Código:
data\actions\scripts\emporia\other\food.lua

aqui es donde creo que le puedes modificar cuanto come (CREO NADA DE LO QUE TE DIGO ESTOY 100% SEGURO tengo prisa y se me hace tarde! jajajaja no cheque todo bien)

EDIT
cierto! creo que aqui va cuanto come en total

Código:
if((getPlayerFood(cid) + food[1]) >= 400) then
 doPlayerSendCancel(cid, "You are full.")
 return true

eso esta en el segundo que te  dije

pd: si lo logras hacer me dices
pd2: ya me voy mas tarde regreso
pd3: si necesitas ayuda me mandas un mp y a ver que podemos hacer entre los 2 (: .... pero mas tarde jajaja

#27 Re: (Pedido Script) Food el Vie Ene 22, 2016 3:08 pm

Belerofonte


Administrador
Yo lo estuve intentando hace unos días.

Lo que es el tema del tiempo, lo hice en un Globalevents. Con el requisito de que no se posea un Storage Key(para los 10 segundos de soul estático tras haber alcanzado el máximo y estar lleno con la comida) y que no le afecte a algunos usuarios con determinados GroupId(Staff).
Spoiler:

Código:
<globalevent name="SubtractingSoul" interval="1000" event="script" value="SubtractingSoul.lua"/>

Código:
 local keepSoul = {2, 3, 4} -- GroupId de los usuarios que no perderán Soul.
  local storage = 439836

function onThink(interval, lastExecution)

    for _, cid in ipairs(getPlayersOnline()) do
        if exhaustion.get(cid, storage) == false then
            if not isInArray(keepSoul, getPlayerGroupId(cid)) and getPlayerSoul(cid) > 0 then
                doPlayerAddSoul(cid, - 1)
            end
        end
    end

  return true
end



Para la comida, pillar el script del food.lua procedente del Servidor/Data/Actions/Scripts/Foods/..., que en mi caso es:
Spoiler:

Código:
local FOODS, MAX_FOOD = {
 [2328] = {84, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
 [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
 [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
 [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
 [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
 [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
 [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
 [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2769] = {60, "Crunch."}, [2787] = {108, "Crunch."},
 [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
 [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
 [2796] = {300, "Crunch."}, [5097] = {48, "Yum."}, [5678] = {96, "Gulp."}, [6125] = {96, "Mmmm."},
 [6278] = {120, "Mmmm."}, [6279] = {180, "Mmmm."}, [6393] = {144, "Mmmm."}, [6394] = {180, "Mmmm."},
 [6501] = {240, "Mmmm."}, [6541] = {72, "Gulp."}, [6542] = {72, "Gulp."}, [6543] = {72, "Gulp."},
 [6544] = {72, "Gulp."}, [6545] = {72, "Gulp."}, [6569] = {12, "Mmmm."}, [6574] = {60, "Mmmm."},
 [7158] = {300, "Munch."}, [7159] = {180, "Munch."}, [7245] = {84, "Munch."}, [7372] = {0, "Slurp."},
 [7373] = {0, "Slurp."}, [7374] = {0, "Slurp."},  [7375] = {0, "Slurp."}, [7376] = {0, "Slurp."},
 [7377] = {0, "Slurp."}, [7963] = {720, "Munch."},  [8838] = {120, "Gulp."}, [8839] = {60, "Yum."},
 [8840] = {12, "Yum."}, [8841] = {12, "Urgh."}, [8842] = {84, "Munch."}, [8843] = {60, "Crunch."},
 [8844] = {12, "Gulp."}, [8845] = {60, "Munch."}, [8847] = {132, "Yum."}, [9005] = {88, "Slurp."},
 [9114] = {60, "Crunch."}, [9996] = {0, "Slurp."}, [10454] = {0, "Your head begins to feel better."},
 [11246] = {310, "Yum."}, [11429] = {150, "Mmmm."}, [12415] = {360, "Yum."}, [12416] = {130, "Munch."},
 [12417] = {60, "Crunch."}, [12418] = {80, "Crunch."}, [12637] = {510, "Gulp."}, [12638] = {260, "Yum."},
 [12639] = {18, "Munch."}
}, 1200

function onUse(cid, item, fromPosition, itemEx, toPosition)
 if(item.itemid == 6280) then
 if(fromPosition.x == CONTAINER_POSITION) then
 fromPosition = getThingPosition(cid)
 end

 doCreatureSay(cid, getPlayerName(cid) .. " blew out the candle.", TALKTYPE_MONSTER)
 doTransformItem(item.uid, item.itemid - 1)

 doSendMagicEffect(fromPosition, CONST_ME_POFF)
 return true
 end

 local food = FOODS[item.itemid]
 if(food == nil) then
 return false
 end

 local size = food[1]
 if(getPlayerFood(cid) + size > MAX_FOOD) then
 doPlayerSendCancel(cid, "You are full.")
 return true
 end

 doPlayerFeed(cid, size)
 doRemoveItem(item.uid, 1)

 doCreatureSay(cid, food[2], TALKTYPE_MONSTER)
 return true
end

Duplicarlo y editarlo al gusto con el Soul.
Código:
local deduct = {
  str = 439836,
  time = 10,
  max = 50, -- 50
}

local FOODS = {
 [12540] = {25, "****"},
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

  local food = FOODS[item.itemid]
    if(food == nil) then
      return false
    end

  local size = food[1]

 if(getPlayerSoul(cid) + size > deduct.max) then
        doPlayerSendCancel(cid, "You are full soul.")
      return true
    end

    --exhaustion.set(cid, deduct.str, deduct.time)
    doPlayerAddSoul(cid, size)
    doRemoveItem(item.uid, 1)
    doCreatureSay(cid, food[2], TALKTYPE_MONSTER)

  return true
end

Pero me quedé estancado. En que... aquí, si por ejemplo, el máximo de Soul a rellenar es 50, y cada comida da 25...
- Se come un meat. 25 Soul
- Luego, transcurren 3 segundos, por lo que se le restan 3 puntos. 22 Soul
- Vuelve a comer otro meat. 25 + 22 = 47 Soul.
Ahora, - si vuelve a comer otro meat, no le dejará y le dirá que ya está lleno porque la condición es:
if(getPlayerSoul(cid) + size > deduct.max) then = if(47 + 25 > 50) then

Por lo tanto, no podrá adquirir el tope de comida, con la que junto a un trozo de código que falta, se activaría la función:
Código:
exhaustion.set(cid, deduct.str, deduct.time)
Para que durante los siguientes 10 segundos no se le reste Soul con el Globalevents anterior.

Aggh



Eso sin contar con que faltaría lo de la bonificación de regeneración de vida/mana, y que no sabría hacer para que se fallen menos los ataques.



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#28 Re: (Pedido Script) Food el Sáb Ene 23, 2016 10:31 am

Avsilon


Miembro
[Tienes que estar registrado y conectado para ver este vínculo] buen aporte, pero lo que me has comentado ya lo habia conseguido hacer con una cierta similitud a la tuya, pero buen aporte, ami lo que me falta es el tema que has dicho al final, que es que me gustaria saber como relaciono los segundos de bajada de soul que son 10 segundos como tu me lo has puesto, con los segundos de bajada de la food que es 1 segundo de bajada, y no se como cambiar ese segundo de bajada a 10 segundos, nose si me he explicado bien.

Y en cuanto a a lo de estar a full de comida no hace falta estar siempre a full de comida, simplemente si da la casualidad de que llegas a full de comida, pues bien si no pues nada.

Espero que puedas ayudarme con los segundos de bajada de la food, no se si hay que hacerlo en un glovalevents o algo, pero lo intente y no funciona, lo intente con tu script de glovalevents que me acabas de poner pero relacionado cn la food y no va, a ver si puedes ayudarme.

Un Saludo y Gracias por tu ayuda como siempre.

#29 Re: (Pedido Script) Food el Dom Ene 24, 2016 3:31 pm

Avsilon


Miembro
BUMP!

#30 Re: (Pedido Script) Food el Lun Ene 25, 2016 3:36 pm

Avsilon


Miembro
BUMP!

#31 Re: (Pedido Script) Food el Dom Ene 31, 2016 2:33 pm

Avsilon


Miembro
BUMP!

#32 Re: (Pedido Script) Food el Mar Mar 29, 2016 6:50 am

Avsilon


Miembro
BUMP!

#33 Re: (Pedido Script) Food el Mar Mar 29, 2016 12:57 pm

DTBCore


Novato
A que te refieres con "los segundos de bajada de la food"?

#34 Re: (Pedido Script) Food el Mar Mar 29, 2016 1:45 pm

Avsilon


Miembro
Pues me refiero a cuando se te gasta la food, es decir cuando llegas a food 0, donde se cambia los segundos que pasan desde que tienes la comida al máximo, es decir, que no puedes comer mas hasta que llega a 0, ese proceso pasa porque por segundo te baja un punto de food ybasi hasta quedarte a 0.

#35 Re: (Pedido Script) Food el Mar Mar 29, 2016 3:23 pm

Sirakx


Moderador
LOL aún siges con esto? ya lo hice desde cuando solo que si es necesario tocar los sources, ya que el limite de soul si no mal recuerdo es de 250 y eso se define en sources. aún así aquí te lo dejo.

en creaturescripts.xml pones:

Código:

<event type="login" name="foodEvent" event="script" value="checkFood.lua"/>

ahora en creaturescripts/scripts creas un archivo lua llamado checkFood.lua y dentro pones:

Código:


function actualizarSoul(cid)
 doPlayerAddSoul(cid, -getPlayerSoul(cid))
 doPlayerAddSoul(cid, getPlayerFood(cid))
 return addEvent(actualizarSoul, 2000, cid)
end

function onLogin(cid)
 addEvent(actualizarSoul, 1000, cid)
 return true
end

y es todo, recuerda que las vocaciones ganan souls cada cierto tiempo así que en vocations.xml en gainsoulticks ponle 0 en todas las vocaciones, y como el limite de food es de 1000  entonces cuando se acaben los 250 de soul se volvera a llenar, así que el player volvera a tener 250 de soul, osea que el soul se llenara 4 veces en 250 para que se acabe el food.



[Tienes que estar registrado y conectado para ver esa imagen]
http://celesta-global.net/

#36 Re: (Pedido Script) Food el Miér Mar 30, 2016 3:48 am

Avsilon


Miembro
[Tienes que estar registrado y conectado para ver este vínculo], no esta mal lo que has hecho, pero solo acomodas una parte a lo que pido, se que es difícil y no estoy para nada reprochandote nada, es mas te agradezco que te hayas tomado la molestia en ayudarme y hacerme esto. Pero lo que mas se asemeja a lo que pido es lo que me ha escrito [Tienes que estar registrado y conectado para ver este vínculo] un pelin mas arriba, que lo tenia bastante bien hecho pero como el dice hay un problema porque no sabe asemejar los valores del soul y la food en el mismo, es decir, soul 100 que sea el máximo y food 100 que sea el máximo y que bajen los dos un punto en cada uno por el mismo tiempo de bajada que seria 1 segundo y que a la vez al comerte un meat por ejemplo te suba el mismo numero de puntos tanto en el soul como en la food, y que cuando llegues a 100 que se supone que es el máximo que le hemos puesto a los dos, te diga que estes lleno. En definitiva quiero que la soul simplemente sea un contador para ver tu estado de hambre.

De todas formas muchísimas gracias por la ayuda y por tu tiempo que se que hacer código para otras personas es un tanto desesperante a veces,a no ser que suponga un reto que es lo divertido de la programación. De hecho yo estoy en la universidad estudiando ingeniería del software, pero es mi primer añito, cuando tenga mas conocimientos y tiempo, aportare ayuda también por este foro.

Y a ver si podéis ayudarme con esto
Un Saludo

#37 Re: (Pedido Script) Food el Jue Mar 31, 2016 3:54 am

Avsilon


Miembro
Bump!

#38 Re: (Pedido Script) Food el Vie Abr 01, 2016 6:32 pm

Avsilon


Miembro
BUMP!

#39 Re: (Pedido Script) Food el Dom Abr 03, 2016 9:02 pm

Avsilon


Miembro
BUMP!

#40 Re: (Pedido Script) Food el Dom Abr 03, 2016 9:03 pm

Avsilon


Miembro
BUMP!

#41 Re: (Pedido Script) Food el Mar Abr 05, 2016 11:26 am

Avsilon


Miembro
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Yo lo estuve intentando hace unos días.

Lo que es el tema del tiempo, lo hice en un Globalevents. Con el requisito de que no se posea un Storage Key(para los 10 segundos de soul estático tras haber alcanzado el máximo y estar lleno con la comida) y que no le afecte a algunos usuarios con determinados GroupId(Staff).
Spoiler:

Código:
<globalevent name="SubtractingSoul" interval="1000" event="script" value="SubtractingSoul.lua"/>

Código:
 local keepSoul = {2, 3, 4} -- GroupId de los usuarios que no perderán Soul.
  local storage = 439836

function onThink(interval, lastExecution)

    for _, cid in ipairs(getPlayersOnline()) do
        if exhaustion.get(cid, storage) == false then
            if not isInArray(keepSoul, getPlayerGroupId(cid)) and getPlayerSoul(cid) > 0 then
                doPlayerAddSoul(cid, - 1)
            end
        end
    end

  return true
end



Para la comida, pillar el script del food.lua procedente del Servidor/Data/Actions/Scripts/Foods/..., que en mi caso es:
Spoiler:

Código:
local FOODS, MAX_FOOD = {
 [2328] = {84, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
 [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
 [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
 [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
 [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
 [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
 [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
 [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2769] = {60, "Crunch."}, [2787] = {108, "Crunch."},
 [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
 [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
 [2796] = {300, "Crunch."}, [5097] = {48, "Yum."}, [5678] = {96, "Gulp."}, [6125] = {96, "Mmmm."},
 [6278] = {120, "Mmmm."}, [6279] = {180, "Mmmm."}, [6393] = {144, "Mmmm."}, [6394] = {180, "Mmmm."},
 [6501] = {240, "Mmmm."}, [6541] = {72, "Gulp."}, [6542] = {72, "Gulp."}, [6543] = {72, "Gulp."},
 [6544] = {72, "Gulp."}, [6545] = {72, "Gulp."}, [6569] = {12, "Mmmm."}, [6574] = {60, "Mmmm."},
 [7158] = {300, "Munch."}, [7159] = {180, "Munch."}, [7245] = {84, "Munch."}, [7372] = {0, "Slurp."},
 [7373] = {0, "Slurp."}, [7374] = {0, "Slurp."},  [7375] = {0, "Slurp."}, [7376] = {0, "Slurp."},
 [7377] = {0, "Slurp."}, [7963] = {720, "Munch."},  [8838] = {120, "Gulp."}, [8839] = {60, "Yum."},
 [8840] = {12, "Yum."}, [8841] = {12, "Urgh."}, [8842] = {84, "Munch."}, [8843] = {60, "Crunch."},
 [8844] = {12, "Gulp."}, [8845] = {60, "Munch."}, [8847] = {132, "Yum."}, [9005] = {88, "Slurp."},
 [9114] = {60, "Crunch."}, [9996] = {0, "Slurp."}, [10454] = {0, "Your head begins to feel better."},
 [11246] = {310, "Yum."}, [11429] = {150, "Mmmm."}, [12415] = {360, "Yum."}, [12416] = {130, "Munch."},
 [12417] = {60, "Crunch."}, [12418] = {80, "Crunch."}, [12637] = {510, "Gulp."}, [12638] = {260, "Yum."},
 [12639] = {18, "Munch."}
}, 1200

function onUse(cid, item, fromPosition, itemEx, toPosition)
 if(item.itemid == 6280) then
 if(fromPosition.x == CONTAINER_POSITION) then
 fromPosition = getThingPosition(cid)
 end

 doCreatureSay(cid, getPlayerName(cid) .. " blew out the candle.", TALKTYPE_MONSTER)
 doTransformItem(item.uid, item.itemid - 1)

 doSendMagicEffect(fromPosition, CONST_ME_POFF)
 return true
 end

 local food = FOODS[item.itemid]
 if(food == nil) then
 return false
 end

 local size = food[1]
 if(getPlayerFood(cid) + size > MAX_FOOD) then
 doPlayerSendCancel(cid, "You are full.")
 return true
 end

 doPlayerFeed(cid, size)
 doRemoveItem(item.uid, 1)

 doCreatureSay(cid, food[2], TALKTYPE_MONSTER)
 return true
end

Duplicarlo y editarlo al gusto con el Soul.
Código:
local deduct = {
  str = 439836,
  time = 10,
  max = 50, -- 50
}

local FOODS = {
 [12540] = {25, "****"},
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

  local food = FOODS[item.itemid]
    if(food == nil) then
      return false
    end

  local size = food[1]

 if(getPlayerSoul(cid) + size > deduct.max) then
        doPlayerSendCancel(cid, "You are full soul.")
      return true
    end

    --exhaustion.set(cid, deduct.str, deduct.time)
    doPlayerAddSoul(cid, size)
    doRemoveItem(item.uid, 1)
    doCreatureSay(cid, food[2], TALKTYPE_MONSTER)

  return true
end

Pero me quedé estancado. En que... aquí, si por ejemplo, el máximo de Soul a rellenar es 50, y cada comida da 25...
- Se come un meat. 25 Soul
- Luego, transcurren 3 segundos, por lo que se le restan 3 puntos. 22 Soul
- Vuelve a comer otro meat. 25 + 22 = 47 Soul.
Ahora, - si vuelve a comer otro meat, no le dejará y le dirá que ya está lleno porque la condición es:
if(getPlayerSoul(cid) + size > deduct.max) then = if(47 + 25 > 50) then

Por lo tanto, no podrá adquirir el tope de comida, con la que junto a un trozo de código que falta, se activaría la función:
Código:
exhaustion.set(cid, deduct.str, deduct.time)
Para que durante los siguientes 10 segundos no se le reste Soul con el Globalevents anterior.

Aggh



Eso sin contar con que faltaría lo de la bonificación de regeneración de vida/mana, y que no sabría hacer para que se fallen menos los ataques.

[Tienes que estar registrado y conectado para ver este vínculo], como voy duplicar el script del food, pero ahora con el soul?, me saldria un error de duplicacion de actions id. Como lo duplico entonces?

#42 Re: (Pedido Script) Food el Mar Abr 05, 2016 11:52 am

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:[Tienes que estar registrado y conectado para ver este vínculo], como voy duplicar el script del food, pero ahora con el soul?, me saldria un error de duplicacion de actions id. Como lo duplico entonces?

Creía que ibas a usar otro tipo de comida que no se use ya ahí. En tal caso, no lo dupliques y editas ese mismo script.
Ahora estoy un poco liado con unas cosillas del Cinema4D y Unity, y otro script, cuando esté libre retomo intentar averiguar esto.



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#43 Re: (Pedido Script) Food el Mar Abr 05, 2016 6:25 pm

Avsilon


Miembro
Vale Perfecto [Tienes que estar registrado y conectado para ver este vínculo], como siempre de mucha gran ayuda.

Queria preguntarte tambien, ¿como hago para editar a mi gusto los segundos en los que descienden los puntos de food?(No los de soul que me hiziste un globalevents, que eso va muy bien), me refiero a los puntos de food, es que quiero hacer una concordancia entre los segundos de descendencia de los puntos de soul con los de food, para que bajen los puntos al mismo tiempo, para que funcione bien el soul, que como ya explique es un contador de food.

Gracias compañeros

#44 Re: (Pedido Script) Food el Miér Abr 06, 2016 3:12 pm

Belerofonte


Administrador
Valep. Me quedó mucho más claro gracias a:
[Tienes que estar registrado y conectado para ver este vínculo] escribió:En definitiva quiero que la soul simplemente sea un contador para ver tu estado de hambre.

Iba a poner el script, pero tras echarle un ojo a lo que puso Sirakx para ver si decía algo acerca del soul máximo que se puede tener, veo que ya hizo exactamente lo que yo iba a poner jaja Okay

Porque como la única función para añadir Soul que existe lo que hace es aumentar/disminuir el valor, y no imponer. Por ejemplo:

Soul actual del jugador: 20
...
doPlayerAddSoul(cid, 40)
...
Soul actual del jugador: 60
El resultado sería que cid tendrá 60 de soul, y lo suyo es que se le imponga los 20 de Soul independientemente del que ya tenga anteriormente.

Por eso hay que poner primero: doPlayerAddSoul(cid, - getPlayerSoul(cid)), para que se quede el contador de soul a 0. Y luego, ya sí: doPlayerAddSoul(cid, getPlayerFood(cid)). O sea, 0 + el contador de comida actual.

Su script está bien, hace lo que pides. Si acaso, habría que añadirle los detallitos de que no afecte a la staff o que no reste soul hasta pasados los 10 segundos.



De hecho, es lo mismo hacerlo en Login vía addEvent que por Globalevents, solo que en este último usar el loop...
Código:
for _, cid in ipairs(getPlayersOnline()) do
...que yo estaba usando para adquirir a todos los jugadores puede dar lag en el servidor al tener que ejecutarse a cada segundo, sobre todo si hay muchos conectados.

Por lo que, lo dicho:
Actions/Scripts/...food.lua:

Código:
 local FOODS, MAX_FOOD = {
    key = 439836, -- El mismo storage key que pusiste en checkFood.lua
    value = 10, -- Segundos tras los cuales comenzará a bajarse el soul.

 -- [ID del alimento] = {Puntos alimenticios, "Onomatopeya."}
    [2328] = {5, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
    [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
    [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
    [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
    [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
    [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
    [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
    [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2769] = {60, "Crunch."}, [2787] = {108, "Crunch."},
    [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
    [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
    [2796] = {300, "Crunch."}, [5097] = {48, "Yum."}, [5678] = {96, "Gulp."}, [6125] = {96, "Mmmm."},
    [6278] = {120, "Mmmm."}, [6279] = {180, "Mmmm."}, [6393] = {144, "Mmmm."}, [6394] = {180, "Mmmm."},
    [6501] = {240, "Mmmm."}, [6541] = {72, "Gulp."}, [6542] = {72, "Gulp."}, [6543] = {72, "Gulp."},
    [6544] = {72, "Gulp."}, [6545] = {72, "Gulp."}, [6569] = {12, "Mmmm."}, [6574] = {60, "Mmmm."},
    [7158] = {300, "Munch."}, [7159] = {180, "Munch."}, [7245] = {84, "Munch."}, [7372] = {0, "Slurp."},
    [7373] = {0, "Slurp."}, [7374] = {0, "Slurp."},  [7375] = {0, "Slurp."}, [7376] = {0, "Slurp."},
    [7377] = {0, "Slurp."}, [7963] = {720, "Munch."},  [8838] = {120, "Gulp."}, [8839] = {60, "Yum."},
    [8840] = {12, "Yum."}, [8841] = {12, "Urgh."}, [8842] = {84, "Munch."}, [8843] = {60, "Crunch."},
    [8844] = {12, "Gulp."}, [8845] = {60, "Munch."}, [8847] = {132, "Yum."}, [9005] = {88, "Slurp."},
    [9114] = {60, "Crunch."}, [9996] = {0, "Slurp."}, [10454] = {0, "Your head begins to feel better."},
    [11246] = {310, "Yum."}, [11429] = {150, "Mmmm."}, [12415] = {360, "Yum."}, [12416] = {130, "Munch."},
    [12417] = {60, "Crunch."}, [12418] = {80, "Crunch."}, [12637] = {510, "Gulp."}, [12638] = {260, "Yum."},
    [12639] = {18, "Munch."}
  }, 250 -- Puntos alimenticios máximos que podrá ingerir antes de estar lleno.

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6280) then
        if(fromPosition.x == CONTAINER_POSITION) then
            fromPosition = getThingPosition(cid)
        end

        doCreatureSay(cid, getPlayerName(cid) .. " blew out the candle.", TALKTYPE_MONSTER)
        doTransformItem(item.uid, item.itemid - 1)

        doSendMagicEffect(fromPosition, CONST_ME_POFF)
      return true
    end

  local food = FOODS[item.itemid]
    if(food == nil) then
      return false
    end

  local size = food[1]
    if(getPlayerFood(cid) + size > MAX_FOOD) then
        doPlayerSendCancel(cid, "You are full soul.")
      return true
    end

    doPlayerFeed(cid, size)
    doRemoveItem(item.uid, 1)
    exhaustion.set(cid, FOODS.key, FOODS.value)

    doCreatureSay(cid, food[2], TALKTYPE_MONSTER)
  return true
end
Creaturescripts/Scripts/...checkFood.lua:

Código:
 local config = {
    keepingSoul = {2, 3, 4}, -- GroupId de los usuarios que no perderán Soul.
    key = 439836, -- El mismo storage key que pusiste en food.lua
    MAX_FOOD = 250, -- Puntos alimenticios máximos que se podrá ingerir antes de estar lleno.
  }

function actualizarSoul(cid)
    if isPlayer(cid) then
        if exhaustion.get(cid, config.key) == false then

            if not isInArray(config.keepingSoul, getPlayerGroupId(cid)) then
                doPlayerAddSoul(cid, - getPlayerSoul(cid))
                doPlayerAddSoul(cid, getPlayerFood(cid))
            end

        end
    end

  return addEvent(actualizarSoul, 1000, cid)
end

function onLogin(cid)
    addEvent(actualizarSoul, 1000, cid)

  return true
end

Aunque no sé si será solo mi servidor por cosa de brujerías o qué, pero es como si se alimentara 2 veces a la vez el soul del jugador. A ver si a tí también te pasa o no. (¿?)



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#45 Re: (Pedido Script) Food el Miér Abr 06, 2016 6:56 pm

Avsilon


Miembro
[Tienes que estar registrado y conectado para ver este vínculo], me pasan cosas muy raras, al comer, el soul no me sube hasta pasado un rato, luego el soul me baja por segundo y cuando llego al soul maximo, no puedo comer mas, pero eso porque he llegado al maximo de soul, pero nose porque pero mi maximo en comida esta en 270 o algo asi.

Y alomejor tengo soul 40, pero es como si tuviera comida 0, porque con soul 40, no me sube ni mana, ni vida, es decir, que tengo hambre.

Se nos escapa algo, en plan el maximo de soul lo tenemos definido, pero el maximo de food?, por otro lado los segundos por los que tiene que descender los puntos de soul, tambien estan definidos, pero los de food?

#46 Re: (Pedido Script) Food el Jue Abr 07, 2016 3:35 am

Belerofonte


Administrador
food.lua:

local FOODS, MAX_FOOD = {
   key = 439836, -- El mismo storage key que pusiste en checkFood.lua
   value = 10, -- Segundos tras los cuales comenzará a bajarse el soul.

-- [ID del alimento] = {Puntos alimenticios, "Onomatopeya."}
   [2328] = {5, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
   [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
   [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
   [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
   [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
   [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
   [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
   [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2769] = {60, "Crunch."}, [2787] = {108, "Crunch."},
   [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
   [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
   [2796] = {300, "Crunch."}, [5097] = {48, "Yum."}, [5678] = {96, "Gulp."}, [6125] = {96, "Mmmm."},
   [6278] = {120, "Mmmm."}, [6279] = {180, "Mmmm."}, [6393] = {144, "Mmmm."}, [6394] = {180, "Mmmm."},
   [6501] = {240, "Mmmm."}, [6541] = {72, "Gulp."}, [6542] = {72, "Gulp."}, [6543] = {72, "Gulp."},
   [6544] = {72, "Gulp."}, [6545] = {72, "Gulp."}, [6569] = {12, "Mmmm."}, [6574] = {60, "Mmmm."},
   [7158] = {300, "Munch."}, [7159] = {180, "Munch."}, [7245] = {84, "Munch."}, [7372] = {0, "Slurp."},
   [7373] = {0, "Slurp."}, [7374] = {0, "Slurp."},  [7375] = {0, "Slurp."}, [7376] = {0, "Slurp."},
   [7377] = {0, "Slurp."}, [7963] = {720, "Munch."},  [8838] = {120, "Gulp."}, [8839] = {60, "Yum."},
   [8840] = {12, "Yum."}, [8841] = {12, "Urgh."}, [8842] = {84, "Munch."}, [8843] = {60, "Crunch."},
   [8844] = {12, "Gulp."}, [8845] = {60, "Munch."}, [8847] = {132, "Yum."}, [9005] = {88, "Slurp."},
   [9114] = {60, "Crunch."}, [9996] = {0, "Slurp."}, [10454] = {0, "Your head begins to feel better."},
   [11246] = {310, "Yum."}, [11429] = {150, "Mmmm."}, [12415] = {360, "Yum."}, [12416] = {130, "Munch."},
   [12417] = {60, "Crunch."}, [12418] = {80, "Crunch."}, [12637] = {510, "Gulp."}, [12638] = {260, "Yum."},
   [12639] = {18, "Munch."}
 }, 250 -- Puntos alimenticios máximos que podrá ingerir antes de estar lleno.
checkFood.lua:

local config = {
   keepingSoul = {2, 3, 4}, -- GroupId de los usuarios que no perderán Soul.
   key = 439836, -- El mismo storage key que pusiste en food.lua
   MAX_FOOD = 250, -- Puntos alimenticios máximos que se podrá ingerir antes de estar lleno.
 }



- Respecto a que te suba hasta pasado un rato.
Tal vez sea por los 10 segundos de espera tras haber comido algo, aunque tendría que ser al revés xD, que te empiece a descontar. Así que, por probar bájale la cantidad de segundos a la variable value.



- Respecto al máximo de comida.
Yo les puse eso 250 porque mi máximo de soul era 255 o así, y para que no me ocurriera lo que dijo Sirakx de rellenarse 250 varias veces por ser el límite hasta llegar a 1000, aunque por probar tú puedes editarlo a tu gusto.



- Respecto a los segundos que han de descender.
Para verificar que el soul y food del jugador bajen a la vez, pon esto en el script del checkFood:
Código:
print('\ngetSoul: ' .. getPlayerSoul(cid) .. '\ngetFood: ' .. getPlayerFood(cid))

Debajo de:
Código:
doPlayerAddSoul(cid, getPlayerFood(cid))

(En mi caso sí lo hacen) Y cuando termines de test lo quitas o pones un "--" a su izquierda para que no aparezca siempre en consola.



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#47 Re: (Pedido Script) Food el Jue Abr 07, 2016 7:35 am

Avsilon


Miembro
Vale [Tienes que estar registrado y conectado para ver este vínculo], ahora me tarda menos cuando como, me sube el soul casi al instante, pero me tira como un pequeño exhasut antes de subir al instante, ami me gustaria que no estuviera ese exhasut y por otro lado, si me bajan los dos al mismo tiempo, pero cuando llego a soul 100, que es el maximo que le he puesto, se queda en soul 100 un ratito, por esto:

Código:

getFood: 61

getSoul: 61
getFood: 61

getSoul: 60
getFood: 60

getSoul: 59
getFood: 59

getSoul: 94
getFood: 94

getSoul: 93
getFood: 93

getSoul: 92
getFood: 92

getSoul: 91
getFood: 91

getSoul: 90
getFood: 90

getSoul: 89
getFood: 89

getSoul: 89
getFood: 89

getSoul: 88
getFood: 88

getSoul: 87
getFood: 87

getSoul: 86
getFood: 86

getSoul: 85
getFood: 85

getSoul: 100
getFood: 120

getSoul: 100
getFood: 119

getSoul: 100
getFood: 118

getSoul: 100
getFood: 117

getSoul: 100
getFood: 117

getSoul: 100
getFood: 116

getSoul: 100
getFood: 115

getSoul: 100
getFood: 114

getSoul: 100
getFood: 113

getSoul: 100
getFood: 112

getSoul: 100
getFood: 111

getSoul: 100
getFood: 110

getSoul: 100
getFood: 110

getSoul: 100
getFood: 109

getSoul: 100
getFood: 108

getSoul: 100
getFood: 107

getSoul: 100
getFood: 106

getSoul: 100
getFood: 105

getSoul: 100
getFood: 104

getSoul: 100
getFood: 103

getSoul: 100
getFood: 102

getSoul: 100
getFood: 101

getSoul: 100
getFood: 100

getSoul: 99
getFood: 99

getSoul: 98
getFood: 98

getSoul: 97
getFood: 97

getSoul: 96
getFood: 96

getSoul: 95
getFood: 95

getSoul: 94
getFood: 94

getSoul: 94
getFood: 94

getSoul: 93
getFood: 93

getSoul: 92
getFood: 92

getSoul: 91
getFood: 91

Como se puede apreciar mi maximo de food, no es el mismo que mi maximo de soul, y yo lo tengo definido en mi script de food asi:

food.lua:

Código:
local FOODS, MAX_FOOD = {
   key = 439836, -- El mismo storage key que pusiste en checkFood.lua
   value = 0, -- Segundos tras los cuales comenzará a bajarse el soul.

-- [ID del alimento] = {Puntos alimenticios, "Onomatopeya."}
   [2328] = {5, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
   [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
   [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
   [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
   [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
   [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
   [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
   [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2769] = {60, "Crunch."}, [2787] = {108, "Crunch."},
   [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
   [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
   [2796] = {300, "Crunch."}, [5097] = {48, "Yum."}, [5678] = {96, "Gulp."}, [6125] = {96, "Mmmm."},
   [6278] = {120, "Mmmm."}, [6279] = {180, "Mmmm."}, [6393] = {144, "Mmmm."}, [6394] = {180, "Mmmm."},
   [6501] = {240, "Mmmm."}, [6541] = {72, "Gulp."}, [6542] = {72, "Gulp."}, [6543] = {72, "Gulp."},
   [6544] = {72, "Gulp."}, [6545] = {72, "Gulp."}, [6569] = {12, "Mmmm."}, [6574] = {60, "Mmmm."},
   [7158] = {300, "Munch."}, [7159] = {180, "Munch."}, [7245] = {84, "Munch."}, [7372] = {0, "Slurp."},
   [7373] = {0, "Slurp."}, [7374] = {0, "Slurp."},  [7375] = {0, "Slurp."}, [7376] = {0, "Slurp."},
   [7377] = {0, "Slurp."}, [7963] = {720, "Munch."},  [8838] = {120, "Gulp."}, [8839] = {60, "Yum."},
   [8840] = {12, "Yum."}, [8841] = {12, "Urgh."}, [8842] = {84, "Munch."}, [8843] = {60, "Crunch."},
   [8844] = {12, "Gulp."}, [8845] = {60, "Munch."}, [8847] = {132, "Yum."}, [9005] = {88, "Slurp."},
   [9114] = {60, "Crunch."}, [9996] = {0, "Slurp."}, [10454] = {0, "Your head begins to feel better."},
   [11246] = {310, "Yum."}, [11429] = {150, "Mmmm."}, [12415] = {360, "Yum."}, [12416] = {130, "Munch."},
   [12417] = {60, "Crunch."}, [12418] = {80, "Crunch."}, [12637] = {510, "Gulp."}, [12638] = {260, "Yum."},
   [12639] = {18, "Munch."}
 }, 100 -- Puntos alimenticios máximos que podrá ingerir antes de estar lleno.

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6280) then
        if(fromPosition.x == CONTAINER_POSITION) then
            fromPosition = getThingPosition(cid)
        end

        doCreatureSay(cid, getPlayerName(cid) .. " blew out the candle.", TALKTYPE_MONSTER)
        doTransformItem(item.uid, item.itemid - 1)

        doSendMagicEffect(fromPosition, CONST_ME_POFF)
      return true
    end

  local food = FOODS[item.itemid]
    if(food == nil) then
      return false
    end

  local size = food[1]
    if(getPlayerFood(cid) + size > MAX_FOOD) then
        doPlayerSendCancel(cid, "You are full soul.")
      return true
    end

    doPlayerFeed(cid, size)
    doRemoveItem(item.uid, 1)
    exhaustion.set(cid, FOODS.key, FOODS.value)

    doCreatureSay(cid, food[2], TALKTYPE_MONSTER)
  return true
end

Y mi checkFood.lua asi:

Código:
local config = {
   keepingSoul = {2, 3, 4}, -- GroupId de los usuarios que no perderán Soul.
   key = 439836, -- El mismo storage key que pusiste en food.lua
   MAX_FOOD = 100, -- Puntos alimenticios máximos que se podrá ingerir antes de estar lleno.
 }

function actualizarSoul(cid)
    if isPlayer(cid) then
        if exhaustion.get(cid, config.key) == false then

            if not isInArray(config.keepingSoul, getPlayerGroupId(cid)) then
                doPlayerAddSoul(cid, - getPlayerSoul(cid))
                doPlayerAddSoul(cid, getPlayerFood(cid))
 print('\ngetSoul: ' .. getPlayerSoul(cid) .. '\ngetFood: ' .. getPlayerFood(cid))
            end

        end
    end

  return addEvent(actualizarSoul, 1000, cid)
end

function onLogin(cid)
    addEvent(actualizarSoul, 1000, cid)

  return true
end

Y otra cosa, que me gustaria, es que tanto los puntos de food, como de soul bajaran cada 5 segundos.

#48 Re: (Pedido Script) Food el Vie Abr 08, 2016 9:25 pm

drenin


Novato
Me uno a esto estoy super interesado...
Pero soy bastante cafre a la hora de realizar estos scripts

Seriais tan amables de colocarlo por aqui cuando lo termineis? Estaria tremendamente agradecido

http://aldream.no-ip.org:8090

#49 Re: (Pedido Script) Food el Dom Abr 10, 2016 6:32 pm

Avsilon


Miembro
BUMP!

#50 Re: (Pedido Script) Food el Mar Abr 12, 2016 4:41 am

Avsilon


Miembro
BUMP!

#51 Re: (Pedido Script) Food Hoy a las 4:12 am

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 2 de 3.]

Ir a la página : Precedente  1, 2, 3  Siguiente

Permisos de este foro:
No puedes responder a temas en este foro.

 

¿Quién está en línea?

En total hay 0 usuarios en línea: 0 Registrados, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: Ninguno

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .