Ir para conteúdo
  • Cadastre-se

(Resolvido)Script alavanca


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Iae galera do TibiaKing, estou precisando de uma script de teleport por alavanca com intervalo de 20horas, no caso eu queria que ela só funcionasse com 5 player nos tiles... 

Meu TFS e 1.3

 

 

 

 

Editado por Bruno Asap (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

Como você não detalhou se o intervalo de 20 horas é para todos os players ou para os players que foram teleportados, assumi que fosse para os players que foram teleportados.

Não tive como testar, fiz aqui rapidão.

 

Em data/actions/scripts crie um arquivo.lua e cole isto dentro:

 

Spoiler

local t = {
    players = { -- posições que os players devem ficar ao puxar a alavanca
        [1] = Position(1,1,1),
        [2] = Position(1,1,1),
        [3] = Position(1,1,1),
        [4] = Position(1,1,1),
        [5] = Position(1,1,1)
    },
    
    boss = {name = "Dwarf Guard", create_pos = Position(1,1,1)},
  
    destination = Position(1,1,1), -- posição para qual os players serão teleportados
    
    cooldown = {20, "hour"}, -- tempo para ser teleportado novamente. Ex.: {2, "sec"}, {5, "min"}, {10, "hour"}, {3, "day"}
    
    storage = 56482 -- storage não utilizado no seu servidor
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local players, tab = {}, t.players
    for i = 1, #tab do
        local tile = Tile(tab[i])
        if tile then
            local p = Player(tile:getTopCreature())
            if p then
                if p:getStorageValue(t.storage) <= os.time() then
                    players[#players + 1] = p:getId()
                end
            end
        end
    end
    if #players < #tab then
        player:sendCancelMessage("No enough players or someone did not wait " .. getStrTime(t.cooldown) .. " to go again.")
        toPosition:sendMagicEffect(CONST_ME_POFF)
        return true
    end
    for i = 1, #tab do
        local playerTile = Tile(tab[i])
        local playerToGo = Player(playerTile:getTopCreature())
        if playerToGo then
            playerToGo:setStorageValue(t.storage, mathtime(t.cooldown) + os.time())
            playerTile:relocateTo(t.destination)
            tab[i]:sendMagicEffect(CONST_ME_POFF)
        end
    end
    t.destination:sendMagicEffect(CONST_ME_TELEPORT)
    Game.createMonster(t.boss.name, t.boss.create_pos)
    item:transform(item.itemid == 1945 and 1946 or 1945)
    return true
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function getStrTime(table) -- by dwarfer
local unit = {["sec"] = "second",["min"] = "minute",["hour"] = "hour",["day"] = "day"}
return tostring(table[1].." "..unit[table[2]]..(table[1] > 1 and "s" or ""))
end

 

 

No actions.xml adicione a tag e edite o actionid que ficará na alavanca: 

<action actionid="ACTIONID_DA_ALAVANCA" script="NOMEDOARQUIVO.lua"/>

 

Contato:

 

Link para o post
Compartilhar em outros sites

Funcionou perfeitamente do jeito que eu queria meu amigo, teria como aprimorar ela?

 

tipo adicionar a função de quando puxar a alavanca nascer um x monstro no mesmo destino da alavanca ?

 

nao precisa ser o mesmo sqm da alavanca mais algum sqm proximo, essa escript estou usando numa sala de boss.

Editado por Bruno Asap
faltou conteudo (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 8 months later...
local t = {
    players = { -- posições que os players devem ficar ao puxar a alavanca
        [1] = Position(1,1,1),
        [2] = Position(1,1,1),
        [3] = Position(1,1,1),
        [4] = Position(1,1,1),
        [5] = Position(1,1,1)
    },

No caso se quiser 3 deixa assim: 

 

local t = {

players = { -- posições que os players devem ficar ao puxar a alavanca

[1] = Position(1,1,1),

[2] = Position(1,1,1),

[3] = Position(1,1,1)

},

Link para o post
Compartilhar em outros sites
1 hora atrás, trc.user disse:

como eu faço pra utilizar a restrição de players ?

digo, nao preciso dos 5 players para fazer, se tiver só 1 ja vai, mas o maximo é 5 mesmo.

 

local t = {
    players = { 
        [1] = Position(1,1,1),
        [2] = Position(1,1,1),
        [3] = Position(1,1,1),
        [4] = Position(1,1,1),
        [5] = Position(1,1,1)
    },
    
    boss = {name = "Dwarf Guard", create_pos = Position(1,1,1)},
  
    destination = Position(1,1,1), 
    
    cooldown = {20, "hour"}, 
    
    storage = 56482 
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local players, tab = {}, t.players
    for i = 1, #tab do
        local tile = Tile(tab[i])
        if tile then
            local p = Player(tile:getTopCreature())
            if p then
                if p:getStorageValue(t.storage) <= os.time() then
                    players[#players + 1] = p:getId()
                end
            end
        end
    end
    if #players == 0 then
        player:sendCancelMessage("None of the players did not wait " .. getStrTime(t.cooldown) .. " to go again.")
        return true
    end
    for i = 1, #tab do
        local playerTile = Tile(tab[i])
        local playerToGo = Player(playerTile:getTopCreature())
        if playerToGo then
            if isInArray(players, playerToGo:getId()) then
                playerToGo:setStorageValue(t.storage, mathtime(t.cooldown) + os.time())
                playerTile:relocateTo(t.destination)
                tab[i]:sendMagicEffect(CONST_ME_POFF)
            end
        end
    end
    t.destination:sendMagicEffect(CONST_ME_TELEPORT)
    Game.createMonster(t.boss.name, t.boss.create_pos)
    item:transform(item.itemid == 1945 and 1946 or 1945)
    return true
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function getStrTime(table) -- by dwarfer
local unit = {["sec"] = "second",["min"] = "minute",["hour"] = "hour",["day"] = "day"}
return tostring(table[1].." "..unit[table[2]]..(table[1] > 1 and "s" or ""))
end

 

Contato:

 

Link para o post
Compartilhar em outros sites
  • 4 weeks later...
  • 5 months later...

@Senju uchira

Não é possível bro, 1.3 é orientada a objeto, já 0.4 não o servidor lê de outra forma os script. Mas pra te dá um ânimo tem um cara da comunidade criando uma lib que vai solucionar isso fazendo funcionar script 1.3 em qualquer versão. 

Caso tenha mais alguma dúvida cria um tópico. 

Discord: Naze#3578

 

Ter Linux Dentro de Windows com Acesso 'localhost' para testes e +

AutoLoot Otimizado Direto na Source (tfs 0.4/otx)

 

// Pirataria é crime, original é roubo, compartilhar é legal.

 

tumblr_muk78tEwDQ1qah4nko1_500.gif

Link para o post
Compartilhar em outros sites
5 horas atrás, Naze disse:

@Senju uchira

Não é possível bro, 1.3 é orientada a objeto, já 0.4 não o servidor lê de outra forma os script. Mas pra te dá um ânimo tem um cara da comunidade criando uma lib que vai solucionar isso fazendo funcionar script 1.3 em qualquer versão. 

Caso tenha mais alguma dúvida cria um tópico. 

eu tenho uma lib eu sei quem e mahtias

Link para o post
Compartilhar em outros sites
  • 5 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo