Code:
quest dragon_lair_access begin
state start begin
function get_settings()
local settings = {}
settings.cooldown_time = 300
settings.group_time = 300
settings.access_item = 30179
settings.dragon_vnum = 2493
settings.spawn = {}
settings.spawn.x = 181
settings.spawn.y = 173
settings.warp_in = {}
settings.warp_in.first = {}
settings.warp_in.last = {}
settings.warp_in.first.x = 843677
settings.warp_in.first.y = 1066206
settings.warp_in.last.x = 844027
settings.warp_in.last.y = 1067599
settings.warp_out = {}
settings.warp_out.first = {}
settings.warp_out.last = {}
settings.warp_out.first.x = 9200
settings.warp_out.first.y = 1206400
settings.warp_out.last.x = 10900
settings.warp_out.last.y = 1209100
settings.room_area = {}
settings.room_area.first = {}
settings.room_area.last = {}
settings.room_area.first.x = 833000
settings.room_area.first.y = 1062500
settings.room_area.last.x = 844100
settings.room_area.last.y = 1071500
settings.access_item_amount = game.get_event_flag("dragon_lair_amount")
if (settings.access_item_amount == 0) then
settings.access_item_amount = 3
elseif (settings.access_item_amount == -1) then
settings.access_item_amount = 0
end
return settings
end
function get_random_point(area_coordinates)
return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y)
end
function warp_to_lair()
local settings = dragon_lair_access.get_settings()
local x, y = dragon_lair_access.get_random_point(settings.warp_in)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y)
pc.warp(x,y)
end
function warp_from_lair()
local settings = dragon_lair_access.get_settings()
local x, y = dragon_lair_access.get_random_point(settings.warp_out)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y)
pc.warp(x,y)
end
function warp_all_from_lair()
local settings = dragon_lair_access.get_settings()
warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y)
game.set_event_flag("dragon_lair_alive", 0)
char_log(0, 'LAIR', 'WARP ALL')
end
function get_time_remaining()
local settings = dragon_lair_access.get_settings()
return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time())
end
function give_item_to_ghost()
local settings = dragon_lair_access.get_settings()
say_title(mob_name(30121))
say("Te voi duce direct la peștera Dragonului, [ENTER]atunci când dorești.")
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
local give_item = select("Du-mă acum! ", "Închide")
if give_item == 1 then
pc.remove_item(settings.access_item, settings.access_item_amount)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM')
return true
else
return false
end
end
function show_time_remaining(time_remaining)
q.set_title("Învinge Dragonul Albastru")
send_letter_ex("Învinge Dragonul Albastru", "golden,ex", "scroll_open_golden.tga")
q.set_clock("Timp rămas: ", time_remaining)
timer("dragon_lair_timer", time_remaining)
notice_multiline(string.format("Ai la dispoziție %d minute pentru [ENTER]a învinge Dragonul Albastru.", time_remaining / 60), notice)
q.start()
end
when enter or login begin
pc.setqf("is_leader", 0)
q.done()
if pc.get_map_index() == 208 and not pc.is_gm() then
dragon_lair_access.warp_from_lair()
end
end
when blue_dragon_timer.server_timer begin
game.set_event_flag("dragon_lair_timer_used", 0)
if game.get_event_flag("dragon_lair_alive") == 1 then
notice_multiline("Dragonul Albastru este încă în viață!", notice_all)
else
notice_multiline("Dragonul Albastru s-a întors!", notice_all)
end
dragon_lair_access.warp_all_from_lair()
end
when 30121.chat."Vrei să omori Dragonul?" with pc.get_map_index() != 208 begin
local starttime = game.get_event_flag("dragon_lair_time")
local current_time = get_global_time()
local settings = dragon_lair_access.get_settings()
local time_remaining = dragon_lair_access.get_time_remaining()
if pc.count_item(settings.access_item) >= settings.access_item_amount then
if starttime + settings.group_time >= current_time then
local password_input;
repeat
say_title(mob_name(30121))
say("Spune-mi numărul secret. Altfel nu te pot lăsa[ENTER]să intrii.")
password_input = tonumber(input())
if password_input != game.get_event_flag("dragon_lair_password") then
say_title(mob_name(30121))
say("Acest număr nu este corect!")
local again = select("Încearcă iar.", "Închide")
if again == 2 then
return
end
end
until password_input == game.get_event_flag("dragon_lair_password")
if not dragon_lair_access.give_item_to_ghost() then
return
end
pc.setqf("time", starttime)
dragon_lair_access.warp_to_lair()
set_state(kill_dragon)
elseif time_remaining < 0 and npc.lock() then
say_title(mob_name(30121))
say("Tu ești prima persoană care solicită intrarea[ENTER]în Templul Dragonului. Vă voi lăsa să intrați dacă[ENTER] aveți cheia răsucită. Dar mai întâi trebuie [ENTER]să setați o parolă pentru ai lăsa pe colegii dumneavoastră[ENTER] să intre în cameră, în următoarele 5 minute. [ENTER]Amintiți-vă deasemenea că puterea cheilor durează doar 60 de minute.")
local abort = select("Sunt pregătit!", "Închide")
if abort == 2 then
npc.unlock()
return
end
local password_number;
repeat
say_title(mob_name(30121))
say("Spune-mi acum codul secret.")
password_number = tonumber(input())
local again;
if type(password_number) != 'number' then
say_title(mob_name(30121))
say("Codul poate conține numai cifre!")
again = select("Încearcă iar. ", "Închide")
if again == 2 then
npc.unlock()
return
end
end
until type(password_number) == 'number'
if not dragon_lair_access.give_item_to_ghost() then
npc.unlock()
return
end
if dragon_lair_access.get_time_remaining() > 0 then
pc.give_item2(settings.access_item, settings.access_item_amount)
npc.unlock()
say_title(mob_name(30121))
say("Un alt grup a încercat să-l omoare pe dragon.[ENTER] Trebuie să așteptați un timp până când puteți[ENTER]intra în Templul Dragonului!")
return
end
pc.setqf("password", password_number)
timer("dragon_lair_warptimer", pc.get_channel_id()*2)
npc.unlock()
else
say_title(mob_name(30121))
say("Un alt grup a încercat să-l omoare pe dragon.[ENTER] Trebuie să așteptați un timp până când puteți[ENTER]intra în Templul Dragonului!")
return
end
else
say_title(mob_name(30121))
say("Nu ai destule chei! Pentru a activa portalul am nevoie de ele.")
say("Te-ai alăturat liderilor răi Yonghan și Huashin.")
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
return
end
end
when 30121.chat."Vreau să plec de aici!" with pc.get_map_index() == 208 begin
say_title(mob_name(30121))
say("Te duc înapoi la intrarea în peșteră?")
local warp = select("Da", "Nu")
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end
when dragon_lair_warptimer.timer begin
local settings = dragon_lair_access.get_settings()
if dragon_lair_access.get_time_remaining() < 0 then
local starttime = get_global_time()
game.set_event_flag("dragon_lair_time", starttime)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime)
pc.setqf("time", starttime)
pc.setqf("is_leader", 1)
game.set_event_flag("dragon_lair_password", pc.getqf("password"))
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password"))
server_timer("blue_dragon_timer", settings.cooldown_time)
dragon_lair_access.warp_to_lair()
set_state(spawn_dragon)
else
pc.give_item2(settings.access_item, settings.access_item_amount)
say_title(mob_name(30121))
say("Un alt grup a încercat să-l omoare pe dragon.[ENTER] Trebuie să așteptați un timp până când puteți[ENTER]intra în Templul Dragonului!")
end
pc.setqf("password", 0)
end
end
state spawn_dragon begin
when login begin
local settings = dragon_lair_access.get_settings()
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
notice_multiline(string.format("Grupul lui %s încearcă să omoare dragonul albastru. Le urăm succes!", pc.name), notice_all)
regen_in_map(208, "locale/romania/map/metin2_map_skipia_dungeon_boss/regen1.txt") -- Dam drumul la regen
regen_in_map(208, "locale/romania/map/metin2_map_skipia_dungeon_boss/dragon.txt") --regen dragon
mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1)
game.set_event_flag("dragon_lair_alive", 1)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')
notice_multiline(string.format("Ai la dispoziție 5 minute. Apoi codul %s [ENTER]se va schimba!", game.get_event_flag("dragon_lair_password")), notice)
dragon_lair_access.show_time_remaining(settings.cooldown_time)
set_state(kill_dragon)
end
when 30121.chat."Vreau să plec de aici!" with pc.get_map_index() == 208 begin
say_title(mob_name(30121))
say("Te duc înapoi la intrarea în peșteră?")
local warp = select("Da", "Nu")
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end
end
state kill_dragon begin
when dragon_lair_timer.timer begin
set_state(start)
end
when login begin
if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then
set_state(start)
else
dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining())
end
end
when button or info begin
notice_multiline(string.format("Ai la dispoziție %s minute pentru [ENTER]a invinge Dragonul Albastru", dragon_lair_access.get_time_remaining() / 60), notice)
local settings = dragon_lair_access.get_settings()
if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then
notice_multiline(string.format("Ai la dispoziție 5 minute. Apoi codul %s [ENTER]se va schimba!", game.get_event_flag("dragon_lair_password")), notice)
end
end
when 30121.chat."Vreau să plec de aici!" with pc.get_map_index() == 208 begin
say_title(mob_name(30121))
say("Te duc înapoi la intrarea în peșteră?")
local warp = select("Da", "Nu")
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end
when kill begin
if npc.get_race() == 2493 and pc.get_map_index() == 208 then
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED')
game.set_event_flag("dragon_lair_alive", 0) -- dragon dead
notice_multiline(string.format("Grupul lui %s a ucis Dragonul Albastru!", pc.name), notice_all)
timer("skipia_boss_end", 20) -- 20 sec out
say("In 20 secunde veti fi teleportati in afara Camerei de Cristal")
local settings = dragon_lair_access.get_settings()
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
end
end
when skipia_boss_end.timer begin
dragon_lair_access.warp_all_from_lair() -- tp all group out
d.clear_regen("regen1.txt") -- disable regen1
d.clear_regen("dragon.txt") -- disable dragon
set_state(start)
end
end
end
I cant get it to work, the problem is:
- When it teleports me out after i kill the dragon, the dragon its not set as dead (game.set_event_flag("dragon_lair_alive", 0).
When i click again on npc it dosent give me the message "dragon is dead you cant enter..." it gives me the option to enter again in the dungeon....






post your problem there
