• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Moveevents] Ayuda con item

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1[Moveevents] Ayuda con item Empty [Moveevents] Ayuda con item Sáb Mayo 13, 2023 5:00 pm

    diegoduran

    diegoduran
    Miembro
    Miembro
    Requiero que un item le de + capacidad al personaje, por ejemplo tienes 500 de cap, te pones un anillo "por ejemplo", y tu cap sube a 1500 el anillo te da 1000 de cap. alguien sabe como hacerlo? supongo que es un movement.

    2 participantes
    https://www.facebook.com/diegoduran95

    2[Moveevents] Ayuda con item Empty Re: [Moveevents] Ayuda con item Dom Mayo 14, 2023 12:10 am

    zerochile

    zerochile
    Miembro
    Miembro
    Deberías incluir en tu publicación que consola estas usando, OTX o TFS... Pero bueno, dependiendo de que versión estes usando si OTX 2 o TFS 1.X+ el código es distinto.

    VAMOS A SUPONER QUE ESTAS USANDO OTX 2 (TFS 0.3.7 / 0.4)

    Para fijarte los tipos de códigos o funciones internas que pueda tener la consola, solamente debes de fijarte en su archivo luascript.cpp... Podemos encontrar:

    Código:
    int32_t LuaInterface::luaDoPlayerSetMaxCapacity(lua_State* L)
    {
     //doPlayerSetMaxCapacity(uid, cap)
     double cap = popFloatNumber(L);

     ScriptEnviroment* env = getEnv();
     if(Player* player = env->getPlayerByUID(popNumber(L)))
     {
     player->setCapacity(cap);
     lua_pushboolean(L, true);
     }
     else
     {
     errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
     lua_pushboolean(L, false);
     }

     return 1;
    }

    Este código (como ya bien se entiende) modifica el límite de capacidad. Lo usaras para lo que gustes...

    Un ejemplo de cómo sería el script en OTX 2 (TFS 0.3.7 / 0.4), seria:

    data/movements/movements.xml
    Código:
    <!-- Cap Ring -->
     <movevent type="Equip" itemid="2179" slot="ring" event="script" value="cap ring.lua"/>
     <movevent type="DeEquip" itemid="2179" slot="ring" event="script" value="cap ring.lua"/>

    data/movements/scripts/cap ring.lua
    Código:
    local configZERO = {
    capAdicionada = 1000, -- Valor de capacidad que se agregara
    enviarMensaje = true, -- Para poder enviar un mensaje al colocarte el anillo
    class = MESSAGE_EVENT_ADVANCE, -- Tipo de mensaje
    mensaje = "Tu capacidad ha aumentado debido al anillo que te has colocado!", -- Mensaje que se enviara si "enviarMensaje" esta activado
    }

    local function getPlayerCap(playerId)
        local query = db.getResult("SELECT `cap` FROM `players` WHERE `id` = " .. playerId .. "")
        if query:getID() ~= -1 then
            local cap = query:getDataInt("cap")
            query:free()
            return cap
        end
        return 0
    end

    function onEquip(cid, item, slot, boolean)
     if(boolean) then
     return true
     end
     
     -- Esto es para que se te guarde el player, si no lo guardas no se actualizara "capacity" o los otros valores en la base de datos.
     doPlayerSave(cid, true)
     
     -- Algunas formulas
     local getActualCap = getPlayerCap(getPlayerGUID(cid))
     local calcularCap = (getActualCap + configZERO.capAdicionada)
     
     -- Enviar un mensaje si es que tienes activo "enviarMensaje"
     if (configZERO.enviarMensaje) then
     doPlayerSendTextMessage(cid, configZERO.class, configZERO.mensaje .. "\n\nNueva capacidad: " .. calcularCap)
     end
     
     -- Aplicando capacidad
     doPlayerSetMaxCapacity(cid, calcularCap)
     return true
    end

    function onDeEquip(cid, item, slot, boolean)
     -- Lo mismo para guardar los stats del player
     doPlayerSave(cid, true)
     
     -- Mismas formulas
     local getActualCap = getPlayerCap(getPlayerGUID(cid))
     local calcularCap = (getActualCap - configZERO.capAdicionada)
     
     -- Disminuyendo capacidad
     doPlayerSetMaxCapacity(cid, calcularCap)
     return true
    end


    2 participantes
    http://venore-war.sytes.net

    3[Moveevents] Ayuda con item Empty Re: [Moveevents] Ayuda con item Dom Mayo 14, 2023 4:52 am

    diegoduran

    diegoduran
    Miembro
    Miembro
    al reloggear la capacidad se stackea, no se queda fija.. siempre aumenta cada vez que haces un relog si tienes el item puesto[Moveevents] Ayuda con item Help10

    2 participantes
    https://www.facebook.com/diegoduran95

    4[Moveevents] Ayuda con item Empty Re: [Moveevents] Ayuda con item Dom Mayo 14, 2023 4:13 pm

    zerochile

    zerochile
    Miembro
    Miembro
    El problema es que en TFS 0.4 los movements se manejan de distinta forma que en OTX 2, y como el código lo hice para OTX 2, entonces lo de:
    al reloggear la capacidad se stackea, no se queda fija.. siempre aumenta cada vez que haces un relog si tienes el item puesto
    No sucedía... Bueno, en fin.

    Le agregue solamente una verificación por storage ya que en TFS 0.4 se maneja distinto.

    cap ring.lua -- TFS 0.4 (3777)
    Código:
    local configZERO = {
    capAdicionada = 1000, -- Valor de capacidad que se agregara.
    enviarMensaje = true, -- Para poder enviar un mensaje al colocarte el anillo.
    class = MESSAGE_EVENT_ADVANCE, -- Tipo de mensaje.
    mensaje = "Tu capacidad ha aumentado debido al anillo que te has colocado!", -- Mensaje que se enviara si "enviarMensaje" esta activado.
    capRingStorage = 453232, -- No mover a menos que sepas.
    }

    local function getPlayerCap(playerId)
        local query = db.getResult("SELECT `cap` FROM `players` WHERE `id` = " .. playerId .. "")
        if query:getID() ~= -1 then
            local cap = query:getDataInt("cap")
            query:free()
            return cap
        end
        return 0
    end

    function onEquip(cid, item, slot, boolean)
       if(boolean) then
          return true
       end
       
       -- Le coloco verificacion por storage por que en TFS 0.4 se bugea el movement
       if getPlayerStorageValue(cid, configZERO.capRingStorage) < 1 then
          setPlayerStorageValue(cid, configZERO.capRingStorage, 1)
          
          -- Esto es para que se te guarde el player, si no lo guardas no se actualizara "capacity" o los otros valores en la base de datos.
          doPlayerSave(cid, true)
          
          -- Algunas formulas
          local getActualCap = getPlayerCap(getPlayerGUID(cid))
          local calcularCap = (getActualCap + configZERO.capAdicionada)
          
          -- Enviar un mensaje si es que tienes activo "enviarMensaje"
          if (configZERO.enviarMensaje) then
             doPlayerSendTextMessage(cid, configZERO.class, configZERO.mensaje .. "\n\nNueva capacidad: " .. calcularCap)
          end
          
          -- Aplicando capacidad
          doPlayerSetMaxCapacity(cid, calcularCap)
       end
          
       return true
    end

    function onDeEquip(cid, item, slot, boolean)
       -- Lo mismo para guardar los stats del player
       doPlayerSave(cid, true)
       
       setPlayerStorageValue(cid, configZERO.capRingStorage, 0)
       
       -- Mismas formulas
       local getActualCap = getPlayerCap(getPlayerGUID(cid))
       local calcularCap = (getActualCap - configZERO.capAdicionada)
       
       -- Disminuyendo capacidad
       doPlayerSetMaxCapacity(cid, calcularCap)
       return true
    end

    2 participantes
    http://venore-war.sytes.net

    5[Moveevents] Ayuda con item Empty Re: [Moveevents] Ayuda con item Lun Mayo 15, 2023 1:48 am

    diegoduran

    diegoduran
    Miembro
    Miembro
    cuando nunca me he puesto el anillo mi cap base es de 3725[Moveevents] Ayuda con item S110



    cuando me pongo el anillo por primera vez mi cap aumenta a 4725[Moveevents] Ayuda con item S210



    pero cuando reinicio el servidor (Cierro y vuelvo a abrir la consola) mi personaje aun con el anillo puesto mi cap base baja nuevamente a 3725 con todo y el anillo.[Moveevents] Ayuda con item S310

    2 participantes
    https://www.facebook.com/diegoduran95

    6[Moveevents] Ayuda con item Empty Re: [Moveevents] Ayuda con item Lun Mayo 15, 2023 5:30 pm

    zerochile

    zerochile
    Miembro
    Miembro
    El script está bien, funciona para:

    TFS 0.4 (3777): Click Aqui
    OTX 2.15: Click Aqui

    El problema puede ser que tu consola no este tomando el "boolean", es el tipo de consola que debes tener... [Moveevents] Ayuda con item 1f634 

    Para solucionar tu problema que "al conectar no te agrega la capacidad", tendrás que: 

    Pasar la función "getPlayerCap" a un nuevo lib (en data/lib) llamado new_functions.lua (puedes copiar y pegar uno, le borras todo lo que tenga dentro, después vas colocando funciones propias ahí).

    Después en data/creaturescripts/scripts/login.lua le agregas esto:
    Código:
    -- Cap ring login
    local capRingStorage = 453232
    local capAdicionada = 1000
    if getPlayerStorageValue(cid, capRingStorage) >= 1 then
       local getActualCap = getPlayerCap(getPlayerGUID(cid))
       local calcularCap = (getActualCap + capAdicionada)
       
       -- Colocando la capacidad
       doPlayerSetMaxCapacity(cid, calcularCap)
    end

    Aun así, te recomiendo cambiar esa consola a una de las que te mencione antes, mejor para tener actualizado tu server, así evitas posibles bugs por las consolas antiguas e incompatibilidades...
    Laughing

    2 participantes
    http://venore-war.sytes.net

    Contenido patrocinado


    2 participantes

    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.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).