BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

RESUELTO Quest que se haga cada 24 horas

RESUELTO Quest que se haga cada 24 horas

#1 RESUELTO Quest que se haga cada 24 horas el Sáb Nov 22, 2014 4:34 pm

bobon55


Miembro
tengo un ot exp alta y me gustaria colocar un cofre en el templo que de 50 crystal y que puedas abrilo cada 24 horas, gracias.



Última edición por bobon55 el Mar Nov 25, 2014 12:14 am, editado 1 vez

#2 Re: RESUELTO Quest que se haga cada 24 horas el Sáb Nov 22, 2014 7:08 pm

enrikito15


Miembro
actions.xml
Código:
<action uniqueid="5958" event="script" value="nombredelarchivo.lua"/>
actions/scripts/crean su archivo.lua
y dentro ponen
Código:
function onUse(cid, item, fromPosition, itemEx, toPosition)
pos = {x=1000, y=1000, z=7}    -------posicion ala que te mandara al abrir el cofre
local time = 1000
local time = getPlayerStorageValue(cid, 13541)
    if (daily == -1) then
            daily = 0
    end
    if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then
        doPlayerAddItem(cid, 5958, 1)
        time = 3000
        setPlayerStorageValue(cid, 13540, time) 
        doTeleportThing(cid,pos)
        setPlayerStorageValue(cid, 13541, daily+1)
        exhaustion.set(cid, storage, time)
        local time = getPlayerStorageValue(cid, 13541)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You done your " .. daily .. " Daily Quest. You got 1 level scroll.")
    else
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You must wait 30 Minutes to get your daily quest. Next avaiable will be at: " .. os.date("%H:%M:%S", getPlayerStorageValue(cid, 13540)) .. ".")
    end
    return true
end
para q funcione le pones uniqueid 5958 al cofre

Creditos @Itachi

#3 Re: RESUELTO Quest que se haga cada 24 horas el Sáb Nov 22, 2014 7:49 pm

bobon55


Miembro
donde coloco el id de las crystal y la cantidad?

#4 Re: RESUELTO Quest que se haga cada 24 horas el Sáb Nov 22, 2014 8:21 pm

enrikito15


Miembro
doPlayerAddItem(cid, 5958, 1)
El id de los crystal
La cantidad de los crystal

#5 Re: RESUELTO Quest que se haga cada 24 horas el Dom Nov 23, 2014 7:39 pm

bobon55


Miembro
Gracias bro.

#6 Re: RESUELTO Quest que se haga cada 24 horas el Lun Nov 24, 2014 2:24 pm

Black Prada


Miembro
esta es un arma de dos filos ya que muchsos pueden hacerse cuentas o demaciadas cuetna scon characters & agarrar con cada uno los 50 ccs

#7 Re: RESUELTO Quest que se haga cada 24 horas el Mar Nov 25, 2014 12:49 am

bobon55


Miembro
Es cierto black prada por eso decidi no hacerla, ya luego que consegui la solucion, si otros quieren hacerlo ahi esta la solucion, que nos dio enrikikito.

#8 Re: RESUELTO Quest que se haga cada 24 horas el Mar Nov 25, 2014 5:19 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Es cierto black prada por eso decidi no hacerla, ya luego que consegui la solucion, si otros quieren hacerlo ahi esta la solucion, que nos dio enrikikito.
¿Y por qué tirar ya la toalla? :c todo script es moldeable.

