Commit 4de81139 authored by nanahira's avatar nanahira

Merge branch 'server' of github.com:moecube/ygopro into server

parents fc37bc6b 50e2fa1a
...@@ -627,6 +627,14 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -627,6 +627,14 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
RefreshExtra(0); RefreshExtra(0);
RefreshExtra(1); RefreshExtra(1);
start_duel(pduel, opt); start_duel(pduel, opt);
if(host_info.time_limit) {
time_elapsed = 0;
#ifdef YGOPRO_SERVER_MODE
time_compensator = host_info.time_limit;
#endif
timeval timeout = { 1, 0 };
event_add(etimer, &timeout);
}
Process(); Process();
} }
void SingleDuel::Process() { void SingleDuel::Process() {
...@@ -1763,7 +1771,7 @@ void SingleDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) { ...@@ -1763,7 +1771,7 @@ void SingleDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {
if(time_limit[dp->type] >= time_elapsed) if(time_limit[dp->type] >= time_elapsed)
time_limit[dp->type] -= time_elapsed; time_limit[dp->type] -= time_elapsed;
else time_limit[dp->type] = 0; else time_limit[dp->type] = 0;
event_del(etimer); time_elapsed = 0;
} }
Process(); Process();
} }
...@@ -1788,6 +1796,7 @@ void SingleDuel::EndDuel() { ...@@ -1788,6 +1796,7 @@ void SingleDuel::EndDuel() {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
#endif //YGOPRO_SERVER_MODE #endif //YGOPRO_SERVER_MODE
end_duel(pduel); end_duel(pduel);
event_del(etimer);
pduel = 0; pduel = 0;
} }
void SingleDuel::WaitforResponse(int playerid) { void SingleDuel::WaitforResponse(int playerid) {
...@@ -1874,9 +1883,15 @@ void SingleDuel::TimeConfirm(DuelPlayer* dp) { ...@@ -1874,9 +1883,15 @@ void SingleDuel::TimeConfirm(DuelPlayer* dp) {
if(dp->type != last_response) if(dp->type != last_response)
return; return;
players[last_response]->state = CTOS_RESPONSE; players[last_response]->state = CTOS_RESPONSE;
time_elapsed = 0; #ifdef YGOPRO_SERVER_MODE
timeval timeout = {1, 0}; if(time_elapsed < 10 && time_elapsed <= time_compensator){
event_add(etimer, &timeout); time_compensator -= time_elapsed;
time_elapsed = 0;
}
#else
if(time_elapsed < 10)
time_elapsed = 0;
#endif //YGOPRO_SERVER_MODE
} }
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
void SingleDuel::RefreshMzone(int player, int flag, int use_cache, DuelPlayer* dp) void SingleDuel::RefreshMzone(int player, int flag, int use_cache, DuelPlayer* dp)
...@@ -2186,7 +2201,10 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) { ...@@ -2186,7 +2201,10 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
sd->EndDuel(); sd->EndDuel();
sd->DuelEndProc(); sd->DuelEndProc();
event_del(sd->etimer); event_del(sd->etimer);
return;
} }
timeval timeout = { 1, 0 };
event_add(sd->etimer, &timeout);
} }
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
void SingleDuel::TestCard(int code) { void SingleDuel::TestCard(int code) {
......
...@@ -79,6 +79,9 @@ protected: ...@@ -79,6 +79,9 @@ protected:
unsigned char match_result[3]; unsigned char match_result[3];
unsigned short time_limit[2]; unsigned short time_limit[2];
unsigned short time_elapsed; unsigned short time_elapsed;
#ifdef YGOPRO_SERVER_MODE
unsigned short time_compensator;
#endif
}; };
} }
......
...@@ -632,6 +632,14 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -632,6 +632,14 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
RefreshExtra(0); RefreshExtra(0);
RefreshExtra(1); RefreshExtra(1);
start_duel(pduel, opt); start_duel(pduel, opt);
if(host_info.time_limit) {
time_elapsed = 0;
#ifdef YGOPRO_SERVER_MODE
time_compensator = host_info.time_limit;
#endif
timeval timeout = { 1, 0 };
event_add(etimer, &timeout);
}
Process(); Process();
} }
void TagDuel::Process() { void TagDuel::Process() {
...@@ -1858,7 +1866,7 @@ void TagDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) { ...@@ -1858,7 +1866,7 @@ void TagDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {
if(time_limit[resp_type] >= time_elapsed) if(time_limit[resp_type] >= time_elapsed)
time_limit[resp_type] -= time_elapsed; time_limit[resp_type] -= time_elapsed;
else time_limit[resp_type] = 0; else time_limit[resp_type] = 0;
event_del(etimer); time_elapsed = 0;
} }
Process(); Process();
} }
...@@ -1885,6 +1893,7 @@ void TagDuel::EndDuel() { ...@@ -1885,6 +1893,7 @@ void TagDuel::EndDuel() {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
#endif #endif
end_duel(pduel); end_duel(pduel);
event_del(etimer);
pduel = 0; pduel = 0;
} }
void TagDuel::WaitforResponse(int playerid) { void TagDuel::WaitforResponse(int playerid) {
...@@ -1975,9 +1984,15 @@ void TagDuel::TimeConfirm(DuelPlayer* dp) { ...@@ -1975,9 +1984,15 @@ void TagDuel::TimeConfirm(DuelPlayer* dp) {
if(dp != cur_player[last_response]) if(dp != cur_player[last_response])
return; return;
cur_player[last_response]->state = CTOS_RESPONSE; cur_player[last_response]->state = CTOS_RESPONSE;
time_elapsed = 0; #ifdef YGOPRO_SERVER_MODE
timeval timeout = {1, 0}; if(time_elapsed < 10 && time_elapsed <= time_compensator){
event_add(etimer, &timeout); time_compensator -= time_elapsed;
time_elapsed = 0;
}
#else
if(time_elapsed < 10)
time_elapsed = 0;
#endif //YGOPRO_SERVER_MODE
} }
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
void TagDuel::RefreshMzone(int player, int flag, int use_cache, DuelPlayer* dp) void TagDuel::RefreshMzone(int player, int flag, int use_cache, DuelPlayer* dp)
...@@ -2333,7 +2348,10 @@ void TagDuel::TagTimer(evutil_socket_t fd, short events, void* arg) { ...@@ -2333,7 +2348,10 @@ void TagDuel::TagTimer(evutil_socket_t fd, short events, void* arg) {
sd->EndDuel(); sd->EndDuel();
sd->DuelEndProc(); sd->DuelEndProc();
event_del(sd->etimer); event_del(sd->etimer);
return;
} }
timeval timeout = { 1, 0 };
event_add(sd->etimer, &timeout);
} }
} }
...@@ -73,6 +73,9 @@ protected: ...@@ -73,6 +73,9 @@ protected:
unsigned char turn_count; unsigned char turn_count;
unsigned short time_limit[2]; unsigned short time_limit[2];
unsigned short time_elapsed; unsigned short time_elapsed;
#ifdef YGOPRO_SERVER_MODE
unsigned short time_compensator;
#endif
}; };
} }
......
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