• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [TFS 1.x] open world style chests

    Compartir:

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

    1[TFS 1.x] open world style chests Empty [TFS 1.x] open world style chests Dom Oct 21, 2018 9:28 pm

    Raken Stroyer

    Raken Stroyer
    Miembro
    Miembro
    ¿Recuerdas todos esos juegos de rol donde solías encontrar cofres con botín aleatorio en áreas llenas de enemigos?
    Bueno, esto es lo que hace este script adaptado al estilo multijugador de otros servidores.

    ¡Advertencia! ¡Establece una identificación única para el cofre para que nadie pueda moverse o tomarla!

    Entonces, ¿qué hace este script?
    - un jugador abre un cofre, genera elementos en su interior, funciona como un cofre normal hasta que pasa cierto tiempo (1 hora en el guión, puede cambiarse)
    - si usted o cualquier jugador abre ese cofre dentro de esa hora - se comporta como un cofre normal.
    - Si usted o cualquier otro jugador abren ese cofre después de 1 h, se eliminarán todos los elementos que haya dentro y se generará un nuevo botín.

    ¿Qué puede hacer con él?
    - Los elementos generados pueden depender de las habilidades, misiones realizadas, nivel, estadísticas de suerte basadas en el almacenamiento, beneficios, etc.
    - Un cofre puede realizar otras acciones como invocar algo, infligir daño, etc.

    ¡Advertencia!
    La secuencia de comandos puede entrar en conflicto con algunos sistemas de búsqueda.
    Asegúrese de probar este script con sus sistemas de búsqueda antes de agregarlo a su servidor.


    actions.xml
    Código:

    <action actionid="7895" script="openworldchest.lua"/>

    openworldchest.lua
    Código:

    if not worldchests then
        worldchests = {}
    end
     
    if not table.find then
        table.find = function(table, value)
            for i, v in pairs(table) do
                if v == value then
                    return i
                end
            end
            return nil
        end
    end
     
    function Container:clear()
        for i = 0, self:getItemHoldingCount() - 1 do
            self:getItem(0):remove()
        end
        return true
    end
     
    local interval = 3600 -- time to generate new loot (in seconds)
    local actionid = 7895 -- actionid to assign in RME
    local allowDuplicates = false -- for default setting
     
    -- uid will serve as chest identificator. It will prevent moving the chest and will allow to make every chest script unique.
     
    local defaultrewards = {
    -- id, chance(100000 = 100.000%), countmax(default 1)
    {2148, 45000, 50}, -- gold coin
    {2152, 10000, 10}, -- platinum coin
    {2398, 60000}, -- mace
    {2187, 450}, -- wand of inferno
    {2197, 3000} -- stone skin amulet
    }
    function onUse(player, item, fromPosition, target, toPosition, isHotkey)
        if item.actionid ~= actionid then
            return false
        end
      
        if not worldchests[item.uid] then
            worldchests[item.uid] = 0
        end
     
        if os.time() < worldchests[item.uid] then
            return false
        end
      
        worldchests[item.uid] = os.time() + interval
        local c = Container(item.uid)
      
        local clear = true -- put "clear = false" in your unique chest "if" statement if you plan to not use "return false"
      
        -- unique chest action example
        if item.uid == 27500 then
            c:clear()
            -- chest with gold in random amounts only
            local newitem = defaultrewards[1]
            for i = 1, math.random(1, 10) do
                if math.random(1, 100000) < newitem[2] then
                    local count = 1
                    if newitem[3] then
                        count = math.random(1, newitem[3])
                    end
                    c:addItem(newitem[1], count)
                end
            end
          
            -- clear = false -- see local clear
            return false -- if you put return here, default action below won't be executed
        end
      
        -- you can put other unique chests here
        -- if you forget return false, default action will also be executed
      
        -- default action
        local items = 0
        local maxItems = math.random(0, 5)
        local attempts = 0
        local dupcheck = {}
      
        if clear then
            c:clear()
        end
      
        while (items <= maxItems) and (items <= #defaultrewards) and (attempts < 1000) do
            local nid = math.random(1, #defaultrewards)
            local newitem = defaultrewards[nid]
            if allowDuplicates or not table.find(dupcheck, nid) then
                if math.random(1, 100000) < newitem[2] then
                    local count = 1
                    if newitem[3] then
                        count = math.random(1, newitem[3])
                    end
                  
                    c:addItem(newitem[1], count)
                  
                    if not allowduplicates then
                        table.insert(dupcheck, nid)
                    end
                  
                    items = items + 1
                end
              
            end
          
            attempts = attempts + 1
        end
      
        return false
    end
     

    2 participantes

    2[TFS 1.x] open world style chests Empty Re: [TFS 1.x] open world style chests Dom Oct 21, 2018 10:32 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    gran aporte +1 (y)



    [TFS 1.x] open world style chests YNU5B25
    2 participantes
    http://www.tibiaface.com

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