[C++] Lonca ve Grup CoreDowner Fix

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba TurkMMO

Oyuna dışarıdan müdahale ile ufak bir python scripti enjekte edilerek tetiklenen bir coredownerın fixini paylaşacağım.

Nedir Bu CoreDowner ?

Küçük bir script yardımıyla oyuncular oyundaki mobları veya npcleri loncaya veya gruba davet edebiliyor, lonca skilli kullandırabiliyorlar bunlar olduğu zamanda core düşüyor ve tahmin edebileceğiniz üzere çok sevgili Ymir bu konu hakkında da bir kontrol koyma zahmetinde bulunmamış, ne kadar şaşırtıcı.

Nasıl Fixleyeceğiz ?

input_main.cpp
açılır.

case GUILD_SUBHEADER_CG_ADD_MEMBER: bulunur.

Üstteki case'in içinde bulunur ; ( El değmemiş srcde 2615. Satır, sizde üç aşağısı beş yukarısı olabilir.)

Kod:
if (!ch->IsPC())

Değiştirilir ;

Kod:
if (!ch->IsPC() || !newmember->IsPC())

Bulunur ;

Kod:
void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData)

Kod Bloğunun içinde bulunur ; ( El değmemiş srcde 2492. Satır, sizde üç aşağısı beş yukarısı olabilir.)

Kod:
if (pch)     ch->GetParty()->SummonToLeader(pch->GetPlayerID());

Değiştirilir ;

Kod:
if (pch) {     if (pch->IsPC())         ch->GetParty()->SummonToLeader(pch->GetPlayerID()); }

Bulunur ;

Kod:
void CInputMain::PartyInvite(LPCHARACTER ch, const char * c_pData)

Altına eklenir ; ( Böyle gözükmeli ; )

Kod:
if (!ch)     return;

Aynı Kod Bloğunun içinde bulunur ; ( El değmemiş srcde 2226. Satır, sizde üç aşağısı beş yukarısı olabilir.)

Kod:
if (!pInvitee || !ch->GetDesc() || !pInvitee->GetDesc())

Değiştirilir ;

Kod:
if (!pInvitee || !ch->GetDesc() || !pInvitee->GetDesc() || !pInvitee->IsPC() || !ch->IsPC())

Bulunur ;

Kod:
void CInputMain::PartyInviteAnswer(LPCHARACTER ch, const char * c_pData)

Altına Eklenir ; (Üstteki fotoğrafta gösterdiğim gibi aynı şekilde ekleyeceksiniz.)

Kod:
if (!ch)     return;

Aynı fonksiyon içinde bulunur ; ( El değmemiş srcde 2249. Satır, sizde üç aşağısı beş yukarısı olabilir.)

Kod:
if (!pInviter)

Değiştirilir ;

Kod:
if (!pInviter || !pInviter->IsPC())


Metin2Dev Minton'dan Alıntıdır.

[C++] Lonca ve Grup CoreDowner Fix

Metin2 özel sunucularında oyuncuların bir araya gelerek loncalar ve gruplar oluşturması, oyun içi sosyal yapıyı güçlendirir. Ancak zamanla bu sistemlerde ortaya çıkan CoreDowner sorunları sunucu kararlılığını tehdit edebilir. Bu yazıda, lonca ve grup sistemlerinde meydana gelen CoreDowner hatalarını düzeltmek için gerekli C++ temelli çözümlere odaklanacağız. Bu fix sayesinde sunucunuzda yaşanan crash ve server down gibi durumlar minimize edilebilir.

Lonca Sistemi ve Grup Dinamikleri
Metin2 oyununda loncalar, oyuncuların bir araya gelip ortak hedefler doğrultusunda ilerlediği yapıdır. Lonca üyeleri arasında ekip çalışması, item paylaşımı, savaşlar gibi unsurlar mevcuttur. Gruplar ise daha küçük çaplı, 4 kişilik ekip oluşumlarını ifade eder. Her iki sistem de game core üzerinden yönetilir ve sunucu tarafında yoğun işlem gücü gerektirir. Bu sistemlerde meydana gelen hatalar, sunucuyu çökertebilir.

CoreDowner Nedir?
CoreDowner, genellikle sunucuda meydana gelen bellek hataları, null pointer referansları veya yanlış veri akışı sonucu oluşan crash türüdür. Özellikle lonca ve grup işlemleri sırasında bu hata sıkça görülür. Örneğin, bir loncanın dağılması sırasında ya da bir oyuncunun gruptan ayrılması esnasında doğru bir şekilde veri temizliği yapılmazsa, sunucu çökebilir.

