Petsystem.h Açılır Ve Aratılır.
Altına Eklenir
Tekrar Aratılır.
Altına Eklenir.
Petsystem.h ile işimiz bitti.
Şimdi PetSystem.cpp Açalım Ve Aratalım.
Yukarıdaki Satırı Komple Aşağıdaki Gibi Değiştirin.
Şimdi Tekrar Aratalım.
Altına Eklenir.
Aratalım.
Üstüne Ekleyelim.
PetSystem.cpp İle İşimiz Bitti Şimdi char_battle.cpp açalım
En Başına Ekleyelim
Altına Eklenir.
Şimdi char_battle.cpp ile işimiz bitti.
pvp.cpp açalım ve aratalım.
Altına Eklenir.
Ve Pet Atak Sistemini Eklemiş Oluyoruz 1 Teşekkür Yeterlidir. İyi Forumlar.
Metin2 Pet Saldırı Sistemleri: Petlerin Oyunculara Saldırmasını Sağlamak
Metin2 özel sunucularında geliştirme yaparken pet sistemlerine saldırı yeteneği kazandırmak isteyen geliştiriciler için oldukça popüler bir özelliktir. Bu yazıda C++ tabanlı Metin2 sunucu kaynak kodlarında nasıl bir pet saldırı sistemi geliştirileceğini adım adım ele alacağız. Bu sistem sayesinde petler artık sadece destek sağlayıcı değil, aynı zamanda aktif savaşan bir varlık haline gelebilir.
Pet Saldırı Sistemi Nedir?
Metin2 oyununda petler genellikle yardımcı karakterlerdir. Ancak bazı özel sunucularda petlerin oyuncularla birlikte savaşması istenir. Bu durumda petlerin bir hedef seçip ona saldırması gerekir. Bu sistem, PvP sunucularında özellikle dikkat çeker çünkü petler, sahibinin yanında saldırı gücüne sahip olarak savaşa katılır. Bu, hem stratejik hem de görsel açıdan oyun deneyimini artırır.
C++ Kaynak Kodları ile Pet Saldırısı Nasıl Uygulanır?[/CHARACTER]
Öncelikle game sunucu kaynak kodlarında pet_manager.cpp veya benzeri dosyalar üzerinde değişiklik yapmanız gerekir. Pet sınıfının içinde bir attack_target fonksiyonu tanımlamalısınız. Bu fonksiyon, petin belirli bir mesafedeki düşmanı algılayıp ona saldırmasını sağlar. FindEnemy gibi bir fonksiyon yardımıyla pet, sahibinin etrafındaki rakip karakterleri tarar ve en yakın olanı hedef alır.
void CPetActor::AttackTarget(LPCHARACTER pkChr)
{
if (!pkChr || !pkChr->IsEnemy(m_pkOwner)) return;
// Petin hedefe saldırması sağlanır
m_pkOwner->SendChatPacket(...);
}
Petlerin Hedef Seçimi ve Saldırı Mantığı
Petlerin saldırı mantığı genellikle AI tabanlıdır. Petin sahibiyle senkronize çalışması önemlidir. Bu nedenle pet_ai.cpp dosyasında, petin ne zaman saldırıya geçeceğini belirleyen bir state machine (durum makinesi) tanımlamalısınız. Örneğin, petin sahibi bir oyuncuya saldırdığında, pet de otomatik olarak aynı hedefe saldırabilir. Bu işlem, OnSight event'leri ile yönetilir.
Pet AI Geliştirme ve Entegrasyon Noktaları
Pet saldırı sisteminin doğru çalışması için AI yapısı iyi tanımlanmalıdır. Petin hedef seçimi, mesafe kontrolü, atk menzili, canavar ve oyuncu hedef alma gibi kriterler kodlanmalıdır. Bu işlemler genellikle C++ dilinde ve server side tarafında yapılır. Client tarafında ise bu olaylar doğru şekilde gösterilmelidir.
Pet AI Örnek Kod Parçası:
if (m_pkOwner->GetVictim() != NULL && m_pkOwner->IsPVPMode()) {
SetTarget(m_pkOwner->GetVictim());
BeginAttack();
}
Pet Saldırı Sisteminin Sunucuya Entegrasyonu
Sunucu tarafında bu sistemi entegre ederken db_core ile veri alışverişini de göz önünde bulundurmalısınız. Petlerin stat, level, damage gibi değerleri veritabanında tutulur. Bu değerler saldırı sırasında kullanılır. Ayrıca auth ve game sunucuları arasında doğru haberleşme sağlanmalıdır.
Kaynak Kod Düzenleme Adımları:
- PetActor sınıfında saldırı fonksiyonları tanımlanır.
- PetManager ile petlerin kontrolü sağlanır.
- AI sistemi ile hedef seçimi yapılır.
- Client tarafında animasyonlar uyumlu hale getirilir.
Sonuç
Metin2 özel sunucularında pet saldırı sistemi eklemek, oyuncuların daha stratejik oyun deneyimi yaşamasını sağlar. C++ bilgisi gerektiren bu sistem, doğru uygulandığında sunucunuzun fark yaratmasını sağlar. Bu yazıda anlatılan adımlar sayesinde petlerin artık sadece destek değil, savaşan bir unsur haline gelmesi mümkündür.
Metin2 Pet Attack Systems: Making Pets Attack
When developing Metin2 private servers, adding attack capabilities to pet systems is a popular feature among developers. In this article, we will go through step-by-step how to implement a pet attack system within C++-based Metin2 server sources. With this system, pets become not only supportive but also active combatants during battles. This significantly enhances both strategic gameplay and visual experience.
What is a Pet Attack System?
In Metin2, pets are usually support characters. However, on certain private servers, it is desired that pets fight alongside players. For this, pets must be able to select targets and attack them. This system is particularly attractive on PvP servers, since pets join the battle with offensive power alongside their owners, enhancing the gaming experience visually and strategically.
How to Implement Pet Attacks with C++ Source Codes?
Firstly, you need to modify files such as pet_manager.cpp within your game server source. You should define an attack_target function inside the pet class. This function allows the pet to detect and attack an enemy within range. Using functions like FindEnemy, the pet scans for rival characters around its owner and selects the nearest one as its target.
void CPetActor::AttackTarget(LPCHARACTER pkChr)
{
if (!pkChr || !pkChr->IsEnemy(m_pkOwner)) return;
// The pet attacks the target
m_pkOwner->SendChatPacket(...);
}
Target Selection and Attack Logic for Pets
The attack logic of pets is generally AI-based. It's important that pets work in sync with their owners. Therefore, you should define a state machine in the pet_ai.cpp file to determine when the pet should begin attacking. For instance, when the owner attacks another player, the pet can automatically target the same opponent. This process is managed through OnSight events.
Developing Pet AI and Integration Points
For the pet attack system to work correctly, the AI structure must be well-defined. Criteria such as target selection, distance control, attack range, and selecting monster or player targets must be coded into the pet. These operations are typically done in C++ on the server side. On the client side, these events must be displayed correctly.
Sample Pet AI Code Snippet:
if (m_pkOwner->GetVictim() != NULL && m_pkOwner->IsPVPMode()) {
SetTarget(m_pkOwner->GetVictim());
BeginAttack();
}
Integrating Pet Attack System into Server
When integrating this system into your server, you must also consider data exchange with db_core. Values such as stats, level, and damage for pets are stored in the database and used during attacks. Proper communication between auth and game servers is essential.
Steps for Source Code Modification:
- Define attack functions in the PetActor class.
- Control pets via PetManager.
- Use AI system for target selection.
- Ensure animations are compatible on the client side.
Conclusion
Adding a pet attack system to Metin2 private servers allows players to have a more strategic gaming experience. Requiring knowledge of C++, this system can make your server stand out when properly implemented. Thanks to the steps described in this article, pets can transform from mere support units into active fighters.
Kod:
void Unmount();
Altına Eklenir
Kod:
bool Attack(LPCHARACTER pkVictim = NULL);
Tekrar Aratılır.
Kod:
CPetActor* GetByVnum(DWORD vnum) const;
Altına Eklenir.
Kod:
void LaunchAttack(LPCHARACTER pkVictim = NULL);
Petsystem.h ile işimiz bitti.
Şimdi PetSystem.cpp Açalım Ve Aratalım.
Kod:
bool CPetActor::Update(DWORD deltaTime) bool CPetActor::Update(DWORD deltaTime) { bool bResult = true; // Æê ÁÖÀÎÀÌ Á×¾ú°Å³ª, ¼ÒȯµÈ ÆêÀÇ »óŰ¡ ÀÌ»óÇÏ´Ù¸é ÆêÀ» ¾ø¾Ú. (NOTE: °¡²û°¡´Ù ÀÌ·± Àú·± ÀÌÀ¯·Î ¼ÒȯµÈ ÆêÀÌ DEAD »óÅ¿¡ ºüÁö´Â °æ¿ì°¡ ÀÖÀ½-_- // ÆêÀ» ¼ÒȯÇÑ ¾ÆÀÌÅÛÀÌ ¾ø°Å³ª, ³»°¡ °¡Áø »óŰ¡ ¾Æ´Ï¶ó¸é ÆêÀ» ¾ø¾Ú. if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead()) || NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()) || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner() ) { this->Unsummon(); return true; } if (this->IsSummoned() && HasOption(EPetOption_Followable)) bResult = bResult && this->_UpdateFollowAI(); return bResult; }
Yukarıdaki Satırı Komple Aşağıdaki Gibi Değiştirin.
Kod:
bool CPetActor::Update(DWORD deltaTime) { bool bResult = false; // Æê ÁÖÀÎÀÌ Á×¾ú°Å³ª, ¼ÒȯµÈ ÆêÀÇ »óŰ¡ ÀÌ»óÇÏ´Ù¸é ÆêÀ» ¾ø¾Ú. (NOTE: °¡²û°¡´Ù ÀÌ·± Àú·± ÀÌÀ¯·Î ¼ÒȯµÈ ÆêÀÌ DEAD »óÅ¿¡ ºüÁö´Â °æ¿ì°¡ ÀÖÀ½-_- // ÆêÀ» ¼ÒȯÇÑ ¾ÆÀÌÅÛÀÌ ¾ø°Å³ª, ³»°¡ °¡Áø »óŰ¡ ¾Æ´Ï¶ó¸é ÆêÀ» ¾ø¾Ú. if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead()) || NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()) || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner() ) { this->Unsummon(); return true; } if (this->GetCharacter()->GetVictim()) { bResult = this->Attack(); } if (!bResult) { if (this->IsSummoned() && HasOption(EPetOption_Followable)) bResult = this->_UpdateFollowAI(); } return bResult; }
Şimdi Tekrar Aratalım.
Kod:
void CPetActor::ClearBuff() { if (NULL == m_pkOwner) return ; TItemTable* item_proto = ITEM_MANAGER::instance().GetTable(m_dwSummonItemVn um); if (NULL == item_proto) return; for (int i = 0; i < ITEM_APPLY_MAX_NUM; i++) { if (item_proto->aApplies[i].bType == APPLY_NONE) continue; m_pkOwner->ApplyPoint(item_proto->aApplies[i].bType, -item_proto->aApplies[i].lValue); } return ; }
Altına Eklenir.
Kod:
bool CPetActor::Attack(LPCHARACTER pkVictim) { if (pkVictim) { if (!pkVictim->IsMonster() || pkVictim->IsDead()) return false; if (m_pkChar->GetVictim()) return false; } else { pkVictim = m_pkChar->GetVictim(); if (!pkVictim) return false; } m_pkChar->SetVictim(pkVictim); const PIXEL_POSITION& rkPetPos = m_pkChar->GetXYZ(); const PIXEL_POSITION& rkVictimPos = pkVictim->GetXYZ(); int iDistance = DISTANCE_APPROX(rkPetPos.x - rkVictimPos.x, rkPetPos.y - rkVictimPos.y); if (iDistance >= m_pkChar->GetMobAttackRange()) { m_pkChar->Follow(pkVictim, m_pkChar->GetMobAttackRange()); } else { if (get_dword_time() - m_pkChar->GetLastAttackTime() >= 3000) { if (m_pkChar->Attack(pkVictim)) { m_pkChar->SendMovePacket(FUNC_ATTACK, 0, rkPetPos.x, rkPetPos.y, 0, get_dword_time()); m_pkChar->SetLastAttacked(get_dword_time()); } } } return true; }
Aratalım.
Kod:
bool CPetSystem::Update(DWORD deltaTime)
Üstüne Ekleyelim.
Kod:
void CPetSystem::LaunchAttack(LPCHARACTER pkVictim) { if (!pkVictim) return; for (itertype(m_petActorMap) it = m_petActorMap.begin(); it != m_petActorMap.end(); ++it) { CPetActor* pkPetActor = it->second; if (pkPetActor->IsSummoned()) pkPetActor->Attack(pkVictim); } }
PetSystem.cpp İle İşimiz Bitti Şimdi char_battle.cpp açalım
En Başına Ekleyelim
Kod:
#include "PetSystem.h" Sonra Aratalım:Kod: if (BATTLE_DEAD == iRet && IsPC()) SetVictim(NULL);
Altına Eklenir.
Kod:
if (BATTLE_DEAD != iRet && IsPC()) { if (m_petSystem && m_petSystem->CountSummoned() > 0) m_petSystem->LaunchAttack(pkVictim); }
Şimdi char_battle.cpp ile işimiz bitti.
pvp.cpp açalım ve aratalım.
Kod:
bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
Altına Eklenir.
Kod:
if (pkChr->IsPet() && pkVictim->IsMonster()) { return true; } if (pkChr->IsMonster() && pkVictim->IsPet()) { return true; }
Ve Pet Atak Sistemini Eklemiş Oluyoruz 1 Teşekkür Yeterlidir. İyi Forumlar.
Metin2 Pet Saldırı Sistemleri: Petlerin Oyunculara Saldırmasını Sağlamak
Metin2 özel sunucularında geliştirme yaparken pet sistemlerine saldırı yeteneği kazandırmak isteyen geliştiriciler için oldukça popüler bir özelliktir. Bu yazıda C++ tabanlı Metin2 sunucu kaynak kodlarında nasıl bir pet saldırı sistemi geliştirileceğini adım adım ele alacağız. Bu sistem sayesinde petler artık sadece destek sağlayıcı değil, aynı zamanda aktif savaşan bir varlık haline gelebilir.
Pet Saldırı Sistemi Nedir?
Metin2 oyununda petler genellikle yardımcı karakterlerdir. Ancak bazı özel sunucularda petlerin oyuncularla birlikte savaşması istenir. Bu durumda petlerin bir hedef seçip ona saldırması gerekir. Bu sistem, PvP sunucularında özellikle dikkat çeker çünkü petler, sahibinin yanında saldırı gücüne sahip olarak savaşa katılır. Bu, hem stratejik hem de görsel açıdan oyun deneyimini artırır.
C++ Kaynak Kodları ile Pet Saldırısı Nasıl Uygulanır?[/CHARACTER]
Öncelikle game sunucu kaynak kodlarında pet_manager.cpp veya benzeri dosyalar üzerinde değişiklik yapmanız gerekir. Pet sınıfının içinde bir attack_target fonksiyonu tanımlamalısınız. Bu fonksiyon, petin belirli bir mesafedeki düşmanı algılayıp ona saldırmasını sağlar. FindEnemy gibi bir fonksiyon yardımıyla pet, sahibinin etrafındaki rakip karakterleri tarar ve en yakın olanı hedef alır.
void CPetActor::AttackTarget(LPCHARACTER pkChr)
{
if (!pkChr || !pkChr->IsEnemy(m_pkOwner)) return;
// Petin hedefe saldırması sağlanır
m_pkOwner->SendChatPacket(...);
}
Petlerin Hedef Seçimi ve Saldırı Mantığı
Petlerin saldırı mantığı genellikle AI tabanlıdır. Petin sahibiyle senkronize çalışması önemlidir. Bu nedenle pet_ai.cpp dosyasında, petin ne zaman saldırıya geçeceğini belirleyen bir state machine (durum makinesi) tanımlamalısınız. Örneğin, petin sahibi bir oyuncuya saldırdığında, pet de otomatik olarak aynı hedefe saldırabilir. Bu işlem, OnSight event'leri ile yönetilir.
Pet AI Geliştirme ve Entegrasyon Noktaları
Pet saldırı sisteminin doğru çalışması için AI yapısı iyi tanımlanmalıdır. Petin hedef seçimi, mesafe kontrolü, atk menzili, canavar ve oyuncu hedef alma gibi kriterler kodlanmalıdır. Bu işlemler genellikle C++ dilinde ve server side tarafında yapılır. Client tarafında ise bu olaylar doğru şekilde gösterilmelidir.
Pet AI Örnek Kod Parçası:
if (m_pkOwner->GetVictim() != NULL && m_pkOwner->IsPVPMode()) {
SetTarget(m_pkOwner->GetVictim());
BeginAttack();
}
Pet Saldırı Sisteminin Sunucuya Entegrasyonu
Sunucu tarafında bu sistemi entegre ederken db_core ile veri alışverişini de göz önünde bulundurmalısınız. Petlerin stat, level, damage gibi değerleri veritabanında tutulur. Bu değerler saldırı sırasında kullanılır. Ayrıca auth ve game sunucuları arasında doğru haberleşme sağlanmalıdır.
Kaynak Kod Düzenleme Adımları:
- PetActor sınıfında saldırı fonksiyonları tanımlanır.
- PetManager ile petlerin kontrolü sağlanır.
- AI sistemi ile hedef seçimi yapılır.
- Client tarafında animasyonlar uyumlu hale getirilir.
Sonuç
Metin2 özel sunucularında pet saldırı sistemi eklemek, oyuncuların daha stratejik oyun deneyimi yaşamasını sağlar. C++ bilgisi gerektiren bu sistem, doğru uygulandığında sunucunuzun fark yaratmasını sağlar. Bu yazıda anlatılan adımlar sayesinde petlerin artık sadece destek değil, savaşan bir unsur haline gelmesi mümkündür.
Metin2 Pet Attack Systems: Making Pets Attack
When developing Metin2 private servers, adding attack capabilities to pet systems is a popular feature among developers. In this article, we will go through step-by-step how to implement a pet attack system within C++-based Metin2 server sources. With this system, pets become not only supportive but also active combatants during battles. This significantly enhances both strategic gameplay and visual experience.
What is a Pet Attack System?
In Metin2, pets are usually support characters. However, on certain private servers, it is desired that pets fight alongside players. For this, pets must be able to select targets and attack them. This system is particularly attractive on PvP servers, since pets join the battle with offensive power alongside their owners, enhancing the gaming experience visually and strategically.
How to Implement Pet Attacks with C++ Source Codes?
Firstly, you need to modify files such as pet_manager.cpp within your game server source. You should define an attack_target function inside the pet class. This function allows the pet to detect and attack an enemy within range. Using functions like FindEnemy, the pet scans for rival characters around its owner and selects the nearest one as its target.
void CPetActor::AttackTarget(LPCHARACTER pkChr)
{
if (!pkChr || !pkChr->IsEnemy(m_pkOwner)) return;
// The pet attacks the target
m_pkOwner->SendChatPacket(...);
}
Target Selection and Attack Logic for Pets
The attack logic of pets is generally AI-based. It's important that pets work in sync with their owners. Therefore, you should define a state machine in the pet_ai.cpp file to determine when the pet should begin attacking. For instance, when the owner attacks another player, the pet can automatically target the same opponent. This process is managed through OnSight events.
Developing Pet AI and Integration Points
For the pet attack system to work correctly, the AI structure must be well-defined. Criteria such as target selection, distance control, attack range, and selecting monster or player targets must be coded into the pet. These operations are typically done in C++ on the server side. On the client side, these events must be displayed correctly.
Sample Pet AI Code Snippet:
if (m_pkOwner->GetVictim() != NULL && m_pkOwner->IsPVPMode()) {
SetTarget(m_pkOwner->GetVictim());
BeginAttack();
}
Integrating Pet Attack System into Server
When integrating this system into your server, you must also consider data exchange with db_core. Values such as stats, level, and damage for pets are stored in the database and used during attacks. Proper communication between auth and game servers is essential.
Steps for Source Code Modification:
- Define attack functions in the PetActor class.
- Control pets via PetManager.
- Use AI system for target selection.
- Ensure animations are compatible on the client side.
Conclusion
Adding a pet attack system to Metin2 private servers allows players to have a more strategic gaming experience. Requiring knowledge of C++, this system can make your server stand out when properly implemented. Thanks to the steps described in this article, pets can transform from mere support units into active fighters.
