@@ -84,14 +84,14 @@ struct AIListWindow : public Window {
/* Try if we can find the currently selected AI */
this->selected = -1;
if (GetConfig(slot)->HasScript()) {
ScriptInfo *info = GetConfig(slot)->GetInfo();
int i = 0;
for (ScriptInfoList::const_iterator it = this->info_list->begin(); it != this->info_list->end(); it++, i++) {
if ((*it).second == info) {
for (const auto &item : *this->info_list) {
if (item.second == info) {
this->selected = i;
break;
}
@@ -124,26 +124,28 @@ struct AIListWindow : public Window {
int y = this->GetWidget<NWidgetBase>(WID_AIL_LIST)->pos_y;
/* First AI in the list is hardcoded to random */
if (this->vscroll->IsVisible(0)) {
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE);
y += this->line_height;
ScriptInfoList::const_iterator it = this->info_list->begin();
for (int i = 1; it != this->info_list->end(); i++, it++) {
int i = 1;
i++;
if (this->vscroll->IsVisible(i)) {
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
case WID_AIL_INFO_BG: {
AIInfo *selected_info = nullptr;
for (int i = 1; selected_info == nullptr && it != this->info_list->end(); i++, it++) {
if (this->selected == i - 1) selected_info = static_cast<AIInfo *>((*it).second);
if (this->selected == i - 1) selected_info = static_cast<AIInfo *>(item.second);
/* Some info about the currently selected AI. */
if (selected_info != nullptr) {
int y = r.top + WD_FRAMERECT_TOP;
SetDParamStr(0, selected_info->GetAuthor());
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, STR_AI_LIST_AUTHOR);
@@ -331,17 +333,16 @@ struct AISettingsWindow : public Window
* gui.ai_developer_tools is enabled.
*/
void RebuildVisibleSettings()
{
visible_settings.clear();
ScriptConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
for (; it != this->ai_config->GetConfigList()->end(); it++) {
bool no_hide = (it->flags & SCRIPTCONFIG_DEVELOPER) == 0;
for (const auto &item : *this->ai_config->GetConfigList()) {
bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0;
if (no_hide || _settings_client.gui.ai_developer_tools) {
visible_settings.push_back(&(*it));
visible_settings.push_back(&item);
this->vscroll->SetCount((int)this->visible_settings.size());
@@ -58,14 +58,14 @@ void AIScannerInfo::RegisterAPI(class Sq
AIInfo::RegisterAPI(engine);
AIInfo *AIScannerInfo::SelectRandomAI() const
uint num_random_ais = 0;
for (ScriptInfoList::const_iterator it = this->info_single_list.begin(); it != this->info_single_list.end(); it++) {
AIInfo *i = static_cast<AIInfo *>((*it).second);
for (const auto &item : info_single_list) {
AIInfo *i = static_cast<AIInfo *>(item.second);
if (i->UseAsRandomAI()) num_random_ais++;
if (num_random_ais == 0) {
DEBUG(script, 0, "No suitable AI found, loading 'dummy' AI.");
return this->info_dummy;
@@ -118,17 +118,16 @@ AIInfo *AIScannerInfo::FindInfo(const ch
AIInfo *info = nullptr;
int version = -1;
/* See if there is a compatible AI which goes by that name, with the highest
* version which allows loading the requested version */
ScriptInfoList::iterator it = this->info_list.begin();
for (; it != this->info_list.end(); it++) {
for (const auto &item : this->info_list) {
if (strcasecmp(ai_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) {
version = (*it).second->GetVersion();
version = item.second->GetVersion();
info = i;
return info;
@@ -155,11 +154,11 @@ AILibrary *AIScannerLibrary::FindLibrary
/* Internally we store libraries as 'library.version' */
char library_name[1024];
seprintf(library_name, lastof(library_name), "%s.%d", library, version);
strtolower(library_name);
/* Check if the library + version exists */
ScriptInfoList::iterator iter = this->info_list.find(library_name);
if (iter == this->info_list.end()) return nullptr;
ScriptInfoList::iterator it = this->info_list.find(library_name);
if (it == this->info_list.end()) return nullptr;
return static_cast<AILibrary *>((*iter).second);
return static_cast<AILibrary *>((*it).second);
@@ -57,17 +57,16 @@ GameInfo *GameScannerInfo::FindInfo(cons
GameInfo *info = nullptr;
/* See if there is a compatible Game script which goes by that name, with the highest
GameInfo *i = static_cast<GameInfo *>((*it).second);
GameInfo *i = static_cast<GameInfo *>(item.second);
if (strcasecmp(game_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) {
@@ -94,11 +93,11 @@ GameLibrary *GameScannerLibrary::FindLib
return static_cast<GameLibrary *>((*iter).second);
return static_cast<GameLibrary *>((*it).second);
@@ -74,15 +74,15 @@ ScriptController::ScriptController(Compa
ScriptObject::SetCompany(company);
ScriptController::~ScriptController()
for (LoadedLibraryList::iterator iter = this->loaded_library.begin(); iter != this->loaded_library.end(); iter++) {
free((*iter).second);
free((*iter).first);
for (const auto &item : this->loaded_library) {
free(item.second);
free(item.first);
this->loaded_library.clear();
/* static */ uint ScriptController::GetTick()
@@ -126,15 +126,15 @@ ScriptController::~ScriptController()
/* Get the current table/class we belong to */
HSQOBJECT parent;
sq_getstackobj(vm, 1, &parent);
char fake_class[1024];
LoadedLibraryList::iterator iter = controller->loaded_library.find(library_name);
if (iter != controller->loaded_library.end()) {
strecpy(fake_class, (*iter).second, lastof(fake_class));
LoadedLibraryList::iterator it = controller->loaded_library.find(library_name);
if (it != controller->loaded_library.end()) {
strecpy(fake_class, (*it).second, lastof(fake_class));
} else {
int next_number = ++controller->loaded_library_count;
/* Create a new fake internal name */
seprintf(fake_class, lastof(fake_class), "_internalNA%d", next_number);
@@ -29,15 +29,15 @@ void ScriptConfig::Change(const char *na
this->ClearConfigList();
if (_game_mode == GM_NORMAL && this->info != nullptr) {
/* If we're in an existing game and the Script is changed, set all settings
* for the Script that have the random flag to a random value. */
for (ScriptConfigItemList::const_iterator it = this->info->GetConfigList()->begin(); it != this->info->GetConfigList()->end(); it++) {
if ((*it).flags & SCRIPTCONFIG_RANDOM) {
this->SetSetting((*it).name, InteractiveRandomRange((*it).max_value + 1 - (*it).min_value) + (*it).min_value);
for (const auto &item : *this->info->GetConfigList()) {
if (item.flags & SCRIPTCONFIG_RANDOM) {
this->SetSetting(item.name, InteractiveRandomRange(item.max_value + 1 - item.min_value) + item.min_value);
this->AddRandomDeviation();
@@ -46,14 +46,14 @@ ScriptConfig::ScriptConfig(const ScriptC
this->name = (config->name == nullptr) ? nullptr : stredup(config->name);
this->info = config->info;
this->version = config->version;
this->config_list = nullptr;
this->is_random = config->is_random;
for (SettingValueList::const_iterator it = config->settings.begin(); it != config->settings.end(); it++) {
this->settings[stredup((*it).first)] = (*it).second;
for (const auto &item : config->settings) {
this->settings[stredup(item.first)] = item.second;
ScriptConfig::~ScriptConfig()
@@ -76,30 +76,30 @@ const ScriptConfigItemList *ScriptConfig
return this->config_list;
void ScriptConfig::ClearConfigList()
for (SettingValueList::iterator it = this->settings.begin(); it != this->settings.end(); it++) {
free((*it).first);
for (const auto &item : this->settings) {
this->settings.clear();
void ScriptConfig::AnchorUnchangeableSettings()
for (ScriptConfigItemList::const_iterator it = this->GetConfigList()->begin(); it != this->GetConfigList()->end(); it++) {
if (((*it).flags & SCRIPTCONFIG_INGAME) == 0) {
this->SetSetting((*it).name, this->GetSetting((*it).name));
for (const auto &item : *this->GetConfigList()) {
if ((item.flags & SCRIPTCONFIG_INGAME) == 0) {
this->SetSetting(item.name, this->GetSetting(item.name));
int ScriptConfig::GetSetting(const char *name) const
SettingValueList::const_iterator it = this->settings.find(name);
const auto it = this->settings.find(name);
if (it == this->settings.end()) return this->info->GetSettingDefaultValue(name);
return (*it).second;
void ScriptConfig::SetSetting(const char *name, int value)
@@ -108,33 +108,33 @@ void ScriptConfig::SetSetting(const char
const ScriptConfigItem *config_item = this->info->GetConfigItem(name);
if (config_item == nullptr) return;
value = Clamp(value, config_item->min_value, config_item->max_value);
SettingValueList::iterator it = this->settings.find(name);
if (it != this->settings.end()) {
(*it).second = value;
this->settings[stredup(name)] = value;
void ScriptConfig::ResetSettings()
void ScriptConfig::AddRandomDeviation()
if ((*it).random_deviation != 0) {
this->SetSetting((*it).name, InteractiveRandomRange((*it).random_deviation * 2 + 1) - (*it).random_deviation + this->GetSetting((*it).name));
if (item.random_deviation != 0) {
this->SetSetting(item.name, InteractiveRandomRange(item.random_deviation * 2 + 1) - item.random_deviation + this->GetSetting(item.name));
bool ScriptConfig::HasScript() const
@@ -183,22 +183,22 @@ void ScriptConfig::StringToSettings(cons
void ScriptConfig::SettingsToString(char *string, const char *last) const
char *s = string;
*s = '\0';
for (SettingValueList::const_iterator it = this->settings.begin(); it != this->settings.end(); it++) {
char no[10];
seprintf(no, lastof(no), "%d", (*it).second);
seprintf(no, lastof(no), "%d", item.second);
/* Check if the string would fit in the destination */
size_t needed_size = strlen((*it).first) + 1 + strlen(no);
size_t needed_size = strlen(item.first) + 1 + strlen(no);
/* If it doesn't fit, skip the next settings */
if (string + needed_size > last) break;
s = strecat(s, (*it).first, last);
s = strecat(s, item.first, last);
s = strecat(s, "=", last);
s = strecat(s, no, last);
s = strecat(s, ",", last);
/* Remove the last ',', but only if at least one setting was saved. */
@@ -17,20 +17,20 @@
#include "../safeguards.h"
ScriptInfo::~ScriptInfo()
/* Free all allocated strings */
for (ScriptConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) {
free((*it).name);
free((*it).description);
if (it->labels != nullptr) {
for (auto &lbl_map : *(*it).labels) {
for (const auto &item : this->config_list) {
free(item.name);
free(item.description);
if (item.labels != nullptr) {
for (auto &lbl_map : *item.labels) {
free(lbl_map.second);
delete it->labels;
delete item.labels;
this->config_list.clear();
free(this->author);
free(this->name);
@@ -229,14 +229,14 @@ SQInteger ScriptInfo::AddLabels(HSQUIRRE
const SQChar *setting_name;
if (SQ_FAILED(sq_getstring(vm, -2, &setting_name))) return SQ_ERROR;
ValidateString(setting_name);
ScriptConfigItem *config = nullptr;
if (strcmp((*it).name, setting_name) == 0) config = &(*it);
for (auto &item : this->config_list) {
if (strcmp(item.name, setting_name) == 0) config = &item;
if (config == nullptr) {
char error[1024];
seprintf(error, lastof(error), "Trying to add labels for non-defined setting '%s'", setting_name);
this->engine->ThrowError(error);
@@ -281,28 +281,28 @@ const ScriptConfigItemList *ScriptInfo::
return &this->config_list;
const ScriptConfigItem *ScriptInfo::GetConfigItem(const char *name) const
for (ScriptConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) {
if (strcmp((*it).name, name) == 0) return &(*it);
if (strcmp(item.name, name) == 0) return &item;
return nullptr;
int ScriptInfo::GetSettingDefaultValue(const char *name) const
if (strcmp((*it).name, name) != 0) continue;
if (strcmp(item.name, name) != 0) continue;
/* The default value depends on the difficulty level */
switch (GetGameSettings().script.settings_profile) {
case SP_EASY: return (*it).easy_value;
case SP_MEDIUM: return (*it).medium_value;
case SP_HARD: return (*it).hard_value;
case SP_CUSTOM: return (*it).custom_value;
case SP_EASY: return item.easy_value;
case SP_MEDIUM: return item.medium_value;
case SP_HARD: return item.hard_value;
case SP_CUSTOM: return item.custom_value;
default: NOT_REACHED();
/* There is no such setting */
return -1;
@@ -100,20 +100,18 @@ void ScriptScanner::RescanDir()
/* Scan for scripts */
this->Scan(this->GetFileName(), this->GetDirectory());
void ScriptScanner::Reset()
delete (*it).second;
delete item.second;
it = this->info_single_list.begin();
for (; it != this->info_single_list.end(); it++) {
for (const auto &item : this->info_single_list) {
this->info_list.clear();
this->info_single_list.clear();
@@ -168,15 +166,14 @@ void ScriptScanner::RegisterScript(Scrip
char *ScriptScanner::GetConsoleList(char *p, const char *last, bool newest_only) const
p += seprintf(p, last, "List of %s:\n", this->GetScannerName());
const ScriptInfoList &list = newest_only ? this->info_single_list : this->info_list;
ScriptInfoList::const_iterator it = list.begin();
for (; it != list.end(); it++) {
ScriptInfo *i = (*it).second;
for (const auto &item : list) {
ScriptInfo *i = item.second;
p += seprintf(p, last, "%10s (v%d): %s\n", i->GetName(), i->GetVersion(), i->GetDescription());
p += seprintf(p, last, "\n");
return p;
@@ -270,19 +267,19 @@ static bool IsSameScript(const ContentIn
return memcmp(ci->md5sum, checksum.md5sum, sizeof(ci->md5sum)) == 0;
bool ScriptScanner::HasScript(const ContentInfo *ci, bool md5sum)
for (ScriptInfoList::iterator it = this->info_list.begin(); it != this->info_list.end(); it++) {
if (IsSameScript(ci, md5sum, (*it).second, this->GetDirectory())) return true;
if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return true;
return false;
const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum)
if (IsSameScript(ci, md5sum, (*it).second, this->GetDirectory())) return (*it).second->GetMainScript();
if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript();
Status change: