[SERVICE] Die Questkontrolle

05/29/2015 01:30 MMORPGER#11581
Quote:
Originally Posted by chillmt2 View Post
PHP Code:
------------------------------------------------------
-- 
Automatic PVP-Tournament System Quest
-- (c) 2011 - 2012 by musicinstructor@elitepvpers.com
------------------------------------------------------
[
PHP]quest pvp_manager begin
    state start begin
        when login with pc
.get_map_index() == 250 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() != 250 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() != 250 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-GUARD: "..pc.getname().." wurde aus der Arena entfernt.")
            
pc.warp_local(pc.get_map_index(), 126*100, 24*100)
        
end
        
        when 20355.chat
."Dem PvP-Turnier beitreten" with game.get_event_flag("pvp") != 0 begin
            say_title
("Hauptmann:")
            if 
game.get_event_flag("pvp") == 1 then
                say
("Schärfe deine Waffen und deine Sinne!")
                
say("Das PvP-Turnier beginnt gleich!")
                
say("")
                
say("Beeilung!")
                
say("Kämpfe für die Ehre unseres Reiches!")
                
say("")
            else
                
say("Das Turnier hat bereits begonnen.")
                
say("Du darfst keine Zeit verlieren!")
                
say("")
            
end
            wait
()
            
pc.warp(857285,856993)
        
end
        
        when 20078.chat
."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title
("Zurück zur Stadt:")
            
say("Möchtest du das Arenengelände verlassen und zurück")
            
say("in deine Reichshauptstadt teleportiert werden?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
            warp_to_village
()
            if 
s == 2 then
            
return
            
end
        end

        when 20078.chat
."GM: PVP-Turnier abbrechen" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") != 0 begin
            say_title
("PVP-Turnier abbrechen")
            
say("Möchtest du das PVP-Turnier wirklich abbrechen?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
                game
.set_event_flag("pvp", 0)
                
pvp_attenders = nil
                notice_all
("Das PVP-Turnier wurde abgebrochen.")
                
say_title("PVP-Turnier abbrechen")
                
say("Das PVP-Turnier wurde abgebrochen.")
                
say("")
                if 
pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
            end
        end

        when 20078.chat
."GM: PVP-Turnier starten" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") == 0 and ae_pvp_tournament == nil begin
            say_title
("PVP-Turnier starten:")
            
say("Bitte lege die Levellimits für das PVP-Turnier")
            
say("fest.")
            
say("")
            
say_reward("Minimum Level (minimum 15):")
            
local str_min_level = input()
            
say_title("PVP-Turnier starten:")
            
local min_level = tonumber(str_min_level)
            if 
min_level == nil then
                say
("Es wurde keine Zahl eingegeben.")
                
say("")
                return
            
end
            
if tonumber(str_min_level) < 15 then
                min_level 
= 15
            end
            say
("Das minimale Level ist nun "..tostring(min_level)..".")
            
say("Bitte geben sie ein maximales Level ein:")
            
local str_max_level = input()
            
say_title("PVP-Turnier starten:")
            
local max_level = tonumber(str_max_level)
            if 
max_level == nil then
                say
("Es wurde keine Zahl eingegeben.")
                
say("")
                return
            
end
            
if tonumber(str_max_level) < min_level then
                say
("Das maximale Level muss größer als das")
                
say("minimale Level sein.")
                
say("")
                return
            
end
            
            game
.set_event_flag("pvp_minlevel", min_level)
            
game.set_event_flag("pvp_maxlevel", max_level)
            
            
say("Minimal-Level "..tostring(min_level))
            
say("Maximal-Level "..tostring(max_level))
            
say("")
            
local s = select("Jetzt starten", "Abbrechen")
            if 
s == 2 then
                
return
            
end
            
            say_title
("PVP-Turnier starten:")
            
say("Das PVP-Turnier wurde gestartet.")
            
say("Jeder, der teilnehmen möchte, kann sich hier")
            
say("anmelden.")
            
say("Die Anmeldungen können hier geschlossen werden.")
            
say("")
            
say_reward("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
            
pvp_manager.open_registrations()
        
end
        
function open_registrations()
            
game.set_event_flag("pvp", 1)
            
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("Die Anmeldungen für das PVP-Turnier sind nun eröffnet!")
            
notice_all("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
        
end
        when 20078.chat
."Beim PVP-Turnier anmelden" with pc.get_map_index() == 250 and game.get_event_flag("pvp") == 1 begin
            say_title
(mob_name(20078)..":")
            if 
game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") then
                say
("Du bist bereits beim PVP-Turnier angemeldet.")
                
say("")
                return
            
end
            
if pc.get_level() < 15 then
                say
("Dein Level ist zu niedrig.")
                
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
("Dein Level muss zwischen "..game.get_event_flag("pvp_minlevel").." und "..game.get_event_flag("pvp_maxlevel").." sein.")
                
say("")
                return
            
end
            say
("Beim PVP-Turnier kämpfst du gegen Spieler")
            
say("mit möglichst gleichen Leveln.")
            
say("Wenn du dich gegen die Anderen durchsetzen")
            
say("kannst, winkt dir ein Preis.")
            
say("Möchtest du teilnehmen?")
            
local s = select("Teilnehmen!", "Ich habe sowieso keine Chance.")
            
say_title(mob_name(20078)..":")
            if 
s == 1 then
                say
("Du wirst aufgerufen, wenn du dran bist.")
                
say("Aber du musst hier bleiben, sonst hast du")
                
say("automatisch verloren und scheidest aus.")
                
say("Viel Erfolg!")
                
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
                
                
if achievement_manager != nil then
                    achievement_manager
.on_participatepvpevent()
                
end
                
            
elseif s == 2 then
                say
("Stimmt, du bist wirklich ein Schwächling.")
                
say("Es hat hier auch schon Tote gegeben.")
                
say("")
            
end
        end
        when 20078.chat
."Anmeldungen des PVP-Turniers" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") == 1 begin
            say_title
("PVP-Turnier")
            
say("Momentan sind "..tonumber(attender_count).." Spieler angemeldet.")
            if 
ae_pvp_tournament != nil then
                say
("")
                return
            
end
            say
("Sollen die Anmeldungen geschlossen und das Turnier")
            
say("gestartet werden?")
            
say("")
            
local s = select("Anmeldungen schließen", "Anmeldephase fortsetzen")
            if 
s == 1 then
                say_title
("Anmeldungen schließen:")
                
say("Die Anmeldungen wurden geschlossen.")
                
say("Die Kämpfe beginnen jetzt.")
                
say("")
                
pvp_manager.close_registrations()
            
end
        end
        
        
function close_registrations()
            if 
attender_count == 0 then
                notice_all
("Das PVP-Turnier kann nicht stattfinden, da sich niemand angemeldet hat.")
                
game.set_event_flag("pvp", 0)
                
pvp_attenders = nil
                
if pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
                
return
            
end
            game
.set_event_flag("pvp", 2)
            
pvp_manager.make_duel_list()
            
duel_list_index = 0
            playerless_mode 
= false
            notice_all
("Die Anmeldungen für das PVP-Turnier sind nun geschlossen.")
            
notice_all("Die Kämpfe beginnen jetzt.")
            
pvp_manager.refresh_arenas()
        
end
        
        when 20078.chat
."Mit wem werde ich als nächstes Kämpfen?" with pc.get_map_index() == 250 and game.get_event_flag("pvp") == 2 and game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") begin
            say_title
(mob_name(20078)..":")
            if 
pvp_manager.get_duel_partner() == nil then
                say
("Im Moment hast du noch keinen Partner.")
                
say("Wir müssen abwarten, ob es gleich weitere")
                
say("Spieler ohne Partner gibt. Dann bilde ich")
                
say("neue Paare.")
                
say("Ansonsten hast du das Glück, dass du kampflos")
                
say("in die nächste Runde aufsteigst.")
                
say("")
                return
            
end
            say
("Nach dem aktuellen Plan musst du voraussichtlich")
            
say("gegen "..pvp_manager.get_duel_partner().." kämpfen.")
            
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[i] = {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[i] = {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 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 20078.chat
."GM: Refresh 'n Clear Arenas" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            
for aArena = 1, 4, 1 do
                
arena[aArena][3] = 0
                arena
[aArena][4] = "SLEEPING"
            
end
            pvp_manager
.refresh_arenas()
        
end
        
        
-- not working
        
--[[
        
when 20078.chat."GM: End fight" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            say_title
("End fight:")
            
say("On which arena should the fight be ended?")
            
local s = select("Arena 1", "Arena 2", "Arena 3", "Arena 4", "Schließen")
            
            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
("End fight:")
                
say("There is no current Battle on this arena.")
                
say("")
                return
            
end
            
            say_title
("End fight:")
            
say("Who should be considered winner when fight on arena "..s.." ")
            
say("should be ended?")
            
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
[s][3] = 0
            pvp_manager
.refresh_arenas()
            
            
say_title("End fight:")
            
say("The battle has been ended.")
        
end
        
--]]
        
        
when 20078.chat."GM: PVP-Turnier Belohnung" with pc.is_gm() begin
            say_title
("Belohnung:")
            
say("Aktuelle Belohnung: "..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")..")")
            
local s = select("Belohnung ändern", "Schließen")
            if 
s == 2 then
                
return
            
end
            say_title
("Belohnung ändern:")
            
say("Bitte gib die vnum der neuen Belohnung ein:")
            
local vnum = input()
            
say_title("Belohnung ändern:")
            
say("Bitte gib die Anzahl der neuen Belohnung ein:")
            
local count = input()
            
game.set_event_flag("pvp_price_count", count)
            
game.set_event_flag("pvp_price_vnum", vnum)
            
say_title("Belohnung ändern:")
            
say("Die Belohnung wurde geändert.")
            
say("Neue Belohnung: "..count.."x "..item_name(vnum).." (vnum: "..vnum..")")
        
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).." ist nicht online und somit automatisch ausgeschlossen.", 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).." ist nicht online und somit automatisch ausgeschlossen.", 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).." und "..tostring(pvp_attenders[pid2].name).." bitte im Ring einfinden!", pc.get_map_index())
            
            --[[
            
local f1_accept = ask_fight(tostring(pvp_attenders[pid1].name), tostring(pvp_attenders[pid2].name))
            if 
f1_accept != CONFIRM_OK then
                notice_in_map
(tostring(pvp_attenders[pid1].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid2].name).." nicht angetreten.", pc.get_map_index())
                
pvp_attenders[pid1] = nil
                pvp_attenders
[pid2].partner = nil
                pvp_manager
.refresh_arenas()
                return
            
end
            
            local f2_accept 
= confirm(find_pc_by_name(tostring(pvp_attenders[pid2].name)), "Trittst du den Kampf gegen "..tostring(pvp_attenders[pid1].name).. " an?", 15)
            if 
f2_accept != CONFIRM_OK then
                notice_in_map
(tostring(pvp_attenders[pid2].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid1].name).." nicht angetreten.", pc.get_map_index())
                
pvp_attenders[pid2] = nil
                pvp_attenders
[pid1].partner = nil
                pvp_manager
.refresh_arenas()
                return
            
end
            
]]
            
            
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() == 250 and game.get_event_flag("pvp") == 2 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] = 30
                loop_timer
