@@ -176,14 +176,16 @@ struct CheatEntry {
|
||||
* Order matches with the values of #CheatNumbers
|
||||
*/
|
||||
static const CheatEntry _cheats_ui[] = {
|
||||
{CNM_MONEY, SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||
{CNM_LOCAL_ONLY, SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||
{CNM_MONEY, SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||
{CNM_LOCAL_ONLY, SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||
{CNM_LOCAL_ONLY, SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||
{CNM_ALL, SLF_NOT_IN_SAVE, STR_CHEAT_INFLATION_COST, &_economy.inflation_prices, &_extra_cheats.inflation_cost.been_used, nullptr },
|
||||
{CNM_ALL, SLF_NOT_IN_SAVE, STR_CHEAT_INFLATION_INCOME, &_economy.inflation_payment, &_extra_cheats.inflation_income.been_used, nullptr },
|
||||
};
|
||||
|
||||
static bool IsCheatAllowed(CheatNetworkMode mode)
|
||||
@@ -251,6 +253,18 @@ struct CheatWindow : Window {
|
||||
DrawSprite((*ce->been_used) ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, box_left, y + icon_y_offset + 2);
|
||||
|
||||
switch (ce->type) {
|
||||
case SLF_NOT_IN_SAVE: {
|
||||
/* Change inflation factors */
|
||||
|
||||
/* Draw [<][>] boxes for settings of an integer-type */
|
||||
DrawArrowButtons(button_left, y + icon_y_offset, COLOUR_YELLOW, clicked - (i * 2), true, true);
|
||||
|
||||
uint64 val = (uint64)ReadValue(ce->variable, SLE_UINT64);
|
||||
SetDParam(0, val * 1000 >> 16);
|
||||
SetDParam(1, 3);
|
||||
break;
|
||||
}
|
||||
|
||||
case SLE_BOOL: {
|
||||
bool on = (*(bool*)ce->variable);
|
||||
|
||||
@@ -302,6 +316,10 @@ struct CheatWindow : Window {
|
||||
if (!IsCheatAllowed(ce->mode)) continue;
|
||||
lines++;
|
||||
switch (ce->type) {
|
||||
case SLF_NOT_IN_SAVE:
|
||||
/* Change inflation factors */
|
||||
break;
|
||||
|
||||
case SLE_BOOL:
|
||||
SetDParam(0, STR_CONFIG_SETTING_ON);
|
||||
width = max(width, GetStringBoundingBox(ce->str).width);
|
||||
@@ -371,6 +389,17 @@ struct CheatWindow : Window {
|
||||
SetDParam(0, value);
|
||||
ShowQueryString(STR_JUST_INT, STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED);
|
||||
return;
|
||||
} else if (ce->type == SLF_NOT_IN_SAVE && x >= 20 + this->box_width + SETTING_BUTTON_WIDTH) {
|
||||
clicked_widget = btn;
|
||||
uint64 val = (uint64)ReadValue(ce->variable, SLE_UINT64);
|
||||
SetDParam(0, val * 1000 >> 16);
|
||||
SetDParam(1, 3);
|
||||
StringID str = (btn == CHT_INFLATION_COST) ? STR_CHEAT_INFLATION_COST_QUERY_CAPT : STR_CHEAT_INFLATION_INCOME_QUERY_CAPT;
|
||||
char *saved = _settings_game.locale.digit_group_separator;
|
||||
_settings_game.locale.digit_group_separator = const_cast<char*>("");
|
||||
ShowQueryString(STR_JUST_DECIMAL, str, 12, this, CS_NUMERAL_DECIMAL, QSF_ACCEPT_UNCHANGED);
|
||||
_settings_game.locale.digit_group_separator = saved;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Not clicking a button? */
|
||||
@@ -379,6 +408,14 @@ struct CheatWindow : Window {
|
||||
if (!_networking) *ce->been_used = true;
|
||||
|
||||
switch (ce->type) {
|
||||
case SLF_NOT_IN_SAVE: {
|
||||
/* Change inflation factors */
|
||||
uint64 value = (uint64)ReadValue(ce->variable, SLE_UINT64) + (((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1) << 16);
|
||||
value = Clamp<uint64>(value, 1 << 16, MAX_INFLATION);
|
||||
DoCommandP(0, (uint32)btn, (uint32)value, CMD_CHEAT_SETTING);
|
||||
break;
|
||||
}
|
||||
|
||||
case SLE_BOOL:
|
||||
value ^= 1;
|
||||
if (ce->proc != nullptr && !_networking) ce->proc(value, 0);
|
||||
@@ -414,12 +451,20 @@ struct CheatWindow : Window {
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
if (_networking) return;
|
||||
|
||||
/* Was 'cancel' pressed or nothing entered? */
|
||||
if (str == nullptr || StrEmpty(str)) return;
|
||||
|
||||
const CheatEntry *ce = &_cheats_ui[clicked_widget];
|
||||
|
||||
if (ce->type == SLF_NOT_IN_SAVE) {
|
||||
char tmp_buffer[32];
|
||||
strecpy(tmp_buffer, str, lastof(tmp_buffer));
|
||||
str_replace_wchar(tmp_buffer, lastof(tmp_buffer), GetDecimalSeparatorChar(), '.');
|
||||
DoCommandP(0, (uint32)clicked_widget, (uint32)Clamp<uint64>(atof(tmp_buffer) * 65536.0, 1 << 16, MAX_INFLATION), CMD_CHEAT_SETTING);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_networking) return;
|
||||
int oldvalue = (int32)ReadValue(ce->variable, ce->type);
|
||||
int value = atoi(str);
|
||||
*ce->been_used = true;
|
||||
|
@@ -38,6 +38,8 @@ struct Cheats {
|
||||
};
|
||||
|
||||
struct ExtraCheats {
|
||||
Cheat inflation_cost; ///< inflation cost factor
|
||||
Cheat inflation_income; ///< inflation income factor
|
||||
};
|
||||
|
||||
/** Available cheats. */
|
||||
@@ -50,6 +52,8 @@ enum CheatNumbers {
|
||||
CHT_SETUP_PROD, ///< Allow manually editing of industry production.
|
||||
CHT_EDIT_MAX_HL, ///< Edit maximum allowed heightlevel
|
||||
CHT_CHANGE_DATE, ///< Do time traveling.
|
||||
CHT_INFLATION_COST, ///< Change inflation cost factor
|
||||
CHT_INFLATION_INCOME,///< Change inflation income factor
|
||||
|
||||
CHT_NUM_CHEATS, ///< Number of cheats.
|
||||
};
|
||||
|
@@ -2080,6 +2080,10 @@ STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Toyland landsca
|
||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE}{DATE_SHORT}
|
||||
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change current year
|
||||
STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1}
|
||||
STR_CHEAT_INFLATION_COST :{LTBLUE}Change inflation cost factor: {ORANGE}{DECIMAL}
|
||||
STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Change inflation cost factor
|
||||
STR_CHEAT_INFLATION_INCOME :{LTBLUE}Change inflation income factor: {ORANGE}{DECIMAL}
|
||||
STR_CHEAT_INFLATION_INCOME_QUERY_CAPT :{WHITE}Change inflation income factor
|
||||
|
||||
# Livery window
|
||||
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme
|
||||
|
@@ -249,6 +249,32 @@ CommandCost CmdCheatSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||
cht = &_cheats.no_jetcrash;
|
||||
break;
|
||||
|
||||
case CHT_INFLATION_INCOME:
|
||||
if (flags & DC_EXEC) {
|
||||
_extra_cheats.inflation_income.been_used = true;
|
||||
_economy.inflation_payment = Clamp<uint64>(p2, 1 << 16, MAX_INFLATION);
|
||||
if (_economy.inflation_payment > _economy.inflation_prices) {
|
||||
_economy.inflation_prices = _economy.inflation_payment;
|
||||
_extra_cheats.inflation_cost.been_used = true;
|
||||
}
|
||||
RecomputePrices();
|
||||
SetWindowDirty(WC_CHEATS, 0);
|
||||
}
|
||||
return CommandCost();
|
||||
|
||||
case CHT_INFLATION_COST:
|
||||
if (flags & DC_EXEC) {
|
||||
_extra_cheats.inflation_cost.been_used = true;
|
||||
_economy.inflation_prices = Clamp<uint64>(p2, 1 << 16, MAX_INFLATION);
|
||||
if (_economy.inflation_payment > _economy.inflation_prices) {
|
||||
_economy.inflation_payment = _economy.inflation_prices;
|
||||
_extra_cheats.inflation_income.been_used = true;
|
||||
}
|
||||
RecomputePrices();
|
||||
SetWindowDirty(WC_CHEATS, 0);
|
||||
}
|
||||
return CommandCost();
|
||||
|
||||
default:
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
@@ -26,6 +26,8 @@ struct ExtraCheatNameDesc {
|
||||
};
|
||||
|
||||
static ExtraCheatNameDesc _extra_cheat_descs[] = {
|
||||
{ "inflation_cost", &_extra_cheats.inflation_cost },
|
||||
{ "inflation_income", &_extra_cheats.inflation_income },
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user