- 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
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
- Include'u kaldırın:
Kod:
#include "../common/billing.h" - Şu fonksiyonların içini ve kendisini tamamen silin:
Kod:BillingExpire BillingCheck SendAllLoginToBilling SendLoginToBilling - ProcessPackets içindeki
veKod:
HEADER_GD_BILLING_EXPIREcase'lerini silin.Kod:HEADER_GD_BILLING_CHECK - 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
Dosya: Server\Source\db\ClientManagerLogin.cpp & ClientManagerPlayer.cpp
İşlem:
Kod:
SendLoginToBilling
ADIM 4: Game Source Düzenlemeleri
Dosya: Server\Source\game\config.cpp & .h
İşlem:
Kod:
g_bBilling
Kod:
TOKEN("billing")
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
veKod:
QID_BILLING_GET_TIMEcase bloklarını silin.Kod:QID_BILLING_CHECK
ÖNEMLİ DEĞİŞİKLİK:
Kod:
LoginPrepare
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
Dosya: Server\Source\game\input_db.cpp & input.h
İşlem:
Kod:
BillingRepair
Kod:
BillingExpire
Kod:
BillingLogin
Kod:
BillingCheck
Dosya: Server\Source\game\main.cpp
İşlem: heartbeat ve main fonksiyonlarındaki
Kod:
FlushBilling
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!
İyi forumlar!
- Katılım
- 19 Kas 2009
- Konular
- 1,185
- Mesajlar
- 4,186
- Online süresi
- 26g 11277s
- Reaksiyon Skoru
- 2,666
- Altın Konu
- 32
- Başarım Puanı
- 344
- TM Yaşı
- 16 Yıl 5 Ay 5 Gün
- MmoLira
- 18,413
- DevLira
- 90
Eline sağlık, paylaşım için teşekkürler 
- Katılım
- 25 Eki 2023
- Konular
- 322
- Mesajlar
- 775
- Online süresi
- 28g 21356s
- Reaksiyon Skoru
- 923
- Altın Konu
- 145
- Başarım Puanı
- 182
- TM Yaşı
- 2 Yıl 5 Ay 27 Gün
- MmoLira
- 39
- DevLira
- 9
teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 219
- Cevaplar
- 1
- Görüntüleme
- 228
- Cevaplar
- 5
- Görüntüleme
- 414
- Cevaplar
- 1
- Görüntüleme
- 173
- Cevaplar
- 2
- Görüntüleme
- 196








eline sağlık






