Commit d72fcfd2 authored by nanahira's avatar nanahira

Merge branch 'side' of github.com:purerosefallen/ygopro-koishi into tmp-side

parents bbdc8d3b 453fbaa4
......@@ -125,6 +125,7 @@ inline void showDeckManage() {
void DeckBuilder::Initialize() {
mainGame->is_building = true;
mainGame->is_siding = false;
mainGame->sidedeck_available = false;
mainGame->ClearCardInfo();
mainGame->wInfos->setVisible(true);
mainGame->wCardImg->setVisible(true);
......@@ -736,6 +737,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1410));
break;
}
mainGame->scrFilter->setVisible(false);
mainGame->ClearCardInfo();
char deckbuf[1024];
char* pdeck = deckbuf;
......@@ -1102,7 +1104,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(draging_pointer == dataManager._datas.end())
break;
if(hovered_pos == 4) {
if(!check_limit(draging_pointer))
if(!check_limit(draging_pointer) || mainGame->is_siding)
break;
}
is_starting_dragging = true;
......@@ -1137,7 +1139,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(mainGame->is_siding) {
if(is_draging)
break;
if(hovered_pos == 0 || hovered_seq == -1)
if(hovered_pos == 0 || hovered_seq == -1 || hovered_pos == 4)
break;
auto pointer = dataManager.GetCodePointer(hovered_code);
if(pointer == dataManager._datas.end())
......@@ -1744,4 +1746,35 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
}
return limit > 0;
}
void DeckBuilder::LoadSideDeck(int p) {
if(!mainGame->sidedeck_available) {
myswprintf(result_string, L"%d", -1);
return;
}
for(int i = 0; i < mainGame->sidedeck_main[p].size(); ++i) {
int trycode = mainGame->sidedeck_main[p][i];
if (dataManager.GetData(trycode, 0)) {
auto ptr = dataManager.GetCodePointer(trycode);
results.push_back(ptr);
}
}
for(int i = 0; i < mainGame->sidedeck_extra[p].size(); ++i) {
int trycode = mainGame->sidedeck_extra[p][i];
if (dataManager.GetData(trycode, 0)) {
auto ptr = dataManager.GetCodePointer(trycode);
results.push_back(ptr);
}
}
if (results.size() > 7) {
mainGame->scrFilter->setVisible(true);
mainGame->scrFilter->setMax(results.size() - 7);
mainGame->scrFilter->setPos(0);
}
else {
mainGame->scrFilter->setVisible(false);
mainGame->scrFilter->setPos(0);
}
SortList();
myswprintf(result_string, L"%d", results.size());
}
}
......@@ -30,6 +30,8 @@ public:
void pop_extra(int seq);
void pop_side(int seq);
bool check_limit(code_pointer pointer);
//side deck
void LoadSideDeck(int p);
long long filter_effect;
unsigned int filter_type;
......
......@@ -493,6 +493,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size();
mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size();
mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size();
mainGame->deckBuilder.LoadSideDeck(mainGame->LocalPlayer(1));
mainGame->device->setEventReceiver(&mainGame->deckBuilder);
mainGame->gMutex.unlock();
break;
......@@ -702,6 +703,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnSideShuffle->setVisible(false);
mainGame->btnSideSort->setVisible(false);
mainGame->btnSideReload->setVisible(false);
mainGame->scrFilter->setVisible(false);
mainGame->btnPhaseStatus->setVisible(false);
mainGame->btnBP->setVisible(false);
mainGame->btnM2->setVisible(false);
......@@ -835,14 +837,42 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->gMutex.unlock();
mainGame->WaitFrameSignal(30);
}
if(mainGame->actionParam || !is_host) {
prep += sizeof(ReplayHeader);
memcpy(new_replay.comp_data, prep, len - sizeof(ReplayHeader) - 1);
new_replay.comp_size = len - sizeof(ReplayHeader) - 1;
if(mainGame->actionParam)
new_replay.SaveReplay(mainGame->ebRSName->getText());
else new_replay.SaveReplay(L"_LastReplay");
}
prep += sizeof(ReplayHeader);
memcpy(new_replay.comp_data, prep, len - sizeof(ReplayHeader) - 1);
new_replay.comp_size = len - sizeof(ReplayHeader) - 1;
const wchar_t* save_name = mainGame->actionParam ? mainGame->ebRSName->getText() : L"auto_saved_replay";
new_replay.SaveReplay(save_name);
//side deck
Replay side_replay;
if(!side_replay.OpenReplay(save_name))
break;
if(!!(side_replay.pheader.flag & REPLAY_TAG))
break;
//skip player names
wchar_t dark_hole[20];
for(int i = 0; i < 2; ++i)
side_replay.ReadName(dark_hole);
//skip pre infos
for(int i = 0; i < 4; ++i)
side_replay.ReadInt32();
//clear deck
for(int i = 0; i < 2; ++i) {
mainGame->sidedeck_main[i].clear();
mainGame->sidedeck_extra[i].clear();
}
int main = side_replay.ReadInt32();
for(int i = 0; i < main; ++i)
mainGame->sidedeck_main[0].push_back(side_replay.ReadInt32());
int extra = side_replay.ReadInt32();
for(int i = 0; i < extra; ++i)
mainGame->sidedeck_extra[0].push_back(side_replay.ReadInt32());
main = side_replay.ReadInt32();
for(int i = 0; i < main; ++i)
mainGame->sidedeck_main[1].push_back(side_replay.ReadInt32());
extra = side_replay.ReadInt32();
for(int i = 0; i < extra; ++i)
mainGame->sidedeck_extra[1].push_back(side_replay.ReadInt32());
mainGame->sidedeck_available = true;
break;
}
case STOC_TIME_LIMIT: {
......@@ -1339,6 +1369,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->showcard = 101;
mainGame->WaitFrameSignal(40);
mainGame->showcard = 0;
//clear side deck
mainGame->sidedeck_available = false;
for(int i = 0; i < 2; ++i) {
mainGame->sidedeck_main[i].clear();
mainGame->sidedeck_extra[i].clear();
}
mainGame->gMutex.lock();
mainGame->dField.Clear();
int playertype = BufferIO::ReadInt8(pbuf);
......
......@@ -1928,6 +1928,7 @@ void Game::CloseDuelWindow() {
btnSideShuffle->setVisible(false);
btnSideSort->setVisible(false);
btnSideReload->setVisible(false);
scrFilter->setVisible(false);
btnLeaveGame->setVisible(false);
btnSpectatorSwap->setVisible(false);
btnChainIgnore->setVisible(false);
......
......@@ -226,6 +226,11 @@ public:
std::wstring chatMsg[8];
std::vector<BotInfo> botInfo;
//deck view
std::vector<int> sidedeck_main[2];
std::vector<int> sidedeck_extra[2];
bool sidedeck_available;
int hideChatTimer;
bool hideChat;
int chatTiming[8];
......
......@@ -158,6 +158,17 @@ bool Replay::OpenReplay(const wchar_t* name) {
char fname2[256];
BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb");
#endif
}
if(!fp) {
wchar_t fname[256];
myswprintf(fname, L"./replay/%ls.yrp", name);
#ifdef WIN32
fp = _wfopen(fname, L"rb");
#else
char fname2[256];
BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb");
#endif
}
if(!fp)
......
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