12 #include "../stdafx.h" 16 #include "../script/squirrel_class.hpp" 22 #include "../script/script_storage.hpp" 27 #include "../script/api/template/template_text.hpp.sq" 31 #include "../script/api/ai/ai_accounting.hpp.sq" 32 #include "../script/api/ai/ai_airport.hpp.sq" 33 #include "../script/api/ai/ai_base.hpp.sq" 34 #include "../script/api/ai/ai_basestation.hpp.sq" 35 #include "../script/api/ai/ai_bridge.hpp.sq" 36 #include "../script/api/ai/ai_bridgelist.hpp.sq" 37 #include "../script/api/ai/ai_cargo.hpp.sq" 38 #include "../script/api/ai/ai_cargolist.hpp.sq" 39 #include "../script/api/ai/ai_company.hpp.sq" 40 #include "../script/api/ai/ai_controller.hpp.sq" 41 #include "../script/api/ai/ai_date.hpp.sq" 42 #include "../script/api/ai/ai_depotlist.hpp.sq" 43 #include "../script/api/ai/ai_engine.hpp.sq" 44 #include "../script/api/ai/ai_enginelist.hpp.sq" 45 #include "../script/api/ai/ai_error.hpp.sq" 46 #include "../script/api/ai/ai_event.hpp.sq" 47 #include "../script/api/ai/ai_event_types.hpp.sq" 48 #include "../script/api/ai/ai_execmode.hpp.sq" 49 #include "../script/api/ai/ai_gamesettings.hpp.sq" 50 #include "../script/api/ai/ai_group.hpp.sq" 51 #include "../script/api/ai/ai_grouplist.hpp.sq" 52 #include "../script/api/ai/ai_industry.hpp.sq" 53 #include "../script/api/ai/ai_industrylist.hpp.sq" 54 #include "../script/api/ai/ai_industrytype.hpp.sq" 55 #include "../script/api/ai/ai_industrytypelist.hpp.sq" 56 #include "../script/api/ai/ai_infrastructure.hpp.sq" 57 #include "../script/api/ai/ai_list.hpp.sq" 58 #include "../script/api/ai/ai_log.hpp.sq" 59 #include "../script/api/ai/ai_map.hpp.sq" 60 #include "../script/api/ai/ai_marine.hpp.sq" 61 #include "../script/api/ai/ai_order.hpp.sq" 62 #include "../script/api/ai/ai_rail.hpp.sq" 63 #include "../script/api/ai/ai_railtypelist.hpp.sq" 64 #include "../script/api/ai/ai_road.hpp.sq" 65 #include "../script/api/ai/ai_roadtypelist.hpp.sq" 66 #include "../script/api/ai/ai_sign.hpp.sq" 67 #include "../script/api/ai/ai_signlist.hpp.sq" 68 #include "../script/api/ai/ai_station.hpp.sq" 69 #include "../script/api/ai/ai_stationlist.hpp.sq" 70 #include "../script/api/ai/ai_subsidy.hpp.sq" 71 #include "../script/api/ai/ai_subsidylist.hpp.sq" 72 #include "../script/api/ai/ai_testmode.hpp.sq" 73 #include "../script/api/ai/ai_tile.hpp.sq" 74 #include "../script/api/ai/ai_tilelist.hpp.sq" 75 #include "../script/api/ai/ai_town.hpp.sq" 76 #include "../script/api/ai/ai_townlist.hpp.sq" 77 #include "../script/api/ai/ai_tunnel.hpp.sq" 78 #include "../script/api/ai/ai_vehicle.hpp.sq" 79 #include "../script/api/ai/ai_vehiclelist.hpp.sq" 80 #include "../script/api/ai/ai_waypoint.hpp.sq" 81 #include "../script/api/ai/ai_waypointlist.hpp.sq" 83 #include "../company_base.h" 84 #include "../company_func.h" 86 #include "../safeguards.h" 88 AIInstance::AIInstance() :
97 SQAIController_Register(this->
engine);
107 SQAIList_Register(this->
engine);
108 SQAIAccounting_Register(this->
engine);
109 SQAIAirport_Register(this->
engine);
110 SQAIBase_Register(this->
engine);
111 SQAIBaseStation_Register(this->
engine);
112 SQAIBridge_Register(this->
engine);
113 SQAIBridgeList_Register(this->
engine);
114 SQAIBridgeList_Length_Register(this->
engine);
115 SQAICargo_Register(this->
engine);
116 SQAICargoList_Register(this->
engine);
117 SQAICargoList_IndustryAccepting_Register(this->
engine);
118 SQAICargoList_IndustryProducing_Register(this->
engine);
119 SQAICargoList_StationAccepting_Register(this->
engine);
120 SQAICompany_Register(this->
engine);
121 SQAIDate_Register(this->
engine);
122 SQAIDepotList_Register(this->
engine);
123 SQAIEngine_Register(this->
engine);
124 SQAIEngineList_Register(this->
engine);
125 SQAIError_Register(this->
engine);
126 SQAIEvent_Register(this->
engine);
127 SQAIEventAircraftDestTooFar_Register(this->
engine);
128 SQAIEventCompanyAskMerger_Register(this->
engine);
129 SQAIEventCompanyBankrupt_Register(this->
engine);
130 SQAIEventCompanyInTrouble_Register(this->
engine);
131 SQAIEventCompanyMerger_Register(this->
engine);
132 SQAIEventCompanyNew_Register(this->
engine);
133 SQAIEventCompanyTown_Register(this->
engine);
134 SQAIEventController_Register(this->
engine);
135 SQAIEventDisasterZeppelinerCleared_Register(this->
engine);
136 SQAIEventDisasterZeppelinerCrashed_Register(this->
engine);
137 SQAIEventEngineAvailable_Register(this->
engine);
138 SQAIEventEnginePreview_Register(this->
engine);
139 SQAIEventExclusiveTransportRights_Register(this->
engine);
140 SQAIEventIndustryClose_Register(this->
engine);
141 SQAIEventIndustryOpen_Register(this->
engine);
142 SQAIEventRoadReconstruction_Register(this->
engine);
143 SQAIEventStationFirstVehicle_Register(this->
engine);
144 SQAIEventSubsidyAwarded_Register(this->
engine);
145 SQAIEventSubsidyExpired_Register(this->
engine);
146 SQAIEventSubsidyOffer_Register(this->
engine);
147 SQAIEventSubsidyOfferExpired_Register(this->
engine);
148 SQAIEventTownFounded_Register(this->
engine);
149 SQAIEventVehicleAutoReplaced_Register(this->
engine);
150 SQAIEventVehicleCrashed_Register(this->
engine);
151 SQAIEventVehicleLost_Register(this->
engine);
152 SQAIEventVehicleUnprofitable_Register(this->
engine);
153 SQAIEventVehicleWaitingInDepot_Register(this->
engine);
154 SQAIExecMode_Register(this->
engine);
155 SQAIGameSettings_Register(this->
engine);
156 SQAIGroup_Register(this->
engine);
157 SQAIGroupList_Register(this->
engine);
158 SQAIIndustry_Register(this->
engine);
159 SQAIIndustryList_Register(this->
engine);
160 SQAIIndustryList_CargoAccepting_Register(this->
engine);
161 SQAIIndustryList_CargoProducing_Register(this->
engine);
162 SQAIIndustryType_Register(this->
engine);
163 SQAIIndustryTypeList_Register(this->
engine);
164 SQAIInfrastructure_Register(this->
engine);
165 SQAILog_Register(this->
engine);
166 SQAIMap_Register(this->
engine);
167 SQAIMarine_Register(this->
engine);
168 SQAIOrder_Register(this->
engine);
169 SQAIRail_Register(this->
engine);
170 SQAIRailTypeList_Register(this->
engine);
171 SQAIRoad_Register(this->
engine);
172 SQAIRoadTypeList_Register(this->
engine);
173 SQAISign_Register(this->
engine);
174 SQAISignList_Register(this->
engine);
175 SQAIStation_Register(this->
engine);
176 SQAIStationList_Register(this->
engine);
177 SQAIStationList_Cargo_Register(this->
engine);
178 SQAIStationList_CargoPlanned_Register(this->
engine);
179 SQAIStationList_CargoPlannedByFrom_Register(this->
engine);
180 SQAIStationList_CargoPlannedByVia_Register(this->
engine);
181 SQAIStationList_CargoPlannedFromByVia_Register(this->
engine);
182 SQAIStationList_CargoPlannedViaByFrom_Register(this->
engine);
183 SQAIStationList_CargoWaiting_Register(this->
engine);
184 SQAIStationList_CargoWaitingByFrom_Register(this->
engine);
185 SQAIStationList_CargoWaitingByVia_Register(this->
engine);
186 SQAIStationList_CargoWaitingFromByVia_Register(this->
engine);
187 SQAIStationList_CargoWaitingViaByFrom_Register(this->
engine);
188 SQAIStationList_Vehicle_Register(this->
engine);
189 SQAISubsidy_Register(this->
engine);
190 SQAISubsidyList_Register(this->
engine);
191 SQAITestMode_Register(this->
engine);
192 SQAITile_Register(this->
engine);
193 SQAITileList_Register(this->
engine);
194 SQAITileList_IndustryAccepting_Register(this->
engine);
195 SQAITileList_IndustryProducing_Register(this->
engine);
196 SQAITileList_StationType_Register(this->
engine);
197 SQAITown_Register(this->
engine);
198 SQAITownEffectList_Register(this->
engine);
199 SQAITownList_Register(this->
engine);
200 SQAITunnel_Register(this->
engine);
201 SQAIVehicle_Register(this->
engine);
202 SQAIVehicleList_Register(this->
engine);
203 SQAIVehicleList_DefaultGroup_Register(this->
engine);
204 SQAIVehicleList_Depot_Register(this->
engine);
205 SQAIVehicleList_Group_Register(this->
engine);
206 SQAIVehicleList_SharedOrders_Register(this->
engine);
207 SQAIVehicleList_Station_Register(this->
engine);
208 SQAIWaypoint_Register(this->
engine);
209 SQAIWaypointList_Register(this->
engine);
210 SQAIWaypointList_Vehicle_Register(this->
engine);
212 if (!this->LoadCompatibilityScripts(this->versionAPI,
AI_DIR)) this->Died();
222 if (info !=
nullptr) {
225 if (info->
GetURL() !=
nullptr) {
226 ScriptLog::Info(
"Please report the error to the following URL:");
227 ScriptLog::Info(info->
GetURL());
266 if (c ==
nullptr || c->ai_instance ==
nullptr)
return;
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
int version
Version of the script.
Window for configuring the AIs
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x=0, int y=0, const GRFFile *textref_stack_grffile=nullptr, uint textref_stack_size=0, const uint32 *textref_stack=nullptr)
Display an error message in a window.
void Continue()
A script in multiplayer waits for the server to handle his DoCommand.
The AIInstance tracks an AI.
Common return value for all commands.
void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
DoCommand callback function for all commands executed by AIs.
const char * GetAPIVersion() const
Get the API version this AI is written for.
void Died() override
Tell the script it died.
const char * GetMainScript() const
Get the filename of the main.nut script.
void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
Define a callback function for the client, after the command is finished.
All static information from an Script like name, version, etc.
bool DoCommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
DoCommand callback function for all commands executed by scripts.
static AIConfig * GetConfig(CompanyID company, ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
void Script_CreateDummy(HSQUIRRELVM vm, StringID string, const char *type)
Run the dummy AI and let it generate an error message.
Runtime information about a script like a pointer to the squirrel vm and the current state...
void Initialize(class AIInfo *info)
Initialize the AI and prepare it for its first run.
const char * GetURL() const
Get the website for this script.
uint32 StringID
Numeric value that represents a string, independent of the selected language.
int GetSetting(const char *name) const override
Get the value of a setting for this config.
void RegisterAPI() override
Register all API functions to the VM.
Window * ShowAIDebugWindow(CompanyID show_company)
Open the AI debug window and select the given company.
HSQUIRRELVM GetVM()
Get the squirrel VM.
const char * name
Full name of the script.
void LoadDummyScript() override
Load the dummy script.
All static information from an AI like name, version, etc.
uint32 TileIndex
The index/ID of a Tile.
Subdirectory for all AI files.
static class AILibrary * FindLibrary(const char *library, int version)
Wrapper function for AIScanner::FindLibrary.
virtual void RegisterAPI()
Register all API functions to the VM.
void Initialize(const char *main_script, const char *instance_name, CompanyID company)
Initialize the script and prepare it for its first run.
CompanyID _current_company
Company currently doing an action.
class Squirrel * engine
Engine used to register for Squirrel.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
int GetSetting(const char *name) override
Get the value of a setting of the current instance.
virtual void Died()
Tell the script it died.
Base functions for all AIs.
const char * GetInstanceName() const
Get the name of the instance of the script to create.
AIConfig stores the configuration settings of every AI.
AIInfo keeps track of all information of an AI, like Author, Description, ...
Get the Script config from the current game.
CommandCallback * GetDoCommandCallback() override
Get the callback handling DoCommands in case of networking.
ScriptInfo * FindLibrary(const char *library, int version) override
Find a library.