Implement "Train Militia Anywhere"

Subtract supplies when starting mission

Fix second stage mission strategic event
This commit is contained in:
rftrdev
2022-10-14 00:26:38 -07:00
parent feaf9827c9
commit dea5da5fc6
2 changed files with 25 additions and 9 deletions
+2 -2
View File
@@ -1980,7 +1980,7 @@ BOOLEAN CanCharacterTrainMilitia( SOLDIERTYPE *pSoldier )
} }
} }
if (RebelCommand::CanTrainMilitiaAnywhere()) if (RebelCommand::CanTrainMilitiaAnywhere() && GetTownIdForSector(pSoldier->sSectorX, pSoldier->sSectorY) == BLANK_SECTOR)
ubFacilityTrainersAllowed = RebelCommand::GetMaxTrainersForTrainMilitiaAnywhere(); ubFacilityTrainersAllowed = RebelCommand::GetMaxTrainersForTrainMilitiaAnywhere();
// Count number of trainers already operating here // Count number of trainers already operating here
@@ -20182,7 +20182,7 @@ BOOLEAN CanCharacterTrainMilitiaWithErrorReport( SOLDIERTYPE *pSoldier )
} }
} }
if (RebelCommand::CanTrainMilitiaAnywhere()) if (RebelCommand::CanTrainMilitiaAnywhere() && GetTownIdForSector(pSoldier->sSectorX, pSoldier->sSectorY) == BLANK_SECTOR)
ubFacilityTrainersAllowed = RebelCommand::GetMaxTrainersForTrainMilitiaAnywhere(); ubFacilityTrainersAllowed = RebelCommand::GetMaxTrainersForTrainMilitiaAnywhere();
// If we are here, then TrainersAllowed > 0. // If we are here, then TrainersAllowed > 0.
+23 -7
View File
@@ -2527,6 +2527,8 @@ void StartMission(INT8 index)
DoLapTopMessageBox(MSG_BOX_LAPTOP_DEFAULT, szRebelCommandText[RCT_INSUFFICIENT_FUNDS], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL); DoLapTopMessageBox(MSG_BOX_LAPTOP_DEFAULT, szRebelCommandText[RCT_INSUFFICIENT_FUNDS], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return; return;
} }
rebelCommandSaveInfo.iSupplies -= cost;
// todo do something with agentIndex[index] and missionIndex[index] (rebelCommandSaveInfo.availableMissions[index]) // todo do something with agentIndex[index] and missionIndex[index] (rebelCommandSaveInfo.availableMissions[index])
// confirmation popup // confirmation popup
@@ -2693,7 +2695,7 @@ void StartMission(INT8 index)
// actually start the mission // actually start the mission
//AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * 24, MissionHelpers::missionParam); //AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * 24, MissionHelpers::missionParam);
AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60, MissionHelpers::missionParam); // rftr todo: DELETE ME AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60, MissionHelpers::missionParam); // rftr todo: DELETE ME
missionMap[static_cast<RebelCommandAgentMissions>(evt.missionId)] = MissionHelpers::missionParam; missionMap.insert(std::make_pair(static_cast<RebelCommandAgentMissions>(evt.missionId), MissionHelpers::missionParam));
} }
RenderWebsite(); RenderWebsite();
@@ -4139,12 +4141,26 @@ BOOLEAN CanTrainMilitiaAnywhere()
return FALSE; return FALSE;
// rftr todo: check bitmask // rftr todo: check bitmask
return TRUE; const UINT32 param = missionMap[RCAM_TRAIN_MILITIA_ANYWHERE];
MissionSecondEvent evt;
DeserialiseMissionSecondEvent(param, evt);
return evt.isSecondEvent;
} }
UINT8 GetMaxTrainersForTrainMilitiaAnywhere() UINT8 GetMaxTrainersForTrainMilitiaAnywhere()
{ {
return 1; const UINT32 param = missionMap[RCAM_TRAIN_MILITIA_ANYWHERE];
MissionSecondEvent evt;
DeserialiseMissionSecondEvent(param, evt);
if (!evt.isSecondEvent)
return 0;
if (evt.extraBits == MissionHelpers::TRAIN_MILITIA_ANYWHERE_TEACHING)
return gRebelCommandSettings.iTrainMilitiaAnywhereMaxTrainers_Teaching;
return gRebelCommandSettings.iTrainMilitiaAnywhereMaxTrainers;
} }
INT16 GetAdditionalDeployRange(const UINT8 insertionCode) INT16 GetAdditionalDeployRange(const UINT8 insertionCode)
@@ -4347,8 +4363,8 @@ void HandleStrategicEvent(const UINT32 eventParam)
if (validMission) if (validMission)
{ {
AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * evt1.missionDurationInHours, const UINT32 activatedMissionParam = SerialiseMissionSecondEvent(evt1.sentGenericRebelAgent, evt1.mercProfileId, mission, extraBits);
SerialiseMissionSecondEvent(evt1.sentGenericRebelAgent, evt1.mercProfileId, mission, extraBits)); AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * evt1.missionDurationInHours, activatedMissionParam);
if (!evt1.sentGenericRebelAgent) if (!evt1.sentGenericRebelAgent)
{ {
@@ -4368,9 +4384,9 @@ void HandleStrategicEvent(const UINT32 eventParam)
AddCharacterToAnySquad(pSoldier); AddCharacterToAnySquad(pSoldier);
} }
} }
}
missionMap[mission] = eventParam; missionMap.insert(std::make_pair(mission, activatedMissionParam));
}
} }
else else
{ {