Commit 6a03a05b authored by mercury233's avatar mercury233

Merge branch 'fh' into patch-zip

parents 962bfa8e 553330c7
#include "data_manager.h"
#include "game.h"
#include <stdio.h>
namespace ygo {
......@@ -345,12 +346,20 @@ int DataManager::CardReader(int code, void* pData) {
return 0;
}
byte* DataManager::ScriptReaderEx(const char* script_name, int* slen) {
char exname[256] = "expansions";
strcat(exname, script_name + 1);//default script name: ./script/c%d.lua
if(ScriptReader(exname, slen))
// default script name: ./script/c%d.lua
char first[256];
char second[256];
if(mainGame->gameConf.prefer_expansion_script) {
sprintf(first, "expansions/%s", script_name + 2);
sprintf(second, "%s", script_name + 2);
} else {
sprintf(first, "%s", script_name + 2);
sprintf(second, "expansions/%s", script_name + 2);
}
if(ScriptReader(first, slen))
return scriptBuffer;
else
return ScriptReader(script_name + 2, slen);
return ScriptReader(second, slen);
}
byte* DataManager::ScriptReader(const char* script_name, int* slen) {
wchar_t fname[256];
......
......@@ -1828,6 +1828,11 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return true;
break;
}
case CHECKBOX_PREFER_EXPANSION: {
mainGame->gameConf.prefer_expansion_script = mainGame->chkPreferExpansionScript->isChecked() ? 1 : 0;
return true;
break;
}
}
break;
}
......@@ -2201,7 +2206,7 @@ void ClientField::UpdateChainButtons() {
}
}
void ClientField::ShowCancelOrFinishButton(int buttonOp) {
if (!mainGame->chkHideHintButton->isChecked() && !mainGame->dInfo.isReplay) {
if (!mainGame->gameConf.hide_hint_button && !mainGame->dInfo.isReplay) {
switch (buttonOp) {
case 1:
mainGame->btnCancelOrFinish->setText(dataManager.GetSysString(1295));
......
......@@ -286,12 +286,6 @@ bool Game::Initialize() {
chkIgnore2 = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1291));
chkIgnore2->setChecked(gameConf.chkIgnore2 != 0);
posY += 30;
chkHideSetname = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1354));
chkHideSetname->setChecked(gameConf.chkHideSetname != 0);
posY += 30;
chkHideHintButton = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1355));
chkHideHintButton->setChecked(gameConf.chkHideHintButton != 0);
posY += 30;
chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1357));
chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0);
posY += 30;
......@@ -301,6 +295,9 @@ bool Game::Initialize() {
chkMultiKeywords = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, CHECKBOX_MULTI_KEYWORDS, dataManager.GetSysString(1378));
chkMultiKeywords->setChecked(gameConf.search_multiple_keywords > 0);
posY += 30;
chkPreferExpansionScript = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, CHECKBOX_PREFER_EXPANSION, dataManager.GetSysString(1379));
chkPreferExpansionScript->setChecked(gameConf.prefer_expansion_script != 0);
posY += 30;
chkEnableSound = env->addCheckBox(gameConf.enable_sound, rect<s32>(posX, posY, posX + 120, posY + 25), tabSystem, -1, dataManager.GetSysString(1279));
chkEnableSound->setChecked(gameConf.enable_sound);
scrSoundVolume = env->addScrollBar(true, rect<s32>(posX + 126, posY + 4, posX + 260, posY + 21), tabSystem, SCROLL_VOLUME);
......@@ -627,7 +624,7 @@ bool Game::Initialize() {
btnLoadSinglePlay = env->addButton(rect<s32>(459, 301, 569, 326), tabSingle, BUTTON_LOAD_SINGLEPLAY, dataManager.GetSysString(1211));
btnSinglePlayCancel = env->addButton(rect<s32>(459, 331, 569, 356), tabSingle, BUTTON_CANCEL_SINGLEPLAY, dataManager.GetSysString(1210));
env->addStaticText(dataManager.GetSysString(1352), rect<s32>(360, 10, 550, 30), false, true, tabSingle);
stSinglePlayInfo = env->addStaticText(L"", rect<s32>(360, 40, 550, 280), false, true, tabSingle);
stSinglePlayInfo = env->addStaticText(L"", rect<s32>(360, 40, 560, 280), false, true, tabSingle);
//replay save
wReplaySave = env->addWindow(rect<s32>(510, 200, 820, 320), false, dataManager.GetSysString(1340));
wReplaySave->getCloseButton()->setVisible(false);
......@@ -925,6 +922,7 @@ void Game::RefreshReplay() {
}
void Game::RefreshSingleplay() {
lstSinglePlayList->clear();
stSinglePlayInfo->setText(L"");
FileSystem::TraversalDir(L"./single", [this](const wchar_t* name, bool isdir) {
if(!isdir && wcsrchr(name, '.') && !mywcsncasecmp(wcsrchr(name, '.'), L".lua", 4))
lstSinglePlayList->addItem(name);
......@@ -999,8 +997,8 @@ void Game::LoadConfig() {
gameConf.chkWaitChain = 0;
gameConf.chkIgnore1 = 0;
gameConf.chkIgnore2 = 0;
gameConf.chkHideSetname = 0;
gameConf.chkHideHintButton = 0;
gameConf.hide_setname = 0;
gameConf.hide_hint_button = 0;
gameConf.control_mode = 0;
gameConf.draw_field_spell = 1;
gameConf.separate_clear_button = 1;
......@@ -1011,6 +1009,7 @@ void Game::LoadConfig() {
gameConf.enable_bot_mode = 0;
gameConf.quick_animation = 0;
gameConf.auto_save_replay = 0;
gameConf.prefer_expansion_script = 0;
gameConf.enable_sound = true;
gameConf.sound_volume = 0.5;
gameConf.enable_music = true;
......@@ -1061,9 +1060,9 @@ void Game::LoadConfig() {
} else if(!strcmp(strbuf, "mute_spectators")) {
gameConf.chkIgnore2 = atoi(valbuf);
} else if(!strcmp(strbuf, "hide_setname")) {
gameConf.chkHideSetname = atoi(valbuf);
gameConf.hide_setname = atoi(valbuf);
} else if(!strcmp(strbuf, "hide_hint_button")) {
gameConf.chkHideHintButton = atoi(valbuf);
gameConf.hide_hint_button = atoi(valbuf);
} else if(!strcmp(strbuf, "control_mode")) {
gameConf.control_mode = atoi(valbuf);
} else if(!strcmp(strbuf, "draw_field_spell")) {
......@@ -1084,6 +1083,8 @@ void Game::LoadConfig() {
gameConf.quick_animation = atoi(valbuf);
} else if(!strcmp(strbuf, "auto_save_replay")) {
gameConf.auto_save_replay = atoi(valbuf);
} else if(!strcmp(strbuf, "prefer_expansion_script")) {
gameConf.prefer_expansion_script = atoi(valbuf);
#ifdef YGOPRO_USE_IRRKLANG
} else if(!strcmp(strbuf, "enable_sound")) {
gameConf.enable_sound = atoi(valbuf) > 0;
......@@ -1145,8 +1146,8 @@ void Game::SaveConfig() {
fprintf(fp, "waitchain = %d\n", (chkWaitChain->isChecked() ? 1 : 0));
fprintf(fp, "mute_opponent = %d\n", (chkIgnore1->isChecked() ? 1 : 0));
fprintf(fp, "mute_spectators = %d\n", (chkIgnore2->isChecked() ? 1 : 0));
fprintf(fp, "hide_setname = %d\n", (chkHideSetname->isChecked() ? 1 : 0));
fprintf(fp, "hide_hint_button = %d\n", (chkHideHintButton->isChecked() ? 1 : 0));
fprintf(fp, "hide_setname = %d\n", gameConf.hide_setname);
fprintf(fp, "hide_hint_button = %d\n", gameConf.hide_hint_button);
fprintf(fp, "#control_mode = 0: Key A/S/D/R Chain Buttons. control_mode = 1: MouseLeft/MouseRight/NULL/F9 Without Chain Buttons\n");
fprintf(fp, "control_mode = %d\n", gameConf.control_mode);
fprintf(fp, "draw_field_spell = %d\n", gameConf.draw_field_spell);
......@@ -1160,6 +1161,7 @@ void Game::SaveConfig() {
fprintf(fp, "enable_bot_mode = %d\n", gameConf.enable_bot_mode);
fprintf(fp, "quick_animation = %d\n", gameConf.quick_animation);
fprintf(fp, "auto_save_replay = %d\n", (chkAutoSaveReplay->isChecked() ? 1 : 0));
fprintf(fp, "prefer_expansion_script = %d\n", gameConf.prefer_expansion_script);
#ifdef YGOPRO_USE_IRRKLANG
fprintf(fp, "enable_sound = %d\n", (chkEnableSound->isChecked() ? 1 : 0));
fprintf(fp, "enable_music = %d\n", (chkEnableMusic->isChecked() ? 1 : 0));
......@@ -1186,7 +1188,7 @@ void Game::ShowCardInfo(int code) {
else myswprintf(formatBuffer, L"%ls[%08d]", dataManager.GetName(code), code);
stName->setText(formatBuffer);
int offset = 0;
if(!chkHideSetname->isChecked()) {
if(!gameConf.hide_setname) {
unsigned long long sc = cd.setcode;
if(cd.alias) {
auto aptr = dataManager._datas.find(cd.alias);
......
......@@ -33,8 +33,8 @@ struct Config {
int chkWaitChain;
int chkIgnore1;
int chkIgnore2;
int chkHideSetname;
int chkHideHintButton;
int hide_setname;
int hide_hint_button;
int control_mode;
int draw_field_spell;
int separate_clear_button;
......@@ -45,6 +45,7 @@ struct Config {
int enable_bot_mode;
int quick_animation;
int auto_save_replay;
int prefer_expansion_script;
bool enable_sound;
bool enable_music;
double sound_volume;
......@@ -245,11 +246,10 @@ public:
irr::gui::IGUICheckBox* chkWaitChain;
irr::gui::IGUICheckBox* chkQuickAnimation;
irr::gui::IGUICheckBox* chkAutoSaveReplay;
irr::gui::IGUICheckBox* chkHideSetname;
irr::gui::IGUICheckBox* chkHideHintButton;
irr::gui::IGUICheckBox* chkIgnoreDeckChanges;
irr::gui::IGUICheckBox* chkAutoSearch;
irr::gui::IGUICheckBox* chkMultiKeywords;
irr::gui::IGUICheckBox* chkPreferExpansionScript;
irr::gui::IGUICheckBox* chkEnableSound;
irr::gui::IGUICheckBox* chkEnableMusic;
irr::gui::IGUIScrollBar* scrSoundVolume;
......@@ -628,6 +628,7 @@ extern Game* mainGame;
#define BUTTON_CANCEL_SINGLEPLAY 352
#define CHECKBOX_AUTO_SEARCH 360
#define CHECKBOX_MULTI_KEYWORDS 372
#define CHECKBOX_PREFER_EXPANSION 373
#define CHECKBOX_ENABLE_SOUND 361
#define CHECKBOX_ENABLE_MUSIC 362
#define SCROLL_VOLUME 363
......
......@@ -457,6 +457,55 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->SetStaticText(mainGame->stReplayInfo, 180, mainGame->guiFont, repinfo.c_str());
break;
}
case LISTBOX_SINGLEPLAY_LIST: {
int sel = mainGame->lstSinglePlayList->getSelected();
if(sel == -1)
break;
const wchar_t* name = mainGame->lstSinglePlayList->getListItem(sel);
wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name);
FILE *fp;
#ifdef _WIN32
fp = _wfopen(fname, L"rb");
#else
char filename[256];
BufferIO::EncodeUTF8(fname, filename);
fp = fopen(filename, "rb");
#endif
if(!fp) {
mainGame->stSinglePlayInfo->setText(L"");
break;
}
char linebuf[1024];
wchar_t wlinebuf[1024];
std::wstring message = L"";
bool in_message = false;
while(fgets(linebuf, 1024, fp)) {
if(!strnicmp(linebuf, "--[[message", 11)) {
size_t len = strlen(linebuf);
char* msgend = strrchr(linebuf, ']');
if(len <= 13) {
in_message = true;
continue;
} else if(len > 15 && msgend) {
*(msgend - 1) = '\0';
BufferIO::DecodeUTF8(linebuf + 12, wlinebuf);
message.append(wlinebuf);
break;
}
}
if(!strncmp(linebuf, "]]", 2)) {
in_message = false;
break;
}
if(in_message) {
BufferIO::DecodeUTF8(linebuf, wlinebuf);
message.append(wlinebuf);
}
}
mainGame->SetStaticText(mainGame->stSinglePlayInfo, 200, mainGame->guiFont, message.c_str());
break;
}
case LISTBOX_BOT_LIST: {
int sel = mainGame->lstBotList->getSelected();
if(sel == -1)
......
#[2018.10][2018.12 TCG][2018.7][2018.4][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2018.9 TCG][2018.5 TCG][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
#[2019.1][2018.10][2018.12 TCG][2018.7][2018.4][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2018.9 TCG][2018.5 TCG][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
!2019.1
#forbidden
91869203 0 --アマゾネスの射手
79875176 0 --トゥーン・キャノン・ソルジャー
11384280 0 --キャノン・ソルジャー
32723153 0 --マジカル·エクスプロージョン
20663556 0 --イレカエル
44910027 0 --ヴィクトリー・ドラゴン
25862681 0 --エンシェント・フェアリー・ドラゴン
53804307 0 --焔征竜-ブラスター
07563579 0 --Emヒグルミ
17330916 0 --EMモンキーボード
90411554 0 --巌征竜-レドックス
17412721 0 --旧神ノーデン
67441435 0 --グローアップ・バルブ
34124316 0 --サイバーポッド
88071625 0 --The tyrant NEPTUNE
61665245 0 --サモン・ソーサレス
48905153 0 --十二獣ドランシア
85115440 0 --十二獣ブルホーン
21593977 0 --処刑人-マキュラ
21377582 0 --真竜剣皇マスターP
16923472 0 --ゼンマイハンター
15341821 0 --ダンディライオン
18326736 0 --星守の騎士 プトレマイオス
39064822 0 --トロイメア・ゴブリン
58820923 0 --No.95 ギャラクシーアイズ・ダークマター・ドラゴン
54719828 0 --No.16 色の支配者ショック・ルーラー
26400609 0 --瀑征竜-タイダル
05043010 0 --ファイアウォール・ドラゴン
78706415 0 --ファイバーポッド
93369354 0 --フィッシュボーグ-ガンナー
23558733 0 --フェニキシアン・クラスター・アマリリス
09929398 0 --BF−朧影のゴウフウ
09047460 0 --BF−隠れ蓑のスチーム
31178212 0 --マジェスペクター・ユニコーン
34206604 0 --魔導サイエンティスト
04423206 0 --M.X-セイバー インヴォーカー
14702066 0 --メガキャノン・ソルジャー
96782886 0 --メンタルマスター
03078576 0 --八汰烏
34086406 0 --ラヴァルバル・チェイン
57421866 0 --レベル・スティーラー
41482598 0 --悪夢の蜃気楼
44763025 0 --いたずら好きな双子悪魔
19613556 0 --大嵐
17375316 0 --押収
74191942 0 --苦渋の選択
42829885 0 --強引な番兵
45986603 0 --強奪
55144522 0 --強欲な壺
04031928 0 --心変わり
46060017 0 --十二獣の会局
31423101 0 --神剣-フェニックスブレード
12580477 0 --サンダー·ボルト
23557835 0 --次元融合
57953380 0 --生還の宝札
60682203 0 --大寒波
69243953 0 --蝶の短剣-エルマ
79571449 0 --天使の施し
13035077 0 --ドラゴニックD
70828912 0 --早すぎた埋葬
42703248 0 --ハリケーン
34906152 0 --マスドライバー
46448938 0 --魔導書の神判
46411259 0 --突然変異
85602018 0 --遺言状
27174286 0 --異次元からの帰還
93016201 0 --王宮の弾圧
03280747 0 --第六感
64697231 0 --ダスト·シュート
80604091 0 --血の代償
35316708 0 --刻の封印
17178486 0 --ライフチェンジャー
28566710 0 --ラストバトル!
#limit
24094258 1 --ヘビーメタルフォーゼ・エレクトラム
76794549 1 --アストログラフ・マジシャン
73941492 1 --調弦の魔術師
52340444 1 --閃刀機-ホーネットビット
73468603 1 --盆回し
64034255 1 --A·ジェネクス·バードマン
01561110 1 --ABC-ドラゴン・バスター
50720316 1 --E·HERO シャドー·ミスト
40318957 1 --EMドクロバット・ジョーカー
42790071 1 --オルターガイスト・マルチフェイカー
50588353 1 --水晶機巧-ハリファイバー
12289247 1 --クロノグラフ・マジシャン
49684352 1 --虹彩の魔術師
74586817 1 --PSYフレームロード・Ω
78872731 1 --十二獣モルモラット
06602300 1 --重爆撃禽 ボム・フェネクス
75286621 1 --召喚獣メルカバー
78868119 1 --深海のディーヴァ
58984738 1 --真竜拳士ダイナマイトK
78080961 1 --SPYRAL−ジーニアス
63288573 1 --閃刀姫-カガリ
65192027 1 --ダーク·アームド·ドラゴン
44335251 1 --魂喰いオヴィラプター
90953320 1 --TG ハイパー·ライブラリアン
69015963 1 --デビル・フランケン
75732622 1 --トーチ・ゴーレム
16226786 1 --深淵の暗殺者
28297833 1 --ネクロフェイス
69610326 1 --覇王眷竜ダークヴルム
70583986 1 --氷結界の虎王ドゥローレン
52687916 1 --氷結界の龍 トリシューラ
33396948 1 --封印されしエクゾディア
07902349 1 --封印されし者の左腕
70903634 1 --封印されし者の右腕
44519536 1 --封印されし者の左足
08124921 1 --封印されし者の右足
35272499 1 --捕食植物オフリス・スコーピオ
36042004 1 --ベビケラサウルス
10802915 1 --魔界発現世行きデスガイド
41386308 1 --マスマティシャン
33508719 1 --メタモルポット
90809975 1 --餅カエル
89463537 1 --ユニコールの影霊衣
89399912 1 --嵐征竜-テンペスト
92746535 1 --竜剣士ラスターP
88264978 1 --レッドアイズ·ダークネスメタルドラゴン
48686504 1 --ローンファイア・ブロッサム
33782437 1 --一時休戦
66957584 1 --インフェルニティガン
81439173 1 --おろかな埋葬
23701465 1 --原初の種
99330325 1 --妨げられた壊獣の眠り
45305419 1 --継承の印
83764718 1 --死者蘇生
54631665 1 --SPYRAL RESORT
32807846 1 --増援
54447022 1 --ソウル・チャージ
72892473 1 --手札抹殺
73628505 1 --テラ・フォーミング
97211663 1 --影霊衣の反魂術
18144506 1 --ハーピィの羽根帚
08949584 1 --ヒーローアライブ
75500286 1 --封印の黄金櫃
53208660 1 --ペンデュラム・コール
93600443 1 --マスク・チェンジ・セカンド
15854426 1 --霞の谷の神風
58577036 1 --名推理
23171610 1 --リミッター解除
14733538 1 --竜呼相打つ
02295440 1 --ワン·フォー·ワン
05851097 1 --虚無空間
61740673 1 --王宮の勅命
21076084 1 --トリックスター・リンカーネイション
#semi limit
40044918 2 --E·HERO エアーマン
68819554 2 --Emダメージ・ジャグラー
65536818 2 --源竜星-ボウテンコウ
81275020 2 --SRベイゴマックス
61283655 2 --トリックスター・キャンディナ
14558127 2 --灰流うらら
55623480 2 --妖精伝姫−シラユキ
47325505 2 --化石調査
67723438 2 --緊急テレポート
73915051 2 --スケープ・ゴート
98338152 2 --閃刀機−ウィドウアンカー
63166095 2 --閃刀起動−エンゲージ
91623717 2 --連鎖爆撃
11110587 2 --隣の芝刈り
48130397 2 --超融合
66399653 2 --ユニオン格納庫
23314220 2 --ルドラの魔導書
84749824 2 --神の警告
41420027 2 --神の宣告
40605147 2 --神の通告
36468556 2 --停戦協定
53936268 2 --パーソナル・スプーフィング
!2018.10
#forbidden
......
......@@ -382,8 +382,6 @@
!system 1351 投降
!system 1352 主要信息:
!system 1353 播放起始于回合:
!system 1354 不显示卡片系列
!system 1355 不显示提示按钮
!system 1356 是否要放弃对卡组的修改?
!system 1357 不提示保留对卡组的修改
!system 1358 键入关键字后自动进行搜索
......@@ -401,6 +399,7 @@
!system 1373 名称↓
!system 1374 连接标记
!system 1378 使用多个关键词搜索卡片
!system 1379 启用扩展卡包调试模式
!system 1380 人机模式
!system 1381 残局模式
!system 1382 人机信息:
......
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