- Katılım
- 16 Tem 2019
- Konular
- 715
- Mesajlar
- 3,551
- Çözüm
- 47
- Online süresi
- 6mo 20d
- Reaksiyon Skoru
- 2,110
- Altın Konu
- 34
- Başarım Puanı
- 309
- MmoLira
- 19,559
- DevLira
- 122
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Yorumun için teşekkürler.Paylaşım için teşekkürler.
- Katılım
- 17 Nis 2013
- Konular
- 74
- Mesajlar
- 888
- Online süresi
- 1mo 22d
- Reaksiyon Skoru
- 595
- Altın Konu
- 0
- Başarım Puanı
- 211
- Yaş
- 27
- MmoLira
- 11,757
- DevLira
- 150
Paylaşım İçin Teşekkürler!
- Katılım
- 8 Nis 2013
- Konular
- 403
- Mesajlar
- 1,891
- Çözüm
- 3
- Online süresi
- 10d 5h
- Reaksiyon Skoru
- 63
- Altın Konu
- 0
- TM Yaşı
- 13 Yıl 2 Ay 1 Gün
- Başarım Puanı
- 192
- MmoLira
- 1,153
- DevLira
- 3
bu şekilde oyuna yeni bir timer eklemiş oluyoruz sanırım bu şekilde oyuna sonradan eklendiği için oyun bunu bilmiyor ve sıfırlayamıyor ? doğrumudur ?Merhaba arkadaşlar,
timer ile oto duyuru, event gibi questleri oyununuzda kullanıyorsanız sık sık karşılaşacağınız sorunlardan bir tanesi de reboot veya reload q atıldığında timerin çalışmadığıdır.
Bizde bu gibi durumlarda timerin çalışıp çalışmadığını kontrol eden bir quest fonksiyonunu kaynak kodumuza ekleyeceğiz.
Kendi serverim için yazdığım ufak bir eklentidir. Düzgün çalıştığını söyleyebilirim.
Şimdi neden reboot/reload q atıldığında timerlar sıfırlanıyor?
Server/game/src/questmanager.cpp dosyasında reload q atıldığı zaman burası çalışır.
Kod:void CQuestManager::Reload() { lua_close(L); m_mapNPC.clear(); m_mapNPCNameID.clear(); m_hmQuestName.clear(); m_mapTimerID.clear(); m_hmQuestStartScript.clear(); m_mapEventName.clear();
m_mapTimerID kısmı da timerlerın bilgisini tuttuğu için silinir. Bu yüzden reload q'dan sonra timerlar çalışmaz.
Elle timerları kontrol edeceğimiz bir eklenti ile bu sorunu çözebiliriz.
Sırayla şu işlemleri uygulayın;
1. Adım: Source
Server/game/src/questmanager.h dosyasında ara;
Altına şu kodu ekle;Kod:void CancelServerTimers(DWORD arg);
Kod:bool IsServerTimer(const string& name);
Server/game/src/questmanager.cpp dosyasında ara;
Kod:void CQuestManager::CancelServerTimers(DWORD arg)
Fonksiyonun bitiminden sonra şu kodları ekleyin;
Kod:bool CQuestManager::IsServerTimer(const std::string& name) { itertype(m_mapTimerID) it = m_mapTimerID.find(name); if (it != m_mapTimerID.end()) { return true; } return false; }
Server/game/src/quest_global.cpp dosyasında ara;
Kod:ALUA(_set_server_loop_timer)
Fonksiyonun bitiminden sonra şu kodları ekleyin;
Kod:ALUA(_is_server_timer) { //int n = lua_gettop(L); if (!lua_isstring(L, 1)) { sys_err("QUEST set_server_timer argument count wrong."); return 0; } const char * name = lua_tostring(L, 1); CQuestManager & q = CQuestManager::instance(); lua_pushboolean(L, q.IsServerTimer(name)); return 1; }
Aynı dosyada şu kodu aratın;
Kod:{ "server_loop_timer", _set_server_loop_timer },
Altına şunu ekleyin;
Kod:{ "is_server_timer", _is_server_timer },
Bunları yaptıktan sonra gameyi build edip oyuna atınız.
2. Adım: Server Files
Server filesinizde share/locale/turkey/quest dizinine girip quest_function dosyasına şunu ekleyin;
Kod:is_server_timer
Örnek kullanım;
Kod:quest timer_kontrol begin state start begin when letter begin send_letter("Timer kontrol") end when button or info begin if is_server_timer('timer_name') then say("Timer calisiyor.") else say("Timer calismiyor. Tekrar acmak ister misiniz?") local s = select("Evet", "Hayir") if s == 1 then server_timer("timer_name", 1) end end end end end
- Katılım
- 16 Tem 2019
- Konular
- 715
- Mesajlar
- 3,551
- Çözüm
- 47
- Online süresi
- 6mo 20d
- Reaksiyon Skoru
- 2,110
- Altın Konu
- 34
- Başarım Puanı
- 309
- MmoLira
- 19,559
- DevLira
- 122
Evet dostum doğrudurbu şekilde oyuna yeni bir timer eklemiş oluyoruz sanırım bu şekilde oyuna sonradan eklendiği için oyun bunu bilmiyor ve sıfırlayamıyor ? doğrumudur ?
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 594
- Cevaplar
- 3
- Görüntüleme
- 103
- Cevaplar
- 6
- Görüntüleme
- 1K





