Selam,
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
İyi kullanımlar dilerim.
Metin2 Lobby - Metin2 Client-Side ve Server-Side Arasında Veri Aktarımı: Index'i Client'tan Çekme
Metin2 özel sunucuları geliştirmeye çalışan geliştiriciler için client-side (istemci tarafı) ile server-side (sunucu tarafı) arasında veri alışverişi yapabilmek büyük önem taşır. Bu veri alışverişinin en kritik noktalarından birisi, client üzerinde tanımlı olan bir index'in server'a aktarılmasıdır. Bu yazıda, [C++] tabanlı Metin2 server sistemlerinde nasıl index'i client üzerinden alınacağını detaylıca ele alacağız.
Neden Index Almamız Gerekir?
Birçok Metin2 özel sunucusunda, oyuncuların eşya listesi, karakter bilgileri, özel menü sistemleri gibi alanlarda client tarafından belirlenen index değerleri kullanılır. Bu indexler genellikle eşyanın ID'si, slot numarası veya özel bir sistemdeki tanımlayıcı olabilir. Server tarafında bu indexleri kullanabilmek için client'tan bu değerleri almak gerekir.
Client Tarafında Index Tanımı
Öncelikle client tarafında index'in nasıl tanımlandığına bakalım. Uiscript (Python GUI) üzerinde oluşturulan arayüzlerde, her buton, slot ya da nesne bir index ile tanımlanır. Örneğin bir envanterdeki eşyanın slot numarası bir index olabilir. Bu index, client üzerinden server'a gönderilmeden önce özel bir paket (packet) yoluyla taşınmalıdır.
Server Tarafında Paket Tanımı ve Index Yakalama
Server tarafında, client tarafından gönderilen bu index değerini yakalayabilmek için öncelikle client'tan gelen özel bir paket tanımı yapılması gerekir. Bu işlem genellikle game/src/char/char.cpp veya benzeri dosyalarda tanımlanır. Örnek olarak bir butona tıklandığında client tarafından gönderilen index verisi şu şekilde alınabilir:
Kod:
void CHARACTER::OnSpecialIndexPacket(BYTE subheader, const char* data, int len)[BR][/BR]{[BR][/BR] TPacketCGSpecialIndex * p = (TPacketCGSpecialIndex*)data;[BR][/BR] int index = p->index;[BR][/BR][BR][/BR] // Burada index üzerinden işlemler yapılabilir[BR][/BR] sys_log(0, 'Special index received: %d', index);[BR][/BR]}
Python Client Tarafında Paket Gönderimi
Python tarafında, kullanıcı bir eylem gerçekleştirdiğinde (örneğin bir butona tıkladığında), bu index değeri bir paket halinde server'a gönderilir. Bunun için örneğin net.SendChatPacket veya özel bir SendPacket fonksiyonu kullanılabilir:
Kod:
def OnSpecialButton(self):[BR][/BR] index = self.GetSelectedIndex() # Seçilen slot/index[BR][/BR] net.SendChatPacket('special_index ' + str(index))
Sunucu-Side Paket Tanımı[/COORD]
Server-side'da bu paketi tanımlamak için common/packet.h dosyasında ilgili yapıyı tanımlamalısınız:
Kod:
typedef struct packet_cg_special_index[BR][/BR]{[BR][/BR] DWORD header;[BR][/BR] BYTE subheader;[BR][/BR] int index;[BR][/BR]} TPacketCGSpecialIndex;
Paketin Sunucuya Aktarılması ve Güvenlik Önlemleri
Index değerlerinin doğruluğunu kontrol etmek çok önemlidir. Çünkü client tarafı kolayca manipüle edilebilir. Bu yüzden alınan index değerlerinin geçerli aralıklarda olup olmadığı kontrol edilmelidir. Örneğin envanter slotları 0-44 arasında olmalıdır. Aksi takdirde hata verip işlem durdurulmalıdır.
Sonuç
Client'tan index çekmek, Metin2 özel sunucu geliştiricileri için temel bir işlemdir. Doğru tanımlanmış paketler, güvenli veri aktarımı ve uygun sunucu kontrolleri ile bu işlem oldukça verimli hale getirilebilir. Bu sayede hem kullanıcı dostu arayüzler hem de güçlü backend sistemler geliştirilebilir. Daha fazla C++ sistem ve script için Metin2Lobby sitesini takip edin.
Metin2 Lobby - Data Transfer Between Metin2 Client-Side and Server-Side: Pulling Index from Client
For developers working on Metin2 private servers, exchanging data between client-side and server-side is crucial. One of the most critical points in this exchange is transferring an index defined on the client to the server. In this article, we will explain in detail how to retrieve an index from the client within [C++] -based Metin2 server systems.
Why Should We Retrieve Index?
In many Metin2 private servers, index values defined on the client side are used for areas like player item lists, character information, custom menu systems, etc. These indexes often represent an item's ID, slot number, or identifier within a custom system. To utilize these indexes on the server-side, they must be retrieved from the client.
Defining Index on the Client Side
Firstly, let's examine how an index is defined on the client side. Within UI scripts (Python GUI), each button, slot, or object in the interface is identified by an index. For example, the slot number of an item in the inventory can be an index. Before this index is sent to the server, it must be carried via a custom packet.
Packet Definition and Index Retrieval on Server Side
To capture the index value sent from the client on the server-side, a specific packet definition from the client must first be created. This is usually done in files such as game/src/char/char.cpp. As an example, here's how the index data sent by the client when a button is clicked can be retrieved:
Kod:
void CHARACTER::OnSpecialIndexPacket(BYTE subheader, const char* data, int len)[BR][/BR]{[BR][/BR] TPacketCGSpecialIndex * p = (TPacketCGSpecialIndex*)data;[BR][/BR] int index = p->index;[BR][/BR][BR][/BR] // Operations can be performed based on the index here[BR][/BR] sys_log(0, 'Special index received: %d', index);[BR][/BR]}
Sending Packet from Python Client Side
On the Python side, when a user performs an action (e.g., clicking a button), this index value is sent to the server in packet form. You can use functions like net.SendChatPacket or a custom SendPacket function:
Kod:
def OnSpecialButton(self):[BR][/BR] index = self.GetSelectedIndex() # Selected slot/index[BR][/BR] net.SendChatPacket('special_index ' + str(index))
Server-Side Packet Definition
To define this packet on the server-side, you should declare the corresponding structure in the common/packet.h file:
Kod:
typedef struct packet_cg_special_index[BR][/BR]{[BR][/BR] DWORD header;[BR][/BR] BYTE subheader;[BR][/BR] int index;[BR][/BR]} TPacketCGSpecialIndex;
Transferring Packet to Server and Security Measures
It is very important to verify the correctness of index values. Since the client side can easily be manipulated, the validity of the received index values must be checked. For example, inventory slots should range from 0 to 44. Otherwise, an error should occur and the process halted.
Conclusion
Retrieving an index from the client is a fundamental operation for Metin2 private server developers. With properly defined packets, secure data transfer, and appropriate server checks, this process can be made highly efficient. This enables both user-friendly interfaces and robust backend systems. For more C++ systems and scripts, follow the Metin2Lobby website.
