BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

Storage Cierto TIempo

Storage Cierto TIempo

#1 Storage Cierto TIempo el Lun Feb 02, 2015 2:38 pm

Black Prada


Miembro
buenas tardes amigos de blacktibia vengo a pedir de sus conocimientos de script que me ayuden con uno

es muy sencillo

un item que te agregue un cierto storage & de ese storage sean 10 veces que dure 5 segundos & depsues de esos 5 segundos te lo remueva los 10 puntos de el storage qu eles digo

si no me entendieron diganmelo se los planteo mejor

de antemano gracias

#2 Re: Storage Cierto TIempo el Lun Feb 02, 2015 3:53 pm

Belerofonte


Administrador
¿A qué te refieres con que sea 10 veces?



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]

#3 Re: Storage Cierto TIempo el Lun Feb 02, 2015 4:36 pm

Black Prada


Miembro
si como si fueran puntos asi mira belero

doCreatureSetStorage(cid, 89899, +10)

e tratado de contactarte para que me auxiles o me expliques algo pero nunca te e cnotnraro ya :/

#4 Re: Storage Cierto TIempo el Lun Feb 02, 2015 6:45 pm

Belerofonte


Administrador
A ver.
Usando las funciones de exhaustion, se puede otorgar un tiempo determinado adhiriéndole al jugador un StorageKey, y el StorageValue es usado para el tiempo. Lo que sería algo así:
Código:
 local StrKey, Tiempo = 89899, 5 -- StorageKey, Segundos.
function onUse(cid, item, fromPosition, toPosition)
    if exhaustion.get(cid, StrKey) == false then
        print('Accionado') -- Para Test ;D
        exhaustion.set(cid, StrKey, Tiempo)
     else
       print('En espera...') -- Para Test ;D
    end
  return true
end
Así se le agrega un StorageKey por X tiempo y pasado el cual, se le es removido automáticamente.
No es exactamente lo que pedías ya que el StorageValue está siendo sustituido por la cantidad de segundos, pero tal vez te sirva igualmente.
Usar sólo como "valor" el StorageKey.

(Si lo pones de esta forma, has de saber que has de testearlo con algún jugador normal porque el God no puede tener tiempo de exhaust, ergo, no se le agregará ningún storage.)

Y si le quieres añadir una cuenta atrás:
Pues se le añade esta función extraída de Otland: [Tienes que estar registrado y conectado para ver este vínculo]
Código:

  local StrKey, Tiempo = 89899, 5 -- StorageKey, Segundos.
  
function timeString(timeDiff)
  local dateFormat = {
    {"dia", timeDiff / 60 / 60 / 24},
    {"hora", timeDiff / 60 / 60 % 24},
    {"minuto", timeDiff / 60 % 60},
    {"segundo", timeDiff % 60}
  }

  local out = {}
    for k, t in ipairs(dateFormat) do
      local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' y ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end

  local ret = table.concat(out)
    if ret:len() < 16 and ret:find("segundo") then
      local a, b = ret:find(" y ")
        ret = ret:sub(b+1)
    end

  return ret
end

function onUse(cid, item, fromPosition, toPosition)
  local restante = exhaustion.get(cid, StrKey)
    if restante == false then
        print('Accionado') -- Para Test ;D
        exhaustion.set(cid, StrKey, Tiempo)
     else
       print('En espera... ' .. timeString(restante)) -- Para Test ;D
    end
  return true
end





Para hacer exactamente lo que pides, sería:
Código:
 local c = {
    StrKey = 89899, -- StorageKey
    StrValue = 10, -- StorageValue
    Tiempo = 5,-- Segundos
  }

local function forceSetPlayerStorageStart(cid, storage)
    if isPlayer(cid) then
        setPlayerStorageValue(cid, storage)
     else
       db.executeQuery("UPDATE `player_storage` SET `value` = '-1' WHERE `key` = '" .. storage .. "'") -- db.query
    end
  return true
end

function onUse(cid, item, fromPosition, toPosition)
    if getPlayerStorageValue(cid, c.StrKey) < c.StrValue then
        print('Accionado') -- Para Test ;D
        print('Storage: '.. getPlayerStorageValue(cid, c.StrKey)) -- Para Test ;D
        setPlayerStorageValue(cid, c.StrKey, c.StrValue)
        addEvent(forceSetPlayerStorageStart, c.Tiempo * 1000, cid, c.StrKey)
     else
       print('En espera...') -- Para Test ;D
       print('Storage: '.. getPlayerStorageValue(cid, c.StrKey)) -- Para Test ;D
    end
  return true
