Commit 2e407cc7 authored by mercury233's avatar mercury233

Merge branch 'fh' into patch-irr-clipboard

parents 487f04d5 e69da396
...@@ -102,7 +102,7 @@ void Draw2DImageQuad(video::IVideoDriver* driver, video::ITexture* image, core:: ...@@ -102,7 +102,7 @@ void Draw2DImageQuad(video::IVideoDriver* driver, video::ITexture* image, core::
driver->setTransform(irr::video::ETS_VIEW, oldViewMat); driver->setTransform(irr::video::ETS_VIEW, oldViewMat);
} }
CGUIImageButton* CGUIImageButton::addImageButton(IGUIEnvironment *env, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id) { CGUIImageButton* CGUIImageButton::addImageButton(IGUIEnvironment *env, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id) {
CGUIImageButton* button = new CGUIImageButton(env, parent ? parent : 0, id, rectangle); CGUIImageButton* button = new CGUIImageButton(env, parent, id, rectangle);
button->drop(); button->drop();
return button; return button;
} }
......
...@@ -322,7 +322,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia ...@@ -322,7 +322,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
tt_face = face->face; tt_face = face->face;
// Store font metrics. // Store font metrics.
FT_Set_Pixel_Sizes(tt_face, size, 0); FT_Set_Pixel_Sizes(tt_face, 0, size);
font_metrics = tt_face->size->metrics; font_metrics = tt_face->size->metrics;
// Allocate our glyphs. // Allocate our glyphs.
...@@ -834,6 +834,7 @@ video::IImage* CGUITTFont::createTextureFromChar(const uchar32_t& ch) { ...@@ -834,6 +834,7 @@ video::IImage* CGUITTFont::createTextureFromChar(const uchar32_t& ch) {
core::dimension2du glyph_size(glyph.source_rect.getSize()); core::dimension2du glyph_size(glyph.source_rect.getSize());
video::IImage* image = Driver->createImage(format, glyph_size); video::IImage* image = Driver->createImage(format, glyph_size);
pageholder->copyTo(image, irr::core::vector2di(0, 0), glyph.source_rect); pageholder->copyTo(image, irr::core::vector2di(0, 0), glyph.source_rect);
pageholder->drop();
tex->unlock(); tex->unlock();
return image; return image;
......
...@@ -351,7 +351,7 @@ private: ...@@ -351,7 +351,7 @@ private:
load_flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER; load_flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER;
if (!useHinting()) load_flags |= FT_LOAD_NO_HINTING; if (!useHinting()) load_flags |= FT_LOAD_NO_HINTING;
if (!useAutoHinting()) load_flags |= FT_LOAD_NO_AUTOHINT; if (!useAutoHinting()) load_flags |= FT_LOAD_NO_AUTOHINT;
if (useMonochrome()) load_flags |= FT_LOAD_MONOCHROME | FT_LOAD_TARGET_MONO | FT_RENDER_MODE_MONO; if (useMonochrome()) load_flags |= FT_LOAD_MONOCHROME | FT_LOAD_TARGET_MONO;
else load_flags |= FT_LOAD_TARGET_NORMAL; else load_flags |= FT_LOAD_TARGET_NORMAL;
} }
u32 getWidthFromCharacter(wchar_t c) const; u32 getWidthFromCharacter(wchar_t c) const;
......
...@@ -22,9 +22,8 @@ public: ...@@ -22,9 +22,8 @@ public:
} }
static void VectorWriteBlock(std::vector<unsigned char>& buffer, const void* src, size_t size) { static void VectorWriteBlock(std::vector<unsigned char>& buffer, const void* src, size_t size) {
const auto len = buffer.size(); auto* bytes = static_cast<const unsigned char*>(src);
buffer.resize(len + size); buffer.insert(buffer.end(), bytes, bytes + size);
std::memcpy(buffer.data() + len, src, size);
} }
template<typename T> template<typename T>
static void VectorWrite(std::vector<unsigned char>& buffer, const T& value) { static void VectorWrite(std::vector<unsigned char>& buffer, const T& value) {
......
...@@ -1392,11 +1392,11 @@ bool ClientField::check_sum_trib(std::set<ClientCard*>::const_iterator index, st ...@@ -1392,11 +1392,11 @@ bool ClientField::check_sum_trib(std::set<ClientCard*>::const_iterator index, st
return false; return false;
int l1, l2; int l1, l2;
get_sum_params((*index)->opParam, l1, l2); get_sum_params((*index)->opParam, l1, l2);
if((acc + l1 >= select_min && acc + l1 <= select_max) || (acc + l2 >= select_min && acc + l2 <= select_max)) if((acc + l1 >= select_min && acc + l1 <= select_max) || (l2 > 0 && acc + l2 >= select_min && acc + l2 <= select_max))
return true; return true;
++index; ++index;
return check_sum_trib(index, end, acc + l1) return check_sum_trib(index, end, acc + l1)
|| check_sum_trib(index, end, acc + l2) || (l2 > 0 && check_sum_trib(index, end, acc + l2))
|| check_sum_trib(index, end, acc); || check_sum_trib(index, end, acc);
} }
template <class T> template <class T>
...@@ -1440,7 +1440,7 @@ static bool is_declarable(const T& cd, const std::vector<unsigned int>& opcode) ...@@ -1440,7 +1440,7 @@ static bool is_declarable(const T& cd, const std::vector<unsigned int>& opcode)
stack.pop(); stack.pop();
int lhs = stack.top(); int lhs = stack.top();
stack.pop(); stack.pop();
stack.push(lhs / rhs); stack.push(rhs != 0 ? lhs / rhs : 0);
} }
break; break;
} }
......
...@@ -242,16 +242,30 @@ const wchar_t* DataManager::GetSetName(uint32_t code) const { ...@@ -242,16 +242,30 @@ const wchar_t* DataManager::GetSetName(uint32_t code) const {
std::vector<uint32_t> DataManager::GetSetCodes(std::wstring setname) const { std::vector<uint32_t> DataManager::GetSetCodes(std::wstring setname) const {
std::vector<uint32_t> matchingCodes; std::vector<uint32_t> matchingCodes;
for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) { for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) {
auto xpos = csit->second.find_first_of(L'|');//setname|another setname or extra info const std::wstring& setnameString = csit->second;
if(setname.size() < 2) { size_t start = 0;
if(csit->second.compare(0, xpos, setname) == 0 while(start < setnameString.size()) { // handle "setname|another setname"
|| csit->second.compare(xpos + 1, csit->second.length(), setname) == 0) auto pos = setnameString.find(L'|', start);
matchingCodes.push_back(csit->first); std::wstring token;
} else { if(pos == std::wstring::npos)
if(csit->second.substr(0, xpos).find(setname) != std::wstring::npos token = setnameString.substr(start);
|| csit->second.substr(xpos + 1).find(setname) != std::wstring::npos) { else
matchingCodes.push_back(csit->first); token = setnameString.substr(start, pos - start);
if(setname.size() < 2) {
// exact match for short set names to avoid too many results
if(token == setname) {
matchingCodes.push_back(csit->first);
break;
}
} else {
if(token.find(setname) != std::wstring::npos) {
matchingCodes.push_back(csit->first);
break;
}
} }
if(pos == std::wstring::npos)
break;
start = pos + 1;
} }
} }
return matchingCodes; return matchingCodes;
......
#ifndef DECK_H
#define DECK_H
#include <vector>
#include <cstdint>
#include "data_manager.h"
namespace ygo {
struct Deck {
std::vector<code_pointer> main;
std::vector<code_pointer> extra;
std::vector<code_pointer> side;
void clear() {
main.clear();
extra.clear();
side.clear();
}
};
struct DeckArray {
std::vector<uint32_t> main;
std::vector<uint32_t> extra;
std::vector<uint32_t> side;
};
}
#endif // DECK_H
...@@ -163,6 +163,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -163,6 +163,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
return true; return true;
break; break;
} }
break;
} }
case irr::gui::EGET_BUTTON_CLICKED: { case irr::gui::EGET_BUTTON_CLICKED: {
soundManager.PlaySoundEffect(SOUND_BUTTON); soundManager.PlaySoundEffect(SOUND_BUTTON);
...@@ -1007,6 +1008,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -1007,6 +1008,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
InstantSearch(); InstantSearch();
break; break;
} }
break;
} }
case irr::gui::EGET_LISTBOX_CHANGED: { case irr::gui::EGET_LISTBOX_CHANGED: {
switch(id) { switch(id) {
......
...@@ -309,7 +309,6 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) { ...@@ -309,7 +309,6 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) {
} }
if(!reader) if(!reader)
return false; return false;
std::memset(deckBuffer, 0, sizeof deckBuffer);
int size = reader->read(deckBuffer, sizeof deckBuffer); int size = reader->read(deckBuffer, sizeof deckBuffer);
reader->drop(); reader->drop();
if (size >= (int)sizeof deckBuffer) { if (size >= (int)sizeof deckBuffer) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <sstream> #include <sstream>
#include "data_manager.h" #include "deck.h"
namespace ygo { namespace ygo {
...@@ -28,28 +28,6 @@ struct LFList { ...@@ -28,28 +28,6 @@ struct LFList {
std::wstring listName; std::wstring listName;
std::unordered_map<uint32_t, int> content; std::unordered_map<uint32_t, int> content;
}; };
struct Deck {
std::vector<code_pointer> main;
std::vector<code_pointer> extra;
std::vector<code_pointer> side;
Deck() = default;
Deck(const Deck& ndeck) {
main = ndeck.main;
extra = ndeck.extra;
side = ndeck.side;
}
void clear() {
main.clear();
extra.clear();
side.clear();
}
};
struct DeckArray {
std::vector<uint32_t> main;
std::vector<uint32_t> extra;
std::vector<uint32_t> side;
};
class DeckManager { class DeckManager {
public: public:
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <set> #include <set>
#include <random> #include <random>
#include "config.h" #include "config.h"
#include "deck_manager.h" #include "deck.h"
#include "network.h" #include "network.h"
namespace ygo { namespace ygo {
......
...@@ -907,8 +907,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -907,8 +907,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} else { } else {
if (select_continuous) if (select_continuous)
myswprintf(formatBuffer, L"%ls", dataManager.unknown_string); myswprintf(formatBuffer, L"%ls", dataManager.unknown_string);
else if (cant_check_grave && selectable_cards[i]->location == LOCATION_GRAVE) else if (cant_check_grave && selectable_cards[i + pos]->location == LOCATION_GRAVE)
myswprintf(formatBuffer, L"%ls", dataManager.FormatLocation(selectable_cards[i]->location, 0)); myswprintf(formatBuffer, L"%ls", dataManager.FormatLocation(selectable_cards[i + pos]->location, 0));
else if (selectable_cards[i + pos]->location == LOCATION_OVERLAY) else if (selectable_cards[i + pos]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(selectable_cards[i + pos]->overlayTarget), selectable_cards[i + pos]->overlayTarget->sequence + 1, selectable_cards[i + pos]->sequence + 1); dataManager.FormatLocation(selectable_cards[i + pos]->overlayTarget), selectable_cards[i + pos]->overlayTarget->sequence + 1, selectable_cards[i + pos]->sequence + 1);
......
...@@ -93,7 +93,8 @@ void ImageManager::ResizeTexture() { ...@@ -93,7 +93,8 @@ void ImageManager::ResizeTexture() {
irr::s32 bgWidth = 1024 * mainGame->xScale; irr::s32 bgWidth = 1024 * mainGame->xScale;
irr::s32 bgHeight = 640 * mainGame->yScale; irr::s32 bgHeight = 640 * mainGame->yScale;
driver->removeTexture(tCover[0]); driver->removeTexture(tCover[0]);
driver->removeTexture(tCover[1]); if(tCover[1] != tCover[0])
driver->removeTexture(tCover[1]);
tCover[0] = GetTextureFromFile("textures/cover.jpg", imgWidth, imgHeight); tCover[0] = GetTextureFromFile("textures/cover.jpg", imgWidth, imgHeight);
tCover[1] = GetTextureFromFile("textures/cover2.jpg", imgWidth, imgHeight); tCover[1] = GetTextureFromFile("textures/cover2.jpg", imgWidth, imgHeight);
if(!tCover[1]) if(!tCover[1])
...@@ -107,12 +108,14 @@ void ImageManager::ResizeTexture() { ...@@ -107,12 +108,14 @@ void ImageManager::ResizeTexture() {
tUnknownFit = GetTextureFromFile("textures/unknown.jpg", imgWidthFit, imgHeightFit); tUnknownFit = GetTextureFromFile("textures/unknown.jpg", imgWidthFit, imgHeightFit);
tUnknownThumb = GetTextureFromFile("textures/unknown.jpg", imgWidthThumb, imgHeightThumb); tUnknownThumb = GetTextureFromFile("textures/unknown.jpg", imgWidthThumb, imgHeightThumb);
driver->removeTexture(tBackGround); driver->removeTexture(tBackGround);
if(tBackGround_menu != tBackGround)
driver->removeTexture(tBackGround_menu);
if(tBackGround_deck != tBackGround)
driver->removeTexture(tBackGround_deck);
tBackGround = GetTextureFromFile("textures/bg.jpg", bgWidth, bgHeight); tBackGround = GetTextureFromFile("textures/bg.jpg", bgWidth, bgHeight);
driver->removeTexture(tBackGround_menu);
tBackGround_menu = GetTextureFromFile("textures/bg_menu.jpg", bgWidth, bgHeight); tBackGround_menu = GetTextureFromFile("textures/bg_menu.jpg", bgWidth, bgHeight);
if(!tBackGround_menu) if(!tBackGround_menu)
tBackGround_menu = tBackGround; tBackGround_menu = tBackGround;
driver->removeTexture(tBackGround_deck);
tBackGround_deck = GetTextureFromFile("textures/bg_deck.jpg", bgWidth, bgHeight); tBackGround_deck = GetTextureFromFile("textures/bg_deck.jpg", bgWidth, bgHeight);
if(!tBackGround_deck) if(!tBackGround_deck)
tBackGround_deck = tBackGround; tBackGround_deck = tBackGround;
......
...@@ -197,7 +197,7 @@ public: ...@@ -197,7 +197,7 @@ public:
//! \return Myself. //! \return Myself.
_Iter& operator-=(const difference_type v) { _Iter& operator-=(const difference_type v) {
if(v == 0) return *this; if(v == 0) return *this;
if(v > 0) return operator+=(v * -1); if(v < 0) return operator+=(-v);
if(pos == 0) if(pos == 0)
return *this; return *this;
......
...@@ -311,7 +311,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -311,7 +311,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
} }
for (size_t i = 0; i < replay.decks.size(); ++i) { for (size_t i = 0; i < replay.decks.size(); ++i) {
myswprintf(filename, L"./deck/%ls-%d %ls.ydk", replay_filename, i + 1, namebuf[i]); myswprintf(filename, L"./deck/%ls-%d %ls.ydk", replay_filename, i + 1, namebuf[i]);
DeckManager::SaveDeckArray(replay.decks[i], filename); replay.SaveDeck(i, filename);
} }
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
...@@ -356,6 +356,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -356,6 +356,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
NetServer::StopServer(); NetServer::StopServer();
break; break;
} }
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
#else #else
if(fork() == 0) { if(fork() == 0) {
usleep(100000); usleep(100000);
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define NOMINMAX #define NOMINMAX
#include <Windows.h> #include <Windows.h>
#include <shellapi.h>
class FileSystem { class FileSystem {
public: public:
...@@ -71,13 +72,18 @@ public: ...@@ -71,13 +72,18 @@ public:
} }
static bool DeleteDir(const wchar_t* wdir) { static bool DeleteDir(const wchar_t* wdir) {
wchar_t pdir[256]; size_t len = std::wcslen(wdir);
wchar_t pdir[1024 + 1]{};
if(len >= 1024)
return false;
BufferIO::CopyWideString(wdir, pdir); BufferIO::CopyWideString(wdir, pdir);
// pFrom must be double-null terminated for SHFileOperationW
// pdir[len] is already '\0' and pdir[len+1] is '\0' due to zero-init
SHFILEOPSTRUCTW lpFileOp{}; SHFILEOPSTRUCTW lpFileOp{};
lpFileOp.hwnd = nullptr; lpFileOp.hwnd = nullptr;
lpFileOp.wFunc = FO_DELETE; lpFileOp.wFunc = FO_DELETE;
lpFileOp.pFrom = pdir; lpFileOp.pFrom = pdir;
lpFileOp.pTo = 0; lpFileOp.pTo = nullptr;
lpFileOp.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT; lpFileOp.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;
return SHFileOperationW(&lpFileOp) == 0; return SHFileOperationW(&lpFileOp) == 0;
} }
...@@ -233,7 +239,8 @@ public: ...@@ -233,7 +239,8 @@ public:
int len = std::snprintf(fname, sizeof(fname), "%s/%s", path, dirp->d_name); int len = std::snprintf(fname, sizeof(fname), "%s/%s", path, dirp->d_name);
if (len < 0 || len >= (int)(sizeof fname)) if (len < 0 || len >= (int)(sizeof fname))
continue; continue;
stat(fname, &fileStat); if (stat(fname, &fileStat) != 0)
continue;
funit.filename = std::string(dirp->d_name); funit.filename = std::string(dirp->d_name);
funit.is_dir = S_ISDIR(fileStat.st_mode); funit.is_dir = S_ISDIR(fileStat.st_mode);
if(funit.is_dir && (std::strcmp(dirp->d_name, ".") == 0 || std::strcmp(dirp->d_name, "..") == 0)) if(funit.is_dir && (std::strcmp(dirp->d_name, ".") == 0 || std::strcmp(dirp->d_name, "..") == 0))
......
...@@ -13,6 +13,7 @@ event* NetServer::broadcast_ev = 0; ...@@ -13,6 +13,7 @@ event* NetServer::broadcast_ev = 0;
evconnlistener* NetServer::listener = 0; evconnlistener* NetServer::listener = 0;
DuelMode* NetServer::duel_mode = 0; DuelMode* NetServer::duel_mode = 0;
unsigned char NetServer::net_server_write[SIZE_NETWORK_BUFFER]; unsigned char NetServer::net_server_write[SIZE_NETWORK_BUFFER];
unsigned char NetServer::net_server_read[SIZE_NETWORK_BUFFER];
size_t NetServer::last_sent = 0; size_t NetServer::last_sent = 0;
bool NetServer::StartServer(unsigned short port) { bool NetServer::StartServer(unsigned short port) {
...@@ -126,7 +127,6 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) { ...@@ -126,7 +127,6 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
int len = evbuffer_get_length(input); int len = evbuffer_get_length(input);
if (len < 2) if (len < 2)
return; return;
unsigned char* net_server_read = new unsigned char[SIZE_NETWORK_BUFFER];
uint16_t packet_len = 0; uint16_t packet_len = 0;
while (len >= 2) { while (len >= 2) {
evbuffer_copyout(input, &packet_len, sizeof packet_len); evbuffer_copyout(input, &packet_len, sizeof packet_len);
...@@ -137,7 +137,6 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) { ...@@ -137,7 +137,6 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2); HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2);
len -= packet_len + 2; len -= packet_len + 2;
} }
delete[] net_server_read;
} }
void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) { void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) {
if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) {
......
...@@ -16,6 +16,7 @@ private: ...@@ -16,6 +16,7 @@ private:
static evconnlistener* listener; static evconnlistener* listener;
static DuelMode* duel_mode; static DuelMode* duel_mode;
static unsigned char net_server_write[SIZE_NETWORK_BUFFER]; static unsigned char net_server_write[SIZE_NETWORK_BUFFER];
static unsigned char net_server_read[SIZE_NETWORK_BUFFER];
static size_t last_sent; static size_t last_sent;
public: public:
......
#include "config.h" #include "config.h"
#include "replay.h" #include "replay.h"
#include "myfilesystem.h" #include "myfilesystem.h"
#include "deck_manager.h"
#include "lzma/LzmaLib.h" #include "lzma/LzmaLib.h"
namespace ygo { namespace ygo {
...@@ -220,6 +221,14 @@ void Replay::SkipInfo(){ ...@@ -220,6 +221,14 @@ void Replay::SkipInfo(){
bool Replay::IsReplaying() const { bool Replay::IsReplaying() const {
return is_replaying; return is_replaying;
} }
bool Replay::SaveDeck(size_t index, const wchar_t* filename) {
if(index >= decks.size())
return false;
DeckArray deck = decks[index];
std::reverse(deck.main.begin(), deck.main.end());
std::reverse(deck.extra.begin(), deck.extra.end());
return DeckManager::SaveDeckArray(deck, filename);
}
bool Replay::ReadInfo() { bool Replay::ReadInfo() {
int player_count = (pheader.base.flag & REPLAY_TAG) ? 4 : 2; int player_count = (pheader.base.flag & REPLAY_TAG) ? 4 : 2;
for (int i = 0; i < player_count; ++i) { for (int i = 0; i < player_count; ++i) {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include "../ocgcore/ocgapi.h" #include "../ocgcore/ocgapi.h"
#include "deck_manager.h" #include "deck.h"
namespace ygo { namespace ygo {
...@@ -96,6 +96,7 @@ public: ...@@ -96,6 +96,7 @@ public:
void Reset(); void Reset();
void SkipInfo(); void SkipInfo();
bool IsReplaying() const; bool IsReplaying() const;
bool SaveDeck(size_t index, const wchar_t* filename);
FILE* fp{ nullptr }; FILE* fp{ nullptr };
ExtendedReplayHeader pheader; ExtendedReplayHeader pheader;
......
...@@ -399,14 +399,10 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -399,14 +399,10 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
pplayer[0] = players[0]; pplayer[0] = players[0];
pplayer[1] = players[1]; pplayer[1] = players[1];
if((tp && dp->type == 1) || (!tp && dp->type == 0)) { if((tp && dp->type == 1) || (!tp && dp->type == 0)) {
DuelPlayer* p = players[0]; std::swap(players[0], players[1]);
players[0] = players[1];
players[1] = p;
players[0]->type = 0; players[0]->type = 0;
players[1]->type = 1; players[1]->type = 1;
Deck d = pdeck[0]; std::swap(pdeck[0], pdeck[1]);
pdeck[0] = pdeck[1];
pdeck[1] = d;
swapped = true; swapped = true;
} }
dp->state = CTOS_RESPONSE; dp->state = CTOS_RESPONSE;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include <set> #include <set>
#include "network.h" #include "network.h"
#include "deck_manager.h" #include "deck.h"
#include "replay.h" #include "replay.h"
namespace ygo { namespace ygo {
...@@ -17,7 +17,7 @@ public: ...@@ -17,7 +17,7 @@ public:
void LeaveGame(DuelPlayer* dp) override; void LeaveGame(DuelPlayer* dp) override;
void ToDuelist(DuelPlayer* dp) override; void ToDuelist(DuelPlayer* dp) override;
void ToObserver(DuelPlayer* dp) override; void ToObserver(DuelPlayer* dp) override;
void PlayerReady(DuelPlayer* dp, bool ready) override; void PlayerReady(DuelPlayer* dp, bool is_ready) override;
void PlayerKick(DuelPlayer* dp, unsigned char pos) override; void PlayerKick(DuelPlayer* dp, unsigned char pos) override;
void UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) override; void UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) override;
void StartDuel(DuelPlayer* dp) override; void StartDuel(DuelPlayer* dp) override;
......
...@@ -247,7 +247,6 @@ bool SingleMode::SinglePlayAnalyze(unsigned char* msg, unsigned int len) { ...@@ -247,7 +247,6 @@ bool SingleMode::SinglePlayAnalyze(unsigned char* msg, unsigned int len) {
case MSG_SELECT_EFFECTYN: { case MSG_SELECT_EFFECTYN: {
player = BufferIO::Read<uint8_t>(pbuf); player = BufferIO::Read<uint8_t>(pbuf);
pbuf += 12; pbuf += 12;
DuelClient::ClientAnalyze(offset, pbuf - offset);
if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) { if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) {
mainGame->singleSignal.Reset(); mainGame->singleSignal.Reset();
mainGame->singleSignal.Wait(); mainGame->singleSignal.Wait();
......
...@@ -257,7 +257,7 @@ bool SoundManager::IsPlayingMusic(wchar_t* music) { ...@@ -257,7 +257,7 @@ bool SoundManager::IsPlayingMusic(wchar_t* music) {
if(music) { if(music) {
return !mywcsncasecmp(currentPlayingMusic, music, 1024) && ma_sound_is_playing(&soundBGM); return !mywcsncasecmp(currentPlayingMusic, music, 1024) && ma_sound_is_playing(&soundBGM);
} else { } else {
return ma_sound_is_playing(&soundBGM); return currentPlayingMusic[0] && ma_sound_is_playing(&soundBGM);
} }
#endif #endif
#ifdef YGOPRO_USE_IRRKLANG #ifdef YGOPRO_USE_IRRKLANG
......
...@@ -143,7 +143,6 @@ void TagDuel::LeaveGame(DuelPlayer* dp) { ...@@ -143,7 +143,6 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_CHANGE, scpc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
NetServer::DisconnectPlayer(dp);
} else if(duel_stage != DUEL_STAGE_END) { } else if(duel_stage != DUEL_STAGE_END) {
EndDuel(); EndDuel();
DuelEndProc(); DuelEndProc();
...@@ -228,7 +227,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -228,7 +227,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
unsigned int deckerror = 0; unsigned int deckerror = 0;
if(!host_info.no_check_deck) { if(!host_info.no_check_deck) {
if(deck_error[dp->type]) { if(deck_error[dp->type]) {
deckerror = (DECKERROR_UNKNOWNCARD << 28) + deck_error[dp->type]; deckerror = (DECKERROR_UNKNOWNCARD << 28) | deck_error[dp->type];
} else { } else {
deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, host_info.rule); deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, host_info.rule);
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include <set> #include <set>
#include "network.h" #include "network.h"
#include "deck_manager.h" #include "deck.h"
#include "replay.h" #include "replay.h"
namespace ygo { namespace ygo {
...@@ -17,7 +17,7 @@ public: ...@@ -17,7 +17,7 @@ public:
void LeaveGame(DuelPlayer* dp) override; void LeaveGame(DuelPlayer* dp) override;
void ToDuelist(DuelPlayer* dp) override; void ToDuelist(DuelPlayer* dp) override;
void ToObserver(DuelPlayer* dp) override; void ToObserver(DuelPlayer* dp) override;
void PlayerReady(DuelPlayer* dp, bool ready) override; void PlayerReady(DuelPlayer* dp, bool is_ready) override;
void PlayerKick(DuelPlayer* dp, unsigned char pos) override; void PlayerKick(DuelPlayer* dp, unsigned char pos) override;
void UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) override; void UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) override;
void StartDuel(DuelPlayer* dp) override; void StartDuel(DuelPlayer* dp) override;
......
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