diff --git a/data/base/script/rules.js b/data/base/script/rules.js index 9d29f8f461e..87ad296f251 100644 --- a/data/base/script/rules.js +++ b/data/base/script/rules.js @@ -428,6 +428,15 @@ function eventTransporterEmbarked(transport) } } +//Maybe no more truck/commanders on the map. +function eventTransporterDisembarked(transport) +{ + if (transport.player === selectedPlayer) + { + reticuleUpdate(transport, TRANSFER_LIKE_EVENT); + } +} + function eventResearched(research, structure, player) { // NOTE: Research upgrades are handled by the C++ core game engine since 4.1.0 diff --git a/data/mp/multiplay/script/rules/events/transfer.js b/data/mp/multiplay/script/rules/events/transfer.js index eb78f603271..399eac83ce2 100644 --- a/data/mp/multiplay/script/rules/events/transfer.js +++ b/data/mp/multiplay/script/rules/events/transfer.js @@ -13,3 +13,11 @@ function eventTransporterEmbarked(transport) reticuleUpdate(transport, TRANSFER_LIKE_EVENT); } } + +function eventTransporterDisembarked(transport) +{ + if (transport.player === selectedPlayer) + { + reticuleUpdate(transport, TRANSFER_LIKE_EVENT); + } +} diff --git a/src/qtscript.cpp b/src/qtscript.cpp index 5e1eb06fc99..6d4d62b6657 100644 --- a/src/qtscript.cpp +++ b/src/qtscript.cpp @@ -1079,6 +1079,9 @@ bool triggerEvent(SCRIPT_TRIGGER_TYPE trigger, BASE_OBJECT *psObj) case TRIGGER_TRANSPORTER_EMBARKED: instance->handle_eventTransporterEmbarked(psObj); break; + case TRIGGER_TRANSPORTER_DISEMBARKED: + instance->handle_eventTransporterDisembarked(psObj); + break; case TRIGGER_MISSION_TIMEOUT: instance->handle_eventMissionTimeout(); break; diff --git a/src/qtscript.h b/src/qtscript.h index 45d8c2aaf2e..94afee89274 100644 --- a/src/qtscript.h +++ b/src/qtscript.h @@ -44,6 +44,7 @@ enum SCRIPT_TRIGGER_TYPE TRIGGER_START_LEVEL, TRIGGER_TRANSPORTER_ARRIVED, TRIGGER_TRANSPORTER_EMBARKED, + TRIGGER_TRANSPORTER_DISEMBARKED, TRIGGER_TRANSPORTER_LANDED, TRIGGER_TRANSPORTER_LAUNCH, TRIGGER_TRANSPORTER_EXIT, diff --git a/src/quickjs_backend.cpp b/src/quickjs_backend.cpp index e45ffcf00c0..3063d7cb69c 100644 --- a/src/quickjs_backend.cpp +++ b/src/quickjs_backend.cpp @@ -345,6 +345,12 @@ class quickjs_scripting_instance : public wzapi::scripting_instance //__ virtual bool handle_eventTransporterEmbarked(const BASE_OBJECT *psTransport) override; + //__ ## eventTransporterDisembarked(transport) + //__ + //__ An event that is run when a unit disembarks from a transporter. + //__ + virtual bool handle_eventTransporterDisembarked(const BASE_OBJECT *psTransport) override; + public: // MARK: UI-related events (intended for the tutorial) @@ -2948,6 +2954,7 @@ IMPL_EVENT_HANDLER(eventTransporterExit, const BASE_OBJECT *) IMPL_EVENT_HANDLER(eventTransporterDone, const BASE_OBJECT *) IMPL_EVENT_HANDLER(eventTransporterLanded, const BASE_OBJECT *) IMPL_EVENT_HANDLER(eventTransporterEmbarked, const BASE_OBJECT *) +IMPL_EVENT_HANDLER(eventTransporterDisembarked, const BASE_OBJECT *) // MARK: UI-related events (intended for the tutorial) IMPL_EVENT_HANDLER(eventDeliveryPointMoving, const BASE_OBJECT *) diff --git a/src/transporter.cpp b/src/transporter.cpp index 1206b615482..615dc2d08aa 100644 --- a/src/transporter.cpp +++ b/src/transporter.cpp @@ -965,6 +965,11 @@ void transporterRemoveDroid(DROID *psTransport, DROID *psDroid, QUEUE_MODE mode) //make sure the button isn't flashing stopMissionButtonFlash(IDTRANS_LAUNCH); } + + // Fire off disembark event + transporterSetScriptCurrent(psTransport); + triggerEvent(TRIGGER_TRANSPORTER_DISEMBARKED, psTransport); + transporterSetScriptCurrent(nullptr); } /*adds a droid to the current transporter via the interface*/ diff --git a/src/wzapi.h b/src/wzapi.h index 49837f4d34c..dfa412e797f 100644 --- a/src/wzapi.h +++ b/src/wzapi.h @@ -236,6 +236,12 @@ namespace wzapi //__ virtual bool handle_eventTransporterEmbarked(const BASE_OBJECT *psTransport) SCRIPTING_EVENT_NON_REQUIRED + //__ ## eventTransporterDisembarked(transport) + //__ + //__ An event that is run when a unit disembarks from a transporter. + //__ + virtual bool handle_eventTransporterDisembarked(const BASE_OBJECT *psTransport) SCRIPTING_EVENT_NON_REQUIRED + public: // MARK: UI-related events (intended for the tutorial)