Code:
----------------------------------
-- 거미굴 3층과 보스룸 관련 전부
-- 2012.2.3 김용욱
----------------------------------
define lair_time 1200
define lair_enter_wait_time 300
define king_kill_wait_time 180
define access_limit_time 3600
quest spider_dungeon_3floor_boss begin
state start begin
--2, 던전 끝 시간.
when spider_end_timer.server_timer with game.get_event_flag("spider_dead"..get_channel_id()) == 0 begin --
warp_all_in_area_to_area(82700, 612700, 93700,625700, 69100, 614800, 69100, 614800)
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(),0)
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
game.set_event_flag("spider_dead"..get_channel_id(),0)
purge_area(82700, 612700, 93700,625700)
end
when spider_dead_timer.server_timer begin
warp_all_in_area_to_area(82700, 612700, 93700,625700, 69100, 614800, 69100, 614800)
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(), 0)
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
game.set_event_flag("spider_dead"..get_channel_id(),0)
purge_area(82700, 612700, 93700,625700)
end
when login or levelup or enter with pc.get_level() >= 50 begin
set_state( step1 )
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
end
state step1 begin
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
when 20355.chat."Spinnendungeon 3 " begin --경비대장에게 말을 걸어 퀘스트를 시작한다.
say_title(mob_name(20355))
----"12345678901234567890123456789012345678901234567890"|
say("Ah, da bist du ja! Ein Sp?trupp hat im[ENTER]Spinnendungeon eine dritte Ebene entdeckt. In[ENTER]dieser bisher verborgenen H?le sollen sich[ENTER]einige ??rst monstr?e und heimt?kische[ENTER]Spinnen eingenistet haben. Au?rdem fanden meine[ENTER]M?ner einen alten Grabstein mit einer[ENTER]eingravierten Inschrift, doch sie konnten diese[ENTER]nicht entziffern. Begib dich auf die Suche nach[ENTER]diesem Stein und bringe mir eine Kopie der[ENTER]Inschrift. Hier, dieser Passierschein verschafft[ENTER]dir ungehinderten Zutritt zum Spinnendungeon. ")
set_state( step2 )
pc.give_item2(76019)
end
end
state step2 begin --비석에 탁본을 뜨러 가야한다.
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
-----------퀘스트편지2------------
when letter begin
send_letter("Die Inschrift ")
local v = find_npc_by_vnum(30130)
if 0 != v then
target.vid("__TARGET__", v, mob_name(30130))
end
end
when button or info begin
say_title("Die Inschrift ")
say("Auf der dritten Ebene des Spinnendungeons findest[ENTER]du einen alten Grabstein mit einer eingravierten[ENTER]Inschrift. Fertige eine Kopie davon an und bringe[ENTER]sie dem Hauptmann. ")
say("")
end
when 30130.chat."Die Inschrift " begin
target.delete("__TARGET__")
say_title(pc.getname())
----"12345678901234567890123456789012345678901234567890"|
say("Perfekt, du hast den alten Grabstein gefunden und[ENTER]eine Kopie der Inschrift angefertigt! Geh zur?k[ENTER]zum Hauptmann und zeige sie ihm. ")
set_state(step3)
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
when 20355.chat."Spinnendungeon 3 " begin
say_title(mob_name(20355))
----"12345678901234567890123456789012345678901234567890"|
say("Du willst mir doch nicht erz?len, dass du dich[ENTER]nicht in den Spinnendungeon getraut hast? Du bist[ENTER]ein erfahrener K?pfer mit einer ausgefeilten[ENTER]Technik - so ein paar Krabbeltierchen sollten f?[ENTER]dich kein gro?s Problem darstellen. Aber dir ist[ENTER]bekannt, dass du den Passierschein ben?igst, um[ENTER]die H?le zu betreten? ")
end
end
state step3 begin --탁본을 떴으니 경비에게 돌아간다.
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
when letter begin
send_letter("Neue Gefahr ")
--경비대장을 가리킨다.
local v = find_npc_by_vnum(20355)
if 0 != v then
target.vid("__TARGET__", v, mob_name(20355))
end
end
when button or info begin
say_title("Neue Gefahr ")
say("Du hast eine genaue Kopie der Inschrift[ENTER]angefertigt. Zeige sie nun dem Hauptmann. ")
say("")
end
--을두지를 선택하면 해당 퀘스트에 관련된 대화를 나눌 수 있다.
when 20355.chat."Neue Gefahr " begin
say_title(mob_name(20355))
say("Sehr gut, du hast es geschafft! Zeig mal her ...[ENTER]Hm, diese Schriftzeichen sind mir fremd, ich kann[ENTER]kein Wort verstehen. Du solltest vielleicht den[ENTER]Gelehrten Uriel um Rat fragen. ")
set_state(step4)
end
end
state step4 begin --을두지에게 탁본을 맡기자.
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
-----------퀘스트편지2------------
when letter begin
send_letter("Neue Gefahr ")
-- 을두지를 가리킨다.
local v = find_npc_by_vnum(20011)
if 0 != v then
target.vid("__TARGET__", v, mob_name(20011))
end
end
when button or info begin
say_title("Neue Gefahr ")
say("Gehe zum Gelehrten Uriel und zeige ihm die[ENTER]Inschrift. Er wird sie sicherlich ?ersetzen[ENTER]k?nen. ")
say("")
end
when 20011.chat."Neue Gefahr " begin
target.delete("__TARGET__")
say_title(mob_name(20011))
say("Der Hauptmann bittet mich, diese geheimnisvolle[ENTER]Inschrift zu entziffern? Selbstverst?dlich. Ich[ENTER]liebe geistige Herausforderungen. Zeig her.[ENTER]Das ist ... Also das ist ja ungeheuerlich. Hier,[ENTER]ich schreibe dir die ?ersetzung auf dieses[ENTER]Papier. Bringe es so schnell wie m?lich zum[ENTER]Hauptmann und kehre anschlie?nd zu mir zur?k.[ENTER]Wenn das stimmt, was hier steht, dann befinden[ENTER]wir alle uns in gro?r Gefahr! Los, los! ")
say("")
set_state(step5)
end
when 20355.chat."Neue Gefahr " begin
say_title(mob_name(20355))
say("Sehr gut, du hast es geschafft! Zeig mal her ...[ENTER]Hm, diese Schriftzeichen sind mir fremd, ich kann[ENTER]kein Wort verstehen. Du solltest vielleicht den[ENTER]Gelehrten Uriel um Rat fragen. ")
end
end
state step5 begin --경비한테 편지 배달
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
when letter begin
send_letter("Neue Gefahr ")
-- 을두지를 가리킨다.
local v = find_npc_by_vnum(20355)
if 0 != v then
target.vid("__TARGET__", v, mob_name(20355))
end
end
when button or info begin
say_title("?erbringe Uriels Brief ")
say("Dieser starrk?fige alte Mann ... W?e ein[ENTER]kleines Dankesch? zu viel verlangt? Aber gut. Er[ENTER]sagte, die Informationen seien ??rst wichtig,[ENTER]also werde ich sie rasch dem Hauptmann[ENTER]?ermitteln. ")
say("")
end
when 20355.chat."Uriels Brief " begin
target.delete("__TARGET__")
say_title(mob_name(20355))
----"12345678901234567890123456789012345678901234567890"|
say("Oh je! In der dritten Ebene des Spinnendungeons[ENTER]hat sich ein gewaltiger Arachniden-D?on[ENTER]eingenistet - die Spinnenbaroness. Der Inschrift[ENTER]zufolge braucht man einen speziellen Schl?sel,[ENTER]um in diese verborgene H?le zu gelangen.[ENTER]Gehe zun?hst zu Uriel und frage ihn nach diesem[ENTER]Schl?sel. Stelle dir anschlie?nd einen Trupp[ENTER]aus f?igen K?pfern zusammen und st?mt[ENTER]gemeinsam das Versteck der Spinnenbaroness! Hier,[ENTER]ich habe einen weiteren Passierschein f? dich. ")
say("")
set_state(step6) pc.give_item2(76019)
end
when 20011.chat."Neue Gefahr " begin
say_title(mob_name(20011))
say("Du warst noch nicht beim Hauptmann? Bitte, du[ENTER]musst dich beeilen. Wir haben keine Zeit zu[ENTER]verlieren. Er muss diesen Brief unbedingt lesen! ")
say("")
end
end
state step6 begin --경비는 나만 일시킨다. 을두지와 상의하자.
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 30130.chat."Zugang zur Bruth?le " begin
say("Dieses Tor l?st sich nur mit dem[ENTER]Arachnidenschl?sel ?fnen. ")
end
when letter begin
send_letter("Uriels Brief ")
-- 을두지를 가리킨다.
local v = find_npc_by_vnum(20011)
if 0 != v then
target.vid("__TARGET__", v, mob_name(20011))
end
end
when button or info begin
say_title("Uriels Brief ")
say("Oh je! In der dritten Ebene des Spinnendungeons[ENTER]hat sich ein gewaltiger Arachniden-D?on[ENTER]eingenistet - die Spinnenbaroness. Der Inschrift[ENTER]zufolge braucht man einen speziellen Schl?sel,[ENTER]um in diese verborgene H?le zu gelangen.[ENTER]Gehe zun?hst zu Uriel und frage ihn nach diesem[ENTER]Schl?sel. Stelle dir anschlie?nd einen Trupp[ENTER]aus f?igen K?pfern zusammen und st?mt[ENTER]gemeinsam das Versteck der Spinnenbaroness! Hier,[ENTER]ich habe einen weiteren Passierschein f? dich. ")
say("")
end
--을두지를 선택하면 해당 퀘스트에 관련된 대화를 나눌 수 있다.
when 20011.chat."Uriels Brief " begin
target.delete("__TARGET__")
say_title(mob_name(20011))
say("Ah, du bist zur?k. Dann hat der Hauptmann dir[ENTER]also den Befehl erteilt, die Spinnenbaroness zu[ENTER]vernichten? Doch der Zugang zur Bruth?le der[ENTER]Baroness ist verschlossen und l?st sich[ENTER]nur mit dem Arachnidenschl?sel ?fnen. Seine[ENTER]Herstellung ist sehr aufwendig. Aber wenn du mir[ENTER]einen Spinnen-Giftsack, einen Spinnen-Eiersack,[ENTER]ein Spinnennetz, Spinnenaugen, Spinnenbeine sowie[ENTER]das Gift der K?iginnenspinne bringst, werde ich[ENTER]einen f? dich anfertigen. ")
set_state(boss_ok)
end
end
state boss_ok begin -- 열쇠를 만들수 있게 된 최종상태. 이제부터 거미굴 보스룸에 입장할 수 있다.
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when 20011.chat."Der Arachnidenschl?sel " begin
if pc.count_item(30025) > 0 and pc.count_item(30056) > 0 and pc.count_item(30057) > 0 and pc.count_item(30058) > 0 and pc.count_item(30059) > 0 and pc.count_item(30326) > 0 then
say_title(mob_name(20011))
say("Gro?rtig! Du hast alle ben?igten Elemente f?[ENTER]den Arachnidenschl?sel gefunden. Warte einen[ENTER]Moment. Seine Herstellung sollte nicht allzu[ENTER]lange dauern ... ")
pc.remove_item(30025, 1)
pc.remove_item(30056, 1)
pc.remove_item(30057, 1)
pc.remove_item(30058, 1)
pc.remove_item(30059, 1)
pc.remove_item(30326, 1)
if math.random(1,2000) <= 1000 then
say("Ha, geschafft! Hier hast du den[ENTER]Arachnidenschl?sel. Er ?fnet dir den Zugang zum[ENTER]Versteck der Spinnenbaroness. Ich w?sche dir und[ENTER]deinen Kameraden viel Erfolg f? den Kampf gegen[ENTER]diese langbeinige Bestie! Doch ihr m?st euch[ENTER]beeilen - der Schl?sel ist sehr instabil. Nach[ENTER]24 Stunden zerf?lt er in seine Bestandteile. ")
pc.give_item2(30324, 1)
else
say("Oh oh! Ich f?chte, es ist noch kein Meister[ENTER]vom Himmel gefallen. Du musst wissen, das[ENTER]Verfahren zum Schmieden dieses Schl?sels ist[ENTER]??rst kompliziert. Schon ein winziger Fehler[ENTER]f?rt zum Scheitern. Leider habe ich damit auch[ENTER]alle Spinnensubstanzen, die du m?evoll[ENTER]gesammelt hast, vergeudet. Beim n?hsten[ENTER]Versuch funktioniert es bestimmt! ")
end
else
say_title(mob_name(20011))
say("Es fehlt noch etwas, so kann ich den[ENTER]Arachnidenschl?sel nicht herstellen. Hier[ENTER]noch einmal zur Erinnerung, was wir alles[ENTER]brauchen: einen Spinnen-Giftsack, einen[ENTER]Spinnen-Eiersack, ein Spinnennetz, Spinnenaugen,[ENTER]Spinnenbeine sowie das Gift der K?iginnenspinne. ")
end
end
when 30130.chat."Zugang zur Bruth?le " begin
if game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
local starttime = game.get_event_flag("spider_lair_start_time_"..get_channel_id())
local current_time = get_global_time()
if party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
if starttime + lair_enter_wait_time >= current_time and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) and game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
say("Dein Gruppenanf?rer hat den Dungeon betreten.[ENTER]M?htest du ihm folgen? ") -- 테스트용
local warp = select(locale.confirm,locale.cancel)
if warp == 1 then
pc.setqf("firstIn",1)
pc.setqf("retry_limit_time", starttime + lair_time + access_limit_time )
set_state(inLair)
pc.warp(88100,614800)
return
end
else
say("Du hast zu lange gebraucht. Der Schl?sel ist[ENTER]bereits zerfallen. Lass einen neuen anfertigen,[ENTER]um hier Zutritt zu erhalten. ") -- 테스트용
return
end
else
local remain_time = (game.get_event_flag("spider_lair_end_time_"..get_channel_id() ) - get_global_time()) / 60
if remain_time < 0 then
say("Das hat nicht geklappt. Versuch es bitte noch[ENTER]einmal! ")
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(),0)
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
game.set_event_flag("spider_dead"..get_channel_id(),0)
return
end
say("In der Bruth?le der Baroness befindet sich[ENTER]bereits eine Gruppe und greift die[ENTER]Spinnenbaroness an. ")
--- here we should change to string.format %s key
say(string.format("Du kannst erst eintreten, wenn die vorherige[ENTER]Gruppe ihre Aufgabe beendet hat. Kehre in %s[ENTER]Minuten zur?k. ", math.ceil(remain_time)))
return
end
elseif pc.getqf("retry_limit_time") > get_global_time() then
local access_limit = (pc.getqf("retry_limit_time") - get_global_time()) / 60
say("Wartezeit, bis sich das Tor zur Bruth?le der[ENTER]Baroness erneut ?fnen l?st: ")
-- here we should also change to string.format %s key
say(string.format("%s Minuten ", math.ceil(access_limit)))
return
elseif party.is_leader() then
if false == pc.can_warp() then
say("Der K?pfer, der die H?le vor dir betreten hat,[ENTER]kann sich erst nach zehn Sekunden wieder bewegen.[ENTER]Bitte warte einen Moment. ")
return
end
if pc.count_item(30324) > 0 then
say("M?htest du eine Eroberung starten? Du hast daf?[ENTER]20 Minuten. Vor Ablauf dieser Zeit kann niemand[ENTER]die Bruth?le der Baroness verlassen.[ENTER]Eine erneute Eroberung kann nach einer Stunde[ENTER]durchgef?rt werden. ")
local warp = select(locale.confirm,locale.cancel)
if warp == 1 then
set_state(inLair)
pc.remove_item(30324, 1)
mob.spawn(2094,369,551,0,0)
--값 설정.
game.set_event_flag("spider_lair_ongoing_"..get_channel_id() , 1)
game.set_event_flag("spider_lair_start_time_"..get_channel_id() , get_global_time())
game.set_event_flag("spider_lair_end_time_"..get_channel_id() , get_global_time() + lair_time)
game.set_event_flag("spider_lair_leader_"..get_channel_id() , party.get_leader_pid())
pc.setqf("retry_limit_time", get_global_time() + lair_time + access_limit_time )
pc.setqf("firstIn",1)
server_timer("spider_end_timer", lair_time )
pc.warp(88100,614800)
end
return
else
say("Um den Zugang zu ?fnen, ben?igst du den[ENTER]Arachnidenschl?sel. ")
return
end
else --리더 아니다.
say("Nur der Anf?rer einer Gruppe kann den[ENTER]Arachnidenschl?sel verwenden. ")
return
end
end
end
state inLair begin
when 20011.chat."SD3 Quest zur?ksetzen " with is_test_server() begin --테스트용
set_state(start)
say("Vor Herstellung des Schl?sels ")
end
when login begin
-- 정상적으로 보스룸에 입장.
--if pc.getqf("firstIn") == 1 and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
if get_global_time() < pc.getqf("retry_limit_time") - access_limit_time and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
pc.setqf("firstIn",0)
elseif pc.getx() >= 827 and pc.getx() <= 937 and pc.gety() >= 6127 and pc.gety() <= 6257 then
pc.warp(95900,571000)
pc.remove_item(30327, 1)
else -- 위에서 팅겨낸 유저가 밖에서 로그인 하게 되면, 접근 제한 시간을 셋팅해줌.
pc.remove_item(30327, 1)
set_state( boss_ok )
local limit = pc.getqf("retry_limit_time")
if limit > ( get_global_time() + access_limit_time ) then
limit = ( get_global_time() + access_limit_time )
end
pc.setqf("retry_limit_time", limit )
local duration = limit - get_global_time()
end
end
when 30130.chat."Zugang zur Bruth?le " begin
if game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
local starttime = game.get_event_flag("spider_lair_start_time_"..get_channel_id())
local current_time = get_global_time()
if party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
if starttime + lair_enter_wait_time >= current_time and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) and game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
say("Dein Gruppenanf?rer hat den Dungeon betreten.[ENTER]M?htest du ihm folgen? ") -- 테스트용
local warp = select(locale.confirm,locale.cancel)
if warp == 1 then
pc.warp(88100,614800)
return
end
end
end
end
end
when 2092.kill begin --대왕거미 죽임
server_timer("spider_dead_timer", king_kill_wait_time)
game.set_event_flag("spider_dead"..get_channel_id(), 1)
notice_multiline("Die Spinnenbaroness wurde vernichtet! In drei[ENTER]Minuten werden alle K?pfer aus der H?le[ENTER]teleportiert. ",notice_in_map)
end
when 2095.kill begin --거미알 죽임
local kingVid = game.get_event_flag("king_vid")
local remain_egg = game.get_event_flag("remain_egg"..get_channel_id())
notice_multiline("Vorsicht: Die Spinnenbaroness wird w?end! Ihr[ENTER]Angriff wird st?ker, jedoch wird ihre[ENTER]Verteidigung dadurch geschw?ht. ",notice_in_map)
if remain_egg > 0 then
remain_egg = remain_egg - 1
game.set_event_flag("remain_egg"..get_channel_id(), remain_egg)
end
--거미의 공격력 보정
npc.set_vid_attack_mul(kingVid, 10/(remain_egg + 1))
--거미가 받는 피해량 보정
npc.set_vid_damage_mul(kingVid, 10/(remain_egg + 1))
end
-- 2012.4.5 이상현 리젠위치 수정
when 30327.use with pc.getx() >= 827 and pc.get_map_index() == 193 and pc.getx() <= 937 and pc.gety() >= 6127 and pc.gety() <= 6257 begin
pc.remove_item(30327, 1)
i = mob.spawn(2095,400,566,0,0)
mob.spawn(2095,400,594,0,0)
mob.spawn(2095,362,600,0,0)
mob.spawn(2095,337,599,0,0)
mob.spawn(2095,335,581,0,0)
mob.spawn(2095,344,562,0,0)
mob.spawn(2095,364,588,0,0)
mob.spawn(2095,379,562,0,0)
mob.spawn(2095,368,525,0,0)
local kingVid = mob.spawn(2092,367,588,0,0)
game.set_event_flag("king_vid",kingVid)
--game.set_event_flag("remain_egg",9)
game.set_event_flag("remain_egg"..get_channel_id(), 9)
end
end
end