Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

TL Bakiye Sistemi

  • Konuyu başlatan Konuyu başlatan lTJA
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 394
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

lTJA

Level 3
Banlı
TM Üye
Katılım
2 Eyl 2023
Konular
28
Mesajlar
108
Online süresi
6d 22h
Reaksiyon Skoru
85
Altın Konu
0
Başarım Puanı
59
MmoLira
965
DevLira
15
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Mıgo Sen artık yangın yanında bir türk lirası mı olsun istiyorsun olsun kardaş birde bunu gm eklesin oyuncuda bunu kendine hesabına çeksin mi istiyorsun al bakalım ozaman

Game Server (C++) — TL Ekleme
C++:
// character.h içinde

class CHARACTER
{
    // Mevcutlar...
private:
    DWORD m_dwTL;  // Yeni para birimi TL bakiyesi

public:
    DWORD GetTL() const { return m_dwTL; }
    void SetTL(DWORD tl) { m_dwTL = tl; }
    void AddTL(DWORD tl) { m_dwTL += tl; }
    bool SubTL(DWORD tl)
    {
        if (m_dwTL < tl)
            return false;
        m_dwTL -= tl;
        return true;
    }
};



MIGO Karakter veritabanı güncelle​


Veritabanında karakter tablosuna tl isimli yeni bir kolon diğer değişle tablo ekle . Sunucu açılırken bu değer yüklenmeli ve kapanırken kaydedilmeli ha.


TL bakiye görüntüleme komutu​

C++:
ACMD(do_tlbakiyesi)
{
    if (!ch)
        return;

    ch->ChatPacket(CHAT_TYPE_INFO, "TL bakiyeniz: %u", ch->GetTL());
}

TL gönderme komutu

C++:
ACMD(do_gm_tlgonder)
{
    if (!ch)
        return;

    // Sadece GM yetkisi olanlar kullanabilir
    if (!ch->IsGM())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Bu komutu kullanmak için yetkiniz yok.");
        return;
    }

    char target_name[CHARACTER_NAME_MAX_LEN + 1];
    int amount = 0;

    if (sscanf(argument, "%s %d", target_name, &amount) != 2)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /gmtlgonder <oyuncu_ismi> <miktar>");
        return;
    }

    if (amount <= 0)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Geçersiz miktar.");
        return;
    }

    LPCHARACTER target_char = CHARACTER_MANAGER::instance().FindPC(target_name);
    if (!target_char)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
        return;
    }

    target_char->AddTL(amount);

    ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusuna %d TL gönderildi.", target_char->GetName(), amount);
    target_char->ChatPacket(CHAT_TYPE_INFO, "%s tarafından %d TL aldınız.", ch->GetName(), amount);

    sys_log(0, "GM_TL_TRANSFER: %s sent %d TL to %s", ch->GetName(), amount, target_char->GetName());
}


Komut Kayıt (komut kayıt nedir soranlara hani gm komutları olan bölüm​

C++:
void RegisterCommands()
{
    command_info.insert(std::make_pair("gmtlgonder", do_gm_tlgonder));
}

varya kardaş oraya ekle)​



Mıgo Pack ve Client Entegrasyonu


character.py dosyasına TL alanı ekleme

Python:
class Character:
    def __init__(self):
        self.tl = 0  # Yeni para birimi TL

    def load_from_db(self, data):
        # Örnek olarak veritabanından gelen veri
        self.tl = data.get('tl', 0)

    def save_to_db(self):
        # Veritabanına kaydetme işlemi
        return {'tl': self.tl}

    def add_tl(self, amount):
        self.tl += amount

    def sub_tl(self, amount):
        if self.tl < amount:
            return False
        self.tl -= amount
        return True


Pack — TL Bilgisini Client’a Gönderme​


Metin2 pack içinde client’a veri gönderme genellikle packet yapısı ile olur. Yeni bir packet alanı açıp TL bilgisini göndermen gerekir bremın .

Python packet fonksiyonu

Python:
def send_tl_update(character):
    from net import send_packet

    # Basit örnek, paket yapısına göre düzenle
    packet = {
        'header': 'TL_UPDATE',
        'tl': character.tl
    }
    send_packet(character.player_id, packet)



Client (C#) — TL Bilgisini Alma ve Arayüzde Gösterme

Client Veri Yapısına TL alanı ekle

C#:
public class PlayerData
{
    public int TL { get; set; } = 0;

    // Diğer özellikler...
}



Packet işleyici içinde TL paketini yakalama

C#:
public void OnPacketReceived(Packet packet)
{
    if (packet.Header == "TL_UPDATE")
    {
        int tlAmount = packet.ReadInt();
        PlayerData.TL = tlAmount;

        // TL bilgisini UI'da güncelle
        UIManager.Instance.UpdateTLDisplay(tlAmount);
    }
}


UI’da TL Gösterimi
C#:
public class UIManager
{
    public static UIManager Instance = new UIManager();

    public void UpdateTLDisplay(int tlAmount)
    {
        // Örnek: TL miktarını oyun arayüzündeki ilgili label/textbox'a yaz
        tlLabel.Text = $"TL: {tlAmount}";
    }

    private Label tlLabel; // Bu label arayüzde oluşturulmalı
}



mıgo kanka ui tasarımıda mı olsun istiyorsun al ozaman


TL Gösterim Label’ı Oluşturma yani hele bir tl nin şeklini halini görelim


C#:
using System;
using System.Windows.Forms;

public class TLForm : Form
{
    private Label tlLabel;

    public TLForm()
    {
        this.Text = "Oyun Parası: TL";

        tlLabel = new Label();
        tlLabel.Text = "TL: 0";
        tlLabel.Font = new System.Drawing.Font("Arial", 14);
        tlLabel.AutoSize = true;
        tlLabel.Location = new System.Drawing.Point(10, 10);

        this.Controls.Add(tlLabel);

        this.Width = 200;
        this.Height = 60;
    }

    // TL miktarını güncelleyen metot
    public void UpdateTL(int amount)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new Action<int>(UpdateTL), amount);
        }
        else
        {
            tlLabel.Text = $"TL: {amount}";
        }
    }
}


Ana Client UI’ya Entegre Etme yani client src ye ha biliyorsunuzdur ya okadar da değil

C#:
// Örnek: Oyun başlarken veya karakter girişinde
TLForm tlForm = new TLForm();
tlForm.Show();

Packet Geldiğinde UI Güncelleme

C#:
public void OnTLUpdatePacketReceived(int newAmount)
{
    tlForm.UpdateTL(newAmount);
}


hee bu kadar şimdi yukardaki kodu ekledin mesela gittin benim oyuncular arası yang paylaşımi sisteeminide oyuna entegre ettin. ordan feyz olarak yang fonksiyonu veya değişkeni yerine yeni para birimi olan tl yi eklediğini düşünsene oyun içinde türk lirası dönüyor mıgo o konu nerde diye sorma Aha çünkü buraya bastığında konuyu göreceksin zaten


 
Paylaşım için teşekkürler :)
 
Merhaba,

Konudaki kodlar bir anlam ifade etmiyor. Bu sebepten dolayı kapatıldı.

Çalıştığına dair kanıt'ı rapor olarak iletirseniz konunuz tekrar açılacaktır.

Metin2 client'ı C++ projesi, c# değil, neden c# kodu verdiğinizi anlayamadım.

Teşekkürler,
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst