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