Rekor DMG sistemi

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
3aa3020fc8.jpg



Korayın 2015'te yazdığı sistemdir.

Yapılan en yüksek hasarı sisteme kaydeder ve yeni rekor kırıldıkça duyuru geçer isteğe göre ödül felanda ekleyebilirsiniz


*char.cpp
Arat:

Kod:
// MINING[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_pkMiningEvent = NULL;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]// END_OF_MINING[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Üstüne ekle:
Kod:
m_pkRecordControlEvent = NULL;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]



Arat:
Kod:
m_dwMountTime = 0;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Üstüne ekle:
Kod:
m_nGetDamageRecord = quest::CQuestManager::instance().GetEventFlag("dam age_record");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]



Arat:
Kod:
//DELAYED_WARP[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]event_cancel(&m_pkWarpEvent);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]event_cancel(&m_pkCheckSpeedHackEvent);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]//END_DELAYED_WARP[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Altına ekle:
Kod:
event_cancel(&m_pkRecordControlEvent);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]





Arat:
Kod:
int CHARACTER::GetSkillPowerByLevel(int level, bool bMob) const[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return CTableBySkill::instance().GetSkillPowerByLevelFrom Type(GetJob(), GetSkillGroup(), MINMAX(0, level, SKILL_MAX_LEVEL), bMob);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Altına ekle:
Kod:
void CHARACTER::SetDamageRecord(int igetnewrecord){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_nGetDamageRecord = igetnewrecord;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void CHARACTER::CheckDamageRecord(){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int igetnewrecord = quest::CQuestManager::instance().GetEventFlag("dam age_record");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (igetnewrecord != GetDamageRecord())[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]SetDamageRecord(igetnewrecord);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]EVENTFUNC(record_check_event)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]char_event_info* info = dynamic_cast<char_event_info*>(event->info);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (info == NULL)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]sys_err("record_check_event> <Factor> Null pointer");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return 0;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]LPCHARACTER ch = info->ch;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (ch == NULL) { // <Factor>[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return 0;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]ch->CheckDamageRecord();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return PASSES_PER_SEC(10);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void CHARACTER::InitRecordControlEvent(){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (m_pkRecordControlEvent)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]char_event_info* info = AllocEventInfo<char_event_info>();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]info->ch = this;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_pkRecordControlEvent = event_create(record_check_event, info, PASSES_PER_SEC(10));[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]


*char.h

Arat:
Kod:
int m_iMaxAggro;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]// End of Battle[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Altına ekle:
Kod:
LPEVENT m_pkRecordControlEvent;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int m_nGetDamageRecord;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]public:[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void InitRecordControlEvent();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int GetDamageRecord() const { return m_nGetDamageRecord; }[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void SetDamageRecord(int igetnewrecord);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]void CheckDamageRecord();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]


*char_battle.cpp

Arat:
Kod:
if (GetHP() <= 0)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]Stun();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (pAttacker && !pAttacker->IsNPC())[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_dwKillerPID = pAttacker->GetPlayerID();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]else[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]m_dwKillerPID = 0;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Altına ekle:
Kod:
if (pAttacker->IsPC()){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int newdam = dam;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (newdam > GetDamageRecord()) {[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]SetDamageRecord(newdam);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]quest::CQuestManager::instance().RequestSetEventFl ag("damage_record", newdam);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]quest::CQuestManager::instance().RequestSetEventFl ag("damage_record_own", pAttacker->GetPlayerID());[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]char buf[250];[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]snprintf(buf, sizeof(buf), "%s isimli oyuncu %d damage ile damage rekorunu kırdı !", pAttacker->GetName(), dam);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]SendNotice(buf);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]


*input_login.cpp

