OpenTTD Source
20240919-master-gdf0233f4c2
|
Go to the documentation of this file.
10 #ifndef SCRIPT_INSTANCE_HPP
11 #define SCRIPT_INSTANCE_HPP
16 #include "script_log_types.hpp"
18 #include "../command_type.h"
19 #include "../company_type.h"
20 #include "../fileio_type.h"
39 friend class ScriptObject;
40 friend class ScriptController;
42 typedef std::variant<SQInteger, std::string, SQBool, SQSaveLoadType> ScriptDataVariant;
43 typedef std::list<ScriptDataVariant> ScriptData;
57 void Initialize(
const std::string &main_script,
const std::string &instance_name,
CompanyID company);
64 virtual int GetSetting(
const std::string &name) = 0;
176 static ScriptData *
Load(
int version);
240 size_t GetAllocatedMemory()
const;
315 static bool SaveObject(HSQUIRRELVM vm, SQInteger index,
int max_depth,
bool test);
323 static bool LoadObjects(HSQUIRRELVM vm, ScriptData *data);
@ SQSL_ARRAY_TABLE_END
Marks the end of an array or table, no data follows.
virtual void LoadDummyScript()=0
Load the dummy script.
static bool SaveObject(HSQUIRRELVM vm, SQInteger index, int max_depth, bool test)
Save one object (int / string / array / table) to the savegame.
class Squirrel * engine
A wrapper around the squirrel vm.
size_t last_allocated_memory
Last known allocated memory value (for display for crashed scripts)
The storage for each script.
bool CallLoad()
Call the script Load function if it exists and data was loaded from a savegame.
bool is_dead
True if the script has been stopped.
void InsertEvent(class ScriptEvent *event)
Insert an event for this script.
void GameLoop()
Run the GameLoop of a script.
class ScriptController * controller
The script main class.
void Save()
Call the script Save function and save all data in the savegame.
Runtime information about a script like a pointer to the squirrel vm and the current state.
ScriptInstance(const char *APIName)
Create a new script.
void Unpause()
Resume execution of the script.
Owner
Enum for all companies/owners.
static void DoCommandReturnStoryPageElementID(ScriptInstance *instance)
Return a StoryPageElementID reply for a DoCommand.
SQObject * instance
Squirrel-pointer to the script main class.
void() Script_SuspendCallbackProc(class ScriptInstance *instance)
The callback function when a script suspends.
@ SQSL_STRING
The following data is an string.
bool is_save_data_on_stack
Is the save data still on the squirrel stack?
bool is_paused
Is the script paused? (a paused script will not be executed until unpaused)
ScriptLogTypes::LogData & GetLogData()
Get the log pointer of this script.
static void DoCommandReturnLeagueTableElementID(ScriptInstance *instance)
Return a LeagueTableElementID reply for a DoCommand.
static void DoCommandReturnLeagueTableID(ScriptInstance *instance)
Return a LeagueTableID reply for a DoCommand.
SQInteger GetOpsTillSuspend()
Get the number of operations the script can execute before being suspended.
void Pause()
Suspends the script for the current tick and then pause the execution of script.
static void DoCommandReturnGoalID(ScriptInstance *instance)
Return a GoalID reply for a DoCommand.
void ReleaseSQObject(HSQOBJECT *obj)
Decrease the ref count of a squirrel object.
class ScriptStorage * storage
Some global information for each running script.
int version
Version of the script.
bool IsAlive() const
Return whether the script is alive.
static void DoCommandReturnSignID(ScriptInstance *instance)
Return a SignID reply for a DoCommand.
Common return value for all commands.
bool in_shutdown
Is this instance currently being destructed?
bool InShutdown() const
Indicate whether this instance is currently being destroyed.
static void DoCommandReturn(ScriptInstance *instance)
Return a true/false reply for a DoCommand.
static void SaveEmpty()
Don't save any data in the savegame.
static bool LoadObjects(ScriptData *data)
Load all objects from a savegame.
static ScriptData * Load(int version)
Load data from a savegame.
bool IsDead() const
Return the "this script died" value.
void CommandCallbackData(Commands cmd, const CommandCost &result, const CommandDataBuffer &data, CommandDataBuffer result_data)
Define a callback function for the client, after the command is finished.
std::vector< uint8_t > CommandDataBuffer
Storage buffer for serialized command data.
@ SQSL_TABLE
The following data is an table.
bool is_started
Is the scripts constructor executed?
static void DoCommandReturnStoryPageID(ScriptInstance *instance)
Return a StoryPageID reply for a DoCommand.
virtual void RegisterAPI()
Register all API functions to the VM.
static void LoadEmpty()
Load and discard data from a savegame.
static void DoCommandReturnGroupID(ScriptInstance *instance)
Return a GroupID reply for a DoCommand.
bool IsSleeping()
Check if the instance is sleeping, which either happened because the script executed a DoCommand,...
virtual class ScriptInfo * FindLibrary(const std::string &library, int version)=0
Find a library.
std::string versionAPI
Current API used by this script.
bool LoadCompatibilityScripts(const std::string &api_version, Subdirectory dir)
Load squirrel scripts to emulate an older API.
Script_SuspendCallbackProc * callback
Callback that should be called in the next tick the script runs.
@ SQSL_ARRAY
The following data is an array.
bool DoCommandCallback(const CommandCost &result, const CommandDataBuffer &data, CommandDataBuffer result_data, Commands cmd)
DoCommand callback function for all commands executed by scripts.
@ SQSL_NULL
A null variable.
@ SQSL_BOOL
The following data is a boolean.
virtual int GetSetting(const std::string &name)=0
Get the value of a setting of the current instance.
void Initialize(const std::string &main_script, const std::string &instance_name, CompanyID company)
Initialize the script and prepare it for its first run.
static void DoCommandReturnVehicleID(ScriptInstance *instance)
Return a VehicleID reply for a DoCommand.
class ScriptStorage * GetStorage()
Get the storage of this script.
class ScriptController * GetController()
Get the controller attached to the instance.
void LoadOnStack(ScriptData *data)
Store loaded data on the stack.
Subdirectory
The different kinds of subdirectories OpenTTD uses.
SQSaveLoadType
The type of the data that follows in the savegame.
virtual void Died()
Tell the script it died.
int suspend
The amount of ticks to suspend this script before it's allowed to continue.
void Continue()
A script in multiplayer waits for the server to handle its DoCommand.
@ SQSL_INT
The following data is an integer.
bool IsPaused()
Checks if the script is paused.
void CollectGarbage()
Let the VM collect any garbage.
Commands
List of commands.
All static information from an Script like name, version, etc.
static const uint SQUIRREL_MAX_DEPTH
The maximum recursive depth for items stored in the savegame.
virtual CommandCallbackData * GetDoCommandCallback()=0
Get the callback handling DoCommands in case of networking.