end

Si te da error, sustituye esta línea:
      db.executeQuery("UPDATE `player_storage` SET `value` = '-1' WHERE `key` = '" .. storage .. "'")

Por esta otra:
      db.query("UPDATE `player_storage` SET `value` = '-1' WHERE `key` = '" .. storage .. "'")

Las líneas en las que puse a su derecha "-- Para Test ;D" es solamente de prueba para que tú mismo te guíes según el tiempo y storage que le hayas puesto.
Por ejemplo...
Si accionas el objeto y el personaje no tiene el StorageValue 10, pues aparecerá en la consola:
[2/2/2015 23:50:50] Accionado
[2/2/2015 23:50:50] Storage: -1

Por el contrario, si accionas el objeto y el personaje sí tiene el StorageValue 10, pues aparecerá en la consola:
[2/2/2015 23:51:54] En espera...
[2/2/2015 23:51:54] Storage: 10

Por lo tanto, tras haber probado lo que quieras, se las quitas para que no salga siempre que accionen el script.

También recomiendo la primera opción ya que en ésta segunda, si se da la "casualidad" en la que se cierra el servidor teniéndo el jugador dicho StorageValue 10, pues no habrá forma de removérselo.

(En realidad sí, habría que poner otro script en el Login.lua para que si el jugador al conectarse sigue teniendo el StorageValue 10 aunque ya hayan pasado los 5 segundos, pues reiniciárselo.
Pero así, el jugador podría desconectarse/conectarse tantas veces como quiera para aprovecharse de eso y no tener que esperar los 5 segundos. Razón por la cual no puse el script y ahora no se me ocurre otra posible forma de solventarlo)



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]

#5 Re: Storage Cierto TIempo el Lun Feb 02, 2015 7:42 pm

Black Prada


Miembro
estoi provando el segundo script belero pero veo que si me sale en la consola el

[2/2/2015 18:10:2] En espera...
[2/2/2015 18:10:2] Storage: 50
pero no me lo agrega osea no me agrega los storages D: el player tiene 51 storages con los 10 que te dara el item deveria de tener 61 no? & como le puedo hacer tambien para que tenga exauted par que no se aviente dicho item muchas veces & asi se acumplen muchos storages

otra cosa si el player se echa el item para agregarsele dicho storage & se logea se le remueve autoamticamente el storage ?

muchas gracias por tu ayuda belero

#6 Re: Storage Cierto TIempo el Lun Feb 02, 2015 10:27 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:estoi provando el segundo script belero pero veo que si me sale en la consola el

[2/2/2015 18:10:2] En espera...
[2/2/2015 18:10:2] Storage: 50
Sí, ha de salir primero el otro mensaje de Accionado... y si le vuelves a dar antes de que se acabe el exhaust pues saldrá el "espera..." hasta que haya pasado el tiempo y entonces volverá a salir el "accionado". Incluso si el jugador se desconecta, también pasado el X tiempo se le removerá automáticamente el storage de la base de datos.

Me refería a que si en vez de lo anterior mencionado, cierras la consola.exe del servidor habiéndo algún jugador con X storage de ese script... pues no se le removerá pasado el tiempo. Por lo que no podrá volver a "accionarlo" nunca más hasta que tú manualmente le borres dicho storage.





[Tienes que estar registrado y conectado para ver este vínculo] escribió:Pero no me lo agrega osea no me agrega los storages D: el player tiene 51 storages con los 10 que te dara el item deveria de tener 61 no? & como le puedo hacer tambien para que tenga exauted par que no se aviente dicho item muchas veces & asi se acumplen muchos storages

Valep, creo entenderte mejor. O sea, quieres que por ejemplo:
El jugador usa el objeto y se le añade StorageValue = 10.
Si vuelve a usarlo antes del exhaust(por ejemplo sea de 5 segundo)s... no pasa nada.
Si vuelve a usarlo después del exhaust... se le suma otros 10 al anterior StorageValue, dando como resultado: 20.
Si transcurren 10 segundos desde que se usó el objeto... pues 10 valores serán restados al storage anterior, volviéndose a quedar en 10.
Y al volver a transcurrir otros 10 segundos, pues otros 10 valores serán restados al storage anterior... convirtiéndose en 0.
Y así sucesivamente, ¿no?.

Estoy intentándolo. Y de ser de esa forma anterior, tal vez no pueda conseguirlo D; ya que el que se acumulen los storages eso sí es fácil lo que me está costando es el que se remuevan los 10 cada X segundos. (Lo seguiré intentando. Y obviamente cualquiera que sepa y que lea ésto ha de saber que puede "adelantárseme" y poner su script sin problemas para intentar ayudarte)





[Tienes que estar registrado y conectado para ver este vínculo] escribió:Otra cosa si el player se echa el item para agregarsele dicho storage & se logea se le remueve autoamticamente el storage ?

Nop.



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]

#7 Re: Storage Cierto TIempo el Lun Feb 02, 2015 10:37 pm

Black Prada


Miembro
Valep, creo entenderte mejor. O sea, quieres que por ejemplo:
-El jugador usa el objeto y se le añade StorageValue = 10. asi es sde le agregaran del storge key: 88688 se le agregaran +10

-Si vuelve a usarlo antes del exhaust(por ejemplo sea de 5 segundo)s... no pasa nada. <-- correcto no podra le saldra cancel

-Si vuelve a usarlo después del exhaust... se le suma otros 10 al anterior StorageValue, dando como resultado: 20. <-- nop ya que cuando acaven los 5 segundo se le removeran los 10 storagesvalue que se le dieron ene ste caso fueron +10 entonces si lo vuelve usar le seguira otorgando +10 valla sin que se acumulen.

-Si transcurren 10 segundos desde que se usó el objeto... pues 10 valores serán restados al storage anterior, volviéndose a quedar en 10 <-- esto no lo entendi xD

-Y al volver a transcurrir otros 10 segundos, pues otros 10 valores serán restados al storage anterior... convirtiéndose en 0.

-Y así sucesivamente, ¿no?. <-- esto tampoco :/

#8 Re: Storage Cierto TIempo el Lun Feb 02, 2015 11:22 pm

Belerofonte


Administrador
Código:
  local c = {
    Exhaust = 79899, -- StorageKey usado para Exhaust.
    StrKey = 99899, -- StorageKey que gustes (Distinto al anterior)
    StrValue = 10, -- StorageValue sumado.
    Tiempo = 5,-- Segundos transcurridos para remover el StorageValue anterior & pueda volver a reutilizarse el objeto.
  }

local function forceSetPlayerStorageStart(cid, storage)
    if isPlayer(cid) then
        setPlayerStorageValue(cid, storage)
        print('Storage borrado: ' .. c.StrValue) -- Para Test ;D
        print('Storage actual: '.. getPlayerStorageValue(cid, storage)) -- Para Test ;D
     else
       db.executeQuery("UPDATE `player_storage` SET `value` = '-1' WHERE `key` = '" .. storage .. "'") -- db.query
    end
  return true
end

function onUse(cid, item, fromPosition, toPosition)
  local restante = exhaustion.get(cid, c.Exhaust)
  local getStrKey = getPlayerStorageValue(cid, c.StrKey)
    if restante == false then
        exhaustion.set(cid, c.Exhaust, c.Tiempo)
        if getStrKey == -1 or getStrKey == nil then
            setPlayerStorageValue(cid, c.StrKey, 0)
        end

        setPlayerStorageValue(cid, c.StrKey, (c.StrValue))
        addEvent(forceSetPlayerStorageStart, c.Tiempo * 1000, cid, c.StrKey)
        print('Storage sumado: ' .. c.StrValue) -- Para Test ;D
        print('Storage actual: '.. getPlayerStorageValue(cid, c.StrKey)) -- Para Test ;D
     else
        doPlayerSendCancel(cid, (restante > 0 and 'Has de esperar ' .. restante .. ' segundos.' or ''))
    end
  return true
end



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]

#9 Re: Storage Cierto TIempo el Jue Feb 05, 2015 12:55 pm

Black Prada


Miembro
belero lamento no aver repsondido al tema estuve ausente & ya me jalo men si me agrega los 10 puntos & tambien me los quita pasando lso 5 segundos

PERO:

si el jugador ya tiene 30 puntos & con el item le da use en el no le suba los 30 + los 10 puntos que se le agregaran al contrario le quita los 30 puntos que tenia & le pone 10 & cuandos e acava eltiempo lo deja en cero en ves de que solo quite los 10 puntos que otorgo remueve todos los storagekey

un gran saludo & muchisimas gracias por tu apoyo

#10 Re: Storage Cierto TIempo el Jue Feb 05, 2015 7:28 pm

Belerofonte


Administrador
Pues nada, chico, parece que tengo síndrome de down porque sigo sin entenderte... Mira:
En [Tienes que estar registrado y conectado para ver este vínculo] me dices...
[Tienes que estar registrado y conectado para ver este vínculo] escribió:el player tiene 51 storages con los 10 que te dara el item deveria de tener 61 no?

