Yardım Reboot Sonrası İtem Kaybı Önleme

  • Konuyu açan Konuyu açan LethalStrikeR
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 95
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
776
Çözümler
41
Beğeni
196
Puan
975
Ticaret Puanı
0
Selamlar,

Reboot sonrası item kaybını önlemek için yapılan bir fix var mı items tablosu hemen güncellenmiyor bildiğiniz üzere bu durumla alakalı olarak aktif oyunda kanal düşmesi gibi durumlarda nasıl bir önlem alınabilir?
 
Çözüm
@Luigina 'dan alıntı

Normalde dosyalarınızın flush süresine bağlı olarak flush işlemi gerçekleştirilir.
Fakat vereceğim düzenlemeyle birlikte oyunda /shutdown komutu kullandığınızda tüm oyuncuların bilgilerini flush edecektir. Bu sayede /shutdown yazıp oyuncular oyundan atıldıktan sonra reboot attığınızda eşyaların kaybolması gibi bir durum olmayacaktır.

Anlatım için
C++:
Genişlet Daralt Kopyala
CommonDefines.h veya service.h içerisine ekle

#define FLUSH_AT_SHUTDOWN

cmd_general.cpp içerisinde

struct SendDisconnectFunc

//Arat

struct SendDisconnectFunc
{
    void operator () (LPDESC d)
    {
        if (d->GetCharacter())
        {
#ifdef FLUSH_AT_SHUTDOWN
            d->GetCharacter()->SaveReal();
            DWORD pid =...
Oyunu reboot ile değil shutdown ile kapat
Tamam sadece bakıma alınacağı zaman değil channel crash yediğinde ne olacak vrunner aktif olduğunda pid düştüğünü anlayıp hemen aktif hale getirecek o core içinde sorun değil mı ? Yoksa item kaybının sebebi core değilde dbnin açılıp kapanmasıyla mı ilgili oluyor?

Birde shutdown çekip ardından hemen reboot attığımızda kayıp olmuyor mu ?
 
@Luigina 'dan alıntı

Normalde dosyalarınızın flush süresine bağlı olarak flush işlemi gerçekleştirilir.
Fakat vereceğim düzenlemeyle birlikte oyunda /shutdown komutu kullandığınızda tüm oyuncuların bilgilerini flush edecektir. Bu sayede /shutdown yazıp oyuncular oyundan atıldıktan sonra reboot attığınızda eşyaların kaybolması gibi bir durum olmayacaktır.

Anlatım için
C++:
Genişlet Daralt Kopyala
CommonDefines.h veya service.h içerisine ekle

#define FLUSH_AT_SHUTDOWN

cmd_general.cpp içerisinde

struct SendDisconnectFunc

//Arat

struct SendDisconnectFunc
{
    void operator () (LPDESC d)
    {
        if (d->GetCharacter())
        {
#ifdef FLUSH_AT_SHUTDOWN
            d->GetCharacter()->SaveReal();
            DWORD pid = d->GetCharacter()->GetPlayerID();
            db_clientdesc->DBPacketHeader(HEADER_GD_FLUSH_CACHE, 0, sizeof(DWORD));
            db_clientdesc->Packet(&pid, sizeof(DWORD));
#endif
            if (d->GetCharacter()->GetGMLevel() == GM_PLAYER)
                d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "quit Shutdown(SendDisconnectFunc)");
        }
    }
};

//Fonksiyonu bu şekilde değiştiriniz.

cmd_gm.cpp içerisinde

ACMD(do_flush)
{

//Aratınız

ACMD(do_flush)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));
#ifdef FLUSH_AT_SHUTDOWN
    DWORD pid = 0;
    if(0 == arg1[0])
        pid = ch->GetPlayerID();
    else
        pid = (DWORD)strtoul(arg1, NULL, 10);

    if (pid != 0)
    {
        ch->SaveReal();
        db_clientdesc->DBPacketHeader(HEADER_GD_FLUSH_CACHE, 0, sizeof(DWORD));
        db_clientdesc->Packet(&pid, sizeof(DWORD));
    }
#else
    if (0 == arg1[0])
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "usage : /flush player_id");
        return;
    }

    DWORD pid = (DWORD)strtoul(arg1, NULL, 10);

    db_clientdesc->DBPacketHeader(HEADER_GD_FLUSH_CACHE, 0, sizeof(DWORD));
    db_clientdesc->Packet(&pid, sizeof(DWORD));
#endif
}

//Fonksiyonu bu şekilde değiştiriniz.

Örnek resimler:

 
En son bir moderatör tarafından düzenlenmiş:
Çözüm
@Luigina 'dan alıntı

Normalde dosyalarınızın flush süresine bağlı olarak flush işlemi gerçekleştirilir.
Fakat vereceğim düzenlemeyle birlikte oyunda /shutdown komutu kullandığınızda tüm oyuncuların bilgilerini flush edecektir. Bu sayede /shutdown yazıp oyuncular oyundan atıldıktan sonra reboot attığınızda eşyaların kaybolması gibi bir durum olmayacaktır.

Anlatım için

Örnek resimler:

Çok teşekkür ederim bu işimi fazlasıyla görecektir. Kanal düşünce db core yeniden başlatmadan sadece düşen kanalın core yeniden başlatılınca bu item kaybı sorunu meydana gelmiyor değil mi ?
 
Çok teşekkür ederim bu işimi fazlasıyla görecektir. Kanal düşünce db core yeniden başlatmadan sadece düşen kanalın core yeniden başlatılınca bu item kaybı sorunu meydana gelmiyor değil mi ?
Ona bir etkisi olduğunu sanmıyorum. Çünkü gördüğüm kadarıyla komuta bir işlem yapılıyor. Tabi işi bilen birisi olmadığım için net bir şey diyemiyorum.
 
Geri
Üst