Commit e7b0c400 authored by VanillaSalt's avatar VanillaSalt

add MSG_PLAYER_HINT

parent e825a8f7
...@@ -380,6 +380,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -380,6 +380,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame->btnCardSelect[i]->setPressed(false); mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true); mainGame->btnCardSelect[i]->setVisible(true);
if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) { if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) {
wchar_t formatBuffer[2048];
if(chain && selectable_cards[i]->is_conti && !selectable_cards[i]->code) if(chain && selectable_cards[i]->is_conti && !selectable_cards[i]->code)
myswprintf(formatBuffer, L"%ls", DataManager::unknown_string); myswprintf(formatBuffer, L"%ls", DataManager::unknown_string);
else if(selectable_cards[i]->location == LOCATION_OVERLAY) else if(selectable_cards[i]->location == LOCATION_OVERLAY)
...@@ -403,6 +404,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -403,6 +404,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
} }
} else { } else {
if(sort_list[i]) { if(sort_list[i]) {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%d", sort_list[i]); myswprintf(formatBuffer, L"%d", sort_list[i]);
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
} else mainGame->stCardPos[i]->setText(L""); } else mainGame->stCardPos[i]->setText(L"");
...@@ -447,6 +449,7 @@ void ClientField::ShowChainCard() { ...@@ -447,6 +449,7 @@ void ClientField::ShowChainCard() {
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225)); mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false); mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true); mainGame->btnCardSelect[i]->setVisible(true);
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence), myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence),
selectable_cards[i]->sequence + 1); selectable_cards[i]->sequence + 1);
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
...@@ -501,6 +504,7 @@ void ClientField::ShowLocationCard() { ...@@ -501,6 +504,7 @@ void ClientField::ShowLocationCard() {
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225)); mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardDisplay[i]->setPressed(false); mainGame->btnCardDisplay[i]->setPressed(false);
mainGame->btnCardDisplay[i]->setVisible(true); mainGame->btnCardDisplay[i]->setVisible(true);
wchar_t formatBuffer[2048];
if(display_cards[i]->location == LOCATION_OVERLAY) if(display_cards[i]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(display_cards[i]->overlayTarget->location, display_cards[i]->overlayTarget->sequence), dataManager.FormatLocation(display_cards[i]->overlayTarget->location, display_cards[i]->overlayTarget->sequence),
......
...@@ -65,6 +65,7 @@ public: ...@@ -65,6 +65,7 @@ public:
std::vector<ClientCard*> selectsum_all; std::vector<ClientCard*> selectsum_all;
std::vector<ClientCard*> display_cards; std::vector<ClientCard*> display_cards;
std::vector<int> sort_list; std::vector<int> sort_list;
std::map<int, int> player_desc_hints[2];
bool grave_act; bool grave_act;
bool remove_act; bool remove_act;
bool deck_act; bool deck_act;
...@@ -114,11 +115,11 @@ public: ...@@ -114,11 +115,11 @@ public:
int command_location; int command_location;
size_t command_sequence; size_t command_sequence;
ClientCard* hovered_card; ClientCard* hovered_card;
int hovered_player;
ClientCard* clicked_card; ClientCard* clicked_card;
ClientCard* command_card; ClientCard* command_card;
ClientCard* highlighting_card; ClientCard* highlighting_card;
int list_command; int list_command;
wchar_t formatBuffer[2048];
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
void GetHoverField(int x, int y); void GetHoverField(int x, int y);
......
...@@ -2977,6 +2977,20 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -2977,6 +2977,20 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
} }
return true; return true;
} }
case MSG_PLAYER_HINT: {
int player = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
int chtype = BufferIO::ReadInt8(pbuf);
int value = BufferIO::ReadInt32(pbuf);
auto& player_desc_hints = mainGame->dField.player_desc_hints[player];
if(chtype == PHINT_DESC_ADD) {
player_desc_hints[value]++;
} else if(chtype == PHINT_DESC_REMOVE) {
player_desc_hints[value]--;
if(player_desc_hints[value] == 0)
player_desc_hints.erase(value);
}
return true;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
match_kill = BufferIO::ReadInt32(pbuf); match_kill = BufferIO::ReadInt32(pbuf);
return true; return true;
......
...@@ -456,6 +456,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -456,6 +456,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case BUTTON_CMD_SHOWLIST: { case BUTTON_CMD_SHOWLIST: {
mainGame->wCmdMenu->setVisible(false); mainGame->wCmdMenu->setVisible(false);
selectable_cards.clear(); selectable_cards.clear();
wchar_t formatBuffer[2048];
switch(command_location) { switch(command_location) {
case LOCATION_DECK: { case LOCATION_DECK: {
for(int32 i = (int32)deck[command_controler].size() - 1; i >= 0 ; --i) for(int32 i = (int32)deck[command_controler].size() - 1; i >= 0 ; --i)
...@@ -612,6 +613,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -612,6 +613,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case MSG_SORT_CARD: { case MSG_SORT_CARD: {
int offset = mainGame->scrCardList->getPos() / 10; int offset = mainGame->scrCardList->getPos() / 10;
int sel_seq = id - BUTTON_CARD_0 + offset; int sel_seq = id - BUTTON_CARD_0 + offset;
wchar_t formatBuffer[2048];
if(sort_list[sel_seq]) { if(sort_list[sel_seq]) {
select_min--; select_min--;
int sel = sort_list[sel_seq]; int sel = sort_list[sel_seq];
...@@ -742,6 +744,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -742,6 +744,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]); mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225)); mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
wchar_t formatBuffer[2048];
if(sort_list.size()) { if(sort_list.size()) {
if(sort_list[pos + i] > 0) if(sort_list[pos + i] > 0)
myswprintf(formatBuffer, L"%d", sort_list[pos + i]); myswprintf(formatBuffer, L"%d", sort_list[pos + i]);
...@@ -786,6 +789,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -786,6 +789,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else else
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]); mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225)); mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
wchar_t formatBuffer[2048];
if(display_cards[i + pos]->location == LOCATION_OVERLAY) { if(display_cards[i + pos]->location == LOCATION_OVERLAY) {
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(display_cards[i + pos]->overlayTarget->location, display_cards[i + pos]->overlayTarget->sequence), dataManager.FormatLocation(display_cards[i + pos]->overlayTarget->location, display_cards[i + pos]->overlayTarget->sequence),
...@@ -919,6 +923,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -919,6 +923,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(hovered_location & 0xe) if(hovered_location & 0xe)
clicked_card = GetCard(hovered_controler, hovered_location, hovered_sequence); clicked_card = GetCard(hovered_controler, hovered_location, hovered_sequence);
else clicked_card = 0; else clicked_card = 0;
wchar_t formatBuffer[2048];
if(mainGame->dInfo.isReplay) { if(mainGame->dInfo.isReplay) {
if(mainGame->wCardSelect->isVisible()) if(mainGame->wCardSelect->isVisible())
break; break;
...@@ -1222,6 +1227,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1222,6 +1227,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
DuelClient::SetResponseB(respbuf, selectable_cards.size()); DuelClient::SetResponseB(respbuf, selectable_cards.size());
DuelClient::SendResponse(); DuelClient::SendResponse();
} else { } else {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, dataManager.GetSysString(204), select_counter_count, dataManager.GetCounterName(select_counter_type)); myswprintf(formatBuffer, dataManager.GetSysString(204), select_counter_count, dataManager.GetCounterName(select_counter_type));
mainGame->stHintMsg->setText(formatBuffer); mainGame->stHintMsg->setText(formatBuffer);
} }
...@@ -1378,22 +1384,40 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1378,22 +1384,40 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(x < 300) if(x < 300)
break; break;
ClientCard* mcard = 0; ClientCard* mcard = 0;
int mplayer = -1;
if(!panel || !panel->isVisible() || !panel->getRelativePosition().isPointInside(pos)) { if(!panel || !panel->isVisible() || !panel->getRelativePosition().isPointInside(pos)) {
GetHoverField(x, y); GetHoverField(x, y);
if(hovered_location & 0xe) if(hovered_location & 0xe)
mcard = GetCard(hovered_controler, hovered_location, hovered_sequence); mcard = GetCard(hovered_controler, hovered_location, hovered_sequence);
else if(hovered_location == LOCATION_GRAVE && grave[hovered_controler].size()) else if(hovered_location == LOCATION_GRAVE) {
mcard = *(grave[hovered_controler].rbegin()); if(grave[hovered_controler].size())
else if(hovered_location == LOCATION_REMOVED && remove[hovered_controler].size()) { mcard = grave[hovered_controler].back();
mcard = *(remove[hovered_controler].rbegin()); } else if(hovered_location == LOCATION_REMOVED) {
if(mcard->position & POS_FACEDOWN) if(remove[hovered_controler].size()) {
mcard = 0; mcard = remove[hovered_controler].back();
} else if(hovered_location == LOCATION_DECK && deck[hovered_controler].size()) if(mcard->position & POS_FACEDOWN)
mcard = *(deck[hovered_controler].rbegin()); mcard = 0;
else mcard = 0; }
} else if(hovered_location == LOCATION_DECK) {
if(deck[hovered_controler].size())
mcard = deck[hovered_controler].back();
} else {
if(irr::core::recti(327, 8, 630, 51).isPointInside(pos))
mplayer = 0;
else if(irr::core::recti(689, 8, 991, 51).isPointInside(pos))
mplayer = 1;
}
} }
if(hovered_location == LOCATION_HAND && (mainGame->dInfo.is_shuffling || mainGame->dInfo.curMsg == MSG_SHUFFLE_HAND)) if(hovered_location == LOCATION_HAND && (mainGame->dInfo.is_shuffling || mainGame->dInfo.curMsg == MSG_SHUFFLE_HAND))
mcard = 0; mcard = 0;
if(mcard == 0 && mplayer < 0)
mainGame->stTip->setVisible(false);
else if(mcard == hovered_card && mplayer == hovered_player) {
if(mainGame->stTip->isVisible()) {
irr::core::recti tpos = mainGame->stTip->getRelativePosition();
mainGame->stTip->setRelativePosition(irr::core::position2di(x - tpos.getWidth() - 10, mcard ? y - tpos.getHeight() - 10 : y + 10));
}
}
if(mcard != hovered_card) { if(mcard != hovered_card) {
if(hovered_card) { if(hovered_card) {
if(hovered_card->location == LOCATION_HAND && !mainGame->dInfo.is_shuffling && mainGame->dInfo.curMsg != MSG_SHUFFLE_HAND) { if(hovered_card->location == LOCATION_HAND && !mainGame->dInfo.is_shuffling && mainGame->dInfo.curMsg != MSG_SHUFFLE_HAND) {
...@@ -1425,22 +1449,20 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1425,22 +1449,20 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
if(mcard->equipTarget) if(mcard->equipTarget)
mcard->equipTarget->is_showequip = true; mcard->equipTarget->is_showequip = true;
if(mcard->equipped.size()) for(auto cit = mcard->equipped.begin(); cit != mcard->equipped.end(); ++cit)
for(auto cit = mcard->equipped.begin(); cit != mcard->equipped.end(); ++cit) (*cit)->is_showequip = true;
(*cit)->is_showequip = true; for(auto cit = mcard->cardTarget.begin(); cit != mcard->cardTarget.end(); ++cit)
if(mcard->cardTarget.size()) (*cit)->is_showtarget = true;
for(auto cit = mcard->cardTarget.begin(); cit != mcard->cardTarget.end(); ++cit) for(auto cit = mcard->ownerTarget.begin(); cit != mcard->ownerTarget.end(); ++cit)
(*cit)->is_showtarget = true; (*cit)->is_showtarget = true;
if(mcard->ownerTarget.size())
for(auto cit = mcard->ownerTarget.begin(); cit != mcard->ownerTarget.end(); ++cit)
(*cit)->is_showtarget = true;
if(mcard->code) { if(mcard->code) {
mainGame->ShowCardInfo(mcard->code); mainGame->ShowCardInfo(mcard->code);
if(mcard->location & 0xe) { if(mcard->location & 0xe) {
std::wstring str; std::wstring str;
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->type & TYPE_MONSTER) { if(mcard->type & TYPE_MONSTER) {
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10) if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)
&& wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) { && wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
...@@ -1456,32 +1478,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1456,32 +1478,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale); myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale);
str.append(formatBuffer); str.append(formatBuffer);
} }
if(mcard->counters.size()) {
for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) {
myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second);
str.append(formatBuffer);
}
}
if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) {
if(mcard->cHint == CHINT_TURN)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue);
else if(mcard->cHint == CHINT_CARD)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue));
else if(mcard->cHint == CHINT_RACE)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue));
else if(mcard->cHint == CHINT_ATTRIBUTE)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
else if(mcard->cHint == CHINT_NUMBER)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
str.append(formatBuffer);
}
for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
} else { } else {
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)) { if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
str.append(formatBuffer); str.append(formatBuffer);
...@@ -1490,33 +1487,31 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1490,33 +1487,31 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale); myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale);
str.append(formatBuffer); str.append(formatBuffer);
} }
if(mcard->counters.size()) { }
for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) { for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) {
myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second); myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second);
str.append(formatBuffer); str.append(formatBuffer);
} }
} if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) {
if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) { if(mcard->cHint == CHINT_TURN)
if(mcard->cHint == CHINT_TURN) myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue);
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue); else if(mcard->cHint == CHINT_CARD)
else if(mcard->cHint == CHINT_CARD) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue)); else if(mcard->cHint == CHINT_RACE)
else if(mcard->cHint == CHINT_RACE) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue)); else if(mcard->cHint == CHINT_ATTRIBUTE)
else if(mcard->cHint == CHINT_ATTRIBUTE) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue)); else if(mcard->cHint == CHINT_NUMBER)
else if(mcard->cHint == CHINT_NUMBER) myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue); str.append(formatBuffer);
str.append(formatBuffer); }
} for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) {
for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) { myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first)); str.append(formatBuffer);
str.append(formatBuffer);
}
} }
mainGame->stTip->setVisible(true); mainGame->stTip->setVisible(true);
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()); irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y - 10 - dtip.Height, x, y)); mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y - 10 - dtip.Height, x - 10, y - 10));
mainGame->stTip->setText(str.c_str()); mainGame->stTip->setText(str.c_str());
} }
} else { } else {
...@@ -1529,15 +1524,36 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1529,15 +1524,36 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->stText->setText(L""); mainGame->stText->setText(L"");
mainGame->scrCardText->setVisible(false); mainGame->scrCardText->setVisible(false);
} }
} else {
mainGame->stTip->setVisible(false);
} }
hovered_card = mcard; hovered_card = mcard;
} else { }
if(mainGame->stTip->isVisible()) { if(mplayer != hovered_player) {
irr::core::recti tpos = mainGame->stTip->getRelativePosition(); if(mplayer >= 0) {
mainGame->stTip->setRelativePosition(irr::core::position2di(x - tpos.getWidth() - 10, y - tpos.getHeight() - 10)); const wchar_t* player_name;
if(mplayer == 0) {
if(!mainGame->dInfo.isTag || !mainGame->dInfo.tag_player[0])
player_name = mainGame->dInfo.hostname;
else
player_name = mainGame->dInfo.hostname_tag;
} else {
if(!mainGame->dInfo.isTag || !mainGame->dInfo.tag_player[1])
player_name = mainGame->dInfo.clientname;
else
player_name = mainGame->dInfo.clientname_tag;
}
std::wstring str(player_name);
wchar_t formatBuffer[2048];
const auto& player_desc_hints = mainGame->dField.player_desc_hints[mplayer];
for(auto iter = player_desc_hints.begin(); iter != player_desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
mainGame->stTip->setVisible(true);
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y + 10, x - 10, y + 10 + dtip.Height));
mainGame->stTip->setText(str.c_str());
} }
hovered_player = mplayer;
} }
break; break;
} }
...@@ -1669,6 +1685,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1669,6 +1685,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break; break;
} }
if(display_cards.size()) { if(display_cards.size()) {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(loc_id), display_cards.size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(loc_id), display_cards.size());
mainGame->wCardDisplay->setText(formatBuffer); mainGame->wCardDisplay->setText(formatBuffer);
ShowLocationCard(); ShowLocationCard();
...@@ -1844,7 +1861,7 @@ void ClientField::GetHoverField(int x, int y) { ...@@ -1844,7 +1861,7 @@ void ClientField::GetHoverField(int x, int y) {
hovered_sequence = 0; hovered_sequence = 0;
} }
} }
} }
} }
void ClientField::ShowMenu(int flag, int x, int y) { void ClientField::ShowMenu(int flag, int x, int y) {
if(!flag) { if(!flag) {
......
...@@ -5,23 +5,4 @@ ...@@ -5,23 +5,4 @@
#include "game.h" #include "game.h"
#include "client_card.h" #include "client_card.h"
namespace ygo {
class EventHandler : public irr::IEventReceiver {
public:
virtual bool OnEvent(const irr::SEvent& event);
void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y);
irr::gui::IGUIElement* panel;
int hovered_controler;
int hovered_location;
int hovered_sequence;
ClientCard* hovered_card;
ClientCard* clicked_card;
wchar_t formatBuffer[256];
};
}
#endif //EVENT_HANDLER_H #endif //EVENT_HANDLER_H
...@@ -765,6 +765,11 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -765,6 +765,11 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset); DuelClient::ClientAnalyze(offset, pbuf - offset);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
pbuf += 4; pbuf += 4;
break; break;
......
...@@ -1289,6 +1289,14 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1289,6 +1289,14 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
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);
break;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
int code = BufferIO::ReadInt32(pbuf); int code = BufferIO::ReadInt32(pbuf);
if(match_mode) { if(match_mode) {
......
...@@ -601,6 +601,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) { ...@@ -601,6 +601,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset); DuelClient::ClientAnalyze(offset, pbuf - offset);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_TAG_SWAP: { case MSG_TAG_SWAP: {
player = pbuf[0]; player = pbuf[0];
pbuf += pbuf[2] * 4 + pbuf[4] * 4 + 9; pbuf += pbuf[2] * 4 + pbuf[4] * 4 + 9;
......
...@@ -1330,6 +1330,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1330,6 +1330,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
NetServer::ReSendToPlayer(players[2]);
NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_TAG_SWAP: { case MSG_TAG_SWAP: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
/*int mcount = */BufferIO::ReadInt8(pbuf); /*int mcount = */BufferIO::ReadInt8(pbuf);
......
Subproject commit 42c1de39dc2562d7485a962cef4cf494e36b900d Subproject commit 0c58f35e90a3baa10af009776235a53e11eae620
Subproject commit 7362fd18381b3fadd0682ae97388dee3cfc79794 Subproject commit 4de8d4093e5767d90696c8abdd2f1d75215d6adb
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