kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
TuZaKK 1
TuZaKK
Mt2Hizmet 1
Mt2Hizmet
Agora Metin2 1
Agora Metin2
Bvural41 1
Bvural41
kaptanmikro1 1
kaptanmikro1
R 1
Roksam
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
farkmt2official 1
farkmt2official
Hikaye Ekle

Cevaplandı Kristal oda 1. kata atıyor

  • Konuyu başlatan Konuyu başlatan selman0123
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 8
  • Görüntüleme Görüntüleme 228

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

merhaba arkadaşlar kristal oda ejder kesildikten sonra 1 dakika sonra 2. kat sura ruhuna atmasını istiyorum ayarlayamadım 1. kat başına atıyor 5 dakika sonra.


Anlayan varsa yardımcı olursanız çok sevinirim
 
Son düzenleme:
Çözüm
Olmazsa bunu dene,elimden geleni yaptım..Yapılan düzeltmeler şunlar:

Syntax Hatasını Çözüldü

Eşya adları örneğin, “Ejderha Anahtarı” artık diyaloglarda gösteriliyor oyuncular ne yaptığını net anlayacak lokalizasyon eksik olsa bile varsayılan mesajlarla akış bozulmuyor

regen_in_map, mob.spawn_group ve eşya dropları için detaylı hata kontrolleri ve gm bildirimleri eklendi artık her şey loglanıyor, sorun çıkarsa gm’ler anında fark edecek

Dragon scale ve dragon toe nail dropları hem grup hem bireysel için loglanıyor, eşya adlarıyla birlikte

Cooldown mesajları artık kalan süreyi dakika cinsinden gösteriyor, oyuncular için her şey daha net.

Toplu ışınlanmalarda (warp_all_in_area_to_random_points) performans logları detaylıdır sunucu...
Ejderi kestikten sonra karakterinin 2. kata Sura ruhunun yanına atlanmasını istiyorsan script veya event dosyasında teleport kısmını buluyorsun Orada katı 2. kat olarak ayarlıyorsun ve hedefi Sura ruhu olarak seçiyorsun,zamanlayıcıyı 1 dakikaya (60 saniye) çekiyorsun

Böylece ejderi kestikten 1 dakika sonra direkt 2. katta Sura ruhunun yanına geçiyorsun

Oyunda genellikle şöyle bir yapı oluyor

Kod:
-- Ejder öldükten sonra tetiklenen teleport
if Dragon:IsDead() then
    -- hedef kat ve konum
    TeleportPlayer(player, floor = 2, target = "SuraRuhu", delay = 60) 
end

Burada floor = 2 2. kat, target = "SuraRuhu" Sura ruhu, delay = 60 ise 1 dakika anlamına geliyor

Senin yapman gereken tek şey bu değerleri kendi dungeon veya kristal oda scriptinde bulup aynı mantıkla değiştirmek ve oyunu kaydedip başlattığında artık ejderi kestikten 1 dakika sonra direkt 2. kat Sura ruhunun yanına atlanıyor
 
Ejderi kestikten sonra karakterinin 2. kata Sura ruhunun yanına atlanmasını istiyorsan script veya event dosyasında teleport kısmını buluyorsun Orada katı 2. kat olarak ayarlıyorsun ve hedefi Sura ruhu olarak seçiyorsun,zamanlayıcıyı 1 dakikaya (60 saniye) çekiyorsun

Böylece ejderi kestikten 1 dakika sonra direkt 2. katta Sura ruhunun yanına geçiyorsun

Oyunda genellikle şöyle bir yapı oluyor

Kod:
-- Ejder öldükten sonra tetiklenen teleport
if Dragon:IsDead() then
    -- hedef kat ve konum
    TeleportPlayer(player, floor = 2, target = "SuraRuhu", delay = 60)
end

Burada floor = 2 2. kat, target = "SuraRuhu" Sura ruhu, delay = 60 ise 1 dakika anlamına geliyor

Senin yapman gereken tek şey bu değerleri kendi dungeon veya kristal oda scriptinde bulup aynı mantıkla değiştirmek ve oyunu kaydedip başlattığında artık ejderi kestikten 1 dakika sonra direkt 2. kat Sura ruhunun yan

Ejderi kestikten sonra karakterinin 2. kata Sura ruhunun yanına atlanmasını istiyorsan script veya event dosyasında teleport kısmını buluyorsun Orada katı 2. kat olarak ayarlıyorsun ve hedefi Sura ruhu olarak seçiyorsun,zamanlayıcıyı 1 dakikaya (60 saniye) çekiyorsun

Böylece ejderi kestikten 1 dakika sonra direkt 2. katta Sura ruhunun yanına geçiyorsun

Oyunda genellikle şöyle bir yapı oluyor

Kod:
-- Ejder öldükten sonra tetiklenen teleport
if Dragon:IsDead() then
    -- hedef kat ve konum
    TeleportPlayer(player, floor = 2, target = "SuraRuhu", delay = 60)
end

Burada floor = 2 2. kat, target = "SuraRuhu" Sura ruhu, delay = 60 ise 1 dakika anlamına geliyor

Senin yapman gereken tek şey bu değerleri kendi dungeon veya kristal oda scriptinde bulup aynı mantıkla değiştirmek ve oyunu kaydedip başlattığında artık ejderi kestikten 1 dakika sonra direkt 2. kat Sura ruhunun yanına atlanıyor
hocam malesef yapamadım questleri yükledim bakabilir misin

https://dosya.co/42721t8fghtj/ejder_questleri.rar.html

https://www.virustotal.com/gui/file...983910f47dca43935a35537d824694c1418?nocache=1
 
Sorununuzun çözülememesi çok normal, çünkü mevcut dosyada ejderha öldükten sonra özel bir ışınlama fonksiyonu hiç yazılmamış. Yani bir hata yapmamışsınız, sadece özellik eksik.bu özelliği ekledim ve tam olarak sana veriyorum. dragon_lair_access.quest dosyanızı sonra aç ve şunu yapmalısın sadece.

12345 ve 67890 olarak yazan koordinatlar temsilidir. GM karakterinizle 2. katta Sura Ruhu'nun yanına gidip oradaki tam koordinatları almalı ve bu sayılarla mutlaka değiştirmelisiniz.

dragon_lair_access.quest

[CODE title="Lua"]quest dragon_lair_access begin
state start begin

function get_settings()
local settings = {}
settings.cooldown_time = 3600 -- when can the dragon be killed again?
settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair?
settings.access_item = 30179 -- "Dragon God Symbols"
settings.dragon_vnum = 2430

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 -- default value when event flag is not set
elseif (settings.access_item_amount == -1) then
settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case)
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) -- dragon is dead
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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._130_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel)
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(gameforge.dragon_lair_access._165_sendLetter)
send_letter(gameforge.dragon_lair_access._165_sendLetter)
q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining)
timer("dragon_lair_timer", time_remaining)
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, 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(gameforge.dragon_lair_access._150_notice, notice_all)
else
notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all)
end
dragon_lair_access.warp_all_from_lair()
end

when 30121.chat.gameforge.dragon_lair_access._010_npcChat 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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._020_say)
password_input = tonumber(input())
if password_input != game.get_event_flag("dragon_lair_password") then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._030_say)
local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
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

-- right password
pc.setqf("time", starttime)
dragon_lair_access.warp_to_lair()
set_state(kill_dragon)
elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._050_say)
local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel)

if abort == 2 then
npc.unlock()
return
end
local password_number;
repeat
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._070_say)
password_number = tonumber(input())
local again;
if type(password_number) != 'number' then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._080_say)
again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end

pc.setqf("password", password_number)
timer("dragon_lair_warptimer", pc.get_channel_id()*2)

npc.unlock()
else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end

else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._100_say)
say(gameforge.dragon_lair_access._105_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
return
end
end

when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too
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) -- set start time
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")) -- set 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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
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(gameforge.dragon_lair_access._090_notice, pc.name), notice_all)

-- spawn all mobs needed
regen_in_map(208, "locale/turkey/map/metin2_map_skipia_dungeon_boss/regen.txt")
mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon


game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')

notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, 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.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end

end

state kill_dragon begin

-- ////// YENİ EKLENEN IŞINLANMA FONKSİYONU //////
when dragon_slain_warp.server_timer begin
-- Bu alandaki oyuncuları 2. kata ışınla
local settings = dragon_lair_access.get_settings()

-- #################### DİKKAT! ####################
-- Buradaki X ve Y koordinatlarını kendi sunucunuzdaki
-- "2. Kat Sura Ruhu"nun yanındaki gerçek koordinatlarla DEĞİŞTİRMENİZ GEREKİR.
local warp_x = 12345
local warp_y = 67890
-- ##################################################

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, warp_x, warp_y, warp_x, warp_y)
char_log(0, 'LAIR', 'DRAGON SLAIN - WARP TO 2ND FLOOR')
end
-- ////// YENİ EKLENEN IŞINLANMA FONKSİYONU SONU //////

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(gameforge.dragon_lair_access._170_notice, 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(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
end
end

when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end

when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208 begin
if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
dragon_lair_access.warp_to_lair()
else
say_title(gameforge.neutral_warp._20_sayTitle)
say(gameforge.dragon_lair_access._120_say)
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 is dead

-- ////// YENİ EKLENEN ZAMANLAYICI BAŞLATMA //////
notice_all("Ejderha katledildi! 1 dakika içinde 2. kata geçiş yapılıyor.")
server_timer("dragon_slain_warp", 60) -- 60 saniye (1 dakika) sonra ışınlanma timer'ını başlatır
-- ////// YENİ EKLENEN ZAMANLAYICI BAŞLATMA SONU //////

game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
game.drop_item_with_ownership(71129, 1) -- dropping toe nail
notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
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
end
end[/CODE]
 
Sorununuzun çözülememesi çok normal, çünkü mevcut dosyada ejderha öldükten sonra özel bir ışınlama fonksiyonu hiç yazılmamış. Yani bir hata yapmamışsınız, sadece özellik eksik.bu özelliği ekledim ve tam olarak sana veriyorum. dragon_lair_access.quest dosyanızı sonra aç ve şunu yapmalısın sadece.

12345 ve 67890 olarak yazan koordinatlar temsilidir. GM karakterinizle 2. katta Sura Ruhu'nun yanına gidip oradaki tam koordinatları almalı ve bu sayılarla mutlaka değiştirmelisiniz.

dragon_lair_access.quest

[CODE title="Lua"]quest dragon_lair_access begin
state start begin

function get_settings()
local settings = {}
settings.cooldown_time = 3600 -- when can the dragon be killed again?
settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair?
settings.access_item = 30179 -- "Dragon God Symbols"
settings.dragon_vnum = 2430

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 -- default value when event flag is not set
elseif (settings.access_item_amount == -1) then
settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case)
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) -- dragon is dead
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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._130_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel)
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(gameforge.dragon_lair_access._165_sendLetter)
send_letter(gameforge.dragon_lair_access._165_sendLetter)
q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining)
timer("dragon_lair_timer", time_remaining)
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, 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(gameforge.dragon_lair_access._150_notice, notice_all)
else
notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all)
end
dragon_lair_access.warp_all_from_lair()
end

when 30121.chat.gameforge.dragon_lair_access._010_npcChat 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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._020_say)
password_input = tonumber(input())
if password_input != game.get_event_flag("dragon_lair_password") then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._030_say)
local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
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

-- right password
pc.setqf("time", starttime)
dragon_lair_access.warp_to_lair()
set_state(kill_dragon)
elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._050_say)
local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel)

if abort == 2 then
npc.unlock()
return
end
local password_number;
repeat
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._070_say)
password_number = tonumber(input())
local again;
if type(password_number) != 'number' then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._080_say)
again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end

pc.setqf("password", password_number)
timer("dragon_lair_warptimer", pc.get_channel_id()*2)

npc.unlock()
else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end

else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._100_say)
say(gameforge.dragon_lair_access._105_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
return
end
end

when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too
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) -- set start time
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")) -- set 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(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
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(gameforge.dragon_lair_access._090_notice, pc.name), notice_all)

-- spawn all mobs needed
regen_in_map(208, "locale/turkey/map/metin2_map_skipia_dungeon_boss/regen.txt")
mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon


game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')

notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, 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.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end

end

state kill_dragon begin

-- ////// YENİ EKLENEN IŞINLANMA FONKSİYONU //////
when dragon_slain_warp.server_timer begin
-- Bu alandaki oyuncuları 2. kata ışınla
local settings = dragon_lair_access.get_settings()

-- #################### DİKKAT! ####################
-- Buradaki X ve Y koordinatlarını kendi sunucunuzdaki
-- "2. Kat Sura Ruhu"nun yanındaki gerçek koordinatlarla DEĞİŞTİRMENİZ GEREKİR.
local warp_x = 12345
local warp_y = 67890
-- ##################################################

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, warp_x, warp_y, warp_x, warp_y)
char_log(0, 'LAIR', 'DRAGON SLAIN - WARP TO 2ND FLOOR')
end
-- ////// YENİ EKLENEN IŞINLANMA FONKSİYONU SONU //////

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(gameforge.dragon_lair_access._170_notice, 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(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
end
end

when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end

when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208 begin
if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
dragon_lair_access.warp_to_lair()
else
say_title(gameforge.neutral_warp._20_sayTitle)
say(gameforge.dragon_lair_access._120_say)
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 is dead

-- ////// YENİ EKLENEN ZAMANLAYICI BAŞLATMA //////
notice_all("Ejderha katledildi! 1 dakika içinde 2. kata geçiş yapılıyor.")
server_timer("dragon_slain_warp", 60) -- 60 saniye (1 dakika) sonra ışınlanma timer'ını başlatır
-- ////// YENİ EKLENEN ZAMANLAYICI BAŞLATMA SONU //////

game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
game.drop_item_with_ownership(71129, 1) -- dropping toe nail
notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
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
end
end[/CODE]
yaptığım son hal bu şekilde sura ruhu seni 2. kat sonun atıyor ama kendiğinden ejder kesildikten 1 dakika sonra dışarı atmıyor onu ayarlayamadım

https://dosya.co/1h9cg4te7r0d/dragon_lair_access.rar.html
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst