[C++] Yere Düşen İtemleri Toplarken Gecikmeyi Kapatmak

  • 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,

Yere düşen itemleri toplarken gecikme yapabiliyor.
Örnek vermek gerekirse bir itemi aldınız diğerinin üstüne tıklıyorsunuz 1 kerede almıyor 2. veya 3.de alıyor.
Burada yaptığımız şey bu delay süresini kaldırıp bu gecikmeyi kapatmak.

PythonPlayer.cpp Açılır


Kod:
void CPythonPlayer::SendClickItemPacket(DWORD dwIID)

Kod:
//s_dwNextTCPTime=dwCurTime + 500;

Kod:
void CPythonPlayer::SendClickItemPacket(DWORD dwIID) {     if (IsObserverMode())         return;     static DWORD s_dwNextTCPTime = 0;     DWORD dwCurTime=ELTimer_GetMSec();     if (dwCurTime >= s_dwNextTCPTime)     {         // s_dwNextTCPTime=dwCurTime + 500;         const char * c_szOwnerName;         if (!CPythonItem::Instance().GetOwnership(dwIID, &c_szOwnerName))             return;         if (strlen(c_szOwnerName) > 0)         if (0 != strcmp(c_szOwnerName, GetName()))         {             CItemData * pItemData;             if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData))             {                 Tracenf("CPythonPlayer::SendClickItemPacket(dwIID=%d) : Non-exist item.", dwIID);                 return;             }             if (!IsPartyMemberByName(c_szOwnerName) || pItemData->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE))             {                 PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()"));                 return;             }         }         CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();         rkNetStream.SendItemPickUpPacket(dwIID);     } }

Metin2 Yere Düşen İtemleri Toplarken Gecikmeyi Kapatmak

Metin2 özel sunucularında oyun deneyimini artırmak isteyen geliştiriciler için yere düşen itemleri toplarken oluşan gecikme sorunu oldukça yaygın bir konudur. Bu gecikme, oyuncuların itemleri hızlıca toplayamamasına neden olur ve özellikle PvP savaşları gibi yoğun eylemlerin yaşandığı anlarda büyük bir dezavantaj yaratır. Bu yazıda, C++ tabanlı Metin2 server src üzerinde bu gecikmeyi nasıl kapatabileceğinizi adım adım anlatacağız.

Gecikmenin Neden Kaynağıdır?
Metin2 oyun motorunda, bir item yere düştüğünde belirli bir süre boyunca sahiplenme hakkı oluşur. Bu süre, genellikle 3 saniye olarak ayarlanmıştır ve bu süre zarfında sadece düşüren kişi ya da aynı takımdaki oyuncular itemi alabilir. Bu süre dolmadan başkası itemi alamaz. Bu mekanizma, PvP savaşlarında item çalınmasını engellemek için tasarlanmıştır. Ancak bazı sunucularda bu bekleme süresi istenmeyen gecikmelere yol açar.

C++ Kodu Üzerinde Değişiklik Yaparak Gecikmeyi Kaldırmak
Gecikmeyi kaldırmak için game server programming seviyesinde değişiklik yapmanız gerekir. Bunun için Metin2 server src dosyalarınızda aşağıdaki adımları izleyin:

1. char_item.cpp dosyasını açın.
2. PointChange(POINT_MONEY, nMoney); satırının yakınında bulunan item->SetOwnership(ch, 3 sec) satırını bulun.
3. Bu satırda yer alan 3 sayısını 0 yaparak gecikmeyi tamamen kaldırabilirsiniz.

Alternatif Yöntem: Ownership Süresini Ayarlamak
Gecikmeyi tamamen kapatmak istemiyorsanız, ownership süresini 1 saniye gibi kısa bir değere çekebilirsiniz. Bu, hem hızlı toplama imkanı sunar hem de istenmeyen item çalma riskini azaltır. Örneğin:
item->SetOwnership(ch, 1);

Dikkat Edilmesi Gerekenler
Server src üzerinde yapılan bu tip değişiklikler, derleme işleminden sonra tekrar aktif olur. Ayrıca bu tür değişiklikler PvP sistemlerinde ciddi dengesizliklere yol açabilir. Özellikle core seviyesinde yapılan değişiklikler, oyun içi ekonomi ve rekabet sistemini doğrudan etkiler. Bu yüzden değişikliği yapmadan önce backup almanız önemlidir.

Python Sistemleri ile Entegrasyon
Metin2 özel sunucularında Python GUI ile yazılmış arayüzlerle de bazı kontrol mekanizmaları entegre edilebilir. Ancak bu işlem, sadece client src tarafında görsel değişiklikler sağlar. Asıl gecikme server tarafında kontrol edildiği için, burada yapılan değişiklikler daha etkilidir.

Sonuç
Yere düşen itemleri toplarken oluşan gecikmeyi kapatmak, özellikle Metin2 PvP sunucularında kullanıcı deneyimini ciddi anlamda artırır. Ancak bu değişikliğin, oyun içi dengeler üzerinde etkisi olabileceğini göz önünde bulundurmak önemlidir. C++ seviyesinde yapılan bu tür değişiklikler, source edit sürecinin önemli parçalarındandır ve doğru uygulandığında sunucunuzda kaliteli bir fark yaratabilir.


Disabling Delay When Picking Up Items Dropped on Ground in Metin2

For developers looking to enhance gameplay experience on Metin2 private servers, the issue of delay when picking up items dropped on ground is quite common. This delay prevents players from quickly collecting items and creates significant disadvantages during intense actions such as PvP battles. In this article, we will explain step by step how to disable this delay on Metin2 server src based on C++.

What Causes The Delay?
In the Metin2 game engine, when an item drops to the ground, a specific ownership period is created. This duration is usually set to 3 seconds, during which only the player who dropped the item or teammates can collect it. Until this time passes, no one else can take the item. This mechanism was designed to prevent item theft during PvP fights. However, on some servers, this waiting period causes unwanted delays.

Removing Delay By Modifying C++ Code
To remove the delay, you need to make changes at the game server programming level. Follow these steps within your Metin2 server src files:

1. Open the char_item.cpp file.
2. Find the line containing item->SetOwnership(ch, 3 sec) near the PointChange(POINT_MONEY, nMoney); line.
3. Change the number 3 in that line to 0 to completely remove the delay.

Alternative Method: Adjusting Ownership Time
If you do not wish to completely disable the delay, you can reduce the ownership time to a shorter value like 1 second. This allows for quick collection while reducing the risk of unwanted item theft. For example:
item->SetOwnership(ch, 1);

Important Considerations
These types of modifications made on server src become active after compilation. Additionally, such changes may cause serious imbalances in PvP systems. Modifications made at the core level directly affect in-game economy and competition systems. Therefore, it is important to take a backup before making changes.

Integration with Python Systems
In Metin2 private servers, certain control mechanisms can be integrated using interfaces written in Python GUI. However, this process only provides visual changes on the client src side. Since the actual delay is controlled on the server side, changes made there are more effective.

Conclusion
Disabling the delay when picking up items dropped on the ground significantly enhances user experience especially on Metin2 PvP servers. However, keep in mind that this change may impact in-game balances. Such modifications at the C++ level are important parts of the source edit process and can create a quality difference on your server when applied correctly.
 

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

Benzer konular

Geri
Üst Alt