Hikayeler

Reklam vermek için turkmmo@gmail.com

Billing Sistemi Detaylı Kaldırma Rehberi

MaviAy44

Emre Kırıcı
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Yönetici
Turnuva
Yarışma
Katılım
16 Tem 2019
Konular
714
Mesajlar
3,540
Online süresi
6ay 20g
Reaksiyon Skoru
2,107
Altın Konu
34
Başarım Puanı
309
TM Yaşı
6 Yıl 9 Ay 9 Gün
MmoLira
26,224
DevLira
122

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!


Gereksiz Yükten Kurtulun: Billing Sistemini Kaldırma Rehberi
Login sürecini hızlandırın, veritabanını rahatlatın ve ölü kodlardan kurtulun.



Nedir ve Neden Kaldırıyoruz?

Metin2’nin orijinal altyapısında bulunan Billing Sistemi, aslında oyunculara süre bazlı oyun erişimi satmak (Time-to-Play) için tasarlanmış eski bir mekanizmadır. Tıpkı WoW veya Elder Scrolls Online mantığı gibi, süresi biten oyuncuyu oyundan atar.

Ancak PVP ve Private Serverlar için bu sistem yıllardır tamamen işlevsizdir. Kullanılmasa bile arka planda ciddi bir yük oluşturur:

  • ❌ Gereksiz Trafik: Client, Game, DB ve Auth arasında sürekli gereksiz paket alışverişi yapar.
  • ❌ Ölü Kod (Dead Code): Config'den kapalı olsa bile hafıza ayırmaya ve döngüleri çalıştırmaya devam eder.
  • ❌ Karmaşıklık: LoginData ve ClientManager sınıflarını gereksiz yere şişirir, debug yapmayı zorlaştırır.
  • ❌ Veritabanı Kirliliği: Asla kullanılmayan log ve zaman tablolarını tutar.

Bu rehberi uyguladığınızda login süreci çok daha sade, okunabilir ve modern geliştirmelere açık hale gelecektir.



⚠️ DİKKAT ⚠️
İşlemlere başlamadan önce mutlaka Game Source, DB Source ve MySQL yedeğinizi alınız!



ADIM 1: Veritabanı Temizliği (MySQL)

Navicat veya kullandığınız SQL editöründe account veritabanına sağ tıklayıp Console/Query ekranını açın ve şu tablıları silin:

Kod:
DROP TABLE IF EXISTS gametime;
DROP TABLE IF EXISTS gametimeip;
DROP TABLE IF EXISTS gametimelog;



ADIM 2: Common (Ortak) Dosyalar

Dosya: Server\Source\common\billing.h
İşlem: Bu dosyayı tamamen silin.

Dosya: Server\Source\common\tables.h
İşlem: Aşağıdaki kodları bulun ve silin.

Kod:
// Silinecekler:
HEADER_GD_BILLING_EXPIRE = 104,
HEADER_GD_BILLING_CHECK = 106,

HEADER_DG_BILLING_REPAIR = 128,
HEADER_DG_BILLING_EXPIRE = 129,
HEADER_DG_BILLING_LOGIN = 130,
HEADER_DG_BILLING_CHECK = 132,

Bul:
Kod:
typedef struct SPacketGDAuthLogin
İçinden Sil:
Kod:
BYTE bBillType;
DWORD dwBillID;

Bul ve Sil (Tüm struct yapıları):
Kod:
typedef struct SPacketBillingLogin ...
typedef struct SPacketBillingRepair ...
typedef struct SPacketBillingExpire ...



ADIM 3: DB Source Düzenlemeleri

Dosya: Server\Source\db\ClientManager.cpp

  1. Include'u kaldırın:
    Kod:
    #include "../common/billing.h"
  2. Şu fonksiyonların içini ve kendisini tamamen silin:
    Kod:
    BillingExpire
    BillingCheck
    SendAllLoginToBilling
    SendLoginToBilling
  3. ProcessPackets içindeki
    Kod:
    HEADER_GD_BILLING_EXPIRE
    ve
    Kod:
    HEADER_GD_BILLING_CHECK
    case'lerini silin.
  4. QUERY_SETUP, QUERY_AUTH_LOGIN ve RemovePeer fonksiyonlarındaki Billing ile ilgili tüm referansları temizleyin.