(Si no lo tienes ya) Data/Lib/... 050-function.lua: (lo pegas en cualquier parte que no entre en conflicto con los demás scripts, arriba del todo mismo)
Código:
function timeString(timeDiff)
  local dateFormat = {
    {"day", timeDiff / 60 / 60 / 24},
    {"hour", timeDiff / 60 / 60 % 24},
    {"minut", timeDiff / 60 % 60},
    {"second", 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("second") then
      local a, b = ret:find(" y ")
      ret = ret:sub(b+1)
    end
  return ret
end

Data/Actions/... Actions.xml:
Código:
<action uniqueid="4779" event="script" value="chest 24h.lua"/>

Data/Actions/Scripts/... chest 24h.lua:
Código:
local c = {
    Storage = 10540, -- Número del StorageKey que gustes.
    Premio = {ID = 2160, Count = 1}, -- ID del objeto entregado & Cantidad del cuál.
    Tiempo = 1, -- Días a esperar para la próxima entrega.
  }

  local globalExhaust = {
    get = function (storage)
      local exhaust = getGlobalStorageValue(storage)
        if(exhaust > 0) then
          local left = exhaust - os.time()
            if(left >= 0) then
              return left
            end
        end
      return false
    end,
    set = function (storage, time)
        setGlobalStorageValue(storage, os.time() + time)
    end
  }

function onUse(cid, item, position, fromPosition, itemEx, toPosition)
  local accID, nIP = getPlayerAccountId(cid), getPlayerIp(cid)
  local Belero = {
    [c.Storage+1] = {accID},
    [c.Storage+2] = {nIP},
  }

    if accID == getGlobalStorageValue(c.Storage+1) or nIP == getGlobalStorageValue(c.Storage+2) then
        if globalExhaust.get(c.Storage) then
            doPlayerSendCancel(cid, (globalExhaust.get(c.Storage) > 0 and "You must wait " .. timeString(globalExhaust.get(c.Storage)) .. " to get your daily chest." or nil))
          return true
        end
     else
 for k, v in pairs(Belero) do
            setGlobalStorageValue(k, v[1])
            globalExhaust.set(c.Storage, c.Tiempo * 24 * 60 * 60)
            addEvent(setGlobalStorageValue, c.Tiempo * 24 * 60 * 60 * 1000, k, -1)
        end

        doPlayerAddItem(cid, c.Premio.ID, c.Premio.Count)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have done your daily chest.\nYou have got " .. c.Premio.Count .. " " .. (c.Premio.Count > 1 and getItemPluralNameById(c.Premio.ID) or getItemNameById(c.Premio.ID)) .. "!")
    end
  return true
end

Instrucción:
local c = {
   Storage = 10540, -- Número del StorageKey que gustes.
   Premio = {ID = 2160, Count = 1}, -- ID del objeto entregado & Cantidad del cuál.
   Tiempo = 1, -- Días a esperar para la próxima entrega.
 }

Así, si el jugador cambia de personaje (o elige otro personaje de otra cuenta distinta) y le vuelve a dar al cofre, le aparecerá la misma cuenta atrás de tiempo restante que le falte desde que le dio por primera vez con el otro personaje.

Claro que, ahora la pega sería que podrán burlarlo solo con cambiar de IP y de Account Okay pero algo es algo...



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: RESUELTO Quest que se haga cada 24 horas el Mar Nov 25, 2014 5:30 pm

bobon55


Miembro
Gracias, ayudame con mis demas problemas por fa aqui estan los post

[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]

#10 Re: RESUELTO Quest que se haga cada 24 horas el Mar Dic 30, 2014 8:17 pm

Kriss


Miembro
no sirve le están picando y te esta dando item

#11 Re: RESUELTO Quest que se haga cada 24 horas el Mar Dic 30, 2014 8:21 pm

Kriss


Miembro
[30/12/2014 18:49:55] [Error - Action Interface]
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:onUse
[30/12/2014 18:49:55] Description:
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:45: attempt to index field 'Premio' (a nil value)
[30/12/2014 18:49:55] stack traceback:
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:45: in function
[30/12/2014 18:50:09] Reloaded actions.

#12 Re: RESUELTO Quest que se haga cada 24 horas el Mar Dic 30, 2014 8:41 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:[30/12/2014 18:49:55] [Error - Action Interface]
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:onUse
[30/12/2014 18:49:55] Description:
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:45: attempt to index field 'Premio' (a nil value)
[30/12/2014 18:49:55] stack traceback:
[30/12/2014 18:49:55] data/actions/scripts/chest 24h.lua:45: in function
[30/12/2014 18:50:09] Reloaded actions.
Expón el script exactamente como lo hayas editado...



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]

#13 Re: RESUELTO Quest que se haga cada 24 horas el Miér Dic 31, 2014 3:02 am

Kriss


Miembro
Belero lo puse asi como lo pusiste solo le agregue otra linia para que de 2 premios en vez de uno pero el bug solo funciona si 2 players le estan dando click al mismo tiempo y luego le agregue un tp (doteleportthin...) para que al darle click te lleven a xxx cordenada y evitar el bug pero esta peor asi cada ves que lo usas te lleva a la cordenada y te da el item ya no ocupas de 2 players que le esten dando click puse los libs puse el scrpt intente arreglarlo pero no da ps uso ffs 8.6

#14 Re: RESUELTO Quest que se haga cada 24 horas el Miér Dic 31, 2014 5:46 am

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Belero lo puse asi como lo pusiste solo le agregue otra linia para que de 2 premios en vez de uno pero el bug solo funciona si 2 players le estan dando click al mismo tiempo y luego le agregue un tp (doteleportthin...) para que al darle click te lleven a xxx cordenada y evitar el bug pero esta peor asi cada ves que lo usas te lleva a la cordenada y te da el item ya no ocupas de 2 players que le esten dando click puse los libs puse el scrpt intente arreglarlo pero no da ps uso ffs 8.6

Bueno, entonces no puedes decir que el script esté mal si lo has editado tú mismo a tu manera xD serán errores tuyos...
Por eso, si me pasas el script como lo pusiste tal vez lo pueda arreglar. Pero si solo vienes a decirme que el script está mal sin ponerme como lo hayas hecho... nada puedo hacer.



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]

