Commit 09ded696 authored by mercury233's avatar mercury233

merge

parent c6c9201d
/expansions /expansions
/specials
/obj /obj
/bin /bin
/build /build
/event
/lua
/sqlite3
/replay /replay
/deck /deck
/.vscode
/gframe/ygopro.ico
/gframe/ygopro.rc
/gframe/ygopro.aps
/gframe/dirent.h
ygopro ygopro
premake5.exe
[submodule "ocgcore"] [submodule "ocgcore"]
path = ocgcore path = ocgcore
url = https://github.com/Fluorohydride/ygopro-core.git url = https://github.com/mycard/ygopro-core
[submodule "script"] [submodule "script"]
path = script path = script
url = https://github.com/Fluorohydride/ygopro-scripts.git url = https://github.com/mycard/ygopro-scripts
## ygopro(server) ## ygopro(server)
一个linux版的ygopro服务端。 一个linux版的ygopro服务端,基于mycard代码修改。
现用于[YGOPRO 233服](http://mercury233.me/ygosrv233/)
###编译 ###编译
* 需要以下组件 * 需要以下组件或工具
* gcc
* premake4 * premake4
* libevent * libevent
* sqlite3 * sqlite3
* lua5.2 * lua5.2
* gcc
* 可参考 https://github.com/mercury233/ygopro-server/wiki 中的脚本 * 可参考 https://github.com/mercury233/ygopro-server/wiki 中的脚本
###运行 ###运行
* 使用[ygopro-server-lite](https://github.com/mercury233/ygopro-server)运行 * 使用[ygopro-server-lite](https://github.com/mercury233/ygopro-server)运行
* 手动运行的参数是 * 手动运行的参数是
* ./ygopro 0 0 0 1 F F F 8000 5 1 180 * ./ygopro 0 0 0 1 F F F 8000 5 1 180 0
* 端口(0为随机) * 端口(0为随机)
* 禁卡表编号 * 禁卡表编号
* 卡片允许 * 卡片允许
...@@ -25,3 +27,4 @@ ...@@ -25,3 +27,4 @@
* 初始手牌数 * 初始手牌数
* 每回合抽卡 * 每回合抽卡
* 每回合时间 * 每回合时间
* 录像保存模式
version: '{build}'
install:
- git submodule update --init --recursive
# environment and system dependency
- appveyor DownloadFile https://github.com/premake/premake-core/releases/download/v5.0.0-alpha10/premake-5.0.0-alpha10-windows.zip
- 7z x premake-5.0.0-alpha10-windows.zip
- appveyor DownloadFile https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
- tar xf libevent-2.0.22-stable.tar.gz
- move libevent-2.0.22-stable event
- xcopy /E event\WIN32-Code event\include
- appveyor DownloadFile https://www.lua.org/ftp/lua-5.2.4.tar.gz
- tar xf lua-5.2.4.tar.gz
- move lua-5.2.4\src lua
- appveyor DownloadFile https://www.sqlite.org/2016/sqlite-amalgamation-3150200.zip
- 7z x sqlite-amalgamation-3150200.zip
- move sqlite-amalgamation-3150200 sqlite3
- appveyor DownloadFile https://github.com/tronkko/dirent/raw/master/include/dirent.h
- move dirent.h gframe\
# let premake happy
- xcopy /E premake\* .
# premake
- premake5 vs2015
configuration: Release
build:
project: build/ygo.sln
parallel: true
after_build:
- ps: move bin\release\ygopro.exe .
artifacts:
- path: ygopro.exe
name: ygopro(server)
No preview for this file type
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
#include "netserver.h" #include "netserver.h"
//#include "single_mode.h" //#include "single_mode.h"
#ifdef _WIN32
#define strcasecmp _stricmp
#include "dirent.h"
#endif // _WIN32
#ifndef _WIN32 #ifndef _WIN32
#include <sys/types.h> #include <sys/types.h>
#include <dirent.h> #include <dirent.h>
...@@ -30,6 +35,7 @@ bool no_check_deck; ...@@ -30,6 +35,7 @@ bool no_check_deck;
bool no_shuffle_deck; bool no_shuffle_deck;
unsigned int start_lp; unsigned int start_lp;
unsigned short time_limit; unsigned short time_limit;
unsigned short replay_mode;
unsigned char start_hand; unsigned char start_hand;
unsigned char draw_count; unsigned char draw_count;
...@@ -1204,6 +1210,7 @@ int Game::LocalPlayer(int player) { ...@@ -1204,6 +1210,7 @@ int Game::LocalPlayer(int player) {
const wchar_t* Game::LocalName(int local_player) { const wchar_t* Game::LocalName(int local_player) {
return local_player == 0 ? dInfo.hostname : dInfo.clientname; return local_player == 0 ? dInfo.hostname : dInfo.clientname;
} }
/*
void Game::SetWindowsIcon() { void Game::SetWindowsIcon() {
#ifdef _WIN32 #ifdef _WIN32
HINSTANCE hInstance = (HINSTANCE)GetModuleHandleW(NULL); HINSTANCE hInstance = (HINSTANCE)GetModuleHandleW(NULL);
...@@ -1224,5 +1231,6 @@ void Game::FlashWindow() { ...@@ -1224,5 +1231,6 @@ void Game::FlashWindow() {
FlashWindowEx(&fi); FlashWindowEx(&fi);
#endif #endif
} }
*/
} }
...@@ -423,6 +423,7 @@ extern bool no_check_deck; ...@@ -423,6 +423,7 @@ extern bool no_check_deck;
extern bool no_shuffle_deck; extern bool no_shuffle_deck;
extern unsigned int start_lp; extern unsigned int start_lp;
extern unsigned short time_limit; extern unsigned short time_limit;
extern unsigned short replay_mode;
extern unsigned char start_hand; extern unsigned char start_hand;
extern unsigned char draw_count; extern unsigned char draw_count;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "data_manager.h" #include "data_manager.h"
#include <event2/thread.h> #include <event2/thread.h>
int enable_log = 0; int enable_log = 1;
bool exit_on_return = false; bool exit_on_return = false;
bool runasserver = true; bool runasserver = true;
...@@ -23,6 +23,7 @@ int main(int argc, char* argv[]) { ...@@ -23,6 +23,7 @@ int main(int argc, char* argv[]) {
ygo::aServerPort=atoi(argv[1]); ygo::aServerPort=atoi(argv[1]);
ygo::lflist=atoi(argv[2]); ygo::lflist=atoi(argv[2]);
ygo::start_hand=0; ygo::start_hand=0;
ygo::replay_mode=0;
if (argc>2) { if (argc>2) {
ygo::rule=atoi(argv[3]); ygo::rule=atoi(argv[3]);
ygo::mode=atoi(argv[4]); ygo::mode=atoi(argv[4]);
...@@ -42,6 +43,8 @@ int main(int argc, char* argv[]) { ...@@ -42,6 +43,8 @@ int main(int argc, char* argv[]) {
ygo::start_hand=atoi(argv[9]); ygo::start_hand=atoi(argv[9]);
ygo::draw_count=atoi(argv[10]); ygo::draw_count=atoi(argv[10]);
ygo::time_limit=atoi(argv[11]); ygo::time_limit=atoi(argv[11]);
if (argc>12)
ygo::replay_mode=atoi(argv[12]);
} }
ygo::mainGame = &_game; ygo::mainGame = &_game;
ygo::mainGame->MainServerLoop(ygo::mode, ygo::lflist); ygo::mainGame->MainServerLoop(ygo::mode, ygo::lflist);
......
...@@ -22,6 +22,7 @@ struct HostInfo { ...@@ -22,6 +22,7 @@ struct HostInfo {
unsigned char start_hand; unsigned char start_hand;
unsigned char draw_count; unsigned char draw_count;
unsigned short time_limit; unsigned short time_limit;
unsigned short replay_mode;
}; };
struct HostPacket { struct HostPacket {
unsigned short identifier; unsigned short identifier;
......
...@@ -12,13 +12,16 @@ project "ygopro" ...@@ -12,13 +12,16 @@ project "ygopro"
"single_duel.cpp", "single_duel.h", "single_duel.cpp", "single_duel.h",
"tag_duel.cpp", "tag_duel.h", "tag_duel.cpp", "tag_duel.h",
"**.cc", "**.c"} "**.cc", "**.c"}
excludes "lzma/**"
includedirs { "../ocgcore" } includedirs { "../ocgcore" }
links { "ocgcore", "clzma", "sqlite3", "lua" , "event"} links { "ocgcore", "clzma", "sqlite3", "lua" , "event"}
configuration "windows"
files "ygopro.rc"
includedirs { "../event/include", "../sqlite3" }
links { "ws2_32" }
configuration "not vs*" configuration "not vs*"
buildoptions { "-std=gnu++0x", "-fno-rtti" } buildoptions { "-std=gnu++0x", "-fno-rtti" }
configuration "not windows" configuration "not windows"
includedirs { "/usr/include/lua", "/usr/include/lua5.2", "/usr/include/lua/5.2" } includedirs { "/usr/include/lua", "/usr/include/lua5.2", "/usr/include/lua/5.2" }
excludes { "COSOperator.*" }
links { "event_pthreads", "dl", "pthread" } links { "event_pthreads", "dl", "pthread" }
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
namespace ygo { namespace ygo {
extern unsigned short aServerPort; extern unsigned short aServerPort;
extern unsigned short replay_mode;
Replay::Replay() { Replay::Replay() {
is_recording = false; is_recording = false;
...@@ -42,8 +43,9 @@ std::wstring SA2W(std::string& strA) ...@@ -42,8 +43,9 @@ std::wstring SA2W(std::string& strA)
void Replay::BeginRecord() { void Replay::BeginRecord() {
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
if(is_recording) if(is_recording)
CloseHandle(recording_fp); CloseHandle(recording_fp);
std::stringstream ss; std::stringstream ss;
ss<<ygo::aServerPort; ss<<ygo::aServerPort;
...@@ -60,17 +62,23 @@ if(is_recording) ...@@ -60,17 +62,23 @@ if(is_recording)
#else #else
if(is_recording) if(is_recording)
fclose(fp); fclose(fp);
char path[20]; time_t nowtime = time(NULL);
sprintf(path, "./replay/%u.yrp", ygo::aServerPort); struct tm *localedtime = localtime(&nowtime);
char tmppath[40];
strftime(tmppath, 40, "./replay/%Y-%m-%d %H-%M-%S %%u.yrp", localedtime);
char path[40];
sprintf(path, tmppath, ygo::aServerPort);
fp = fopen(path, "wb"); fp = fopen(path, "wb");
if(!fp) if(!fp)
return; return;
#endif #endif
}
pdata = replay_data; pdata = replay_data;
is_recording = true; is_recording = true;
} }
void Replay::WriteHeader(ReplayHeader& header) { void Replay::WriteHeader(ReplayHeader& header) {
pheader = header; pheader = header;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
DWORD size; DWORD size;
WriteFile(recording_fp, &header, sizeof(header), &size, NULL); WriteFile(recording_fp, &header, sizeof(header), &size, NULL);
...@@ -78,12 +86,14 @@ void Replay::WriteHeader(ReplayHeader& header) { ...@@ -78,12 +86,14 @@ void Replay::WriteHeader(ReplayHeader& header) {
fwrite(&header, sizeof(header), 1, fp); fwrite(&header, sizeof(header), 1, fp);
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::WriteData(const void* data, unsigned int length, bool flush) { void Replay::WriteData(const void* data, unsigned int length, bool flush) {
if(!is_recording) if(!is_recording)
return; return;
memcpy(pdata, data, length); memcpy(pdata, data, length);
pdata += length; pdata += length;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
DWORD size; DWORD size;
WriteFile(recording_fp, data, length, &size, NULL); WriteFile(recording_fp, data, length, &size, NULL);
...@@ -92,12 +102,14 @@ void Replay::WriteData(const void* data, unsigned int length, bool flush) { ...@@ -92,12 +102,14 @@ void Replay::WriteData(const void* data, unsigned int length, bool flush) {
if(flush) if(flush)
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::WriteInt32(int data, bool flush) { void Replay::WriteInt32(int data, bool flush) {
if(!is_recording) if(!is_recording)
return; return;
*((int*)(pdata)) = data; *((int*)(pdata)) = data;
pdata += 4; pdata += 4;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
DWORD size; DWORD size;
WriteFile(recording_fp, &data, sizeof(int), &size, NULL); WriteFile(recording_fp, &data, sizeof(int), &size, NULL);
...@@ -106,12 +118,14 @@ void Replay::WriteInt32(int data, bool flush) { ...@@ -106,12 +118,14 @@ void Replay::WriteInt32(int data, bool flush) {
if(flush) if(flush)
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::WriteInt16(short data, bool flush) { void Replay::WriteInt16(short data, bool flush) {
if(!is_recording) if(!is_recording)
return; return;
*((short*)(pdata)) = data; *((short*)(pdata)) = data;
pdata += 2; pdata += 2;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
DWORD size; DWORD size;
WriteFile(recording_fp, &data, sizeof(short), &size, NULL); WriteFile(recording_fp, &data, sizeof(short), &size, NULL);
...@@ -120,12 +134,14 @@ void Replay::WriteInt16(short data, bool flush) { ...@@ -120,12 +134,14 @@ void Replay::WriteInt16(short data, bool flush) {
if(flush) if(flush)
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::WriteInt8(char data, bool flush) { void Replay::WriteInt8(char data, bool flush) {
if(!is_recording) if(!is_recording)
return; return;
*pdata = data; *pdata = data;
pdata++; pdata++;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
DWORD size; DWORD size;
WriteFile(recording_fp, &data, sizeof(char), &size, NULL); WriteFile(recording_fp, &data, sizeof(char), &size, NULL);
...@@ -134,23 +150,28 @@ void Replay::WriteInt8(char data, bool flush) { ...@@ -134,23 +150,28 @@ void Replay::WriteInt8(char data, bool flush) {
if(flush) if(flush)
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::Flush() { void Replay::Flush() {
if(!is_recording) if(!is_recording)
return; return;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
#else #else
fflush(fp); fflush(fp);
#endif #endif
}
} }
void Replay::EndRecord() { void Replay::EndRecord() {
if(!is_recording) if(!is_recording)
return; return;
if (ygo::replay_mode>0) {
#ifdef _WIN32 #ifdef _WIN32
CloseHandle(recording_fp); CloseHandle(recording_fp);
#else #else
fclose(fp); fclose(fp);
#endif #endif
}
pheader.datasize = pdata - replay_data; pheader.datasize = pdata - replay_data;
pheader.flag |= REPLAY_COMPRESSED; pheader.flag |= REPLAY_COMPRESSED;
size_t propsize = 5; size_t propsize = 5;
......
...@@ -17,6 +17,7 @@ extern bool no_check_deck; ...@@ -17,6 +17,7 @@ extern bool no_check_deck;
extern bool no_shuffle_deck; extern bool no_shuffle_deck;
extern unsigned int start_lp; extern unsigned int start_lp;
extern unsigned short time_limit; extern unsigned short time_limit;
extern unsigned short replay_mode;
extern unsigned char start_hand; extern unsigned char start_hand;
extern unsigned char draw_count; extern unsigned char draw_count;
bool runasserver = true; bool runasserver = true;
...@@ -45,10 +46,15 @@ void SingleDuel::Chat(DuelPlayer* dp, void* pdata, int len) { ...@@ -45,10 +46,15 @@ void SingleDuel::Chat(DuelPlayer* dp, void* pdata, int len) {
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
if((*pit) != dp) if((*pit) != dp)
NetServer::ReSendToPlayer(*pit); NetServer::ReSendToPlayer(*pit);
/*for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
if((*pit) != dp)
NetServer::ReSendToPlayer(*pit);*/
} else { } else {
NetServer::SendBufferToPlayer(players[1 - dp->type], STOC_CHAT, &scc, 4 + msglen * 2); NetServer::SendBufferToPlayer(players[1 - dp->type], STOC_CHAT, &scc, 4 + msglen * 2);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::ReSendToPlayer(*pit); NetServer::ReSendToPlayer(*pit);
/*for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);*/
} }
} }
void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
...@@ -81,6 +87,7 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -81,6 +87,7 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
host_info.enable_priority=false; host_info.enable_priority=false;
host_info.rule=0; host_info.rule=0;
host_info.time_limit=180; host_info.time_limit=180;
host_info.replay_mode=0;
if (ygo::start_hand !=0 ){ if (ygo::start_hand !=0 ){
host_info.start_hand=ygo::start_hand; host_info.start_hand=ygo::start_hand;
...@@ -92,6 +99,7 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -92,6 +99,7 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
host_info.enable_priority=ygo::enable_priority; host_info.enable_priority=ygo::enable_priority;
host_info.rule=ygo::rule; host_info.rule=ygo::rule;
host_info.time_limit=ygo::time_limit; host_info.time_limit=ygo::time_limit;
host_info.replay_mode=ygo::replay_mode;
} }
}else }else
{ {
...@@ -126,6 +134,8 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -126,6 +134,8 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
} }
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
if(!players[0]) { if(!players[0]) {
players[0] = dp; players[0] = dp;
dp->type = NETPLAYER_TYPE_PLAYER1; dp->type = NETPLAYER_TYPE_PLAYER1;
...@@ -147,6 +157,8 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -147,6 +157,8 @@ void SingleDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
NetServer::SendPacketToPlayer(players[1], STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(players[1], STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
NetServer::SendPacketToPlayer(dp, STOC_JOIN_GAME, scjg); NetServer::SendPacketToPlayer(dp, STOC_JOIN_GAME, scjg);
NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc); NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc);
...@@ -206,6 +218,8 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -206,6 +218,8 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(players[1], STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(players[1], STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
...@@ -220,6 +234,8 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -220,6 +234,8 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(players[1], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[1], 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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
if(!game_started) { if(!game_started) {
...@@ -236,11 +252,15 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -236,11 +252,15 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
EndDuel(); EndDuel();
NetServer::SendPacketToPlayer(players[0], STOC_DUEL_END); NetServer::SendPacketToPlayer(players[0], STOC_DUEL_END);
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::StopServer(); NetServer::StopServer();
} }
} }
...@@ -274,6 +294,10 @@ void SingleDuel::ToDuelist(DuelPlayer* dp) { ...@@ -274,6 +294,10 @@ void SingleDuel::ToDuelist(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
}
STOC_TypeChange sctc; STOC_TypeChange sctc;
sctc.type = (dp == host_player ? 0x10 : 0) | dp->type; sctc.type = (dp == host_player ? 0x10 : 0) | dp->type;
NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc); NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc);
...@@ -289,9 +313,14 @@ void SingleDuel::ToObserver(DuelPlayer* dp) { ...@@ -289,9 +313,14 @@ void SingleDuel::ToObserver(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(players[1], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[1], 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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
players[dp->type] = 0; players[dp->type] = 0;
ready[dp->type] = false; ready[dp->type] = false;
dp->type = NETPLAYER_TYPE_OBSERVER; dp->type = NETPLAYER_TYPE_OBSERVER;
if (recorders.size()==0 && dp->name[0] == 77)
recorders.insert(dp);
else
observers.insert(dp); observers.insert(dp);
STOC_TypeChange sctc; STOC_TypeChange sctc;
sctc.type = (dp == host_player ? 0x10 : 0) | dp->type; sctc.type = (dp == host_player ? 0x10 : 0) | dp->type;
...@@ -324,6 +353,8 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -324,6 +353,8 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
NetServer::SendPacketToPlayer(players[1 - dp->type], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[1 - dp->type], 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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
} }
void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
if(pos > 1 || dp != host_player || dp == players[pos] || !players[pos]) if(pos > 1 || dp != host_player || dp == players[pos] || !players[pos])
...@@ -369,6 +400,10 @@ void SingleDuel::StartDuel(DuelPlayer* dp) { ...@@ -369,6 +400,10 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
(*oit)->state = CTOS_LEAVE_GAME; (*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
} }
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit) {
(*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit);
}
NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND); NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND);
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
hand_result[0] = 0; hand_result[0] = 0;
...@@ -389,6 +424,8 @@ void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) { ...@@ -389,6 +424,8 @@ void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) {
NetServer::SendPacketToPlayer(players[0], STOC_HAND_RESULT, schr); NetServer::SendPacketToPlayer(players[0], STOC_HAND_RESULT, schr);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
schr.res1 = hand_result[1]; schr.res1 = hand_result[1];
schr.res2 = hand_result[0]; schr.res2 = hand_result[0];
NetServer::SendPacketToPlayer(players[1], STOC_HAND_RESULT, schr); NetServer::SendPacketToPlayer(players[1], STOC_HAND_RESULT, schr);
...@@ -511,6 +548,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -511,6 +548,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
else startbuf[1] = 0x11; else startbuf[1] = 0x11;
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18); NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18);
RefreshExtra(0); RefreshExtra(0);
RefreshExtra(1); RefreshExtra(1);
start_duel(pduel, opt); start_duel(pduel, opt);
...@@ -540,6 +579,8 @@ void SingleDuel::DuelEndProc() { ...@@ -540,6 +579,8 @@ void SingleDuel::DuelEndProc() {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::StopServer(); NetServer::StopServer();
} else { } else {
int winc[3] = {0, 0, 0}; int winc[3] = {0, 0, 0};
...@@ -553,6 +594,8 @@ void SingleDuel::DuelEndProc() { ...@@ -553,6 +594,8 @@ void SingleDuel::DuelEndProc() {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::StopServer(); NetServer::StopServer();
} else { } else {
if(players[0] != pplayer[0]) { if(players[0] != pplayer[0]) {
...@@ -572,6 +615,8 @@ void SingleDuel::DuelEndProc() { ...@@ -572,6 +615,8 @@ void SingleDuel::DuelEndProc() {
NetServer::SendPacketToPlayer(players[1], STOC_CHANGE_SIDE); NetServer::SendPacketToPlayer(players[1], STOC_CHANGE_SIDE);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::SendPacketToPlayer(*oit, STOC_WAITING_SIDE); NetServer::SendPacketToPlayer(*oit, STOC_WAITING_SIDE);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::SendPacketToPlayer(*oit, STOC_WAITING_SIDE);
} }
} }
} }
...@@ -587,6 +632,8 @@ void SingleDuel::Surrender(DuelPlayer* dp) { ...@@ -587,6 +632,8 @@ void SingleDuel::Surrender(DuelPlayer* dp) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if(players[player] == pplayer[player]) { if(players[player] == pplayer[player]) {
match_result[duel_count++] = 1 - player; match_result[duel_count++] = 1 - player;
tp_player = player; tp_player = player;
...@@ -630,6 +677,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -630,6 +677,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case 10: { case 10: {
...@@ -637,6 +686,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -637,6 +686,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
} }
...@@ -649,6 +700,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -649,6 +700,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if(player > 1) { if(player > 1) {
match_result[duel_count++] = 2; match_result[duel_count++] = 2;
tp_player = 1 - tp_player; tp_player = 1 - tp_player;
...@@ -804,6 +857,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -804,6 +857,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CONFIRM_CARDS: { case MSG_CONFIRM_CARDS: {
...@@ -815,6 +870,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -815,6 +870,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1 - player]); NetServer::ReSendToPlayer(players[1 - player]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
} else { } else {
pbuf += count * 7; pbuf += count * 7;
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
...@@ -827,12 +884,16 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -827,12 +884,16 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SHUFFLE_HAND: { case MSG_SHUFFLE_HAND: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, (pbuf - offset) + count * 4); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, (pbuf - offset) + count * 4);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
for(int i = 0; i < count; ++i) for(int i = 0; i < count; ++i)
BufferIO::WriteInt32(pbuf, 0); BufferIO::WriteInt32(pbuf, 0);
NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, offset, pbuf - offset);
...@@ -847,6 +908,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -847,6 +908,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SWAP_GRAVE_DECK: { case MSG_SWAP_GRAVE_DECK: {
...@@ -855,6 +918,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -855,6 +918,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshGrave(player); RefreshGrave(player);
break; break;
} }
...@@ -863,6 +928,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -863,6 +928,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DECK_TOP: { case MSG_DECK_TOP: {
...@@ -871,6 +938,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -871,6 +938,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SHUFFLE_SET_CARD: { case MSG_SHUFFLE_SET_CARD: {
...@@ -880,6 +949,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -880,6 +949,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0, 0x181fff, 0); RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0); RefreshMzone(1, 0x181fff, 0);
break; break;
...@@ -898,6 +969,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -898,6 +969,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_NEW_PHASE: { case MSG_NEW_PHASE: {
...@@ -906,6 +979,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -906,6 +979,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -931,6 +1006,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -931,6 +1006,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[1 - cc], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[1 - cc], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc)) if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc))
RefreshSingle(cc, cl, cs); RefreshSingle(cc, cl, cs);
break; break;
...@@ -946,6 +1023,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -946,6 +1023,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if((pp & POS_FACEDOWN) && (cp & POS_FACEUP)) if((pp & POS_FACEDOWN) && (cp & POS_FACEUP))
RefreshSingle(cc, cl, cs); RefreshSingle(cc, cl, cs);
break; break;
...@@ -957,6 +1036,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -957,6 +1036,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SWAP: { case MSG_SWAP: {
...@@ -971,6 +1052,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -971,6 +1052,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshSingle(c1, l1, s1); RefreshSingle(c1, l1, s1);
RefreshSingle(c2, l2, s2); RefreshSingle(c2, l2, s2);
break; break;
...@@ -981,6 +1064,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -981,6 +1064,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SUMMONING: { case MSG_SUMMONING: {
...@@ -989,6 +1074,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -989,6 +1074,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SUMMONED: { case MSG_SUMMONED: {
...@@ -996,6 +1083,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -996,6 +1083,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1008,6 +1097,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1008,6 +1097,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SPSUMMONED: { case MSG_SPSUMMONED: {
...@@ -1015,6 +1106,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1015,6 +1106,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1028,6 +1121,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1028,6 +1121,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_FLIPSUMMONED: { case MSG_FLIPSUMMONED: {
...@@ -1035,6 +1130,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1035,6 +1130,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1047,6 +1144,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1047,6 +1144,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAINED: { case MSG_CHAINED: {
...@@ -1055,6 +1154,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1055,6 +1154,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1069,6 +1170,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1069,6 +1170,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAIN_SOLVED: { case MSG_CHAIN_SOLVED: {
...@@ -1077,6 +1180,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1077,6 +1180,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1090,6 +1195,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1090,6 +1195,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1104,6 +1211,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1104,6 +1211,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAIN_DISABLED: { case MSG_CHAIN_DISABLED: {
...@@ -1112,6 +1221,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1112,6 +1221,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CARD_SELECTED: { case MSG_CARD_SELECTED: {
...@@ -1128,6 +1239,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1128,6 +1239,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_BECOME_TARGET: { case MSG_BECOME_TARGET: {
...@@ -1137,6 +1250,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1137,6 +1250,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DRAW: { case MSG_DRAW: {
...@@ -1145,6 +1260,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1145,6 +1260,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
pbufw = pbuf; pbufw = pbuf;
pbuf += count * 4; pbuf += count * 4;
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
if(!(pbufw[3] & 0x80)) if(!(pbufw[3] & 0x80))
BufferIO::WriteInt32(pbufw, 0); BufferIO::WriteInt32(pbufw, 0);
...@@ -1162,6 +1279,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1162,6 +1279,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_RECOVER: { case MSG_RECOVER: {
...@@ -1170,6 +1289,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1170,6 +1289,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_EQUIP: { case MSG_EQUIP: {
...@@ -1178,6 +1299,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1178,6 +1299,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_LPUPDATE: { case MSG_LPUPDATE: {
...@@ -1186,6 +1309,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1186,6 +1309,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_UNEQUIP: { case MSG_UNEQUIP: {
...@@ -1194,6 +1319,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1194,6 +1319,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CARD_TARGET: { case MSG_CARD_TARGET: {
...@@ -1202,6 +1329,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1202,6 +1329,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CANCEL_TARGET: { case MSG_CANCEL_TARGET: {
...@@ -1210,6 +1339,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1210,6 +1339,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PAY_LPCOST: { case MSG_PAY_LPCOST: {
...@@ -1218,6 +1349,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1218,6 +1349,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ADD_COUNTER: { case MSG_ADD_COUNTER: {
...@@ -1226,6 +1359,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1226,6 +1359,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_REMOVE_COUNTER: { case MSG_REMOVE_COUNTER: {
...@@ -1234,6 +1369,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1234,6 +1369,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ATTACK: { case MSG_ATTACK: {
...@@ -1242,6 +1379,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1242,6 +1379,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_BATTLE: { case MSG_BATTLE: {
...@@ -1250,6 +1389,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1250,6 +1389,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ATTACK_DISABLED: { case MSG_ATTACK_DISABLED: {
...@@ -1257,6 +1398,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1257,6 +1398,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DAMAGE_STEP_START: { case MSG_DAMAGE_STEP_START: {
...@@ -1264,6 +1407,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1264,6 +1407,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
break; break;
...@@ -1273,6 +1418,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1273,6 +1418,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
break; break;
...@@ -1291,6 +1438,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1291,6 +1438,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_TOSS_DICE: { case MSG_TOSS_DICE: {
...@@ -1301,6 +1450,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1301,6 +1450,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ANNOUNCE_RACE: { case MSG_ANNOUNCE_RACE: {
...@@ -1339,6 +1490,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1339,6 +1490,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: { case MSG_PLAYER_HINT: {
...@@ -1357,6 +1510,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1357,6 +1510,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
} }
break; break;
} }
...@@ -1389,8 +1544,12 @@ void SingleDuel::EndDuel() { ...@@ -1389,8 +1544,12 @@ void SingleDuel::EndDuel() {
memcpy(pbuf, last_replay.comp_data, last_replay.comp_size); memcpy(pbuf, last_replay.comp_data, last_replay.comp_size);
NetServer::SendBufferToPlayer(players[0], STOC_REPLAY, replaybuf, sizeof(ReplayHeader) + last_replay.comp_size); NetServer::SendBufferToPlayer(players[0], STOC_REPLAY, replaybuf, sizeof(ReplayHeader) + last_replay.comp_size);
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
if (host_info.replay_mode == 0) {
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
}
end_duel(pduel); end_duel(pduel);
pduel = 0; pduel = 0;
} }
...@@ -1426,6 +1585,8 @@ void SingleDuel::RefreshMzone(int player, int flag, int use_cache) { ...@@ -1426,6 +1585,8 @@ void SingleDuel::RefreshMzone(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, LOCATION_MZONE); BufferIO::WriteInt8(qbuf, LOCATION_MZONE);
int len = query_field_card(pduel, player, LOCATION_MZONE, flag, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_MZONE, flag, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
int clen = BufferIO::ReadInt32(qbuf); int clen = BufferIO::ReadInt32(qbuf);
if (clen == 4) if (clen == 4)
...@@ -1446,6 +1607,8 @@ void SingleDuel::RefreshSzone(int player, int flag, int use_cache) { ...@@ -1446,6 +1607,8 @@ void SingleDuel::RefreshSzone(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, LOCATION_SZONE); BufferIO::WriteInt8(qbuf, LOCATION_SZONE);
int len = query_field_card(pduel, player, LOCATION_SZONE, flag, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_SZONE, flag, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
for (int i = 0; i < 8; ++i) { for (int i = 0; i < 8; ++i) {
int clen = BufferIO::ReadInt32(qbuf); int clen = BufferIO::ReadInt32(qbuf);
if (clen == 4) if (clen == 4)
...@@ -1466,6 +1629,8 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) { ...@@ -1466,6 +1629,8 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, LOCATION_HAND); BufferIO::WriteInt8(qbuf, LOCATION_HAND);
int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
int qlen = 0, slen; int qlen = 0, slen;
while(qlen < len) { while(qlen < len) {
slen = BufferIO::ReadInt32(qbuf); slen = BufferIO::ReadInt32(qbuf);
...@@ -1520,6 +1685,8 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag) ...@@ -1520,6 +1685,8 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag)
NetServer::ReSendToPlayer(players[1 - player]); NetServer::ReSendToPlayer(players[1 - player]);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::ReSendToPlayer(*pit); NetServer::ReSendToPlayer(*pit);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
} }
} }
int SingleDuel::MessageHandler(long fduel, int type) { int SingleDuel::MessageHandler(long fduel, int type) {
...@@ -1527,17 +1694,7 @@ int SingleDuel::MessageHandler(long fduel, int type) { ...@@ -1527,17 +1694,7 @@ int SingleDuel::MessageHandler(long fduel, int type) {
return 0; return 0;
char msgbuf[1024]; char msgbuf[1024];
get_log_message(fduel, (byte*)msgbuf); get_log_message(fduel, (byte*)msgbuf);
if(enable_log == 1) { fprintf(stderr, "%s\n", msgbuf);
wchar_t wbuf[1024];
BufferIO::DecodeUTF8(msgbuf, wbuf);
//mainGame->AddChatMsg(wbuf, 9);
} else if(enable_log == 2) {
FILE* fp = fopen("error.log", "at");
if(!fp)
return 0;
fprintf(fp, "[Script error:] %s\n", msgbuf);
fclose(fp);
}
return 0; return 0;
} }
void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) { void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
...@@ -1553,6 +1710,8 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) { ...@@ -1553,6 +1710,8 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
NetServer::ReSendToPlayer(sd->players[1]); NetServer::ReSendToPlayer(sd->players[1]);
for(auto oit = sd->observers.begin(); oit != sd->observers.end(); ++oit) for(auto oit = sd->observers.begin(); oit != sd->observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = sd->recorders.begin(); oit != sd->recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if(sd->players[player] == sd->pplayer[player]) { if(sd->players[player] == sd->pplayer[player]) {
sd->match_result[sd->duel_count++] = 1 - player; sd->match_result[sd->duel_count++] = 1 - player;
sd->tp_player = player; sd->tp_player = player;
......
...@@ -49,6 +49,7 @@ protected: ...@@ -49,6 +49,7 @@ protected:
unsigned char hand_result[2]; unsigned char hand_result[2];
unsigned char last_response; unsigned char last_response;
std::set<DuelPlayer*> observers; std::set<DuelPlayer*> observers;
std::set<DuelPlayer*> recorders;
Replay last_replay; Replay last_replay;
bool match_mode; bool match_mode;
int match_kill; int match_kill;
......
...@@ -17,6 +17,7 @@ extern bool no_check_deck; ...@@ -17,6 +17,7 @@ extern bool no_check_deck;
extern bool no_shuffle_deck; extern bool no_shuffle_deck;
extern unsigned int start_lp; extern unsigned int start_lp;
extern unsigned short time_limit; extern unsigned short time_limit;
extern unsigned short replay_mode;
extern unsigned char start_hand; extern unsigned char start_hand;
extern unsigned char draw_count; extern unsigned char draw_count;
...@@ -67,6 +68,7 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -67,6 +68,7 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
host_info.enable_priority=false; host_info.enable_priority=false;
host_info.rule=0; host_info.rule=0;
host_info.time_limit=180; host_info.time_limit=180;
host_info.replay_mode=0;
if (ygo::start_hand !=0 ){ if (ygo::start_hand !=0 ){
host_info.start_hand=ygo::start_hand; host_info.start_hand=ygo::start_hand;
...@@ -78,6 +80,7 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -78,6 +80,7 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
host_info.enable_priority=ygo::enable_priority; host_info.enable_priority=ygo::enable_priority;
host_info.rule=ygo::rule; host_info.rule=ygo::rule;
host_info.time_limit=ygo::time_limit; host_info.time_limit=ygo::time_limit;
host_info.replay_mode=ygo::replay_mode;
} }
}else }else
{ {
...@@ -115,6 +118,8 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -115,6 +118,8 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_ENTER, scpe); NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_ENTER, scpe);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
players[scpe.pos] = dp; players[scpe.pos] = dp;
dp->type = scpe.pos; dp->type = scpe.pos;
sctc.type |= scpe.pos; sctc.type |= scpe.pos;
...@@ -129,6 +134,8 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) { ...@@ -129,6 +134,8 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
NetServer::SendPacketToPlayer(players[i], STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(players[i], STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
NetServer::SendPacketToPlayer(dp, STOC_JOIN_GAME, scjg); NetServer::SendPacketToPlayer(dp, STOC_JOIN_GAME, scjg);
NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc); NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc);
...@@ -183,6 +190,8 @@ void TagDuel::LeaveGame(DuelPlayer* dp) { ...@@ -183,6 +190,8 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(players[i], STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(players[i], STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
...@@ -196,6 +205,8 @@ void TagDuel::LeaveGame(DuelPlayer* dp) { ...@@ -196,6 +205,8 @@ 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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
EndDuel(); EndDuel();
...@@ -231,6 +242,10 @@ void TagDuel::ToDuelist(DuelPlayer* dp) { ...@@ -231,6 +242,10 @@ void TagDuel::ToDuelist(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc); NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
} }
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_ENTER, scpe);
NetServer::SendPacketToPlayer(*pit, STOC_HS_WATCH_CHANGE, scwc);
}
STOC_TypeChange sctc; STOC_TypeChange sctc;
sctc.type = (dp == host_player ? 0x10 : 0) | dp->type; sctc.type = (dp == host_player ? 0x10 : 0) | dp->type;
NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc); NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc);
...@@ -247,6 +262,8 @@ void TagDuel::ToDuelist(DuelPlayer* dp) { ...@@ -247,6 +262,8 @@ void TagDuel::ToDuelist(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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
STOC_TypeChange sctc; STOC_TypeChange sctc;
sctc.type = (dp == host_player ? 0x10 : 0) | dptype; sctc.type = (dp == host_player ? 0x10 : 0) | dptype;
NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc); NetServer::SendPacketToPlayer(dp, STOC_TYPE_CHANGE, sctc);
...@@ -265,9 +282,14 @@ void TagDuel::ToObserver(DuelPlayer* dp) { ...@@ -265,9 +282,14 @@ void TagDuel::ToObserver(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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
players[dp->type] = 0; players[dp->type] = 0;
ready[dp->type] = false; ready[dp->type] = false;
dp->type = NETPLAYER_TYPE_OBSERVER; dp->type = NETPLAYER_TYPE_OBSERVER;
if (recorders.size()==0 && dp->name[0] == 77)
recorders.insert(dp);
else
observers.insert(dp); observers.insert(dp);
STOC_TypeChange sctc; STOC_TypeChange sctc;
sctc.type = (dp == host_player ? 0x10 : 0) | dp->type; sctc.type = (dp == host_player ? 0x10 : 0) | dp->type;
...@@ -299,6 +321,8 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -299,6 +321,8 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
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);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
} }
void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
if(pos > 3 || dp != host_player || dp == players[pos] || !players[pos]) if(pos > 3 || dp != host_player || dp == players[pos] || !players[pos])
...@@ -327,6 +351,10 @@ void TagDuel::StartDuel(DuelPlayer* dp) { ...@@ -327,6 +351,10 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
(*oit)->state = CTOS_LEAVE_GAME; (*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
} }
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit) {
(*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit);
}
NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND); NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND);
NetServer::ReSendToPlayer(players[2]); NetServer::ReSendToPlayer(players[2]);
hand_result[0] = 0; hand_result[0] = 0;
...@@ -349,6 +377,8 @@ void TagDuel::HandResult(DuelPlayer* dp, unsigned char res) { ...@@ -349,6 +377,8 @@ void TagDuel::HandResult(DuelPlayer* dp, unsigned char res) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
schr.res1 = hand_result[1]; schr.res1 = hand_result[1];
schr.res2 = hand_result[0]; schr.res2 = hand_result[0];
NetServer::SendPacketToPlayer(players[2], STOC_HAND_RESULT, schr); NetServer::SendPacketToPlayer(players[2], STOC_HAND_RESULT, schr);
...@@ -512,6 +542,8 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -512,6 +542,8 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
else startbuf[1] = 0x11; else startbuf[1] = 0x11;
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18); NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 18);
RefreshExtra(0); RefreshExtra(0);
RefreshExtra(1); RefreshExtra(1);
start_duel(pduel, opt); start_duel(pduel, opt);
...@@ -542,6 +574,8 @@ void TagDuel::DuelEndProc() { ...@@ -542,6 +574,8 @@ void TagDuel::DuelEndProc() {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::StopServer(); NetServer::StopServer();
} }
void TagDuel::Surrender(DuelPlayer* dp) { void TagDuel::Surrender(DuelPlayer* dp) {
...@@ -582,6 +616,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -582,6 +616,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
} }
...@@ -596,6 +632,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -596,6 +632,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
EndDuel(); EndDuel();
return 2; return 2;
} }
...@@ -743,6 +781,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -743,6 +781,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CONFIRM_CARDS: { case MSG_CONFIRM_CARDS: {
...@@ -756,6 +796,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -756,6 +796,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
} else { } else {
pbuf += count * 7; pbuf += count * 7;
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
...@@ -770,12 +812,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -770,12 +812,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SHUFFLE_HAND: { case MSG_SHUFFLE_HAND: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, (pbuf - offset) + count * 4); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, (pbuf - offset) + count * 4);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
for(int i = 0; i < count; ++i) for(int i = 0; i < count; ++i)
BufferIO::WriteInt32(pbuf, 0); BufferIO::WriteInt32(pbuf, 0);
for(int i = 0; i < 4; ++i) for(int i = 0; i < 4; ++i)
...@@ -794,6 +840,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -794,6 +840,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SWAP_GRAVE_DECK: { case MSG_SWAP_GRAVE_DECK: {
...@@ -804,6 +852,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -804,6 +852,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshGrave(player); RefreshGrave(player);
break; break;
} }
...@@ -814,6 +864,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -814,6 +864,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DECK_TOP: { case MSG_DECK_TOP: {
...@@ -824,6 +876,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -824,6 +876,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SHUFFLE_SET_CARD: { case MSG_SHUFFLE_SET_CARD: {
...@@ -835,6 +889,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -835,6 +889,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0, 0x181fff, 0); RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0); RefreshMzone(1, 0x181fff, 0);
break; break;
...@@ -849,6 +905,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -849,6 +905,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if(turn_count > 0) { if(turn_count > 0) {
if(turn_count % 2 == 0) { if(turn_count % 2 == 0) {
if(cur_player[0] == players[0]) if(cur_player[0] == players[0])
...@@ -873,6 +931,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -873,6 +931,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -900,6 +960,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -900,6 +960,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc)) if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc))
RefreshSingle(cc, cl, cs); RefreshSingle(cc, cl, cs);
break; break;
...@@ -917,6 +979,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -917,6 +979,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if((pp & POS_FACEDOWN) && (cp & POS_FACEUP)) if((pp & POS_FACEDOWN) && (cp & POS_FACEUP))
RefreshSingle(cc, cl, cs); RefreshSingle(cc, cl, cs);
break; break;
...@@ -930,6 +994,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -930,6 +994,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SWAP: { case MSG_SWAP: {
...@@ -946,6 +1012,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -946,6 +1012,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshSingle(c1, l1, s1); RefreshSingle(c1, l1, s1);
RefreshSingle(c2, l2, s2); RefreshSingle(c2, l2, s2);
break; break;
...@@ -958,6 +1026,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -958,6 +1026,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SUMMONING: { case MSG_SUMMONING: {
...@@ -968,6 +1038,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -968,6 +1038,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SUMMONED: { case MSG_SUMMONED: {
...@@ -977,6 +1049,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -977,6 +1049,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -991,6 +1065,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -991,6 +1065,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_SPSUMMONED: { case MSG_SPSUMMONED: {
...@@ -1000,6 +1076,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1000,6 +1076,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1015,6 +1093,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1015,6 +1093,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_FLIPSUMMONED: { case MSG_FLIPSUMMONED: {
...@@ -1024,6 +1104,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1024,6 +1104,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1038,6 +1120,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1038,6 +1120,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAINED: { case MSG_CHAINED: {
...@@ -1048,6 +1132,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1048,6 +1132,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1064,6 +1150,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1064,6 +1150,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAIN_SOLVED: { case MSG_CHAIN_SOLVED: {
...@@ -1074,6 +1162,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1074,6 +1162,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1089,6 +1179,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1089,6 +1179,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
...@@ -1105,6 +1197,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1105,6 +1197,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CHAIN_DISABLED: { case MSG_CHAIN_DISABLED: {
...@@ -1115,6 +1209,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1115,6 +1209,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CARD_SELECTED: { case MSG_CARD_SELECTED: {
...@@ -1133,6 +1229,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1133,6 +1229,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_BECOME_TARGET: { case MSG_BECOME_TARGET: {
...@@ -1144,6 +1242,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1144,6 +1242,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DRAW: { case MSG_DRAW: {
...@@ -1152,6 +1252,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1152,6 +1252,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbufw = pbuf; pbufw = pbuf;
pbuf += count * 4; pbuf += count * 4;
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
if(!(pbufw[3] & 0x80)) if(!(pbufw[3] & 0x80))
BufferIO::WriteInt32(pbufw, 0); BufferIO::WriteInt32(pbufw, 0);
...@@ -1173,6 +1275,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1173,6 +1275,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_RECOVER: { case MSG_RECOVER: {
...@@ -1183,6 +1287,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1183,6 +1287,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_EQUIP: { case MSG_EQUIP: {
...@@ -1193,6 +1299,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1193,6 +1299,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_LPUPDATE: { case MSG_LPUPDATE: {
...@@ -1203,6 +1311,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1203,6 +1311,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_UNEQUIP: { case MSG_UNEQUIP: {
...@@ -1213,6 +1323,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1213,6 +1323,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CARD_TARGET: { case MSG_CARD_TARGET: {
...@@ -1223,6 +1335,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1223,6 +1335,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_CANCEL_TARGET: { case MSG_CANCEL_TARGET: {
...@@ -1233,6 +1347,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1233,6 +1347,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PAY_LPCOST: { case MSG_PAY_LPCOST: {
...@@ -1243,6 +1359,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1243,6 +1359,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ADD_COUNTER: { case MSG_ADD_COUNTER: {
...@@ -1253,6 +1371,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1253,6 +1371,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_REMOVE_COUNTER: { case MSG_REMOVE_COUNTER: {
...@@ -1263,6 +1383,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1263,6 +1383,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ATTACK: { case MSG_ATTACK: {
...@@ -1273,6 +1395,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1273,6 +1395,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_BATTLE: { case MSG_BATTLE: {
...@@ -1283,6 +1407,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1283,6 +1407,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ATTACK_DISABLED: { case MSG_ATTACK_DISABLED: {
...@@ -1292,6 +1418,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1292,6 +1418,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_DAMAGE_STEP_START: { case MSG_DAMAGE_STEP_START: {
...@@ -1301,6 +1429,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1301,6 +1429,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
break; break;
...@@ -1312,6 +1442,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1312,6 +1442,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0); RefreshMzone(0);
RefreshMzone(1); RefreshMzone(1);
break; break;
...@@ -1332,6 +1464,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1332,6 +1464,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_TOSS_DICE: { case MSG_TOSS_DICE: {
...@@ -1344,6 +1478,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1344,6 +1478,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_ANNOUNCE_RACE: { case MSG_ANNOUNCE_RACE: {
...@@ -1384,6 +1520,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1384,6 +1520,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: { case MSG_PLAYER_HINT: {
...@@ -1422,6 +1560,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1422,6 +1560,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[i], STOC_GAME_MSG, offset, pbuf - offset);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshExtra(player); RefreshExtra(player);
RefreshMzone(0, 0x81fff, 0); RefreshMzone(0, 0x81fff, 0);
RefreshMzone(1, 0x81fff, 0); RefreshMzone(1, 0x81fff, 0);
...@@ -1467,8 +1607,12 @@ void TagDuel::EndDuel() { ...@@ -1467,8 +1607,12 @@ void TagDuel::EndDuel() {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
NetServer::ReSendToPlayer(players[2]); NetServer::ReSendToPlayer(players[2]);
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
if (host_info.replay_mode == 0) {
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
for(auto oit = recorders.begin(); oit != recorders.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
}
end_duel(pduel); end_duel(pduel);
pduel = 0; pduel = 0;
} }
...@@ -1510,6 +1654,8 @@ void TagDuel::RefreshMzone(int player, int flag, int use_cache) { ...@@ -1510,6 +1654,8 @@ void TagDuel::RefreshMzone(int player, int flag, int use_cache) {
int pid = (player == 0) ? 0 : 2; int pid = (player == 0) ? 0 : 2;
NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 3);
NetServer::ReSendToPlayer(players[pid + 1]); NetServer::ReSendToPlayer(players[pid + 1]);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
int clen = BufferIO::ReadInt32(qbuf); int clen = BufferIO::ReadInt32(qbuf);
if (clen == 4) if (clen == 4)
...@@ -1534,6 +1680,8 @@ void TagDuel::RefreshSzone(int player, int flag, int use_cache) { ...@@ -1534,6 +1680,8 @@ void TagDuel::RefreshSzone(int player, int flag, int use_cache) {
int pid = (player == 0) ? 0 : 2; int pid = (player == 0) ? 0 : 2;
NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 3);
NetServer::ReSendToPlayer(players[pid + 1]); NetServer::ReSendToPlayer(players[pid + 1]);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
for (int i = 0; i < 8; ++i) { for (int i = 0; i < 8; ++i) {
int clen = BufferIO::ReadInt32(qbuf); int clen = BufferIO::ReadInt32(qbuf);
if (clen == 4) if (clen == 4)
...@@ -1556,6 +1704,8 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) { ...@@ -1556,6 +1704,8 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, LOCATION_HAND); BufferIO::WriteInt8(qbuf, LOCATION_HAND);
int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, query_buffer, len + 3);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
int qlen = 0, slen; int qlen = 0, slen;
while(qlen < len) { while(qlen < len) {
slen = BufferIO::ReadInt32(qbuf); slen = BufferIO::ReadInt32(qbuf);
...@@ -1589,6 +1739,8 @@ void TagDuel::RefreshGrave(int player, int flag, int use_cache) { ...@@ -1589,6 +1739,8 @@ void TagDuel::RefreshGrave(int player, int flag, int use_cache) {
NetServer::ReSendToPlayer(players[3]); NetServer::ReSendToPlayer(players[3]);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::ReSendToPlayer(*pit); NetServer::ReSendToPlayer(*pit);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
} }
void TagDuel::RefreshExtra(int player, int flag, int use_cache) { void TagDuel::RefreshExtra(int player, int flag, int use_cache) {
char query_buffer[0x2000]; char query_buffer[0x2000];
...@@ -1611,6 +1763,8 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) { ...@@ -1611,6 +1763,8 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) {
int pid = (player == 0) ? 0 : 2; int pid = (player == 0) ? 0 : 2;
NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4); NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4);
NetServer::ReSendToPlayer(players[pid + 1]); NetServer::ReSendToPlayer(players[pid + 1]);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
if(qbuf[15] & POS_FACEUP) { if(qbuf[15] & POS_FACEUP) {
pid = 2 - pid; pid = 2 - pid;
NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4); NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4);
...@@ -1622,6 +1776,8 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) { ...@@ -1622,6 +1776,8 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) {
int pid = (player == 0) ? 0 : 2; int pid = (player == 0) ? 0 : 2;
NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4); NetServer::SendBufferToPlayer(players[pid], STOC_GAME_MSG, query_buffer, len + 4);
NetServer::ReSendToPlayer(players[pid + 1]); NetServer::ReSendToPlayer(players[pid + 1]);
for(auto pit = recorders.begin(); pit != recorders.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
if(location == LOCATION_REMOVED && (qbuf[15] & POS_FACEDOWN)) if(location == LOCATION_REMOVED && (qbuf[15] & POS_FACEDOWN))
return; return;
if (location & 0x90) { if (location & 0x90) {
...@@ -1638,17 +1794,7 @@ int TagDuel::MessageHandler(long fduel, int type) { ...@@ -1638,17 +1794,7 @@ int TagDuel::MessageHandler(long fduel, int type) {
return 0; return 0;
char msgbuf[1024]; char msgbuf[1024];
get_log_message(fduel, (byte*)msgbuf); get_log_message(fduel, (byte*)msgbuf);
if(enable_log == 1) { fprintf(stderr, "%s\n", msgbuf);
wchar_t wbuf[1024];
BufferIO::DecodeUTF8(msgbuf, wbuf);
//mainGame->AddChatMsg(wbuf, 9);
} else if(enable_log == 2) {
FILE* fp = fopen("error.log", "at");
if(!fp)
return 0;
fprintf(fp, "[Script error:] %s\n", msgbuf);
fclose(fp);
}
return 0; return 0;
} }
void TagDuel::TagTimer(evutil_socket_t fd, short events, void* arg) { void TagDuel::TagTimer(evutil_socket_t fd, short events, void* arg) {
......
...@@ -46,6 +46,7 @@ protected: ...@@ -46,6 +46,7 @@ protected:
DuelPlayer* pplayer[4]; DuelPlayer* pplayer[4];
DuelPlayer* cur_player[2]; DuelPlayer* cur_player[2];
std::set<DuelPlayer*> observers; std::set<DuelPlayer*> observers;
std::set<DuelPlayer*> recorders;
bool ready[4]; bool ready[4];
Deck pdeck[4]; Deck pdeck[4];
unsigned char hand_result[2]; unsigned char hand_result[2];
......
Subproject commit 96bbbedb6e828f4a227cf5405ed8e284b0def2cc Subproject commit dd4bbf6b6330c492196bafea43d38a04e9e4cbc5
solution "ygo"
location "build"
language "C++"
objdir "obj"
configurations { "Debug", "Release" }
configuration "windows"
defines { "WIN32", "_WIN32" }
configuration "bsd"
defines { "LUA_USE_POSIX" }
includedirs { "/usr/local/include" }
libdirs { "/usr/local/lib" }
configuration "macosx"
defines { "LUA_USE_MACOSX" }
includedirs { "/usr/local/include/*" }
libdirs { "/usr/local/lib", "/usr/X11/lib" }
buildoptions { "-stdlib=libc++" }
links {"OpenGL.framework","Cocoa.framework","IOKit.framework"}
configuration "linux"
defines { "LUA_USE_LINUX" }
configuration "Release"
flags { "OptimizeSpeed" }
targetdir "bin/release"
configuration "Debug"
symbols "On"
defines "_DEBUG"
targetdir "bin/debug"
configuration { "Release", "vs*" }
flags { "StaticRuntime", "LinkTimeOptimization" }
disablewarnings { "4244", "4267", "4838", "4577", "4819", "4018", "4996", "4477" }
configuration { "Release", "not vs*" }
symbols "On"
defines "NDEBUG"
buildoptions "-march=native"
configuration { "Debug", "vs*" }
defines { "_ITERATOR_DEBUG_LEVEL=0" }
configuration "vs*"
flags "EnableSSE2"
defines { "_CRT_SECURE_NO_WARNINGS" }
configuration "not vs*"
buildoptions { "-fno-strict-aliasing", "-Wno-multichar" }
configuration {"not vs*", "windows"}
buildoptions { "-static-libgcc" }
startproject "ygopro"
include "ocgcore"
include "gframe"
if os.is("windows") then
include "event"
include "lua"
include "sqlite3"
end
Subproject commit 5485784eac297306878f20f2c6cd4a0a51698653 Subproject commit 6a65f1ba96072e53a6c57efca4817ae6f716f9a3
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