|
You last visited: Today at 00:00
Advertisement
[SERVICE] Die Questkontrolle
Discussion on [SERVICE] Die Questkontrolle within the Metin2 Private Server forum part of the Metin2 category.
06/16/2015, 22:09
|
#11656
|
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
|
Komme einfach net weiter, bin wohl zu blöd für die MySQL-Sachen..
Code:
quest guild_safebox begin
state start begin
function ginvfrei()
local a = mysql_query("select * from player.guild_safebox where id = '"..pc.get_guild().."'")
return a.open[1]
end
when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
local ginvfrei = guild_safebox.ginvfrei()
if pc.is_guild_master()then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox()
else
if ginvfrei > 0 then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox(ginvfrei)
-- guild.open_safebox(1) = 1 page
-- guild.open_safebox(3) = 3 pages [max]
else
say_title(mob_name(npc.get_race())..":")
say("Leider sind die Lagerseiten zurzeit nicht")
say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
say("Wünsche einen schönen Tag!")
say("")
end
end
end
end
end
Fehler :
Code:
SYSERR: Jun 16 22:04:37 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: attempt to index field `open' (a nil value)
SYSERR: Jun 16 22:04:37 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
|
|
|
06/16/2015, 22:24
|
#11657
|
elite*gold: 19
Join Date: Aug 2011
Posts: 588
Received Thanks: 217
|
Quote:
Originally Posted by PlayaStylee
Hillfe bitte porte mich auf die map wenn ich metin oder wildhund haue passiert nix es steht auch nix oder sonst was Kann mir bitte einer helfen
PHP Code:
quest bossrun begin
state start begin
when 30123.chat."bossrun betreten" with pc.get_map_index() == 1 or 21 or 41 begin
say("".. pc.get_name() ..":")
say("Ich habe eine Notitz gefunden")
say("Es ist schwer etwas zu entzifern.")
wait()
say("".. pc.get_name() ..":")
say("Ich glaube es handelt sich um die")
say("Meerjungfrau die von Kryos2s")
say("Sklaven gefangen genommen wurde.")
wait()
say("".. pc.get_name() ..":")
say("Ah nun kann ich etwas entzifern..")
say("Es sieht so aus als stamm diese Notitz")
say("höchstpersönlich von Kryos2!")
wait()
say_red("Kryos2:")
say("Herzlichen Glückwunsch!")
say("Du hast einen freien eintritt in die Hölle")
say("erhalten!")
wait()
if pc . get_level ( ) < 40 then
say_reward("Mindestlevel 40!. Komme wieder, wenn du Level 40 bist!")
elseif pc . get_level ( ) > 55 then
say_reward("Max Level 55!")
else
say("Eure erste Aufgabe besteht darin")
say("den Metin der Seele zu bezwingen!")
say("Aber seht euch vor! Nur wer das Oberhaupt tötet")
say("und die Meerjungfrau rettet")
say("bekommt auch die Belohnung!")
wait()
say("Möchtest du die Meerjungfrau retten?")
local s = select("Ja", "Nein")
if s == 1 then
pc.warp(1251200 , 1246800)
pc.remove_item(30160,1)
else
return
end
end
end
when 101.kill with pc.get_map_index()==303 begin
local jump1 = number(89, 90)
if jump1<=50 then
chat("Du hattest Glück!")
chat("Du wirst gleich weiter teleportiert!")
timer("bossrun", 10)
else
chat("Kryos2 lacht über deine nutzlosen versuche.")
chat("Bezwinge erneut einen Metin der Seele!")
end
end
when bossrun.timer begin
d.setf("bossrunlevel", 1)
d.new_jump_all(303, 12495, 12480)
local vid = d.spawn_mob(691, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 692.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 2)
timer("bossrun2", 10)
end
end
when bossrun2.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(791, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 791.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 3)
timer("bossrun3", 10)
end
end
when bossrun3.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(2092, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 2092.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 4)
timer("bossrun4", 10)
end
end
when bossrun4.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(2191, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 2191.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 5)
timer("bossrun5", 10)
end
end
when bossrun5.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(1901, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 1901.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 6)
timer("bossrun6", 10)
end
end
when bossrun6.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(2206, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 2206.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 7)
timer("bossrun7", 10)
end
end
when bossrun7.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(1304, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 1304.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 8)
timer("bossrun8", 10)
end
end
when bossrun8.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(1091, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 1091.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 9)
timer("bossrun9", 10)
end
end
when bossrun9.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(1092, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 1092.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 11)
timer("bossrun10", 10)
end
end
when bossrun10.timer begin
d.jump_all(12495, 12480)
local vid = d.spawn_mob(2306, 147, 135)
d.set_unique("real", vid)
d.notice("Los gehts!");
end
when 2306.kill with pc.in_dungeon() begin
if d.is_unique_dead("real") then
d.setf("bossrunlevel", 12)
d.notice("Ihr habt es geschaft die Meerjungfrau zu retten.")
d.notice("Dies war eine nicht allzu leichte Aufgabe.")
d.notice("Nun sollt ihr eine Belohnung erhalten.")
d.kill_all()
timer("meerjungfrau_end_port", 10)
end
end
when meerjungfrau_end_port.timer begin
d.jump_all(12495, 12480)
d.spawn_mob(20011, 147, 135)
timer("bossrun_escape_timer", 120)
d.notice("Ihr werdet in 2 Minuten rausgeportet")
end
when 20011.chat."Belohnung" with pc.in_dungeon() and pc.getqf("belo") == 0 begin
say("Bla bla , hier kriegst du deine Belohnung")
pc.give_item2(19,1)
pc.setqf("belo", 1)
end
when bossrun_escape_timer.timer begin
d.setf("bossrunlevel", 0)
pc.setqf("belo",0)
-- warp_to_village()
warp_all_to_village(pc.get_map_index(), 30)
end
end
end
|
Hallo PlayaStylee,
wie ich das sehe liegt bereits hier ein Problem vor:
PHP Code:
local jump1 = number(89, 90)
if jump1<=50 then
Er sucht sich nur eine Zahl zwischen 89 und 90 aus,
du willst aber das man teleportiert wird sobald die Zahl unter oder = 50 ist.
Außerdem würde ich dir empfehlen die Tötungen mit "npc.get_race()" zu regeln,
da "when 101.kill begin" später zu Problemen führen könnte.
Sollte das Problem morgen noch vorhanden sein kann ich dir die Quest umschreiben.
Bin gerade nicht zuhause deswegen kann ich dir nicht weiter helfen.
Mfg.
|
|
|
06/17/2015, 01:41
|
#11658
|
elite*gold: 10
Join Date: Jun 2013
Posts: 314
Received Thanks: 24
|
Quote:
Originally Posted by .CHKaruzo
Hallo PlayaStylee,
wie ich das sehe liegt bereits hier ein Problem vor:
PHP Code:
local jump1 = number(89, 90)
if jump1<=50 then
Er sucht sich nur eine Zahl zwischen 89 und 90 aus,
du willst aber das man teleportiert wird sobald die Zahl unter oder = 50 ist.
Außerdem würde ich dir empfehlen die Tötungen mit "npc.get_race()" zu regeln,
da "when 101.kill begin" später zu Problemen führen könnte.
Sollte das Problem morgen noch vorhanden sein kann ich dir die Quest umschreiben.
Bin gerade nicht zuhause deswegen kann ich dir nicht weiter helfen.
Mfg.
|
leider hab ich keine erfahrung von questen etc hoffe du kannst mir es umschreiben ? wäre nett
|
|
|
06/17/2015, 12:48
|
#11659
|
elite*gold: 0
Join Date: Feb 2015
Posts: 400
Received Thanks: 46
|
Quote:
Originally Posted by Backxtar
Habe diese PVP Tunier Quest (automatisch)
Code:
quest pvp_manager begin
state start begin
when login with pc.get_map_index() == 330 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() != 330 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() != 330 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,847200)
end
when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 330 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() == 330 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() == 330 and pc.is_gm() and game.get_event_flag("pvp") == 0 and ae_pvp_tournament == nil begin
say_title("PVP-Turnier starten:")
say("Bitte lege die Levellimits für das PVP-Turnier")
say("fest.")
say("")
say_reward("Minimum Level (minimum 15):")
local str_min_level = input()
say_title("PVP-Turnier starten:")
local min_level = tonumber(str_min_level)
if min_level == nil then
say("Es wurde keine Zahl eingegeben.")
say("")
return
end
if tonumber(str_min_level) < 15 then
min_level = 15
end
say("Das minimale Level ist nun "..tostring(min_level)..".")
say("Bitte geben sie ein maximales Level ein:")
local str_max_level = input()
say_title("PVP-Turnier starten:")
local max_level = tonumber(str_max_level)
if max_level == nil then
say("Es wurde keine Zahl eingegeben.")
say("")
return
end
if tonumber(str_max_level) < min_level then
say("Das maximale Level muss größer als das")
say("minimale Level sein.")
say("")
return
end
game.set_event_flag("pvp_minlevel", min_level)
game.set_event_flag("pvp_maxlevel", max_level)
say("Minimal-Level "..tostring(min_level))
say("Maximal-Level "..tostring(max_level))
say("")
local s = select("Jetzt starten", "Abbrechen")
if s == 2 then
return
end
say_title("PVP-Turnier starten:")
say("Das PVP-Turnier wurde gestartet.")
say("Jeder, der teilnehmen möchte, kann sich hier")
say("anmelden.")
say("Die Anmeldungen können hier geschlossen werden.")
say("")
say_reward("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
pvp_manager.open_registrations()
end
function open_registrations()
game.set_event_flag("pvp", 1)
attender_count = 0
game.set_event_flag("pvp_tournament", get_global_time())
pvp_attenders = nil
pvp_attenders = { }
arena = {
-- arena 1
{
{ 113, 100 },
{ 88, 100 },
0,
"SLEEPING",
0,
},
-- arena 2
{
{ 113, 152 },
{ 88, 152 },
0,
"SLEEPING",
0,
},
-- arena 3
{
{ 140, 152 },
{ 164, 152 },
0,
"SLEEPING",
0,
},
-- arena 4
{
{ 164, 100 },
{ 140, 100 },
0,
"SLEEPING",
0,
},
}
notice_all("Die Anmeldungen für das PVP-Turnier sind nun eröffnet!")
notice_all("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
end
when 20078.chat."Beim PVP-Turnier anmelden" with pc.get_map_index() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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_s4.pvptournament_winlog (pid, points) VALUES ((SELECT id FROM player_s4.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_s4.player WHERE id = pid) AS name, points FROM player_s4.pvptournament_winlog ORDER BY points DESC LIMIT 10", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
say_title("PVP-Turnier Rangliste:")
if ranking == "ERROR" then
say_reward("Es gibt noch keine Spieler in der Rangliste.")
say("")
return
end
for i = 1, table.getn(ranking.name), 1 do
say(i..". "..tostring(ranking.name[i]).." ("..tostring(ranking.points[i]).." Punkte)")
end
say("")
local self_rank = mysql_query("SELECT rank, points FROM (SELECT @rownum := @rownum + 1 AS rank, points, pid FROM player_s4.pvptournament_winlog JOIN (SELECT @rownum := 0) r ORDER BY pvptournament_winlog.points DESC) x WHERE x.pid = '"..tostring(pc.get_player_id()).."'", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
if self_rank == "ERROR" then
return
end
say("Eigener Rang:")
say(self_rank.rank[1]..". "..tostring(pc.get_name()).." ("..tostring(self_rank.points[1]).." Punkte)")
say("")
end
end
end
end
Allerdings kann ich nur eine Belohnung festlegen, Starten usw geht nicht.. Jemand ne Idee?
|
Hier..
|
|
|
06/17/2015, 13:02
|
#11660
|
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
|
Quote:
Originally Posted by dstyl
Komme einfach net weiter, bin wohl zu blöd für die MySQL-Sachen..
Code:
quest guild_safebox begin
state start begin
function ginvfrei()
local a = mysql_query("select * from player.guild_safebox where id = '"..pc.get_guild().."'")
return a.open[1]
end
when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
local ginvfrei = guild_safebox.ginvfrei()
if pc.is_guild_master()then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox()
else
if ginvfrei > 0 then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox(ginvfrei)
-- guild.open_safebox(1) = 1 page
-- guild.open_safebox(3) = 3 pages [max]
else
say_title(mob_name(npc.get_race())..":")
say("Leider sind die Lagerseiten zurzeit nicht")
say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
say("Wünsche einen schönen Tag!")
say("")
end
end
end
end
end
Fehler :
Code:
SYSERR: Jun 16 22:04:37 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: attempt to index field `open' (a nil value)
SYSERR: Jun 16 22:04:37 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
|
Irgendjemand ne Idee?
|
|
|
06/17/2015, 13:10
|
#11661
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Quote:
Originally Posted by dstyl
Irgendjemand ne Idee?
|
Der Fehler wird dir doch schon serviert ... "attempt to index field `open' (a nil value)"
versucht auf das Feld 'open' zuzugreifen, welches nil (nicht vorhanden) ist.
Kontrollier mal, ob das Feld 'open' wirklich in der Tabelle steht, wenn ja versuchs mal so:
Code:
quest guild_safebox begin
state start begin
function ginvfrei()
local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild()))
if not result or table.getn(result.open) < 1 then
return 0
end
return tonumber(result.open[1])
end
when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
local ginvfrei = guild_safebox.ginvfrei()
if pc.is_guild_master()then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox()
else
if ginvfrei > 0 then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox(ginvfrei)
-- guild.open_safebox(1) = 1 page
-- guild.open_safebox(3) = 3 pages [max]
else
say_title(mob_name(npc.get_race())..":")
say("Leider sind die Lagerseiten zurzeit nicht")
say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
say("Wünsche einen schönen Tag!")
say("")
end
end
end
end
end
|
|
|
06/17/2015, 15:30
|
#11662
|
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
|
Quote:
Originally Posted by It's me, 1093
Der Fehler wird dir doch schon serviert ... "attempt to index field `open' (a nil value)"
versucht auf das Feld 'open' zuzugreifen, welches nil (nicht vorhanden) ist.
Kontrollier mal, ob das Feld 'open' wirklich in der Tabelle steht, wenn ja versuchs mal so:
Code:
quest guild_safebox begin
state start begin
function ginvfrei()
local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild()))
if not result or table.getn(result.open) < 1 then
return 0
end
return tonumber(result.open[1])
end
when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
local ginvfrei = guild_safebox.ginvfrei()
if pc.is_guild_master()then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox()
else
if ginvfrei > 0 then
say_title(mob_name(npc.get_race())..":")
say("Gerne doch, hier ist das Lager.")
say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
say("Wünsche einen schönen Tag!")
say("")
guild.open_safebox(ginvfrei)
-- guild.open_safebox(1) = 1 page
-- guild.open_safebox(3) = 3 pages [max]
else
say_title(mob_name(npc.get_race())..":")
say("Leider sind die Lagerseiten zurzeit nicht")
say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
say("Wünsche einen schönen Tag!")
say("")
end
end
end
end
end
|
Vorerst mal : Danke für die Hilfe.
Leider funktioniert es immernoch nicht.
Die Tabelle existiert, hier ein Screenshot :
Nachdem ich deine Quest übernommen habe, folgender Error in der Syserr (Ch1) :
Code:
SYSERR: Jun 17 15:28:39 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: bad argument #1 to `getn' (table expected, got nil)
SYSERR: Jun 17 15:28:39 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
|
|
|
06/18/2015, 00:59
|
#11663
|
elite*gold: 0
Join Date: Feb 2011
Posts: 118
Received Thanks: 128
|
PHP Code:
quest give_basic_weapon begin
state start begin
when login begin
say_title("Willkommen auf ImbaMT2")
pc.change_money(100000)
pc.give_item2("27003",200)
pc.give_item2("27006",200)
pc.give_item2("71050",200)
pc.give_item2("72702",200)
pc.give_item2("50053",1)
horse.set_level(30)
horse.ride()
if pc.get_job() == 0 then
pc . give_item2 ( "19" , 1 )
pc . give_item2 ( "3009" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
pc . give_item2 ( "12209" , 1 )
pc . give_item2 ( "11209" , 1 )
say_reward("Du erhielst das Kriegerset!")
elseif pc.get_job() == 1 then
pc . give_item2 ( "1009" , 1 )
pc . give_item2 ( "2009" , 1 )
pc . give_item2 ( "12349" , 1 )
pc . give_item2 ( "11409" , 1 )
pc . give_item2 ( "8000" , 200 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Ninjaset!")
elseif pc.get_job() == 2 then
pc . give_item2 ( "19" , 1 )
pc . give_item2 ( "12489" , 1 )
pc . give_item2 ( "11609" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Suraset!")
elseif pc.get_job() == 3 then
pc . give_item2 ( "7009" , 1 )
pc . give_item2 ( "5009" , 1 )
pc . give_item2 ( "11809" , 1 )
pc . give_item2 ( "12629" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Schamiset!")
end
end
end
state __COMPLETE__ begin
end
end
Ich glaube mir fehlt diese set_state(__COMPLETE__) aber wohin ?
|
|
|
06/18/2015, 01:04
|
#11664
|
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
|
jap, das fehlt
unter das end für die if abfrage
PHP Code:
quest give_basic_weapon begin
state start begin
when login begin
say_title("Willkommen auf ImbaMT2")
pc.change_money(100000)
pc.give_item2("27003",200)
pc.give_item2("27006",200)
pc.give_item2("71050",200)
pc.give_item2("72702",200)
pc.give_item2("50053",1)
horse.set_level(30)
horse.ride()
if pc.get_job() == 0 then
pc . give_item2 ( "19" , 1 )
pc . give_item2 ( "3009" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
pc . give_item2 ( "12209" , 1 )
pc . give_item2 ( "11209" , 1 )
say_reward("Du erhielst das Kriegerset!")
elseif pc.get_job() == 1 then
pc . give_item2 ( "1009" , 1 )
pc . give_item2 ( "2009" , 1 )
pc . give_item2 ( "12349" , 1 )
pc . give_item2 ( "11409" , 1 )
pc . give_item2 ( "8000" , 200 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Ninjaset!")
elseif pc.get_job() == 2 then
pc . give_item2 ( "19" , 1 )
pc . give_item2 ( "12489" , 1 )
pc . give_item2 ( "11609" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Suraset!")
elseif pc.get_job() == 3 then
pc . give_item2 ( "7009" , 1 )
pc . give_item2 ( "5009" , 1 )
pc . give_item2 ( "11809" , 1 )
pc . give_item2 ( "12629" , 1 )
pc . give_item2 ( "16009" , 1 )
pc . give_item2 ( "15009" , 1 )
pc . give_item2 ( "14009" , 1 )
pc . give_item2 ( "17009" , 1 )
pc . give_item2 ( "13009" , 1 )
say_reward("Du erhielst das Schamiset!")
end
set_state(__COMPLETE__)
end
end
state __COMPLETE__ begin
end
end
PHP Code:
local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild()))
if not result or table.getn(result.open) < 1 then
return 0
end
return tonumber(result.open[1])
das ding ist result ist keine tabelle und result.open auch nicht
result ist 1 spezifischer wert und zwar der wert "open" in der tabelle guild_safebox im verzeichnis player, und zwar der open wert der deiner guilde zugeordnet ist
darum geht table.getn nicht
|
|
|
06/18/2015, 08:13
|
#11665
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Quote:
Originally Posted by Rofelmau
PHP Code:
local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild())) if not result or table.getn(result.open) < 1 then return 0 end return tonumber(result.open[1])
das ding ist result ist keine tabelle und result.open auch nicht
result ist 1 spezifischer wert und zwar der wert "open" in der tabelle guild_safebox im verzeichnis player, und zwar der open wert der deiner guilde zugeordnet ist
darum geht table.getn nicht
|
mysql_query gibt einen table zurück. Der Table ist (zumindest bei der Funktion von Mijago) doppelt aufgebaut:
Code:
queryrueckgabe = {
columnname1 = {row1, row2, row3},
columnname2 = {row2, row2, row3},
[1] = {valueofCol1Row1, valueofCol1Row2, valueofCol1Row3},
[2] = {valueofCol2Row1, valueofCol2Row2, valueofCol2Row3}
}
Die Ergebnisse stehen also 2x in der Rückgabe.
Wenn man also eine Query auf eine Spalte ausführt, die auf 1 Ergebnis limitiert ist, müsste die Rückgabe im Normalfall so aussehen:
(in der Spalte open steht in der Datenbank in diesem Beispiel der Wert 7)
Code:
queryrueckgabe = {
open = {7},
[1] = {7}
}
fragt man also auf table.getn(result.open) ab, müsste es 1 zurückgeben.
Du kannst dir ja gerne mal wirklich anschauen, was mysql_query bei einem SELECT zurückgibt.
Habe mir dafür diese Funktion geschrieben:
Code:
function tablestr(tbl)
local str = ""
for k,v in pairs(tbl) do
if type(v) == "table" then
v = tablestr(v)
elseif type(v) == "string" then
v = string.format("\"%s\"", v)
end
if type(k) == "string" then
k = string.format("\"%s\"", k)
end
str = string.format("%s\n [%s] = %s,", str, k, v)
end
return string.format("{%s}", str)
end
Damit kannst du dir einen beliebigen Table als String ausgeben lassen
|
|
|
06/18/2015, 18:03
|
#11666
|
elite*gold: 0
Join Date: Feb 2015
Posts: 400
Received Thanks: 46
|
Quote:
Originally Posted by Backxtar
Hier..
|
Up ^^
Immernoch das Problem mit der Quest
Code:
state start begin
when login with pc.get_map_index() == 330 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() != 330 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() != 330 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,847200)
end
when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 330 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() == 330 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() == 330 and pc.is_gm() and game.get_event_flag("pvp") == 0 and ae_pvp_tournament == nil begin
say_title("PVP-Turnier starten:")
say("Bitte lege die Levellimits für das PVP-Turnier")
say("fest.")
say("")
say_reward("Minimum Level (minimum 15):")
local str_min_level = input()
say_title("PVP-Turnier starten:")
local min_level = tonumber(str_min_level)
if min_level == nil then
say("Es wurde keine Zahl eingegeben.")
say("")
return
end
if tonumber(str_min_level) < 15 then
min_level = 15
end
say("Das minimale Level ist nun "..tostring(min_level)..".")
say("Bitte geben sie ein maximales Level ein:")
local str_max_level = input()
say_title("PVP-Turnier starten:")
local max_level = tonumber(str_max_level)
if max_level == nil then
say("Es wurde keine Zahl eingegeben.")
say("")
return
end
if tonumber(str_max_level) < min_level then
say("Das maximale Level muss größer als das")
say("minimale Level sein.")
say("")
return
end
game.set_event_flag("pvp_minlevel", min_level)
game.set_event_flag("pvp_maxlevel", max_level)
say("Minimal-Level "..tostring(min_level))
say("Maximal-Level "..tostring(max_level))
say("")
local s = select("Jetzt starten", "Abbrechen")
if s == 2 then
return
end
say_title("PVP-Turnier starten:")
say("Das PVP-Turnier wurde gestartet.")
say("Jeder, der teilnehmen möchte, kann sich hier")
say("anmelden.")
say("Die Anmeldungen können hier geschlossen werden.")
say("")
say_reward("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
pvp_manager.open_registrations()
end
function open_registrations()
game.set_event_flag("pvp", 1)
attender_count = 0
game.set_event_flag("pvp_tournament", get_global_time())
pvp_attenders = nil
pvp_attenders = { }
arena = {
-- arena 1
{
{ 113, 100 },
{ 88, 100 },
0,
"SLEEPING",
0,
},
-- arena 2
{
{ 113, 152 },
{ 88, 152 },
0,
"SLEEPING",
0,
},
-- arena 3
{
{ 140, 152 },
{ 164, 152 },
0,
"SLEEPING",
0,
},
-- arena 4
{
{ 164, 100 },
{ 140, 100 },
0,
"SLEEPING",
0,
},
}
notice_all("Die Anmeldungen für das PVP-Turnier sind nun eröffnet!")
notice_all("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
end
when 20078.chat."Beim PVP-Turnier anmelden" with pc.get_map_index() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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() == 330 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_s4.pvptournament_winlog (pid, points) VALUES ((SELECT id FROM player_s4.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_s4.player WHERE id = pid) AS name, points FROM player_s4.pvptournament_winlog ORDER BY points DESC LIMIT 10", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
say_title("PVP-Turnier Rangliste:")
if ranking == "ERROR" then
say_reward("Es gibt noch keine Spieler in der Rangliste.")
say("")
return
end
for i = 1, table.getn(ranking.name), 1 do
say(i..". "..tostring(ranking.name[i]).." ("..tostring(ranking.points[i]).." Punkte)")
end
say("")
local self_rank = mysql_query("SELECT rank, points FROM (SELECT @rownum := @rownum + 1 AS rank, points, pid FROM player_s4.pvptournament_winlog JOIN (SELECT @rownum := 0) r ORDER BY pvptournament_winlog.points DESC) x WHERE x.pid = '"..tostring(pc.get_player_id()).."'", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
if self_rank == "ERROR" then
return
end
say("Eigener Rang:")
say(self_rank.rank[1]..". "..tostring(pc.get_name()).." ("..tostring(self_rank.points[1]).." Punkte)")
say("")
end
end
end
end
|
|
|
06/18/2015, 21:43
|
#11667
|
elite*gold: 0
Join Date: Mar 2015
Posts: 119
Received Thanks: 29
|
Hallo, vorweg. Ich bin neu im questen!
Mein Problem ist das ich eine neue give_basic_weapon.quest machen möchte.
Hat auch alles super geklappt.
Aber wenn ich den Befehl python make_quest eingebe um die Quests zu reloaden verändert sich ingame nichts.
Der Befehl läuft sauber und ohne Fehler durch.
Die Quest:
quest give_basic_weapon begin
state start begin
when login begin
if pc.getqf("basic_weapon") == 0 then
pc.setqf("basic_weapon", 1)
notice_all("Wir begrüßen, " .. pc.get_name() .. " ")
addimage ( - 100 , - 70 , "004.tga" )
say("Willkommen auf Fortitudo-Mt2")
say("")
say("Bitte schaut im Forum vorbei,")
say("um immer auf dem neusten Stand zu sein.")
say("Falls ihr Bug's findet, meldet sie bitte.")
say("Wir wollen durch möglichst keine Bug's")
say("einen großen Spielspaß ermöglichen.")
say("")
say("Bei Fragen oder sonstigem,")
say("einfach auf dem Teamspeak melden.")
say("")
say("")
say("Möchtest du auf die Starter Map?")
local s = select("Ja", "Nein")
if 1 == s then
pc.warp(200, 100)
else
return
end
if pc.job == 0 then
pc.warp(200,100)
pc.give_item2(27002,255 )
pc.give_item2(27002,255 )
pc.give_item2(27005,200 )
pc.give_item2(70038,20 )
pc.give_item2(16)
pc.give_item2(11206)
pc.give_item2(12206)
pc.give_item2(13006)
pc.give_item2(14006)
pc.give_item2(15006)
pc.give_item2(16006)
pc.give_item2(17006)
pc.give_item2(72702)
elseif pc.job == 1 then
pc.give_item2(27002,255 )
pc.give_item2(27002,255 )
pc.give_item2(27005,200 )
pc.give_item2(70038,20 )
pc.give_item2(1006)
pc.give_item2(11406)
pc.give_item2(12346)
pc.give_item2(13006)
pc.give_item2(14006)
pc.give_item2(15006)
pc.give_item2(16006)
pc.give_item2(17006)
pc.give_item2(72702)
elseif pc.job == 2 then
pc.give_item2(27002,255 )
pc.give_item2(27002,255 )
pc.give_item2(27005,200 )
pc.give_item2(70038,20 )
pc.give_item2(16)
pc.give_item2(11606)
pc.give_item2(12486)
pc.give_item2(13006)
pc.give_item2(14006)
pc.give_item2(15006)
pc.give_item2(16006)
pc.give_item2(17006)
pc.give_item2(72702)
elseif pc.job == 3 then
pc.give_item2(27002,255 )
pc.give_item2(27002,255 )
pc.give_item2(27005,200 )
pc.give_item2(70038,20 )
pc.give_item2(7006)
pc.give_item2(11806)
pc.give_item2(12626)
pc.give_item2(13006)
pc.give_item2(14006)
pc.give_item2(15006)
pc.give_item2(16006)
pc.give_item2(17006)
pc.give_item2(72702)
end
end
end
end
end
Kurz und knapp er reloadet die Quests nicht.
Bitte um Hilfe :3
|
|
|
06/18/2015, 21:55
|
#11668
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
du musst ingame noch machen
|
|
|
06/18/2015, 21:56
|
#11669
|
elite*gold: 0
Join Date: Mar 2015
Posts: 119
Received Thanks: 29
|
Schon gemacht, passiert aber nichts.
|
|
|
06/18/2015, 23:04
|
#11670
|
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
|
Hm manchmal beschweren sich server bei say befehlen die auf ein login event folgen
versuch das mal mit nem timer zu umgehen
also
when login begin
if pc.getqf("basic_weapon") == 0 then
pc.setqf("basic_weapon",1)
timer("basic_weapon",2)
end
end
when basic_weapon. timer begin
say("")
usw
|
|
|
All times are GMT +1. The time now is 00:01.
|
|