mirror of https://github.com/OpenTTD/OpenTTD
Codechange: use std::string for script config
parent
bbcb55ebc9
commit
ab51175db2
|
@ -70,7 +70,7 @@ void AIInstance::Died()
|
|||
if (info != nullptr) {
|
||||
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
|
||||
|
||||
if (info->GetURL() != nullptr) {
|
||||
if (!info->GetURL().empty()) {
|
||||
ScriptLog::Info("Please report the error to the following URL:");
|
||||
ScriptLog::Info(info->GetURL());
|
||||
}
|
||||
|
|
|
@ -200,12 +200,12 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
|
|||
if (c->ai_info == nullptr) {
|
||||
buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index);
|
||||
} else {
|
||||
buffer += seprintf(buffer, last, " %2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName(), c->ai_info->GetVersion());
|
||||
buffer += seprintf(buffer, last, " %2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName().c_str(), c->ai_info->GetVersion());
|
||||
}
|
||||
}
|
||||
|
||||
if (Game::GetInfo() != nullptr) {
|
||||
buffer += seprintf(buffer, last, " GS: %s (v%d)\n", Game::GetInfo()->GetName(), Game::GetInfo()->GetVersion());
|
||||
buffer += seprintf(buffer, last, " GS: %s (v%d)\n", Game::GetInfo()->GetName().c_str(), Game::GetInfo()->GetVersion());
|
||||
}
|
||||
buffer += seprintf(buffer, last, "\n");
|
||||
|
||||
|
|
|
@ -368,7 +368,7 @@ static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = {
|
|||
static const char * GetAIName(int ai_index)
|
||||
{
|
||||
if (!Company::IsValidAiID(ai_index)) return "";
|
||||
return Company::Get(ai_index)->ai_info->GetName();
|
||||
return Company::Get(ai_index)->ai_info->GetName().c_str();
|
||||
}
|
||||
|
||||
/** @hideinitializer */
|
||||
|
|
|
@ -73,7 +73,7 @@ void GameInstance::Died()
|
|||
if (info != nullptr) {
|
||||
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
|
||||
|
||||
if (info->GetURL() != nullptr) {
|
||||
if (!info->GetURL().empty()) {
|
||||
ScriptLog::Info("Please report the error to the following URL:");
|
||||
ScriptLog::Info(info->GetURL());
|
||||
}
|
||||
|
|
|
@ -153,7 +153,7 @@ struct ScriptListWindow : public Window {
|
|||
SetDParam(0, selected_info->GetVersion());
|
||||
DrawString(tr, STR_AI_LIST_VERSION);
|
||||
tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal;
|
||||
if (selected_info->GetURL() != nullptr) {
|
||||
if (!selected_info->GetURL().empty()) {
|
||||
SetDParamStr(0, selected_info->GetURL());
|
||||
DrawString(tr, STR_AI_LIST_URL);
|
||||
tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal;
|
||||
|
|
|
@ -20,13 +20,6 @@
|
|||
|
||||
ScriptInfo::~ScriptInfo()
|
||||
{
|
||||
free(this->author);
|
||||
free(this->name);
|
||||
free(this->short_name);
|
||||
free(this->description);
|
||||
free(this->date);
|
||||
free(this->instance_name);
|
||||
free(this->url);
|
||||
free(this->SQ_instance);
|
||||
}
|
||||
|
||||
|
@ -69,17 +62,17 @@ bool ScriptInfo::CheckMethod(const char *name) const
|
|||
info->tar_file = info->scanner->GetTarFile();
|
||||
|
||||
/* Cache the data the info file gives us. */
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetName", &info->name, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetShortName", &info->short_name, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetDescription", &info->description, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetDate", &info->date, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetName", &info->name, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetShortName", &info->short_name, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetDescription", &info->description, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetDate", &info->date, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallIntegerMethod(*info->SQ_instance, "GetVersion", &info->version, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "CreateInstance", &info->instance_name, MAX_CREATEINSTANCE_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "CreateInstance", &info->instance_name, MAX_CREATEINSTANCE_OPS)) return SQ_ERROR;
|
||||
|
||||
/* The GetURL function is optional. */
|
||||
if (info->engine->MethodExists(*info->SQ_instance, "GetURL")) {
|
||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetURL", &info->url, MAX_GET_OPS)) return SQ_ERROR;
|
||||
if (!info->engine->CallStringMethod(*info->SQ_instance, "GetURL", &info->url, MAX_GET_OPS)) return SQ_ERROR;
|
||||
}
|
||||
|
||||
/* Check if we have settings */
|
||||
|
|
|
@ -32,14 +32,7 @@ public:
|
|||
ScriptInfo() :
|
||||
engine(nullptr),
|
||||
SQ_instance(nullptr),
|
||||
author(nullptr),
|
||||
name(nullptr),
|
||||
short_name(nullptr),
|
||||
description(nullptr),
|
||||
date(nullptr),
|
||||
instance_name(nullptr),
|
||||
version(0),
|
||||
url(nullptr),
|
||||
scanner(nullptr)
|
||||
{}
|
||||
~ScriptInfo();
|
||||
|
@ -47,22 +40,22 @@ public:
|
|||
/**
|
||||
* Get the Author of the script.
|
||||
*/
|
||||
const char *GetAuthor() const { return this->author; }
|
||||
const std::string &GetAuthor() const { return this->author; }
|
||||
|
||||
/**
|
||||
* Get the Name of the script.
|
||||
*/
|
||||
const char *GetName() const { return this->name; }
|
||||
const std::string &GetName() const { return this->name; }
|
||||
|
||||
/**
|
||||
* Get the 4 character long short name of the script.
|
||||
*/
|
||||
const char *GetShortName() const { return this->short_name; }
|
||||
const std::string &GetShortName() const { return this->short_name; }
|
||||
|
||||
/**
|
||||
* Get the description of the script.
|
||||
*/
|
||||
const char *GetDescription() const { return this->description; }
|
||||
const std::string &GetDescription() const { return this->description; }
|
||||
|
||||
/**
|
||||
* Get the version of the script.
|
||||
|
@ -72,27 +65,27 @@ public:
|
|||
/**
|
||||
* Get the last-modified date of the script.
|
||||
*/
|
||||
const char *GetDate() const { return this->date; }
|
||||
const std::string &GetDate() const { return this->date; }
|
||||
|
||||
/**
|
||||
* Get the name of the instance of the script to create.
|
||||
*/
|
||||
const char *GetInstanceName() const { return this->instance_name; }
|
||||
const std::string &GetInstanceName() const { return this->instance_name; }
|
||||
|
||||
/**
|
||||
* Get the website for this script.
|
||||
*/
|
||||
const char *GetURL() const { return this->url; }
|
||||
const std::string &GetURL() const { return this->url; }
|
||||
|
||||
/**
|
||||
* Get the filename of the main.nut script.
|
||||
*/
|
||||
const char *GetMainScript() const { return this->main_script.c_str(); }
|
||||
const std::string &GetMainScript() const { return this->main_script; }
|
||||
|
||||
/**
|
||||
* Get the filename of the tar the script is in.
|
||||
*/
|
||||
std::string GetTarFile() const { return this->tar_file; }
|
||||
const std::string &GetTarFile() const { return this->tar_file; }
|
||||
|
||||
/**
|
||||
* Check if a given method exists.
|
||||
|
@ -152,14 +145,14 @@ protected:
|
|||
private:
|
||||
std::string main_script; ///< The full path of the script.
|
||||
std::string tar_file; ///< If, which tar file the script was in.
|
||||
const char *author; ///< Author of the script.
|
||||
const char *name; ///< Full name of the script.
|
||||
const char *short_name; ///< Short name (4 chars) which uniquely identifies the script.
|
||||
const char *description; ///< Small description of the script.
|
||||
const char *date; ///< The date the script was written at.
|
||||
const char *instance_name; ///< Name of the main class in the script.
|
||||
std::string author; ///< Author of the script.
|
||||
std::string name; ///< Full name of the script.
|
||||
std::string short_name; ///< Short name (4 chars) which uniquely identifies the script.
|
||||
std::string description; ///< Small description of the script.
|
||||
std::string date; ///< The date the script was written at.
|
||||
std::string instance_name; ///< Name of the main class in the script.
|
||||
int version; ///< Version of the script.
|
||||
const char *url; ///< URL of the script.
|
||||
std::string url; ///< URL of the script.
|
||||
|
||||
class ScriptScanner *scanner; ///< ScriptScanner object that was used to scan this script info.
|
||||
};
|
||||
|
|
|
@ -67,7 +67,7 @@ ScriptInstance::ScriptInstance(const char *APIName) :
|
|||
this->engine->SetPrintFunction(&PrintFunc);
|
||||
}
|
||||
|
||||
void ScriptInstance::Initialize(const char *main_script, const char *instance_name, CompanyID company)
|
||||
void ScriptInstance::Initialize(const std::string &main_script, const std::string &instance_name, CompanyID company)
|
||||
{
|
||||
ScriptObject::ActiveInstance active(this);
|
||||
|
||||
|
@ -80,7 +80,7 @@ void ScriptInstance::Initialize(const char *main_script, const char *instance_na
|
|||
try {
|
||||
ScriptObject::SetAllowDoCommand(false);
|
||||
/* Load and execute the script for this script */
|
||||
if (strcmp(main_script, "%_dummy") == 0) {
|
||||
if (main_script == "%_dummy") {
|
||||
this->LoadDummyScript();
|
||||
} else if (!this->engine->LoadScript(main_script) || this->engine->IsSuspended()) {
|
||||
if (this->engine->IsSuspended()) ScriptLog::Error("This script took too long to load script. AI is not started.");
|
||||
|
|
|
@ -55,7 +55,7 @@ public:
|
|||
* @param instance_name The name of the instance out of the script to load.
|
||||
* @param company Which company this script is serving.
|
||||
*/
|
||||
void Initialize(const char *main_script, const char *instance_name, CompanyID company);
|
||||
void Initialize(const std::string &main_script, const std::string &instance_name, CompanyID company);
|
||||
|
||||
/**
|
||||
* Get the value of a setting of the current instance.
|
||||
|
|
|
@ -97,8 +97,8 @@ void ScriptScanner::RegisterScript(ScriptInfo *info)
|
|||
std::string script_name = fmt::format("{}.{}", script_original_name, info->GetVersion());
|
||||
|
||||
/* Check if GetShortName follows the rules */
|
||||
if (strlen(info->GetShortName()) != 4) {
|
||||
Debug(script, 0, "The script '{}' returned a string from GetShortName() which is not four characaters. Unable to load the script.", info->GetName());
|
||||
if (info->GetShortName().size() != 4) {
|
||||
Debug(script, 0, "The script '{}' returned a string from GetShortName() which is not four characters. Unable to load the script.", info->GetName());
|
||||
delete info;
|
||||
return;
|
||||
}
|
||||
|
@ -107,9 +107,9 @@ void ScriptScanner::RegisterScript(ScriptInfo *info)
|
|||
/* This script was already registered */
|
||||
#ifdef _WIN32
|
||||
/* Windows doesn't care about the case */
|
||||
if (StrEqualsIgnoreCase(this->info_list[script_name]->GetMainScript(), info->GetMainScript()) == 0) {
|
||||
if (StrEqualsIgnoreCase(this->info_list[script_name]->GetMainScript(), info->GetMainScript())) {
|
||||
#else
|
||||
if (strcmp(this->info_list[script_name]->GetMainScript(), info->GetMainScript()) == 0) {
|
||||
if (this->info_list[script_name]->GetMainScript() == info->GetMainScript()) {
|
||||
#endif
|
||||
delete info;
|
||||
return;
|
||||
|
@ -206,7 +206,7 @@ struct ScriptFileChecksumCreator : FileScanner {
|
|||
static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, Subdirectory dir)
|
||||
{
|
||||
uint32 id = 0;
|
||||
const char *str = info->GetShortName();
|
||||
const char *str = info->GetShortName().c_str();
|
||||
for (int j = 0; j < 4 && *str != '\0'; j++, str++) id |= *str << (8 * j);
|
||||
|
||||
if (id != ci->unique_id) return false;
|
||||
|
@ -251,7 +251,7 @@ bool ScriptScanner::HasScript(const ContentInfo *ci, bool md5sum)
|
|||
const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum)
|
||||
{
|
||||
for (const auto &item : this->info_list) {
|
||||
if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript();
|
||||
if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript().c_str();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -469,7 +469,7 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
|
|||
return true;
|
||||
}
|
||||
|
||||
/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name)
|
||||
/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const std::string &class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name)
|
||||
{
|
||||
Squirrel *engine = (Squirrel *)sq_getforeignptr(vm);
|
||||
|
||||
|
@ -479,12 +479,9 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
|
|||
sq_pushroottable(vm);
|
||||
|
||||
if (prepend_API_name) {
|
||||
size_t len = strlen(class_name) + strlen(engine->GetAPIName()) + 1;
|
||||
char *class_name2 = MallocT<char>(len);
|
||||
seprintf(class_name2, class_name2 + len - 1, "%s%s", engine->GetAPIName(), class_name);
|
||||
|
||||
sq_pushstring(vm, class_name2, -1);
|
||||
free(class_name2);
|
||||
std::string prepended_class_name = engine->GetAPIName();
|
||||
prepended_class_name += class_name;
|
||||
sq_pushstring(vm, prepended_class_name, -1);
|
||||
} else {
|
||||
sq_pushstring(vm, class_name, -1);
|
||||
}
|
||||
|
@ -520,7 +517,7 @@ bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Squirrel::CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance)
|
||||
bool Squirrel::CreateClassInstance(const std::string &class_name, void *real_instance, HSQOBJECT *instance)
|
||||
{
|
||||
ScriptAllocatorScope alloc_scope(this);
|
||||
return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance, nullptr);
|
||||
|
|
|
@ -179,12 +179,12 @@ public:
|
|||
* @param prepend_API_name Optional parameter; if true, the class_name is prefixed with the current API name.
|
||||
* @return False if creating failed.
|
||||
*/
|
||||
static bool CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name = false);
|
||||
static bool CreateClassInstanceVM(HSQUIRRELVM vm, const std::string &class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name = false);
|
||||
|
||||
/**
|
||||
* Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel.
|
||||
*/
|
||||
bool CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance);
|
||||
bool CreateClassInstance(const std::string &class_name, void *real_instance, HSQOBJECT *instance);
|
||||
|
||||
/**
|
||||
* Get the real-instance pointer.
|
||||
|
|
Loading…
Reference in New Issue