/* static */ void AI::StartNew(CompanyID company, bool rerandomise_ai) { assert(Company::IsValidID(company)); /* Clients shouldn't start AIs */ if (_networking && !_network_server) return; AIConfig *config = AIConfig::GetConfig(company); AIInfo *info = config->GetInfo(); if (info == NULL || (rerandomise_ai && config->IsRandomAI())) { info = AI::ai_scanner->SelectRandomAI(); assert(info != NULL); /* Load default data and store the name in the settings */ config->ChangeAI(info->GetName(), -1, false, true); } _current_company = company; Company *c = Company::Get(company); c->ai_info = info; assert(c->ai_instance == NULL); c->ai_instance = new AIInstance(info); InvalidateWindowData(WC_AI_DEBUG, 0, -1); return; }
static void SaveReal_AIPL(int *index_ptr) { CompanyID index = (CompanyID)*index_ptr; AIConfig *config = AIConfig::GetConfig(index); if (config->HasAI()) { ttd_strlcpy(_ai_saveload_name, config->GetName(), lengthof(_ai_saveload_name)); _ai_saveload_version = config->GetVersion(); } else { /* No AI is configured for this so store an empty string as name. */ _ai_saveload_name[0] = '\0'; _ai_saveload_version = -1; } _ai_saveload_is_random = config->IsRandomAI(); _ai_saveload_settings[0] = '\0'; config->SettingsToString(_ai_saveload_settings, lengthof(_ai_saveload_settings)); SlObject(NULL, _ai_company); /* If the AI was active, store his data too */ if (Company::IsValidAiID(index)) AI::Save(index); }