diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index bbde5c95c6..78597e3a30 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1345,8 +1345,8 @@ static void CrashAirplane(Aircraft *v) headline = GetEncodedString(STR_NEWS_AIRCRAFT_CRASH, victims, st->index); } - AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, victims)); - Game::NewEvent(new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, victims)); + AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, victims, v->owner)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, victims, v->owner)); NewsType newstype = NewsType::Accident; if (v->owner != _local_company) { diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index acced3ef5a..e6b7635f0f 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -388,8 +388,8 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) AddTileNewsItem(GetEncodedString(STR_NEWS_DISASTER_SMALL_UFO), NewsType::Accident, u->tile); - AI::NewEvent(u->owner, new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO, victims)); - Game::NewEvent(new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO, victims)); + AI::NewEvent(u->owner, new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO, victims, u->owner)); + Game::NewEvent(new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO, victims, u->owner)); } } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 8b999e8b51..069c4fbbb7 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -544,8 +544,8 @@ static void RoadVehCrash(RoadVehicle *v) { uint victims = v->Crash(); - AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, victims)); - Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, victims)); + AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, victims, v->owner)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, victims, v->owner)); EncodedString headline = (victims == 1) ? GetEncodedString(STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 23d2d3b216..a3da2a077d 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -19,6 +19,7 @@ * * API additions: * \li AIEventVehicleCrashed::GetVictims + * \li AIEventVehicleCrashed::GetVehicleOwner * \li AIEventCompanyRenamed * \li AIEventPresidentRenamed * \li AICargo::CC_OVERSIZED diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 1ec9611311..13498b62e4 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -19,6 +19,7 @@ * * API additions: * \li GSEventVehicleCrashed::GetVictims + * \li GSEventVehicleCrashed::GetVehicleOwner * \li GSEventCompanyRenamed * \li GSEventPresidentRenamed * \li GSCargo::CC_OVERSIZED diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index 5ec63d2087..0b67ce9376 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -45,13 +45,15 @@ public: * @param crash_site Where the vehicle crashed. * @param crash_reason The reason why the vehicle crashed. * @param victims The number of victims caused by the crash. + * @param the ID of the company owning the crashed vehicle. */ - ScriptEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason, uint victims) : + ScriptEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason, uint victims, ::CompanyID company) : ScriptEvent(ET_VEHICLE_CRASHED), crash_site(crash_site), vehicle(vehicle), crash_reason(crash_reason), - victims(victims) + victims(victims), + company(ScriptCompany::ToScriptCompanyID(company)) {} #endif /* DOXYGEN_API */ @@ -86,11 +88,18 @@ public: */ SQInteger GetVictims() { return this->victims; } + /** + * Get the CompanyID of the company owning the vehicle + * @return The company owning the vehicle + */ + ScriptCompany::CompanyID GetVehicleOwner() { return this->company; } + private: TileIndex crash_site; ///< The location of the crash. VehicleID vehicle; ///< The crashed vehicle. CrashReason crash_reason; ///< The reason for crashing. - uint victims; ///< The number of victims. + uint victims; ///< The number of victims. + ScriptCompany::CompanyID company; ///< The company owning the vehicle. }; /** diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index f5782006a3..b7b10f543e 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3152,8 +3152,8 @@ static uint TrainCrashed(Train *v) /* do not crash train twice */ if (!v->vehstatus.Test(VehState::Crashed)) { victims = v->Crash(); - AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN, victims)); - Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN, victims)); + AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN, victims, v->owner)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_TRAIN, victims, v->owner)); } /* Try to re-reserve track under already crashed train too. diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index c80281d353..89d4ebab24 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -1005,8 +1005,8 @@ static void FloodVehicle(Vehicle *v) { uint victims = v->Crash(true); - AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED, victims)); - Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED, victims)); + AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED, victims, v->owner)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, ScriptEventVehicleCrashed::CRASH_FLOODED, victims, v->owner)); AddTileNewsItem(GetEncodedString(STR_NEWS_DISASTER_FLOOD_VEHICLE, victims), NewsType::Accident, v->tile); CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE); if (_settings_client.sound.disaster) SndPlayVehicleFx(SND_12_EXPLOSION, v);