Commit 5639bc37 authored by mycard's avatar mycard

Merge branch 'server' of https://github.com/purerosefallen/ygopro

parents d8311e01 1a15b37f
No preview for this file type
#ifndef BASE64_H
#define BASE64_H
#include <string>
const char kBase64Alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
class Base64 {
public:
static bool Encode(const std::string &in, std::string *out) {
int i = 0, j = 0;
size_t enc_len = 0;
unsigned char a3[3];
unsigned char a4[4];
out->resize(EncodedLength(in));
int input_len = in.size();
std::string::const_iterator input = in.begin();
while (input_len--) {
a3[i++] = *(input++);
if (i == 3) {
a3_to_a4(a4, a3);
for (i = 0; i < 4; i++) {
(*out)[enc_len++] = kBase64Alphabet[a4[i]];
}
i = 0;
}
}
if (i) {
for (j = i; j < 3; j++) {
a3[j] = '\0';
}
a3_to_a4(a4, a3);
for (j = 0; j < i + 1; j++) {
(*out)[enc_len++] = kBase64Alphabet[a4[j]];
}
while ((i++ < 3)) {
(*out)[enc_len++] = '=';
}
}
return (enc_len == out->size());
}
static bool Encode(const char *input, size_t input_length, char *out, size_t out_length) {
int i = 0, j = 0;
char *out_begin = out;
unsigned char a3[3];
unsigned char a4[4];
size_t encoded_length = EncodedLength(input_length);
if (out_length < encoded_length) return false;
while (input_length--) {
a3[i++] = *input++;
if (i == 3) {
a3_to_a4(a4, a3);
for (i = 0; i < 4; i++) {
*out++ = kBase64Alphabet[a4[i]];
}
i = 0;
}
}
if (i) {
for (j = i; j < 3; j++) {
a3[j] = '\0';
}
a3_to_a4(a4, a3);
for (j = 0; j < i + 1; j++) {
*out++ = kBase64Alphabet[a4[j]];
}
while ((i++ < 3)) {
*out++ = '=';
}
}
return (out == (out_begin + encoded_length));
}
static bool Decode(const std::string &in, std::string *out) {
int i = 0, j = 0;
size_t dec_len = 0;
unsigned char a3[3];
unsigned char a4[4];
int input_len = in.size();
std::string::const_iterator input = in.begin();
out->resize(DecodedLength(in));
while (input_len--) {
if (*input == '=') {
break;
}
a4[i++] = *(input++);
if (i == 4) {
for (i = 0; i <4; i++) {
a4[i] = b64_lookup(a4[i]);
}
a4_to_a3(a3,a4);
for (i = 0; i < 3; i++) {
(*out)[dec_len++] = a3[i];
}
i = 0;
}
}
if (i) {
for (j = i; j < 4; j++) {
a4[j] = '\0';
}
for (j = 0; j < 4; j++) {
a4[j] = b64_lookup(a4[j]);
}
a4_to_a3(a3,a4);
for (j = 0; j < i - 1; j++) {
(*out)[dec_len++] = a3[j];
}
}
return (dec_len == out->size());
}
static bool Decode(const char *input, size_t input_length, char *out, size_t out_length) {
int i = 0, j = 0;
char *out_begin = out;
unsigned char a3[3];
unsigned char a4[4];
size_t decoded_length = DecodedLength(input, input_length);
if (out_length < decoded_length) return false;
while (input_length--) {
if (*input == '=') {
break;
}
a4[i++] = *(input++);
if (i == 4) {
for (i = 0; i <4; i++) {
a4[i] = b64_lookup(a4[i]);
}
a4_to_a3(a3,a4);
for (i = 0; i < 3; i++) {
*out++ = a3[i];
}
i = 0;
}
}
if (i) {
for (j = i; j < 4; j++) {
a4[j] = '\0';
}
for (j = 0; j < 4; j++) {
a4[j] = b64_lookup(a4[j]);
}
a4_to_a3(a3,a4);
for (j = 0; j < i - 1; j++) {
*out++ = a3[j];
}
}
return (out == (out_begin + decoded_length));
}
static int DecodedLength(const char *in, size_t in_length) {
int numEq = 0;
const char *in_end = in + in_length;
while (*--in_end == '=') ++numEq;
return ((6 * in_length) / 8) - numEq;
}
static int DecodedLength(const std::string &in) {
int numEq = 0;
int n = in.size();
for (std::string::const_reverse_iterator it = in.rbegin(); *it == '='; ++it) {
++numEq;
}
return ((6 * n) / 8) - numEq;
}
inline static int EncodedLength(size_t length) {
return (length + 2 - ((length + 2) % 3)) / 3 * 4;
}
inline static int EncodedLength(const std::string &in) {
return EncodedLength(in.length());
}
inline static void StripPadding(std::string *in) {
while (!in->empty() && *(in->rbegin()) == '=') in->resize(in->size() - 1);
}
private:
static inline void a3_to_a4(unsigned char * a4, unsigned char * a3) {
a4[0] = (a3[0] & 0xfc) >> 2;
a4[1] = ((a3[0] & 0x03) << 4) + ((a3[1] & 0xf0) >> 4);
a4[2] = ((a3[1] & 0x0f) << 2) + ((a3[2] & 0xc0) >> 6);
a4[3] = (a3[2] & 0x3f);
}
static inline void a4_to_a3(unsigned char * a3, unsigned char * a4) {
a3[0] = (a4[0] << 2) + ((a4[1] & 0x30) >> 4);
a3[1] = ((a4[1] & 0xf) << 4) + ((a4[2] & 0x3c) >> 2);
a3[2] = ((a4[2] & 0x3) << 6) + a4[3];
}
static inline unsigned char b64_lookup(unsigned char c) {
if(c >='A' && c <='Z') return c - 'A';
if(c >='a' && c <='z') return c - 71;
if(c >='0' && c <='9') return c + 4;
if(c == '+') return 62;
if(c == '/') return 63;
return 255;
}
};
#endif // BASE64_H
...@@ -605,18 +605,23 @@ void ClientField::ShowSelectOption(int select_hint) { ...@@ -605,18 +605,23 @@ void ClientField::ShowSelectOption(int select_hint) {
selected_option = 0; selected_option = 0;
wchar_t textBuffer[256]; wchar_t textBuffer[256];
int count = select_options.size(); int count = select_options.size();
bool quickmode = (count <= 5); bool quickmode = true;
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
for(int i = 0; (i < count) && quickmode; i++) { for(auto option : select_options) {
const wchar_t* option = dataManager.GetDesc(select_options[i]); if(mainGame->guiFont->getDimension(dataManager.GetDesc(option)).Width > 310) {
irr::core::dimension2d<unsigned int> dtxt = mainGame->guiFont->getDimension(option);
if(dtxt.Width > 310) {
quickmode = false; quickmode = false;
break; break;
} }
}
for(int i = 0; (i < count) && (i < 5) && quickmode; i++) {
const wchar_t* option = dataManager.GetDesc(select_options[i]);
mainGame->btnOption[i]->setText(option); mainGame->btnOption[i]->setText(option);
} }
if(quickmode) { if(quickmode) {
bool scrollbar = count > 5;
mainGame->scrOption->setVisible(scrollbar);
mainGame->scrOption->setPos(0);
mainGame->scrOption->setMax(scrollbar ? (count - 5) : 1);
mainGame->stOptions->setVisible(false); mainGame->stOptions->setVisible(false);
mainGame->btnOptionp->setVisible(false); mainGame->btnOptionp->setVisible(false);
mainGame->btnOptionn->setVisible(false); mainGame->btnOptionn->setVisible(false);
...@@ -624,9 +629,10 @@ void ClientField::ShowSelectOption(int select_hint) { ...@@ -624,9 +629,10 @@ void ClientField::ShowSelectOption(int select_hint) {
for(int i = 0; i < 5; i++) for(int i = 0; i < 5; i++)
mainGame->btnOption[i]->setVisible(i < count); mainGame->btnOption[i]->setVisible(i < count);
recti pos = mainGame->wOptions->getRelativePosition(); recti pos = mainGame->wOptions->getRelativePosition();
int newheight = 30 + 40 * count; int newheight = 30 + 40 * (scrollbar ? 5 : count);
int oldheight = pos.LowerRightCorner.Y - pos.UpperLeftCorner.Y; int oldheight = pos.LowerRightCorner.Y - pos.UpperLeftCorner.Y;
pos.UpperLeftCorner.Y = pos.UpperLeftCorner.Y + (oldheight - newheight) / 2; pos.UpperLeftCorner.Y = pos.UpperLeftCorner.Y + (oldheight - newheight) / 2;
pos.LowerRightCorner.X = pos.UpperLeftCorner.X + (scrollbar ? 375 : 350);
pos.LowerRightCorner.Y = pos.UpperLeftCorner.Y + newheight; pos.LowerRightCorner.Y = pos.UpperLeftCorner.Y + newheight;
mainGame->wOptions->setRelativePosition(pos); mainGame->wOptions->setRelativePosition(pos);
} else { } else {
......
...@@ -219,6 +219,47 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -219,6 +219,47 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
prev_sel = -1; prev_sel = -1;
break; break;
} }
case BUTTON_DECK_CODE: {
int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1)
break;
mainGame->gMutex.Lock();
mainGame->wDeckCode->setText(dataManager.GetSysString(1387));
if(deckManager.current_deck.main.size() > 0 || deckManager.current_deck.extra.size() > 0 || deckManager.current_deck.side.size() > 0) {
wchar_t deck_code[2048];
char deck_code_utf8[1024];
deckManager.SaveDeckToCode(deckManager.current_deck, deck_code_utf8);
BufferIO::DecodeUTF8(deck_code_utf8, deck_code);
mainGame->ebDeckCode->setText(deck_code);
} else
mainGame->ebDeckCode->setText(L"");
mainGame->PopupElement(mainGame->wDeckCode);
mainGame->gMutex.Unlock();
prev_operation = id;
prev_sel = sel;
break;
}
case BUTTON_DECK_CODE_SAVE: {
mainGame->HideElement(mainGame->wDeckCode);
if(prev_operation == BUTTON_DECK_CODE) {
Deck new_deck;
char deck_code[1024];
BufferIO::EncodeUTF8(mainGame->ebDeckCode->getText(), deck_code);
if(deckManager.LoadDeckFromCode(new_deck, deck_code, strlen(deck_code)))
deckManager.current_deck = new_deck;
else
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1389));
}
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_DECK_CODE_CANCEL: {
mainGame->HideElement(mainGame->wDeckCode);
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_DELETE_DECK: { case BUTTON_DELETE_DECK: {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1) if(sel == -1)
...@@ -374,6 +415,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -374,6 +415,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case irr::gui::EGET_SCROLL_BAR_CHANGED: { case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) {
case SCROLL_FILTER: {
GetHoveredCard();
break;
}
}
break; break;
} }
case irr::gui::EGET_EDITBOX_ENTER: { case irr::gui::EGET_EDITBOX_ENTER: {
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "data_manager.h" #include "data_manager.h"
#include "network.h" #include "network.h"
#include "game.h" #include "game.h"
#include "base64.h"
#include <algorithm> #include <algorithm>
namespace ygo { namespace ygo {
...@@ -294,4 +295,29 @@ int DeckManager::TypeCount(std::vector<code_pointer> list, unsigned int ctype) { ...@@ -294,4 +295,29 @@ int DeckManager::TypeCount(std::vector<code_pointer> list, unsigned int ctype) {
} }
return res; return res;
} }
bool DeckManager::LoadDeckFromCode(Deck& deck, const char *code, int len) {
char data[1024], *pdeck = data, *data_ = data;
int decoded_len = Base64::DecodedLength(code, len);
if(decoded_len < 8 || !Base64::Decode(code, len, data_, decoded_len))
return false;
int mainc = BufferIO::ReadInt32(pdeck);
int sidec = BufferIO::ReadInt32(pdeck);
int errorcode = LoadDeck(deck, (int*)pdeck, mainc, sidec);
return (errorcode == 0);
}
int DeckManager::SaveDeckToCode(Deck& deck, char* code) {
char deckbuf[1024], *pdeck = deckbuf;
BufferIO::WriteInt32(pdeck, deck.main.size() + deck.extra.size());
BufferIO::WriteInt32(pdeck, deck.side.size());
for(size_t i = 0; i < deck.main.size(); ++i)
BufferIO::WriteInt32(pdeck, deck.main[i]->first);
for(size_t i = 0; i < deck.extra.size(); ++i)
BufferIO::WriteInt32(pdeck, deck.extra[i]->first);
for(size_t i = 0; i < deck.side.size(); ++i)
BufferIO::WriteInt32(pdeck, deck.side[i]->first);
int len = pdeck - deckbuf;
int encoded_len = Base64::EncodedLength(len);
Base64::Encode(deckbuf, len, code, encoded_len);
return encoded_len;
}
} }
...@@ -48,6 +48,8 @@ public: ...@@ -48,6 +48,8 @@ public:
static bool RenameDeck(const wchar_t* oldname, const wchar_t* newname); static bool RenameDeck(const wchar_t* oldname, const wchar_t* newname);
wchar_t DeckFormatBuffer[128]; wchar_t DeckFormatBuffer[128];
int TypeCount(std::vector<code_pointer> list, unsigned int ctype); int TypeCount(std::vector<code_pointer> list, unsigned int ctype);
bool LoadDeckFromCode(Deck& deck, const char *code, int len);
int SaveDeckToCode(Deck &deck, char *code);
}; };
extern DeckManager deckManager; extern DeckManager deckManager;
......
...@@ -302,33 +302,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -302,33 +302,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->SetStaticText(mainGame->stOptions, 310, mainGame->guiFont, dataManager.GetDesc(select_options[selected_option])); mainGame->SetStaticText(mainGame->stOptions, 310, mainGame->guiFont, dataManager.GetDesc(select_options[selected_option]));
break; break;
} }
case BUTTON_OPTION_0: { case BUTTON_OPTION_0:
soundManager.PlaySoundEffect(SOUND_BUTTON); case BUTTON_OPTION_1:
selected_option = 0; case BUTTON_OPTION_2:
SetResponseSelectedOption(); case BUTTON_OPTION_3:
break;
}
case BUTTON_OPTION_1: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 1;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_2: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 2;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_3: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 3;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_4: { case BUTTON_OPTION_4: {
soundManager.PlaySoundEffect(SOUND_BUTTON); soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 4; int step = mainGame->scrOption->isVisible() ? mainGame->scrOption->getPos() : 0;
selected_option = id - BUTTON_OPTION_0 + step;
SetResponseSelectedOption(); SetResponseSelectedOption();
break; break;
} }
...@@ -857,6 +838,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -857,6 +838,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
case irr::gui::EGET_SCROLL_BAR_CHANGED: { case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) { switch(id) {
case SCROLL_OPTION_SELECT: {
int step = mainGame->scrOption->isVisible() ? mainGame->scrOption->getPos() : 0;
for(int i = 0; i < 5; i++) {
const wchar_t* option = dataManager.GetDesc(select_options[i + step]);
mainGame->btnOption[i]->setText(option);
}
break;
}
case SCROLL_CARD_SELECT: { case SCROLL_CARD_SELECT: {
int pos = mainGame->scrCardList->getPos() / 10; int pos = mainGame->scrCardList->getPos() / 10;
for(int i = 0; i < 5; ++i) { for(int i = 0; i < 5; ++i) {
......
...@@ -475,6 +475,10 @@ bool Game::Initialize() { ...@@ -475,6 +475,10 @@ bool Game::Initialize() {
for(int i = 0; i < 5; ++i) { for(int i = 0; i < 5; ++i) {
btnOption[i] = env->addButton(rect<s32>(10, 30 + 40 * i, 340, 60 + 40 * i), wOptions, BUTTON_OPTION_0 + i, L""); btnOption[i] = env->addButton(rect<s32>(10, 30 + 40 * i, 340, 60 + 40 * i), wOptions, BUTTON_OPTION_0 + i, L"");
} }
scrOption = env->addScrollBar(false, rect<s32>(350, 30, 365, 220), wOptions, SCROLL_OPTION_SELECT);
scrOption->setLargeStep(1);
scrOption->setSmallStep(1);
scrOption->setMin(0);
//pos select //pos select
wPosSelect = env->addWindow(rect<s32>(340, 200, 935, 410), false, dataManager.GetSysString(561)); wPosSelect = env->addWindow(rect<s32>(340, 200, 935, 410), false, dataManager.GetSysString(561));
wPosSelect->getCloseButton()->setVisible(false); wPosSelect->getCloseButton()->setVisible(false);
...@@ -594,6 +598,7 @@ bool Game::Initialize() { ...@@ -594,6 +598,7 @@ bool Game::Initialize() {
btnSideReload = env->addButton(rect<s32>(440, 100, 500, 130), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309)); btnSideReload = env->addButton(rect<s32>(440, 100, 500, 130), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309));
btnSideReload->setVisible(false); btnSideReload->setVisible(false);
btnRenameDeck = env->addButton(rect<s32>(170, 99, 220, 120), wDeckEdit, BUTTON_RENAME_DECK, dataManager.GetSysString(1362)); btnRenameDeck = env->addButton(rect<s32>(170, 99, 220, 120), wDeckEdit, BUTTON_RENAME_DECK, dataManager.GetSysString(1362));
btnDeckCode = env->addButton(rect<s32>(5, 65, 75, 90), wDeckEdit, BUTTON_DECK_CODE, dataManager.GetSysString(1387));
// //
scrFilter = env->addScrollBar(false, recti(999, 161, 1019, 629), 0, SCROLL_FILTER); scrFilter = env->addScrollBar(false, recti(999, 161, 1019, 629), 0, SCROLL_FILTER);
scrFilter->setLargeStep(10); scrFilter->setLargeStep(10);
...@@ -608,6 +613,15 @@ bool Game::Initialize() { ...@@ -608,6 +613,15 @@ bool Game::Initialize() {
ebREName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebREName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnREYes = env->addButton(rect<s32>(70, 80, 140, 105), wRenameDeck, BUTTON_RENAME_DECK_SAVE, dataManager.GetSysString(1341)); btnREYes = env->addButton(rect<s32>(70, 80, 140, 105), wRenameDeck, BUTTON_RENAME_DECK_SAVE, dataManager.GetSysString(1341));
btnRENo = env->addButton(rect<s32>(170, 80, 240, 105), wRenameDeck, BUTTON_RENAME_DECK_CANCEL, dataManager.GetSysString(1212)); btnRENo = env->addButton(rect<s32>(170, 80, 240, 105), wRenameDeck, BUTTON_RENAME_DECK_CANCEL, dataManager.GetSysString(1212));
//deck code
wDeckCode = env->addWindow(rect<s32>(510, 200, 820, 320), false, dataManager.GetSysString(1387));
wDeckCode->getCloseButton()->setVisible(false);
wDeckCode->setVisible(false);
env->addStaticText(dataManager.GetSysString(1388), rect<s32>(20, 25, 290, 45), false, false, wDeckCode);
ebDeckCode = env->addEditBox(L"", rect<s32>(20, 50, 290, 70), true, wDeckCode, -1);
ebDeckCode->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnDeckCodeYes = env->addButton(rect<s32>(70, 80, 140, 105), wDeckCode, BUTTON_DECK_CODE_SAVE, dataManager.GetSysString(1341));
btnDeckCodeNo = env->addButton(rect<s32>(170, 80, 240, 105), wDeckCode, BUTTON_DECK_CODE_CANCEL, dataManager.GetSysString(1212));
//sort type //sort type
wSort = env->addStaticText(L"", rect<s32>(930, 132, 1020, 156), true, false, 0, -1, true); wSort = env->addStaticText(L"", rect<s32>(930, 132, 1020, 156), true, false, 0, -1, true);
cbSortType = env->addComboBox(rect<s32>(10, 2, 85, 22), wSort, COMBOBOX_SORTTYPE); cbSortType = env->addComboBox(rect<s32>(10, 2, 85, 22), wSort, COMBOBOX_SORTTYPE);
...@@ -1965,6 +1979,7 @@ void Game::OnResize() { ...@@ -1965,6 +1979,7 @@ void Game::OnResize() {
btnSideReload->setRelativePosition(Resize(440, 100, 500, 130)); btnSideReload->setRelativePosition(Resize(440, 100, 500, 130));
btnDeleteDeck->setRelativePosition(Resize(225, 95, 290, 120)); btnDeleteDeck->setRelativePosition(Resize(225, 95, 290, 120));
btnRenameDeck->setRelativePosition(Resize(170, 99, 220, 120)); btnRenameDeck->setRelativePosition(Resize(170, 99, 220, 120));
btnDeckCode->setRelativePosition(Resize(5, 65, 75, 90));
wLanWindow->setRelativePosition(ResizeWin(220, 100, 800, 520)); wLanWindow->setRelativePosition(ResizeWin(220, 100, 800, 520));
wCreateHost->setRelativePosition(ResizeWin(320, 100, 700, 520)); wCreateHost->setRelativePosition(ResizeWin(320, 100, 700, 520));
...@@ -1986,6 +2001,7 @@ void Game::OnResize() { ...@@ -1986,6 +2001,7 @@ void Game::OnResize() {
wANAttribute->setRelativePosition(ResizeWin(500, 200, 830, 285)); wANAttribute->setRelativePosition(ResizeWin(500, 200, 830, 285));
wANRace->setRelativePosition(ResizeWin(480, 200, 850, 410)); wANRace->setRelativePosition(ResizeWin(480, 200, 850, 410));
wReplaySave->setRelativePosition(ResizeWin(510, 200, 820, 320)); wReplaySave->setRelativePosition(ResizeWin(510, 200, 820, 320));
wRenameDeck->setRelativePosition(ResizeWin(510, 200, 820, 320));
stHintMsg->setRelativePosition(ResizeWin(660 - 160 * xScale, 60, 660 + 160 * xScale, 90)); stHintMsg->setRelativePosition(ResizeWin(660 - 160 * xScale, 60, 660 + 160 * xScale, 90));
......
...@@ -438,6 +438,7 @@ public: ...@@ -438,6 +438,7 @@ public:
irr::gui::IGUIButton* btnOptionn; irr::gui::IGUIButton* btnOptionn;
irr::gui::IGUIButton* btnOptionOK; irr::gui::IGUIButton* btnOptionOK;
irr::gui::IGUIButton* btnOption[5]; irr::gui::IGUIButton* btnOption[5];
irr::gui::IGUIScrollBar* scrOption;
//pos selection //pos selection
irr::gui::IGUIWindow* wPosSelect; irr::gui::IGUIWindow* wPosSelect;
irr::gui::CGUIImageButton* btnPSAU; irr::gui::CGUIImageButton* btnPSAU;
...@@ -511,6 +512,19 @@ public: ...@@ -511,6 +512,19 @@ public:
irr::gui::IGUIButton* btnSideSort; irr::gui::IGUIButton* btnSideSort;
irr::gui::IGUIButton* btnSideReload; irr::gui::IGUIButton* btnSideReload;
irr::gui::IGUIEditBox* ebDeckname; irr::gui::IGUIEditBox* ebDeckname;
irr::gui::IGUIButton* btnRenameDeck;
irr::gui::IGUIButton* btnDeckCode;
//deck rename
irr::gui::IGUIWindow* wRenameDeck;
irr::gui::IGUIEditBox* ebREName;
irr::gui::IGUIButton* btnREYes;
irr::gui::IGUIButton* btnRENo;
//deck code
irr::gui::IGUIWindow* wDeckCode;
irr::gui::IGUIEditBox* ebDeckCode;
irr::gui::IGUIButton* btnDeckCodeYes;
irr::gui::IGUIButton* btnDeckCodeNo;
//
irr::gui::IGUIStaticText* stBanlist; irr::gui::IGUIStaticText* stBanlist;
irr::gui::IGUIStaticText* stDeck; irr::gui::IGUIStaticText* stDeck;
irr::gui::IGUIStaticText* stCategory; irr::gui::IGUIStaticText* stCategory;
...@@ -522,12 +536,6 @@ public: ...@@ -522,12 +536,6 @@ public:
irr::gui::IGUIStaticText* stStar; irr::gui::IGUIStaticText* stStar;
irr::gui::IGUIStaticText* stSearch; irr::gui::IGUIStaticText* stSearch;
irr::gui::IGUIStaticText* stScale; irr::gui::IGUIStaticText* stScale;
irr::gui::IGUIButton* btnRenameDeck;
//deck rename
irr::gui::IGUIWindow* wRenameDeck;
irr::gui::IGUIEditBox* ebREName;
irr::gui::IGUIButton* btnREYes;
irr::gui::IGUIButton* btnRENo;
//filter //filter
irr::gui::IGUIStaticText* wFilter; irr::gui::IGUIStaticText* wFilter;
irr::gui::IGUIScrollBar* scrFilter; irr::gui::IGUIScrollBar* scrFilter;
...@@ -658,6 +666,7 @@ extern HostInfo game_info; ...@@ -658,6 +666,7 @@ extern HostInfo game_info;
#define BUTTON_OPTION_2 225 #define BUTTON_OPTION_2 225
#define BUTTON_OPTION_3 226 #define BUTTON_OPTION_3 226
#define BUTTON_OPTION_4 227 #define BUTTON_OPTION_4 227
#define SCROLL_OPTION_SELECT 228
#define BUTTON_CARD_0 230 #define BUTTON_CARD_0 230
#define BUTTON_CARD_1 231 #define BUTTON_CARD_1 231
#define BUTTON_CARD_2 232 #define BUTTON_CARD_2 232
...@@ -764,6 +773,10 @@ extern HostInfo game_info; ...@@ -764,6 +773,10 @@ extern HostInfo game_info;
#define BUTTON_RENAME_DECK_SAVE 387 #define BUTTON_RENAME_DECK_SAVE 387
#define BUTTON_RENAME_DECK_CANCEL 388 #define BUTTON_RENAME_DECK_CANCEL 388
#define BUTTON_DECK_CODE 389
#define BUTTON_DECK_CODE_SAVE 390
#define BUTTON_DECK_CODE_CANCEL 391
#define TEXTURE_DUEL 0 #define TEXTURE_DUEL 0
#define TEXTURE_DECK 1 #define TEXTURE_DECK 1
#define TEXTURE_MENU 2 #define TEXTURE_MENU 2
......
...@@ -1704,7 +1704,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1704,7 +1704,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case MSG_ROCK_PAPER_SCISSORS: { case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
} }
case MSG_HAND_RES: { case MSG_HAND_RES: {
......
...@@ -422,6 +422,9 @@ ...@@ -422,6 +422,9 @@
!system 1384 电脑锁定出剪刀 !system 1384 电脑锁定出剪刀
!system 1385 列表为空,可能未安装合适的人机 !system 1385 列表为空,可能未安装合适的人机
!system 1386 使用正则表达式搜索卡片 !system 1386 使用正则表达式搜索卡片
!system 1387 卡组代码
!system 1388 Ctrl+A全选,Ctrl+C复制,Ctrl+V粘贴
!system 1389 卡组代码无效。
!system 1390 等待行动中... !system 1390 等待行动中...
!system 1391 等待行动中.... !system 1391 等待行动中....
!system 1392 等待行动中..... !system 1392 等待行动中.....
...@@ -737,7 +740,7 @@ ...@@ -737,7 +740,7 @@
!setname 0x73 超量 エクシーズ !setname 0x73 超量 エクシーズ
!setname 0x1073 混沌超量 CX(カオスエクシーズ) !setname 0x1073 混沌超量 CX(カオスエクシーズ)
!setname 0x2073 超量龙 エクシーズ・ドラゴン !setname 0x2073 超量龙 エクシーズ・ドラゴン
!setname 0x74 水精鱗 !setname 0x74 水精鳞 水精
!setname 0x75 深渊 アビス !setname 0x75 深渊 アビス
!setname 0x76 纹章兽 紋章獣 !setname 0x76 纹章兽 紋章獣
!setname 0x77 海皇 !setname 0x77 海皇
...@@ -961,3 +964,6 @@ ...@@ -961,3 +964,6 @@
!setname 0x128 魔女术 ウィッチクラフト !setname 0x128 魔女术 ウィッチクラフト
!setname 0x129 咒眼 呪眼 !setname 0x129 咒眼 呪眼
!setname 0x12a 恩底弥翁 エンディミオン !setname 0x12a 恩底弥翁 エンディミオン
!setname 0x12b 海晶少女 マリンセス
!setname 0x12c 天威
!setname 0x12d 斯摩夫 シムルグ
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#nickname & gamename should be less than 20 characters #nickname & gamename should be less than 20 characters
use_d3d = 0 use_d3d = 0
use_image_scale = 1 use_image_scale = 1
pro_version = 4936 pro_version = 4937
antialias = 2 antialias = 2
errorlog = 3 errorlog = 3
nickname = Komeiji Koishi nickname = Komeiji Koishi
......
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