Luego, [Tienes que estar registrado y conectado para ver este vínculo] yo haciendo referencia al comentario anterior te digo...
[Tienes que estar registrado y conectado para ver este vínculo] escribió:El jugador usa el objeto y se le añade StorageValue = 10.
[Tienes que estar registrado y conectado para ver este vínculo] escribió:asi es sde le agregaran del storge key: 88688 se le agregaran +10

[Tienes que estar registrado y conectado para ver este vínculo] escribió:Si vuelve a usarlo después del exhaust... se le suma otros 10 al anterior StorageValue, dando como resultado: 20.

A lo que tú me respondes...
[Tienes que estar registrado y conectado para ver este vínculo] escribió:nop ya que cuando acaven los 5 segundo se le removeran los 10 storagesvalue que se le dieron ene ste caso fueron +10 entonces si lo vuelve usar le seguira otorgando +10 valla sin que se acumulen.

No sé, llámame loco pero yo ahí veo una señora contradicción. ¿No? Genius. 


Y en [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver este vínculo] escribió:si el jugador ya tiene 30 puntos & con el item le da use en el no le suba los 30 + los 10 puntos que se le agregaran al contrario le quita los 30 puntos que tenia & le pone 10 & cuandos e acava eltiempo lo deja en cero  en ves de que solo quite los 10 puntos que otorgo remueve todos los storagekey

Al ser así todo seguido sin signos de puntuación no sé si lo que estás diciendo es lo que hace el script o lo que quiéres que haga xD así que... poco más puedo hacer :/

Edit.
Bueno... relajemos los esfínteres.
Entonces... solamente SÍ será acumulable si ya se poseía X StorageValue desde antes de usar el objeto éste, ¿no?.
Y al volverlo a usar NO será acumulable, pues pasado el tiempo serán removidos los +10 volviéndose al valor X que se tendría de StorageValue antes de usar el objeto, ¿no?. Que en tal caso sería:
Código:
 local c = {
    Exhaust = 79899, -- StorageKey usado para Exhaust,
    StrKey = 99899, -- StorageKey que gustes (Distinto al anterior)
    StrValue = 10, -- StorageValue sumado.
    Tiempo = 5,-- Segundos transcurridos para remover el StorageValue anterior & pueda volver a reutilizarse el objeto.
  }

local function forceSetPlayerStorageStart(cid, storage, value)
    if isPlayer(cid) then
        setPlayerStorageValue(cid, storage, value)
        print('Storage borrado: ' .. c.StrValue) -- Para Test ;D
        print('Storage actual: ' .. getPlayerStorageValue(cid, storage)) -- Para Test ;D
     else
       db.executeQuery("UPDATE `player_storage` SET `value` = '" .. value .. "' WHERE `key` = '" .. storage .. "'") -- db.query
    end
  return true
end

function onUse(cid, item, fromPosition, toPosition)
  local restante = exhaustion.get(cid, c.Exhaust)
  local getStrKey = getPlayerStorageValue(cid, c.StrKey)
    if restante == false then
        exhaustion.set(cid, c.Exhaust, c.Tiempo)
        if getStrKey == -1 or getStrKey == nil then
            setPlayerStorageValue(cid, c.StrKey, 0)
        end

        setPlayerStorageValue(cid, c.StrKey, (c.StrValue + getStrKey))
        addEvent(forceSetPlayerStorageStart, c.Tiempo * 1000, cid, c.StrKey, (getPlayerStorageValue(cid, c.StrKey) - c.StrValue))
        print('Storage sumado: ' .. c.StrValue) -- Para Test ;D
        print('Storage actual: '.. getPlayerStorageValue(cid, c.StrKey)) -- Para Test ;D
     else
        doPlayerSendCancel(cid, (restante > 0 and 'Has de esperar ' .. restante .. ' segundos.' or ''))
    end
  return true
end



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]

#11 Re: Storage Cierto TIempo el Jue Feb 05, 2015 11:55 pm

Black Prada


Miembro
jajaajjajaajajajajajaja una sincera disculpa belero & hiciste que me riera a pesar de mis problemas te lo agradesco hermano gracais por no desesperarte ;3 & ya ya jalo bien ;3 amigo teamo<3 otra cosa cuando podras echarme la mano con lo denl npcs que me hiciste tea ceurdas? que tenia que tener las coas en oerden xD

#12 Re: Storage Cierto TIempo Hoy a las 10:54 pm

Contenido patrocinado


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

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

 

¿Quién está en línea?

En total hay 1 usuario en línea: 0 Registrados, 0 Ocultos y 1 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 .