Commit 818a7cf2 authored by nanahira's avatar nanahira

cyberjar

parent 2283729d
Pipeline #19850 passed with stages
in 2 minutes and 36 seconds
......@@ -216,6 +216,16 @@ bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) {
deck = ndeck;
return true;
}
Deck DeckManager::TransformDeck(Deck deck) {
Deck result;
result.side = deck.side;
result.extra = deck.extra;
for (auto c : deck.main) {
result.main.push_back(c);
}
result.main.push_back(dataManager.GetCodePointer(78706415));
return result;
}
#ifndef YGOPRO_SERVER_MODE
void DeckManager::GetCategoryPath(wchar_t* ret, int index, const wchar_t* text) {
wchar_t catepath[256];
......
......@@ -49,6 +49,12 @@ public:
int CheckDeck(Deck& deck, int lfhash, int rule);
int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_packlist = false);
bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec);
Deck TransformDeck(Deck deck);
Deck* TransformDecks(Deck *src, Deck *dst, int count) {
for(int i = 0; i < count; ++i)
dst[i] = TransformDeck(src[i]);
return dst;
}
#ifndef YGOPRO_SERVER_MODE
void GetCategoryPath(wchar_t* ret, int index, const wchar_t* text);
void GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
......
......@@ -452,10 +452,10 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
#endif
char deckbuff[12];
char* pbuf = deckbuff;
BufferIO::WriteInt16(pbuf, pdeck[0].main.size());
BufferIO::WriteInt16(pbuf, pdeck[0].main.size() + 1);
BufferIO::WriteInt16(pbuf, pdeck[0].extra.size());
BufferIO::WriteInt16(pbuf, pdeck[0].side.size());
BufferIO::WriteInt16(pbuf, pdeck[1].main.size());
BufferIO::WriteInt16(pbuf, pdeck[1].main.size() + 1);
BufferIO::WriteInt16(pbuf, pdeck[1].extra.size());
BufferIO::WriteInt16(pbuf, pdeck[1].side.size());
NetServer::SendBufferToPlayer(players[0], STOC_DECK_COUNT, deckbuff, 12);
......@@ -553,9 +553,11 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteHeader(rh);
last_replay.WriteData(players[0]->name, 40, false);
last_replay.WriteData(players[1]->name, 40, false);
Deck transformedDeck[2];
deckManager.TransformDecks(pdeck, transformedDeck, 2);
if(!host_info.no_shuffle_deck) {
rnd.shuffle_vector(pdeck[0].main);
rnd.shuffle_vector(pdeck[1].main);
rnd.shuffle_vector(transformedDeck[0].main);
rnd.shuffle_vector(transformedDeck[1].main);
}
time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit;
......@@ -575,25 +577,25 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteInt32(host_info.draw_count, false);
last_replay.WriteInt32(opt, false);
last_replay.Flush();
last_replay.WriteInt32(pdeck[0].main.size(), false);
for(int32 i = (int32)pdeck[0].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[0].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[0].main.size(), false);
for(int32 i = (int32)transformedDeck[0].main.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[0].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[0].extra.size(), false);
for(int32 i = (int32)pdeck[0].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[0].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[0].extra.size(), false);
for(int32 i = (int32)transformedDeck[0].extra.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[0].extra[i]->first, false);
}
last_replay.WriteInt32(pdeck[1].main.size(), false);
for(int32 i = (int32)pdeck[1].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[1].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[1].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[1].main.size(), false);
for(int32 i = (int32)transformedDeck[1].main.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[1].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[1].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[1].extra.size(), false);
for(int32 i = (int32)pdeck[1].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[1].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[1].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[1].extra.size(), false);
for(int32 i = (int32)transformedDeck[1].extra.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[1].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[1].extra[i]->first, false);
}
last_replay.Flush();
char startbuf[32], *pbuf = startbuf;
......
......@@ -412,10 +412,10 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
#endif
char deckbuff[12];
char* pbuf = deckbuff;
BufferIO::WriteInt16(pbuf, pdeck[0].main.size());
BufferIO::WriteInt16(pbuf, pdeck[0].main.size() + 1);
BufferIO::WriteInt16(pbuf, pdeck[0].extra.size());
BufferIO::WriteInt16(pbuf, pdeck[0].side.size());
BufferIO::WriteInt16(pbuf, pdeck[2].main.size());
BufferIO::WriteInt16(pbuf, pdeck[2].main.size() + 1);
BufferIO::WriteInt16(pbuf, pdeck[2].extra.size());
BufferIO::WriteInt16(pbuf, pdeck[2].side.size());
NetServer::SendBufferToPlayer(players[0], STOC_DECK_COUNT, deckbuff, 12);
......@@ -523,11 +523,13 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteData(players[1]->name, 40, false);
last_replay.WriteData(players[2]->name, 40, false);
last_replay.WriteData(players[3]->name, 40, false);
Deck transformedDeck[4];
deckManager.TransformDecks(pdeck, transformedDeck, 4);
if(!host_info.no_shuffle_deck) {
rnd.shuffle_vector(pdeck[0].main);
rnd.shuffle_vector(pdeck[1].main);
rnd.shuffle_vector(pdeck[2].main);
rnd.shuffle_vector(pdeck[3].main);
rnd.shuffle_vector(transformedDeck[0].main);
rnd.shuffle_vector(transformedDeck[1].main);
rnd.shuffle_vector(transformedDeck[2].main);
rnd.shuffle_vector(transformedDeck[3].main);
}
time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit;
......@@ -549,48 +551,48 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteInt32(opt, false);
last_replay.Flush();
//
last_replay.WriteInt32(pdeck[0].main.size(), false);
for(int32 i = (int32)pdeck[0].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[0].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[0].main.size(), false);
for(int32 i = (int32)transformedDeck[0].main.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[0].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[0].extra.size(), false);
for(int32 i = (int32)pdeck[0].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[0].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[0].extra.size(), false);
for(int32 i = (int32)transformedDeck[0].extra.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[0].extra[i]->first, false);
}
//
last_replay.WriteInt32(pdeck[1].main.size(), false);
for(int32 i = (int32)pdeck[1].main.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[1].main[i]->first, 0, LOCATION_DECK);
last_replay.WriteInt32(pdeck[1].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[1].main.size(), false);
for(int32 i = (int32)transformedDeck[1].main.size() - 1; i >= 0; --i) {
new_tag_card(pduel, transformedDeck[1].main[i]->first, 0, LOCATION_DECK);
last_replay.WriteInt32(transformedDeck[1].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[1].extra.size(), false);
for(int32 i = (int32)pdeck[1].extra.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[1].extra[i]->first, 0, LOCATION_EXTRA);
last_replay.WriteInt32(pdeck[1].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[1].extra.size(), false);
for(int32 i = (int32)transformedDeck[1].extra.size() - 1; i >= 0; --i) {
new_tag_card(pduel, transformedDeck[1].extra[i]->first, 0, LOCATION_EXTRA);
last_replay.WriteInt32(transformedDeck[1].extra[i]->first, false);
}
//
last_replay.WriteInt32(pdeck[3].main.size(), false);
for(int32 i = (int32)pdeck[3].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[3].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[3].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[3].main.size(), false);
for(int32 i = (int32)transformedDeck[3].main.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[3].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[3].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[3].extra.size(), false);
for(int32 i = (int32)pdeck[3].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[3].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[3].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[3].extra.size(), false);
for(int32 i = (int32)transformedDeck[3].extra.size() - 1; i >= 0; --i) {
new_card(pduel, transformedDeck[3].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(transformedDeck[3].extra[i]->first, false);
}
//
last_replay.WriteInt32(pdeck[2].main.size(), false);
for(int32 i = (int32)pdeck[2].main.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[2].main[i]->first, 1, LOCATION_DECK);
last_replay.WriteInt32(pdeck[2].main[i]->first, false);
last_replay.WriteInt32(transformedDeck[2].main.size(), false);
for(int32 i = (int32)transformedDeck[2].main.size() - 1; i >= 0; --i) {
new_tag_card(pduel, transformedDeck[2].main[i]->first, 1, LOCATION_DECK);
last_replay.WriteInt32(transformedDeck[2].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[2].extra.size(), false);
for(int32 i = (int32)pdeck[2].extra.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[2].extra[i]->first, 1, LOCATION_EXTRA);
last_replay.WriteInt32(pdeck[2].extra[i]->first, false);
last_replay.WriteInt32(transformedDeck[2].extra.size(), false);
for(int32 i = (int32)transformedDeck[2].extra.size() - 1; i >= 0; --i) {
new_tag_card(pduel, transformedDeck[2].extra[i]->first, 1, LOCATION_EXTRA);
last_replay.WriteInt32(transformedDeck[2].extra[i]->first, false);
}
last_replay.Flush();
char startbuf[32], *pbuf = startbuf;
......
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