Para Kutusu Sistemi [C++, Pyhton, Lua]

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba arkadaşlar, bugün sizlerle yeni bir sistem paylaşacağım.

Sistem tarafımca sıfırdan yazıldı, 1 harf bile alıntı yoktur.

Sistem Mantığı: 80010 numaralı bar kutusu içerisine üzerinizde mevcut olan parayı koyabilir ve tekrar geri alabilirsiniz. Ticareti yapılabilir, pazarda satılabilir, depolanabilir ve bunlar yapıldıktan sonra hiçbir şekilde değerini kaybetmez. Hoşunuza giderse eğer para kutusuna şifre seçeneğide ekleyebilirim. Şifre ticaret ve pazar ile farklı hesaplara aktarıldığında bile aktif olacaktır.

Source taraflı işlevlerde oluşabilecek hertürlü hatalar "syserr" dosyasına yazılacak şekilde ayarlandı.

Konu altında ek olarak dosya şeklinde anlatımda mevcut.

Not : Kullanacak arkadaşlar teşekkür eder ve kullanmayacak arkadaşlar ise gereksiz, boş yorum yapmazsa sevinirim.

questlua_item.cpp açılır

ve aratılır ;
Kod:
int item_get_cell(lua_State* L)

kod bloğu bitişine eklenir ;
Kod:
int pc_para_degeri(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr() ; if(ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()) { ch->ChatPacket(CHAT_TYPE_INFO, "Depo / Market / Pazar Pencerelerini kapat."); lua_pushnumber(L, false); return 1; } CQuestManager& q = CQuestManager::instance(); if (q.GetCurrentItem() && lua_isnumber(L,1)) { int turkmmo = 1; long bardegeri = (long) lua_tonumber(L, 1); if (bardegeri >=1 && bardegeri < 2000000000 && ch->GetGold() >= bardegeri) { q.GetCurrentItem()->SetSocket(turkmmo, bardegeri); ch->PointChange(POINT_GOLD, -bardegeri, true); } else { sys_err("Bar sistemi: Para miktari hatali girildi!"); lua_pushnumber(L, false); return 1; } } else { sys_err("Bar sistemi: Item yok veya para degeri girilmedi!"); lua_pushnumber(L, false); return 1; } return 0; }


tekrar aratılır ;
Kod:
{ "get_cell", item_get_cell },

ve altına eklenir ;
Kod:
{ "para_degeri", pc_para_degeri },
root > uitooltip.py açılır

importlara en başa eklenir ;
Kod:
import translate

aratılır ;
Kod:
def __SetItemTitle(self, itemVnum, metinSlot, attrSlot):

ve içerisine eklenir ;
Kod:
if 80010 == itemVnum: if metinSlot[1] == 0: self.AppendTextLine(translate.bar_bos, self.NEGATIVE_COLOR) else: self.AppendTextLine(translate.bar_dolu % localeInfo.NumberToMoneyString(metinSlot[1]), self.SPECIAL_TITLE_COLOR)
eb7cfe3f868a4cfe8731a0db68165ed6.png


root içerisine translate.py isminde bir dosya oluşturup içerisine ekleyin (varsa direk ekleyin)
not : verdiğim linkte hazır şekli mevcut.
Kod:
bar_bos="Mevcut Para : Henüz Girilmedi." bar_dolu="Mevcut Para : %s"


locale_tr > item_list.txt eklenir;
Kod:
80010 ETC icon/item/80006.tga

locale_tr > item_desc.txt eklenilir ;
Kod:
80010 Para Kutusu Bu kutu içerisine para koyabilir ve paranızı tekrar geri alabilirsiniz. Sağ tıklanılarak kullanılır.

locale_tr > item_proto 'ya eklenecek ;
Kod:
<!--AddonType="0"--><Item vnum="80010" name="Para Kutusu" gb2312name="Para Kutusu" type="18" subtype="0" weight="0" size="1" antiflag="74112" flag="8196" wearflag="0" immuneflag="0" gold="0" buy_price="0" limittype0="0" limitvalue0="0" limittype1="0" limitvalue1="0" applytype0="0" applyvalue0="0" applytype1="0" applyvalue1="0" applytype2="0" applyvalue2="0" value0="0" value1="0" value2="0" value3="0" value4="0" value5="0" socket0="0" socket1="0" socket2="0" socket3="0" socket4="0" socket5="0" refine_vnum="0" refine_set="0" magic_pct="0" specular="0" socket_pct="0" />

filezilla quest_functions dosyası içerisine eklenecek ;
Kod:
item.para_degeri

okutulacak lua dosyası ;
Kod:
quest bar_sistemi begin state start begin when 80010.use begin local gold = pc.get_gold() if item.get_socket(1) < 1 then say_title("Merhaba "..pc.get_name().."") say("") -- bosluk say(""..gold.." paranız bulunmakta.") say_reward("Bu kutu içerisine para koymak istiyor musun?") local seciyoruz = select("Evet","Hayır") if seciyoruz == 2 then return elseif seciyoruz == 1 then say_title("Merhaba "..pc.get_name().."") say("") say_reward("Lütfen paketlemek istediğiniz para") say_reward("miktarını giriniz.") local para = tonumber (input()) if para == "" or para == nil or para > 2000000000 or para < 1 then say_title("Merhaba "..pc.get_name().."") say("") say_reward("Geçersiz bir değer girdiniz !") return elseif para > gold then say_title("Merhaba "..pc.get_name().."") say("") say_reward("Malesef, üzerinizde bu kadar para yok!") return else chat("İşlem tamamlandı.") item.para_degeri(para) return end end else say_title("Merhaba "..pc.get_name().."") say("") -- bosluk say_reward(""..item.get_socket(1).." yang parayı çıkarmak istiyor musun ?") local cikariyoruz = select("Evet","Hayır") if cikariyoruz == 2 then return elseif cikariyoruz == 1 then if gold+item.get_socket(1) > 2000000000 then say_title("Merhaba "..pc.get_name().."") say("") -- bosluk say_reward("Envanterine 2 milyar para alamazsın !") return else pc.give_gold(item.get_socket(1)) chat(""..item.get_socket(1).." yang envanterinize çıkartıldı.") pc.remove_item(item.get_vnum(),pc.count_item(item. get_vnum())) return end end end end end end


Navicat > item_proto'ya query olarak eklenecek ( yapamayan bir itemi kopyalayıp 80010 numara olarak değiştirip type kısmını 18 yapsın)
Kod:
INSERT INTO item_proto VALUES ('80010', 0x50617261204B7574757375, 0x50617261204B7574757375, '18', '0', '0', '1', '128', '0', '0', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0');

Daha rahat ve hazır dosyalar için ;



Metin2 Lobby'da Para Kutusu Sistemi: C++, Python ve Lua ile Geliştirilmiş Oyun içi Ekonomi

Metin2 özel sunucularında oyun içi ekonomiyi desteklemek ve oyunculara yeni gelir kaynakları sunmak için Para Kutusu Sistemi, oldukça popüler bir özelliktir. Bu sistem sayesinde oyuncular, belirli görevleri tamamlayarak veya belirli eşyaları kutuya yerleştirerek para kazanabilir. Bu yazıda, C++, Python ve Lua dilleriyle entegre edilmiş bir Para Kutusu Sistemi nasıl geliştirilir, hangi modüller kullanılır, nasıl çalışır ve Metin2 özel sunucu geliştirme dünyasında neden bu kadar önemli olduğu konusuna değineceğiz.

Sistem Nedir?
Para Kutusu Sistemi, oyuncuların belirli eşyaları bir kutuya yerleştirmesiyle başlayan, sunucu tarafında işlenen ve sonuç olarak oyuncuya altın veya başka bir ödül veren bir sistemdir. Bu sistem, hem oyun içi ekonomiyi destekler hem de oyuncular arasında rekabeti artırır.

C++ Tarafında Uygulama
Sunucu tarafında C++ dilinde geliştirilen bu sistem, genellikle game_core veya server_src dosyalarında tanımlanır. Anahtar fonksiyonlar, eşya kontrolü, kutuya yerleştirme ve ödül verme işlemlerini içerir. Örneğin, item_manager.cpp dosyasında yeni bir item tipi tanımlanarak kutuya özel bir ID atanabilir. Aynı zamanda, packet_process fonksiyonu ile oyuncudan gelen kutu açma isteği kontrol edilir ve gerekli yanıt gönderilir.

Python Tarafında GUI ve Sunucu Bağlantısı
Python dili, özellikle PyGUI veya UIScript gibi arayüz kütüphaneleri ile birlikte kullanıldığında, kutu sistemine özel bir arayüz tasarımı yapılmasına olanak tanır. Py Root klasöründe yer alan scriptler, kullanıcı arayüzünü kontrol eder. Ayrıca, DB Core ile entegrasyon sağlayarak kutuya yerleştirilen eşyaların veritabanında saklanmasını sağlar. Python tarafında yazılan bu kodlar, kutu açma animasyonlarını ve grafiksel efektleri yönetir.

Lua ile İstemci Tarafı Kontrolü
Lua scriptleri, istemci tarafında çalışan ve oyun içi interaktif eylemleri yöneten temel dildir. Lua ile yazılmış bir script sayesinde, oyuncu kutuya sağ tıklayıp 'Kutuyu Aç' komutunu seçtiğinde, sunucuya paket gönderilir. Bu işlem sırasında client_src üzerinde yapılan değişiklikler, kutu açma animasyonunu ve ses efektlerini tetikler. Ayrıca, kutudan çıkan ödüllerin ekranda gösterimi Lua ile sağlanır.

Paketleme ve Dağıtım
Bu sistem, pack dosyaları ile sunucuya entegre edilebilir. Martysama gibi geliştirici araçları kullanılarak hem C++ kodları derlenebilir hem de Lua scriptleri test edilebilir. Auth ve Game Server yapılandırması yapıldıktan sonra sistem, tüm sunucularda aktif hale getirilebilir.

Sonuç
Para Kutusu Sistemi, Metin2 özel sunucularında hem oyuncu etkileşimini artıran hem de ekonomik dengeleri destekleyen önemli bir özelliktir. C++, Python ve Lua dillerinin birlikte kullanılması ile güçlü ve esnek bir sistem oluşturulabilir. Bu sistem, Metin2Dev sürecinde önemli bir rol oynar ve sunucu sahiplerine büyük avantajlar sağlar.


Cash Box System on Metin2 Lobby: In-game Economy Enhanced with C++, Python, and Lua

The Cash Box System is a popular feature in Metin2 private servers designed to support in-game economy and provide players with new income sources. Through this system, players can earn gold by completing specific tasks or inserting certain items into the box. In this article, we will discuss how to develop a Cash Box System integrated with C++, Python, and Lua, which modules are used, how it works, and why it is so important in the world of Metin2 private server development.

What is the System?
The Cash Box System begins when players place specific items into a box, followed by processing on the server side, ultimately rewarding the player with gold or other rewards. This system supports in-game economy while increasing competition among players.

Implementation in C++
On the server side, developed in C++, this system is typically defined within game_core or server_src files. Key functions include item checking, placing items in the box, and awarding rewards. For example, a new item type can be defined in item_manager.cpp and assigned a unique ID for the box. Additionally, the packet_process function handles the request from the player to open the box and sends the necessary response.

GUI and Server Connection with Python
Python, especially when combined with UI libraries like PyGUI or UIScript, allows for custom interface designs for the box system. Scripts located in the Py Root folder manage the user interface. Furthermore, integration with DB Core ensures that items placed in the box are stored in the database. The Python code manages opening animations and visual effects of the box.

Client-Side Control with Lua
Lua scripts handle interactive actions on the client side. With a script written in Lua, when a player right-clicks the box and selects 'Open Box', a packet is sent to the server. During this process, modifications made on client_src trigger the box-opening animation and sound effects. Additionally, the display of rewards obtained from the box is handled via Lua.

Packaging and Distribution
This system can be integrated into the server via pack files. Tools such as Martysama allow both C++ code compilation and testing of Lua scripts. After configuring Auth and Game Server, the system can be activated across all servers.

Conclusion
The Cash Box System is an essential feature in Metin2 private servers that increases player engagement and supports economic balance. By combining C++, Python, and Lua, a powerful and flexible system can be created. This system plays a crucial role during the Metin2Dev process and provides significant advantages to server owners.
 

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

Geri
Üst Alt