MaviAyGames | Quest İle Timer Kontrolü

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 32

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
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;

Kod:
void        CancelServerTimers(DWORD arg);
Altına şu kodu ekle;
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
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

MaviAyGames | Quest İle Timer Kontrolü

Metin2 özel sunucularında gelişmiş sistemler oluşturmak isteyen geliştiriciler için quest dosyaları oldukça kritik bir rol oynar. Bu yazıda MaviAyGames tarafından geliştirilen Quest İle Timer Kontrolü sisteminden bahsedeceğiz. Bu sistem sayesinde Metin2 özel sunucu geliştiricileri, belirli zaman aralıklarında çalışan veya kullanıcı etkileşimine göre başlatılan timer kontrollü görevler oluşturabilirler. Bu da oyuncular için daha dinamik ve sürpriz dolu oyun deneyimleri sunar.

Timer Sistemi Nedir?

Timer sistemleri, oyunda belirli eylemleri zamanlamak için kullanılır. Örneğin bir görevin 10 dakika boyunca aktif kalması, ya da bir etkinliğin belli saatler arasında yapılabilmesi gibi durumlar timer sistemi ile sağlanır. Metin2 özel sunucularda timer kontrolleri genellikle quest[/BR] dosyaları ile yönetilir. Timer kontrolü sayesinde hem sunucu tarafında performanslı kodlama sağlanır hem de kullanıcı etkileşimi daha akıcı hale getirilir.

MaviAyGames Tarafından Geliştirilen Timer Sistemi

MaviAyGames, Metin2 özel sunucu geliştiricileri için oldukça kullanışlı sistemler geliştirmektedir. Bu sistemlerden birisi olan Quest İle Timer Kontrolü, geliştiricilere kolay ve esnek bir yapı sunar. Bu sistem sayesinde geliştiriciler, quest dosyası üzerinden timer başlatıp, bitişinde özel komutlar çalıştırabilir. Örneğin bir oyuncu belirli bir item kullandığında 5 dakikalık bir güç bonusu alabilir. Bu bonusun süresi dolduğunda otomatik olarak sistemden silinir ve oyuncuya bildirim gidebilir.

Nasıl Kullanılır?

Öncelikle quest dosyanızda timer başlatmak istediğiniz noktada timer_add fonksiyonunu kullanmanız gerekir. Örneğin:

Kod:
timer_add('bonus_bitis', 300, 'bonus_kalani', 1)


Bu satır, 5 dakika (300 saniye) sonra bonus_bitis adlı event'in tetiklenmesini sağlar. Ayrıca bonus_kalani adlı timer her saniye bir güncellenir ve kalan süre oyuncuya gösterilebilir. Böylece hem geliştirici hem de oyuncu için şeffaf bir zaman takibi sağlanmış olur.

Avantajları

Quest üzerinden timer kontrolü yapmak, sistem yönetimi açısından büyük kolaylıklar sağlar. Oyun içi etkinlikler, turnuvalar, özel bonuslar gibi pek çok senaryo için bu sistem idealdir. Ayrıca MaviAyGames tarafından sağlanan örnekler sayesinde kolayca entegre edilebilir ve özelleştirilebilir.

Sonuç

Metin2 özel sunucu geliştiricileri için Quest İle Timer Kontrolü sistemi, oyunculara daha zengin ve interaktif bir deneyim sunmaları açısından oldukça değerlidir. MaviAyGames’in sunduğu bu yapı, özellikle C++ ve Python tabanlı sistemlerle entegre çalışarak güçlü bir temel oluşturur. Gelişmiş sunucu geliştirme hedefleyenler için bu tür modüller hayati önem taşır.


MaviAyGames | Timer Control with Quest

For developers looking to build advanced systems on Metin2 private servers, quest files play a critical role. In this article, we will discuss the Timer Control with Quest system developed by MaviAyGames. With this system, Metin2 private server developers can create timed events that activate at specific intervals or based on player interaction. This allows for more dynamic and surprising gameplay experiences for players.

What Is a Timer System?

Timer systems are used to schedule certain actions within the game. For example, they can ensure a task remains active for 10 minutes or allow an event to occur only during specific hours. On Metin2 private servers, timer controls are typically managed through quest files. Timer control ensures efficient coding on the server side and creates a smoother user experience.

Timer System Developed by MaviAyGames

MaviAyGames develops highly practical systems for Metin2 private server developers. One such system is the Timer Control with Quest, which offers developers an easy-to-use and flexible structure. With this system, developers can start timers via quest files and execute custom commands upon completion. For instance, a player might receive a temporary power boost after using a specific item. When the duration expires, the bonus is automatically removed from the system, and a notification can be sent to the player.

How to Use It?

Firstly, you need to use the timer_add function in your quest file where you want to initiate the timer. For example:

Kod:
timer_add('bonus_ends', 300, 'remaining_bonus', 1)


This line triggers the bonus_ends event after 5 minutes (300 seconds). Additionally, the timer named remaining_bonus updates every second, allowing the remaining time to be displayed to the player. This provides transparent time tracking for both the developer and the player.

Advantages

Managing timers through quest files offers significant conveniences in system management. This system is ideal for various scenarios like in-game events, tournaments, and special bonuses. Thanks to examples provided by MaviAyGames, it can easily be integrated and customized.

Conclusion

The Timer Control with Quest system is highly valuable for Metin2 private server developers aiming to provide richer and more interactive experiences for players. The structure offered by MaviAyGames integrates seamlessly with C++ and Python-based systems, forming a strong foundation. Such modules are vital for those aiming for advanced server development.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt