Commit 15800b08 authored by nanahira's avatar nanahira

Merge branch 'develop' into server-develop

parents 1a8ea7eb 8dd95bcf
No preview for this file type
...@@ -79,9 +79,9 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide ...@@ -79,9 +79,9 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
const u32 image_pitch = image->getPitch() / sizeof(u16); const u32 image_pitch = image->getPitch() / sizeof(u16);
u16* image_data = (u16*)image->lock(); u16* image_data = (u16*)image->lock();
u8* glyph_data = bits.buffer; u8* glyph_data = bits.buffer;
for (s32 y = 0; y < bits.rows; ++y) { for (s32 y = 0; y < (s32)bits.rows; ++y) {
u16* row = image_data; u16* row = image_data;
for (s32 x = 0; x < bits.width; ++x) { for (s32 x = 0; x < (s32)bits.width; ++x) {
// Monochrome bitmaps store 8 pixels per byte. The left-most pixel is the bit 0x80. // Monochrome bitmaps store 8 pixels per byte. The left-most pixel is the bit 0x80.
// So, we go through the data each bit at a time. // So, we go through the data each bit at a time.
if ((glyph_data[y * bits.pitch + (x / 8)] & (0x80 >> (x % 8))) != 0) if ((glyph_data[y * bits.pitch + (x / 8)] & (0x80 >> (x % 8))) != 0)
...@@ -105,9 +105,9 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide ...@@ -105,9 +105,9 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
const u32 image_pitch = image->getPitch() / sizeof(u32); const u32 image_pitch = image->getPitch() / sizeof(u32);
u32* image_data = (u32*)image->lock(); u32* image_data = (u32*)image->lock();
u8* glyph_data = bits.buffer; u8* glyph_data = bits.buffer;
for (s32 y = 0; y < bits.rows; ++y) { for (s32 y = 0; y < (s32)bits.rows; ++y) {
u8* row = glyph_data; u8* row = glyph_data;
for (s32 x = 0; x < bits.width; ++x) { for (s32 x = 0; x < (s32)bits.width; ++x) {
image_data[y * image_pitch + x] |= static_cast<u32>(255.0f * (static_cast<float>(*row++) / gray_count)) << 24; image_data[y * image_pitch + x] |= static_cast<u32>(255.0f * (static_cast<float>(*row++) / gray_count)) << 24;
//data[y * image_pitch + x] |= ((u32)(*bitsdata++) << 24); //data[y * image_pitch + x] |= ((u32)(*bitsdata++) << 24);
} }
...@@ -154,8 +154,8 @@ void SGUITTGlyph::preload(u32 char_index, FT_Face face, video::IVideoDriver* dri ...@@ -154,8 +154,8 @@ void SGUITTGlyph::preload(u32 char_index, FT_Face face, video::IVideoDriver* dri
glyph_page = parent->getLastGlyphPageIndex(); glyph_page = parent->getLastGlyphPageIndex();
u32 texture_side_length = page->texture_size.Width - font_size; u32 texture_side_length = page->texture_size.Width - font_size;
u32 margin = font_size * 0.5; u32 margin = (u32)(font_size * 0.5);
u32 sprite_size = font_size * 1.5; u32 sprite_size = (u32)(font_size * 1.5);
core::vector2di page_position( core::vector2di page_position(
(s32)(page->used_slots % (s32)(texture_side_length / sprite_size)) * sprite_size + margin, (s32)(page->used_slots % (s32)(texture_side_length / sprite_size)) * sprite_size + margin,
(s32)(page->used_slots / (s32)(texture_side_length / sprite_size)) * sprite_size + margin (s32)(page->used_slots / (s32)(texture_side_length / sprite_size)) * sprite_size + margin
......
...@@ -54,13 +54,13 @@ public: ...@@ -54,13 +54,13 @@ public:
string_pointer strings_begin; string_pointer strings_begin;
string_pointer strings_end; string_pointer strings_end;
wchar_t numStrings[301][4]; wchar_t numStrings[301][4]{};
wchar_t numBuffer[6]; wchar_t numBuffer[6]{};
wchar_t attBuffer[128]; wchar_t attBuffer[128]{};
wchar_t racBuffer[128]; wchar_t racBuffer[128]{};
wchar_t tpBuffer[128]; wchar_t tpBuffer[128]{};
wchar_t scBuffer[128]; wchar_t scBuffer[128]{};
wchar_t lmBuffer[32]; wchar_t lmBuffer[32]{};
static byte scriptBuffer[0x20000]; static byte scriptBuffer[0x20000];
static const wchar_t* unknown_string; static const wchar_t* unknown_string;
......
...@@ -1274,10 +1274,10 @@ void Game::DrawDeckBd() { ...@@ -1274,10 +1274,10 @@ void Game::DrawDeckBd() {
dx = 436.0f / (lx - 1); dx = 436.0f / (lx - 1);
} }
int padding = scrPackCards->getPos() * lx; int padding = scrPackCards->getPos() * lx;
for(size_t i = 0; i < mainsize - padding && i < 7 * lx; ++i) { for(int i = 0; i < mainsize - padding && i < 7 * lx; ++i) {
size_t j = i + padding; int j = i + padding;
DrawThumb(deckManager.current_deck.main[j], position2di(314 + (i % lx) * dx, 164 + (i / lx) * dy), deckBuilder.filterList); DrawThumb(deckManager.current_deck.main[j], position2di(314 + (i % lx) * dx, 164 + (i / lx) * dy), deckBuilder.filterList);
if(deckBuilder.hovered_pos == 1 && deckBuilder.hovered_seq == (int)j) if(deckBuilder.hovered_pos == 1 && deckBuilder.hovered_seq == j)
driver->draw2DRectangleOutline(Resize(313 + (i % lx) * dx, 163 + (i / lx) * dy, 359 + (i % lx) * dx, 228 + (i / lx) * dy)); driver->draw2DRectangleOutline(Resize(313 + (i % lx) * dx, 163 + (i / lx) * dy, 359 + (i % lx) * dx, 228 + (i / lx) * dy));
} }
if(!deckBuilder.showing_pack) { if(!deckBuilder.showing_pack) {
......
...@@ -22,8 +22,8 @@ unsigned char DuelClient::selftype = 0; ...@@ -22,8 +22,8 @@ unsigned char DuelClient::selftype = 0;
bool DuelClient::is_host = false; bool DuelClient::is_host = false;
event_base* DuelClient::client_base = 0; event_base* DuelClient::client_base = 0;
bufferevent* DuelClient::client_bev = 0; bufferevent* DuelClient::client_bev = 0;
unsigned char DuelClient::duel_client_read[0x2000]; unsigned char DuelClient::duel_client_read[SIZE_NETWORK_BUFFER];
unsigned char DuelClient::duel_client_write[0x2000]; unsigned char DuelClient::duel_client_write[SIZE_NETWORK_BUFFER];
bool DuelClient::is_closing = false; bool DuelClient::is_closing = false;
bool DuelClient::is_swapping = false; bool DuelClient::is_swapping = false;
int DuelClient::select_hint = 0; int DuelClient::select_hint = 0;
...@@ -4300,8 +4300,8 @@ void DuelClient::BeginRefreshHost() { ...@@ -4300,8 +4300,8 @@ void DuelClient::BeginRefreshHost() {
SOCKET sSend = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); SOCKET sSend = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sSend == INVALID_SOCKET) if(sSend == INVALID_SOCKET)
break; break;
BOOL opt = TRUE; int opt = TRUE;
setsockopt(sSend, SOL_SOCKET, SO_BROADCAST, (const char*)&opt, sizeof(BOOL)); setsockopt(sSend, SOL_SOCKET, SO_BROADCAST, (const char*)&opt, sizeof opt);
if(bind(sSend, (sockaddr*)&local, sizeof(sockaddr)) == SOCKET_ERROR) { if(bind(sSend, (sockaddr*)&local, sizeof(sockaddr)) == SOCKET_ERROR) {
closesocket(sSend); closesocket(sSend);
break; break;
......
...@@ -66,8 +66,8 @@ private: ...@@ -66,8 +66,8 @@ private:
static bool is_host; static bool is_host;
static event_base* client_base; static event_base* client_base;
static bufferevent* client_bev; static bufferevent* client_bev;
static unsigned char duel_client_read[0x2000]; static unsigned char duel_client_read[SIZE_NETWORK_BUFFER];
static unsigned char duel_client_write[0x2000]; static unsigned char duel_client_write[SIZE_NETWORK_BUFFER];
static bool is_closing; static bool is_closing;
static bool is_swapping; static bool is_swapping;
static int select_hint; static int select_hint;
...@@ -111,23 +111,31 @@ public: ...@@ -111,23 +111,31 @@ public:
template<typename ST> template<typename ST>
static void SendPacketToServer(unsigned char proto, ST& st) { static void SendPacketToServer(unsigned char proto, ST& st) {
auto p = duel_client_write; auto p = duel_client_write;
BufferIO::WriteInt16(p, 1 + sizeof(ST)); int blen = sizeof(ST);
if (blen > MAX_DATA_SIZE)
blen = MAX_DATA_SIZE;
BufferIO::WriteInt16(p, (short)(1 + blen));
BufferIO::WriteInt8(p, proto); BufferIO::WriteInt8(p, proto);
memcpy(p, &st, sizeof(ST)); memcpy(p, &st, blen);
#ifdef YGOPRO_MESSAGE_DEBUG #ifdef YGOPRO_MESSAGE_DEBUG
printf("CTOS: %d Length: %ld\n", proto, sizeof(ST)); printf("CTOS: %d Length: %ld\n", proto, sizeof(ST));
#endif #endif
bufferevent_write(client_bev, duel_client_write, sizeof(ST) + 3); bufferevent_write(client_bev, duel_client_write, blen + 3);
} }
static void SendBufferToServer(unsigned char proto, void* buffer, size_t len) { static void SendBufferToServer(unsigned char proto, void* buffer, size_t len) {
auto p = duel_client_write; auto p = duel_client_write;
BufferIO::WriteInt16(p, 1 + len); int blen = len;
if (blen < 0)
return;
if (blen > MAX_DATA_SIZE)
blen = MAX_DATA_SIZE;
BufferIO::WriteInt16(p, (short)(1 + blen));
BufferIO::WriteInt8(p, proto); BufferIO::WriteInt8(p, proto);
memcpy(p, buffer, len); memcpy(p, buffer, blen);
#ifdef YGOPRO_MESSAGE_DEBUG #ifdef YGOPRO_MESSAGE_DEBUG
printf("CTOS: %d Length: %ld\n", proto, len); printf("CTOS: %d Length: %ld\n", proto, len);
#endif #endif
bufferevent_write(client_bev, duel_client_write, len + 3); bufferevent_write(client_bev, duel_client_write, blen + 3);
} }
protected: protected:
......
...@@ -274,7 +274,7 @@ bool Game::Initialize() { ...@@ -274,7 +274,7 @@ bool Game::Initialize() {
SetWindowsIcon(); SetWindowsIcon();
//main menu //main menu
wchar_t strbuf[256]; wchar_t strbuf[256];
myswprintf(strbuf, L"KoishiPro %X.0%X.%X Selenadia", PRO_VERSION >> 12, (PRO_VERSION >> 4) & 0xff, PRO_VERSION & 0xf); myswprintf(strbuf, L"KoishiPro %X.0%X.%X Snowdream", PRO_VERSION >> 12, (PRO_VERSION >> 4) & 0xff, PRO_VERSION & 0xf);
wMainMenu = env->addWindow(rect<s32>(370, 200, 650, 415), false, strbuf); wMainMenu = env->addWindow(rect<s32>(370, 200, 650, 415), false, strbuf);
wMainMenu->getCloseButton()->setVisible(false); wMainMenu->getCloseButton()->setVisible(false);
btnLanMode = env->addButton(rect<s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200)); btnLanMode = env->addButton(rect<s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200));
...@@ -844,7 +844,7 @@ bool Game::Initialize() { ...@@ -844,7 +844,7 @@ bool Game::Initialize() {
cbCardType->addItem(dataManager.GetSysString(1312)); cbCardType->addItem(dataManager.GetSysString(1312));
cbCardType->addItem(dataManager.GetSysString(1313)); cbCardType->addItem(dataManager.GetSysString(1313));
cbCardType->addItem(dataManager.GetSysString(1314)); cbCardType->addItem(dataManager.GetSysString(1314));
cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 200, 20 + 25 / 6), wFilter, COMBOBOX_SECONDTYPE); cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 195, 20 + 25 / 6), wFilter, COMBOBOX_SECONDTYPE);
cbCardType2->setMaxSelectionRows(10); cbCardType2->setMaxSelectionRows(10);
cbCardType2->addItem(dataManager.GetSysString(1310), 0); cbCardType2->addItem(dataManager.GetSysString(1310), 0);
stLimit = env->addStaticText(dataManager.GetSysString(1315), rect<s32>(205, 2 + 25 / 6, 280, 22 + 25 / 6), false, false, wFilter); stLimit = env->addStaticText(dataManager.GetSysString(1315), rect<s32>(205, 2 + 25 / 6, 280, 22 + 25 / 6), false, false, wFilter);
...@@ -860,13 +860,13 @@ bool Game::Initialize() { ...@@ -860,13 +860,13 @@ bool Game::Initialize() {
cbLimit->addItem(dataManager.GetSysString(1484)); cbLimit->addItem(dataManager.GetSysString(1484));
cbLimit->addItem(dataManager.GetSysString(1485)); cbLimit->addItem(dataManager.GetSysString(1485));
stAttribute = env->addStaticText(dataManager.GetSysString(1319), rect<s32>(10, 22 + 50 / 6, 70, 42 + 50 / 6), false, false, wFilter); stAttribute = env->addStaticText(dataManager.GetSysString(1319), rect<s32>(10, 22 + 50 / 6, 70, 42 + 50 / 6), false, false, wFilter);
cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 190, 40 + 50 / 6), wFilter, COMBOBOX_ATTRIBUTE); cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 195, 40 + 50 / 6), wFilter, COMBOBOX_ATTRIBUTE);
cbAttribute->setMaxSelectionRows(10); cbAttribute->setMaxSelectionRows(10);
cbAttribute->addItem(dataManager.GetSysString(1310), 0); cbAttribute->addItem(dataManager.GetSysString(1310), 0);
for(int filter = 0x1; filter != 0x80; filter <<= 1) for(int filter = 0x1; filter != 0x80; filter <<= 1)
cbAttribute->addItem(dataManager.FormatAttribute(filter), filter); cbAttribute->addItem(dataManager.FormatAttribute(filter), filter);
stRace = env->addStaticText(dataManager.GetSysString(1321), rect<s32>(10, 42 + 75 / 6, 70, 62 + 75 / 6), false, false, wFilter); stRace = env->addStaticText(dataManager.GetSysString(1321), rect<s32>(10, 42 + 75 / 6, 70, 62 + 75 / 6), false, false, wFilter);
cbRace = env->addComboBox(rect<s32>(60, 40 + 75 / 6, 190, 60 + 75 / 6), wFilter, COMBOBOX_RACE); cbRace = env->addComboBox(rect<s32>(60, 40 + 75 / 6, 195, 60 + 75 / 6), wFilter, COMBOBOX_RACE);
cbRace->setMaxSelectionRows(10); cbRace->setMaxSelectionRows(10);
cbRace->addItem(dataManager.GetSysString(1310), 0); cbRace->addItem(dataManager.GetSysString(1310), 0);
for(int filter = 0x1; filter < (1 << RACES_COUNT); filter <<= 1) for(int filter = 0x1; filter < (1 << RACES_COUNT); filter <<= 1)
...@@ -881,7 +881,7 @@ bool Game::Initialize() { ...@@ -881,7 +881,7 @@ bool Game::Initialize() {
ebStar = env->addEditBox(L"", rect<s32>(60, 60 + 100 / 6, 100, 80 + 100 / 6), true, wFilter, EDITBOX_INPUTS); ebStar = env->addEditBox(L"", rect<s32>(60, 60 + 100 / 6, 100, 80 + 100 / 6), true, wFilter, EDITBOX_INPUTS);
ebStar->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebStar->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
stScale = env->addStaticText(dataManager.GetSysString(1336), rect<s32>(101, 62 + 100 / 6, 150, 82 + 100 / 6), false, false, wFilter); stScale = env->addStaticText(dataManager.GetSysString(1336), rect<s32>(101, 62 + 100 / 6, 150, 82 + 100 / 6), false, false, wFilter);
ebScale = env->addEditBox(L"", rect<s32>(150, 60 + 100 / 6, 190, 80 + 100 / 6), true, wFilter, EDITBOX_INPUTS); ebScale = env->addEditBox(L"", rect<s32>(150, 60 + 100 / 6, 195, 80 + 100 / 6), true, wFilter, EDITBOX_INPUTS);
ebScale->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebScale->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
stSearch = env->addStaticText(dataManager.GetSysString(1325), rect<s32>(205, 62 + 100 / 6, 280, 82 + 100 / 6), false, false, wFilter); stSearch = env->addStaticText(dataManager.GetSysString(1325), rect<s32>(205, 62 + 100 / 6, 280, 82 + 100 / 6), false, false, wFilter);
ebCardName = env->addEditBox(L"", rect<s32>(260, 60 + 100 / 6, 390, 80 + 100 / 6), true, wFilter, EDITBOX_KEYWORD); ebCardName = env->addEditBox(L"", rect<s32>(260, 60 + 100 / 6, 390, 80 + 100 / 6), true, wFilter, EDITBOX_KEYWORD);
...@@ -900,7 +900,7 @@ bool Game::Initialize() { ...@@ -900,7 +900,7 @@ bool Game::Initialize() {
btnCategoryOK = env->addButton(rect<s32>(150, 210, 250, 235), wCategories, BUTTON_CATEGORY_OK, dataManager.GetSysString(1211)); btnCategoryOK = env->addButton(rect<s32>(150, 210, 250, 235), wCategories, BUTTON_CATEGORY_OK, dataManager.GetSysString(1211));
int catewidth = 0; int catewidth = 0;
for(int i = 0; i < 32; ++i) { for(int i = 0; i < 32; ++i) {
irr::core::dimension2d<unsigned int> dtxt = mainGame->guiFont->getDimension(dataManager.GetSysString(1100 + i)); irr::core::dimension2d<unsigned int> dtxt = guiFont->getDimension(dataManager.GetSysString(1100 + i));
if((int)dtxt.Width + 40 > catewidth) if((int)dtxt.Width + 40 > catewidth)
catewidth = dtxt.Width + 40; catewidth = dtxt.Width + 40;
} }
...@@ -909,7 +909,7 @@ bool Game::Initialize() { ...@@ -909,7 +909,7 @@ bool Game::Initialize() {
int wcatewidth = catewidth * 4 + 16; int wcatewidth = catewidth * 4 + 16;
wCategories->setRelativePosition(rect<s32>(1000 - wcatewidth, 60, 1000, 305)); wCategories->setRelativePosition(rect<s32>(1000 - wcatewidth, 60, 1000, 305));
btnCategoryOK->setRelativePosition(recti(wcatewidth / 2 - 50, 210, wcatewidth / 2 + 50, 235)); btnCategoryOK->setRelativePosition(recti(wcatewidth / 2 - 50, 210, wcatewidth / 2 + 50, 235));
btnMarksFilter = env->addButton(rect<s32>(60, 80 + 125 / 6, 190, 100 + 125 / 6), wFilter, BUTTON_MARKS_FILTER, dataManager.GetSysString(1374)); btnMarksFilter = env->addButton(rect<s32>(60, 80 + 125 / 6, 195, 100 + 125 / 6), wFilter, BUTTON_MARKS_FILTER, dataManager.GetSysString(1374));
wLinkMarks = env->addWindow(rect<s32>(700, 30, 820, 150), false, L""); wLinkMarks = env->addWindow(rect<s32>(700, 30, 820, 150), false, L"");
wLinkMarks->getCloseButton()->setVisible(false); wLinkMarks->getCloseButton()->setVisible(false);
wLinkMarks->setDrawTitlebar(false); wLinkMarks->setDrawTitlebar(false);
...@@ -1883,7 +1883,7 @@ void Game::ShowCardInfo(int code, bool resize) { ...@@ -1883,7 +1883,7 @@ void Game::ShowCardInfo(int code, bool resize) {
myswprintf(formatBuffer, L"[%ls] %ls/%ls", dataManager.FormatType(cd.type), dataManager.FormatRace(cd.race), dataManager.FormatAttribute(cd.attribute)); myswprintf(formatBuffer, L"[%ls] %ls/%ls", dataManager.FormatType(cd.type), dataManager.FormatRace(cd.race), dataManager.FormatAttribute(cd.attribute));
stInfo->setText(formatBuffer); stInfo->setText(formatBuffer);
int offset_info = 0; int offset_info = 0;
irr::core::dimension2d<unsigned int> dtxt = mainGame->guiFont->getDimension(formatBuffer); irr::core::dimension2d<unsigned int> dtxt = guiFont->getDimension(formatBuffer);
if(dtxt.Width > (300 * xScale - 13) - 15) if(dtxt.Width > (300 * xScale - 13) - 15)
offset_info = 15; offset_info = 15;
if(!(cd.type & TYPE_LINK)) { if(!(cd.type & TYPE_LINK)) {
...@@ -1917,7 +1917,7 @@ void Game::ShowCardInfo(int code, bool resize) { ...@@ -1917,7 +1917,7 @@ void Game::ShowCardInfo(int code, bool resize) {
} }
stDataInfo->setText(formatBuffer); stDataInfo->setText(formatBuffer);
int offset_arrows = offset_info; int offset_arrows = offset_info;
dtxt = mainGame->guiFont->getDimension(formatBuffer); dtxt = guiFont->getDimension(formatBuffer);
if(dtxt.Width > (300 * xScale - 13) - 15) if(dtxt.Width > (300 * xScale - 13) - 15)
offset_arrows += 15; offset_arrows += 15;
stInfo->setRelativePosition(rect<s32>(15, 37, 300 * xScale - 13, (60 + offset_info))); stInfo->setRelativePosition(rect<s32>(15, 37, 300 * xScale - 13, (60 + offset_info)));
...@@ -2214,12 +2214,12 @@ void Game::OnResize() { ...@@ -2214,12 +2214,12 @@ void Game::OnResize() {
wFilter->setRelativePosition(Resize(610, 5, 1020, 130)); wFilter->setRelativePosition(Resize(610, 5, 1020, 130));
scrFilter->setRelativePosition(Resize(999, 161, 1019, 629)); scrFilter->setRelativePosition(Resize(999, 161, 1019, 629));
cbCardType->setRelativePosition(Resize(60, 25 / 6, 120, 20 + 25 / 6)); cbCardType->setRelativePosition(Resize(60, 25 / 6, 120, 20 + 25 / 6));
cbCardType2->setRelativePosition(Resize(130, 25 / 6, 190, 20 + 25 / 6)); cbCardType2->setRelativePosition(Resize(125, 25 / 6, 195, 20 + 25 / 6));
cbRace->setRelativePosition(Resize(60, 40 + 75 / 6, 190, 60 + 75 / 6)); cbRace->setRelativePosition(Resize(60, 40 + 75 / 6, 195, 60 + 75 / 6));
cbAttribute->setRelativePosition(Resize(60, 20 + 50 / 6, 190, 40 + 50 / 6)); cbAttribute->setRelativePosition(Resize(60, 20 + 50 / 6, 195, 40 + 50 / 6));
cbLimit->setRelativePosition(Resize(260, 25 / 6, 390, 20 + 25 / 6)); cbLimit->setRelativePosition(Resize(260, 25 / 6, 390, 20 + 25 / 6));
ebStar->setRelativePosition(Resize(60, 60 + 100 / 6, 95, 80 + 100 / 6)); ebStar->setRelativePosition(Resize(60, 60 + 100 / 6, 95, 80 + 100 / 6));
ebScale->setRelativePosition(Resize(155, 60 + 100 / 6, 190, 80 + 100 / 6)); ebScale->setRelativePosition(Resize(155, 60 + 100 / 6, 195, 80 + 100 / 6));
ebAttack->setRelativePosition(Resize(260, 20 + 50 / 6, 340, 40 + 50 / 6)); ebAttack->setRelativePosition(Resize(260, 20 + 50 / 6, 340, 40 + 50 / 6));
ebDefense->setRelativePosition(Resize(260, 40 + 75 / 6, 340, 60 + 75 / 6)); ebDefense->setRelativePosition(Resize(260, 40 + 75 / 6, 340, 60 + 75 / 6));
ebCardName->setRelativePosition(Resize(260, 60 + 100 / 6, 390, 80 + 100 / 6)); ebCardName->setRelativePosition(Resize(260, 60 + 100 / 6, 390, 80 + 100 / 6));
...@@ -2227,7 +2227,7 @@ void Game::OnResize() { ...@@ -2227,7 +2227,7 @@ void Game::OnResize() {
btnStartFilter->setRelativePosition(Resize(260, 80 + 125 / 6, 390, 100 + 125 / 6)); btnStartFilter->setRelativePosition(Resize(260, 80 + 125 / 6, 390, 100 + 125 / 6));
if(btnClearFilter) if(btnClearFilter)
btnClearFilter->setRelativePosition(Resize(205, 80 + 125 / 6, 255, 100 + 125 / 6)); btnClearFilter->setRelativePosition(Resize(205, 80 + 125 / 6, 255, 100 + 125 / 6));
btnMarksFilter->setRelativePosition(Resize(60, 80 + 125 / 6, 190, 100 + 125 / 6)); btnMarksFilter->setRelativePosition(Resize(60, 80 + 125 / 6, 195, 100 + 125 / 6));
recti btncatepos = btnEffectFilter->getAbsolutePosition(); recti btncatepos = btnEffectFilter->getAbsolutePosition();
wCategories->setRelativePosition(recti( wCategories->setRelativePosition(recti(
...@@ -2309,8 +2309,8 @@ void Game::OnResize() { ...@@ -2309,8 +2309,8 @@ void Game::OnResize() {
scrTabSystem->setVisible(false); scrTabSystem->setVisible(false);
if(gameConf.resize_popup_menu) { if(gameConf.resize_popup_menu) {
int width = 100 * mainGame->xScale; int width = 100 * xScale;
int height = (mainGame->yScale >= 0.666) ? 21 * mainGame->yScale : 14; int height = (yScale >= 0.666) ? 21 * yScale : 14;
wCmdMenu->setRelativePosition(recti(1, 1, width + 1, 1)); wCmdMenu->setRelativePosition(recti(1, 1, width + 1, 1));
btnActivate->setRelativePosition(recti(1, 1, width, height)); btnActivate->setRelativePosition(recti(1, 1, width, height));
btnSummon->setRelativePosition(recti(1, 1, width, height)); btnSummon->setRelativePosition(recti(1, 1, width, height));
...@@ -2532,7 +2532,7 @@ const wchar_t* Game::GetLocaleDirWide(const char* dir) { ...@@ -2532,7 +2532,7 @@ const wchar_t* Game::GetLocaleDirWide(const char* dir) {
return locale_buf; return locale_buf;
} }
void Game::SetCursor(ECURSOR_ICON icon) { void Game::SetCursor(ECURSOR_ICON icon) {
ICursorControl* cursor = mainGame->device->getCursorControl(); ICursorControl* cursor = device->getCursorControl();
if(cursor->getActiveIcon() != icon) { if(cursor->getActiveIcon() != icon) {
cursor->setActiveIcon(icon); cursor->setActiveIcon(icon);
} }
......
...@@ -9,8 +9,8 @@ event_base* NetServer::net_evbase = 0; ...@@ -9,8 +9,8 @@ event_base* NetServer::net_evbase = 0;
event* NetServer::broadcast_ev = 0; event* NetServer::broadcast_ev = 0;
evconnlistener* NetServer::listener = 0; evconnlistener* NetServer::listener = 0;
DuelMode* NetServer::duel_mode = 0; DuelMode* NetServer::duel_mode = 0;
unsigned char NetServer::net_server_read[0x2000]; unsigned char NetServer::net_server_read[SIZE_NETWORK_BUFFER];
unsigned char NetServer::net_server_write[0x2000]; unsigned char NetServer::net_server_write[SIZE_NETWORK_BUFFER];
unsigned short NetServer::last_sent = 0; unsigned short NetServer::last_sent = 0;
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
...@@ -122,9 +122,9 @@ bool NetServer::StartBroadcast() { ...@@ -122,9 +122,9 @@ bool NetServer::StartBroadcast() {
if(!net_evbase) if(!net_evbase)
return false; return false;
SOCKET udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); SOCKET udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
BOOL opt = TRUE; int opt = TRUE;
setsockopt(udp, SOL_SOCKET, SO_BROADCAST, (const char*)&opt, sizeof(BOOL)); setsockopt(udp, SOL_SOCKET, SO_BROADCAST, (const char*)&opt, sizeof opt);
setsockopt(udp, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(BOOL)); setsockopt(udp, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof opt);
sockaddr_in addr; sockaddr_in addr;
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
......
...@@ -20,8 +20,8 @@ private: ...@@ -20,8 +20,8 @@ private:
static event* broadcast_ev; static event* broadcast_ev;
static evconnlistener* listener; static evconnlistener* listener;
static DuelMode* duel_mode; static DuelMode* duel_mode;
static unsigned char net_server_read[0x2000]; static unsigned char net_server_read[SIZE_NETWORK_BUFFER];
static unsigned char net_server_write[0x2000]; static unsigned char net_server_write[SIZE_NETWORK_BUFFER];
static unsigned short last_sent; static unsigned short last_sent;
public: public:
...@@ -53,26 +53,34 @@ public: ...@@ -53,26 +53,34 @@ public:
last_sent = 3; last_sent = 3;
if(!dp) if(!dp)
return; return;
bufferevent_write(dp->bev, net_server_write, last_sent); bufferevent_write(dp->bev, net_server_write, 3);
} }
template<typename ST> template<typename ST>
static void SendPacketToPlayer(DuelPlayer* dp, unsigned char proto, ST& st) { static void SendPacketToPlayer(DuelPlayer* dp, unsigned char proto, ST& st) {
auto p = net_server_write; auto p = net_server_write;
BufferIO::WriteInt16(p, 1 + sizeof(ST)); int blen = sizeof(ST);
if (blen > MAX_DATA_SIZE)
blen = MAX_DATA_SIZE;
BufferIO::WriteInt16(p, (short)(1 + blen));
BufferIO::WriteInt8(p, proto); BufferIO::WriteInt8(p, proto);
memcpy(p, &st, sizeof(ST)); memcpy(p, &st, blen);
last_sent = sizeof(ST) + 3; last_sent = blen + 3;
if(dp) if (dp)
bufferevent_write(dp->bev, net_server_write, last_sent); bufferevent_write(dp->bev, net_server_write, blen + 3);
} }
static void SendBufferToPlayer(DuelPlayer* dp, unsigned char proto, void* buffer, size_t len) { static void SendBufferToPlayer(DuelPlayer* dp, unsigned char proto, void* buffer, size_t len) {
auto p = net_server_write; auto p = net_server_write;
BufferIO::WriteInt16(p, 1 + len); int blen = len;
if (blen < 0)
return;
if (blen > MAX_DATA_SIZE)
blen = MAX_DATA_SIZE;
BufferIO::WriteInt16(p, (short)(1 + blen));
BufferIO::WriteInt8(p, proto); BufferIO::WriteInt8(p, proto);
memcpy(p, buffer, len); memcpy(p, buffer, blen);
last_sent = len + 3; last_sent = blen + 3;
if(dp) if (dp)
bufferevent_write(dp->bev, net_server_write, last_sent); bufferevent_write(dp->bev, net_server_write, blen + 3);
} }
static void ReSendToPlayer(DuelPlayer* dp) { static void ReSendToPlayer(DuelPlayer* dp) {
if(dp) if(dp)
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include <event2/thread.h> #include <event2/thread.h>
namespace ygo { namespace ygo {
constexpr int SIZE_NETWORK_BUFFER = 0x2000;
constexpr int MAX_DATA_SIZE = SIZE_NETWORK_BUFFER - 3;
struct HostInfo { struct HostInfo {
unsigned int lflist{ 0 }; unsigned int lflist{ 0 };
......
...@@ -58,7 +58,7 @@ int SingleMode::SinglePlayThread() { ...@@ -58,7 +58,7 @@ int SingleMode::SinglePlayThread() {
if(mainGame->chkSinglePlayReturnDeckTop->isChecked()) if(mainGame->chkSinglePlayReturnDeckTop->isChecked())
opt |= DUEL_RETURN_DECK_TOP; opt |= DUEL_RETURN_DECK_TOP;
char filename[256]; char filename[256];
size_t slen = 0; int slen = 0;
if(open_file) { if(open_file) {
open_file = false; open_file = false;
slen = BufferIO::EncodeUTF8(open_file_name, filename); slen = BufferIO::EncodeUTF8(open_file_name, filename);
......
This diff is collapsed.
Subproject commit 7448df909c630949ccf8a9be60bdc9cc0abd1dfc Subproject commit dcb3ee6c25f775562c1ad6f353e30ed928e16866
Subproject commit 4d55686f9414ca20d118d8065fe7c751502cf2c2 Subproject commit afdda75bf93d44ca28fe0e7563dc3001eca9320b
...@@ -320,6 +320,9 @@ ...@@ -320,6 +320,9 @@
!system 1262 大师规则3 !system 1262 大师规则3
!system 1263 新大师规则(2017 !system 1263 新大师规则(2017
!system 1264 大师规则(2020 !system 1264 大师规则(2020
!system 1267 语言(重启后生效)
!system 1268 盖放怪兽前询问
!system 1269 数字灵摆图片
!system 1270 卡片信息 !system 1270 卡片信息
!system 1271 消息记录 !system 1271 消息记录
!system 1272 清除记录 !system 1272 清除记录
...@@ -340,7 +343,7 @@ ...@@ -340,7 +343,7 @@
!system 1287 只有连锁1也显示连锁动画 !system 1287 只有连锁1也显示连锁动画
!system 1288 禁限卡表 !system 1288 禁限卡表
!system 1289 隐藏玩家昵称 !system 1289 隐藏玩家昵称
!system 1290 禁用聊天功能 !system 1290 忽略对方发言
!system 1291 忽略观战者发言 !system 1291 忽略观战者发言
!system 1292 忽略时点 !system 1292 忽略时点
!system 1293 显示时点 !system 1293 显示时点
...@@ -404,6 +407,7 @@ ...@@ -404,6 +407,7 @@
!system 1352 主要信息: !system 1352 主要信息:
!system 1353 播放起始于回合: !system 1353 播放起始于回合:
!system 1354 开局默认显示所有时点 !system 1354 开局默认显示所有时点
!system 1355 是否确定盖放[%ls]?
!system 1356 此操作将放弃对当前卡组的修改,是否继续? !system 1356 此操作将放弃对当前卡组的修改,是否继续?
!system 1357 不提示保留对卡组的修改 !system 1357 不提示保留对卡组的修改
!system 1358 键入关键字后自动进行搜索 !system 1358 键入关键字后自动进行搜索
...@@ -429,6 +433,10 @@ ...@@ -429,6 +433,10 @@
!system 1382 人机信息: !system 1382 人机信息:
!system 1384 电脑锁定出剪刀 !system 1384 电脑锁定出剪刀
!system 1385 列表为空,可能未安装合适的人机 !system 1385 列表为空,可能未安装合适的人机
!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 等待行动中.....
...@@ -1183,7 +1191,7 @@ ...@@ -1183,7 +1191,7 @@
!setname 0x18f 防火 ファイアウォール !setname 0x18f 防火 ファイアウォール
!setname 0x190 末那愚子族 マナドゥム !setname 0x190 末那愚子族 マナドゥム
!setname 0x191 妮穆蕾莉娅 ネムレリア !setname 0x191 妮穆蕾莉娅 ネムレリア
!setname 0x192 金傲大奖赛 GP(ゴールド・プライド) !setname 0x192 黄金荣耀 GP(ゴールド・プライド)
!setname 0x193 迷宫壁 ラビリンス・ウォール !setname 0x193 迷宫壁 ラビリンス・ウォール
!setname 0x194 至爱 フェイバリット !setname 0x194 至爱 フェイバリット
!setname 0x195 征服斗魂 VS(ヴァンキッシュ・ソウル) !setname 0x195 征服斗魂 VS(ヴァンキッシュ・ソウル)
...@@ -1211,3 +1219,4 @@ ...@@ -1211,3 +1219,4 @@
!setname 0x1aa 天杯龙 天盃龍 !setname 0x1aa 天杯龙 天盃龍
!setname 0x1ab 蕾祸 蕾禍 !setname 0x1ab 蕾祸 蕾禍
!setname 0x1ac 飞龙炎 Salamandra !setname 0x1ac 飞龙炎 Salamandra
!setname 0x1ad 灰尽 Ashened
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