C++ Temelli Fix Uygulaması
Fix uygulamak için öncelikle game core dosyalarını incelemek gerekir. Özellikle PartyManager.cpp, GuildManager.cpp ve ilişkili header dosyaları incelenmelidir. Aşağıdaki adımlar genel hatlarıyla uygulanabilir:

- Oyuncu gruba katıldığında ve ayrıldığında pointer kontrolleri yapılmalıdır.
- Lonca dağıldığında ya da silindiğinde tüm üyelerin verileri doğru şekilde temizlenmelidir.
- Null kontrolü eksiksiz yapılmalıdır.

Fix Kod Örneği
Aşağıda örnek bir party leave işlemi için C++ kod parçası verilmiştir:

Kod:
[B]if[/B] (pParty && pPlayer) {[BR][/BR]    pParty->RemoveMember(pPlayer);[BR][/BR]    [B]if[/B] (!pParty->GetMemberCount()) {[BR][/BR]        PartyManager::instance().DestroyParty(pParty->GetID());[BR][/BR]    }[BR][/BR]}


Sunucu Kararlılığı İçin Öneriler
Sunucunuzda CoreDowner hatalarını engellemek için aşağıdaki stratejileri uygulayabilirsiniz:

- Sunucu loglarını düzenli takip edin.
- Memory leak kontrolleri yapın.
- Party ve guild sistemlerinde thread güvenliği sağlayın.
- Client-server senkronizasyonunu koruyun.

Sonuç
Metin2 özel sunucularında lonca ve grup sistemlerinde meydana gelen CoreDowner hataları, C++ seviyesinde dikkatli kodlama ile çözülebilir. Bu fix, sunucu kararlılığını artırır ve kullanıcı deneyimini olumlu yönde etkiler. Daha fazla Metin2 gelişmiş sistem ve source edit konusunda bilgi almak için Metin2Lobby sitesini ziyaret edebilirsiniz.


[C++] Guild and Party CoreDowner Fix

In Metin2 private servers, the formation of guilds and parties by players strengthens the social structure within the game. However, over time, CoreDowner issues emerging from these systems can threaten server stability. In this article, we will focus on C++-based solutions for fixing errors that occur in guild and party systems. This fix can help minimize crash and server down situations occurring in your server.

Guild System and Party Dynamics
In Metin2, guilds are structures where players come together and progress towards common goals. Within guilds, there are elements such as teamwork, item sharing, battles, etc. Parties represent smaller scale group formations with up to 4 players. Both systems are managed via the game core and require significant processing power on the server side. Errors occurring in these systems can cause server crashes.

What is CoreDowner?
CoreDowner is generally a type of crash caused by memory errors, null pointer references, or incorrect data flow on the server. These errors are frequently observed especially during guild and party operations. For instance, if proper data cleanup is not performed when a guild disbands or a player leaves a party, the server may crash.

C++ Based Fix Implementation
To apply the fix, you first need to examine the game core files. Specifically, PartyManager.cpp, GuildManager.cpp, and related header files should be reviewed. The following steps can generally be applied:

- Pointer checks must be performed when a player joins or leaves a party.
- When a guild disbands or gets deleted, all members' data must be properly cleaned.
- Null checks must be thoroughly implemented.

Sample Fix Code
Below is an example C++ code snippet for a party leave operation:

Kod:
[B]if[/B] (pParty && pPlayer) {[BR][/BR]    pParty->RemoveMember(pPlayer);[BR][/BR]    [B]if[/B] (!pParty->GetMemberCount()) {[BR][/BR]        PartyManager::instance().DestroyParty(pParty->GetID());[BR][/BR]    }[BR][/BR]}


Recommendations for Server Stability
To prevent CoreDowner errors on your server, you can implement the following strategies:

- Regularly monitor server logs.
- Perform memory leak checks.
- Ensure thread safety in party and guild systems.
- Maintain client-server synchronization.

Conclusion
CoreDowner errors occurring in guild and party systems in Metin2 private servers can be resolved through careful coding at the C++ level. This fix enhances server stability and positively impacts user experience. To learn more about advanced Metin2 systems and source edits, visit Metin2Lobby.
 

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

Benzer konular

Geri
Üst Alt