From 77b7366c2947a3f2545d5542021be1cc203a74e8 Mon Sep 17 00:00:00 2001 From: truebrain Date: Mon, 19 Dec 2011 20:59:36 +0000 Subject: [PATCH] (svn r23622) -Add: a set of events to trigger in a GameScript --- src/aircraft_cmd.cpp | 3 + src/company_cmd.cpp | 3 + src/disaster_cmd.cpp | 2 + src/economy.cpp | 3 + src/game/game.hpp | 7 + src/game/game_core.cpp | 25 +++ src/game/game_instance.cpp | 14 ++ src/industry_cmd.cpp | 5 + src/roadveh_cmd.cpp | 4 + src/script/api/game/game_event_types.hpp.sq | 219 ++++++++++++++++++++ src/script/api/script_event_types.hpp | 26 +-- src/subsidy.cpp | 5 + src/town_cmd.cpp | 2 + src/train_cmd.cpp | 3 + src/water_cmd.cpp | 2 + 15 files changed, 310 insertions(+), 13 deletions(-) create mode 100644 src/script/api/game/game_event_types.hpp.sq diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 8ed4b1544b..6581e38002 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -29,6 +29,7 @@ #include "cheat_type.h" #include "company_base.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "company_func.h" #include "effectvehicle_func.h" #include "station_base.h" @@ -1160,6 +1161,7 @@ static void CrashAirplane(Aircraft *v) } AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, st == NULL ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, st == NULL ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); AddVehicleNewsItem(newsitem, NS_ACCIDENT, @@ -1225,6 +1227,7 @@ static void AircraftEntersTerminal(Aircraft *v) st->index ); AI::NewEvent(v->owner, new ScriptEventStationFirstVehicle(st->index, v->index)); + Game::NewEvent(new ScriptEventStationFirstVehicle(st->index, v->index)); } v->BeginLoading(); diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 5cd9650389..d4627078f2 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -35,6 +35,7 @@ #include "vehicle_func.h" #include "sprite.h" #include "smallmap_gui.h" +#include "game/game.hpp" #include "table/strings.h" @@ -563,6 +564,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) if (is_ai && (!_networking || _network_server)) AI::StartNew(c->index); AI::BroadcastNewEvent(new ScriptEventCompanyNew(c->index), c->index); + Game::NewEvent(new ScriptEventCompanyNew(c->index)); return c; } @@ -905,6 +907,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 CompanyID c_index = c->index; delete c; AI::BroadcastNewEvent(new ScriptEventCompanyBankrupt(c_index)); + Game::NewEvent(new ScriptEventCompanyBankrupt(c_index)); CompanyAdminRemove(c_index, (CompanyRemoveReason)reason); break; } diff --git a/src/disaster_cmd.cpp b/src/disaster_cmd.cpp index a551d83a62..319113a0a0 100644 --- a/src/disaster_cmd.cpp +++ b/src/disaster_cmd.cpp @@ -40,6 +40,7 @@ #include "effectvehicle_func.h" #include "roadveh.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "company_base.h" #include "core/random_func.hpp" #include "core/backup_type.hpp" @@ -358,6 +359,7 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) u->index); // delete the news, when the roadvehicle is gone AI::NewEvent(u->owner, new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO)); + Game::NewEvent(new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO)); } } diff --git a/src/economy.cpp b/src/economy.cpp index 5af0d787be..74f5552b8b 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -47,6 +47,7 @@ #include "newgrf.h" #include "core/backup_type.hpp" #include "water.h" +#include "game/game.hpp" #include "table/strings.h" #include "table/pricebase.h" @@ -536,6 +537,7 @@ static void CompanyCheckBankrupt(Company *c) SetDParamStr(2, cni->company_name); AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_TROUBLE, cni); AI::BroadcastNewEvent(new ScriptEventCompanyInTrouble(c->index)); + Game::NewEvent(new ScriptEventCompanyInTrouble(c->index)); break; } @@ -1644,6 +1646,7 @@ static void DoAcquireCompany(Company *c) SetDParam(4, c->bankrupt_value); AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_MERGER, cni); AI::BroadcastNewEvent(new ScriptEventCompanyMerger(ci, _current_company)); + Game::NewEvent(new ScriptEventCompanyMerger(ci, _current_company)); ChangeOwnershipOfCompanyItems(ci, _current_company); diff --git a/src/game/game.hpp b/src/game/game.hpp index ac85fe1330..9e13bc5b63 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -18,6 +18,8 @@ /** A list that maps AI names to their AIInfo object. */ typedef std::map ScriptInfoList; +#include "../script/api/script_event_types.hpp" + /** * Main Game class. Contains all functions needed to start, stop, save and load Game Scripts. */ @@ -43,6 +45,11 @@ public: */ static void Uninitialize(bool keepConfig); + /** + * Queue a new event for a Game Script. + */ + static void NewEvent(class ScriptEvent *event); + /** * Get the current GameScript instance. */ diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 13f9cb47d7..9fd579599b 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -109,6 +109,31 @@ } } +/* static */ void Game::NewEvent(ScriptEvent *event) +{ + /* AddRef() and Release() need to be called at least once, so do it here */ + event->AddRef(); + + /* Clients should ignore events */ + if (_networking && !_network_server) { + event->Release(); + return; + } + + /* Check if Game instance is alive */ + if (Game::instance == NULL) { + event->Release(); + return; + } + + /* Queue the event */ + Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Game::instance->InsertEvent(event); + cur_company.Restore(); + + event->Release(); +} + /* static */ void Game::ResetConfig() { /* Check for both newgame as current game if we can reload the GameInfo insde diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 15447b9c1b..e5b3bf08e8 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -39,6 +39,7 @@ #include "../script/api/game/game_enginelist.hpp.sq" #include "../script/api/game/game_error.hpp.sq" #include "../script/api/game/game_event.hpp.sq" +#include "../script/api/game/game_event_types.hpp.sq" #include "../script/api/game/game_execmode.hpp.sq" #include "../script/api/game/game_game.hpp.sq" #include "../script/api/game/game_gamesettings.hpp.sq" @@ -109,7 +110,20 @@ void GameInstance::RegisterAPI() SQGSEngineList_Register(this->engine); SQGSError_Register(this->engine); SQGSEvent_Register(this->engine); + SQGSEventCompanyBankrupt_Register(this->engine); + SQGSEventCompanyInTrouble_Register(this->engine); + SQGSEventCompanyMerger_Register(this->engine); + SQGSEventCompanyNew_Register(this->engine); SQGSEventController_Register(this->engine); + SQGSEventIndustryClose_Register(this->engine); + SQGSEventIndustryOpen_Register(this->engine); + SQGSEventStationFirstVehicle_Register(this->engine); + SQGSEventSubsidyAwarded_Register(this->engine); + SQGSEventSubsidyExpired_Register(this->engine); + SQGSEventSubsidyOffer_Register(this->engine); + SQGSEventSubsidyOfferExpired_Register(this->engine); + SQGSEventTownFounded_Register(this->engine); + SQGSEventVehicleCrashed_Register(this->engine); SQGSExecMode_Register(this->engine); SQGSGame_Register(this->engine); SQGSGameSettings_Register(this->engine); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index ca6315438e..2126a6cac4 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -39,6 +39,7 @@ #include "subsidy_func.h" #include "core/backup_type.hpp" #include "object_base.h" +#include "game/game.hpp" #include "table/strings.h" #include "table/industry_land.h" @@ -482,6 +483,7 @@ static CommandCost ClearTile_Industry(TileIndex tile, DoCommandFlag flags) if (flags & DC_EXEC) { AI::BroadcastNewEvent(new ScriptEventIndustryClose(i->index)); + Game::NewEvent(new ScriptEventIndustryClose(i->index)); delete i; } return CommandCost(EXPENSES_CONSTRUCTION, indspec->GetRemovalCost()); @@ -1876,6 +1878,7 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } AddIndustryNewsItem(indspec->new_industry_text, NS_INDUSTRY_OPEN, ind->index); AI::BroadcastNewEvent(new ScriptEventIndustryOpen(ind->index)); + Game::NewEvent(new ScriptEventIndustryOpen(ind->index)); } return CommandCost(EXPENSES_OTHER, indspec->GetConstructionCost()); @@ -1989,6 +1992,7 @@ static void AdvertiseIndustryOpening(const Industry *ind) } AddIndustryNewsItem(ind_spc->new_industry_text, NS_INDUSTRY_OPEN, ind->index); AI::BroadcastNewEvent(new ScriptEventIndustryOpen(ind->index)); + Game::NewEvent(new ScriptEventIndustryOpen(ind->index)); } /** @@ -2597,6 +2601,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) if (closeit) { ns = NS_INDUSTRY_CLOSE; AI::BroadcastNewEvent(new ScriptEventIndustryClose(i->index)); + Game::NewEvent(new ScriptEventIndustryClose(i->index)); } else { switch (WhoCanServiceIndustry(i)) { case 0: ns = NS_INDUSTRY_NOBODY; break; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 8b364f3c9c..e4b093bec1 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -27,6 +27,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "depot_map.h" #include "effectvehicle_func.h" #include "roadstop_base.h" @@ -521,6 +522,7 @@ static void RoadVehCrash(RoadVehicle *v) uint pass = v->Crash(); AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING)); SetDParam(0, pass); AddVehicleNewsItem( @@ -669,6 +671,7 @@ static void RoadVehArrivesAt(const RoadVehicle *v, Station *st) st->index ); AI::NewEvent(v->owner, new ScriptEventStationFirstVehicle(st->index, v->index)); + Game::NewEvent(new ScriptEventStationFirstVehicle(st->index, v->index)); } } else { /* Check if station was ever visited before */ @@ -682,6 +685,7 @@ static void RoadVehArrivesAt(const RoadVehicle *v, Station *st) st->index ); AI::NewEvent(v->owner, new ScriptEventStationFirstVehicle(st->index, v->index)); + Game::NewEvent(new ScriptEventStationFirstVehicle(st->index, v->index)); } } } diff --git a/src/script/api/game/game_event_types.hpp.sq b/src/script/api/game/game_event_types.hpp.sq new file mode 100644 index 0000000000..a6e806ffd2 --- /dev/null +++ b/src/script/api/game/game_event_types.hpp.sq @@ -0,0 +1,219 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_event_types.hpp" +#include "../template/template_event_types.hpp.sq" + + +template <> const char *GetClassName() { return "GSEventVehicleCrashed"; } + +void SQGSEventVehicleCrashed_Register(Squirrel *engine) +{ + DefSQClass SQGSEventVehicleCrashed("GSEventVehicleCrashed"); + SQGSEventVehicleCrashed.PreRegister(engine, "GSEvent"); + + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_TRAIN, "CRASH_TRAIN"); + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, "CRASH_RV_LEVEL_CROSSING"); + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_UFO, "CRASH_RV_UFO"); + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, "CRASH_PLANE_LANDING"); + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT, "CRASH_AIRCRAFT_NO_AIRPORT"); + SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_FLOODED, "CRASH_FLOODED"); + + SQGSEventVehicleCrashed.DefSQStaticMethod(engine, &ScriptEventVehicleCrashed::Convert, "Convert", 2, ".x"); + + SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetVehicleID, "GetVehicleID", 1, "x"); + SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashSite, "GetCrashSite", 1, "x"); + SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashReason, "GetCrashReason", 1, "x"); + + SQGSEventVehicleCrashed.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventSubsidyOffer"; } + +void SQGSEventSubsidyOffer_Register(Squirrel *engine) +{ + DefSQClass SQGSEventSubsidyOffer("GSEventSubsidyOffer"); + SQGSEventSubsidyOffer.PreRegister(engine, "GSEvent"); + + SQGSEventSubsidyOffer.DefSQStaticMethod(engine, &ScriptEventSubsidyOffer::Convert, "Convert", 2, ".x"); + + SQGSEventSubsidyOffer.DefSQMethod(engine, &ScriptEventSubsidyOffer::GetSubsidyID, "GetSubsidyID", 1, "x"); + + SQGSEventSubsidyOffer.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventSubsidyOfferExpired"; } + +void SQGSEventSubsidyOfferExpired_Register(Squirrel *engine) +{ + DefSQClass SQGSEventSubsidyOfferExpired("GSEventSubsidyOfferExpired"); + SQGSEventSubsidyOfferExpired.PreRegister(engine, "GSEvent"); + + SQGSEventSubsidyOfferExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyOfferExpired::Convert, "Convert", 2, ".x"); + + SQGSEventSubsidyOfferExpired.DefSQMethod(engine, &ScriptEventSubsidyOfferExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); + + SQGSEventSubsidyOfferExpired.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventSubsidyAwarded"; } + +void SQGSEventSubsidyAwarded_Register(Squirrel *engine) +{ + DefSQClass SQGSEventSubsidyAwarded("GSEventSubsidyAwarded"); + SQGSEventSubsidyAwarded.PreRegister(engine, "GSEvent"); + + SQGSEventSubsidyAwarded.DefSQStaticMethod(engine, &ScriptEventSubsidyAwarded::Convert, "Convert", 2, ".x"); + + SQGSEventSubsidyAwarded.DefSQMethod(engine, &ScriptEventSubsidyAwarded::GetSubsidyID, "GetSubsidyID", 1, "x"); + + SQGSEventSubsidyAwarded.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventSubsidyExpired"; } + +void SQGSEventSubsidyExpired_Register(Squirrel *engine) +{ + DefSQClass SQGSEventSubsidyExpired("GSEventSubsidyExpired"); + SQGSEventSubsidyExpired.PreRegister(engine, "GSEvent"); + + SQGSEventSubsidyExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyExpired::Convert, "Convert", 2, ".x"); + + SQGSEventSubsidyExpired.DefSQMethod(engine, &ScriptEventSubsidyExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); + + SQGSEventSubsidyExpired.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventCompanyNew"; } + +void SQGSEventCompanyNew_Register(Squirrel *engine) +{ + DefSQClass SQGSEventCompanyNew("GSEventCompanyNew"); + SQGSEventCompanyNew.PreRegister(engine, "GSEvent"); + + SQGSEventCompanyNew.DefSQStaticMethod(engine, &ScriptEventCompanyNew::Convert, "Convert", 2, ".x"); + + SQGSEventCompanyNew.DefSQMethod(engine, &ScriptEventCompanyNew::GetCompanyID, "GetCompanyID", 1, "x"); + + SQGSEventCompanyNew.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventCompanyInTrouble"; } + +void SQGSEventCompanyInTrouble_Register(Squirrel *engine) +{ + DefSQClass SQGSEventCompanyInTrouble("GSEventCompanyInTrouble"); + SQGSEventCompanyInTrouble.PreRegister(engine, "GSEvent"); + + SQGSEventCompanyInTrouble.DefSQStaticMethod(engine, &ScriptEventCompanyInTrouble::Convert, "Convert", 2, ".x"); + + SQGSEventCompanyInTrouble.DefSQMethod(engine, &ScriptEventCompanyInTrouble::GetCompanyID, "GetCompanyID", 1, "x"); + + SQGSEventCompanyInTrouble.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventCompanyMerger"; } + +void SQGSEventCompanyMerger_Register(Squirrel *engine) +{ + DefSQClass SQGSEventCompanyMerger("GSEventCompanyMerger"); + SQGSEventCompanyMerger.PreRegister(engine, "GSEvent"); + + SQGSEventCompanyMerger.DefSQStaticMethod(engine, &ScriptEventCompanyMerger::Convert, "Convert", 2, ".x"); + + SQGSEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetOldCompanyID, "GetOldCompanyID", 1, "x"); + SQGSEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetNewCompanyID, "GetNewCompanyID", 1, "x"); + + SQGSEventCompanyMerger.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventCompanyBankrupt"; } + +void SQGSEventCompanyBankrupt_Register(Squirrel *engine) +{ + DefSQClass SQGSEventCompanyBankrupt("GSEventCompanyBankrupt"); + SQGSEventCompanyBankrupt.PreRegister(engine, "GSEvent"); + + SQGSEventCompanyBankrupt.DefSQStaticMethod(engine, &ScriptEventCompanyBankrupt::Convert, "Convert", 2, ".x"); + + SQGSEventCompanyBankrupt.DefSQMethod(engine, &ScriptEventCompanyBankrupt::GetCompanyID, "GetCompanyID", 1, "x"); + + SQGSEventCompanyBankrupt.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventIndustryOpen"; } + +void SQGSEventIndustryOpen_Register(Squirrel *engine) +{ + DefSQClass SQGSEventIndustryOpen("GSEventIndustryOpen"); + SQGSEventIndustryOpen.PreRegister(engine, "GSEvent"); + + SQGSEventIndustryOpen.DefSQStaticMethod(engine, &ScriptEventIndustryOpen::Convert, "Convert", 2, ".x"); + + SQGSEventIndustryOpen.DefSQMethod(engine, &ScriptEventIndustryOpen::GetIndustryID, "GetIndustryID", 1, "x"); + + SQGSEventIndustryOpen.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventIndustryClose"; } + +void SQGSEventIndustryClose_Register(Squirrel *engine) +{ + DefSQClass SQGSEventIndustryClose("GSEventIndustryClose"); + SQGSEventIndustryClose.PreRegister(engine, "GSEvent"); + + SQGSEventIndustryClose.DefSQStaticMethod(engine, &ScriptEventIndustryClose::Convert, "Convert", 2, ".x"); + + SQGSEventIndustryClose.DefSQMethod(engine, &ScriptEventIndustryClose::GetIndustryID, "GetIndustryID", 1, "x"); + + SQGSEventIndustryClose.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventStationFirstVehicle"; } + +void SQGSEventStationFirstVehicle_Register(Squirrel *engine) +{ + DefSQClass SQGSEventStationFirstVehicle("GSEventStationFirstVehicle"); + SQGSEventStationFirstVehicle.PreRegister(engine, "GSEvent"); + + SQGSEventStationFirstVehicle.DefSQStaticMethod(engine, &ScriptEventStationFirstVehicle::Convert, "Convert", 2, ".x"); + + SQGSEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetStationID, "GetStationID", 1, "x"); + SQGSEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetVehicleID, "GetVehicleID", 1, "x"); + + SQGSEventStationFirstVehicle.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventTownFounded"; } + +void SQGSEventTownFounded_Register(Squirrel *engine) +{ + DefSQClass SQGSEventTownFounded("GSEventTownFounded"); + SQGSEventTownFounded.PreRegister(engine, "GSEvent"); + + SQGSEventTownFounded.DefSQStaticMethod(engine, &ScriptEventTownFounded::Convert, "Convert", 2, ".x"); + + SQGSEventTownFounded.DefSQMethod(engine, &ScriptEventTownFounded::GetTownID, "GetTownID", 1, "x"); + + SQGSEventTownFounded.PostRegister(engine); +} diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index 472fc72a2d..cffa4a7977 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -18,7 +18,7 @@ /** * Event Vehicle Crash, indicating a vehicle of yours is crashed. * It contains the crash site, the crashed vehicle and the reason for the crash. - * @api ai + * @api ai game */ class ScriptEventVehicleCrashed : public ScriptEvent { public: @@ -79,7 +79,7 @@ private: /** * Event Subsidy Offered, indicating someone offered a subsidy. - * @api ai + * @api ai game */ class ScriptEventSubsidyOffer : public ScriptEvent { public: @@ -110,7 +110,7 @@ private: /** * Event Subsidy Offer Expired, indicating a subsidy will no longer be awarded. - * @api ai + * @api ai game */ class ScriptEventSubsidyOfferExpired : public ScriptEvent { public: @@ -141,7 +141,7 @@ private: /** * Event Subidy Awarded, indicating a subsidy is awarded to some company. - * @api ai + * @api ai game */ class ScriptEventSubsidyAwarded : public ScriptEvent { public: @@ -172,7 +172,7 @@ private: /** * Event Subsidy Expired, indicating a route that was once subsidized no longer is. - * @api ai + * @api ai game */ class ScriptEventSubsidyExpired : public ScriptEvent { public: @@ -294,7 +294,7 @@ private: /** * Event Company New, indicating a new company has been created. - * @api ai + * @api ai game */ class ScriptEventCompanyNew : public ScriptEvent { public: @@ -326,7 +326,7 @@ private: /** * Event Company In Trouble, indicating a company is in trouble and might go * bankrupt soon. - * @api ai + * @api ai game */ class ScriptEventCompanyInTrouble : public ScriptEvent { public: @@ -405,7 +405,7 @@ private: /** * Event Company Merger, indicating a company has been bought by another * company. - * @api ai + * @api ai game */ class ScriptEventCompanyMerger : public ScriptEvent { public: @@ -448,7 +448,7 @@ private: /** * Event Company Bankrupt, indicating a company has gone bankrupt. - * @api ai + * @api ai game */ class ScriptEventCompanyBankrupt : public ScriptEvent { public: @@ -572,7 +572,7 @@ private: /** * Event Industry Open, indicating a new industry has been created. - * @api ai + * @api ai game */ class ScriptEventIndustryOpen : public ScriptEvent { public: @@ -603,7 +603,7 @@ private: /** * Event Industry Close, indicating an industry is going to be closed. - * @api ai + * @api ai game */ class ScriptEventIndustryClose : public ScriptEvent { public: @@ -665,7 +665,7 @@ private: /** * Event Station First Vehicle, indicating a station has been visited by a vehicle for the first time. - * @api ai + * @api ai game */ class ScriptEventStationFirstVehicle : public ScriptEvent { public: @@ -767,7 +767,7 @@ private: /** * Event Town Founded, indicating a new town has been created. - * @api ai + * @api ai game */ class ScriptEventTownFounded : public ScriptEvent { public: diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 384011d400..6e4ee0694f 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -23,6 +23,7 @@ #include "subsidy_func.h" #include "core/pool_func.hpp" #include "core/random_func.hpp" +#include "game/game.hpp" #include "table/strings.h" @@ -58,6 +59,7 @@ void Subsidy::AwardTo(CompanyID company) cn ); AI::BroadcastNewEvent(new ScriptEventSubsidyAwarded(this->index)); + Game::NewEvent(new ScriptEventSubsidyAwarded(this->index)); InvalidateWindowData(WC_SUBSIDIES_LIST, 0); } @@ -202,6 +204,7 @@ void CreateSubsidy(CargoID cid, SourceType src_type, SourceID src, SourceType ds SetPartOfSubsidyFlag(s->src_type, s->src, POS_SRC); SetPartOfSubsidyFlag(s->dst_type, s->dst, POS_DST); AI::BroadcastNewEvent(new ScriptEventSubsidyOffer(s->index)); + Game::NewEvent(new ScriptEventSubsidyOffer(s->index)); } @@ -375,12 +378,14 @@ void SubsidyMonthlyLoop() Pair reftype = SetupSubsidyDecodeParam(s, true); AddNewsItem(STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->src, (NewsReferenceType)reftype.b, s->dst); AI::BroadcastNewEvent(new ScriptEventSubsidyOfferExpired(s->index)); + Game::NewEvent(new ScriptEventSubsidyOfferExpired(s->index)); } else { if (s->awarded == _local_company) { Pair reftype = SetupSubsidyDecodeParam(s, true); AddNewsItem(STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->src, (NewsReferenceType)reftype.b, s->dst); } AI::BroadcastNewEvent(new ScriptEventSubsidyExpired(s->index)); + Game::NewEvent(new ScriptEventSubsidyExpired(s->index)); } delete s; modified = true; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3bcbda8e81..096468599a 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -47,6 +47,7 @@ #include "object_map.h" #include "object_base.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "table/strings.h" #include "table/town_land.h" @@ -1698,6 +1699,7 @@ CommandCost CmdFoundTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 AddNewsItem(STR_NEWS_NEW_TOWN, NS_INDUSTRY_OPEN, NR_TILE, tile, NR_NONE, UINT32_MAX, cn); AI::BroadcastNewEvent(new ScriptEventTownFounded(t->index)); + Game::NewEvent(new ScriptEventTownFounded(t->index)); } } return cost; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index f5a07f20e0..44e8d9efed 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -27,6 +27,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "newgrf_station.h" #include "effectvehicle_func.h" #include "gamelog.h" @@ -2714,6 +2715,7 @@ static void TrainEnterStation(Train *v, StationID station) st->index ); AI::NewEvent(v->owner, new ScriptEventStationFirstVehicle(st->index, v->index)); + Game::NewEvent(new ScriptEventStationFirstVehicle(st->index, v->index)); } v->force_proceed = TFP_NONE; @@ -2840,6 +2842,7 @@ static uint TrainCrashed(Train *v) if (!(v->vehstatus & VS_CRASHED)) { num = v->Crash(); AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN)); } /* Try to re-reserve track under already crashed train too. diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index a62ae70406..19d43de032 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -32,6 +32,7 @@ #include "tunnelbridge_map.h" #include "station_base.h" #include "ai/ai.hpp" +#include "game/game.hpp" #include "core/random_func.hpp" #include "core/backup_type.hpp" #include "date_func.h" @@ -910,6 +911,7 @@ static void FloodVehicle(Vehicle *v) uint pass = v->Crash(true); AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED)); SetDParam(0, pass); AddVehicleNewsItem(STR_NEWS_DISASTER_FLOOD_VEHICLE, NS_ACCIDENT, v->index); CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);