Çözüldü Shutdown Komutu Sonrası İtemler Siliniyor

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

comutansago

Üye
Üye
Mesaj
56
Çözümler
1
Beğeni
6
Puan
414
Ticaret Puanı
0
Başlıktada belirttiğim üzere shutdown komutundan sonra reboot atınca itemler ve son yapılan her şey siliniyor. Karakterin durduğu map vs dahil buna. Shutdown sonrası 10dk civarı bekler reboot atarsam silinmiyor sadece. Ne yapmam lazım?
 
Çözüm
Mevcut durumla alakalı aşağıda vereceğim kod satırlarını güncellemeniz işinize yarayacaktır fakat vereceğim güncellemeyi dahi yapsanız shutdown sonrası reboot komutu için biraz beklemenizi öneriyorum.


Service.h:
#define FLUSH_AT_SHUTDOWN


cmd_gm.cpp:
ACMD(do_eclipse)
    #arat ve üstündeki kod bloğunu değiştir.
    ---------------------------------------------------------------
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))...
Mevcut durumla alakalı aşağıda vereceğim kod satırlarını güncellemeniz işinize yarayacaktır fakat vereceğim güncellemeyi dahi yapsanız shutdown sonrası reboot komutu için biraz beklemenizi öneriyorum.


Service.h:
#define FLUSH_AT_SHUTDOWN


cmd_gm.cpp:
ACMD(do_eclipse)
    #arat ve üstündeki kod bloğunu değiştir.
    ---------------------------------------------------------------
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
}

cmd_general.cpp:
struct DisconnectFunc
    #arat ve üstündeki kod bloğunu değiştir.
-------------------------------------------------------------------
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)");
        }
    }
};
 
Çözüm
Mevcut durumla alakalı aşağıda vereceğim kod satırlarını güncellemeniz işinize yarayacaktır fakat vereceğim güncellemeyi dahi yapsanız shutdown sonrası reboot komutu için biraz beklemenizi öneriyorum.


Service.h:
#define FLUSH_AT_SHUTDOWN


cmd_gm.cpp:
ACMD(do_eclipse)
    #arat ve üstündeki kod bloğunu değiştir.
    ---------------------------------------------------------------
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
}

cmd_general.cpp:
struct DisconnectFunc
    #arat ve üstündeki kod bloğunu değiştir.
-------------------------------------------------------------------
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)");
        }
    }
};
Bu kadar erken cevap verileceğini düşünmemiştim. Çok teşekkür ederim gerçekten. Filesle uğraştığım zamandan beri bunu arıyorum. Önerilerinizi dikkate alacağım. Sorun çözüldü konu kilitlenebilir.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst