[FIX]Giant Desert Turtle

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
[Turk: Google Translate]

38737_a7cfcd976d0c808d894e2de6792f51de.png

Kod:
//Aramak:             if (GetRaceNum() == 2191 && number(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000)             {                                  float fx, fy;                 GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy);                 long new_x = victim->GetX() + (long)fx;                 long new_y = victim->GetY() + (long)fy;                 SetRotation(GetDegreeFromPositionXY(new_x, new_y, victim->GetX(), victim->GetY()));                 Show(victim->GetMapIndex(), new_x, new_y, 0, true);                 GotoState(m_stateBattle);                 m_dwStateDuration = 1;                 ResetMobSkillCooltime();                 m_pkMobInst->m_dwLastWarpTime = get_dword_time();                 return;             } //Şununla düzenle: //            if (GetRaceNum() == 2191 && number(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000) //            { //                //                float fx, fy; //                GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy); //                long new_x = victim->GetX() + (long)fx; //                long new_y = victim->GetY() + (long)fy; //                SetRotation(GetDegreeFromPositionXY(new_x, new_y, victim->GetX(), victim->GetY())); //                Show(victim->GetMapIndex(), new_x, new_y, 0, true); //                GotoState(m_stateBattle); //                m_dwStateDuration = 1; //                ResetMobSkillCooltime(); //                m_pkMobInst->m_dwLastWarpTime = get_dword_time(); //                return; //            } //Veya daha basit bir şekilde işleve ekleyin: "//"



2) Sebep motlist.txt'de yatmaktadır. GENERAL (FRONT/BACK) KNOCKDOWN, kaplumbağa durumunda bulunmayan GENERAL STANDUP ile yakından ilgilidir, bu nedenle animasyonun durmasının nedeni:

Fix:


Kod:
//Buradan: GENERAL WAIT 00.msa 65 GENERAL WAIT1 00_1.msa 35 GENERAL RUN 03.msa 100 GENERAL NORMAL_ATTACK 20.msa 50 GENERAL NORMAL_ATTACK1 20_1.msa 50 GENERAL FRONT_DAMAGE 30.msa 100 GENERAL FRONT_DEAD 31.msa 100 GENERAL FRONT_KNOCKDOWN 32.msa 100 GENERAL BACK_DAMAGE 34.msa 100 GENERAL BACK_KNOCKDOWN 35.msa 100 GENERAL SPECIAL 24.msa 100 GENERAL SPECIAL1 25.msa 100 //Kaldırmak: GENERAL BACK_KNOCKDOWN 35.msa 100 GENERAL FRONT_KNOCKDOWN 32.msa 100 //Sonuç GENERAL WAIT 00.msa 65 GENERAL WAIT1 00_1.msa 35 GENERAL RUN 03.msa 100 GENERAL NORMAL_ATTACK 20.msa 50 GENERAL NORMAL_ATTACK1 20_1.msa 50 GENERAL FRONT_DAMAGE 30.msa 100 GENERAL FRONT_DEAD 31.msa 100 GENERAL BACK_DAMAGE 34.msa 100 GENERAL SPECIAL 24.msa 100 GENERAL SPECIAL1 25.msa 100

3) Bu en basit sorundur: db / mob_proto'ya gidin, vnum 2191'i (Çöl Kaplumbağası) arayın ve 0'a ayarlayın veya aşağıdaki değerleri azaltın:

resist_sword
resist_dagger
resist_bell
resist_fan
resist_bow

Gördüğünüz gibi resist_twohand zaten 0'a ayarlanmış, bu yüzden hasar sadece büyük kılıçlar tarafından yapılabilir.
[English]

38738_cd94a65b440e653bb2fd04c60f5f860f.png


Kod:
//Search:             if (GetRaceNum() == 2191 && number(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000)             {                                  float fx, fy;                 GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy);                 long new_x = victim->GetX() + (long)fx;                 long new_y = victim->GetY() + (long)fy;                 SetRotation(GetDegreeFromPositionXY(new_x, new_y, victim->GetX(), victim->GetY()));                 Show(victim->GetMapIndex(), new_x, new_y, 0, true);                 GotoState(m_stateBattle);                 m_dwStateDuration = 1;                 ResetMobSkillCooltime();                 m_pkMobInst->m_dwLastWarpTime = get_dword_time();                 return;             } //Replace with: //            if (GetRaceNum() == 2191 && number(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000) //            { //                //                float fx, fy; //                GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy); //                long new_x = victim->GetX() + (long)fx; //                long new_y = victim->GetY() + (long)fy; //                SetRotation(GetDegreeFromPositionXY(new_x, new_y, victim->GetX(), victim->GetY())); //                Show(victim->GetMapIndex(), new_x, new_y, 0, true); //                GotoState(m_stateBattle); //                m_dwStateDuration = 1; //                ResetMobSkillCooltime(); //                m_pkMobInst->m_dwLastWarpTime = get_dword_time(); //                return; //            } //Or insert in the function: "//"

2) The cause lies in motlist.txt. The GENERAL (BACK / FRONT) KNOCKDOWN is closely linked to the GENERAL STANDUP which in the case of the turtle is not present, hence the reason for which the animation stops:

