|
You last visited: Today at 22:52
Advertisement
[SERVICE] Die Questkontrolle
Discussion on [SERVICE] Die Questkontrolle within the Metin2 Private Server forum part of the Metin2 category.
05/06/2016, 14:02
|
#12316
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Wenn ich ein Item gebe mit "pc.give_item2(vnum, 3)" z.B. dann erhalte ich trz das Item nur 1x. Wisst ihr woran es liegt?
Getestet mit Segi, gegenstand verz. und gegenstand verhex.
|
|
|
05/06/2016, 14:22
|
#12317
|
elite*gold: 130
Join Date: Jan 2015
Posts: 111
Received Thanks: 86
|
Quote:
Originally Posted by DAS IST VEGAAZ
Wenn ich ein Item gebe mit "pc.give_item2(vnum, 3)" z.B. dann erhalte ich trz das Item nur 1x. Wisst ihr woran es liegt?
Getestet mit Segi, gegenstand verz. und gegenstand verhex.
|
Du musst schauen,ob man diesen Gegenstand auch stapeln kann.
|
|
|
05/07/2016, 11:09
|
#12318
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Kann mir jemand schnell erklären wie man ä,ü,ö in den Quests richtig anzeigen lässt?
|
|
|
05/07/2016, 12:08
|
#12319
|
elite*gold: 0
Join Date: Apr 2015
Posts: 428
Received Thanks: 361
|
Quote:
Originally Posted by DAS IST VEGAAZ
Kann mir jemand schnell erklären wie man ä,ü,ö in den Quests richtig anzeigen lässt?
|
-> öffne die Quest in Notepad++
-> kopiere die Quest und lösche sie raus
Oben im Reiter:
-> Kodierung -> ANSI
-> Füge deine Quest wieder ein und dann gehen auch die ä ö ü.
Stelle sicher das dort auch üöä stehen, sonst musst du diese nochmals hinzufügen.
|
|
|
05/07/2016, 12:14
|
#12320
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Quote:
Originally Posted by #Metho
-> öffne die Quest in Notepad++
-> kopiere die Quest und lösche sie raus
Oben im Reiter:
-> Kodierung -> ANSI
-> Füge deine Quest wieder ein und dann gehen auch die ä ö ü.
Stelle sicher das dort auch üöä stehen, sonst musst du diese nochmals hinzufügen.
|
Ah super geil! Dankeschön.
|
|
|
05/07/2016, 23:26
|
#12321
|
elite*gold: 270
Join Date: Mar 2015
Posts: 135
Received Thanks: 36
|
Quest
Code:
quest maxtruhe begin
state start begin
when login or pc.get_level() >= 1 begin
set_state(truhen)
end
end
state truhen begin
when 50187.use begin
local item_vnum = 10
if pc.get_job() == 1 then
item_vnum = 1000
elseif pc.get_job() == 2 then
item_vnum = 10
elseif pc.get_job() == 3 then
item_vnum = 7000
end
pc.give_item2(item_vnum)
pc.give_item2(27001, 200)
pc.give_item2(27004, 200)
pc.give_item2(27110, 5)
pc.give_item2(27113, 5)
pc.remove_item(50187, 1)
end
end
end
Fehler
Code:
Server/123.lua:3:when doesn't have begin-end clause. (()
Error occured on compile Server/123.lua
Hoffe jemand kann mir weiter helfen.
|
|
|
05/08/2016, 10:53
|
#12322
|
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
|
Zeile 3 das or durch with ersetzen
|
|
|
05/09/2016, 12:08
|
#12323
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Habe eine Quest die vollständig funktioniert, aber jedesmal wenn ich sie benutze kann ich mich danach nicht mehr bewegen bis ich relogge oder auf einen bestimmten Punkt Rechts unten im Bildschirm drücke.
Irgendeine Idee wie man das beheben könnte?
|
|
|
05/12/2016, 17:33
|
#12324
|
elite*gold: 0
Join Date: Apr 2010
Posts: 66
Received Thanks: 103
|
Quote:
Originally Posted by .Noctem
Quest
Code:
quest maxtruhe begin
state start begin
when login or pc.get_level() >= 1 begin
set_state(truhen)
end
end
state truhen begin
when 50187.use begin
local item_vnum = 10
if pc.get_job() == 1 then
item_vnum = 1000
elseif pc.get_job() == 2 then
item_vnum = 10
elseif pc.get_job() == 3 then
item_vnum = 7000
end
pc.give_item2(item_vnum)
pc.give_item2(27001, 200)
pc.give_item2(27004, 200)
pc.give_item2(27110, 5)
pc.give_item2(27113, 5)
pc.remove_item(50187, 1)
end
end
end
Fehler
Code:
Server/123.lua:3:when doesn't have begin-end clause. (()
Error occured on compile Server/123.lua
Hoffe jemand kann mir weiter helfen.
|
wrong
Code:
when login or pc.get_level() >= 1 begin
such:
Code:
when login or levelup with pc.get_level() >= 1 begin
or
Code:
when login with pc.get_level() >= 1 begin
|
|
|
05/13/2016, 15:23
|
#12325
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Finde den Fehler einfach nicht.
Fehler: Syntax Error im state start
Code:
quest job begin
state start begin
when login or levelup with pc.get_level() >= 5 begin
send_letter("Beruf")
end
when button or info begin
if pc.getqf("getjob") == 0 then
say_title("Berufe")
say("Du hast die Möglichkeit einen Beruf zu erwerben.")
say("Hierfür musst du lediglich die Insel der Meister betreten.")
say("Dort kannst du zwischen den Berufen Jäger, Söldner, Erkunder und")
say("Schatzjäger wählen. Mehr dazu findest du auf der Insel der Meister")
say("heraus.")
say_reward("Besuche die Insel der Meister.")
wait()
say_title("Aufbrechen zur Insel der Meister")
say("Möchtest du zur Insel der Meister aufbrechen?")
wait()
local idmyn = select("Ja","Nein")
if idmyn == 2 then
return()
elseif idmyn == 1 then
pc.setqf("getjob", 1)
pc.setqf("arriveidm",1)
pc.warp(584800, 893100)
end
elseif pc.getqf("getjob") == 1 and not pc.getcurrentmapindex() == 220 then
say_title("Beruf")
say("Hier kannst du zurück zur Insel der Meister.")
say("Möchtest du auf die Insel der Meister?")
local idmyn2 = select("Ja", "Nein")
if idmyn2 == 2 then
return
elseif idmyn2 == 1 then
pc.warp(584800, 893100)
end
elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() == 220 then
say_title("Beruf")
say("Du bist gerade auf der Insel der Meister.")
say("Hier kannst du die verschiedenen Meister der Berufe")
say("antreffen.")
end
end
end
end
|
|
|
05/13/2016, 16:31
|
#12326
|
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
|
Quote:
Originally Posted by DAS IST VEGAAZ
Finde den Fehler einfach nicht.
Fehler: Syntax Error im state start
Code:
quest job begin
state start begin
when login or levelup with pc.get_level() >= 5 begin
send_letter("Beruf")
end
when button or info begin
if pc.getqf("getjob") == 0 then
say_title("Berufe")
say("Du hast die Möglichkeit einen Beruf zu erwerben.")
say("Hierfür musst du lediglich die Insel der Meister betreten.")
say("Dort kannst du zwischen den Berufen Jäger, Söldner, Erkunder und")
say("Schatzjäger wählen. Mehr dazu findest du auf der Insel der Meister")
say("heraus.")
say_reward("Besuche die Insel der Meister.")
wait()
say_title("Aufbrechen zur Insel der Meister")
say("Möchtest du zur Insel der Meister aufbrechen?")
wait()
local idmyn = select("Ja","Nein")
if idmyn == 2 then
return()
elseif idmyn == 1 then
pc.setqf("getjob", 1)
pc.setqf("arriveidm",1)
pc.warp(584800, 893100)
end
elseif pc.getqf("getjob") == 1 and not pc.getcurrentmapindex() == 220 then
say_title("Beruf")
say("Hier kannst du zurück zur Insel der Meister.")
say("Möchtest du auf die Insel der Meister?")
local idmyn2 = select("Ja", "Nein")
if idmyn2 == 2 then
return
elseif idmyn2 == 1 then
pc.warp(584800, 893100)
end
elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() == 220 then
say_title("Beruf")
say("Du bist gerade auf der Insel der Meister.")
say("Hier kannst du die verschiedenen Meister der Berufe")
say("antreffen.")
end
end
end
end
|
PHP Code:
quest job begin state start begin when login or levelup with pc.get_level() >= 5 begin send_letter("Beruf") end when button or info begin if pc.getqf("getjob") == 0 then say_title("Berufe") say("Du hast die Möglichkeit einen Beruf zu erwerben.") say("Hierfür musst du lediglich die Insel der Meister betreten.") say("Dort kannst du zwischen den Berufen Jäger, Söldner, Erkunder und") say("Schatzjäger wählen. Mehr dazu findest du auf der Insel der Meister") say("heraus.") say_reward("Besuche die Insel der Meister.") wait() say_title("Aufbrechen zur Insel der Meister") say("Möchtest du zur Insel der Meister aufbrechen?") wait() local idmyn = select("Ja","Nein") if idmyn == 2 then return elseif idmyn == 1 then pc.setqf("getjob", 1) pc.setqf("arriveidm",1) pc.warp(584800, 893100) end elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() != 220 then say_title("Beruf") say("Hier kannst du zurück zur Insel der Meister.") say("Möchtest du auf die Insel der Meister?") local idmyn2 = select("Ja", "Nein") if idmyn2 == 2 then return elseif idmyn2 == 1 then pc.warp(584800, 893100) end elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() == 220 then say_title("Beruf") say("Du bist gerade auf der Insel der Meister.") say("Hier kannst du die verschiedenen Meister der Berufe") say("antreffen.") end end end end
|
|
|
05/13/2016, 17:26
|
#12327
|
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
|
Quote:
Originally Posted by Rofelmau
PHP Code:
quest job begin state start begin when login or levelup with pc.get_level() >= 5 begin send_letter("Beruf") end when button or info begin if pc.getqf("getjob") == 0 then say_title("Berufe") say("Du hast die Möglichkeit einen Beruf zu erwerben.") say("Hierfür musst du lediglich die Insel der Meister betreten.") say("Dort kannst du zwischen den Berufen Jäger, Söldner, Erkunder und") say("Schatzjäger wählen. Mehr dazu findest du auf der Insel der Meister") say("heraus.") say_reward("Besuche die Insel der Meister.") wait() say_title("Aufbrechen zur Insel der Meister") say("Möchtest du zur Insel der Meister aufbrechen?") wait() local idmyn = select("Ja","Nein") if idmyn == 2 then return elseif idmyn == 1 then pc.setqf("getjob", 1) pc.setqf("arriveidm",1) pc.warp(584800, 893100) end elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() != 220 then say_title("Beruf") say("Hier kannst du zurück zur Insel der Meister.") say("Möchtest du auf die Insel der Meister?") local idmyn2 = select("Ja", "Nein") if idmyn2 == 2 then return elseif idmyn2 == 1 then pc.warp(584800, 893100) end elseif pc.getqf("getjob") == 1 and pc.getcurrentmapindex() == 220 then say_title("Beruf") say("Du bist gerade auf der Insel der Meister.") say("Hier kannst du die verschiedenen Meister der Berufe") say("antreffen.") end end end end
|
Ich danke dir! War echt am verzweifeln.
|
|
|
05/14/2016, 12:43
|
#12328
|
elite*gold: 0
Join Date: Jul 2012
Posts: 5,520
Received Thanks: 1,350
|
Könnte jemand diese Quest so ändern das nur Teamler mit Implementor Rechte dort Gewinner Item ändern können?
Code:
quest pvp_manager begin
state start begin
when login with pc.get_map_index() == 26 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() != 26 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() != 26 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(857400,3600)
end
when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 26 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() == 26 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() == 26 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("Jeder der teilnehmen möchte, geht zum PvP Wächter!")
notice_all("Danach geht er zum PvP-Manager, um sich anzumelden!")
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() == 26 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() == 26 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() == 26 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() == 26 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 [MENTION=613962]Rown[/MENTION]um := [MENTION=613962]Rown[/MENTION]um + 1 AS rank, points, pid FROM player.pvptournament_winlog JOIN (SELECT [MENTION=613962]Rown[/MENTION]um := 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
|
|
|
05/14/2016, 21:54
|
#12329
|
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
|
Quote:
Originally Posted by Red Firestar
Könnte jemand diese Quest so ändern das nur Teamler mit Implementor Rechte dort Gewinner Item ändern können?
Code:
quest pvp_manager begin
state start begin
when login with pc.get_map_index() == 26 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() != 26 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() != 26 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(857400,3600)
end
when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 26 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() == 26 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() == 26 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("Jeder der teilnehmen möchte, geht zum PvP Wächter!")
notice_all("Danach geht er zum PvP-Manager, um sich anzumelden!")
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() == 26 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() == 26 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() == 26 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() == 26 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 [MENTION=613962]Rown[/MENTION]um := [MENTION=613962]Rown[/MENTION]um + 1 AS rank, points, pid FROM player.pvptournament_winlog JOIN (SELECT [MENTION=613962]Rown[/MENTION]um := 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
|
PHP Code:
uest pvp_manager begin state start begin when login with pc.get_map_index() == 26 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() != 26 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() != 26 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(857400,3600) end when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 26 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() == 26 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() == 26 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("Jeder der teilnehmen möchte, geht zum PvP Wächter!") notice_all("Danach geht er zum PvP-Manager, um sich anzumelden!") 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() == 26 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() == 26 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() == 26 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() and pc.get_gm_level() >= 5 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() == 26 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 [MENTION=613962]Rown[/MENTION]um := [MENTION=613962]Rown[/MENTION]um + 1 AS rank, points, pid FROM player.pvptournament_winlog JOIN (SELECT [MENTION=613962]Rown[/MENTION]um := 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
|
|
|
05/16/2016, 14:58
|
#12330
|
elite*gold: 1
Join Date: Dec 2011
Posts: 349
Received Thanks: 132
|
Heyjo Leute,
ich habe ein Problem unzwar benutze ich die Kori Serverfiles 1.3 und möchte da nun beim Seelenstein die Rangpunkte entfernen. Welche Inhalte muss ich da löschen damit es ohne Rangpunkte funktioniert. In der Translate.lua steht ja der Text für die InGame quest. Zu den Techstufen jetz, habe die Game Rev. 8029( laut der Game vom Hex editor).
Das ist die Quest zu dem Seelenstein:
PHP Code:
quest training_grandmaster_skill begin state start begin when 50513.use begin if pc.get_skill_group() == 0 then say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._20_say) return end if get_time() < pc.getqf("next_time") then if pc.is_skill_book_no_delay() then say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._30_say) wait() else say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._40_say) return end end local result = training_grandmaster_skill.BuildGrandMasterSkillList(pc.get_job(), pc.get_skill_group()) local vnum_list = result[1] local name_list = result[2] if table.getn(vnum_list) == 0 then say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._50_say) return end say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._60_say) local menu_list = {} table.foreach(name_list, function(i, name) table.insert(menu_list, name) end) table.insert(menu_list, gameforge.locale.cancel) local s=select_table(menu_list) if table.getn(menu_list) == s then return end local skill_name=name_list[s] local skill_vnum=vnum_list[s] local skill_level = pc.get_skill_level(skill_vnum) local cur_alignment = pc.get_real_alignment() local need_alignment = 1000+500*(skill_level-30) test_chat(string.format(gameforge.training_grandmaster_skill._70_chat, cur_alignment..gameforge.training_grandmaster_skill._75_chat..need_alignment)) local title=string.format(gameforge.training_grandmaster_skill._80_stringFormat, skill_name, skill_level-30+1) say_title(gameforge.training_grandmaster_skill._10_sayTitle) say(gameforge.training_grandmaster_skill._90_say) if cur_alignment<-19000+need_alignment then say_reward(gameforge.training_grandmaster_skill._100_sayReward) return end if cur_alignment<0 then say_reward(string.format(gameforge.training_grandmaster_skill._110_sayReward, need_alignment, need_alignment*2)) say_reward(gameforge.training_grandmaster_skill._120_sayReward) need_alignment=need_alignment*2 elseif cur_alignment<need_alignment then say_reward(string.format(gameforge.training_grandmaster_skill._130_sayReward, need_alignment)) say_reward(gameforge.training_grandmaster_skill._140_sayReward) else say_reward(string.format(gameforge.training_grandmaster_skill._130_sayReward, need_alignment)) end local s= select(gameforge.locale.levelup.prev_quest_go, gameforge.locale.cancel) if s==2 then return end if cur_alignment>=0 and cur_alignment<need_alignment then say_title(title) say_reward(gameforge.training_grandmaster_skill._150_sayReward) say(gameforge.training_grandmaster_skill._160_say) say_reward(gameforge.training_grandmaster_skill._170_sayReward) say(gameforge.training_grandmaster_skill._180_say) local s=input() s = string.gsub(s, "(%a*)%s*", "%1") s = string.lower(string.gsub(s, "(%a*)%s*", "%1")) local t = string.gsub(gameforge.training_grandmaster_skill._10_answer, "(%a*)%s*", "%1") t = string.lower(string.gsub(gameforge.training_grandmaster_skill._10_answer, "(%a*)%s*", "%1")) if s!=t then return end end if get_time() < pc.getqf("next_time") then if pc.is_skill_book_no_delay() then pc.remove_skill_book_no_delay() else say_title(gameforge.training_grandmaster_skill._10_sayTitle) return end end pc.setqf("next_time", get_time()+time_hour_to_sec(number(8, 12))) if need_alignment>0 then if pc.count_item(50513) > 0 then if pc.learn_grand_master_skill(skill_vnum) then pc.change_alignment(-need_alignment) say_title(title) say_reward(gameforge.training_grandmaster_skill._190_sayReward) if 40 == pc.get_skill_level(skill_vnum) then say(gameforge.training_grandmaster_skill._200_say) say(string.format(gameforge.training_grandmaster_skill._210_say, skill_name)) say(gameforge.training_grandmaster_skill._220_say) else say(gameforge.training_grandmaster_skill._230_say) say(string.format(gameforge.training_grandmaster_skill._240_say, skill_name, skill_level-30+1+1)) end say_reward(gameforge.training_grandmaster_skill._250_sayReward) say_reward(string.format(gameforge.training_grandmaster_skill._260_sayReward, need_alignment)) else say_title(title) say_reward(gameforge.training_grandmaster_skill._270_sayReward) say(gameforge.training_grandmaster_skill._280_say) say_reward(gameforge.training_grandmaster_skill._290_sayReward) pc.change_alignment(-number(need_alignment/3, need_alignment/2)) end pc.remove_item(50513) else char_log(0, "HACK 50513", pc.getname()) end end end function BuildGrandMasterSkillList(job, group) GRAND_MASTER_SKILL_LEVEL = 30 PERFECT_MASTER_SKILL_LEVEL = 40 local skill_list = special.active_skill_list[job+1][group] local ret_vnum_list = {} local ret_name_list = {} table.foreach(skill_list, function(i, skill_vnum) local skill_level = pc.get_skill_level(skill_vnum) if skill_level >= GRAND_MASTER_SKILL_LEVEL and skill_level < PERFECT_MASTER_SKILL_LEVEL then table.insert(ret_vnum_list, skill_vnum) local name=locale.GM_SKILL_NAME_DICT[skill_vnum] if name == nil then name=skill_vnum end table.insert(ret_name_list, name) end end) return {ret_vnum_list, ret_name_list} end end end
und hier ein kleiner Ausschnitt von der Game:
Ich hoffe ihr könnt mir weiter helfen. Bitte um schnelle Antworten.
|
|
|
All times are GMT +2. The time now is 22:52.
|
|