Commit 292a50d9 authored by nanahira's avatar nanahira

Merge branch 'server' of https://github.com/purerosefallen/ygopro

parents 7c423440 cda071c5
No preview for this file type
...@@ -12,11 +12,21 @@ public: ...@@ -12,11 +12,21 @@ public:
p += 4; p += 4;
return ret; return ret;
} }
inline static unsigned int ReadUInt32(char*& p) {
unsigned int ret = *(unsigned int*)p;
p += 4;
return ret;
}
inline static short ReadInt16(char*& p) { inline static short ReadInt16(char*& p) {
short ret = *(short*)p; short ret = *(short*)p;
p += 2; p += 2;
return ret; return ret;
} }
inline static unsigned short ReadUInt16(char*& p) {
unsigned short ret = *(unsigned short*)p;
p += 2;
return ret;
}
inline static char ReadInt8(char*& p) { inline static char ReadInt8(char*& p) {
char ret = *(char*)p; char ret = *(char*)p;
p++; p++;
......
...@@ -31,12 +31,14 @@ mtrandom DuelClient::rnd; ...@@ -31,12 +31,14 @@ mtrandom DuelClient::rnd;
bool DuelClient::is_refreshing = false; bool DuelClient::is_refreshing = false;
int DuelClient::match_kill = 0; int DuelClient::match_kill = 0;
std::vector<HostPacket> DuelClient::hosts; std::vector<HostPacket> DuelClient::hosts;
std::vector<std::wstring> DuelClient::hosts_srvpro;
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 int DuelClient::temp_ip = 0;
unsigned short DuelClient::temp_port = 0; unsigned short DuelClient::temp_port = 0;
unsigned short DuelClient::temp_ver = 0; unsigned short DuelClient::temp_ver = 0;
bool DuelClient::try_needed = false; bool DuelClient::try_needed = false;
bool DuelClient::is_srvpro = 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)
...@@ -357,6 +359,62 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -357,6 +359,62 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
} }
break; break;
} }
case STOC_SRVPRO_ROOMLIST: {
is_srvpro = true;
mainGame->gMutex.Lock();
mainGame->lstHostList->clear();
hosts_srvpro.clear();
unsigned short count = BufferIO::ReadUInt16(pdata);
char temp1[64];
char temp2[128];
for(unsigned short i = 0; i < count; ++i) {
wchar_t roomname[32];
wchar_t player1[64];
wchar_t player2[64];
wchar_t hoststr[1024];
memcpy(temp1, pdata, 64);
pdata += 64;
BufferIO::DecodeUTF8(temp1, roomname);
unsigned char room_status = BufferIO::ReadUInt8(pdata);
char room_duel_count = BufferIO::ReadInt8(pdata);
char room_turn_count = BufferIO::ReadInt8(pdata);
memcpy(temp2, pdata, 128);
pdata += 128;
BufferIO::DecodeUTF8(temp2, player1);
char player1_score = BufferIO::ReadInt8(pdata);
int player1_lp = BufferIO::ReadInt32(pdata);
memcpy(temp2, pdata, 128);
pdata += 128;
BufferIO::DecodeUTF8(temp2, player2);
char player2_score = BufferIO::ReadInt8(pdata);
int player2_lp = BufferIO::ReadInt32(pdata);
hosts_srvpro.push_back(std::wstring(roomname));
switch(room_status) {
case 0: {
myswprintf(hoststr, L"[SRVPro][Waiting][%ls] %ls VS %ls", roomname, player1, player2);
break;
}
case 1: {
myswprintf(hoststr, L"[SRVPro][G%d,T%d][%ls] (%d,LP%d) %ls VS %ls (%d,LP%d)", room_duel_count, room_turn_count, roomname, player1_score, player1_lp, player1, player2, player2_score, player2_lp);
break;
}
case 2: {
myswprintf(hoststr, L"[SRVPro][G%d,Siding][%ls] (%d) %ls VS %ls (%d)", room_duel_count, roomname, player1_score, player1, player2, player2_score);
break;
}
}
mainGame->lstHostList->addItem(hoststr);
}
mainGame->gMutex.Unlock();
break;
}
case STOC_SELECT_HAND: { case STOC_SELECT_HAND: {
mainGame->wHand->setVisible(true); mainGame->wHand->setVisible(true);
break; break;
...@@ -3922,6 +3980,7 @@ void DuelClient::BeginRefreshHost() { ...@@ -3922,6 +3980,7 @@ void DuelClient::BeginRefreshHost() {
if(is_refreshing) if(is_refreshing)
return; return;
is_refreshing = true; is_refreshing = true;
DuelClient::is_srvpro = false;
mainGame->btnLanRefresh->setEnabled(false); mainGame->btnLanRefresh->setEnabled(false);
mainGame->lstHostList->clear(); mainGame->lstHostList->clear();
remotes.clear(); remotes.clear();
......
...@@ -79,6 +79,8 @@ protected: ...@@ -79,6 +79,8 @@ protected:
static std::set<unsigned int> remotes; static std::set<unsigned int> remotes;
public: public:
static std::vector<HostPacket> hosts; static std::vector<HostPacket> hosts;
static std::vector<std::wstring> hosts_srvpro;
static bool is_srvpro;
static void BeginRefreshHost(); static void BeginRefreshHost();
static int RefreshThread(void* arg); static int RefreshThread(void* arg);
static void BroadcastReply(evutil_socket_t fd, short events, void* arg); static void BroadcastReply(evutil_socket_t fd, short events, void* arg);
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <regex> #include <regex>
#endif //YGOPRO_SERVER_MODE #endif //YGOPRO_SERVER_MODE
unsigned short PRO_VERSION = 0x1347; unsigned short PRO_VERSION = 0x1348;
namespace ygo { namespace ygo {
......
...@@ -456,6 +456,10 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -456,6 +456,10 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
int sel = mainGame->lstHostList->getSelected(); int sel = mainGame->lstHostList->getSelected();
if(sel == -1) if(sel == -1)
break; break;
if(DuelClient::is_srvpro) {
mainGame->ebJoinPass->setText(DuelClient::hosts_srvpro[sel].c_str());
break;
}
int addr = DuelClient::hosts[sel].ipaddr; int addr = DuelClient::hosts[sel].ipaddr;
int port = DuelClient::hosts[sel].port; int port = DuelClient::hosts[sel].port;
wchar_t buf[20]; wchar_t buf[20];
......
...@@ -208,6 +208,7 @@ public: ...@@ -208,6 +208,7 @@ public:
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
#define STOC_FIELD_FINISH 0x30 #define STOC_FIELD_FINISH 0x30
#endif #endif
#define STOC_SRVPRO_ROOMLIST 0x31
#define PLAYERCHANGE_OBSERVE 0x8 #define PLAYERCHANGE_OBSERVE 0x8
#define PLAYERCHANGE_READY 0x9 #define PLAYERCHANGE_READY 0x9
......
1 ICON "ygopro.ico" 1 ICON "ygopro.ico"
1 VERSIONINFO 1 VERSIONINFO
FILEVERSION 1, 0, 34, 7 FILEVERSION 1, 0, 34, 8
PRODUCTVERSION 1, 0, 34, 7 PRODUCTVERSION 1, 0, 34, 8
FILEOS 0x4 FILEOS 0x4
FILETYPE 0x1 FILETYPE 0x1
...@@ -16,8 +16,8 @@ VALUE "InternalName", "YGOPRO Server Mode" ...@@ -16,8 +16,8 @@ VALUE "InternalName", "YGOPRO Server Mode"
VALUE "LegalCopyright", "Copyright (C) 2018 Nanahira" VALUE "LegalCopyright", "Copyright (C) 2018 Nanahira"
VALUE "OriginalFilename", "ygopro.exe" VALUE "OriginalFilename", "ygopro.exe"
VALUE "ProductName", "YGOPRO Server Mode" VALUE "ProductName", "YGOPRO Server Mode"
VALUE "FileVersion", "1.034.7.Koishi" VALUE "FileVersion", "1.034.8.Koishi"
VALUE "ProductVersion", "1.034.7.Koishi" VALUE "ProductVersion", "1.034.8.Koishi"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
......
...@@ -755,7 +755,7 @@ ...@@ -755,7 +755,7 @@
!setname 0x82 怒怒怒 ドドド !setname 0x82 怒怒怒 ドドド
!setname 0x83 机关傀儡 ギミック・パペット !setname 0x83 机关傀儡 ギミック・パペット
!setname 0x84 燃烧拳击手 BK(バーニングナックラー) !setname 0x84 燃烧拳击手 BK(バーニングナックラー)
!setname 0x85 超级防机器人 SDロボ !setname 0x85 超级防机器人 SDロボ
!setname 0x86 光天使 !setname 0x86 光天使
!setname 0x87 阴影 アンブラル !setname 0x87 阴影 アンブラル
!setname 0x88 武神 !setname 0x88 武神
...@@ -833,6 +833,7 @@ ...@@ -833,6 +833,7 @@
!setname 0xbf 灵使 霊使い !setname 0xbf 灵使 霊使い
!setname 0xc0 凭依装着 憑依装着 !setname 0xc0 凭依装着 憑依装着
!setname 0xc1 PSY骨架 PSYフレーム !setname 0xc1 PSY骨架 PSYフレーム
!setname 0x10c1 PSY骨架装备 PSYフレームギア
!setname 0xc2 动力工具 パワー・ツール !setname 0xc2 动力工具 パワー・ツール
!setname 0xc3 锋利小鬼 エッジインプ !setname 0xc3 锋利小鬼 エッジインプ
!setname 0xc4 神数 セフィラ !setname 0xc4 神数 セフィラ
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#nickname & gamename should be less than 20 characters #nickname & gamename should be less than 20 characters
use_d3d = 0 use_d3d = 0
use_image_scale = 1 use_image_scale = 1
pro_version = 4935 pro_version = 4936
antialias = 2 antialias = 2
errorlog = 3 errorlog = 3
nickname = Komeiji Koishi nickname = Komeiji Koishi
......
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