Commit 22e2b886 authored by edo9300's avatar edo9300

Local sync

parent ff3a669e
...@@ -72,7 +72,7 @@ using namespace video; ...@@ -72,7 +72,7 @@ using namespace video;
using namespace io; using namespace io;
using namespace gui; using namespace gui;
extern const unsigned short PRO_VERSION; extern unsigned short PRO_VERSION;
extern int enable_log; extern int enable_log;
extern bool exit_on_return; extern bool exit_on_return;
extern bool open_file; extern bool open_file;
......
...@@ -80,6 +80,7 @@ void DeckBuilder::Initialize() { ...@@ -80,6 +80,7 @@ void DeckBuilder::Initialize() {
is_draging = false; is_draging = false;
prev_deck = mainGame->cbDBDecks->getSelected(); prev_deck = mainGame->cbDBDecks->getSelected();
prev_operation = 0; prev_operation = 0;
shiftpress = false;
mainGame->device->setEventReceiver(this); mainGame->device->setEventReceiver(this);
} }
void DeckBuilder::Terminate() { void DeckBuilder::Terminate() {
...@@ -295,12 +296,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -295,12 +296,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::gui::EGET_EDITBOX_ENTER: { case irr::gui::EGET_EDITBOX_ENTER: {
switch(id) { switch(id) {
case EDITBOX_KEYWORD: { case EDITBOX_KEYWORD: {
irr::SEvent me; StartFilter();
me.EventType = irr::EET_GUI_EVENT;
me.GUIEvent.EventType = irr::gui::EGET_BUTTON_CLICKED;
me.GUIEvent.Caller = mainGame->btnStartFilter;
me.GUIEvent.Element = mainGame->btnStartFilter;
mainGame->device->postEventFromUser(me);
break; break;
} }
} }
...@@ -564,10 +560,14 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -564,10 +560,14 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
auto pointer = dataManager.GetCodePointer(hovered_code); auto pointer = dataManager.GetCodePointer(hovered_code);
if(pointer == dataManager._datas.end()) if(pointer == dataManager._datas.end())
break; break;
if(!check_limit(pointer)) if(shiftpress)
break;
if(!push_extra(pointer) && !push_main(pointer))
push_side(pointer); push_side(pointer);
else {
if (!check_limit(pointer))
break;
if (!push_extra(pointer) && !push_main(pointer))
push_side(pointer);
}
} }
} else { } else {
if(click_pos == 1) { if(click_pos == 1) {
...@@ -634,6 +634,15 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -634,6 +634,15 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case irr::EET_KEY_INPUT_EVENT: { case irr::EET_KEY_INPUT_EVENT: {
switch (event.KeyInput.Key) {
case irr::KEY_SHIFT:
case irr::KEY_LSHIFT:
case irr::KEY_RSHIFT: {
shiftpress = event.KeyInput.PressedDown;
return true;
break;
}
}
break; break;
} }
default: break; default: break;
......
...@@ -60,6 +60,7 @@ public: ...@@ -60,6 +60,7 @@ public:
code_pointer draging_pointer; code_pointer draging_pointer;
int prev_deck; int prev_deck;
s32 prev_operation; s32 prev_operation;
bool shiftpress;
std::unordered_map<int, int>* filterList; std::unordered_map<int, int>* filterList;
std::vector<code_pointer> results; std::vector<code_pointer> results;
......
...@@ -1363,12 +1363,18 @@ void Game::DrawDeckBd() { ...@@ -1363,12 +1363,18 @@ void Game::DrawDeckBd() {
textFont->draw(ptype, mainGame->Resize(859, 186 + i * 66, 955, 207 + i * 66), 0xff000000, false, false); textFont->draw(ptype, mainGame->Resize(859, 186 + i * 66, 955, 207 + i * 66), 0xff000000, false, false);
textFont->draw(ptype, mainGame->Resize(860, 187 + i * 66, 955, 207 + i * 66), 0xffffffff, false, false); textFont->draw(ptype, mainGame->Resize(860, 187 + i * 66, 955, 207 + i * 66), 0xffffffff, false, false);
textBuffer[0] = 0; textBuffer[0] = 0;
if((ptr->second.ot & 0x3) == 1) if((ptr->second.ot & 0x3f) == 1)
wcscat(textBuffer, L"[OCG]"); wcscat(textBuffer, L" [OCG]");
else if((ptr->second.ot & 0x3) == 2) else if((ptr->second.ot & 0x3f) == 2)
wcscat(textBuffer, L"[TCG]"); wcscat(textBuffer, L" [TCG]");
else if((ptr->second.ot & 0x7) == 4) else if((ptr->second.ot & 0x3f) == 4)
wcscat(textBuffer, L"[Anime]"); wcscat(textBuffer, L" [Anime]");
else if((ptr->second.ot & 0x3f) == 8)
wcscat(textBuffer, L" [Illegal]");
else if((ptr->second.ot & 0x3f) == 16)
wcscat(textBuffer, L" [VG]");
else if((ptr->second.ot & 0x3f) == 32)
wcscat(textBuffer, L" [Custom]");
textFont->draw(textBuffer, mainGame->Resize(859, 208 + i * 66, 955, 229 + i * 66), 0xff000000, false, false); textFont->draw(textBuffer, mainGame->Resize(859, 208 + i * 66, 955, 229 + i * 66), 0xff000000, false, false);
textFont->draw(textBuffer, mainGame->Resize(860, 209 + i * 66, 955, 229 + i * 66), 0xffffffff, false, false); textFont->draw(textBuffer, mainGame->Resize(860, 209 + i * 66, 955, 229 + i * 66), 0xffffffff, false, false);
} }
......
...@@ -32,6 +32,11 @@ std::vector<HostPacket> DuelClient::hosts; ...@@ -32,6 +32,11 @@ std::vector<HostPacket> DuelClient::hosts;
std::set<unsigned int> DuelClient::remotes; std::set<unsigned int> DuelClient::remotes;
event* DuelClient::resp_event = 0; event* DuelClient::resp_event = 0;
unsigned int DuelClient::temp_ip = 0;
unsigned short DuelClient::temp_port = 0;
unsigned short DuelClient::temp_ver = 0;
bool DuelClient::try_needed = false;
bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_game) { bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_game) {
if(connect_state) if(connect_state)
return false; return false;
...@@ -45,6 +50,8 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g ...@@ -45,6 +50,8 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g
sin.sin_port = htons(port); sin.sin_port = htons(port);
client_bev = bufferevent_socket_new(client_base, -1, BEV_OPT_CLOSE_ON_FREE); client_bev = bufferevent_socket_new(client_base, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(client_bev, ClientRead, NULL, ClientEvent, (void*)create_game); bufferevent_setcb(client_bev, ClientRead, NULL, ClientEvent, (void*)create_game);
temp_ip = ip;
temp_port = port;
if (bufferevent_socket_connect(client_bev, (sockaddr*)&sin, sizeof(sin)) < 0) { if (bufferevent_socket_connect(client_bev, (sockaddr*)&sin, sizeof(sin)) < 0) {
bufferevent_free(client_bev); bufferevent_free(client_bev);
event_base_free(client_base); event_base_free(client_base);
...@@ -66,6 +73,7 @@ void DuelClient::ConnectTimeout(evutil_socket_t fd, short events, void* arg) { ...@@ -66,6 +73,7 @@ void DuelClient::ConnectTimeout(evutil_socket_t fd, short events, void* arg) {
if(connect_state == 0x7) if(connect_state == 0x7)
return; return;
if(!is_closing) { if(!is_closing) {
temp_ver = 0;
mainGame->btnCreateHost->setEnabled(true); mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true); mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnJoinCancel->setEnabled(true);
...@@ -145,7 +153,10 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -145,7 +153,10 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
SendPacketToServer(CTOS_CREATE_GAME, cscg); SendPacketToServer(CTOS_CREATE_GAME, cscg);
} else { } else {
CTOS_JoinGame csjg; CTOS_JoinGame csjg;
csjg.version = PRO_VERSION; if (temp_ver)
csjg.version = temp_ver;
else
csjg.version = PRO_VERSION;
csjg.gameid = 0; csjg.gameid = 0;
BufferIO::CopyWStr(mainGame->ebJoinPass->getText(), csjg.pass, 20); BufferIO::CopyWStr(mainGame->ebJoinPass->getText(), csjg.pass, 20);
SendPacketToServer(CTOS_JOIN_GAME, csjg); SendPacketToServer(CTOS_JOIN_GAME, csjg);
...@@ -156,6 +167,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -156,6 +167,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
bufferevent_disable(bev, EV_READ); bufferevent_disable(bev, EV_READ);
if(!is_closing) { if(!is_closing) {
if(connect_state == 0x1) { if(connect_state == 0x1) {
temp_ver = 0;
mainGame->btnCreateHost->setEnabled(true); mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true); mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnJoinCancel->setEnabled(true);
...@@ -221,6 +233,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -221,6 +233,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
STOC_ErrorMsg* pkt = (STOC_ErrorMsg*)pdata; STOC_ErrorMsg* pkt = (STOC_ErrorMsg*)pdata;
switch(pkt->msg) { switch(pkt->msg) {
case ERRMSG_JOINERROR: { case ERRMSG_JOINERROR: {
temp_ver = 0;
mainGame->btnCreateHost->setEnabled(true); mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true); mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnJoinCancel->setEnabled(true);
...@@ -256,15 +269,22 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -256,15 +269,22 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
break; break;
} }
case ERRMSG_VERERROR: { case ERRMSG_VERERROR: {
mainGame->btnCreateHost->setEnabled(true); if (temp_ver) {
mainGame->btnJoinHost->setEnabled(true); temp_ver = 0;
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnCreateHost->setEnabled(true);
mainGame->gMutex.Lock(); mainGame->btnJoinHost->setEnabled(true);
wchar_t msgbuf[256]; mainGame->btnJoinCancel->setEnabled(true);
myswprintf(msgbuf, dataManager.GetSysString(1411), pkt->code >> 12, (pkt->code >> 4) & 0xff, pkt->code & 0xf); mainGame->gMutex.Lock();
mainGame->env->addMessageBox(L"", msgbuf); wchar_t msgbuf[256];
mainGame->gMutex.Unlock(); myswprintf(msgbuf, dataManager.GetSysString(1411), pkt->code >> 12, (pkt->code >> 4) & 0xff, pkt->code & 0xf);
event_base_loopbreak(client_base); mainGame->env->addMessageBox(L"", msgbuf);
mainGame->gMutex.Unlock();
event_base_loopbreak(client_base);
} else {
event_base_loopbreak(client_base);
temp_ver = pkt->code;
try_needed = true;
}
break; break;
} }
} }
...@@ -334,6 +354,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -334,6 +354,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
break; break;
} }
case STOC_JOIN_GAME: { case STOC_JOIN_GAME: {
temp_ver = 0;
STOC_JoinGame* pkt = (STOC_JoinGame*)pdata; STOC_JoinGame* pkt = (STOC_JoinGame*)pdata;
std::wstring str; std::wstring str;
std::wstring str2; std::wstring str2;
...@@ -3808,7 +3829,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void * arg) { ...@@ -3808,7 +3829,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void * arg) {
/*int ret = */recvfrom(fd, buf, 256, 0, (sockaddr*)&bc_addr, &sz); /*int ret = */recvfrom(fd, buf, 256, 0, (sockaddr*)&bc_addr, &sz);
unsigned int ipaddr = bc_addr.sin_addr.s_addr; unsigned int ipaddr = bc_addr.sin_addr.s_addr;
HostPacket* pHP = (HostPacket*)buf; HostPacket* pHP = (HostPacket*)buf;
if(!is_closing && pHP->identifier == NETWORK_SERVER_ID/* && pHP->version == PRO_VERSION*/ && remotes.find(ipaddr) == remotes.end() ) { if(!is_closing && pHP->identifier == NETWORK_SERVER_ID && remotes.find(ipaddr) == remotes.end() ) {
wchar_t msgbuf[256]; wchar_t msgbuf[256];
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
remotes.insert(ipaddr); remotes.insert(ipaddr);
......
...@@ -33,6 +33,11 @@ private: ...@@ -33,6 +33,11 @@ private:
static wchar_t event_string[256]; static wchar_t event_string[256];
static mtrandom rnd; static mtrandom rnd;
public: public:
static unsigned int temp_ip;
static unsigned short temp_port;
static unsigned short temp_ver;
static bool try_needed;
static bool StartClient(unsigned int ip, unsigned short port, bool create_game = true); static bool StartClient(unsigned int ip, unsigned short port, bool create_game = true);
static void ConnectTimeout(evutil_socket_t fd, short events, void* arg); static void ConnectTimeout(evutil_socket_t fd, short events, void* arg);
static void StopClient(bool is_exiting = false); static void StopClient(bool is_exiting = false);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <dirent.h> #include <dirent.h>
#endif #endif
const unsigned short PRO_VERSION = 0x133D; unsigned short PRO_VERSION = 0x133D;
namespace ygo { namespace ygo {
...@@ -751,6 +751,10 @@ void Game::MainLoop() { ...@@ -751,6 +751,10 @@ void Game::MainLoop() {
if(dInfo.time_left[dInfo.time_player]) if(dInfo.time_left[dInfo.time_player])
dInfo.time_left[dInfo.time_player]--; dInfo.time_left[dInfo.time_player]--;
} }
if (DuelClient::try_needed) {
DuelClient::try_needed = false;
DuelClient::StartClient(DuelClient::temp_ip, DuelClient::temp_port, false);
}
} }
DuelClient::StopClient(true); DuelClient::StopClient(true);
if(dInfo.isSingleMode) if(dInfo.isSingleMode)
...@@ -1052,6 +1056,8 @@ void Game::LoadConfig() { ...@@ -1052,6 +1056,8 @@ void Game::LoadConfig() {
} else if(!strcmp(strbuf, "roompass")) { } else if(!strcmp(strbuf, "roompass")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.roompass, 20); BufferIO::CopyWStr(wstr, gameConf.roompass, 20);
} else if(!strcmp(strbuf, "game_version")) {
PRO_VERSION = atoi(valbuf);
} else if(!strcmp(strbuf, "automonsterpos")) { } else if(!strcmp(strbuf, "automonsterpos")) {
gameConf.chkMAutoPos = atoi(valbuf); gameConf.chkMAutoPos = atoi(valbuf);
} else if(!strcmp(strbuf, "autospellpos")) { } else if(!strcmp(strbuf, "autospellpos")) {
...@@ -1122,6 +1128,7 @@ void Game::SaveConfig() { ...@@ -1122,6 +1128,7 @@ void Game::SaveConfig() {
fprintf(fp, "lasthost = %s\n", linebuf); fprintf(fp, "lasthost = %s\n", linebuf);
BufferIO::EncodeUTF8(gameConf.lastport, linebuf); BufferIO::EncodeUTF8(gameConf.lastport, linebuf);
fprintf(fp, "lastport = %s\n", linebuf); fprintf(fp, "lastport = %s\n", linebuf);
fprintf(fp, "game_version = %d\n", PRO_VERSION);
//settings //settings
fprintf(fp, "automonsterpos = %d\n", ((chkMAutoPos->isChecked()) ? 1 : 0)); fprintf(fp, "automonsterpos = %d\n", ((chkMAutoPos->isChecked()) ? 1 : 0));
fprintf(fp, "autospellpos = %d\n", ((chkSTAutoPos->isChecked()) ? 1 : 0)); fprintf(fp, "autospellpos = %d\n", ((chkSTAutoPos->isChecked()) ? 1 : 0));
......
...@@ -179,8 +179,12 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) { ...@@ -179,8 +179,12 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) {
auto tit = tMap[fit ? 1 : 0].find(code); auto tit = tMap[fit ? 1 : 0].find(code);
if(tit == tMap[fit ? 1 : 0].end()) { if(tit == tMap[fit ? 1 : 0].end()) {
char file[256]; char file[256];
sprintf(file, "expansions/pics/%d.jpg", code); sprintf(file, "expansions/pics/%d.png", code);
irr::video::ITexture* img = GetTextureFromFile(file, width, height); irr::video::ITexture* img = GetTextureFromFile(file, width, height);
if(img == NULL) {
sprintf(file, "expansions/pics/%d.jpg", code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/%d.png", code); sprintf(file, "pics/%d.png", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
...@@ -205,18 +209,18 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) { ...@@ -205,18 +209,18 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
int height = CARD_THUMB_HEIGHT * mainGame->window_size.Height / 640; int height = CARD_THUMB_HEIGHT * mainGame->window_size.Height / 640;
if(tit == tThumb.end()) { if(tit == tThumb.end()) {
char file[256]; char file[256];
sprintf(file, "expansions/pics/%d.jpg", code); sprintf(file, "expansions/pics/%d.png", code);
irr::video::ITexture* img = GetTextureFromFile(file, width, height); irr::video::ITexture* img = GetTextureFromFile(file, width, height);
if(img == NULL) { if(img == NULL) {
sprintf(file, "expansions/pics/%d.png", code); sprintf(file, "expansions/pics/%d.jpg", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/%d.jpg", code); sprintf(file, "pics/%d.png", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/%d.png", code); sprintf(file, "pics/%d.jpg", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) { if(img == NULL) {
......
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