Commit d3f290c6 authored by fallenstardust's avatar fallenstardust

洗切盖卡

parent 9b6da034
......@@ -501,6 +501,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
break;
}
case MSG_SHUFFLE_SET_CARD: {
pbuf++;
count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8;
DuelClient::ClientAnalyze(offset, pbuf - offset);
......
......@@ -876,14 +876,21 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
break;
}
case MSG_SHUFFLE_SET_CARD: {
int loc = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0);
if(loc == LOCATION_MZONE) {
RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0);
}
else {
RefreshSzone(0, 0x181fff, 0);
RefreshSzone(1, 0x181fff, 0);
}
break;
}
case MSG_NEW_TURN: {
......
......@@ -56,12 +56,19 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame->dInfo.turn = 0;
char filename[256];
size_t slen = 0;
if(open_file) {
open_file = false;
slen = BufferIO::EncodeUTF8(open_file_name, filename);
if(!preload_script(pduel, filename, slen)) {
wchar_t fname[256];
myswprintf(fname, L"./single/%ls");
myswprintf(fname, L"./single/%ls", open_file_name);
slen = BufferIO::EncodeUTF8(fname, filename);
if(!preload_script(pduel, filename, slen))
slen = 0;
}
} else {
const wchar_t* name = mainGame->lstSinglePlayList->getListItem(mainGame->lstSinglePlayList->getSelected());
wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name);
slen = BufferIO::EncodeUTF8(fname, filename);
if(!preload_script(pduel, filename, slen))
......@@ -411,6 +418,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
break;
}
case MSG_SHUFFLE_SET_CARD: {
pbuf++;
count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8;
DuelClient::ClientAnalyze(offset, pbuf - offset);
......
......@@ -834,6 +834,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
break;
}
case MSG_SHUFFLE_SET_CARD: {
int loc = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
......@@ -842,8 +843,13 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0);
if(loc == LOCATION_MZONE) {
RefreshMzone(0, 0x181fff, 0);
RefreshMzone(1, 0x181fff, 0);
} else {
RefreshSzone(0, 0x181fff, 0);
RefreshSzone(1, 0x181fff, 0);
}
break;
}
case MSG_NEW_TURN: {
......
......@@ -1353,12 +1353,15 @@ int32 scriptlib::duel_shuffle_setcard(lua_State *L) {
card* ms[7];
uint8 seq[7];
uint8 tp = 2;
uint8 loc = 0;
uint8 ct = 0;
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
card* pcard = *cit;
if(pcard->current.location != LOCATION_MZONE || (pcard->current.position & POS_FACEUP) || (tp != 2 && (pcard->current.controler != tp)))
if((loc != 0 && (pcard->current.location != loc)) || (pcard->current.location != LOCATION_MZONE && pcard->current.location != LOCATION_SZONE)
|| (pcard->current.position & POS_FACEUP) || (pcard->current.location == LOCATION_SZONE && pcard->current.sequence > 4) || (tp != 2 && (pcard->current.controler != tp)))
return 0;
tp = pcard->current.controler;
loc = pcard->current.location;
ms[ct] = pcard;
seq[ct] = pcard->current.sequence;
ct++;
......@@ -1368,11 +1371,15 @@ int32 scriptlib::duel_shuffle_setcard(lua_State *L) {
std::swap(ms[i], ms[s]);
}
pduel->write_buffer8(MSG_SHUFFLE_SET_CARD);
pduel->write_buffer8(loc);
pduel->write_buffer8(ct);
for(uint32 i = 0; i < ct; ++i) {
card* pcard = ms[i];
pduel->write_buffer32(pcard->get_info_location());
pduel->game_field->player[tp].list_mzone[seq[i]] = pcard;
if(loc == LOCATION_MZONE)
pduel->game_field->player[tp].list_mzone[seq[i]] = pcard;
else
pduel->game_field->player[tp].list_szone[seq[i]] = pcard;
pcard->current.sequence = seq[i];
pduel->game_field->raise_single_event(pcard, 0, EVENT_MOVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, tp, 0);
}
......
......@@ -180,7 +180,6 @@
<string name="delete">삭제</string>
<string name="mycard">MYcard</string>
<string name="arena">듀얼리스트db</string>
<string name="mc_home">홈화면</string>
<string name="mc_chat">채팅룸</string>
<string name="noting_to_send">전송할 수 없습니다.</string>
<string name="sending_failed">전송 실패</string>
......@@ -188,6 +187,7 @@
<string name="logining_failed">로그인 실패, 다시 시도 하십시오</string>
<string name="failed_reason">해당 사유로 로그인을 할 수 없습니다</string>
<string name="send">보내기</string>
<string name="mc_home">홈화면</string>
<string name="bbs">커뮤니티</string>
<string name="settings_pref_settings_only_game">앱 실행시 YGOCORE 바로 실행(설정하지마십시오)</string>
<string name="only_game_tip">앱의 초기화를 위해 설정을 초기화 해야합니다.</string>
......
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