File diff r10695:3124a970a753 → r10696:8dfe83e30d01
src/settings.cpp
Show inline comments
 
@@ -64,6 +64,9 @@
 
#include "station_func.h"
 
#include "settings_func.h"
 
#include "ini_type.h"
 
#include "ai/ai.hpp"
 
#include "ai/ai_config.hpp"
 
#include "ai/ai_info.hpp"
 

	
 
#include "table/strings.h"
 

	
 
@@ -827,21 +830,6 @@ static int32 v_PositionMainToolbar(int32
 
	return 0;
 
}
 

	
 
static int32 AiNew_PatchActive_Warning(int32 p1)
 
{
 
	if (p1 == 1) ShowErrorMessage(INVALID_STRING_ID, TEMP_AI_ACTIVATED, 0, 0);
 
	return 0;
 
}
 

	
 
static int32 Ai_In_Multiplayer_Warning(int32 p1)
 
{
 
	if (p1 == 1) {
 
		ShowErrorMessage(INVALID_STRING_ID, TEMP_AI_MULTIPLAYER, 0, 0);
 
		_settings_game.ai.ainew_active = true;
 
	}
 
	return 0;
 
}
 

	
 
static int32 PopulationInLabelActive(int32 p1)
 
{
 
	Town *t;
 
@@ -1330,12 +1318,13 @@ const SettingDesc _patch_settings[] = {
 
	 SDT_CONDVAR(GameSettings, economy.initial_city_size,            SLE_UINT8, 56, SL_MAX_VERSION, 0, 0,     2,     1,      10, 1, STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER,   NULL),
 
	SDT_CONDBOOL(GameSettings, economy.mod_road_rebuild,                        77, SL_MAX_VERSION, 0, 0, false,                    STR_CONFIG_MODIFIED_ROAD_REBUILD,          NULL),
 

	
 
	    SDT_BOOL(GameSettings, ai.ainew_active,                                                     0, 0, false,                    STR_CONFIG_PATCHES_AINEW_ACTIVE,           AiNew_PatchActive_Warning),
 
	    SDT_BOOL(GameSettings, ai.ai_in_multiplayer,                                                0, 0, false,                    STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER,      Ai_In_Multiplayer_Warning),
 
	SDT_CONDNULL(1, 0, 106), // previously ai-new setting.
 
	    SDT_BOOL(GameSettings, ai.ai_in_multiplayer,                                                0, 0, true,                     STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER,      NULL),
 
	    SDT_BOOL(GameSettings, ai.ai_disable_veh_train,                                             0, 0, false,                    STR_CONFIG_PATCHES_AI_BUILDS_TRAINS,       NULL),
 
	    SDT_BOOL(GameSettings, ai.ai_disable_veh_roadveh,                                           0, 0, false,                    STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH,      NULL),
 
	    SDT_BOOL(GameSettings, ai.ai_disable_veh_aircraft,                                          0, 0, false,                    STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT,     NULL),
 
	    SDT_BOOL(GameSettings, ai.ai_disable_veh_ship,                                              0, 0, false,                    STR_CONFIG_PATCHES_AI_BUILDS_SHIPS,        NULL),
 
	 SDT_CONDVAR(GameSettings, ai.ai_max_opcode_till_suspend,       SLE_UINT32,107, SL_MAX_VERSION, 0, NG, 10000, 5000,250000,2500, STR_CONFIG_PATCHES_AI_MAX_OPCODES,         NULL),
 

	
 
	     SDT_VAR(GameSettings, vehicle.extend_vehicle_life,          SLE_UINT8,                     0, 0,     0,     0,     100, 0, STR_NULL,                                  NULL),
 
	     SDT_VAR(GameSettings, economy.dist_local_authority,         SLE_UINT8,                     0, 0,    20,     5,      60, 0, STR_NULL,                                  NULL),
 
@@ -1635,6 +1624,32 @@ static void NewsDisplayLoadConfig(IniFil
 
	}
 
}
 

	
 
static void AILoadConfig(IniFile *ini, const char *grpname)
 
{
 
	IniGroup *group = ini->GetGroup(grpname);
 
	IniItem *item;
 

	
 
	/* Clean any configured AI */
 
	for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
 
		AIConfig::GetConfig(c, true)->ChangeAI(NULL);
 
	}
 

	
 
	/* If no group exists, return */
 
	if (group == NULL) return;
 

	
 
	CompanyID c = COMPANY_FIRST;
 
	for (item = group->item; c < MAX_COMPANIES && item != NULL; c++, item = item->next) {
 
		AIConfig *config = AIConfig::GetConfig(c, true);
 

	
 
		config->ChangeAI(item->name);
 
		if (!config->HasAI()) {
 
			if (strcmp(item->name, "none") != 0) DEBUG(ai, 0, "The AI by the name '%s' was no longer found, and removed from the list.", item->name);
 
			continue;
 
		}
 
		config->StringToSettings(item->value);
 
	}
 
}
 

	
 
/* Load a GRF configuration from the given group name */
 
static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_static)
 
{
 
@@ -1702,6 +1717,34 @@ static void NewsDisplaySaveConfig(IniFil
 
	}
 
}
 

	
 
static void AISaveConfig(IniFile *ini, const char *grpname)
 
{
 
	IniGroup *group = ini->GetGroup(grpname);
 
	IniItem **item;
 

	
 
	if (group == NULL) return;
 
	group->item = NULL;
 
	item = &group->item;
 

	
 
	for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
 
		AIConfig *config = AIConfig::GetConfig(c, true);
 
		const char *name;
 
		char value[1024];
 

	
 
		if (config->HasAI()) {
 
			config->SettingsToString(value, lengthof(value));
 
			name = config->GetName();
 
		} else {
 
			value[0] = '\0';
 
			name = "none";
 
		}
 

	
 
		*item = new IniItem(group, name);
 
		(*item)->value = strdup(value);
 
		item = &(*item)->next;
 
	}
 
}
 

	
 
/**
 
 * Save the version of OpenTTD to the ini file.
 
 * @param ini the ini to write to
 
@@ -1777,6 +1820,7 @@ void LoadFromConfig()
 
	_grfconfig_newgame = GRFLoadConfig(ini, "newgrf", false);
 
	_grfconfig_static  = GRFLoadConfig(ini, "newgrf-static", true);
 
	NewsDisplayLoadConfig(ini, "news_display");
 
	AILoadConfig(ini, "ai_players");
 
	CheckDifficultyLevels();
 
	delete ini;
 
}
 
@@ -1795,6 +1839,7 @@ void SaveToConfig()
 
	GRFSaveConfig(ini, "newgrf", _grfconfig_newgame);
 
	GRFSaveConfig(ini, "newgrf-static", _grfconfig_static);
 
	NewsDisplaySaveConfig(ini, "news_display");
 
	AISaveConfig(ini, "ai_players");
 
	SaveVersionInConfig(ini);
 
	ini->SaveToDisk(_config_file);
 
	delete ini;