Arat:
Kod:
if (g_noticeBattleZone)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (FN_is_battle_zone(ch))[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("ÀÌ ¸Ê¿¡¼± °Á¦ÀûÀÎ ´ëÀüÀÌ ÀÖÀ»¼ö µµ ÀÖ½À´Ï´Ù."));[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("ÀÌ Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀ»½Ã"));[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("º»ÀÎÀÇ ÁÖ¼º ¹× ºÎ¼ºÀ¸·Î µ¹¾Æ°¡½Ã±â ¹Ù¶ø´Ï´Ù."));[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Altına ekle:
Kod:
ch->InitRecordControlEvent();[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]


*questlua_global.cpp

Arat:
Kod:
{ "add_ox_quiz", _add_ox_quiz },[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]
Üstüne ekle:
Kod:
{ "reset_damage_record", _reload_damage_record },[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{ "get_damage_record", _get_damage_record },[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{ "get_damage_record_owner", _get_damage_record_owner },[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]

Arat:
Kod:
void RegisterGlobalFunctionTable(lua_State* L)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]
Üstüne ekle:
Kod:
int _reload_damage_record(lua_State* L)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]quest::CQuestManager::instance().SetEventFlag("dam age_record", 0);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]SendNotice("Damage rekoru sifirlandi");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return 1;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int _get_damage_record(lua_State* L)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int iDamageRecord = quest::CQuestManager::instance().GetEventFlag("dam age_record");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (iDamageRecord)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]lua_pushnumber(L, iDamageRecord);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]else[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]lua_pushnumber(L, 0);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return 1;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int _get_damage_record_owner(lua_State* L)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]{[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]int iDamageRecordOwnerPid = quest::CQuestManager::instance().GetEventFlag("dam age_record_own");[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (iDamageRecordOwnerPid){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]LPCHARACTER chRecordOwner = CHARACTER_MANAGER::instance().FindByPID(iDamageRec ordOwnerPid);[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if (chRecordOwner){[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]lua_pushstring(L, chRecordOwner->GetName());[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return 1;[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]}[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]


Basit bir kontrol paneli:
Kod:
[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]--[[[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]Yeni quest fonksiyonlarını quest_functions dosyasına ekleyin:[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]get_damage_record[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]get_damage_record_owner[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]reset_damage_record[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]--]][/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]quest dmg_record begin[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]state start begin[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]when 20094.chat."Damage Rekor " with pc.is_gm() begin[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local s = select("Rekoru Sifirla", "Rekor sahibi", "Rekoru Oto Duyur", "Iptal")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if s == 1 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]reset_damage_record()[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]elseif s == 2 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local record, owner = get_damage_record(), get_damage_record_owner()[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]say_title("Damage Rekor bilgi")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]say("Damage rekoru:")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]say(record)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]say("Damage rekoru Sahibi:")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]say(owner)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]elseif s == 3 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local s_duyuru = select("Duyuruyu Ac", "Duyuruyu Kapat", "Iptal")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if s_duyuru == 1 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]clear_server_timer("oto_duyuru_rekor")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]server_loop_timer("oto_duyuru_rekor", 40)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]syschat("Otomatik Duyuru kisa sure icinde baslatilacak")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]elseif s_duyuru == 2 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]clear_server_timer("oto_duyuru_rekor")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]syschat("Otomatik Duyuru durduruldu")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]elseif s_duyuru == 3 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]elseif s == 4 then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]when oto_duyuru_rekor.server_timer begin[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local time = os.date("%X")[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local splitData = dmg_record.split(time, ':')[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local newtime = tostring(splitData[1].. ":".. splitData[2])[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]if newtime == "00:30" or newtime == "01:30" or newtime == "02:30" or newtime == "03:30" or newtime == "04:30" or newtime == "05:30" or newtime == "06:30" or newtime == "07:30" or newtime == "08:30" or newtime == "09:30" or newtime == "10:30" or newtime == "11:30" or newtime == "12:30" or newtime == "13:30" or newtime == "14:30" or newtime == "15:30" or newtime == "16:30" or newtime == "17:30" or newtime == "18:30" or newtime == "19:30" or newtime == "20:30" or newtime == "21:30" or newtime == "22:30" or newtime == "23:30" then[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local record, owner = get_damage_record(), get_damage_record_owner()[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]notice_all("Guncel damage rekor sahibi: "..owner .." Rekoru: "..record)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]function split(command_, x)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return dmg_record.split_(command_,x)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]function split_(string_,delimiter)[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local result = { }[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local from = 1[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]local delim_from, delim_to = string.find( string_, delimiter, from )[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]while delim_from do[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]table.insert( result, string.sub( string_, from , delim_from-1 ) )[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]from = delim_to + 1[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]delim_from, delim_to = string.find( string_, delimiter, from )[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]table.insert( result, string.sub( string_, from ) )[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]return result[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR] [COLOR=#BB0000][FONT=Verdana]end[/FONT][/COLOR]

Rekor DMG Sistemi Nedir?
Metin2 özel sunucularında oyuncuların PvP performanslarını artırmak ve oyun deneyimini zenginleştirmek amacıyla geliştirilen Rekor DMG (Damage) sistemi, son derece popüler ve etkili bir özelliktir. Bu sistem sayesinde oyuncular, verdiği hasar miktarına göre ödüller kazanabilir, liderlik tablolarında yer alabilir ve diğer oyunculara göre avantaj elde edebilir. Rekor DMG sistemi, Metin2 PvP sunucularında rekabeti artırmak ve oyuncu katılımını desteklemek için kritik rol oynar.

Sistem Nasıl Çalışır?
Rekor DMG sistemi, oyuncuların verdiği hasarı gerçek zamanlı olarak takip eder. Hasar verildikçe sistem, bu veriyi loglar ve belirli periyotlarda en yüksek hasarı veren oyuncuları listeler. Oyuncular, hasar listesinde üst sıralarda yer aldıkça belirli ödüller kazanabilirler. Bu ödüller genellikle Metin2 özel sunucularında kullanılan özel itemler, EXP boostlar, gold veya premium üyelik gibi ödüllerdir. Sistem, PvP savaşları sırasında da aktif çalışır ve her dövüşte hasar miktarı analiz edilir.

C++ ile Geliştirilen Rekor DMG Sistemi
Metin2 özel sunucularında çalışan Rekor DMG sistemi, genellikle C++ dilinde yazılmış olan Game Server üzerinde çalışır. Bu sistem, oyuncuların verdiği hasarı takip etmek ve analiz etmek için server-side scripting ile geliştirilir. Sistem, her hasar anında triggerlanan eventlerle çalışır. Bu eventler, veritabanına (DB) kayıt atar ve belirli aralıklarla raporlanır. Bu süreçte DB Core ve Game Core yapıları büyük rol oynar. Sistem ayrıca, belirli periyotlarda resetlenebilir (örneğin haftalık veya günlük). Bu sayede her oyuncunun eşit bir şansı olması sağlanır.

Python GUI Kullanımı ile Yönetim Paneli
Rekor DMG sistemi için geliştirilen yönetim panelleri genellikle Python GUI teknolojisi ile oluşturulur. Bu sayede sunucu sahipleri, hasar listelerini, ödül dağıtımlarını ve sistemin genel durumunu daha kolay takip edebilir. Py Root ve Uiscript gibi yapılar, Metin2 client tarafında da kullanıcı dostu arayüzler oluşturmada yardımcı olur. Python GUI ile yapılan yönetim paneli sayesinde, sistemde yapılacak düzenlemeler anlık olarak yapılabilir ve sunucu üzerindeki etkileri hızlıca görülebilir.

Avantajları Nelerdir?
Rekor DMG sistemi, oyuncular arasında rekabeti artırır. En yüksek hasarı veren oyuncular, hem prestij kazanır hem de sunucuda daha çok tanınır. Bu sistem, oyuncuların daha fazla PvP yapmalarını teşvik eder. Ayrıca, PvP sistemleri ile entegre çalışarak Metin2 oyun deneyimini derinleştirir. Sunucu sahipleri için ise bu sistem, oyuncu tutulmasını ve aktifliği artırmak açısından büyük fayda sağlar. Rekor DMG sistemi, doğru uygulandığında sunucu popülaritesini ciddi anlamda artırabilir.

Martysama ve Metin2 Development
Martysama, Metin2 özel sunucu geliştirme konusunda önemli bir isimdir. Rekor DMG gibi gelişmiş sistemlerin örnekleri, Martysama'nın kaynak kodlarında bulunabilir. Bu sistemler, Metin2Dev toplulukları tarafından da sıkça kullanılır. Sunucu sahipleri, Martysama'nın C++ kaynak kodlarını kullanarak, güçlü ve optimize sistemler geliştirebilir. Metin2 development süreçleri, bu tür sistemlerin entegrasyonu ile daha verimli hale gelir.

Sonuç
Rekor DMG sistemi, Metin2 özel sunucularında oyuncu etkileşimini ve PvP deneyimini ciddi anlamda artırır. Doğru bir şekilde tasarlandığında ve C++/Python tabanlı yapılarla entegre edildiğinde, bu sistem sunucunuzun kalitesini ve popülaritesini yükseltmede kilit rol oynar. Oyuncuların rekabet etmesini sağlayan bu tür sistemler, Metin2 özel sunucularının temel dayanaklarından biridir.


What is the Record DMG System?
The Record DMG (Damage) system is a popular and effective feature developed for Metin2 private servers to enhance player PvP performance and enrich the gaming experience. With this system, players can earn rewards based on their damage output, appear on leaderboards, and gain advantages over other players. The Record DMG system plays a crucial role in increasing competition and supporting player engagement in Metin2 PvP servers.

How Does the System Work?
The Record DMG system tracks the damage dealt by players in real-time. As damage is dealt, the system logs this data and lists the top damage dealers at specific intervals. Players who rank high on the damage list can win various rewards. These rewards are usually special items used in Metin2 private servers, EXP boosts, gold, or premium memberships. The system operates during PvP battles as well, analyzing damage dealt in each fight.

Record DMG System Developed with C++
The Record DMG system running on Metin2 private servers typically operates on a Game Server written in C++. This system is developed using server-side scripting to track and analyze the damage dealt by players. It works through events triggered every time damage occurs. These events write to the database (DB) and generate reports at regular intervals. In this process, DB Core and Game Core structures play a significant role. Additionally, the system can be reset at certain periods (e.g., weekly or daily), ensuring equal opportunity for all players.

Management Panel with Python GUI
Management panels developed for the Record DMG system are generally created using Python GUI technology. This allows server owners to easily monitor damage lists, reward distributions, and the overall status of the system. Structures like Py Root and Uiscript assist in creating user-friendly interfaces on the Metin2 client side. With a management panel built using Python GUI, adjustments to the system can be made instantly, and their effects can be observed quickly on the server.

Advantages
The Record DMG system increases competition among players. Top damage dealers gain prestige and become more recognized within the server. This system encourages players to engage more in PvP activities. Moreover, integrated with PvP systems, it deepens the Metin2 gameplay experience. For server owners, this system significantly helps increase player retention and activity. When properly implemented, the Record DMG system can substantially boost your server's popularity.

Martysama and Metin2 Development
Martysama is a key figure in Metin2 private server development. Examples of advanced systems like Record DMG can be found in Martysama’s source codes. Such systems are frequently utilized by Metin2Dev communities. Server owners can develop powerful and optimized systems using Martysama’s C++ source codes. Integrating such systems enhances the efficiency of Metin2 development processes.

Conclusion
The Record DMG system significantly enhances player interaction and PvP experience in Metin2 private servers. When designed correctly and integrated with C++/Python-based structures, this system plays a pivotal role in elevating the quality and popularity of your server. Systems that encourage player competition are fundamental cornerstones of Metin2 private servers.
 

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

Geri
Üst Alt