Dosya: Server\Source\db\ClientManager.h
İşlem: Sildiğimiz fonksiyonların tanımlarını (header) buradan da silin.

Dosya: Server\Source\db\LoginData.cpp & .h
İşlem:
Kod:
m_bBillType
,
Kod:
m_dwBillID
değişkenlerini ve bunların Set/Get metodlarını tamamen kaldırın.

Dosya: Server\Source\db\ClientManagerLogin.cpp & ClientManagerPlayer.cpp
İşlem:
Kod:
SendLoginToBilling
çağrılarını silin.



ADIM 4: Game Source Düzenlemeleri

Dosya: Server\Source\game\config.cpp & .h
İşlem:
Kod:
g_bBilling
değişkenini ve
Kod:
TOKEN("billing")
bloğunu silin.

Dosya: Server\Source\game\db.cpp

  • Include sil:
    Kod:
    #include "../common/billing.h"
  • Şu fonksiyonları tamamen silin:
    Kod:
    SetBilling
    PushBilling
    FlushBilling
    CheckBilling
    StopAllBilling
    GetGameTimeIP
    GetGameTime
    SendBillingExpire
  • AnalyzeReturnQuery fonksiyonunda
    Kod:
    QID_BILLING_GET_TIME
    ve
    Kod:
    QID_BILLING_CHECK
    case bloklarını silin.

⚠️ ÖNEMLİ DEĞİŞİKLİK:
Kod:
LoginPrepare
fonksiyonunun yapısını değiştiriyoruz.

Bul:
Kod:
void DBManager::LoginPrepare(BYTE bBillType, DWORD dwBillID, long lRemainSecs, LPDESC d, DWORD * pdwClientKey, int* paiPremiumTimes)

Bununla Değiştir:
Kod:
void DBManager::LoginPrepare(LPDESC d, DWORD * pdwClientKey, int* paiPremiumTimes)

* Fonksiyon içeriğindeki SetBillType, SetBillID gibi satırları silmeyi unutmayın.

Dosya: Server\Source\game\db.h
İşlem: Header dosyasını cpp tarafındaki değişikliklere göre güncelleyin (Silinen fonksiyon tanımlarını kaldırın, LoginPrepare imzasını güncelleyin).

Dosya: Server\Source\game\desc.cpp & .h
İşlem:
Kod:
m_dwBillingExpireSecond
değişkenini ve ilgili metodları silin.

Dosya: Server\Source\game\input_db.cpp & input.h
İşlem:
Kod:
BillingRepair
,
Kod:
BillingExpire
,
Kod:
BillingLogin
,
Kod:
BillingCheck
fonksiyonlarını silin.

Dosya: Server\Source\game\main.cpp
İşlem: heartbeat ve main fonksiyonlarındaki
Kod:
FlushBilling
çağrılarını kaldırın.



ADIM 5: Client Tarafı

Dosya: root/intrologin.py
Bul ve Sil:
Kod:
"NOBILL"    : localeInfo.LOGIN_FAILURE_NOBILL,

Dosya: locale/xx/locale_game.txt
Bul ve Sil:
Kod:
LOGIN_FAILURE_NOBILL    Hesabınızın oyun süresi yok.



Tüm işlemleri yaptıktan sonra Game & DB build almayı unutmayın.
İyi forumlar!
 
Eski tarz files kullanan için kaldırılması gereken ilk kodlardan birisi kaldırın benim gibi kurtulun 😂 eline sağlık
 
Eline sağlık, paylaşım için teşekkürler :)
 
teşekkürler
 
Ellerine emegine saglik yoneticim senin paylastigin her sey benim icin onemlidir notlara eklendi bu paylasiminizda :) tesekkurler
 

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

Geri
Üst