("fight_start_countdown", 1)
            else
                
timer("partner_timeout", 40)
            
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().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." kampflos gewonnen!", 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("Der Kampf zwischen "..pc.getname().." und "..pvp_manager.get_duel_partner().." beginnt!", 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
("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
                
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
("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
                
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") == 2 and pc.get_map_index() == 26 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().." hat den Kampf gegen "..pc.getname().." gewonnen!", 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
            
            pvp_manager
.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
        
end
        
        when kill with game
.get_event_flag("pvp") == 2 and pc.get_map_index() == 26 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().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." gewonnen!", 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
            
            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() == 26 and game.get_event_flag("pvp") == 2 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.." hat das PVP-Turnier gewonnen!")
                
notice_all(pvp_attenders[winner_id].name.." erhält "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." als Preis!")
                
local target = find_pc_by_name(pvp_attenders[winner_id].name)
                
local t = pc.select(target)
                
                if 
achievement_manager != nil then
                    achievement_manager
.on_winpvpevent()
                
end
                
                pc
.give_item2(game.get_event_flag("pvp_price_vnum"), game.get_event_flag("pvp_price_count"))
                
pc.select(t)
                
notice_all("Das PVP-Turnier ist nun zuende.")
                
game.set_event_flag("pvp", 0)
                --
pvp_attenders = nil
                
if pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
                
return
            
end
            
            
            pvp_manager
.make_duel_list()
            
duel_list_index = 0
            
if winner_count == 2 then
                notice_all
("Das Finale des PVP-Turniers beginnt!")
            elseif 
winner_count <= 4 then
                notice_all
("Das Semi-Finale des PVP-Turniers beginnt!")
            else
                
notice_all("Das PVP-Turnier geht in die nächste Runde!")
            
end
            pvp_manager
.refresh_arenas()
        
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), "Trittst du den Kampf gegen "..asker.. " an?", 15)
        
end
        
        
function log_current_winner(points)
            if 
pvp_attenders != nil then
                mysql_query
