Reboot Atmadan Gm Yapma

  • Konuyu açan Konuyu açan SULEYMAN BOZOK
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 376

SULEYMAN BOZOK

ANKA2 RINAMT2 PROJESINE HAKIM OLAN GELISTIRICI
Premium Üye
Yardımsever Üye
Usta Üye
Mesaj
1.188
Çözümler
73
Beğeni
1.546
Puan
1.359
Ticaret Puanı
0
Ufak Bır Kodlama Reboot Atmaktan Sıkıldıysanız Bu Kodları Eklemenız Yeterli İlginiz İçin Teşekürler

Kod:
Genişlet Daralt Kopyala
service.h
#define ENABLE_AUTO_RELOAD_ADMIN_DATA


Input_auth.cpp->
Aratılır:
DBManager::instance().EscapeString(szLogin, sizeof(szLogin), login, strlen(login));


Altına eklenir:

#ifdef ENABLE_AUTO_RELOAD_ADMIN_DATA
    char szQuery[1024];
    std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT mAccount FROM common.gmlist"));
    MYSQL_ROW row = NULL;
    while (row = mysql_fetch_row(pMsg->Get()->pSQLResult))
    {
        if (strcmp(row[0], szLogin) == 0) {
            db_clientdesc->DBPacket(HEADER_GD_RELOAD_ADMIN, 0, NULL, 0);
            break;
        }
    }
#endif
 
En son bir moderatör tarafından düzenlenmiş:
bende hıc olmuyordu :) abi
 
:) hocam ben kendim gelistirme amaclı kullanıyordum elimde duruyordu diye arkadaslarada paylasmak istedim en azında lazım olupta kullananlar olur diye dusunup bıraktım reboot ve acıp kapatmaktan iyidir
 
bunu reload a kısmına entegre edip parametresini düzenlersen sorun kalmaz gibi
 
test için bunu kullanmak yerine test_server aktif et geç
 
böyle cümlelerinin altının doldurulması gerekiyor neden önermezsiniz?
Kodlar veritabanına bağlanıp sürekli while döngüsü kullanılarak sorgu yapılacak şekilde düzenlenmiş. Yani sürekli veritabanını yoracak sorgu döndürüyor. Ondan dolayı aktif oyunda zaten bi çok sistem vs yüklemeler olacak sunucuya bide böyle bir sorgu eklemek gereksiz olur. Zaten reboot ve reload komutlarının olmasıda bundan dolayı sürekli böyle sorgular olmasın diye.
Bu arada ufak düzeltme bu kodlar oyuna ilk girişte hesap kontrolü yapar. Işınlarken veyahut oyun içi herhangi bir durumda çalışmaz. Ama ilk girişte bile olsa gmList ne kadar çoksa sorgu o kadar yavaş olur.
 
Son düzenleme:
Kodlar veritabanına bağlanıp sürekli while döngüsü kullanılarak sorgu yapılacak şekilde düzenlenmiş. Yani sürekli veritabanını yoracak sorgu döndürüyor. Ondan dolayı aktif oyunda zaten bi çok sistem vs yüklemeler olacak sunucuya bide böyle bir sorgu eklemek gereksiz olur. -> While döngüsü sorgu sonucu okurken var sorgu atarken değil.

Zaten reboot ve reload komutlarının olmasıda bundan dolayı sürekli böyle sorgular olmasın diye. -> Bende aynı fikirdeyim halihazırda reload a varken her loginde tekrar admin bilgisi reload etmeye gerek yok.

Ama ilk girişte bile olsa gmList ne kadar çoksa sorgu o kadar yavaş olur. -> Gmlist e herhangi bir kısıt vermeden atılan sorgunun yavaş olacağını pek sanmam, db den 10-15 kayıt retrieve etmenin maliyeti yok denecek kadar az.
 
böyle cümlelerinin altının doldurulması gerekiyor neden önermezsiniz?
Reload a yazdığınızda bir anda tüm herkesin gm'likleri gidebilir..

Kodlar veritabanına bağlanıp sürekli while döngüsü kullanılarak sorgu yapılacak şekilde düzenlenmiş. Yani sürekli veritabanını yoracak sorgu döndürüyor. Ondan dolayı aktif oyunda zaten bi çok sistem vs yüklemeler olacak sunucuya bide böyle bir sorgu eklemek gereksiz olur. Zaten reboot ve reload komutlarının olmasıda bundan dolayı sürekli böyle sorgular olmasın diye.
Bu arada ufak düzeltme bu kodlar oyuna ilk girişte hesap kontrolü yapar. Işınlarken veyahut oyun içi herhangi bir durumda çalışmaz. Ama ilk girişte bile olsa gmList ne kadar çoksa sorgu o kadar yavaş olur.
Arkadaşımız bir nevi haklı, kodların revize edilmesi gerek bu şekilde aktif oyunda sorunlar çıkartabilir.
 
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_RELOAD_ADMIN_DATA
    char szEscapedLogin[64];
    DBManager::instance().EscapeString(szEscapedLogin, sizeof(szEscapedLogin), login, strlen(login));

    char szQuery[256];
    snprintf(szQuery, sizeof(szQuery),
        "SELECT 1 FROM common.gmlist WHERE mAccount = '%s' LIMIT 1", szEscapedLogin);

    std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery));

    if (pMsg && pMsg->Get()->uiNumRows > 0)
    {
        db_clientdesc->DBPacket(HEADER_GD_RELOAD_ADMIN, 0, NULL, 0);
    }
#endif

Kodları şu şekil revize etmiş olsak.
Sorguda tüm gmListi değilde 1 sorgu çalıştıracak bu sayede yükü hafifliycek.

Birde navicattan ;
CREATE INDEX idx_mAccount ON common.gmlist (mAccount);
Şunu çalıştırdığınızda sorgulama çok daha sağlıklı ve güvenli olacak yoğun giriş olursa diye yükü çok hafifliycek.
Ayrıca sprintf yerinede EscapeString kullandım böylece inject yapma ihtimalleride kalmamış olacak.
 
Geri
Üst