[C++] 5 Envanter Yapımı Game / Client

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Server Klasöründeki common klasörü açılır içerisindeki length.h açılır ve aratılır

Kod:
INVENTORY_MAX_NUM        = 90,

Kod:
INVENTORY_MAX_NUM        = 225,

Bu Şekilde Değiştirilir Ve length.h Kapatılır.

Şimdi Game / src İçindeki exchange.cpp açılır ve aratılır.

Kod:
static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 2); // inven page 1     static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 2); // inven page 2

Altına Eklenir

Kod:
static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 2); // inven page 3     static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 2); // inven page 3     static CGrid s_grid5(5, INVENTORY_MAX_NUM/5 / 2); // inven page 3

exchange.cpp içerisinde tekrar aratılır :

Kod:
s_grid1.Clear();     s_grid2.Clear();

Altına Eklenir


Kod:
s_grid3.Clear();     s_grid4.Clear();     s_grid5.Clear();

Tekrar exchange.cpp de aratılır

Kod:
for (i = 0; i < INVENTORY_MAX_NUM / 2; ++i)

Ve Kod Bloğunu Tamamen Şu Şekilde Değiştiriniz

Kod:
for (i = 0; i < INVENTORY_MAX_NUM / 5; ++i)     {         if (!(item = victim->GetInventoryItem(i)))             continue;           s_grid1.Put(i, 1, item->GetSize());     }     for (i = INVENTORY_MAX_NUM / 5; i < INVENTORY_MAX_NUM; ++i)     {         if (!(item = victim->GetInventoryItem(i)))             continue;           s_grid2.Put(i - INVENTORY_MAX_NUM / 5, 1, item->GetSize());     }       for (i = INVENTORY_MAX_NUM / 5; i < INVENTORY_MAX_NUM; ++i)     {         if (!(item = victim->GetInventoryItem(i)))             continue;           s_grid3.Put(i - INVENTORY_MAX_NUM / 5, 1, item->GetSize());     }     for (i = INVENTORY_MAX_NUM / 5; i < INVENTORY_MAX_NUM; ++i)     {         if (!(item = victim->GetInventoryItem(i)))             continue;           s_grid4.Put(i - INVENTORY_MAX_NUM / 5, 1, item->GetSize());     }     for (i = INVENTORY_MAX_NUM / 5; i < INVENTORY_MAX_NUM; ++i)     {         if (!(item = victim->GetInventoryItem(i)))             continue;           s_grid5.Put(i - INVENTORY_MAX_NUM / 5, 1, item->GetSize());     }


Client Kısmında Client/Userinterface içerisindeki GameType.h açılır ve aratılır

Kod:
const DWORD c_Inventory_Page_Count = 2;

Bu Şekilde Değiştirilir

Kod:
const DWORD c_Inventory_Page_Count = 5;

Taşma Sorununu Engelleyen Kodlar:

char_item.cpp açılır ve ne kadar
Kod:
INVENTORY_MAX_NUM / 2

Varsa Aratılır Hepsi Şu Şekilde Değiştirilir

Kod:
INVENTORY_MAX_NUM / 5

Python Eklentileri Hazır .py ler

uinventory.py root içerisine inventorywindow.py locale_tr içerisine atılır

Link:

Virüs Taraması:


İyi Forumlar.

Kanıt:
dnPDvp.jpg

C++ ile Metin2'de Envanter Sistemi Geliştirme


Metin2 özel sunucularında envanter sistemi, oyuncuların eşyalarını düzenlemeleri ve taşıdıkları itemleri kontrol edebilmeleri açısından oldukça kritiktir. Bu sistem, hem client tarafında hem de server tarafında senkronize çalışmalıdır. Bu yazıda, C++ tabanlı 5 farklı envanter yapımı incelenecek ve nasıl daha iyi bir kullanıcı deneyimi sunulabileceği ele alınacaktır.

