[C++][LUA] İtem Kilitleme Sistemi

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Bu milleti anlamıyorum ben herkes kendine. Bayadır vardı bende paylaşma fırsatım olmadı aslında paylaşmicaktım ama arkadaş paylaşmış ve sonra kaldırmış. O konuyu kaldırtanın inadına paylaşıyorum.

Açılır: questlua_item.cpp
Aratılır:
Kod:
int item_select_cell(lua_State* L)
Kod bloğunun altına eklenir:

Aratılır:
Altına eklenir:
_________________________________________

Açılır: char_item.cpp
Aratılır:
Kod:
bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
Kod bloğunun içine eklenir:

Aratılır:
Kod:
case USE_CHANGE_ATTRIBUTE :
Altına eklenir (tab ayarlarına dikkat case olduğu için diğer kod bloklarıyla aynı hizada olsun):

Aratılır:
Kod:
bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)

Kod bloğunun içine eklenir (LPITEM item = NULL; den sonra):

_________________________________________

Açılır: exchange.cpp
Aratılır:
Kod:
bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
Kod bloğunun içine eklenir:

_________________________________________

Açılır: input_main.cpp
Aratılır:
Kod:
void CInputMain::SafeboxCheckin(LPCHARACTER ch, const char * c_pData)
Kod bloğunun içine eklenir:

_________________________________________

Açılır: char.cpp
Aratılır:
Kod:
if (pkItem->IsEquipped() == true)
Kod bloğunun altına eklenir:

_________________________________________

Açılır: shop_manager.cpp
Aratılır:
Kod:
if (item->IsEquipped() == true)
Kod bloğunun atlına eklenir:

_________________________________________

Gerekli QUEST yada LUA:
3324incis9655716.png

[C++][LUA] İtem Kilitleme Sistemi

Metin2 özel sunucularında güçlü ve güvenli bir oyun deneyimi sunabilmek adına birçok geliştirici özel sistemler entegre eder. Bu sistemlerden biri de İtem Kilitleme Sistemi'dir. Bu sistem sayesinde oyuncular belirli eşyaları alıp-satamaz veya başka karakterlere geçiremez hale getirilebilir. Bu yazıda C++ tarafında game core üzerinde ve LUA tarafında client üzerinde nasıl bir item kilitleme sistemi geliştirilebileceğini adım adım inceleyeceğiz.

İtem Kilitleme Sistemi Nedir?
İtem kilitlema, oyuncuların belirli eşyaları trade, drop veya storage gibi eylemlerden korumayı amaçlayan bir özelliktir. Özellikle PvP sunucularda bu tür eşyaların değerli olduğu durumlarda bu sistem büyük önem taşır. Oyuncu, eşyasının güvenliğini bu yöntemle artırabilir.

Sistem Mimarisi
Bu sistemin çalışabilmesi için hem server-side (C++) hem de client-side (LUA) üzerinde değişiklikler yapılması gerekir. Sunucu tarafında eşyanın durumu veritabanında saklanmalı ve istemci tarafında da kullanıcıya bu durum net şekilde gösterilmelidir.

C++ Tarafında Uygulama Adımları
1. Database: Öncelikle item_proto tablosuna yeni bir alan eklenmelidir. Örneğin locked adında bir alan tanımlanabilir. Bu alan 0 ise eşya serbest, 1 ise kilitlidir.
2. Game Core: char_item.cpp, input_main.cpp gibi dosyalarda trade, drop gibi işlemler yapılırken bu locked değeri kontrol edilmelidir. Eğer eşya kilitliyse işlem iptal edilmelidir.
3. Packet Handling: Yeni bir paket tanımlanarak client'a eşyanın kilitli olduğunu bildirmek için kullanılabilir. Bu sayede kullanıcı arayüzünde de buna göre bir simge veya renk gösterilebilir.

LUA Tarafında Uygulama Adımları
1. UI Script: Eşya listesinde kilitli eşyalar farklı bir renkte ya da sembolle gösterilebilir. Bunun için uiscript dosyalarında değişiklik yapılmalıdır.
2. Tooltip: Kilitli bir eşyaya fareyle gelindiğinde 'Bu eşya kilitlidir' gibi bir mesaj gösterilebilir.
3. İşlem Engelleme: Trade, drop, storage gibi işlemler kullanıcı tarafından tetiklenirken, eşya kilitliyse bu eylemler engellenmelidir.

Avantajları
- Oyuncuların değerli eşyalarını güvende hissetmelerini sağlar.
- Hatalı trade/drop gibi işlemlerden kaynaklı eşya kayıplarını önler.
- PvP sunucularda eşya güvenliği açısından kritik rol oynar.

Zorluklar ve Çözümler
- DB Core üzerinde doğru sorgular yazmak önemlidir.
- Client tarafında LUA scriptlerinde hata ayıklama süreci uzun olabilir.
- Performans etkisi olmaması için sorgular optimize edilmelidir.

Sonuç
İtem kilitleme sistemi, Metin2 özel sunucularında kullanıcı deneyimini artıran ve sunucu güvenliğini güçlendiren önemli bir özelliktir. C++ ve LUA birlikte çalışması ile kolayca entegre edilebilir. Bu sistem sayesinde oyuncular eşyalarına daha fazla değer verebilir ve sunucu yöneticileri de güvenli bir oyun ortamı sunabilirler.


[C++][LUA] Item Lock System

In Metin2 private servers, many developers implement custom systems to provide a strong and secure gaming experience. One such system is the Item Lock System. This system allows players to prevent certain items from being traded, dropped, or transferred to other characters. In this article, we will examine step by step how to develop an item lock system on both the C++ side (game core) and the LUA side (client).

What is an Item Lock System?
Item locking is a feature designed to protect specific items from actions like trading, dropping, or storing. This becomes particularly important on PvP servers where valuable items are common. Players can enhance the security of their items through this method.

System Architecture
To make this system work, modifications must be made on both the server-side (C++) and the client-side (LUA). The item status should be stored in the database, and the user interface should clearly reflect this status to the player.

Implementation Steps in C++
1. Database: Add a new field to the item_proto table, for example, locked. If the value is 0, the item is free; if 1, it is locked.
2. Game Core: In files such as char_item.cpp and input_main.cpp, check the locked status before allowing trade or drop operations. If the item is locked, cancel the action.
3. Packet Handling: Define a new packet to notify the client that the item is locked. This way, a different icon or color can be shown in the UI.

Implementation Steps in LUA
1. UI Script: Locked items can be displayed with a different color or symbol in the inventory. Modifications in uiscript files are needed for this purpose.
2. Tooltip: When hovering over a locked item, a message like 'This item is locked' can be displayed.
3. Action Blocking: Actions such as trade, drop, and store should be blocked if the item is locked.

Advantages
- Increases the sense of security for players regarding their valuable items.
- Prevents item losses due to accidental trade/drop actions.
- Plays a critical role in securing items on PvP servers.

Challenges and Solutions
- Writing correct queries on the DB Core is essential.
- Debugging LUA scripts on the client side may take longer.
- Queries should be optimized to avoid performance impact.

Conclusion
The Item Lock System is an important feature in Metin2 private servers that enhances user experience and strengthens server security. It can be easily integrated through cooperation between C++ and LUA. With this system, players can place higher value on their items, and server administrators can provide a safer gaming environment.
 

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

Geri
Üst Alt