Shutdown komutu düzenlemesi

Denizeri24

Gentleman
Geliştirici
Usta Üye
Mesaj
519
Çözümler
14
Beğeni
469
Puan
829
Ticaret Puanı
0
Serverimde daha önce bir kişinin yaşadığı bir problem farkettim, problem şu;




Görüldüğü gibi shutdown komutu ile oyunu kapatınca giriş yapılmaya çalışıldığı taktirde paket hatası oluşup oyun kapanıyor. Bu sorun sanırsam packet encryption (cryptopp) kaldırınca oluşuyor.

sorunun temel kaynağı AUTH çekirdeğinin diğer çekirdekler gibi P2P bağlantısı kurmuyor olması, sadece DB ile bağlantı kuruyor. Bu yüzden shutdown komutu gönderimi sırasında gönderilen P2P paketi AUTH'a ulaşmamakta.

Çözümü ise şöyle;

game/cmd_general.cpp içerisinde aratılır:
C++:
ACMD(do_shutdown)

ve fonksiyonun içerisinde ki
C++:
Shutdown(10)
yazan kısmın hemen üstüne eklenir;

C++:
db_clientdesc->DBPacketHeader(HEADER_GD_GO_SHUTDOWN, 0, 0);


game/input_db.cpp içerisinde aratılır:
C++:
case HEADER_DG_WEDDING_END

ve hemen aşağısına eklenir;

C++:
    case HEADER_DG_GO_SHUTDOWN:
        g_bNoMoreClient = true;
        break;

common/tables.h açılır ve aratılır:
C++:
HEADER_DG_ITEMAWARD_INFORMER                = 180,

ve hemen aşağısına eklenir (numaralandırmanın uygun olduğuna dikkat edin, bende 182 numarası boş);

C++:
HEADER_DG_GO_SHUTDOWN                        = 182,

tekrar aratılır:
C++:
HEADER_GD_DELETE_AWARDID                    = 138,

ve yine hemen aşağısına eklenir;

C++:
HEADER_GD_GO_SHUTDOWN                        = 146,

db/clientmanager.cpp açılır ve aratılır:
C++:
case HEADER_GD_DELETE_AWARDID:

ve hemen altına eklenir;

C++:
            case HEADER_GD_GO_SHUTDOWN:
                m_pkAuthPeer->EncodeHeader(HEADER_DG_GO_SHUTDOWN, 0, 0);
                break;


bu kadar. İşlemlerden sonra artık oyundan atmak yerine uyarı mesajı verecek;


 
Son düzenleme:
Paylaşım için teşekkürler.
 
Eline sağlık.
 
Geri
Üst