Güvenli Alanlarda Oyuncuların İçerisinden Geçme C++ / ClientSource

  • 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 arkadaşlar kendi serverim için yazmış olduğum güvenli alanda oyuncuların içerisinden geçmeyi sizlere paylaşıyorum buyrun;

Kod:
#include "../UserInterface/PythonBackground.h"

Daha Sonra;

Kod:
#define ENABLE_GUVENLI_ALAN #ifdef ENABLE_GUVENLI_ALAN     TPixelPosition pozisyon;     GetPixelPosition(&pozisyon);     if (CPythonBackground::Instance().isAttrOn(pozisyon.x, -pozisyon.y, CTerrainImpl::ATTRIBUTE_BANPK)){         if (rVictim.IsPC()){             return FALSE;         }     } #endif

Güvenli Alanlarda Oyuncuların İçerisinden Geçme Sistemi: Metin2 ClientSource ile C++ Entegrasyonu

Metin2 özel sunucularında oyun deneyimini artırmak, aynı zamanda da oyuncular için daha dengeli ve adil bir sistem oluşturmak oldukça kritiktir. Bu doğrultuda, özellikle PVP (Player versus Player) sunucularda dikkat edilmesi gereken konulardan birisi de 'güvenli alanlar'da oyuncuların birbirlerinin içinden geçip geçemeyeceği konusudur. Bu yazıda, ClientSource üzerinden C++ kodları ile nasıl güvenli alanlarda geçiş engellenebileceğini ele alacağız.

Güvenli Alan Nedir?
Metin2'de güvenli alanlar, oyuncuların saldırı yapamadığı, sandıkların açılamadığı ve PvP'nin devre dışı bırakıldığı bölgelerdir. Genellikle kasaba veya belirli NPC'lerin bulunduğu alanlardır. Bu alanlarda oyuncuların birbirlerinin içinden geçmeleri, bazı istismarlara neden olabilir. Örneğin bir oyuncu, sandık çalmak için diğer oyuncunun arkasında bekleme gibi durumlar meydana gelebilir. Bu tür sorunları önlemek için güvenli alanlarda karakterlerin birbirlerinin içinden geçmemesi sağlanmalıdır.

C++ Tarafında Yapılan Değişiklikler
Bu işlem için genellikle game server üzerinde değişiklikler yapılır. ClientSource üzerinden doğrudan müdahale edilse de temel kontrol server tarafında olduğundan, C++ kodları üzerinde değişiklik yapılması gerekir. char.cpp veya benzeri dosyalarda bulunan CanMoveTo fonksiyonu üzerinden, karakterin belirli koordinatlarda hareket edip edemeyeceği kontrol edilir. Burada güvenlik bölgesi kontrolü yapıldıktan sonra, aynı koordinatlarda başka bir oyuncu varsa geçiş engellenebilir.

Öncelikle, ilgili fonksiyon içinde şu şekilde bir kontrol eklenebilir:

Kod:
[COLOR=#9365b8]bool CHARACTER::CanMoveTo(int x, int y)[/COLOR][/BR][/BR]{[BR][/BR][COLOR=#9365b8]// Güvenli alan kontrolü[/COLOR][/BR][/BR][COLOR=#9365b8]if (IsInSafeArea(x, y)) {[/COLOR][/BR][/BR][COLOR=#9365b8]// Aynı koordinatlarda başka bir CHARACTER varsa geçişi engelle[/COLOR][/BR][/BR][COLOR=#9365b8]if (FindCharacterAtPosition(x, y)) {[/COLOR][/BR][/BR][COLOR=#9365b8]return false;[/COLOR][/BR][/BR][COLOR=#9365b8]}[/COLOR][/BR][/BR][COLOR=#9365b8]}[/COLOR][/BR][/BR][COLOR=#9365b8]return true;[/COLOR][/BR][/BR]}


Dikkat Edilmesi Gerekenler
Bu tür bir entegrasyon sırasında bazı önemli detaylara dikkat etmek gerekir. Öncelikle, performans etkisi oluşmaması adına, karakter pozisyon kontrolü optimize edilmelidir. Aksi takdirde sunucu üzerinde ciddi gecikmelere neden olabilir. Ayrıca, bu sistemin hem game server hem de client tarafında senkron çalışması gerekir. Aksi halde, kullanıcılar geçişin engellenmediği bazı durumlarda hata yaşayabilir.

Sonuç
Güvenli alanlarda oyuncuların birbirlerinin içinden geçmemesini sağlamak, Metin2 özel sunucularında kullanıcı deneyimini ciddi anlamda iyileştirebilir. C++ tabanlı geliştirme ile bu tür sistemlerin entegrasyonu oldukça kolaydır. Ancak dikkatli kodlama ve test süreçleri, sistemin sağlıklı çalışması için kritik öneme sahiptir. Bu tip geliştirmeler, Metin2 geliştirme dünyasında fark yaratmak isteyen geliştiriciler için önemli bir adımdır.

Kaynaklar:
Metin2Lobby - Metin2 Development Resources


Passing Through Players in Safe Areas: C++/ClientSource Integration for Metin2

Enhancing the gaming experience in Metin2 private servers and creating a balanced, fair environment for players is highly critical. In this context, one of the important aspects, especially on PVP (Player versus Player) servers, is whether players can pass through each other inside safe zones. In this article, we will examine how to prevent players from passing through each other within safe areas by using C++ codes integrated with ClientSource.

What Are Safe Zones?
In Metin2, safe zones are areas where players cannot attack, chests cannot be opened, and PvP is disabled. These are usually town areas or specific regions around certain NPCs. Allowing players to walk through each other in these areas may lead to certain abuses. For example, a player might hide behind another player to steal from a chest. To prevent such issues, players should not be allowed to pass through each other in safe zones.

Modifications in C++
Usually, modifications for this process are made on the game server. Although direct intervention via ClientSource is possible, since the main control occurs on the server side, changes must be implemented in C++ code. In files like char.cpp, the CanMoveTo function checks whether a character can move to specific coordinates. After checking for a secure area, movement can be blocked if another player exists at the same coordinates.

Firstly, a check like the following can be added to the relevant function:

Kod:
[COLOR=#9365b8]bool CHARACTER::CanMoveTo(int x, int y)[/COLOR][/BR][/BR]{[BR][/BR][COLOR=#9365b8]// Safe zone check[/COLOR][/BR][/BR][COLOR=#9365b8]if (IsInSafeArea(x, y)) {[/COLOR][/BR][/BR][COLOR=#9365b8]// Block passage if another CHARACTER exists at the same position[/COLOR][/BR][/BR][COLOR=#9365b8]if (FindCharacterAtPosition(x, y)) {[/COLOR][/BR][/BR][COLOR=#9365b8]return false;[/COLOR][/BR][/BR][COLOR=#9365b8]}[/COLOR][/BR][/BR][COLOR=#9365b8]}[/COLOR][/BR][/BR][COLOR=#9365b8]return true;[/COLOR][/BR][/BR]}


Important Considerations
When implementing such integration, several important details must be considered. First, character position checks must be optimized to avoid performance impacts. Otherwise, significant delays may occur on the server. Additionally, this system must work synchronously on both the game server and the client. Otherwise, users may encounter errors in cases where passage is not blocked as expected.

Conclusion
Preventing players from walking through each other in safe zones can significantly improve the user experience on Metin2 private servers. Integration of such systems via C++-based development is quite straightforward. However, careful coding and testing processes are critical for the system to function properly. Such improvements represent an important step for developers aiming to make a difference in the world of Metin2 development.

Resources:
Metin2Lobby - Metin2 Development Resources
 

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

Geri
Üst Alt