Commit 248f8bac authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro into server-link

parents 2f55ba41 6344b48c
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
现用于[萌卡](https://mycard.moe/)[YGOPRO 233服](http://mercury233.me/ygosrv233/) 现用于[萌卡](https://mycard.moe/)[YGOPRO 233服](http://mercury233.me/ygosrv233/)
###Linux下编译 ### Linux下编译
* 需要以下组件或工具 * 需要以下组件或工具
* gcc * gcc
* premake4 * premake4
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* sqlite3 * sqlite3
* 可参考 https://github.com/mercury233/ygopro-server/wiki 中的脚本 * 可参考 https://github.com/mercury233/ygopro-server/wiki 中的脚本
###Windows下编译 ### Windows下编译
* 需要以下组件或工具 * 需要以下组件或工具
* Visual Studio * Visual Studio
* premake5 * premake5
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
* dirent for windows * dirent for windows
* 可参考本项目 [appveyor.yml](https://github.com/mycard/ygopro/blob/server/appveyor.yml) 中的脚本 * 可参考本项目 [appveyor.yml](https://github.com/mycard/ygopro/blob/server/appveyor.yml) 中的脚本
###运行 ### 运行
* 使用[ygopro-server](https://github.com/mycard/ygopro-server)运行 * 使用[ygopro-server](https://github.com/mycard/ygopro-server)运行
* 手动运行的参数是 * 手动运行的参数是
* ./ygopro 0 0 0 1 F F F 8000 5 1 180 0 * ./ygopro 0 0 0 1 F F F 8000 5 1 180 0
......
...@@ -305,38 +305,22 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) { ...@@ -305,38 +305,22 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) {
} }
const wchar_t* DataManager::FormatLinkMarker(int link_marker) { const wchar_t* DataManager::FormatLinkMarker(int link_marker) {
wchar_t* p = lmBuffer; wchar_t* p = lmBuffer;
if(link_marker & LINK_MARKER_TOP_LEFT) { if(link_marker & LINK_MARKER_TOP_LEFT)
BufferIO::CopyWStrRef(L"[ ]", p, 4); BufferIO::CopyWStrRef(L"[\u2196]", p, 4);
*(p - 2) = 0x2196; if(link_marker & LINK_MARKER_TOP)
} BufferIO::CopyWStrRef(L"[\u2191]", p, 4);
if(link_marker & LINK_MARKER_TOP) { if(link_marker & LINK_MARKER_TOP_RIGHT)
BufferIO::CopyWStrRef(L"[ ]", p, 4); BufferIO::CopyWStrRef(L"[\u2197]", p, 4);
*(p - 2) = 0x2191; if(link_marker & LINK_MARKER_LEFT)
} BufferIO::CopyWStrRef(L"[\u2190]", p, 4);
if(link_marker & LINK_MARKER_TOP_RIGHT) { if(link_marker & LINK_MARKER_RIGHT)
BufferIO::CopyWStrRef(L"[ ]", p, 4); BufferIO::CopyWStrRef(L"[\u2192]", p, 4);
*(p - 2) = 0x2197; if(link_marker & LINK_MARKER_BOTTOM_LEFT)
} BufferIO::CopyWStrRef(L"[\u2199]", p, 4);
if(link_marker & LINK_MARKER_LEFT) { if(link_marker & LINK_MARKER_BOTTOM)
BufferIO::CopyWStrRef(L"[ ]", p, 4); BufferIO::CopyWStrRef(L"[\u2193]", p, 4);
*(p - 2) = 0x2190; if(link_marker & LINK_MARKER_BOTTOM_RIGHT)
} BufferIO::CopyWStrRef(L"[\u2198]", p, 4);
if(link_marker & LINK_MARKER_RIGHT) {
BufferIO::CopyWStrRef(L"[ ]", p, 4);
*(p - 2) = 0x2192;
}
if(link_marker & LINK_MARKER_BOTTOM_LEFT) {
BufferIO::CopyWStrRef(L"[ ]", p, 4);
*(p - 2) = 0x2199;
}
if(link_marker & LINK_MARKER_BOTTOM) {
BufferIO::CopyWStrRef(L"[ ]", p, 4);
*(p - 2) = 0x2193;
}
if(link_marker & LINK_MARKER_BOTTOM_RIGHT) {
BufferIO::CopyWStrRef(L"[ ]", p, 4);
*(p - 2) = 0x2198;
}
return lmBuffer; return lmBuffer;
} }
int DataManager::CardReader(int code, void* pData) { int DataManager::CardReader(int code, void* pData) {
......
...@@ -307,14 +307,20 @@ void Game::DrawMisc() { ...@@ -307,14 +307,20 @@ void Game::DrawMisc() {
driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2);
} }
if(dField.pzone_act[0]) { if(dField.pzone_act[0]) {
im.setTranslation(vector3df((matManager.vFieldSzone[0][6][0].Pos.X + matManager.vFieldSzone[0][6][1].Pos.X) / 2, int seq = 0;
(matManager.vFieldSzone[0][6][0].Pos.Y + matManager.vFieldSzone[0][6][2].Pos.Y) / 2, 0.03f)); if(dField.szone[0][6] && dField.szone[0][6]->lscale)
seq = 6;
im.setTranslation(vector3df((matManager.vFieldSzone[0][seq][0].Pos.X + matManager.vFieldSzone[0][seq][1].Pos.X) / 2,
(matManager.vFieldSzone[0][seq][0].Pos.Y + matManager.vFieldSzone[0][seq][2].Pos.Y) / 2, 0.03f));
driver->setTransform(irr::video::ETS_WORLD, im); driver->setTransform(irr::video::ETS_WORLD, im);
driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2);
} }
if(dField.pzone_act[1]) { if(dField.pzone_act[1]) {
im.setTranslation(vector3df((matManager.vFieldSzone[0][7][0].Pos.X + matManager.vFieldSzone[0][7][1].Pos.X) / 2, int seq = 0;
(matManager.vFieldSzone[0][7][0].Pos.Y + matManager.vFieldSzone[0][7][2].Pos.Y) / 2, 0.03f)); if(dField.szone[1][6] && dField.szone[1][6]->lscale)
seq = 6;
im.setTranslation(vector3df((matManager.vFieldSzone[1][seq][0].Pos.X + matManager.vFieldSzone[1][seq][1].Pos.X) / 2,
(matManager.vFieldSzone[1][seq][0].Pos.Y + matManager.vFieldSzone[1][seq][2].Pos.Y) / 2, 0.03f));
driver->setTransform(irr::video::ETS_WORLD, im); driver->setTransform(irr::video::ETS_WORLD, im);
driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vActivate, 4, matManager.iRectangle, 2);
} }
...@@ -983,9 +989,9 @@ void Game::DrawDeckBd() { ...@@ -983,9 +989,9 @@ void Game::DrawDeckBd() {
textFont->draw(textBuffer, recti(859, 164 + i * 66, 955, 185 + i * 66), 0xff000000, false, false); textFont->draw(textBuffer, recti(859, 164 + i * 66, 955, 185 + i * 66), 0xff000000, false, false);
textFont->draw(textBuffer, recti(860, 165 + i * 66, 955, 185 + i * 66), 0xffffffff, false, false); textFont->draw(textBuffer, recti(860, 165 + i * 66, 955, 185 + i * 66), 0xffffffff, false, false);
if(!(ptr->second.type & TYPE_LINK)) { if(!(ptr->second.type & TYPE_LINK)) {
int form = 0x2605; wchar_t* form = L"\u2605";
if(ptr->second.type & TYPE_XYZ) ++form; if(ptr->second.type & TYPE_XYZ) form = L"\u2606";
myswprintf(textBuffer, L"%ls/%ls %c%d", dataManager.FormatAttribute(ptr->second.attribute), dataManager.FormatRace(ptr->second.race), form, ptr->second.level); myswprintf(textBuffer, L"%ls/%ls %ls%d", dataManager.FormatAttribute(ptr->second.attribute), dataManager.FormatRace(ptr->second.race), form, ptr->second.level);
textFont->draw(textBuffer, recti(859, 186 + i * 66, 955, 207 + i * 66), 0xff000000, false, false); textFont->draw(textBuffer, recti(859, 186 + i * 66, 955, 207 + i * 66), 0xff000000, false, false);
textFont->draw(textBuffer, recti(860, 187 + i * 66, 955, 207 + i * 66), 0xffffffff, false, false); textFont->draw(textBuffer, recti(860, 187 + i * 66, 955, 207 + i * 66), 0xffffffff, false, false);
if(ptr->second.attack < 0 && ptr->second.defense < 0) if(ptr->second.attack < 0 && ptr->second.defense < 0)
......
...@@ -1013,7 +1013,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1013,7 +1013,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->dField.remove_act = true; mainGame->dField.remove_act = true;
else if (pcard->location == LOCATION_EXTRA) else if (pcard->location == LOCATION_EXTRA)
mainGame->dField.extra_act = true; mainGame->dField.extra_act = true;
else if (pcard->location == LOCATION_SZONE && pcard->sequence == 6) else if (pcard->location == LOCATION_SZONE && (pcard->sequence == 0 || pcard->sequence == 6) && pcard->lscale)
mainGame->dField.pzone_act[pcard->controler] = true; mainGame->dField.pzone_act[pcard->controler] = true;
} }
mainGame->dField.reposable_cards.clear(); mainGame->dField.reposable_cards.clear();
...@@ -1289,9 +1289,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1289,9 +1289,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->dField.selected_field = 0; mainGame->dField.selected_field = 0;
unsigned char respbuf[64]; unsigned char respbuf[64];
int pzone = 0; int pzone = 0;
if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE) if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE) {
mainGame->stHintMsg->setText(dataManager.GetSysString(569)); if (select_hint) {
else myswprintf(textBuffer, dataManager.GetSysString(569), dataManager.GetName(select_hint));
} else
myswprintf(textBuffer, dataManager.GetSysString(560));
select_hint = 0;
mainGame->stHintMsg->setText(textBuffer);
} else
mainGame->stHintMsg->setText(dataManager.GetSysString(570)); mainGame->stHintMsg->setText(dataManager.GetSysString(570));
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) { if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) {
......
...@@ -1750,9 +1750,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1750,9 +1750,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%ls/%ls", mcard->atkstring, mcard->defstring); myswprintf(formatBuffer, L"\n%ls/%ls", mcard->atkstring, mcard->defstring);
str.append(formatBuffer); str.append(formatBuffer);
if(!(mcard->type & TYPE_LINK)) { if(!(mcard->type & TYPE_LINK)) {
int form = 0x2605; wchar_t* form = L"\u2605";
if (mcard->rank) ++form; if (mcard->rank) form = L"\u2606";
myswprintf(formatBuffer, L"\n%c%d", form, (mcard->level ? mcard->level : mcard->rank)); myswprintf(formatBuffer, L"\n%ls%d", form, (mcard->level ? mcard->level : mcard->rank));
str.append(formatBuffer); str.append(formatBuffer);
} else { } else {
myswprintf(formatBuffer, L"\nLINK-%d", mcard->link); myswprintf(formatBuffer, L"\nLINK-%d", mcard->link);
...@@ -1769,7 +1769,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1769,7 +1769,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
str.append(formatBuffer); str.append(formatBuffer);
} }
if(mcard->location == LOCATION_SZONE && (mcard->sequence == 6 || mcard->sequence == 7)) { if(mcard->location == LOCATION_SZONE && mcard->lscale) {
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);
} }
......
...@@ -1084,9 +1084,9 @@ void Game::ShowCardInfo(int code) { ...@@ -1084,9 +1084,9 @@ void Game::ShowCardInfo(int code) {
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);
if(!(cd.type & TYPE_LINK)) { if(!(cd.type & TYPE_LINK)) {
int form = 0x2605; wchar_t* form = L"\u2605";
if(cd.type & TYPE_XYZ) ++form; if(cd.type & TYPE_XYZ) form = L"\u2606";
myswprintf(formatBuffer, L"[%c%d] ", form, cd.level); myswprintf(formatBuffer, L"[%ls%d] ", form, cd.level);
wchar_t adBuffer[16]; wchar_t adBuffer[16];
if(cd.attack < 0 && cd.defense < 0) if(cd.attack < 0 && cd.defense < 0)
myswprintf(adBuffer, L"?/?"); myswprintf(adBuffer, L"?/?");
...@@ -1162,7 +1162,7 @@ void Game::AddChatMsg(wchar_t* msg, int player) { ...@@ -1162,7 +1162,7 @@ void Game::AddChatMsg(wchar_t* msg, int player) {
chatMsg[0].append(L"[System]: "); chatMsg[0].append(L"[System]: ");
break; break;
case 9: //error message case 9: //error message
chatMsg[0].append(L"[Script error:] "); chatMsg[0].append(L"[Script Error]: ");
break; break;
default: //from watcher or unknown default: //from watcher or unknown
if(player < 11 || player > 19) if(player < 11 || player > 19)
...@@ -1170,6 +1170,25 @@ void Game::AddChatMsg(wchar_t* msg, int player) { ...@@ -1170,6 +1170,25 @@ void Game::AddChatMsg(wchar_t* msg, int player) {
} }
chatMsg[0].append(msg); chatMsg[0].append(msg);
} }
void Game::AddDebugMsg(char* msg)
{
if (enable_log & 0x1) {
wchar_t wbuf[1024];
BufferIO::DecodeUTF8(msg, wbuf);
mainGame->AddChatMsg(wbuf, 9);
}
if (enable_log & 0x2) {
FILE* fp = fopen("error.log", "at");
if (!fp)
return;
time_t nowtime = time(NULL);
struct tm *localedtime = localtime(&nowtime);
char timebuf[40];
strftime(timebuf, 40, "%Y-%m-%d %H:%M:%S", localedtime);
fprintf(fp, "[%s][Script Error]: %s\n", timebuf, msg);
fclose(fp);
}
}
void Game::ClearTextures() { void Game::ClearTextures() {
matManager.mCard.setTexture(0, 0); matManager.mCard.setTexture(0, 0);
mainGame->imgCard->setImage(0); mainGame->imgCard->setImage(0);
......
...@@ -106,6 +106,7 @@ public: ...@@ -106,6 +106,7 @@ public:
void SaveConfig(); void SaveConfig();
void ShowCardInfo(int code); void ShowCardInfo(int code);
void AddChatMsg(wchar_t* msg, int player); void AddChatMsg(wchar_t* msg, int player);
void AddDebugMsg(char* msgbuf);
void ClearTextures(); void ClearTextures();
void CloseDuelWindow(); void CloseDuelWindow();
*/ */
......
...@@ -23,7 +23,7 @@ Materials::Materials() { ...@@ -23,7 +23,7 @@ Materials::Materials() {
SetS3DVertex(vField, -1.0f, -4.0f, 9.0f, 4.0f, 0, 1, 0, 0, 1, 1); SetS3DVertex(vField, -1.0f, -4.0f, 9.0f, 4.0f, 0, 1, 0, 0, 1, 1);
SetS3DVertex(vFieldSpell, 1.2f, -3.2f, 6.7f, 3.2f, 0, 1, 0, 0, 1, 1); SetS3DVertex(vFieldSpell, 1.2f, -3.2f, 6.7f, 3.2f, 0, 1, 0, 0, 1, 1);
SetS3DVertex(vFieldSpell1, 1.2f, 0.8f, 6.7f, 3.2f, 0, 1, 0, 0.2f, 1, 0.63636f); SetS3DVertex(vFieldSpell1, 1.2f, 0.8f, 6.7f, 3.2f, 0, 1, 0, 0.2f, 1, 0.63636f);
SetS3DVertex(vFieldSpell2, 1.2f, -3.2f, 6.7f, -0.8f, 0, 1, 0, 0.63636f, 1, 0.2f); SetS3DVertex(vFieldSpell2, 1.2f, -3.2f, 6.7f, -0.8f, 0, 1, 1, 0.63636f, 0, 0.2f);
/* /*
//background grids //background grids
......
...@@ -855,17 +855,7 @@ int ReplayMode::MessageHandler(long fduel, int type) { ...@@ -855,17 +855,7 @@ int ReplayMode::MessageHandler(long fduel, int type) {
return 0; return 0;
char msgbuf[1024]; char msgbuf[1024];
get_log_message(fduel, (byte*)msgbuf); get_log_message(fduel, (byte*)msgbuf);
if(enable_log == 1) { mainGame->AddDebugMsg(msgbuf);
wchar_t wbuf[1024];
BufferIO::DecodeUTF8(msgbuf, wbuf);
mainGame->AddChatMsg(wbuf, 9);
} else if(enable_log == 2) {
FILE* fp = fopen("error.log", "at");
if(!fp)
return 0;
fprintf(fp, "[Script error:] %s\n", msgbuf);
fclose(fp);
}
return 0; return 0;
} }
......
...@@ -828,17 +828,7 @@ int SingleMode::MessageHandler(long fduel, int type) { ...@@ -828,17 +828,7 @@ int SingleMode::MessageHandler(long fduel, int type) {
return 0; return 0;
char msgbuf[1024]; char msgbuf[1024];
get_log_message(fduel, (byte*)msgbuf); get_log_message(fduel, (byte*)msgbuf);
if(enable_log == 1) { mainGame->AddDebugMsg(msgbuf);
wchar_t wbuf[1024];
BufferIO::DecodeUTF8(msgbuf, wbuf);
mainGame->AddChatMsg(wbuf, 9);
} else if(enable_log == 2) {
FILE* fp = fopen("error.log", "at");
if(!fp)
return 0;
fprintf(fp, "[Script error:] %s\n", msgbuf);
fclose(fp);
}
return 0; return 0;
} }
......
Subproject commit 79b333e777773847087bfb151240f1889a1eae33 Subproject commit 6fcb836853c8d1bd41a95b1350578732adf56ff9
Subproject commit 658042de2000249a3d08cf5e1c45253443e6de1c Subproject commit 2ec851da8ba399fba856e14d58eb73050d02c002
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
!system 566 请选择要发动效果的卡 !system 566 请选择要发动效果的卡
!system 567 请宣言一个等级 !system 567 请宣言一个等级
!system 568 请选择要处理效果的卡 !system 568 请选择要处理效果的卡
!system 569 请选择卡片的位置 !system 569 请选择[%ls]的位置
!system 570 请选择要变成不能使用的卡片区域 !system 570 请选择要变成不能使用的卡片区域
!system 1000 卡组 !system 1000 卡组
!system 1001 手卡 !system 1001 手卡
......
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