1. Temel Envanter Yapısı
Temel envanter yapısı, game/core dosyalarında tanımlanır. inventory.cpp ve inventory.h gibi dosyalar üzerinden envanter slotları tanımlanır. Her slot, bir item ID, miktar ve durum bilgisi içerir. Bu yapı, client/src/uigame.py dosyasında UIScript yardımıyla ekrana yansıtılır.

2. GUI Tabanlı Envanter
Python GUI sistemleri (PyRoot) kullanılarak envanter arayüzü özelleştirilebilir. uiscript dosyalarında tanımlanan butonlar, slotlar ve görseller, py dosyalarıyla etkileşime girer. Bu sayede kullanıcı dostu ve dinamik bir arayüz oluşturulabilir.

3. Sunucu Tarafında Eşya Taşıma Sistemi
Auth ve Game sunucularında, eşya taşıma işlemleri packet sistemleriyle yönetilir. C++ üzerinden tanımlanan bu paketler, client tarafından gönderilen envanter isteklerini karşılar. Paket yapısı, güvenlik açısından hash tabanlı doğrulama içerir.

4. Veritabanı Entegrasyonu
DB Core üzerinde, envanter verileri item_slot tablosunda tutulur. Her karakterin envanteri, karakter ID'siyle ilişkilendirilerek saklanır. SQL sorguları ile eşyalar silinir, güncellenir veya aktarılır. Bu sistem, Metin2 özel sunucularında PvP ve PvE sistemlerinde önemli rol oynar.

5. Gelişmiş Özellikler ve Optimizasyon
MartySama gibi geliştiricilerin katkılarıyla, envanter sistemlerinde C++ seviyesinde optimizasyonlar yapılabiliyor. Örneğin, eşya taşınırken checksum algoritmaları ile veri bütünlüğü sağlanabilir. Ayrıca, client/src tarafında drag&drop işlemleri için özel fonksiyonlar yazılabilir.

Sonuç olarak, Metin2[/BR] özel sunucularında envanter sistemleri, C++ tabanlı kodlama ile güçlü ve stabil hale getirilebilir. Metin2Lobby olarak, bu tür sistemlerin geliştirilmesi için kaynak kodlar, derleme araçları ve compile rehberleri sunuyoruz.


Developing Inventory Systems in Metin2 with C++


Metin2 private servers require a robust inventory system that allows players to manage items and control their equipment. This system must work synchronously on both client and server sides. In this article, we will examine 5 different inventory implementations based on C++ and discuss how to improve user experience.

1. Basic Inventory Structure
The basic inventory structure is defined within game/core files. Files like inventory.cpp and inventory.h define inventory slots. Each slot holds an item ID, quantity, and status. This structure is displayed on screen via UIScript in the client/src/uigame.py file.

2. GUI-Based Inventory
Using Python GUI systems (PyRoot), the inventory interface can be customized. Buttons, slots, and graphics defined in uiscript files interact with py files, allowing for a user-friendly and dynamic interface.

3. Server-Side Item Movement System
Item movement operations are managed through packet systems on Auth and Game servers. These packets defined in C++ handle inventory requests sent by the client. The packet structure includes hash-based validation for security purposes.

4. Database Integration
Within the DB Core, inventory data is stored in the item_slot table. Each character's inventory is associated with the character ID. SQL queries are used to delete, update, or transfer items. This system plays a key role in PvP and PvE mechanics of Metin2 private servers.

5. Advanced Features and Optimization
Thanks to contributions from developers like MartySama, optimizations at the C++ level are possible in inventory systems. For instance, checksum algorithms can ensure data integrity during item movements. Additionally, custom functions for drag&drop operations can be written on the client/src side.

In conclusion, inventory systems in Metin2 private servers can be made powerful and stable with C++-based coding. Metin2Lobby provides source codes, compilation tools, and compile guides to support such system developments.
 

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

Benzer konular

Geri
Üst Alt