Commit 22e2b886 authored by edo9300's avatar edo9300

Local sync

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