Commit 7d446e24 authored by Chen Bill's avatar Chen Bill

update card reader

parent 305899e6
......@@ -2,6 +2,7 @@
#define CLIENT_CARD_H
#include "config.h"
#include "../ocgcore/card_data.h"
#include <vector>
#include <set>
#include <map>
......@@ -9,20 +10,7 @@
namespace ygo {
struct CardData {
unsigned int code;
unsigned int alias;
unsigned long long setcode;
unsigned int type;
unsigned int level;
unsigned int attribute;
unsigned int race;
int attack;
int defense;
unsigned int lscale;
unsigned int rscale;
unsigned int link_marker;
};
using CardData = card_data;
struct CardDataC {
unsigned int code;
unsigned int alias;
......
......@@ -147,12 +147,25 @@ bool DataManager::Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt) {
spmemvfs_env_fini();
return false;
}
bool DataManager::GetData(int code, CardData* pData) {
bool DataManager::GetData(unsigned int code, CardData* pData) {
auto cdit = _datas.find(code);
if(cdit == _datas.end())
return false;
if(pData)
*pData = *((CardData*)&cdit->second);
auto data = cdit->second;
if (pData) {
pData->code = data.code;
pData->alias = data.alias;
pData->setcode = data.setcode;
pData->type = data.type;
pData->level = data.level;
pData->attribute = data.attribute;
pData->race = data.race;
pData->attack = data.attack;
pData->defense = data.defense;
pData->lscale = data.lscale;
pData->rscale = data.rscale;
pData->link_marker = data.link_marker;
}
return true;
}
code_pointer DataManager::GetCodePointer(int code) {
......@@ -346,9 +359,9 @@ const wchar_t* DataManager::FormatLinkMarker(int link_marker) {
BufferIO::CopyWStrRef(L"[\u2198]", p, 4);
return lmBuffer;
}
int DataManager::CardReader(int code, void* pData) {
if(!dataManager.GetData(code, (CardData*)pData))
memset(pData, 0, sizeof(CardData));
uint32 DataManager::CardReader(uint32 code, card_data* pData) {
if (!dataManager.GetData(code, pData))
pData->clear();
return 0;
}
byte* DataManager::ScriptReaderEx(const char* script_name, int* slen) {
......
......@@ -17,7 +17,7 @@ public:
bool LoadStrings(IReadFile* reader);
void ReadStringConfLine(const char* linebuf);
bool Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt = 0);
bool GetData(int code, CardData* pData);
bool GetData(unsigned int code, CardData* pData);
code_pointer GetCodePointer(int code);
bool GetString(int code, CardString* pStr);
const wchar_t* GetName(int code);
......@@ -53,7 +53,7 @@ public:
static byte scriptBuffer[0x20000];
static const wchar_t* unknown_string;
static int CardReader(int, void*);
static uint32 CardReader(uint32, card_data*);
static byte* ScriptReaderEx(const char* script_name, int* slen);
static byte* ScriptReader(const char* script_name, int* slen);
static IFileSystem* FileSystem;
......
......@@ -1541,8 +1541,7 @@ void Game::ShowCardInfo(int code, bool resize) {
return;
CardData cd;
wchar_t formatBuffer[256];
if(!dataManager.GetData(code, &cd))
memset(&cd, 0, sizeof(CardData));
dataManager.GetData(code, &cd);
imgCard->setImage(imageManager.GetTexture(code, true));
if(cd.alias != 0 && (cd.alias - code < CARD_ARTWORK_VERSIONS_OFFSET || code - cd.alias < CARD_ARTWORK_VERSIONS_OFFSET))
myswprintf(formatBuffer, L"%ls[%08d]", dataManager.GetName(cd.alias), cd.alias);
......
......@@ -63,7 +63,7 @@ int ReplayMode::ReplayThread() {
mainGame->dInfo.tag_player[0] = false;
mainGame->dInfo.tag_player[1] = false;
set_script_reader((script_reader)DataManager::ScriptReaderEx);
set_card_reader((card_reader)DataManager::CardReader);
set_card_reader(DataManager::CardReader);
set_message_handler((message_handler)MessageHandler);
if(!StartDuel()) {
EndDuel();
......
......@@ -429,7 +429,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit;
set_script_reader((script_reader)DataManager::ScriptReaderEx);
set_card_reader((card_reader)DataManager::CardReader);
set_card_reader(DataManager::CardReader);
set_message_handler((message_handler)SingleDuel::MessageHandler);
pduel = create_duel(duel_seed);
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
......
......@@ -37,7 +37,7 @@ int SingleMode::SinglePlayThread() {
unsigned int seed = rd();
mt19937 rnd((uint_fast32_t)seed);
set_script_reader((script_reader)DataManager::ScriptReaderEx);
set_card_reader((card_reader)DataManager::CardReader);
set_card_reader(DataManager::CardReader);
set_message_handler((message_handler)MessageHandler);
pduel = create_duel(rnd.rand());
set_player_info(pduel, 0, start_lp, start_hand, draw_count);
......
......@@ -398,7 +398,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit;
set_script_reader((script_reader)DataManager::ScriptReaderEx);
set_card_reader((card_reader)DataManager::CardReader);
set_card_reader(DataManager::CardReader);
set_message_handler((message_handler)TagDuel::MessageHandler);
pduel = create_duel(duel_seed);
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment