Hikayeler

Reklam vermek için turkmmo@gmail.com

5'li Efsun Botu Reboot Sonrası İtem Kaybolması Hakkında Martysama 5.8

Graf!k3r

Level 3
TM Üye
Üye
Katılım
7 Mar 2025
Konular
7
Mesajlar
126
Online süresi
16g 72661s
Reaksiyon Skoru
123
Altın Konu
0
Başarım Puanı
63
TM Yaşı
1 Yıl 1 Ay 12 Gün
MmoLira
2,907
DevLira
9

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Evet arkadaşlar başlıkta da belirttiğim üzere Rebbot sonrası Efsun Bottaki itemler siliniyor. Bu konuda bilgisi olup yardımcı olabilecek arkadaş varsa sevinirim. Botun daha önceki konusu şu şekilde:

Bahse Konu Botun Olduğu Önceki Açılan Sayfa
 
Bahsettiğiniz dosyalarım bu şekilde hocam, herhangi bir hata var mı bakabilir misiniz? Teşekkürler.
 

Ekli dosyalar

  • item.SQL
    303 bayt · Görüntüleme: 0
  • ClientManagerPlayer.cpp
    38.1 KB · Görüntüleme: 0
  • char_item.cpp
    199.4 KB · Görüntüleme: 0
ÇÖZÜM:
Navicat ile yapılışı
1. Navicat’i aç

Serverın bağlı olduğu bağlantıya gir.

2. Soldan player veritabanını bul

Senin tabloların olduğu yerde:

account
player
common
gibi db’ler olur.

Burada player veritabanına tıkla.

3. Üstten “New Query” aç

Ya da sağ tık:

player üstüne sağ tık
New Query

CREATE TABLE IF NOT EXISTS player.switchbot_items (
    pid INT UNSIGNED NOT NULL,
    slot TINYINT UNSIGNED NOT NULL,
    item_id INT UNSIGNED NOT NULL,
    vnum INT UNSIGNED NOT NULL DEFAULT 0,
    active TINYINT UNSIGNED NOT NULL DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (pid, slot),
    KEY idx_item_id (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5. Çalıştır

Üstteki Run /
---------------------------------------------------------------------------
switchbot_manager.cpp içinde yapılacaklar
Yeni include ekle Dosyanın üst tarafına:

#include "db.h"

Amaç:

DBManager::instance().[HASH=2388]#include[/HASH]..) kullanabilmek
2) RegisterItem(...) içine SQL kayıt eklendi

Fonksiyon:

void CSwitchbotManager::RegisterItem(DWORD player_id, DWORD item_id, WORD wCell)

Burada normal kayıt işleminden sonra şunu ekledik:

char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
    "REPLACE INTO switchbot_items (pid, slot, item_id) VALUES (%u, %u, %u)",
    player_id, wCell, item_id);

DBManager::instance().DirectQuery(szQuery);

Amaç:

switchbot slotuna item konunca SQL’e yazmak
aynı pid+slot varsa üzerine güncellemek
3) UnregisterItem(...) içine SQL silme eklendi

Fonksiyon:

void CSwitchbotManager::UnregisterItem(DWORD player_id, WORD wCell)

Burada normal unregister işleminden sonra şunu ekledik:

char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
    "DELETE FROM switchbot_items WHERE pid = %u AND slot = %u",
    player_id, wCell);

DBManager::instance().DirectQuery(szQuery);

Amaç:

switchbot slotundan item çıkınca SQL kaydını silmek
4) EnterGame(LPCHARACTER ch) içine SQL load eklendi

Fonksiyon:

void CSwitchbotManager::EnterGame(LPCHARACTER ch)

Bunun baş tarafına şu mantık eklendi:

char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
    "SELECT slot, item_id FROM switchbot_items WHERE pid = %u",
    ch->GetPlayerID());

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

if (pMsg->Get()->uiNumRows > 0)
{
    MYSQL_ROW row;
    MYSQL_RES* pRes = pMsg->Get()->pSQLResult;

    while ((row = mysql_fetch_row(pRes)))
    {
        int slot = atoi(row[0]);
        DWORD item_id = strtoul(row[1], NULL, 10);

        CSwitchbot* pkSwitchbot = FindSwitchbot(ch->GetPlayerID());
        if (!pkSwitchbot)
        {
            pkSwitchbot = new CSwitchbot();
            pkSwitchbot->SetPlayerId(ch->GetPlayerID());
            m_map_Switchbots.insert(std::make_pair(ch->GetPlayerID(), pkSwitchbot));
        }

        pkSwitchbot->RegisterItem(slot, item_id);
    }
}

Amaç:

oyuncu oyuna girince SQL’den switchbot itemlerini çekmek
memory’deki switchbot tablosuna geri yüklemek

Hocam bunu bir dene muhtemelen problemin çözülür
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Benzer konular

Geri
Üst