("INSERT INTO player.pvptournament_winlog (pid, points) VALUES ((SELECT id FROM player.player WHERE name='"..tostring(pvp_attenders[winner_id].name).."'), "..tostring(points)..") ON DUPLICATE KEY UPDATE points=points+"..points, ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
            
end
        end
        
        when 20087.chat
."PVP-Turnier Rangliste" begin
            local s 
= select("Information", "Rangliste", "Abbrechen")
            if 
s == 1 then
                say_title
("PVP-Turnier Rangliste:")
                
say("In der PVP-Turnier Rangliste stehen")
                
say("die Gewinner des PVP-Turnieres.")
                
say("Man bekommt abhängig von den jeweiligen")
                
say("Levellimits Punkte:")
                
say("15-54:  3 Punkte")
                
say("55-74:  6 Punkte")
                
say("75-105: 9 Punkte")
                
say("")
                
say_reward("Hinweis: Bei allen anderen PVP-Turnieren,")
                
say_reward("die außerhalb des Eventplans stattfinden,")
                
say_reward("werden keine Punkte an die Gewinner verteilt.")
                
say("")
            elseif 
s == 2 then
                local ranking 
= mysql_query("SELECT (SELECT name FROM player.player WHERE id = pid) AS name, points FROM player.pvptournament_winlog ORDER BY points DESC LIMIT 10", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
                
say_title("PVP-Turnier Rangliste:")
                if 
ranking == "ERROR" then
                    say_reward
("Es gibt noch keine Spieler in der Rangliste.")
                    
say("")
                    return
                
end
                
for i = 1, table.getn(ranking.name), 1 do
                    
say(i..". "..tostring(ranking.name[i]).." ("..tostring(ranking.points[i]).." Punkte)")
                
end
                say
("")
                
local self_rank = mysql_query("SELECT rank, points FROM (SELECT @rownum := @rownum + 1 AS rank, points, pid FROM player.pvptournament_winlog JOIN (SELECT @rownum := 0) r ORDER BY pvptournament_winlog.points DESC) x WHERE x.pid = '"..tostring(pc.get_player_id()).."'", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
                if 
self_rank == "ERROR" then
                    
return
                
end
                say
("Eigener Rang:")
                
say(self_rank.rank[1]..". "..tostring(pc.get_name()).." ("..tostring(self_rank.points[1]).." Punkte)")
                
say("")
            
end
        end
        
    end
end 
das zurück porten funktioniert nicht nachdem das duell zuende ist[/PHP]


PHP Code:
        when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title
("Zurück zur Stadt:")
            
say("Möchtest du das Arenengelände verlassen und zurück")
            
say("in deine Reichshauptstadt teleportiert werden?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
            warp_to_village
()
            elseif 
s == 2 then
            
return
            
end
        end 
So sollte es klappen^^

Achte bitte auf die richtige Tabs
05/29/2015 01:50 Nick#11582
Quote:
Originally Posted by infinty04 View Post
danke dir erstmal für die info ja hab ne quest hier ist sie

PHP Code:
quest warpring begin
    state start begin
        when 70007.
use begin
            say_title
("Warpring") 
            
say("Wohin möchtest du Teleportiert werden?")
        
local empire = pc.get_empire() 
                    
local selectmap = select("Map1","Map2","Orktal","Wüste","Eisland","Feuerland","Weiter","Abbrechen")
                    if 
selectmap == 8 then
                
return
                    elseif 
selectmap == 7 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
            
local selectmap2 = select("Dämonenturm","Geisterwald","Roter Wald","Spinnendungeon","Grotte der Verbannung","Land der Riesen","Abbrechen")
                    if 
selectmap2 == 7 then
                        
return
                    elseif 
selectmap2 == 1 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
            
pc.warp(590500,110800)
                    elseif 
selectmap2 == 2 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local geisterselect = select("Anfang","Ende","Abbrechen")
                    if 
geisterselect == 3 then
                        
return
                    elseif 
geisterselect == 1 then
            pc
.warp(290500,5700)
                    elseif 
geisterselect == 2 then
            pc
.warp(286400,44200)
            
end
                    
elseif selectmap2 == 3 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local roterselect = select("Anfang","Ende","Abbrechen")
                    if 
roterselect == 3 then
                        
return
                    elseif 
roterselect == 1 then
            pc
.warp(1119900,70800)
                    elseif 
geisterselect == 2 then
            pc
.warp(1119100,7700)
            
end
                    
elseif selectmap2 == 4 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
            
pc.warp(91700, 525300)
                    elseif 
selectmap2 == 5 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
            
pc.warp(27600, 142700)
                    elseif 
selectmap2 == 6 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
            
pc.warp(819200, 716800)
            
end
                    
elseif selectmap == 1 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local map1select = select("Rotes Reich","Gelbes Reich","Blaues Reich","Abbrechen")
                    if 
map1select == 4 then
                        
return
                    elseif 
map1select == 1 then
            pc
.warp(474300, 954800)
                    elseif 
map1select == 2 then
            pc
.warp(63800, 166400)
                    elseif 
map1select == 3 then
            pc
.warp(959900, 269200)
            
end
                    
elseif selectmap == 2 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local map2select = select("Rotes Reich","Gelbes Reich","Blaues Reich","Abbrechen")
                    if 
map2select == 4 then
                        
return
                    elseif 
map2select == 1 then
            pc
.warp(353100, 882900)
                    elseif 
map2select == 2 then
            pc
.warp(145500, 240000)
                    elseif 
map2select == 3 then
            pc
.warp(863900, 246000)
            
end
                    
elseif selectmap == 3 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local otselect = select("Anfang","Mitte","Abbrechen")
                    if 
otselect == 3 then
                        
return
                    elseif 
otselect == 1 then
            
if empire == 1 then
            pc
.warp(402100, 673900)
                    elseif 
empire == 2 then
            pc
.warp(270400, 739900)
                    elseif 
empire == 3 then
            pc
.warp(321300, 808000)
            
end
                    
elseif otselect == 2 then
            pc
.warp(332800, 745600)
            
end
                    
elseif selectmap == 4 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local wuesteselect = select("Anfang","Mitte","Abbrechen")
                    if 
wuesteselect == 3 then
                        
return
                    elseif 
wuesteselect == 1 then
            
if empire == 1 then
            pc
.warp(217800, 627200)
                    elseif 
empire == 2 then
            pc
.warp(221900, 502700)
                    elseif 
empire == 3 then
            pc
.warp(344000, 502500)
            
end
                    
elseif wuesteselect == 2 then
            pc
.warp(296800, 547100)
            
end
                    
elseif selectmap == 5 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local eisselect = select("Anfang","Mitte","Abbrechen")
                    if 
eisselect == 3 then
                        
return
                    elseif 
eisselect == 1 then
            
if empire == 1 then
            pc
.warp(434200, 290600)
                    elseif 
empire == 2 then
            pc
.warp(375200, 174900)
                    elseif 
empire == 3 then
            pc
.warp(491800, 173600)
            
end
                    
elseif eisselect == 2 then
            pc
.warp(436500, 215400)
            
end
                    
elseif selectmap == 6 then
                        say_title
("Warpring") 
                        
say("Wohin möchtest du Teleportiert werden?")
                    
local feuerselect = select("Anfang","Mitte","Abbrechen")
                    if 
feuerselect == 3 then
                        
return
                    elseif 
feuerselect == 1 then
            
if empire == 1 then
            pc
.warp(599400, 756300)
                    elseif 
empire == 2 then
            pc
.warp(597800, 622200)
                    elseif 
empire == 3 then
            pc
.warp(730700, 689800)
            
end
                    
elseif feuerselect == 2 then
            pc
.warp(600800, 687100)
            
end
                end
                    end
                        end
                            end 


Ich war mal so frei und habe die Quest der Übersicht halber eingerückt sowie logische Fehler behoben, der Button sollte nun auch wie gewollt funktionieren.

Quote:
Originally Posted by MMORPGER View Post
Achte bitte auf die richtige Tabs
Tabs sind dem Quest-Compiler schnuppe, sieh dir mal den Inhalt der Dateien aus dem 'object' - Verzeichnis an.

lg
05/29/2015 02:01 MMORPGER#11583
Quote:
Originally Posted by .JayZoN View Post

Tabs sind dem Quest-Compiler schnuppe, sieh dir mal den Inhalt der Dateien aus dem 'object' - Verzeichnis an.

lg
Na beschäftige mich derzeit mit Python etwas.. soetwas ist dort ein fataler ERRRRRRRROR ...
na ich hasse das..
Wenn schon dann richtig , soll ja übersichtlich sein damit er später selber alles wiederfindet *hustl*
05/29/2015 03:37 infinty04#11584
Quote:
Originally Posted by .JayZoN View Post

Ich war mal so frei und habe die Quest der Übersicht halber eingerückt sowie logische Fehler behoben, der Button sollte nun auch wie gewollt funktionieren.



Tabs sind dem Quest-Compiler schnuppe, sieh dir mal den Inhalt der Dateien aus dem 'object' - Verzeichnis an.

lg

danke hat super geklappt das mit der warpring quest jedoch der fehler mit dem yang anzeige an und aus stellen klappt nicht


Code:
	def OnPickMoney(self, money):

Code:
	def OnPickMoney(self, money):
		if constInfo.pickInfo == 0:
			return
		
		chat.AppendChat(chat.CHAT_TYPE_INFO, locale.GAME_PICK_MONEY % (money))
klappt zwar aber ich kann nicht wählen das man aus oder wieder anstellt wenn ich das so einfügen ist die yang anzeige dauerhaft deactiviert
Aber ich will ja es gerne so haben das es per buttens ab und an stellbar ist so wie mit dem teleport buttens vllt hast du ja dafür auch ne idee lösung wäre nett ;)
05/29/2015 13:03 chillmt2#11585
Quote:
Originally Posted by MMORPGER View Post
PHP Code:
        when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title
("Zurück zur Stadt:")
            
say("Möchtest du das Arenengelände verlassen und zurück")
            
say("in deine Reichshauptstadt teleportiert werden?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
            warp_to_village
()
            elseif 
s == 2 then
            
return
            
end
        end 
So sollte es klappen^^

Achte bitte auf die richtige Tabs


Das Ding ist, das kann ich nicht testen. Da nachdem 2 User Duell gemacht haben, sie nicht zurückgeportet werden und somit 2 neue User ein Duell machen müssen.

EDIT: Sie bleiben dann in der Arena stecken, also auf dem viereckigen Duellplatz, und werden nicht wieder raus geportet das 2 neue antreten können.
05/29/2015 16:06 .Various#11586
Quote:
Originally Posted by chillmt2 View Post
Das Ding ist, das kann ich nicht testen. Da nachdem 2 User Duell gemacht haben, sie nicht zurückgeportet werden und somit 2 neue User ein Duell machen müssen.

EDIT: Sie bleiben dann in der Arena stecken, also auf dem viereckigen Duellplatz, und werden nicht wieder raus geportet das 2 neue antreten können.
Das liegt dann nicht an dem Bereich der Quest.
Code:
        when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title("Zurück zur Stadt:")
            say("Möchtest du das Arenengelände verlassen und zurück")
            say("in deine Reichshauptstadt teleportiert werden?")
            say("")
            if select("Ja", "Nein") == 2 then return end
            warp_to_village()
        end
Steht der NPC denn in der Arena und ist der Mapindex der Arena auch wirklich 250?
05/29/2015 21:19 chillmt2#11587
Quote:
Originally Posted by .Various View Post
Das liegt dann nicht an dem Bereich der Quest.
Code:
        when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title("Zurück zur Stadt:")
            say("Möchtest du das Arenengelände verlassen und zurück")
            say("in deine Reichshauptstadt teleportiert werden?")
            say("")
            if select("Ja", "Nein") == 2 then return end
            warp_to_village()
        end
Steht der NPC denn in der Arena und ist der Mapindex der Arena auch wirklich 250?
Ja, wir haben extra den orginalen Index von 44/42 auf 250 geändert, der NPC steht auf der Map.
05/29/2015 21:46 KΛIƬӨ#11588
Quote:
Originally Posted by chillmt2 View Post
Ja, wir haben extra den orginalen Index von 44/42 auf 250 geändert, der NPC steht auf der Map.
füg mal in der quest_functions datei mal das ein.


Code:
warp_to_village()
05/30/2015 00:21 rollback#11589
Quote:
Originally Posted by DYSKaito View Post
füg mal in der quest_functions datei mal das ein.


Code:
warp_to_village()
wenn das fehlen würde, würde es beim kompilieren schon stoppen.
die quest_functions-Datei ist nur dafür da, welche Funktionen der compiler durchlässt und welche nicht ;)
05/30/2015 00:34 KΛIƬӨ#11590
Quote:
Originally Posted by It's me, 1093 View Post
wenn das fehlen würde, würde es beim kompilieren schon stoppen.
die quest_functions-Datei ist nur dafür da, welche Funktionen der compiler durchlässt und welche nicht ;)
was ist denn genau sein problem? ich kann nicht auf die letzte seite zugreifen.
05/30/2015 02:57 Critella#11591
#edit

Erledigt danke
05/30/2015 08:05 #Merix#11592
PHP Code:
quest truhen_zero begin  
    state start begin  
        when login 
or pc.get_level() >= 1 begin 
            set_state
(truhen) 
        
end 
    end 
    state truhen begin 
        when 50187.
use begin 
            pc
.give_item2(76024, 5)  --Grüner Zauber 
            pc
.give_item2(76025, 5)  --Grüne Stärke 
            pc
.give_item2(70038, 50) -- Tapferkeitsumhang
            pc
.give_item2(27001, 50) --Roter Trank(K) 
            
pc.give_item2(27004, 20) --Blauer Trank(K) 
            
pc.give_item2(27110, 10)  --Grüner Trank(K) 
            
pc.give_item2(27113, 10)  --Violetter Trank(K) 
            
pc.remove_item(50187, 1) --Lehrlingstruhe I verschwindet 
        end  
        when 50188.
use with pc.get_level() >= 10 begin  
            pc
.give_item2(72723, 1)  --Elixier der Sonne (K) 
            
pc.give_item2(27111, 5)  --Grüner Trank(M)  
            
pc.give_item2(27113, 5)  --Geschwindigkeits Trank(K) 
            
pc.give_item2(76008, 5)  --Medaille des Drachen  
            pc
.give_item2(50189, 1)  --Lehrlingstruhe III 
            pc
.remove_item(50188, 1) --Lehrlingstruhe II verschwindet 
        end  
        when 50189.
use with pc.get_level() >= 20 begin  
            pc
.give_item2(72727, 1)  --Elixier des Mondes (K) 
            
pc.give_item2(27111, 5)  --Grüner Trank(M) 
            
pc.give_item2(27113, 5)  --Geschwindigkeits Trank(K)  
            
pc.give_item2(76006, 1)  --Kompass des Metinsteins  
            pc
.give_item2(76013, 15)  --Grüner Zauber 
            pc
.give_item2(76014, 15)  --Grüne Stärke 
            pc
.give_item2(50190, 1)  --Expertentruhe I 
            pc
.remove_item(50189, 1) --Lehrlingstruhe III verschwindet 
        end  
        when 50190.
use with pc.get_level() >= 30 begin  
            pc
.give_item2(27113, 5)  --Geschwindigkeits Trank(K)  
            
pc.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(25040, 7)  --Segenschriftrollen 
            pc
.give_item2(70003, 1)  --Buch des Anführers             
            pc
.give_item2(50191, 1)  --Expertentruhe II 
            pc
.remove_item(50190, 1) --Expertentruhe I verschwindet 
        end  
        when 50191.
use with pc.get_level() >= 40 begin  
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(71153, 1)  --Trank der Weisheit 
            pc
.give_item2(70003, 1)  --Buch des Anführers 
            pc
.give_item2(50192, 1)  --Expertentruhe III 
            pc
.remove_item(50191, 1) --Expertentruhe II verschwindet 
        end  
        when 50192.
use with pc.get_level() >= 50 begin  
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(70038, 100)  --Tapferkeitsümhänge 
            pc
.give_item2(71095, 10)  --Passierschein 
            pc
.give_item2(70058, 1)  --Teleportationsring 
            pc
.give_item2(50193, 1)  --Meistertruhe I 
            pc
.remove_item(50192, 1) --Expertentruhe III verschwindet 
        end  
        when 50193.
use with pc.get_level() >= 60 begin  
            pc
.give_item2(71032, 5)  --Schriftrolle des Drachen 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(76000, 5)  --Pfirsichblütenwein 
            pc
.give_item2(50194, 1)  --Meistertruhe II 
            pc
.remove_item(50193, 1) --Meistertruhe I verschwindet 
        end  
        when 50194.
use with pc.get_level() >= 70 begin 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(76001, 2)  --Status-Neuverteilung 
            pc
.give_item2(76013, 30)  --Grüner Zauber 
            pc
.give_item2(76014, 30)  --Grüne Stärke 
            pc
.give_item2(50195, 1)  --Meistertruhe III 
            pc
.remove_item(50194, 1) --Meistertruhe II verschwindet 
        end  
        when 50195.
use with pc.get_level() >= 80 begin 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(72728, 1)  --Elixier des Mondes (M) 
            
pc.give_item2(72728, 5)  --Elixier des Forschers 
            pc
.give_item2(50196, 1)  --Großmeistertruhe 
            pc
.remove_item(50195, 1) --Meistertruhe III verschwindet 
        end  
        when 50196.
use with pc.get_level() >= 90 begin 
            pc
.give_item2(39004, 5)  --Segenskugel 
            pc
.give_item2(72724, 1)  --Elixier der Sonne (M) 
            
pc.give_item2(76010, 3)  --Blutstein 
            pc
.give_item2(30319, 3)  --Schrumpfkopf 
            pc
.give_item2(50127, 1)  --Grüne Zaubertruhe 
            pc
.remove_item(50196, 1) --Großmeistertruhe verschwindet 
        end  
    end  
end 

Fehlermeldung im VirtualBox.


Quote:
When doesnt have begin-end clause. (()
...
05/30/2015 10:08 Antara-mt2#11593
PHP Code:
------------------------------------------------------
-- 
Automatic PVP-Tournament System Quest
-- (c) 2011 - 2012 by musicinstructor@elitepvpers.com
------------------------------------------------------
quest pvp_manager begin
    state start begin
        when login with pc
.get_map_index() == 250 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() != 250 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() != 250 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-GUARD: "..pc.getname().." wurde aus der Arena entfernt.")
            
pc.warp_local(pc.get_map_index(), 126*100, 24*100)
        
end
        
        when 20355.chat
."Dem PvP-Turnier beitreten" with game.get_event_flag("pvp") != 0 begin
            say_title
("Hauptmann:")
            if 
game.get_event_flag("pvp") == 1 then
                say
("Schärfe deine Waffen und deine Sinne!")
                
say("Das PvP-Turnier beginnt gleich!")
                
say("")
                
say("Beeilung!")
                
say("Kämpfe für die Ehre unseres Reiches!")
                
say("")
            else
                
say("Das Turnier hat bereits begonnen.")
                
say("Du darfst keine Zeit verlieren!")
                
say("")
            
end
            wait
()
            
pc.warp(857285,856993)
        
end
        
        when 20078.chat
."Zurück zur Stadt" with pc.get_map_index() == 250 begin
            say_title
("Zurück zur Stadt:")
            
say("Möchtest du das Arenengelände verlassen und zurück")
            
say("in deine Reichshauptstadt teleportiert werden?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
                warp_to_village
()
            
end
        end

        when 20078.chat
."GM: PVP-Turnier abbrechen" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") != 0 begin
            say_title
("PVP-Turnier abbrechen")
            
say("Möchtest du das PVP-Turnier wirklich abbrechen?")
            
say("")
            
local s = select("Ja", "Nein")
            if 
s == 1 then
                game
.set_event_flag("pvp", 0)
                
pvp_attenders = nil
                notice_all
("Das PVP-Turnier wurde abgebrochen.")
                
say_title("PVP-Turnier abbrechen")
                
say("Das PVP-Turnier wurde abgebrochen.")
                
say("")
                if 
pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
            end
        end

        when 20078.chat
."GM: PVP-Turnier starten" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") == 0 and ae_pvp_tournament == nil begin
            say_title
("PVP-Turnier starten:")
            
say("Bitte lege die Levellimits für das PVP-Turnier")
            
say("fest.")
            
say("")
            
say_reward("Minimum Level (minimum 15):")
            
local str_min_level = input()
            
say_title("PVP-Turnier starten:")
            
local min_level = tonumber(str_min_level)
            if 
min_level == nil then
                say
("Es wurde keine Zahl eingegeben.")
                
say("")
                return
            
end
            
if tonumber(str_min_level) < 15 then
                min_level 
= 15
            end
            say
("Das minimale Level ist nun "..tostring(min_level)..".")
            
say("Bitte geben sie ein maximales Level ein:")
            
local str_max_level = input()
            
say_title("PVP-Turnier starten:")
            
local max_level = tonumber(str_max_level)
            if 
max_level == nil then
                say
("Es wurde keine Zahl eingegeben.")
                
say("")
                return
            
end
            
if tonumber(str_max_level) < min_level then
                say
("Das maximale Level muss größer als das")
                
say("minimale Level sein.")
                
say("")
                return
            
end
            
            game
.set_event_flag("pvp_minlevel", min_level)
            
game.set_event_flag("pvp_maxlevel", max_level)
            
            
say("Minimal-Level "..tostring(min_level))
            
say("Maximal-Level "..tostring(max_level))
            
say("")
            
local s = select("Jetzt starten", "Abbrechen")
            if 
s == 2 then
                
return
            
end
            
            say_title
("PVP-Turnier starten:")
            
say("Das PVP-Turnier wurde gestartet.")
            
say("Jeder, der teilnehmen möchte, kann sich hier")
            
say("anmelden.")
            
say("Die Anmeldungen können hier geschlossen werden.")
            
say("")
            
say_reward("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
            
pvp_manager.open_registrations()
        
end
        
function open_registrations()
            
game.set_event_flag("pvp", 1)
            
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("Die Anmeldungen für das PVP-Turnier sind nun eröffnet!")
            
notice_all("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
        
end
        when 20078.chat
."Beim PVP-Turnier anmelden" with pc.get_map_index() == 250 and game.get_event_flag("pvp") == 1 begin
            say_title
(mob_name(20078)..":")
            if 
game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") then
                say
("Du bist bereits beim PVP-Turnier angemeldet.")
                
say("")
                return
            
end
            
if pc.get_level() < 15 then
                say
("Dein Level ist zu niedrig.")
                
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
("Dein Level muss zwischen "..game.get_event_flag("pvp_minlevel").." und "..game.get_event_flag("pvp_maxlevel").." sein.")
                
say("")
                return
            
end
            say
("Beim PVP-Turnier kämpfst du gegen Spieler")
            
say("mit möglichst gleichen Leveln.")
            
say("Wenn du dich gegen die Anderen durchsetzen")
            
say("kannst, winkt dir ein Preis.")
            
say("Möchtest du teilnehmen?")
            
local s = select("Teilnehmen!", "Ich habe sowieso keine Chance.")
            
say_title(mob_name(20078)..":")
            if 
s == 1 then
                say
("Du wirst aufgerufen, wenn du dran bist.")
                
say("Aber du musst hier bleiben, sonst hast du")
                
say("automatisch verloren und scheidest aus.")
                
say("Viel Erfolg!")
                
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
                
                
if achievement_manager != nil then
                    achievement_manager
.on_participatepvpevent()
                
end
                
            
elseif s == 2 then
                say
("Stimmt, du bist wirklich ein Schwächling.")
                
say("Es hat hier auch schon Tote gegeben.")
                
say("")
            
end
        end
        when 20078.chat
."Anmeldungen des PVP-Turniers" with pc.get_map_index() == 250 and pc.is_gm() and game.get_event_flag("pvp") == 1 begin
            say_title
("PVP-Turnier")
            
say("Momentan sind "..tonumber(attender_count).." Spieler angemeldet.")
            if 
ae_pvp_tournament != nil then
                say
("")
                return
            
end
            say
("Sollen die Anmeldungen geschlossen und das Turnier")
            
say("gestartet werden?")
            
say("")
            
local s = select("Anmeldungen schließen", "Anmeldephase fortsetzen")
            if 
s == 1 then
                say_title
("Anmeldungen schließen:")
                
say("Die Anmeldungen wurden geschlossen.")
                
say("Die Kämpfe beginnen jetzt.")
                
say("")
                
pvp_manager.close_registrations()
            
end
        end
        
        
function close_registrations()
            if 
attender_count == 0 then
                notice_all
("Das PVP-Turnier kann nicht stattfinden, da sich niemand angemeldet hat.")
                
game.set_event_flag("pvp", 0)
                
pvp_attenders = nil
                
if pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
                
return
            
end
            game
.set_event_flag("pvp", 2)
            
pvp_manager.make_duel_list()
            
duel_list_index = 0
            playerless_mode 
= false
            notice_all
("Die Anmeldungen für das PVP-Turnier sind nun geschlossen.")
            
notice_all("Die Kämpfe beginnen jetzt.")
            
pvp_manager.refresh_arenas()
        
end
        
        when 20078.chat
."Mit wem werde ich als nächstes Kämpfen?" with pc.get_map_index() == 250 and game.get_event_flag("pvp") == 2 and game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") begin
            say_title
(mob_name(20078)..":")
            if 
pvp_manager.get_duel_partner() == nil then
                say
("Im Moment hast du noch keinen Partner.")
                
say("Wir müssen abwarten, ob es gleich weitere")
                
say("Spieler ohne Partner gibt. Dann bilde ich")
                
say("neue Paare.")
                
say("Ansonsten hast du das Glück, dass du kampflos")
                
say("in die nächste Runde aufsteigst.")
                
say("")
                return
            
end
            say
("Nach dem aktuellen Plan musst du voraussichtlich")
            
say("gegen "..pvp_manager.get_duel_partner().." kämpfen.")
            
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[i] = {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[i] = {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 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 20078.chat
."GM: Refresh 'n Clear Arenas" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            
for aArena = 1, 4, 1 do
                
arena[aArena][3] = 0
                arena
[aArena][4] = "SLEEPING"
            
end
            pvp_manager
.refresh_arenas()
        
end
        
        
-- not working
        
--[[
        
when 20078.chat."GM: End fight" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
            say_title
("End fight:")
            
say("On which arena should the fight be ended?")
            
local s = select("Arena 1", "Arena 2", "Arena 3", "Arena 4", "Schließen")
            
            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
("End fight:")
                
say("There is no current Battle on this arena.")
                
say("")
                return
            
end
            
            say_title
("End fight:")
            
say("Who should be considered winner when fight on arena "..s.." ")
            
say("should be ended?")
            
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
[s][3] = 0
            pvp_manager
.refresh_arenas()
            
            
say_title("End fight:")
            
say("The battle has been ended.")
        
end
        
--]]
        
        
when 20078.chat."GM: PVP-Turnier Belohnung" with pc.is_gm() begin
            say_title
("Belohnung:")
            
say("Aktuelle Belohnung: "..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")..")")
            
local s = select("Belohnung ändern", "Schließen")
            if 
s == 2 then
                
return
            
end
            say_title
("Belohnung ändern:")
            
say("Bitte gib die vnum der neuen Belohnung ein:")
            
local vnum = input()
            
say_title("Belohnung ändern:")
            
say("Bitte gib die Anzahl der neuen Belohnung ein:")
            
local count = input()
            
game.set_event_flag("pvp_price_count", count)
            
game.set_event_flag("pvp_price_vnum", vnum)
            
say_title("Belohnung ändern:")
            
say("Die Belohnung wurde geändert.")
            
say("Neue Belohnung: "..count.."x "..item_name(vnum).." (vnum: "..vnum..")")
        
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).." ist nicht online und somit automatisch ausgeschlossen.", 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).." ist nicht online und somit automatisch ausgeschlossen.", 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).." und "..tostring(pvp_attenders[pid2].name).." bitte im Ring einfinden!", pc.get_map_index())
            
            --[[
            
local f1_accept = ask_fight(tostring(pvp_attenders[pid1].name), tostring(pvp_attenders[pid2].name))
            if 
f1_accept != CONFIRM_OK then
                notice_in_map
(tostring(pvp_attenders[pid1].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid2].name).." nicht angetreten.", pc.get_map_index())
                
pvp_attenders[pid1] = nil
                pvp_attenders
[pid2].partner = nil
                pvp_manager
.refresh_arenas()
                return
            
end
            
            local f2_accept 
= confirm(find_pc_by_name(tostring(pvp_attenders[pid2].name)), "Trittst du den Kampf gegen "..tostring(pvp_attenders[pid1].name).. " an?", 15)
            if 
f2_accept != CONFIRM_OK then
                notice_in_map
(tostring(pvp_attenders[pid2].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid1].name).." nicht angetreten.", pc.get_map_index())
                
pvp_attenders[pid2] = nil
                pvp_attenders
[pid1].partner = nil
                pvp_manager
.refresh_arenas()
                return
            
end
            
]]
            
            
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() == 250 and game.get_event_flag("pvp") == 2 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] = 30
                loop_timer
("fight_start_countdown", 1)
            else
                
timer("partner_timeout", 40)
            
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().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." kampflos gewonnen!", 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("Der Kampf zwischen "..pc.getname().." und "..pvp_manager.get_duel_partner().." beginnt!", 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
("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
                
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
("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
                
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") == 2 and pc.get_map_index() == 26 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().." hat den Kampf gegen "..pc.getname().." gewonnen!", 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
            
            pvp_manager
.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
        
end
        
        when kill with game
.get_event_flag("pvp") == 2 and pc.get_map_index() == 26 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().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." gewonnen!", 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
            
            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() == 26 and game.get_event_flag("pvp") == 2 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.." hat das PVP-Turnier gewonnen!")
                
notice_all(pvp_attenders[winner_id].name.." erhält "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." als Preis!")
                
local target = find_pc_by_name(pvp_attenders[winner_id].name)
                
local t = pc.select(target)
                
                if 
achievement_manager != nil then
                    achievement_manager
.on_winpvpevent()
                
end
                
                pc
.give_item2(game.get_event_flag("pvp_price_vnum"), game.get_event_flag("pvp_price_count"))
                
pc.select(t)
                
notice_all("Das PVP-Turnier ist nun zuende.")
                
game.set_event_flag("pvp", 0)
                --
pvp_attenders = nil
                
if pvp_manager_callback != nil then
                    pvp_manager_callback
()
                
end
                
return
            
end
            
            
            pvp_manager
.make_duel_list()
            
duel_list_index = 0
            
if winner_count == 2 then
                notice_all
("Das Finale des PVP-Turniers beginnt!")
            elseif 
winner_count <= 4 then
                notice_all
("Das Semi-Finale des PVP-Turniers beginnt!")
            else
                
notice_all("Das PVP-Turnier geht in die nächste Runde!")
            
end
            pvp_manager
.refresh_arenas()
        
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), "Trittst du den Kampf gegen "..asker.. " an?", 15)
        
end
        
        
function log_current_winner(points)
            if 
pvp_attenders != nil then
                mysql_query
("INSERT INTO player.pvptournament_winlog (pid, points) VALUES ((SELECT id FROM player.player WHERE name='"..tostring(pvp_attenders[winner_id].name).."'), "..tostring(points)..") ON DUPLICATE KEY UPDATE points=points+"..points, ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
            
end
        end
        
        when 20087.chat
."PVP-Turnier Rangliste" begin
            local s 
= select("Information", "Rangliste", "Abbrechen")
            if 
s == 1 then
                say_title
("PVP-Turnier Rangliste:")
                
say("In der PVP-Turnier Rangliste stehen")
                
say("die Gewinner des PVP-Turnieres.")
                
say("Man bekommt abhängig von den jeweiligen")
                
say("Levellimits Punkte:")
                
say("15-54:  3 Punkte")
                
say("55-74:  6 Punkte")
                
say("75-105: 9 Punkte")
                
say("")
                
say_reward("Hinweis: Bei allen anderen PVP-Turnieren,")
                
say_reward("die außerhalb des Eventplans stattfinden,")
                
say_reward("werden keine Punkte an die Gewinner verteilt.")
                
say("")
            elseif 
s == 2 then
                local ranking 
= mysql_query("SELECT (SELECT name FROM player.player WHERE id = pid) AS name, points FROM player.pvptournament_winlog ORDER BY points DESC LIMIT 10", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
                
say_title("PVP-Turnier Rangliste:")
                if 
ranking == "ERROR" then
                    say_reward
("Es gibt noch keine Spieler in der Rangliste.")
                    
say("")
                    return
                
end
                
for i = 1, table.getn(ranking.name), 1 do
                    
say(i..". "..tostring(ranking.name[i]).." ("..tostring(ranking.points[i]).." Punkte)")
                
end
                say
("")
                
local self_rank = mysql_query("SELECT rank, points FROM (SELECT @rownum := @rownum + 1 AS rank, points, pid FROM player.pvptournament_winlog JOIN (SELECT @rownum := 0) r ORDER BY pvptournament_winlog.points DESC) x WHERE x.pid = '"..tostring(pc.get_player_id()).."'", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
                if 
self_rank == "ERROR" then
                    
return
                
end
                say
("Eigener Rang:")
                
say(self_rank.rank[1]..". "..tostring(pc.get_name()).." ("..tostring(self_rank.points[1]).." Punkte)")
                
say("")
            
end
        end
        
    end 
wieso wird einer nicht aus den ring geportet wenn er verloren hat
05/30/2015 18:35 Nick#11594
Quote:
Originally Posted by #Merix View Post
PHP Code:
quest truhen_zero begin  
    state start begin  
        when login 
or pc.get_level() >= 1 begin 
            set_state
(truhen) 
        
end 
    end 
    state truhen begin 
        when 50187.
use begin 
            pc
.give_item2(76024, 5)  --Grüner Zauber 
            pc
.give_item2(76025, 5)  --Grüne Stärke 
            pc
.give_item2(70038, 50) -- Tapferkeitsumhang
            pc
.give_item2(27001, 50) --Roter Trank(K) 
            
pc.give_item2(27004, 20) --Blauer Trank(K) 
            
pc.give_item2(27110, 10)  --Grüner Trank(K) 
            
pc.give_item2(27113, 10)  --Violetter Trank(K) 
            
pc.remove_item(50187, 1) --Lehrlingstruhe I verschwindet 
        end  
        when 50188.
use with pc.get_level() >= 10 begin  
            pc
.give_item2(72723, 1)  --Elixier der Sonne (K) 
            
pc.give_item2(27111, 5)  --Grüner Trank(M)  
            
pc.give_item2(27113, 5)  --Geschwindigkeits Trank(K) 
            
pc.give_item2(76008, 5)  --Medaille des Drachen  
            pc
.give_item2(50189, 1)  --Lehrlingstruhe III 
            pc
.remove_item(50188, 1) --Lehrlingstruhe II verschwindet 
        end  
        when 50189.
use with pc.get_level() >= 20 begin  
            pc
.give_item2(72727, 1)  --Elixier des Mondes (K) 
            
pc.give_item2(27111, 5)  --Grüner Trank(M) 
            
pc.give_item2(27113, 5)  --Geschwindigkeits Trank(K)  
            
pc.give_item2(76006, 1)  --Kompass des Metinsteins  
            pc
.give_item2(76013, 15)  --Grüner Zauber 
            pc
.give_item2(76014, 15)  --Grüne Stärke 
            pc
.give_item2(50190, 1)  --Expertentruhe I 
            pc
.remove_item(50189, 1) --Lehrlingstruhe III verschwindet 
        end  
        when 50190.
use with pc.get_level() >= 30 begin  
            pc
.give_item2(27113, 5)  --Geschwindigkeits Trank(K)  
            
pc.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(25040, 7)  --Segenschriftrollen 
            pc
.give_item2(70003, 1)  --Buch des Anführers             
            pc
.give_item2(50191, 1)  --Expertentruhe II 
            pc
.remove_item(50190, 1) --Expertentruhe I verschwindet 
        end  
        when 50191.
use with pc.get_level() >= 40 begin  
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(71153, 1)  --Trank der Weisheit 
            pc
.give_item2(70003, 1)  --Buch des Anführers 
            pc
.give_item2(50192, 1)  --Expertentruhe III 
            pc
.remove_item(50191, 1) --Expertentruhe II verschwindet 
        end  
        when 50192.
use with pc.get_level() >= 50 begin  
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(70038, 100)  --Tapferkeitsümhänge 
            pc
.give_item2(71095, 10)  --Passierschein 
            pc
.give_item2(70058, 1)  --Teleportationsring 
            pc
.give_item2(50193, 1)  --Meistertruhe I 
            pc
.remove_item(50192, 1) --Expertentruhe III verschwindet 
        end  
        when 50193.
use with pc.get_level() >= 60 begin  
            pc
.give_item2(71032, 5)  --Schriftrolle des Drachen 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(76000, 5)  --Pfirsichblütenwein 
            pc
.give_item2(50194, 1)  --Meistertruhe II 
            pc
.remove_item(50193, 1) --Meistertruhe I verschwindet 
        end  
        when 50194.
use with pc.get_level() >= 70 begin 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(76001, 2)  --Status-Neuverteilung 
            pc
.give_item2(76013, 30)  --Grüner Zauber 
            pc
.give_item2(76014, 30)  --Grüne Stärke 
            pc
.give_item2(50195, 1)  --Meistertruhe III 
            pc
.remove_item(50194, 1) --Meistertruhe II verschwindet 
        end  
        when 50195.
use with pc.get_level() >= 80 begin 
            pc
.give_item2(71101, 5)  --Trank der Hast 
            pc
.give_item2(27112, 5)  --Trank des Angriffs 
            pc
.give_item2(72728, 1)  --Elixier des Mondes (M) 
            
pc.give_item2(72728, 5)  --Elixier des Forschers 
            pc
.give_item2(50196, 1)  --Großmeistertruhe 
            pc
.remove_item(50195, 1) --Meistertruhe III verschwindet 
        end  
        when 50196.
use with pc.get_level() >= 90 begin 
            pc
.give_item2(39004, 5)  --Segenskugel 
            pc
.give_item2(72724, 1)  --Elixier der Sonne (M) 
            
pc.give_item2(76010, 3)  --Blutstein 
            pc
.give_item2(30319, 3)  --Schrumpfkopf 
            pc
.give_item2(50127, 1)  --Grüne Zaubertruhe 
            pc
.remove_item(50196, 1) --Großmeistertruhe verschwindet 
        end  
    end  
end 

Fehlermeldung im VirtualBox.

Es besteht (ohne Weiteres) keine Möglichkeit, eine Funktion als Trigger zu nutzen. Der State inkl. Abfrage ist so oder so hinfällig, da das Level des Spielers ohnehin immer >= 1 entspricht.

lg
06/01/2015 09:45 Backxtar#11595
Habe diese Quest vom Teleportsystem erweitert mit ein paar Teleportzielen,
jedoch soll man sich erst mit Level 75 in die Grotte und Grotte2 bzw. Boss teleportieren können.


Weiß jemand wie man dort eine Levelbegrenzung einfügt`?