#15 Re: RESUELTO Quest que se haga cada 24 horas el Lun Ene 05, 2015 8:57 pm

Kriss


Miembro
aqui esta el code:
Código:

local c = {

    Storage = 10540, -- Número del StorageKey que gustes.
    Premio = {ID = 8306, Count = 3}, -- ID del objeto entregado & Cantidad del cuál.
    Premio2 = {ID = 10570, Count = 2}, -- ID del objeto entregado & Cantidad del cuál.
    Tiempo = 1, -- Días a esperar para la próxima entrega.
  }
   pos = {x=1029, y=912, z=6}

  local globalExhaust = {
    get = function (storage)
      local exhaust = getGlobalStorageValue(storage)
        if(exhaust > 0) then
          local left = exhaust - os.time()
            if(left >= 0) then
              return left
            end
        end
      return false
    end,
    set = function (storage, time)
        setGlobalStorageValue(storage, os.time() + time)
    end
  }

function onUse(cid, item, position, fromPosition, itemEx, toPosition)
  local accID, nIP = getPlayerAccountId(cid), getPlayerIp(cid)
  local Belero = {
    [c.Storage+1] = {accID},
    [c.Storage+2] = {nIP},
  }

    if accID == getGlobalStorageValue(c.Storage+1) or nIP == getGlobalStorageValue(c.Storage+2) then
        if globalExhaust.get(c.Storage) then
            doPlayerSendCancel(cid, (globalExhaust.get(c.Storage) > 0 and "You must wait " .. timeString(globalExhaust.get(c.Storage)) .. " to get your daily chest." or nil))
          return true
        end
    else
 for k, v in pairs(Belero) do
            setGlobalStorageValue(k, v[1])
            globalExhaust.set(c.Storage, c.Tiempo * 24 * 60 * 60)
            addEvent(setGlobalStorageValue, c.Tiempo * 24 * 60 * 60 * 1000, k, -1)
        end

        doPlayerAddItem(cid, c.Premio.ID, c.Premio.Count)
        doPlayerAddItem(cid, c.Premio2.ID, c.Premio2.Count)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have done your daily chest.\nYou have got " .. c.Premio.Count .. " " .. (c.Premio.Count > 1 and getItemPluralNameById(c.Premio.ID) or getItemNameById(c.Premio.ID)) .. "!")
            doTeleportThing(cid,pos)
end
  return true
end

#16 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 12:48 pm

Kriss


Miembro
@up

#17 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 2:04 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:
aqui esta el code:
Código:

local c = {

    Storage = 10540, -- Número del StorageKey que gustes.
    Premio = {ID = 8306, Count = 3}, -- ID del objeto entregado & Cantidad del cuál.
    Premio2 = {ID = 10570, Count = 2}, -- ID del objeto entregado & Cantidad del cuál.
    Tiempo = 1, -- Días a esperar para la próxima entrega.
  }
   pos = {x=1029, y=912, z=6}

  local globalExhaust = {
    get = function (storage)
      local exhaust = getGlobalStorageValue(storage)
        if(exhaust > 0) then
          local left = exhaust - os.time()
            if(left >= 0) then
              return left
            end
        end
      return false
    end,
    set = function (storage, time)
        setGlobalStorageValue(storage, os.time() + time)
    end
  }

function onUse(cid, item, position, fromPosition, itemEx, toPosition)
  local accID, nIP = getPlayerAccountId(cid), getPlayerIp(cid)
  local Belero = {
    [c.Storage+1] = {accID},
    [c.Storage+2] = {nIP},
  }

    if accID == getGlobalStorageValue(c.Storage+1) or nIP == getGlobalStorageValue(c.Storage+2) then
        if globalExhaust.get(c.Storage) then
            doPlayerSendCancel(cid, (globalExhaust.get(c.Storage) > 0 and "You must wait " .. timeString(globalExhaust.get(c.Storage)) .. " to get your daily chest." or nil))
          return true
        end
    else
 for k, v in pairs(Belero) do
            setGlobalStorageValue(k, v[1])
            globalExhaust.set(c.Storage, c.Tiempo * 24 * 60 * 60)
            addEvent(setGlobalStorageValue, c.Tiempo * 24 * 60 * 60 * 1000, k, -1)
        end

        doPlayerAddItem(cid, c.Premio.ID, c.Premio.Count)
        doPlayerAddItem(cid, c.Premio2.ID, c.Premio2.Count)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have done your daily chest.\nYou have got " .. c.Premio.Count .. " " .. (c.Premio.Count > 1 and getItemPluralNameById(c.Premio.ID) or getItemNameById(c.Premio.ID)) .. "!")
            doTeleportThing(cid,pos)
end
  return true
end

Ok. Prueba a poner:
Servidor/Data/Lib/... 050-function.lua (si no lo tienes ya)
Código:
function getItemsFromList(items) -- by Vodka
  local str = ''
    if table.maxn(items) > 0 then
      for i = 1, table.maxn(items) do
        str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
        if i ~= table.maxn(items) then
      str = str .. ', ' end end end
  return str
end

Luego, en el script del chest, es decir, Servidor/Data/Actions/Scripts/... Chest 24h.lua
Código:
  local c = {
    Storage = 10540, -- Número del StorageKey que gustes.
    Tiempo = 1, -- Días a esperar para la próxima entrega.
    Pos = {x=1029, y=912, z=6}, -- Lugar hacia donde teletransportará.
    Premio = { -- {ID del Objeto entregado, Cantidad del cual},
        {8309, 3}, -- Nail x3
        {10570, 2}, -- Which Hat x2
    },
  }

  local globalExhaust = {
    get = function (storage)
      local exhaust = getGlobalStorageValue(storage)
        if(exhaust > 0) then
          local left = exhaust - os.time()
            if(left >= 0) then
              return left
            end
        end
      return false
    end,
    set = function (storage, time)
        setGlobalStorageValue(storage, os.time() + time)
    end
  }

