Jump to content

pvp_manager


Metin2
 Share

Recommended Posts

Ola pessoal  queria uma ajudinha eu instalei a Quest pvp_manager foi feito os teste in game ,mais estou com problema para receber o item e gold apostado no jogador

quando ganho a batalha eu não ganho oque me  fala no chat!

 

qNs8Mi3.png

 

Quest:

Spoiler

quest pvp_manager begin
    state start begin
        when 20011.chat."O Torneio PVP Drk" with pc.get_map_index() != 90 begin
            say_title("Torneio Drk PvP")
            say("")
            if game.get_event_flag("budokan_open") == 2 then
           if pc.count_item(72725) > 0 then
            say("Tem Bensão de Helong de sol em seu inventário, Removê-los")
        elseif pc.count_item(72724) > 0 then
            say("Tem Bensão de Helong de sol em seu inventário, Removê-los")
        elseif pc.count_item(72723) > 0 then
            say("Tem Bensão de Helong de sol em seu inventário, Removê-los")
        else
                    say("A arena de duelo esta aberta")
                    say("")
                    say("Junte-se a uma das categorias (Level 65-80,")
                    say("80-94 e 95+) para lutar comtra outro")
            say("jogador implacável.")
                    say("A competição para a riqueza e glória!")
                    say("")
                    local s = select("Leva-me lá agora!"," Não obrigado")
                    if s == 1 then
                        if party.is_party() then
                            say("Você está em um grupo, você não pode entrar.")
                            return
                        end
                        pc.warp(844800,0)
                    end
            end
            else
                say("O duelo Arena vai abrir em breve!")
                say("")
                say("Junte-se a uma das categorias (Level 65-80,")
                say("80-94 e 95+) para lutar contra outro")
        say("jogador implacável.")
                say("A competição por riqueza e glória!")
                say("")
                say("Quando a entrada está aberta,")
        say(" Você pode se inscrever através")
                say("do NPC dentro de mapa que o levarei!.")
                say("")
            end
        end        
when login with pc.get_map_index() == 90 and (pvp_attenders == nil or pvp_attenders[pvp_manager.get_my_attender_id()] == nil or (pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 1 and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 2)) begin
            if pvp_attenders == nil then
                pvp_manager.guard_check_position()
                timer("pvp_guard_1", 20)
                return
            end
            if pvp_attenders[pvp_manager.get_my_attender_id()] == nil then
                pvp_manager.guard_check_position()
                timer("pvp_guard_1", 20)
                return
            end
            if pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 1 and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 2 then
                pvp_manager.guard_check_position()
                timer("pvp_guard_1", 20)
            end
        end
        when pvp_guard_1.timer begin
            if pc.get_map_index() != 90 then
                return
            end
            pvp_manager.guard_check_position()
            timer("pvp_guard_2", 20)
        end
        when pvp_guard_2.timer begin
            if pc.get_map_index() != 90 then
                return
            end
            pvp_manager.guard_check_position()
            timer("pvp_guard_1", 20)
        end
        function guard_check_position()
            if pc.get_local_x() >= 84 and pc.get_local_y() >= 84 and pc.get_local_x() <= 116 and pc.get_local_y() <= 116 then --arena 1
                pvp_manager.guard_reset()
            end
            if pc.get_local_x() >= 84 and pc.get_local_y() >= 136 and pc.get_local_x() <= 116 and pc.get_local_y() <= 168 then --arena 2
                pvp_manager.guard_reset()
            end
            if pc.get_local_x() >= 136 and pc.get_local_y() >= 84 and pc.get_local_x() <= 168 and pc.get_local_y() <= 116 then --arena 3
                pvp_manager.guard_reset()
            end
            if pc.get_local_x() >= 136 and pc.get_local_y() >= 136 and pc.get_local_x() <= 168 and pc.get_local_y() <= 168 then --arena 4
                pvp_manager.guard_reset()
            end
        end
        
        function guard_reset()
            notice_in_map("AUTOPVP-GUARDIA: "..pc.getname().." foi expulsado da arena.")
            pc.warp_local(pc.get_map_index(), 126*100, 24*100)
        end
        
        when 20088.chat."GM: fechar entradas a PvP" with pc.is_gm() and pc.get_map_index() == 90 begin
            say_title("Budokan:")
            say("A entrada para o mapa de duelo foi fechado")
            say("")
            game.set_event_flag("budokan_open", 0)
        end
        
        when 20088.chat."GM: fechar mapa PvP" with pc.is_gm() and pc.get_map_index() == 90 begin
            say_title("Budokan:")
            say("A entrada para mapear duelos foi fechado")
            say("Todos os jogadores será teletransportado para a cidade.")
            say("")
            warp_all_to_village( pc.get_map_index() , 1 )
        end

        when 20088.chat."Voltar para a cidade" with pc.get_map_index() == 90 begin
            say_title("Mestre da Batalha")
            say("")
            say("Você quer sair da arena e volta")
            say("voutar a city ?")
            say("")
            local s = select("Sim", "Não")
            if s == 1 then
                warp_to_village()
            end
        end

        when 20088.chat."GM: Abortar torneo PvP" with pc.get_map_index() == 90 and pc.is_gm() and game.get_event_flag("pvp") != 0 begin
            say_title("Abortar Torneo PvP")
            say("Desesa realmente cancelar Torneio PVP?")
            say("")
            local s = select("Sim", "Não")
            if s == 1 then
                game.set_event_flag("pvp", 0)
                game.set_event_flag("budokan_open", 0)
                pvp_attenders = nil
                notice_all("O torneio PVP foi cancelado!")
                say_title("Torneo PvP cancelado")
                say("O torneio PVP foi cancelado.")
                say("")
            end
        end

        when 20088.chat."GM: Iniciar torneo PvP" with pc.get_map_index() == 90 and pc.is_gm() and game.get_event_flag("pvp") == 0 begin
            say_title("Iniciar Torneo PvP")
            say("Por favor tenha o Level minimo para o torneio")
            say("PvP.")
            say("")
            say_reward("Level minimo (minimo 15):")
            local str_min_level = input()
            say_title("Iniciar Torneo PvP")
            local min_level = tonumber(str_min_level)
            if min_level == nil then
                say("Não introduziu um numero.")
                say("")
                return
            end
            if tonumber(str_min_level) < 15 then
                min_level = 15
            end
            say("O Level minimimo é "..tostring(min_level)..".")
            say("Por favor insira Level maximo:")
            local str_max_level = input()
            say_title("Iniciar Torneo PvP")
            local max_level = tonumber(str_max_level)
            if max_level == nil then
                say("Não introduziu um numero.")
                say("")
                return
            end
            if tonumber(str_max_level) < min_level then
                say("O Level maximo dever ser maio que")
                say("o Level minimo.")
                say("")
                return
            end
            
            game.set_event_flag("pvp_minlevel", min_level)
            game.set_event_flag("pvp_maxlevel", max_level)
            
            say("O Level minimo é "..tostring(min_level)..".")
            say("O Level máximo é "..tostring(max_level)..".")
            say("")
            local s = select("Iniciar agora", "Cancelar")
            if s == 2 then
                return
            end
            
            say_title("Iniciar Torneo PvP")
            say("O torneio PVP foi iniciado.")
            say("Todo mundo que quer participar")
            say("pode se inscrever aqui.")
            say("Lembre-se que deve cobrir o nível adequado..")
            say("")
            say_reward("Level limite atual: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
            game.set_event_flag("pvp", 1)
            game.set_event_flag("budokan_open", 2)
            attender_count = 0
            game.set_event_flag("pvp_tournament", get_global_time())
            pvp_attenders = nil
            pvp_attenders = { }
            
            arena = {
                        -- arena 1
                        {
                            { 113, 100 },
                            { 88, 100 },
                            0,
                            "SLEEPING",
                            0,
                        },
                        -- arena 2
                        {
                            { 113, 152 },
                            { 88, 152 },
                            0,
                            "SLEEPING",
                            0,
                        },
                        -- arena 3
                        {
                            { 140, 152 },
                            { 164, 152 },
                            0,
                            "SLEEPING",
                            0,
                        },
                        -- arena 4
                        {
                            { 164, 100 },
                            { 140, 100 },
                            0,
                            "SLEEPING",
                            0,
                        },
                    }
            
            notice_all("As inscrições para o torneio foi aberto!")
            notice_all("Level límite atual: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
        end
        when 20088.chat."Inscreva-se para o torneio PvP" with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 1 begin
            say_title(mob_name(20088)..":")
            say("")
            if game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") then
                say("Já está registado para o torneio.")
                say("")
                return
            end
            if pc.get_level() < 15 then
                say("O seu Level é muito baixo.")
                say("")
                return
            end
            if pc.get_level() < game.get_event_flag("pvp_minlevel") or pc.get_level() > game.get_event_flag("pvp_maxlevel") then
                say("Seu Level tem que estar entre"..game.get_event_flag("pvp_minlevel").." e "..game.get_event_flag("pvp_maxlevel"))
                say("")
                return
            end
            ----"123456789012345678901234567890123456789012345678901234567890"|

            say("Bem Vindo ao torneio PvP onde você luta contra jogadores")
            say("ao Level similar ao seu.")
            say("")
            say("Derrotar todos os adversários para ganhar um prêmio e digite o")
            say("nome da fama")
            say("")
            say("Você deseja inserir o desafio?")
            say("")
            local s = select("Sim, vou participar.", "Não, Eu não estou pronto.")
            say_title(mob_name(20088)..":")
            say("")
            if s == 1 then
                say("Vai ser chamado quando chegou sua vez, mas você precisa estar aqui;")
                say("caso contrário, será desclassificado.")
                say("")
                say("Boa Sorte")
                say("")
                
                pvp_attenders[attender_count+1] = {name = pc.getname(), level = pc.get_level(), partner = nil, winner = true, fight_mode = 0, arena = 0}
                pc.setqf("attender_id", attender_count+1)
                pc.setqf("pvp_tournament", game.get_event_flag("pvp_tournament"))
                attender_count = attender_count + 1
            elseif s == 2 then
                say("Parece muito fraco..")
                say("Nós também foram mortos aqui.")
                say("")
            end
        end
        when 20088.chat."Registro do torneio PvP" with pc.get_map_index() == 90 and pc.is_gm() and game.get_event_flag("pvp") == 1 begin
            say_title("Torneo PvP")
            say("atualmente "..tostring(attender_count).." players registrado.")
            say("O registro será fechado e")
            say("batalhas começar?")
            say("")
            local s = select("Fechar registro", "Continuar com os registros")
            if s == 1 then
                say_title("Fechar registros:")
                say("Os registos foi fechadas.")
                say("Os jogadores podem apostar agora.")
                say("")
                game.set_event_flag("pvp", 2)
                betting_list = {}
                betting_state = {}
            end
        end
        
         when 20088.chat."Apostas  para o torneio PvP." with pc.get_map_index() == 90 and pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            say_title("Torneo PVP")
            say("Apostas  terminou para o torneio PvP")
            say("iniciar?")
            say("")
            local s = select("Iniciar torneo agora", "Continuar com as apostas")
            if s == 1 then
                say_title("Fim das apostas:")
                say("Se acabou o tempo de apostas.")
                say("As batalha começara agora.")
                say("")
                game.set_event_flag("pvp", 3)
                pvp_manager.make_duel_list()
                duel_list_index = 0
                playerless_mode = false
                notice_all("A inscrição para torneo PvP ja foi enceradas")
                notice_all("A batalha começara agora.")
                pvp_round_num = 1
                pvp_manager.refresh_arenas()
            end
        end
        
        when 20088.chat."Façam suas apostas" with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 2 and betting_state != nil and betting_state[pc.get_player_id()] == nil begin
            say_title("Realizar apostas:")
            say("Em que jogador quer apostar ?")
            say("")
            local player = input()
            say_title("Realizar apostas:")
            say("")
            if pvp_manager.get_attender_id_by_name(player) == 0 then
                say("O jogador não esta registrado.")
                say("")
                return
            end
            say("Quamto de GOLD quer apostar ?")
            say("")
            local bet_amount = tonumber(input())
            if bet_amount < 1 then
                say_title("Error:")
                say("Quamtidade Certa.")
                say("")
                return
            end
            say_title("Confirmar:")
            say("Quer apostar "..bet_amount.." GOLD no")
            say(jugador.."?")
            say("")
            if select("Sim", "Não") == 2 then
                return
            end
            
            betting_state[pc.get_player_id()] = 1
            table.insert(betting_list, {pc.get_name(), bet_amount, player})
            
            say_title("Realizar apostas:")
            say("Tua aposta foi realizada.")
            say("Obrigado Boa sorte !")
            say("")
        end        
       when 20088.chat."Quer participar ?" with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 2 begin
            setskin(NOWINDOW)
            chat("As seguintes pessoas participam do torneo PvP:")
            for i = 1, attender_count, 4 do
                local chatline = ""
                for j = i, 4, 1 do
                    if pvp_attenders[j] != nil then
                        chatline = chatline..pvp_attenders[j].name.."    "
                    end
                end
                syschat(chatline)
            end
            syschat("Participantes "..attender_count.." totales")
        end
        
        when 20088.chat."Quer lutar comigo na proxima batalha ?" with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 3 and game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") begin
            say_title(mob_name(20088)..":")
            say("")
            if pvp_manager.get_duel_partner() == nil then
                say("Não há adversário disponível agora.")
                say("")
                say("Se não encontrar um adversário adequado para você, ")
                say("Ela se move automaticamente para a próxima batalha.")
                say("")
                return
            end
            say("De acordo com o plano atual está lutando:")
            say("")
            say_reward(""..pvp_manager.get_duel_partner().."")
            say("")
        end
        

        function make_duel_list()
            duel_list = { }
            local i = 0
            for ai = 1, attender_count, 1 do
                if pvp_attenders[ai] != nil and pvp_attenders[ai].partner == nil and pvp_attenders[ai].winner == true then
                    local partner_id = pvp_manager.findpartner(tostring(pvp_attenders[ai].name), pvp_attenders[ai].level)
                    if partner_id != nil then
                        pvp_attenders[ai].partner = tostring(pvp_attenders[partner_id].name)
                        pvp_attenders[partner_id].partner = tostring(pvp_attenders[ai].name)
                        duel_list = {fighter_id1 = ai, fighter_id2 = partner_id}
                        i = i + 1
                    end
                end
            end
            
            for ai = 1, attender_count, 1 do
                if pvp_attenders[ai] != nil and pvp_attenders[ai].partner == nil and pvp_attenders[ai].winner == true then
                    local partner_id = pvp_manager.findpartner_for_partnerless(tostring(pvp_attenders[ai].name), pvp_attenders[ai].level)
                    if partner_id != nil then
                        pvp_attenders[ai].partner = tostring(pvp_attenders[partner_id].name)
                        pvp_attenders[partner_id].partner = tostring(pvp_attenders[ai].name)
                        duel_list = {fighter_id1 = ai, fighter_id2 = partner_id}
                        i = i + 1
                    end
                end
            end
        end
        
        
        function findpartner(name, level)
            local closest_level = nil
            local partner_id = nil
            for ai = 1, attender_count, 1 do
                if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true and tonumber(pvp_attenders[ai].level) <= level + 30 and tonumber(pvp_attenders[ai].level) >= level - 30 and tostring(pvp_attenders[ai].name) != name and pvp_attenders[ai].partner == nil and pvp_manager.is_player_in_map(tostring(pvp_attenders[ai].name)) == true then
                    if closest_level == nil then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif tonumber(pvp_attenders[ai].level) == tonumber(level) then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif tonumber(level) < tonumber(closest_level) and tonumber(pvp_attenders[ai].level) < tonumber(closest_level) then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif tonumber(level) > tonumber(closest_level) and tonumber(pvp_attenders[ai].level) > tonumber(closest_level) then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    end
                end
            end
            return tonumber(partner_id)
        end
        
        function findpartner_for_partnerless(name, level)
            local closest_level = nil
            local partner_id = nil
            for ai = 1, attender_count, 1 do
                if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true and tostring(pvp_attenders[ai].name) != name and pvp_attenders[ai].partner == nil and pvp_manager.is_player_in_map(tostring(pvp_attenders[ai].name)) == true then
                    if closest_level == nil then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif pvp_attenders[ai].level == level then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif tonumber(level) < tonumber(closest_level) and pvp_attenders[ai].level < closest_level then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    elseif tonumber(level) > tonumber(closest_level) and pvp_attenders[ai].level > closest_level then
                        closest_level = pvp_attenders[ai].level
                        partner_id = ai
                    end
                end
            end
            return partner_id
        end
        
        function is_player_in_map(name)
            if pc.getname() == name then
                return true
            end
            local myname = pc.getname()
            local target = find_pc_by_name(name)
            local t = pc.select(target)
            if pc.getname() == myname then
                pc.select(t)
                return false
            end
            pc.select(t)
            return true
        end
        
        
        when 20088.chat."GM: Atualizar a arena de batalha" with pc.is_gm() and game.get_event_flag("pvp") == 3 begin
            for aArena = 1, 4, 1 do
                arena[aArena][3] = 0
                arena[aArena][4] = "SLEEPING"
            end
            pvp_manager.refresh_arenas()
        end
       
        -- not working
        --[[
        when 20088.chat."GM: Terminar Batalla" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            say_title("Terminar Batalla:")
            say("¿En qué estadio se debía acabar con la lucha?")
            local s = select("Arena 1", "Arena 2", "Arena 3", "Arena 4", "Cerrar")
            
            if s == 5 then
                return
            end
            
            local fighter1 = nil
            local fighter2 = nil
            for ai = 1, attender_count, 1 do
                if pvp_attenders[ai].arena == s and pvp_attenders[ai].fight_mode != 0 then
                    if fighter1 == nil then
                        fighter1 = ai
                    else
                        fighter2 = ai
                    end
                end
            end
            
            if fighter1 == nil then
                say_title("Terminar Batalla:")
                say("No hay batalla actual en este ámbito.")
                say("")
                return
            end
            
            say_title("Terminar Batalla:")
            say("¿Quién debe ser considerado ganador cuando lucha en arena "..s.." ")
            say("debe ser terminado?")
            local w = select(tostring(pvp_attenders[fighter1].name), tostring(pvp_attenders[fighter1].name), "Cancel")
            if w == 3 then
                return
            end
            
            if w == 1 then
                pvp_attenders[fighter2].winner = false
                notice_in_map(tostring(pvp_attenders[fighter1].name).." has won the battle against "..tostring(pvp_attenders[fighter2].name).."!", pc.get_map_index())
                pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 126, 234))
                pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 126, 24))
            else
                pvp_attenders[fighter1].winner = false
                notice_in_map(tostring(pvp_attenders[fighter2].name).." has won the battle against "..tostring(pvp_attenders[fighter1].name).."!", pc.get_map_index())
                pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 126, 24))
                pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 126, 234))
            end
            
            pvp_attenders[fighter1].fight_mode = 0
            pvp_attenders[fighter2].fight_mode = 0
            
            
            arena[3] = 0
            pvp_manager.refresh_arenas()
            
            say_title("End fight:")
            say("The battle has been ended.")
        end
        --]]
        
       when 20088.chat."GM: Recompensa ao Torneio PvP" with pc.is_gm() begin
            say_title("Recompensa:")
            say("Recompensa atual: "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." (vnum: "..game.get_event_flag("pvp_price_vnum")..")")
            say("")
            local s = select("Alterar recompensa", "Fechar")
            if s == 2 then
                return
            end
            say_title("Alterar recompensa:")
            say("Por favor introduza o vnum da nova recompensa")
            say("")
            local vnum = input()
            say_title("Alterar recompensa:")
            say("Por favor introduza a quantidade da nova recompensa")
            say("")
            local count = input()
            game.set_event_flag("pvp_price_count", count)
            game.set_event_flag("pvp_price_vnum", vnum)
            say_title("Alterar recompensa:")
            say("A recompensa foi alterado.")
            say("nova recompensa: "..count.."x "..item_name(vnum).." (vnum: "..vnum..")")
            say("")
        end

        when 20088.chat."GM: Anel de Gold Torneo-PvP" with pc.is_gm() begin
            say_title("Recompensa anel de gold:")
            say("Quamtidade atual: "..game.get_event_flag("pvp_round_gold"))
            say("")
            local s = select("Alterar", "Fechar")
            if s == 2 then
                return
            end
            say_title("Quamtidade:")
            say("por favor incira a quamtidade")
            say("para o ganhador da rodada:")
            say("")
            local gold = input()
            game.set_event_flag("pvp_round_gold", gold)
            say_title("A quantidade de mudança:")
            say("A quantidade de base foi alterado.")
            say("nova base: "..gold)
            say("")
        end
        
        function refresh_arenas()
            for aArena = 1, 4, 1 do
                if duel_list[duel_list_index] == nil then
                    if playerless_mode == true then
                        pvp_manager.init_next_round()
                    else
                        pvp_manager.fight_playerless()
                    end
                    return
                end
                if arena[aArena][3] == 0 then
                    arena[aArena][3] = 1
                    pvp_manager.fight_init(duel_list[duel_list_index].fighter_id1, duel_list[duel_list_index].fighter_id2, aArena)
                end
            end
        end
        

        function fight_init(pid1, pid2, arena_id)
            duel_list_index = duel_list_index + 1
            if pvp_manager.is_player_in_map(tostring(pvp_attenders[pid1].name)) == false then
                notice_in_map(tostring(pvp_attenders[pid1].name).." Não está online e foi desqualificado.", pc.get_map_index())
                pvp_attenders[pid1].winner = false
                pvp_attenders[pid2].partner = nil
                arena[arena_id][3] = 0
                pvp_manager.refresh_arenas()
                return
            end
            if pvp_manager.is_player_in_map(tostring(pvp_attenders[pid2].name)) == false then
                notice_in_map(tostring(pvp_attenders[pid2].name).." Não está online e foi desqualificado.", pc.get_map_index())
                pvp_attenders[pid2].winner = false
                pvp_attenders[pid1].partner = nil
                arena[arena_id][3] = 0
                pvp_manager.refresh_arenas()
                return
            end
            
            notice_in_map(tostring(pvp_attenders[pid1].name).." Vs "..tostring(pvp_attenders[pid2].name).." Por favor, entrar na arena!", pc.get_map_index())
            
            pvp_attenders[pid1].fight_mode = 1
            pvp_attenders[pid2].fight_mode = 1
            pvp_attenders[pid1].arena = arena_id
            pvp_attenders[pid2].arena = arena_id
            
            pvp_manager.local_pc_warp(tostring(pvp_attenders[pid1].name), arena[arena_id][1][1], arena[arena_id][1][2])
            pvp_manager.local_pc_warp(tostring(pvp_attenders[pid2].name), arena[arena_id][2][1], arena[arena_id][2][2])

        end
        
        when login with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 3 and pvp_manager.get_fight_mode() == 1 begin
            affect.add(apply.MOV_SPEED, -10000, 2)
            affect.add_collect(apply.HP_REGEN, 5000, 30)
            affect.add_collect(apply.SP_REGEN, 5000, 30)
            pvp_manager.set_fight_mode(2)
            if arena[pvp_manager.get_arena()][3] == 2 then
                arena[pvp_manager.get_arena()][5] = 60
                loop_timer("fight_start_countdown", 1)
            else
                timer("partner_timeout", 30)
            end
            arena[pvp_manager.get_arena()][3] = 2
        end        
        
        when partner_timeout.timer begin
            if pvp_manager.is_player_in_map(pvp_manager.get_duel_partner()) == true or game.get_event_flag("pvp") != 2 or pvp_manager.get_fight_mode() != 2 then
                return
            end
            pvp_manager.set_fight_mode(3)
            if arena[pvp_manager.get_arena()][3] == 3 then
                return
            end
            arena[pvp_manager.get_arena()][3] = 3
            notice_in_map(pc.getname().." Ele ganhou a luta contra o "..pvp_manager.get_duel_partner().." por padrão!", pc.get_map_index())
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
            pvp_attenders[pvp_manager.get_my_attender_id()].winner = true
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = false
            pc.warp_local(pc.get_map_index(), 12600, 23400)
        end

        when fight_start_countdown.timer begin
            if arena[pvp_manager.get_arena()][5] == -1 then
                return
            end
            local partner_vid = find_pc_by_name(pvp_manager.get_duel_partner())
            local my_vid = pc.get_vid()
            if arena[pvp_manager.get_arena()][5] == 0 then
                arena[pvp_manager.get_arena()][5] = -1
                pc.select(partner_vid)
                command("pvp "..my_vid)
                pc.select(my_vid)
                command("pvp "..partner_vid)
                notice_in_map("A luta entre "..pvp_manager.get_duel_partner().." e "..pc.get_name().." começa!", pc.get_map_index())
                timer("fight_start_countdown_shutdown", 1)
            else
                pc.select(partner_vid)
                if math.mod(arena[pvp_manager.get_arena()][5], 5) == 0 then
                    syschat("A batalha começa em "..tostring(arena[pvp_manager.get_arena()][5]).." seconds.")
                end
                affect.add(apply.MOV_SPEED, -10000, 2)
                pc.select(my_vid)
                if math.mod(arena[pvp_manager.get_arena()][5], 5) == 0 then
                    syschat("A luta começa em"..tostring(arena[pvp_manager.get_arena()][5]).." seconds.")
                end
                affect.add(apply.MOV_SPEED, -10000, 2)
                arena[pvp_manager.get_arena()][5] = arena[pvp_manager.get_arena()][5] - 1
            end
        end
        
        when fight_start_countdown_shutdown.timer begin
            cleartimer("fight_start_countdown")
        end
        
        when logout with game.get_event_flag("pvp") == 3 and pc.get_map_index() == 90 and pvp_manager.get_fight_mode() == 2 begin
            pvp_manager.set_fight_mode(3)
            arena[pvp_manager.get_arena()][3] = 3
            notice_in_map(pvp_manager.get_duel_partner().."Ele ganhou a luta contra o "..pc.getname().."!", pc.get_map_index())
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
            pvp_attenders[pvp_manager.get_my_attender_id()].winner = false
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = true
            
            local target = find_pc_by_name(pvp_manager.get_duel_partner())
            local t = pc.select(target)
            pc.change_gold(game.get_event_flag("pvp_round_gold")*pvp_round_num)
            pc.select(t)
            
            pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
        end
        
        when kill with game.get_event_flag("pvp") == 3 and pc.get_map_index() == 90 and npc.is_pc() and pvp_manager.get_fight_mode() == 2 begin
            pvp_manager.set_fight_mode(3)
            if arena[pvp_manager.get_arena()][3] == 3 then
                return
            end
            arena[pvp_manager.get_arena()][3] = 3
            notice_in_map(pc.getname().." Ele ganhou a luta contra o "..pvp_manager.get_duel_partner().."!", pc.get_map_index())
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
            pvp_attenders[pvp_manager.get_my_attender_id()].winner = true
            pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = false
            
            pc.change_gold(game.get_event_flag("pvp_round_gold")*pvp_round_num)
            
            timer("fight_end", 5)
        end
        
        when fight_end.timer begin
            pc.warp_local(pc.get_map_index(), 12600, 23400)
            pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
        end
        
        when letter with pc.get_map_index() == 90 and game.get_event_flag("pvp") == 3 and pvp_manager.get_fight_mode() == 3 begin
            pvp_manager.set_fight_mode(0)
            
            if pvp_attenders[pvp_manager.get_my_attender_id()].winner == true then
                arena[pvp_manager.get_arena()][3] = 0
                pvp_manager.refresh_arenas()
            end
        end
        
        function fight_playerless()
            for aArena = 1, 4, 1 do
                if arena[aArena][3] != 0 then
                    return
                end
            end
            playerless_mode = true

            
            pvp_manager.make_duel_list()
            pvp_manager.refresh_arenas()
        end
        
        function init_next_round()
            for aArena = 1, 4, 1 do
                if arena[aArena][3] != 0 then
                    return
                end
            end
            playerless_mode = false
            
            local winner_count = 0
            local winner_id = 0
            for ai = 1, attender_count, 1 do
                pvp_attenders[ai].partner = nil
                pvp_attenders[ai].fight_mode = 0
                if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true then
                    winner_count = winner_count + 1
                    winner_id = ai
                end
            end
            
            if winner_count == 1 then
                notice_all(pvp_attenders[winner_id].name.." Ele ganhou o torneio PvP!")
                notice_all(pvp_attenders[winner_id].name.." recebera "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." como recompensa!")
                
                pvp_manager.distribute_bets(pvp_attenders[winner_id].name)
                
                local target = find_pc_by_name(pvp_attenders[winner_id].name)
                local t = pc.select(target)
                pc.give_item2(game.get_event_flag("pvp_price_vnum"), game.get_event_flag("pvp_price_count"))
                pc.select(t)
                notice_all("O tornei foi terminado.")
                game.set_event_flag("pvp", 0)
                pvp_attenders = nil
                return
            end
            
            
            pvp_manager.make_duel_list()
            duel_list_index = 0
            if winner_count == 2 then
                notice_all("¡A rodada final do torneio está começando agora!")
            elseif winner_count <= 4 then
                notice_all("A rodada semifinal do torneio está começando agora!")
            else
                notice_all("A próxima rodada do torneio está começando agora!")
            end
            pvp_round_num = pvp_round_num + 1
            pvp_manager.refresh_arenas()
        end
        
        function distribute_bets(winner_name)
            table.insert(betting_list, {pc.get_name(), bet_amount, player})
            local jackpot = 0
            local jackpot_winner_only = 0
            local winners = 0
            for i = 1, table.getn(betting_list), 1 do
                if betting_list[3] == winner_name then
                    jackpot_winner_only = jackpot_winner_only + betting_list[2]
                end
                jackpot = jackpot + betting_list[2]
                winners = winners + 1
            end
            
            for i = 1, table.getn(betting_list), 1 do
                if betting_list[3] == winner_name then
                    pvp_manager.give_jackpot_gold(betting_list[1], math.ceil( (betting_list[2] / jackpot_winner_only)*jackpot ))
                end
            end
            
        end
        
        function give_jackpot_gold(name, amount)
            local target = find_pc_by_name(name)
            if target == 0 then
                return
            end
            local t = pc.select(target)
            pc.change_money(amount)
            pc.select(t)
        end
        
        function local_pc_warp(name, x, y)
            local target = find_pc_by_name(name)
            local t = pc.select(target)
            pc.warp_local(pc.get_map_index(), x*100, y*100)
            pc.select(t)
        end
        
        function setqf_by_name(name, flag, value)
            local target = find_pc_by_name(name)
            local t = pc.select(target)
            pc.setqf(flag, value)
            pc.select(t)
        end
        
        function getqf_by_name(name, flag)
            local target = find_pc_by_name(name)
            local t = pc.select(target)
            local rflag = pc.getqf(flag)
            pc.select(t)
            return rflag
        end
        
        function get_attender_id_by_name(name)
            for ai = 1, attender_count, 1 do
                if tostring(pvp_attenders[ai].name) == name then
                    return ai
                end
            end
            return 0
        end
        
        function get_my_attender_id()
            return pvp_manager.get_attender_id_by_name(pc.get_name())
        end
        
        function get_duel_partner()
            if pvp_attenders[pvp_manager.get_my_attender_id()] != nil and pvp_attenders[pvp_manager.get_my_attender_id()].partner != nil then
                return pvp_attenders[pvp_manager.get_my_attender_id()].partner
            else
                return nil
            end
        end
        
        function get_fight_mode()
            if pvp_attenders != nil and pvp_manager.get_my_attender_id() != 0 and pvp_attenders[pvp_manager.get_my_attender_id()] != nil and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != nil then
                return pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode
            else
                return 0
            end
        end
        
        function set_fight_mode(fmode)
            pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode = fmode
        end
        
        function get_arena()
            return pvp_attenders[pvp_manager.get_my_attender_id()].arena
        end
        
        function set_arena(id)
            pvp_attenders[pvp_manager.get_my_attender_id()].arena = id
        end
        
        function ask_fight(asker, target)
            return confirm(find_pc_by_name(target), "va a luta contra "..asker.. "?", 15)
        end
        
    end
end
 

 

 

Edited by Darkness
  • Like 1
Link to comment
Share on other sites

  • 4 months later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...