Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Bu seviye aralığı olayı OX eventinin kendi içinde koyulmuş bir quest kontrolü, yani ekstra bir sistem ya da source ile alakası yok. O yüzden kaldırması da oldukça basit.
Gösterdiğin fonksiyonun amacı şu:
Oyuncunun levelini alıp belirlenen aralıklara sokmak ve OX’e girişte buna göre izin vermek. Asıl kısıtlama bu fonksiyonun kendisi değil, quest içinde çağrıldığı yer.
OX quest dosyasında genelde şöyle bir kontrol olur (birebir aynı olmayabilir ama mantık budur):
Oyuncunun leveli,
enter_level() fonksiyonundan dönen min–max değerlerin dışındaysa,
“Bu etkinliğe katılamazsın” deyip geri çevirir.
Eğer amacın seviye farkı olmadan herkesin OX’e girebilmesi ise yapman gereken şey çok net:
Quest dosyasında enter_level( şeklinde arama yap.
Bu fonksiyonun kullanıldığı if bloğunu tamamen kaldır ya da yorum satırı yap.
Yani level kontrolü yapılan kısmı iptal ettiğin anda:
Seviye aralığı sistemi devre dışı kalır
OX’e her level oyuncu girebilir
Üstteki fonksiyon dursa bile artık bir anlamı kalmaz
Alternatif olarak, quest yapısı bozulmasın diyorsan enter_level fonksiyonunu sabit bir değer döndürecek şekilde de değiştirebilirsin. Ama en temiz yol, doğrudan level kontrolünün yapıldığı if bloğunu silmek.
Değişiklikten sonra mutlaka:
quest’i yeniden derle
reload q yap ya da server’ı yeniden başlat
Özetle:
Bu sistem OX’in vazgeçilmez bir parçası değil. Tamamen quest içine sonradan eklenmiş bir kısıtlama. Kontrolü kaldırdığın anda seviye sınırı da kalkar.
quest oxevent_manager begin
state start begin
function cleanup_event()
oxevent.end_event()
game.set_event_flag("ox_map_login_counter", 0)
game.set_event_flag("ox_map_level_min", 0)
game.set_event_flag("ox_map_level_max", 0)
end
function check_limit()
if game.get_event_flag("ox_map_login_counter") == game.get_event_flag("ox_map_player_max") then
return 0
else
return 1
end
end
when login or enter begin
if pc.get_map_index() == 113 then
local counter = game.get_event_flag("ox_map_login_counter")
game.set_event_flag("ox_map_login_counter", counter+1)
end
end
when logout begin
if pc.get_map_index() == 113 then
if is_test_server() then
pc.setqf("ox_end_cooldown_time", get_time() + 60)
else
pc.setqf("ox_end_cooldown_time", get_time()+60*15)
end
end
end
when 20011.chat.gameforge.oxevent._10_npcChat begin
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.oxevent._20_say)
wait()
if game.get_event_flag("oxevent_status") == 0 then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.oxevent._30_say)
elseif game.get_event_flag("oxevent_status") == 1 then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.oxevent._40_say)
local s = select(gameforge.buy_fishrod._120_select, gameforge.locale.cancel)
if s == 1 then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.oxevent._50_say)
wait()
if get_time() < pc.getqf("ox_end_cooldown_time") then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.locale.monkey_dungeon.cannot_enter_yet)
return
end
if oxevent_manager.check_limit() == 0 then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.entry_event_map._060_say)
return
end
pc.warp(896500, 24600)
elseif s == 2 then
return
end
elseif game.get_event_flag("oxevent_status") == 2 then
say_title(gameforge.main_quest_lv30._40_sayTitle)
say(gameforge.oxevent._60_say)
end
end
when 20358.chat.gameforge.oxevent._70_npcChat with pc.get_gm_level()== 5 begin
local stat = oxevent.get_status()
if stat == 0 then
say(gameforge.entry_event_map._160_say)
local amount_choice = input_number(gameforge.entry_event_map._240_say)
if amount_choice > 500 or amount_choice <= 0 then
say("Miktar 1-500 arasinda olmalidir.")
return
end
say(gameforge.oxevent._80_say)
say(gameforge.entry_event_map._200_say .. " " .. amount_choice)
local s = select(gameforge.oxevent._90_select, gameforge.locale.cancel)
if s == 1 then
local v = oxevent.open()
if v == 0 then
say(gameforge.oxevent._100_say)
say_reward(gameforge.oxevent._110_sayReward)
elseif v == 1 then
say(gameforge.oxevent._120_say)
notice_multiline(gameforge.oxevent._130_notice_all,notice_all)
notice_multiline(gameforge.oxevent._131_notice_all,notice_all)
game.set_event_flag("ox_map_level_min", 1)
game.set_event_flag("ox_map_level_max", 250)
game.set_event_flag("ox_map_player_max", amount_choice)
else
say(gameforge.oxevent._100_say)
end
end
elseif stat == 1 then
say(string.format(gameforge.oxevent._140_say, oxevent.get_attender()))
local s = select(gameforge.oxevent._150_select, gameforge.locale.cancel)
if s == 1 then
oxevent.close()
say(gameforge.oxevent._160_say)
end
elseif stat == 2 then
say(gameforge.oxevent._170_say)
local s = select(
gameforge.oxevent._180_select,
gameforge.oxevent._190_select,
gameforge.oxevent._195_select,
gameforge.locale.cancel
)
if s == 1 then
local v = oxevent.quiz(1, 30)
if v == 0 then
say(gameforge.oxevent._200_say)
elseif v == 1 then
say(gameforge.oxevent._210_say)
else
say(gameforge.oxevent._220_say)
end
elseif s == 2 then
oxevent_manager.cleanup_event()
say(gameforge.oxevent._230_say)
notice_multiline(gameforge.oxevent._240_notice_all,notice_all)
notice_multiline(gameforge.oxevent._241_notice_all,notice_all)
elseif s == 3 then
oxevent_manager.cleanup_event()
say(gameforge.oxevent._250_say)
notice_multiline(gameforge.oxevent._260_notice_all,notice_all)
notice_multiline(gameforge.oxevent._261_notice_all,notice_all)
end
elseif stat == 3 then
say(gameforge.oxevent._270_say)
say_reward(gameforge.oxevent._280_sayReward)
else
say(gameforge.oxevent._290_say)
end
end
when 20358.chat.gameforge.oxevent._300_npcChat with pc.get_gm_level()== 5 begin
say(gameforge.oxevent._310_say)
local s = select(gameforge.oxevent._320_select, gameforge.locale.cancel)
if s == 1 then
oxevent.end_event_force()
game.set_event_flag("ox_map_login_counter", 0)
say(gameforge.oxevent._330_say)
end
end
when 20358.chat.gameforge.oxevent._340_npcChat with pc.get_gm_level()== 5 begin
say(gameforge.oxevent._350_say)
local item_vnum = input()
say(gameforge.oxevent._360_say)
local item_count = input()
oxevent.give_item(item_vnum, item_count)
say(string.format(gameforge.oxevent._370_say, oxevent.get_attender()))
end
end
end
ALTERNATİF ESKİ TİP QUESTTE BU
[CODE title="oxevent.quest"]quest oxevent_manager begin
state start begin
when 20011.chat."OX-Yarışması " begin
say_title("Uriel:")
say("Hey Evet Sen.")
say("Sen gerçekten çok zeki görünüyorsun.")
say("Yarışmanın ismi Ox Yarışması. ")
say("Sorular sorulacak cevap vereceksin,")
say("bilirsen süpriz bir hediye kazanacaksın.")
if game.get_event_flag("oxevent_status") == 0 then
wait()
say_title("Uriel:")
say("Yarışmaya katılmana izin veriyorum.")
say("İstersen ayrıca izleyici de olabilirsin.")
say("Başlama zamanı henüz kararlaştırılmadı.")
say("Zaman geldiğinde seni bilgilendireceğim.")
say("Tetikte kal!")
elseif game.get_event_flag("oxevent_status") == 1 then
wait()
say_title("Uriel:")
say("Yarışmaya katılmak istiyormusun?")
local s = select("Evet", "Hayır", "İzlemek istiyorum")
if s == 1 then
say_title("Uriel:")
say("Tamam Şimdi Seni Işınlıyorum.")
wait()
pc.warp(896500, 24600)
elseif s == 3 then
say_title("Uriel:")
say("İzleyici olarak mı katılmak istiyorsun?")
say("Tamam, ışınlıyorum seni.")
wait()
pc.warp(896300, 28900)
end
elseif game.get_event_flag("oxevent_status") == 2 then
say_title("Uriel:")
say("Yarışma başladı, giremezsin!")
say("Ancak izleyici olarak katılabilirsin.")
local s = select("Katıl", "Katılma")
if s == 1 then
say_title("Uriel:")
say("Tamam, ışınlıyorum seni.")
wait()
pc.warp(896300, 28900)
end
end
end
when 20358.chat."OX-Yarışması " with pc.is_gm() begin
if v == 0 then
say_title("OX Çiçekleri:")
say("OX-Yarışması zaten etkinleştirildi.")
elseif v == 1 then
say_title("OX Çiçekleri:")
say("Tebrikler yarisma baslamistir.")
notice_all("Ox Yarışması başladı! Uriel'den giriş yapabilirsin.")
else
say_title("OX Çiçekleri:")
say("OX-Yarışması çalıştırılamadı.")
end
end
elseif stat == 1 then
say_title("OX Çiçekleri:")
say("Ox Yarışmasında "..oxevent.get_attender().." Kişi Var.")
say("Yarışmayı Başlatmak İstiyormusun?")
local s = select("Evet", "Hayır")
if s == 1 then
oxevent.close()
say_title("OX Çiçekleri:")
say("Girişler Kapatıldı..Yarışma Başlaması İçin Aynı İşlemi Yapın!")
end
elseif stat == 2 then
say_title("OX Çiçekleri:")
say("Ne Yapmak İstiyorsunuz?")
local s = select("Yarışmayı Başlatmak", "İtem Vermek", "Yarışmayı Sonlandırmak", "Kapat")
if s == 1 then
local v = oxevent.quiz(1, 30)
if v == 0 then
say_title("OX Çiçekleri:")
say("Yarışma Başlatılamadı!")
elseif v == 1 then
say_title("OX Çiçekleri:")
say("Soru Başarıyla Gönderildi!")
else
say_title("OX Çiçekleri:")
say("Zaten bir soru sordunuz!")
end
elseif s == 2 then
say_title("OX Çiçekleri:")
say("İtemin Kodunu Giriniz.")
local item_vnum = input()
say_title("OX Çiçekleri:")
say("İtemin Verileceği Kişinin Nicki.")
local item_count = input()
oxevent.give_item(item_vnum, item_count)
say_title("OX Çiçekleri:")
say("İtem "..oxevent.get_attender().." Kişiye Verildi!")
elseif s == 3 then
oxevent.end_event()
notice_all("Ox Yarışması sona erdi.")
say_title("OX Çiçekleri:")
say("Ox-Yarışması bitirildi.!")
end
elseif stat == 3 then
say_title("OX Çiçekleri:")
say("Lütfen Bekleyiniz.")
else
say("Bir hata oluştu!")
end
end
when 20358.chat."TAKIM ADASI" with pc.is_gm() begin
say_title("OX Çiçekleri:")
say("Özel Gm Yerine Işınlanmak İstiyormusun?")
local s = select("Evet", "Hayır")
if s == 1 then
say_title("OX Çiçekleri:")
say("Lütfen Bekle Işınlanıyorsun.")