function onUse(cid, item, position, fromPosition, itemEx, toPosition)
  local accID, nIP = getPlayerAccountId(cid), getPlayerIp(cid)
  local Belero = {
    [c.Storage+1] = {accID},
    [c.Storage+2] = {nIP},
  }

    if accID == getGlobalStorageValue(c.Storage+1) or nIP == getGlobalStorageValue(c.Storage+2) then
        if globalExhaust.get(c.Storage) then
            doPlayerSendCancel(cid, (globalExhaust.get(c.Storage) > 0 and "You must wait " .. timeString(globalExhaust.get(c.Storage)) .. " to get your daily chest." or nil))
          return true
        end
    else
        for k, v in pairs(Belero) do
            setGlobalStorageValue(k, v[1])
            globalExhaust.set(c.Storage, c.Tiempo * 24 * 60 * 60)
            addEvent(setGlobalStorageValue, c.Tiempo * 24 * 60 * 60 * 1000, k, -1)
        end

        for _, v in ipairs(c.Premio) do
            doPlayerAddItem(cid, v[1], v[2])
        end

        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have done your daily chest.\nYou have got " .. getItemsFromList(c.Premio) .. "!")
        doTeleportThing(cid, c.Pos)
    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]

#18 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 7:24 pm

Kriss


Miembro
error quite el lib anterior y puse el que me dijiste debo tener los 2?
lib anterior:
Código:
function timeString(timeDiff)
  local dateFormat = {
    {"day", timeDiff / 60 / 60 / 24},
    {"hour", timeDiff / 60 / 60 % 24},
    {"minut", timeDiff / 60 % 60},
    {"second", 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("second") then
      local a, b = ret:find(" y ")
      ret = ret:sub(b+1)
    end
  return ret
end

lib actual:
Código:
function getItemsFromList(items) -- by Vodka
  local str = ''
    if table.maxn(items) > 0 then
      for i = 1, table.maxn(items) do
        str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
        if i ~= table.maxn(items) then
      str = str .. ', ' end end end
  return str
end

Código:
[20/01/2015 17:51:15] [Error - Action Interface]
[20/01/2015 17:51:15] data/actions/scripts/chest 24h.lua:onUse
[20/01/2015 17:51:15] Description:
[20/01/2015 17:51:15] data/actions/scripts/chest 24h.lua:36: attempt to call global 'timeString' (a nil value)
[20/01/2015 17:51:15] stack traceback:
[20/01/2015 17:51:15]    data/actions/scripts/chest 24h.lua:36: in function <data/actions/scripts/chest 24h.lua:27>

#19 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 8:48 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:error quite el lib anterior y puse el que me dijiste debo tener los 2?
Nop, no debes de quitar nada. Solamente añadir ese script si no lo tienes ya.
Añadirlo en cualquier lugar del 050-functions.lua sin que entre como en conflicto con los demás scripts que tengas, por ejemplo, arriba del todo.

El anterior era para que salga el tiempo restante para volver a pillar los objetos del cofre y éste otro para que salga en el mensaje automáticamente el nombre y cantidad de cada uno de los objetos entregados, expuestos en la tabla de configuraciones de arriba.
Ambos necesarios y ninguna relación entre ellos.



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]

#20 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 9:04 pm

Kriss


Miembro
al parecer ya gracias amigo te dejo tu rep

#21 Re: RESUELTO Quest que se haga cada 24 horas el Mar Ene 20, 2015 9:06 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:
al parecer ya gracias amigo te dejo tu rep

Pudiendo así añadir tantas líneas como quieras, como las anteriores sin tener que especificar luego el nombre y cantidad de cada uno en el mensaje.
local c = {
   Storage = 10540, -- Número del StorageKey que gustes.
   Tiempo = 1, -- Días a esperar para la próxima entrega.
   Pos = {x=1029, y=912, z=6}, -- Lugar hacia donde teletransportará.
   Premio = { -- {ID del Objeto entregado, Cantidad del cual},
       {8309, 3}, -- Nail x3
       {10570, 2}, -- Which Hat x2

   },
 }

[Tienes que estar registrado y conectado para ver esa imagen]
TEMA CERRADO
¡Solucionado!



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]

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 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 .