/* 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, AIConfig::SSS_FORCE_GAME); AIInfo *info = config->GetInfo(); if (info == NULL || (rerandomise_ai && config->IsRandom())) { info = AI::scanner_info->SelectRandomAI(); assert(info != NULL); /* Load default data and store the name in the settings */ config->Change(info->GetName(), -1, false, true); } Backup<CompanyByte> cur_company(_current_company, company, FILE_LINE); Company *c = Company::Get(company); c->ai_info = info; assert(c->ai_instance == NULL); c->ai_instance = new AIInstance(); c->ai_instance->Initialize(info); cur_company.Restore(); 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->HasScript()) { strecpy(_ai_saveload_name, config->GetName(), lastof(_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->IsRandom(); _ai_saveload_settings[0] = '\0'; config->SettingsToString(_ai_saveload_settings, lastof(_ai_saveload_settings)); SlObject(NULL, _ai_company); /* If the AI was active, store his data too */ if (Company::IsValidAiID(index)) AI::Save(index); }