Ir para conteúdo

Featured Replies

  • Respostas 8
  • Visualizações 422
  • Created
  • Última resposta

Top Posters In This Topic

Postado
https://github.com/otg-br/global/blob/main/data/creaturescripts/scripts/arenapvp.lua
https://github.com/otg-br/global/blob/main/data/actions/scripts/arena_pvp/arena2x2.lua
https://github.com/otg-br/global/tree/main/data

 

Se você não conseguir, eu tenho uma arena PvP para o TFS 1.x, mas está em casa. Estou no trabalho agora, mas assim que chegar em casa, enviarei o script completo.

Postado
  • Autor

Ok

2 horas atrás, GM Vortex disse:

https://github.com/otg-br/global/blob/main/data/creaturescripts/scripts/arenapvp.lua

https://github.com/otg-br/global/blob/main/data/actions/scripts/arena_pvp/arena2x2.lua

https://github.com/otg-br/global/tree/main/data

 

Se você não conseguir, eu tenho uma arena PvP para o TFS 1.x, mas está em casa. Estou no trabalho agora, mas assim que chegar em casa, enviarei o script completo.

Ok amigo se puder me mandar agradeço muito

Também tou serviço, em casa testo melhor obrigado.

Postado

 data/creaturescripts/scripts, 

pvparena.lua

local arena = {
    frompos = {x = 720, y = 660, z = 7},  -- Posição inicial da arena.
    topos = {x = 727, y = 666, z = 7},    -- Posição final da arena.
    exitpos = {x = 718, y = 664, z = 7},  -- Posição de teleporte ao sair da arena.
    exitpos2 = {x = 729, y = 664, z = 7}  -- Segunda posição de teleporte para um jogador específico.
}


-- Verifica se o jogador está dentro da arena
function isPlayerInArena(position)
    return position.x >= arena.frompos.x and position.x <= arena.topos.x and
           position.y >= arena.frompos.y and position.y <= arena.topos.y and
           position.z == arena.frompos.z
end


function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    local player = Player(cid)
    if player then
        local playerPos = player:getPosition()
        if isPlayerInArena(playerPos) then
            local killer = Player(lastHitKiller)
            if killer then
                killer:sendTextMessage(MESSAGE_STATUS_WARNING, "[Arena]: Parabéns, você venceu!")
                killer:teleportTo(arena.exitpos2)
            end

            player:setDropLoot(false)
            player:teleportTo(arena.exitpos)
            player:sendTextMessage(MESSAGE_STATUS_WARNING, "[Arena]: Você perdeu!")

           
            player:addHealth(player:getMaxHealth() + 65500)
            player:addMana(player:getMaxMana() + 65500)
        else
          
        end
    end

    return true
end

function onLogin(player)
    player:registerEvent("pvparena")
    return true
end

TAG XML.

<!-- pvp arena -->
	<event type="preparedeath" name="pvparena" script="pvparena.lua"/>
	<event type="login" name="pvparena_r" script="pvparena.lua"/>

data/actions/scripts.

pvparena.lua

function onUse(cid, item, frompos, item2, topos)
    local player = Player(cid)

    if iswar() then
        player:sendCancelMessage('Outra luta está em andamento.')
        return false
    end

    local poss1 = configs_arena.pos_tile1
    local poss2 = configs_arena.pos_tile2
    local pos1 = { x = poss1.x, y = poss1.y, z = poss1.z, stackpos = 255 }
    local pos2 = { x = poss2.x, y = poss2.y, z = poss2.z, stackpos = 255 }

    local uid1 = Tile(pos1):getTopCreature()
    local uid2 = Tile(pos2):getTopCreature()

    if item:getId() == 1945 then
        if not Player(uid1) or not Player(uid2) then
            player:say("Você precisa de dois jogadores para entrar na arena.", TALKTYPE_ORANGE_1)
            return false
        end

        if player:getLevel(uid1) < 50 or player:getLevel(uid2) < 50 then
            player:sendCancelMessage('Todos os jogadores precisam estar no mínimo no nível 50!')
            return false
        end

        start_arena(uid1.uid, uid2.uid) -- Assuming start_arena receives player UIDs
        return true
    end

    return false
end

TAG XML.

	<action uniqueid="1245" event="script" value="pvparena.lua"/>

data/lib.

pvparena.lua

configs_arena = {
    pos_tile1 = {x = 722, y = 658, z = 7},
    pos_tile2 = {x = 724, y = 658, z = 7},
    pos_dest_player1 = {x = 722, y = 663, z = 7},
    pos_dest_player2 = {x = 725, y = 663, z = 7},
    storage1 = 31000,
    storage2 = 31001,
    global_storage = 31000,
    pos_lose = {x = 718, y = 664, z = 7},
    pos_gain = {x = 729, y = 664, z = 7},
    pos_busy = {x = 718, y = 664, z = 7}
}

function iswar()
    return Game.getStorageValue(configs_arena.global_storage) == 1
end

function stop_arena(uid)
    local player = Player(uid)
    if player:getStorageValue(configs_arena.storage1) == 1 then
        player:addHealth(player:getMaxHealth())
        player:removeCondition(CONDITION_INFIGHT)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'A partida terminou empatada!')
        player:teleportTo(configs_arena.pos_busy)
        player:setStorageValue(configs_arena.storage2, -1)
    end
    return true
end

function start_arena(uid1, uid2)
    if iswar() then
        return false
    end

    local player1 = Player(uid1)
    local player2 = Player(uid2)

    if not(player1 and player2) then
        return false
    end

    if player1:getLevel() < 50 or player2:getLevel() < 50 then
        return false
    end

    player1:setStorageValue(configs_arena.storage2, 1)
    player2:setStorageValue(configs_arena.storage2, 1)

    player1:setStorageValue(configs_arena.storage1, addEvent(stop_arena, (5 * 60 * 1000), uid1))
    player2:setStorageValue(configs_arena.storage1, addEvent(stop_arena, (5 * 60 * 1000), uid2))

    player1:removeCondition(CONDITION_INFIGHT)
    player2:removeCondition(CONDITION_INFIGHT)

    player1:addHealth(player1:getMaxHealth())
    player2:addHealth(player2:getMaxHealth())

    player1:teleportTo(configs_arena.pos_dest_player1)
    player2:teleportTo(configs_arena.pos_dest_player2)

    Game.setStorageValue(configs_arena.global_storage, 1)

    player1:say("Fight!", TALKTYPE_MONSTER_SAY)
    player2:say("Fight!", TALKTYPE_MONSTER_SAY)

    return true
end

data/global.lua.

-- Arena Pvp.
dofile('data/lib/pvparena.lua')

Esses scripts foram originalmente desenvolvidos para o TFS 0.4 e adaptados por mim para funcionar no TFS 1.x. Eles foram testados e funcionam perfeitamente, sem problemas. Esses scripts são destinados ao uso na arena PvP, e é isso.

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo