Commit 3b5886bf authored by mercury233's avatar mercury233
parents 731cb247 64f6ff07
...@@ -20,6 +20,7 @@ ClientField::ClientField() { ...@@ -20,6 +20,7 @@ ClientField::ClientField() {
extra_act = false; extra_act = false;
pzone_act[0] = false; pzone_act[0] = false;
pzone_act[1] = false; pzone_act[1] = false;
conti_act = false;
deck_reversed = false; deck_reversed = false;
for(int p = 0; p < 2; ++p) { for(int p = 0; p < 2; ++p) {
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
...@@ -76,6 +77,7 @@ void ClientField::Clear() { ...@@ -76,6 +77,7 @@ void ClientField::Clear() {
extra_act = false; extra_act = false;
pzone_act[0] = false; pzone_act[0] = false;
pzone_act[1] = false; pzone_act[1] = false;
conti_act = false;
deck_reversed = false; deck_reversed = false;
} }
void ClientField::Initial(int player, int deckc, int extrac) { void ClientField::Initial(int player, int deckc, int extrac) {
...@@ -335,6 +337,7 @@ void ClientField::ClearCommandFlag() { ...@@ -335,6 +337,7 @@ void ClientField::ClearCommandFlag() {
remove_act = false; remove_act = false;
pzone_act[0] = false; pzone_act[0] = false;
pzone_act[1] = false; pzone_act[1] = false;
conti_act = false;
} }
void ClientField::ClearSelect() { void ClientField::ClearSelect() {
std::vector<ClientCard*>::iterator cit; std::vector<ClientCard*>::iterator cit;
...@@ -356,6 +359,7 @@ void ClientField::ClearChainSelect() { ...@@ -356,6 +359,7 @@ void ClientField::ClearChainSelect() {
grave_act = false; grave_act = false;
remove_act = false; remove_act = false;
extra_act = false; extra_act = false;
conti_act = false;
} }
// needs to be synchronized with EGET_SCROLL_BAR_CHANGED // needs to be synchronized with EGET_SCROLL_BAR_CHANGED
void ClientField::ShowSelectCard(bool buttonok, bool chain) { void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...@@ -397,11 +401,18 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -397,11 +401,18 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
if(selectable_cards[i]->overlayTarget->controler) if(selectable_cards[i]->overlayTarget->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else if(selectable_cards[i]->location == LOCATION_EXTRA || selectable_cards[i]->location == LOCATION_REMOVED) {
if(selectable_cards[i]->position & POS_FACEDOWN)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else { } else {
if((selectable_cards[i]->controler) if(selectable_cards[i]->controler)
|| ((selectable_cards[i]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (selectable_cards[i]->position & POS_FACEDOWN)))
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} }
} else { } else {
if(sort_list[i]) { if(sort_list[i]) {
...@@ -519,12 +530,20 @@ void ClientField::ShowLocationCard() { ...@@ -519,12 +530,20 @@ void ClientField::ShowLocationCard() {
mainGame->stDisplayPos[i]->setOverrideColor(0xff0000ff); mainGame->stDisplayPos[i]->setOverrideColor(0xff0000ff);
if(display_cards[i]->overlayTarget->controler) if(display_cards[i]->overlayTarget->controler)
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else
mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} else if(display_cards[i]->location == LOCATION_EXTRA || display_cards[i]->location == LOCATION_REMOVED) {
if(display_cards[i]->position & POS_FACEDOWN)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(display_cards[i]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else { } else {
if((display_cards[i]->controler) if(display_cards[i]->controler)
|| ((display_cards[i]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (display_cards[i]->position & POS_FACEDOWN)))
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else
mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} }
mainGame->stDisplayPos[i]->setVisible(true); mainGame->stDisplayPos[i]->setVisible(true);
mainGame->stDisplayPos[i]->setRelativePosition(rect<s32>(startpos + i * 125, 30, startpos + 120 + i * 125, 50)); mainGame->stDisplayPos[i]->setRelativePosition(rect<s32>(startpos + i * 125, 30, startpos + 120 + i * 125, 50));
...@@ -1112,6 +1131,7 @@ bool ClientField::ShowSelectSum(bool panelmode) { ...@@ -1112,6 +1131,7 @@ bool ClientField::ShowSelectSum(bool panelmode) {
if(CheckSelectSum()) { if(CheckSelectSum()) {
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) { if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards(); SetResponseSelectedCards();
ShowCancelOrFinishButton(0);
if(mainGame->wCardSelect->isVisible()) if(mainGame->wCardSelect->isVisible())
mainGame->HideElement(mainGame->wCardSelect, true); mainGame->HideElement(mainGame->wCardSelect, true);
else { else {
...@@ -1132,6 +1152,7 @@ bool ClientField::ShowSelectSum(bool panelmode) { ...@@ -1132,6 +1152,7 @@ bool ClientField::ShowSelectSum(bool panelmode) {
if(CheckSelectSum()) { if(CheckSelectSum()) {
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) { if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards(); SetResponseSelectedCards();
ShowCancelOrFinishButton(0);
DuelClient::SendResponse(); DuelClient::SendResponse();
return true; return true;
} else { } else {
...@@ -1146,6 +1167,11 @@ bool ClientField::ShowSelectSum(bool panelmode) { ...@@ -1146,6 +1167,11 @@ bool ClientField::ShowSelectSum(bool panelmode) {
} else } else
select_ready = false; select_ready = false;
} }
if (select_ready) {
ShowCancelOrFinishButton(1);
} else {
ShowCancelOrFinishButton(0);
}
return false; return false;
} }
bool ClientField::CheckSelectSum() { bool ClientField::CheckSelectSum() {
......
...@@ -39,6 +39,8 @@ public: ...@@ -39,6 +39,8 @@ public:
std::vector<ClientCard*> attackable_cards; std::vector<ClientCard*> attackable_cards;
std::vector<ClientCard*> conti_cards; std::vector<ClientCard*> conti_cards;
std::vector<int> activatable_descs; std::vector<int> activatable_descs;
std::set<int> reset_descs;
std::set<int> conti_descs;
std::vector<int> select_options; std::vector<int> select_options;
std::vector<ChainInfo> chains; std::vector<ChainInfo> chains;
int extra_p_count[2]; int extra_p_count[2];
...@@ -72,6 +74,7 @@ public: ...@@ -72,6 +74,7 @@ public:
bool deck_act; bool deck_act;
bool extra_act; bool extra_act;
bool pzone_act[2]; bool pzone_act[2];
bool conti_act;
bool chain_forced; bool chain_forced;
ChainInfo current_chain; ChainInfo current_chain;
bool last_chain; bool last_chain;
...@@ -126,6 +129,7 @@ public: ...@@ -126,6 +129,7 @@ public:
void GetHoverField(int x, int y); void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y); void ShowMenu(int flag, int x, int y);
void UpdateChainButtons(); void UpdateChainButtons();
void ShowCancelOrFinishButton(int buttonOp);
void SetResponseSelectedCards() const; void SetResponseSelectedCards() const;
}; };
......
...@@ -39,6 +39,25 @@ static int parse_filter(const wchar_t* pstr, unsigned int* type) { ...@@ -39,6 +39,25 @@ static int parse_filter(const wchar_t* pstr, unsigned int* type) {
*type = 0; *type = 0;
return 0; return 0;
} }
static bool check_set_code(const CardDataC& data, int set_code) {
unsigned long long sc = data.setcode;
if (data.alias) {
auto aptr = dataManager._datas.find(data.alias);
if (aptr != dataManager._datas.end())
sc = aptr->second.setcode;
}
bool res = false;
int settype = set_code & 0xfff;
int setsubtype = set_code & 0xf000;
while (sc) {
if ((sc & 0xfff) == settype && (sc & 0xf000 & setsubtype) == setsubtype)
res = true;
sc = sc >> 16;
}
return res;
}
bool DeckBuilder::OnEvent(const irr::SEvent& event) { bool DeckBuilder::OnEvent(const irr::SEvent& event) {
switch(event.EventType) { switch(event.EventType) {
case irr::EET_GUI_EVENT: { case irr::EET_GUI_EVENT: {
...@@ -193,8 +212,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -193,8 +212,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
deckManager.current_deck.main.clear(); deckManager.current_deck.main.clear();
deckManager.current_deck.extra.clear(); deckManager.current_deck.extra.clear();
deckManager.current_deck.side.clear(); deckManager.current_deck.side.clear();
} } else if(is_deleting) {
else if(is_deleting) {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if (deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) { if (deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
mainGame->cbDBDecks->removeItem(sel); mainGame->cbDBDecks->removeItem(sel);
...@@ -359,7 +377,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -359,7 +377,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EET_MOUSE_INPUT_EVENT: { case irr::EET_MOUSE_INPUT_EVENT: {
switch(event.MouseInput.Event) { switch(event.MouseInput.Event) {
case irr::EMIE_LMOUSE_PRESSED_DOWN: { case irr::EMIE_LMOUSE_PRESSED_DOWN: {
position2d<s32> mouse_pos = position2d<s32>(event.MouseInput.X, event.MouseInput.Y); irr::core::position2di mouse_pos(event.MouseInput.X, event.MouseInput.Y);
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement(); irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root) if(root->getElementFromPoint(mouse_pos) != root)
break; break;
...@@ -603,14 +621,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -603,14 +621,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
else if (deckManager.current_deck.side.size() < 15) else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
} } else if (hovered_pos == 2) {
else if (hovered_pos == 2) {
if (deckManager.current_deck.extra.size() < 15) if (deckManager.current_deck.extra.size() < 15)
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
else if (deckManager.current_deck.side.size() < 15) else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
} } else if (hovered_pos == 3) {
else if (hovered_pos == 3) {
if (deckManager.current_deck.side.size() < 15) if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
else { else {
...@@ -619,8 +635,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -619,8 +635,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60)
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
} }
} } else {
else {
if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15)
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60)
...@@ -633,7 +648,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -633,7 +648,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EMIE_MOUSE_MOVED: { case irr::EMIE_MOUSE_MOVED: {
int x = event.MouseInput.X; int x = event.MouseInput.X;
int y = event.MouseInput.Y; int y = event.MouseInput.Y;
position2d<s32> mouse_pos = position2d<s32>(x, y); irr::core::position2di mouse_pos(x, y);
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement(); irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root) if(root->getElementFromPoint(mouse_pos) != root)
break; break;
...@@ -837,26 +852,15 @@ void DeckBuilder::FilterCards() { ...@@ -837,26 +852,15 @@ void DeckBuilder::FilterCards() {
if(wcsstr(text.name, &pstr[1]) == 0) if(wcsstr(text.name, &pstr[1]) == 0)
continue; continue;
} else if(pstr[0] == L'@' && set_code) { } else if(pstr[0] == L'@' && set_code) {
unsigned long long sc = data.setcode; if(!check_set_code(data, set_code)) continue;
if(data.alias) {
auto aptr = dataManager._datas.find(data.alias);
if(aptr != dataManager._datas.end())
sc = aptr->second.setcode;
}
bool res = false;
int settype = set_code & 0xfff;
int setsubtype = set_code & 0xf000;
while(sc) {
if ((sc & 0xfff) == settype && (sc & 0xf000 & setsubtype) == setsubtype)
res = true;
sc = sc >> 16;
}
if(!res) continue;
} else { } else {
if(wcsstr(text.name, pstr) == 0 && wcsstr(text.text, pstr) == 0) if(wcsstr(text.name, pstr) == 0 && wcsstr(text.text, pstr) == 0) {
set_code = dataManager.GetSetCode(&pstr[0]);
if(!set_code || !check_set_code(data, set_code))
continue; continue;
} }
} }
}
results.push_back(ptr); results.push_back(ptr);
} }
myswprintf(result_string, L"%d", results.size()); myswprintf(result_string, L"%d", results.size());
......
...@@ -159,7 +159,7 @@ void Game::DrawBackGround() { ...@@ -159,7 +159,7 @@ void Game::DrawBackGround() {
} }
} }
//current sel //current sel
if (dField.hovered_location != 0 && dField.hovered_location != 2) { if (dField.hovered_location != 0 && dField.hovered_location != 2 && dField.hovered_location != POSITION_HINT) {
int index = 0; int index = 0;
if (dField.hovered_controler == 0) { if (dField.hovered_controler == 0) {
if (dField.hovered_location == LOCATION_DECK) index = 0; if (dField.hovered_location == LOCATION_DECK) index = 0;
...@@ -321,6 +321,12 @@ void Game::DrawMisc() { ...@@ -321,6 +321,12 @@ void Game::DrawMisc() {
driver->setTransform(irr::video::ETS_WORLD, im); driver->setTransform(irr::video::ETS_WORLD, im);
driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2);
} }
if(dField.conti_act) {
im.setTranslation(vector3df(matManager.vFields[136].Pos.X - (matManager.vFields[136].Pos.X - matManager.vFields[137].Pos.X)/2,
matManager.vFields[136].Pos.Y - (matManager.vFields[136].Pos.Y - matManager.vFields[138].Pos.Y)/2, 0.03f));
driver->setTransform(irr::video::ETS_WORLD, im);
driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2);
}
if(dField.chains.size() > 1) { if(dField.chains.size() > 1) {
for(size_t i = 0; i < dField.chains.size(); ++i) { for(size_t i = 0; i < dField.chains.size(); ++i) {
if(dField.chains[i].solved) if(dField.chains[i].solved)
......
...@@ -288,6 +288,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -288,6 +288,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnChainIgnore->setVisible(false); mainGame->btnChainIgnore->setVisible(false);
mainGame->btnChainAlways->setVisible(false); mainGame->btnChainAlways->setVisible(false);
mainGame->btnChainWhenAvail->setVisible(false); mainGame->btnChainWhenAvail->setVisible(false);
mainGame->btnCancelOrFinish->setVisible(false);
mainGame->deckBuilder.result_string[0] = L'0'; mainGame->deckBuilder.result_string[0] = L'0';
mainGame->deckBuilder.result_string[1] = 0; mainGame->deckBuilder.result_string[1] = 0;
mainGame->deckBuilder.results.clear(); mainGame->deckBuilder.results.clear();
...@@ -400,11 +401,10 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -400,11 +401,10 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnHostPrepKick[1]->setVisible(false); mainGame->btnHostPrepKick[1]->setVisible(false);
} }
mainGame->chkHostPrepReady[0]->setEnabled(false); mainGame->chkHostPrepReady[0]->setEnabled(false);
mainGame->chkHostPrepReady[0]->setChecked(false);
mainGame->chkHostPrepReady[1]->setEnabled(false); mainGame->chkHostPrepReady[1]->setEnabled(false);
mainGame->chkHostPrepReady[1]->setChecked(false);
if(selftype < 2) { if(selftype < 2) {
mainGame->chkHostPrepReady[selftype]->setEnabled(true); mainGame->chkHostPrepReady[selftype]->setEnabled(true);
mainGame->chkHostPrepReady[selftype]->setChecked(false);
mainGame->btnHostPrepDuelist->setEnabled(false); mainGame->btnHostPrepDuelist->setEnabled(false);
mainGame->btnHostPrepOB->setEnabled(true); mainGame->btnHostPrepOB->setEnabled(true);
} else { } else {
...@@ -511,6 +511,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -511,6 +511,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnChainIgnore->setVisible(false); mainGame->btnChainIgnore->setVisible(false);
mainGame->btnChainAlways->setVisible(false); mainGame->btnChainAlways->setVisible(false);
mainGame->btnChainWhenAvail->setVisible(false); mainGame->btnChainWhenAvail->setVisible(false);
mainGame->btnCancelOrFinish->setVisible(false);
mainGame->stMessage->setText(dataManager.GetSysString(1500)); mainGame->stMessage->setText(dataManager.GetSysString(1500));
mainGame->PopupElement(mainGame->wMessage); mainGame->PopupElement(mainGame->wMessage);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
...@@ -540,6 +541,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -540,6 +541,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnChainIgnore->setVisible(false); mainGame->btnChainIgnore->setVisible(false);
mainGame->btnChainAlways->setVisible(false); mainGame->btnChainAlways->setVisible(false);
mainGame->btnChainWhenAvail->setVisible(false); mainGame->btnChainWhenAvail->setVisible(false);
mainGame->btnCancelOrFinish->setVisible(false);
time_t nowtime = time(NULL); time_t nowtime = time(NULL);
struct tm *localedtime = localtime(&nowtime); struct tm *localedtime = localtime(&nowtime);
char timebuf[40]; char timebuf[40];
...@@ -1180,6 +1182,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1180,6 +1182,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->stHintMsg->setText(textBuffer); mainGame->stHintMsg->setText(textBuffer);
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
} }
if (mainGame->dField.select_cancelable) {
mainGame->dField.ShowCancelOrFinishButton(1);
} else {
mainGame->dField.ShowCancelOrFinishButton(0);
}
return false; return false;
} }
case MSG_SELECT_CHAIN: { case MSG_SELECT_CHAIN: {
...@@ -1192,11 +1199,15 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1192,11 +1199,15 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
int code, c, l, s, ss, desc; int code, c, l, s, ss, desc;
ClientCard* pcard; ClientCard* pcard;
bool panelmode = false; bool panelmode = false;
bool conti_exist = false;
mainGame->dField.chain_forced = (forced != 0); mainGame->dField.chain_forced = (forced != 0);
mainGame->dField.activatable_cards.clear(); mainGame->dField.activatable_cards.clear();
mainGame->dField.activatable_descs.clear(); mainGame->dField.activatable_descs.clear();
mainGame->dField.conti_cards.clear(); mainGame->dField.conti_cards.clear();
mainGame->dField.reset_descs.clear();
mainGame->dField.conti_descs.clear();
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
int flag = BufferIO::ReadInt8(pbuf);
code = BufferIO::ReadInt32(pbuf); code = BufferIO::ReadInt32(pbuf);
c = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf)); c = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
l = BufferIO::ReadInt8(pbuf); l = BufferIO::ReadInt8(pbuf);
...@@ -1207,14 +1218,21 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1207,14 +1218,21 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->dField.activatable_cards.push_back(pcard); mainGame->dField.activatable_cards.push_back(pcard);
mainGame->dField.activatable_descs.push_back(desc); mainGame->dField.activatable_descs.push_back(desc);
pcard->is_selected = false; pcard->is_selected = false;
if(code >= 1000000000) { if(flag == 0x1) {
pcard->is_conti = true; pcard->is_conti = true;
pcard->chain_code = code % 1000000000; pcard->chain_code = code;
mainGame->dField.conti_cards.push_back(pcard); mainGame->dField.conti_cards.push_back(pcard);
mainGame->dField.remove_act = true; mainGame->dField.conti_act = true;
mainGame->dField.conti_descs.insert(desc);
conti_exist = true;
} else { } else {
pcard->chain_code = code; pcard->chain_code = code;
pcard->is_selectable = true; pcard->is_selectable = true;
if(flag == 0x2) {
pcard->cmdFlag |= COMMAND_RESET;
mainGame->dField.reset_descs.insert(desc);
}
else
pcard->cmdFlag |= COMMAND_ACTIVATE; pcard->cmdFlag |= COMMAND_ACTIVATE;
if(l == LOCATION_GRAVE) if(l == LOCATION_GRAVE)
mainGame->dField.grave_act = true; mainGame->dField.grave_act = true;
...@@ -1242,7 +1260,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1242,7 +1260,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
return true; return true;
} }
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
if(!conti_exist)
mainGame->stHintMsg->setText(dataManager.GetSysString(550)); mainGame->stHintMsg->setText(dataManager.GetSysString(550));
else
mainGame->stHintMsg->setText(dataManager.GetSysString(556));
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
if(panelmode) { if(panelmode) {
mainGame->dField.list_command = COMMAND_ACTIVATE; mainGame->dField.list_command = COMMAND_ACTIVATE;
...@@ -1401,6 +1422,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1401,6 +1422,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
mainGame->stHintMsg->setText(textBuffer); mainGame->stHintMsg->setText(textBuffer);
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
if (mainGame->dField.select_cancelable) {
mainGame->dField.ShowCancelOrFinishButton(1);
}
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
return false; return false;
} }
...@@ -1855,16 +1879,16 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1855,16 +1879,16 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->btnLeaveGame->setVisible(true); mainGame->btnLeaveGame->setVisible(true);
} }
if(!mainGame->dInfo.isReplay && mainGame->dInfo.player_type < 7) { if(!mainGame->dInfo.isReplay && mainGame->dInfo.player_type < 7) {
if(!mainGame->chkHideChainButton->isChecked()) { if(mainGame->gameConf.control_mode == 0) {
mainGame->btnChainIgnore->setVisible(true); mainGame->btnChainIgnore->setVisible(true);
mainGame->btnChainAlways->setVisible(true); mainGame->btnChainAlways->setVisible(true);
mainGame->btnChainWhenAvail->setVisible(true); mainGame->btnChainWhenAvail->setVisible(true);
mainGame->dField.UpdateChainButtons(); mainGame->dField.UpdateChainButtons();
} } else {
else {
mainGame->btnChainIgnore->setVisible(false); mainGame->btnChainIgnore->setVisible(false);
mainGame->btnChainAlways->setVisible(false); mainGame->btnChainAlways->setVisible(false);
mainGame->btnChainWhenAvail->setVisible(false); mainGame->btnChainWhenAvail->setVisible(false);
mainGame->btnCancelOrFinish->setVisible(false);
} }
} }
if(mainGame->dInfo.isTag && mainGame->dInfo.turn != 1) { if(mainGame->dInfo.isTag && mainGame->dInfo.turn != 1) {
......
This diff is collapsed.
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
const unsigned short PRO_VERSION = 0x133A; const unsigned short PRO_VERSION = 0x133B;
namespace ygo { namespace ygo {
...@@ -289,8 +289,8 @@ bool Game::Initialize() { ...@@ -289,8 +289,8 @@ bool Game::Initialize() {
chkIgnore2->setChecked(gameConf.chkIgnore2 != 0); chkIgnore2->setChecked(gameConf.chkIgnore2 != 0);
chkHideSetname = env->addCheckBox(false, rect<s32>(20, 260, 280, 285), tabSystem, -1, dataManager.GetSysString(1354)); chkHideSetname = env->addCheckBox(false, rect<s32>(20, 260, 280, 285), tabSystem, -1, dataManager.GetSysString(1354));
chkHideSetname->setChecked(gameConf.chkHideSetname != 0); chkHideSetname->setChecked(gameConf.chkHideSetname != 0);
chkHideChainButton = env->addCheckBox(false, rect<s32>(20, 290, 280, 315), tabSystem, -1, dataManager.GetSysString(1355)); chkHideHintButton = env->addCheckBox(false, rect<s32>(20, 290, 280, 315), tabSystem, -1, dataManager.GetSysString(1355));
chkHideChainButton->setChecked(gameConf.chkHideChainButton != 0); chkHideHintButton->setChecked(gameConf.chkHideHintButton != 0);
// //
wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L""); wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L"");
wHand->getCloseButton()->setVisible(false); wHand->getCloseButton()->setVisible(false);
...@@ -415,10 +415,6 @@ bool Game::Initialize() { ...@@ -415,10 +415,6 @@ bool Game::Initialize() {
stHintMsg->setBackgroundColor(0xc0ffffff); stHintMsg->setBackgroundColor(0xc0ffffff);
stHintMsg->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); stHintMsg->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
stHintMsg->setVisible(false); stHintMsg->setVisible(false);
stTip = env->addStaticText(L"", rect<s32>(0, 0, 150, 150), false, true, 0, -1, true);
stTip->setBackgroundColor(0xc0ffffff);
stTip->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
stTip->setVisible(false);
//cmd menu //cmd menu
wCmdMenu = env->addWindow(rect<s32>(10, 10, 110, 179), false, L""); wCmdMenu = env->addWindow(rect<s32>(10, 10, 110, 179), false, L"");
wCmdMenu->setDrawTitlebar(false); wCmdMenu->setDrawTitlebar(false);
...@@ -432,6 +428,8 @@ bool Game::Initialize() { ...@@ -432,6 +428,8 @@ bool Game::Initialize() {
btnRepos = env->addButton(rect<s32>(1, 106, 99, 126), wCmdMenu, BUTTON_CMD_REPOS, dataManager.GetSysString(1154)); btnRepos = env->addButton(rect<s32>(1, 106, 99, 126), wCmdMenu, BUTTON_CMD_REPOS, dataManager.GetSysString(1154));
btnAttack = env->addButton(rect<s32>(1, 127, 99, 147), wCmdMenu, BUTTON_CMD_ATTACK, dataManager.GetSysString(1157)); btnAttack = env->addButton(rect<s32>(1, 127, 99, 147), wCmdMenu, BUTTON_CMD_ATTACK, dataManager.GetSysString(1157));
btnShowList = env->addButton(rect<s32>(1, 148, 99, 168), wCmdMenu, BUTTON_CMD_SHOWLIST, dataManager.GetSysString(1158)); btnShowList = env->addButton(rect<s32>(1, 148, 99, 168), wCmdMenu, BUTTON_CMD_SHOWLIST, dataManager.GetSysString(1158));
btnOperation = env->addButton(rect<s32>(1, 169, 99, 189), wCmdMenu, BUTTON_CMD_ACTIVATE, dataManager.GetSysString(1161));
btnReset = env->addButton(rect<s32>(1, 190, 99, 210), wCmdMenu, BUTTON_CMD_RESET, dataManager.GetSysString(1162));
//deck edit //deck edit
wDeckEdit = env->addStaticText(L"", rect<s32>(309, 5, 605, 130), true, false, 0, -1, true); wDeckEdit = env->addStaticText(L"", rect<s32>(309, 5, 605, 130), true, false, 0, -1, true);
wDeckEdit->setVisible(false); wDeckEdit->setVisible(false);
...@@ -587,9 +585,17 @@ bool Game::Initialize() { ...@@ -587,9 +585,17 @@ bool Game::Initialize() {
btnChainIgnore->setVisible(false); btnChainIgnore->setVisible(false);
btnChainAlways->setVisible(false); btnChainAlways->setVisible(false);
btnChainWhenAvail->setVisible(false); btnChainWhenAvail->setVisible(false);
//cancel or finish
btnCancelOrFinish = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CANCEL_OR_FINISH, dataManager.GetSysString(1295));
btnCancelOrFinish->setVisible(false);
//leave/surrender/exit //leave/surrender/exit
btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L""); btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L"");
btnLeaveGame->setVisible(false); btnLeaveGame->setVisible(false);
//tip
stTip = env->addStaticText(L"", rect<s32>(0, 0, 150, 150), false, true, 0, -1, true);
stTip->setBackgroundColor(0xc0ffffff);
stTip->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
stTip->setVisible(false);
device->setEventReceiver(&menuHandler); device->setEventReceiver(&menuHandler);
LoadConfig(); LoadConfig();
env->getSkin()->setFont(guiFont); env->getSkin()->setFont(guiFont);
...@@ -911,7 +917,7 @@ void Game::LoadConfig() { ...@@ -911,7 +917,7 @@ void Game::LoadConfig() {
gameConf.chkIgnore1 = 0; gameConf.chkIgnore1 = 0;
gameConf.chkIgnore2 = 0; gameConf.chkIgnore2 = 0;
gameConf.chkHideSetname = 0; gameConf.chkHideSetname = 0;
gameConf.chkHideChainButton = 0; gameConf.chkHideHintButton = 0;
gameConf.control_mode = 0; gameConf.control_mode = 0;
gameConf.draw_field_spell = 1; gameConf.draw_field_spell = 1;
gameConf.separate_clear_button = 1; gameConf.separate_clear_button = 1;
...@@ -961,8 +967,8 @@ void Game::LoadConfig() { ...@@ -961,8 +967,8 @@ void Game::LoadConfig() {
gameConf.chkIgnore2 = atoi(valbuf); gameConf.chkIgnore2 = atoi(valbuf);
} else if(!strcmp(strbuf, "hide_setname")) { } else if(!strcmp(strbuf, "hide_setname")) {
gameConf.chkHideSetname = atoi(valbuf); gameConf.chkHideSetname = atoi(valbuf);
} else if(!strcmp(strbuf, "hide_chain_button")) { } else if(!strcmp(strbuf, "hide_hint_button")) {
gameConf.chkHideChainButton = atoi(valbuf); gameConf.chkHideHintButton = atoi(valbuf);
} else if(!strcmp(strbuf, "control_mode")) { } else if(!strcmp(strbuf, "control_mode")) {
gameConf.control_mode = atoi(valbuf); gameConf.control_mode = atoi(valbuf);
} else if(!strcmp(strbuf, "draw_field_spell")) { } else if(!strcmp(strbuf, "draw_field_spell")) {
...@@ -1017,8 +1023,8 @@ void Game::SaveConfig() { ...@@ -1017,8 +1023,8 @@ void Game::SaveConfig() {
fprintf(fp, "mute_opponent = %d\n", ((mainGame->chkIgnore1->isChecked()) ? 1 : 0)); fprintf(fp, "mute_opponent = %d\n", ((mainGame->chkIgnore1->isChecked()) ? 1 : 0));
fprintf(fp, "mute_spectators = %d\n", ((mainGame->chkIgnore2->isChecked()) ? 1 : 0)); fprintf(fp, "mute_spectators = %d\n", ((mainGame->chkIgnore2->isChecked()) ? 1 : 0));
fprintf(fp, "hide_setname = %d\n", ((mainGame->chkHideSetname->isChecked()) ? 1 : 0)); fprintf(fp, "hide_setname = %d\n", ((mainGame->chkHideSetname->isChecked()) ? 1 : 0));
fprintf(fp, "hide_chain_button = %d\n", ((mainGame->chkHideChainButton->isChecked()) ? 1 : 0)); fprintf(fp, "hide_hint_button = %d\n", ((mainGame->chkHideHintButton->isChecked()) ? 1 : 0));
fprintf(fp, "#control_mode = 0: Key A/S/D/R. control_mode = 1: MouseLeft/MouseRight/NULL/F9\n"); fprintf(fp, "#control_mode = 0: Key A/S/D/R Chain Buttons. control_mode = 1: MouseLeft/MouseRight/NULL/F9 Without Chain Buttons\n");
fprintf(fp, "control_mode = %d\n", gameConf.control_mode); fprintf(fp, "control_mode = %d\n", gameConf.control_mode);
fprintf(fp, "draw_field_spell = %d\n", gameConf.draw_field_spell); fprintf(fp, "draw_field_spell = %d\n", gameConf.draw_field_spell);
fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button); fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button);
...@@ -1172,6 +1178,7 @@ void Game::CloseDuelWindow() { ...@@ -1172,6 +1178,7 @@ void Game::CloseDuelWindow() {
btnChainIgnore->setVisible(false); btnChainIgnore->setVisible(false);
btnChainAlways->setVisible(false); btnChainAlways->setVisible(false);
btnChainWhenAvail->setVisible(false); btnChainWhenAvail->setVisible(false);
btnCancelOrFinish->setVisible(false);
wChat->setVisible(false); wChat->setVisible(false);
lstLog->clear(); lstLog->clear();
logParam.clear(); logParam.clear();
......
...@@ -32,7 +32,7 @@ struct Config { ...@@ -32,7 +32,7 @@ struct Config {
int chkIgnore1; int chkIgnore1;
int chkIgnore2; int chkIgnore2;
int chkHideSetname; int chkHideSetname;
int chkHideChainButton; int chkHideHintButton;
int control_mode; int control_mode;
int draw_field_spell; int draw_field_spell;
int separate_clear_button; int separate_clear_button;
...@@ -198,7 +198,7 @@ public: ...@@ -198,7 +198,7 @@ public:
irr::gui::IGUICheckBox* chkAutoChain; irr::gui::IGUICheckBox* chkAutoChain;
irr::gui::IGUICheckBox* chkWaitChain; irr::gui::IGUICheckBox* chkWaitChain;
irr::gui::IGUICheckBox* chkHideSetname; irr::gui::IGUICheckBox* chkHideSetname;
irr::gui::IGUICheckBox* chkHideChainButton; irr::gui::IGUICheckBox* chkHideHintButton;
irr::gui::IGUIListBox* lstLog; irr::gui::IGUIListBox* lstLog;
irr::gui::IGUIButton* btnClearLog; irr::gui::IGUIButton* btnClearLog;
irr::gui::IGUIButton* btnSaveLog; irr::gui::IGUIButton* btnSaveLog;
...@@ -330,6 +330,8 @@ public: ...@@ -330,6 +330,8 @@ public:
irr::gui::IGUIButton* btnRepos; irr::gui::IGUIButton* btnRepos;
irr::gui::IGUIButton* btnAttack; irr::gui::IGUIButton* btnAttack;
irr::gui::IGUIButton* btnShowList; irr::gui::IGUIButton* btnShowList;
irr::gui::IGUIButton* btnOperation;
irr::gui::IGUIButton* btnReset;
irr::gui::IGUIButton* btnShuffle; irr::gui::IGUIButton* btnShuffle;
//chat window //chat window
irr::gui::IGUIWindow* wChat; irr::gui::IGUIWindow* wChat;
...@@ -398,6 +400,8 @@ public: ...@@ -398,6 +400,8 @@ public:
irr::gui::IGUIButton* btnChainIgnore; irr::gui::IGUIButton* btnChainIgnore;
irr::gui::IGUIButton* btnChainAlways; irr::gui::IGUIButton* btnChainAlways;
irr::gui::IGUIButton* btnChainWhenAvail; irr::gui::IGUIButton* btnChainWhenAvail;
//cancel or finish
irr::gui::IGUIButton* btnCancelOrFinish;
*/ */
}; };
...@@ -427,6 +431,10 @@ extern unsigned char draw_count; ...@@ -427,6 +431,10 @@ extern unsigned char draw_count;
#define COMMAND_REPOS 0x0020 #define COMMAND_REPOS 0x0020
#define COMMAND_ATTACK 0x0040 #define COMMAND_ATTACK 0x0040
#define COMMAND_LIST 0x0080 #define COMMAND_LIST 0x0080
#define COMMAND_OPERATION 0x0100
#define COMMAND_RESET 0x0200
#define POSITION_HINT 0x8000
#define BUTTON_LAN_MODE 100 #define BUTTON_LAN_MODE 100
#define BUTTON_SINGLE_MODE 101 #define BUTTON_SINGLE_MODE 101
...@@ -482,6 +490,7 @@ extern unsigned char draw_count; ...@@ -482,6 +490,7 @@ extern unsigned char draw_count;
#define BUTTON_CMD_ATTACK 246 #define BUTTON_CMD_ATTACK 246
#define BUTTON_CMD_SHOWLIST 247 #define BUTTON_CMD_SHOWLIST 247
#define BUTTON_CMD_SHUFFLE 248 #define BUTTON_CMD_SHUFFLE 248
#define BUTTON_CMD_RESET 249
#define BUTTON_ANNUMBER_OK 250 #define BUTTON_ANNUMBER_OK 250
#define BUTTON_ANCARD_OK 251 #define BUTTON_ANCARD_OK 251
#define EDITBOX_ANCARD 252 #define EDITBOX_ANCARD 252
...@@ -495,6 +504,7 @@ extern unsigned char draw_count; ...@@ -495,6 +504,7 @@ extern unsigned char draw_count;
#define BUTTON_CHAIN_IGNORE 264 #define BUTTON_CHAIN_IGNORE 264
#define BUTTON_CHAIN_ALWAYS 265 #define BUTTON_CHAIN_ALWAYS 265
#define BUTTON_CHAIN_WHENAVAIL 266 #define BUTTON_CHAIN_WHENAVAIL 266
#define BUTTON_CANCEL_OR_FINISH 267
#define BUTTON_CLEAR_LOG 270 #define BUTTON_CLEAR_LOG 270
#define LISTBOX_LOG 271 #define LISTBOX_LOG 271
#define SCROLL_CARDTEXT 280 #define SCROLL_CARDTEXT 280
......
...@@ -356,6 +356,11 @@ Materials::Materials() { ...@@ -356,6 +356,11 @@ Materials::Materials() {
vFields[133] = S3DVertex(vector3df(0.2f, -1.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0)); vFields[133] = S3DVertex(vector3df(0.2f, -1.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
vFields[134] = S3DVertex(vector3df(1.0f, -2.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0)); vFields[134] = S3DVertex(vector3df(1.0f, -2.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
vFields[135] = S3DVertex(vector3df(0.2f, -2.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0)); vFields[135] = S3DVertex(vector3df(0.2f, -2.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
//conti_act
vFields[136] = S3DVertex(vector3df(-0.8f, 0.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
vFields[137] = S3DVertex(vector3df(0.0f, 0.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
vFields[138] = S3DVertex(vector3df(-0.8f, 1.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
vFields[139] = S3DVertex(vector3df(0.0f, 1.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255), vector2df(0, 0));
for(int i = 0; i < 40; ++i) for(int i = 0; i < 40; ++i)
......
...@@ -20,7 +20,7 @@ public: ...@@ -20,7 +20,7 @@ public:
S3DVertex vFieldSpell1[4]; S3DVertex vFieldSpell1[4];
S3DVertex vFieldSpell2[4]; S3DVertex vFieldSpell2[4];
S3DVertex vBackLine[76]; S3DVertex vBackLine[76];
S3DVertex vFields[136]; S3DVertex vFields[140];
S3DVertex vArrow[40]; S3DVertex vArrow[40];
SColor c2d[4]; SColor c2d[4];
u16 iRectangle[6]; u16 iRectangle[6];
......
...@@ -396,7 +396,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -396,7 +396,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
case MSG_SELECT_CHAIN: { case MSG_SELECT_CHAIN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += 10 + count * 12; pbuf += 10 + count * 13;
return ReadReplayResponse(); return ReadReplayResponse();
} }
case MSG_SELECT_PLACE: case MSG_SELECT_PLACE:
......
...@@ -746,7 +746,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -746,7 +746,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
case MSG_SELECT_CHAIN: { case MSG_SELECT_CHAIN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += 10 + count * 12; pbuf += 10 + count * 13;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
...@@ -215,7 +215,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) { ...@@ -215,7 +215,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
case MSG_SELECT_CHAIN: { case MSG_SELECT_CHAIN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += 10 + count * 12; pbuf += 10 + count * 13;
if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) { if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) {
mainGame->singleSignal.Reset(); mainGame->singleSignal.Reset();
mainGame->singleSignal.Wait(); mainGame->singleSignal.Wait();
......
...@@ -683,7 +683,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -683,7 +683,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case MSG_SELECT_CHAIN: { case MSG_SELECT_CHAIN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += 10 + count * 12; pbuf += 10 + count * 13;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
Subproject commit bdfe3d7c4db18f1b66f0cab7874108411571bff2 Subproject commit 886141f3960660a10d1ecd99ccbc745b61a16b51
Subproject commit 4a077c3c17def513f17d8a48d4d475714c2cc0ba Subproject commit e84f810cf02abd04f093303c59aa773adb172b08
...@@ -102,6 +102,7 @@ ...@@ -102,6 +102,7 @@
!system 553 请选择骰子的结果 !system 553 请选择骰子的结果
!system 554 请选择一个种类 !system 554 请选择一个种类
!system 555 请选择一个选项 !system 555 请选择一个选项
!system 556 请选择要发动/处理的效果
!system 560 请选择 !system 560 请选择
!system 561 请选择表示形式 !system 561 请选择表示形式
!system 562 请选择要宣言的属性 !system 562 请选择要宣言的属性
...@@ -110,6 +111,7 @@ ...@@ -110,6 +111,7 @@
!system 565 请选择一个数字 !system 565 请选择一个数字
!system 566 请选择要发动效果的卡 !system 566 请选择要发动效果的卡
!system 567 请宣言一个等级 !system 567 请宣言一个等级
!system 568 请选择要处理效果的卡
!system 1000 卡组 !system 1000 卡组
!system 1001 手卡 !system 1001 手卡
!system 1002 怪兽区 !system 1002 怪兽区
...@@ -222,6 +224,8 @@ ...@@ -222,6 +224,8 @@
!system 1158 查看列表 !system 1158 查看列表
!system 1159 当魔法卡放置 !system 1159 当魔法卡放置
!system 1160 在灵摆区域发动 !system 1160 在灵摆区域发动
!system 1161 效果处理
!system 1162 效果重置
#menu #menu
!system 1200 联机模式 !system 1200 联机模式
!system 1201 残局模式 !system 1201 残局模式
...@@ -282,6 +286,8 @@ ...@@ -282,6 +286,8 @@
!system 1292 忽略时点 !system 1292 忽略时点
!system 1293 显示时点 !system 1293 显示时点
!system 1294 可用时点 !system 1294 可用时点
!system 1295 取消操作
!system 1296 完成选择
!system 1300 禁限卡表: !system 1300 禁限卡表:
!system 1301 卡组列表: !system 1301 卡组列表:
!system 1302 保存 !system 1302 保存
...@@ -334,7 +340,7 @@ ...@@ -334,7 +340,7 @@
!system 1352 主要信息: !system 1352 主要信息:
!system 1353 播放起始于回合: !system 1353 播放起始于回合:
!system 1354 不显示卡片系列 !system 1354 不显示卡片系列
!system 1355 不显示询问连锁按钮 !system 1355 不显示提示按钮
!system 1360 上一步 !system 1360 上一步
!system 1370 星数↑ !system 1370 星数↑
!system 1371 攻击↑ !system 1371 攻击↑
...@@ -386,6 +392,8 @@ ...@@ -386,6 +392,8 @@
!system 1622 [%ls]错过时点 !system 1622 [%ls]错过时点
!system 1623 投掷硬币结果: !system 1623 投掷硬币结果:
!system 1624 投掷骰子结果: !system 1624 投掷骰子结果:
#tips
!system 1700 可以用鼠标右键%ls
#victory reason #victory reason
!victory 0x0 投降 !victory 0x0 投降
!victory 0x1 LP变成0 !victory 0x1 LP变成0
...@@ -460,7 +468,7 @@ ...@@ -460,7 +468,7 @@
!counter 0x34 指示物(BOX !counter 0x34 指示物(BOX
!counter 0x35 音响指示物 !counter 0x35 音响指示物
!counter 0x36 娱乐法师指示物 !counter 0x36 娱乐法师指示物
!counter 0x37 大怪兽指示物 !counter 0x37 兽指示物
!counter 0x1038 方界指示物 !counter 0x1038 方界指示物
!counter 0x1039 咕咚指示物 !counter 0x1039 咕咚指示物
!counter 0x40 指示物(No.51 怪腕之必杀摔角手) !counter 0x40 指示物(No.51 怪腕之必杀摔角手)
...@@ -733,9 +741,9 @@ ...@@ -733,9 +741,9 @@
!setname 0x10cf 混沌战士 カオス・ソルジャー !setname 0x10cf 混沌战士 カオス・ソルジャー
!setname 0xd0 威风妖怪 マジェスペクター !setname 0xd0 威风妖怪 マジェスペクター
!setname 0xd1 灰篮 グレイドル !setname 0xd1 灰篮 グレイドル
!setname 0xd2 Kozmo !setname 0xd2际仙踪 Kozmo
!setname 0xd3 大怪兽 Kaiju !setname 0xd3 坏兽 壊獣
!setname 0xd4 古生物 버제스토마 !setname 0xd4 伯吉斯异兽 バージェストマ
!setname 0xd5 但丁 ダンテ !setname 0xd5 但丁 ダンテ
!setname 0xd6 破坏剑 破壊剣 !setname 0xd6 破坏剑 破壊剣
!setname 0xd7 巴斯达·布雷达 バスター・ブレイダー !setname 0xd7 巴斯达·布雷达 バスター・ブレイダー
......
...@@ -18,7 +18,8 @@ waitchain = 0 ...@@ -18,7 +18,8 @@ waitchain = 0
mute_opponent = 0 mute_opponent = 0
mute_spectators = 0 mute_spectators = 0
hide_setname = 0 hide_setname = 0
hide_chain_button = 0 hide_hint_button = 1
#control_mode = 0: Key A/S/D/R. control_mode = 1: MouseLeft/MouseRight/NULL/F9 #control_mode = 0: Key A/S/D/R Chain Buttons. control_mode = 1: MouseLeft/MouseRight/NULL/F9 Without Chain Buttons
control_mode = 0 control_mode = 0
draw_field_spell = 1 draw_field_spell = 1
separate_clear_button = 1
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