Kod:
//Search: GENERAL WAIT 00.msa 65 GENERAL WAIT1 00_1.msa 35 GENERAL RUN 03.msa 100 GENERAL NORMAL_ATTACK 20.msa 50 GENERAL NORMAL_ATTACK1 20_1.msa 50 GENERAL FRONT_DAMAGE 30.msa 100 GENERAL FRONT_DEAD 31.msa 100 GENERAL FRONT_KNOCKDOWN 32.msa 100 GENERAL BACK_DAMAGE 34.msa 100 GENERAL BACK_KNOCKDOWN 35.msa 100 GENERAL SPECIAL 24.msa 100 GENERAL SPECIAL1 25.msa 100 //Remove: GENERAL BACK_KNOCKDOWN 35.msa 100 GENERAL FRONT_KNOCKDOWN 32.msa 100 //Like this: GENERAL WAIT 00.msa 65 GENERAL WAIT1 00_1.msa 35 GENERAL RUN 03.msa 100 GENERAL NORMAL_ATTACK 20.msa 50 GENERAL NORMAL_ATTACK1 20_1.msa 50 GENERAL FRONT_DAMAGE 30.msa 100 GENERAL FRONT_DEAD 31.msa 100 GENERAL BACK_DAMAGE 34.msa 100 GENERAL SPECIAL 24.msa 100 GENERAL SPECIAL1 25.msa 100

3) This is the simplest problem: just go to db / mob_proto, look for vnum 2191 (Desert Turtle) and set to 0 or reduce the following values:

resist_sword
resist_dagger
resist_bell
resist_fan
resist_bow

As you can see the resist_twohand is already set to 0, which is why the damage could only be done by twohand.
Metin2 Lobby forumunda yer alan bu FIX konusu, Giant Desert Turtle isimli canavarın sistemsel sorunlarını gidermeye yönelik geliştirilmiş bir C++ sistem çözümünü sunar.

Bu sistem, Metin2 özel sunucularında[/BR]
canavar davranışlarının ve spawn mekanizmalarının daha doğru yönetilebilmesi için önemlidir. Özellikle PvP odaklı sunucularda, bazı NPC'lerin veya canavarların beklenmedik şekilde davranması oyun deneyimini olumsuz etkileyebilir.

Sorun:

Giant Desert Turtle adlı canavar, bazen haritada beklenmedik yerlerde ortaya çıkabiliyor veya patlama gibi anormal davranışlar sergileyebiliyor. Bu durum, hem oyuncuların hem de geliştiricilerin deneyimini bozabiliyor.

Çözüm:

Bu sistem, monster.txt dosyasındaki tanımlamaları ve game_core içindeki NPC kontrol mekanizmasını düzenleyerek hatayı ortadan kaldırır. Aynı zamanda spawn pozisyonları ve davranış mantığı üzerinde değişiklikler yapılarak, canavarın normal sınırlar içinde kalması sağlanır.

Uygulama Adımları:

1. monster.txt dosyasında Giant Desert Turtle için tanımlanan ID ve davranış parametreleri kontrol edilmelidir.
2. Game server tarafında, bu canavarın spawn olduğu kod bloğu incelenmeli ve gerekirse optimize edilmelidir.
3. Python GUI veya doğrudan C++ üzerinde yapılan testlerle sistemin doğruluğu teyit edilmelidir.

Neden Bu Fix Gereklidir?

Özel Metin2 sunucularında istikrarlı bir oyun deneyimi sunmak için, tüm NPC'lerin ve canavarların doğru çalışması şarttır. Özellikle desert haritasında bulunan Giant Desert Turtle gibi güçlü düşmanlar, oyun dengesini bozabilecek şekilde hatalı çalışıyorsa, bu PvP sistemlerinde ciddi problemlere yol açabilir.

Kaynak Kod Paylaşımı:

Bu fix için önerilen C++ kod örnekleri, martysama ve diğer Metin2 geliştirici toplulukları tarafından desteklenmektedir. Metin2 server src üzerinde yapılan düzenlemeler, compile işleminden sonra aktif hale gelir.

Sonuç:

Metin2 Lobby olarak bu tür fix çözümlerini paylaşarak, Metin2 özel sunucu geliştiricilerine katkı sağlamaya devam ediyoruz. Sistemin daha stabil ve performanslı çalışması için düzenli olarak source edit yapmanız önerilir.


Metin2 Lobby forum's topic presents this FIX solution addressing systemic issues with the monster named Giant Desert Turtle, implemented through a C++ system.

This system is crucial for managing monster behaviors and spawn mechanisms more accurately on Metin2 private servers. Especially in PvP-oriented servers, unexpected behavior from NPCs or monsters can negatively impact gameplay experience.

Problem:

The Giant Desert Turtle sometimes appears in unexpected locations on the map or exhibits abnormal behavior such as random explosions, which affects both players and developers.

Solution:

This system resolves the issue by editing definitions in monster.txt and adjusting NPC control mechanisms within game_core. Modifications to spawn positions and behavioral logic ensure the monster acts within expected parameters.

Implementation Steps:

1. Check the Giant Desert Turtle's ID and behavior parameters in the monster.txt file.
2. Review and optimize the code block responsible for spawning this monster in the game server source code.
3. Verify functionality through tests conducted via Python GUI or directly in C++.

Why This Fix Is Needed:

To maintain a stable gaming experience in private Metin2 servers, all NPCs and monsters must function correctly. When strong enemies like the Giant Desert Turtle located in the desert map behave incorrectly, it can severely disrupt PvP systems and overall balance.

Source Code Sharing:

Recommended C++ code samples for this fix are supported by communities like martysama and other Metin2 developers. Modifications made in Metin2 server src become active after the compile process.

Conclusion:

As Metin2 Lobby, we continue to support Metin2 private server developers by sharing such fix solutions. Regular source edits are recommended to ensure a more stable and high-performing system.
 

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

Benzer konular

Geri
Üst Alt