From dd72536072c4cbc1d58b71cdcec43fdd41471ddc Mon Sep 17 00:00:00 2001 From: Xynth22 <31621879+Xynth22@users.noreply.github.com> Date: Wed, 8 Nov 2017 20:46:35 -0600 Subject: [PATCH 1/3] Add achievements for pickup/drop off pod Publish achievements before deploy. Art/achieve text is still under development. --- src/FedSrv/CSteamAchievements.cpp | 10 ++++++++++ src/FedSrv/CSteamAchievements.h | 13 ++++++++++--- src/FedSrv/FedSrv.CPP | 12 ++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/FedSrv/CSteamAchievements.cpp b/src/FedSrv/CSteamAchievements.cpp index a10531b6..8a2480c1 100644 --- a/src/FedSrv/CSteamAchievements.cpp +++ b/src/FedSrv/CSteamAchievements.cpp @@ -306,6 +306,16 @@ void CSteamAchievements::AwardRecoverTechAchievement() SetAchievement(EAchievements::RECOVER_TECH_1_8); } +void CSteamAchievements::AwardPodPickup() +{ + SetAchievement(EAchievements::PICKUP_POD_1_13); +} + +void CSteamAchievements::AwardGetRescued() +{ + SetAchievement(EAchievements::GET_RESCUED_1_12); +} + void CSteamAchievements::AddUserStats(PlayerScoreObject* ppso, IshipIGC * pIship) { diff --git a/src/FedSrv/CSteamAchievements.h b/src/FedSrv/CSteamAchievements.h index 8d228516..62ebd578 100644 --- a/src/FedSrv/CSteamAchievements.h +++ b/src/FedSrv/CSteamAchievements.h @@ -15,7 +15,10 @@ enum EAchievements RECOVER_TECH_1_8 = 8, FIRST_PROBE_KILL_1_9 = 9, PROBE_SPOT_1_10 = 10, - NANITE_REPAIR_1_11 = 11 + NANITE_REPAIR_1_11 = 11, + GET_RESCUED_1_12 = 12, + PICKUP_POD_1_13 = 13 + // Don't forget to update g_nMaximumSteamAchievementCount and m_Achievements! }; @@ -36,7 +39,7 @@ enum EStats // Don't forget to update g_nMaximumSteamStatCount and m_Stats! }; -const int g_nMaximumSteamAchievementCount = 12; // Always keep this in sync with the number of achievments in EAchievements! +const int g_nMaximumSteamAchievementCount = 14; // Always keep this in sync with the number of achievments in EAchievements! const int g_nMaximumSteamStatCount = 10; // Always keep this in sync with the number of stats in EStats! // BT - STEAM @@ -74,7 +77,9 @@ class CSteamAchievements "RECOVER_TECH_1_8", "FIRST_PROBE_KILL_1_9", "PROBE_SPOT_1_10", - "NANITE_REPAIR_1_11" + "NANITE_REPAIR_1_11", + "GET_RESCUED_1_12", + "PICKUP_POD_1_13" }; // Keep in sync with EStats! @@ -119,6 +124,8 @@ class CSteamAchievements void AwardBaseKillOrCapture(bool kill); void AwardIGCAchievements(AchievementMask am); void AwardRecoverTechAchievement(); + void AwardPodPickup(); + void AwardGetRescued(); void AddUserStats(PlayerScoreObject* ppso, IshipIGC* pIship); void UpdateLeaderboard(PlayerScoreObject* ppso); diff --git a/src/FedSrv/FedSrv.CPP b/src/FedSrv/FedSrv.CPP index e83aa053..fe977a9b 100644 --- a/src/FedSrv/FedSrv.CPP +++ b/src/FedSrv/FedSrv.CPP @@ -12805,6 +12805,18 @@ bool FedSrvSiteBase::RescueShipEvent(IshipIGC* pshipRescued, IshipIGC* pshipResc { CFSShip* pfsShip = (CFSShip*)(pshipRescuer->GetPrivateData()); pfsShip->GetPlayerScoreObject()->AddRescue(); + if (pfsShip->IsPlayer()) + { + CSteamAchievements *pSteamAchievements = pfsShip->GetPlayer()->GetSteamAchievements(); + pSteamAchievements->AwardPodPickup(); + } + + CFSShip* rescuedShip = (CFSShip*)(pshipRescued->GetPrivateData()); + if (rescuedShip->IsPlayer()) + { + CSteamAchievements *pSteamAchievements = pfsShip->GetPlayer()->GetSteamAchievements(); + pSteamAchievements->AwardGetRescued(); + } BEGIN_PFM_CREATE(g.fm, pfmPlayerRescued, S, PLAYER_RESCUED) END_PFM_CREATE pfmPlayerRescued->shipIDRescuer = pshipRescuer->GetObjectID(); From e3928d2e4400effef1c3680a9bc34200864f1479 Mon Sep 17 00:00:00 2001 From: Xynth22 <31621879+Xynth22@users.noreply.github.com> Date: Wed, 8 Nov 2017 20:56:11 -0600 Subject: [PATCH 2/3] Add Garrison spot, no implementation yet --- src/FedSrv/CSteamAchievements.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/FedSrv/CSteamAchievements.h b/src/FedSrv/CSteamAchievements.h index 62ebd578..b5eb65c6 100644 --- a/src/FedSrv/CSteamAchievements.h +++ b/src/FedSrv/CSteamAchievements.h @@ -17,7 +17,8 @@ enum EAchievements PROBE_SPOT_1_10 = 10, NANITE_REPAIR_1_11 = 11, GET_RESCUED_1_12 = 12, - PICKUP_POD_1_13 = 13 + PICKUP_POD_1_13 = 13, + SPOT_GARRISON_1_14 = 14 // Don't forget to update g_nMaximumSteamAchievementCount and m_Achievements! @@ -39,7 +40,7 @@ enum EStats // Don't forget to update g_nMaximumSteamStatCount and m_Stats! }; -const int g_nMaximumSteamAchievementCount = 14; // Always keep this in sync with the number of achievments in EAchievements! +const int g_nMaximumSteamAchievementCount = 15; // Always keep this in sync with the number of achievments in EAchievements! const int g_nMaximumSteamStatCount = 10; // Always keep this in sync with the number of stats in EStats! // BT - STEAM @@ -79,7 +80,8 @@ class CSteamAchievements "PROBE_SPOT_1_10", "NANITE_REPAIR_1_11", "GET_RESCUED_1_12", - "PICKUP_POD_1_13" + "PICKUP_POD_1_13", + "SPOT_GARRISON_1_14" }; // Keep in sync with EStats! From bd94b24a7ce5f2b8840a0113b967793005ed2659 Mon Sep 17 00:00:00 2001 From: Xynth22 <31621879+Xynth22@users.noreply.github.com> Date: Wed, 8 Nov 2017 22:18:12 -0600 Subject: [PATCH 3/3] Garrison Achievement Implementation --- src/FedSrv/CSteamAchievements.cpp | 2 ++ src/FedSrv/FedSrv.CPP | 19 ++++++++++++++++++- src/Igc/igc.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/FedSrv/CSteamAchievements.cpp b/src/FedSrv/CSteamAchievements.cpp index 8a2480c1..68aeed53 100644 --- a/src/FedSrv/CSteamAchievements.cpp +++ b/src/FedSrv/CSteamAchievements.cpp @@ -298,6 +298,8 @@ void CSteamAchievements::AwardIGCAchievements(AchievementMask am) SetAchievement(EAchievements::NANITE_REPAIR_1_11); m_nanAchievementEarned = true; //I was concerned about potentially calling set achievement too much } + if ((am & c_achmGarrSpot) > 0) + SetAchievement(EAchievements::SPOT_GARRISON_1_14); } diff --git a/src/FedSrv/FedSrv.CPP b/src/FedSrv/FedSrv.CPP index fe977a9b..f59f5701 100644 --- a/src/FedSrv/FedSrv.CPP +++ b/src/FedSrv/FedSrv.CPP @@ -10885,10 +10885,27 @@ class ThingSiteImpl : public ThingSite pfmObjectSpotted->oidObject = pmodel->GetObjectID(); pfmObjectSpotted->otSpotter = otSpotter; pfmObjectSpotted->oidSpotter = s->GetObjectID(); - + g.fm.SendMessages(CFSSide::FromIGC(pside)->GetGroup(), FM_GUARANTEED, FM_FLUSH); CFSMission* pfsMission = (CFSMission *)(pside->GetMission()->GetPrivateData()); + + if (otModel == OT_station) + { + IstationIGC* pstation = ((IstationIGC*)pmodel); + if ((pstation->GetStationType()->GetClassID() == c_scGarrison) || + (pstation->GetStationType()->GetClassID() == c_scStarbase)) + { + if (s->GetObjectType() == OT_ship) + { + ObjectID spotterID = s->GetObjectID(); + ImodelIGC* pShipModel = s->GetMission()->GetModel(OT_ship, spotterID); + IshipIGC* pShip = (IshipIGC*)pShipModel; + pShip->SetAchievementMask(c_achmGarrSpot); + } + } + } + if ((otModel == OT_warp) || (otModel == OT_asteroid)) { diff --git a/src/Igc/igc.h b/src/Igc/igc.h index 7506a634..3051db5e 100644 --- a/src/Igc/igc.h +++ b/src/Igc/igc.h @@ -768,6 +768,7 @@ typedef short AchievementMask; const AchievementMask c_achmProbeKill = 0x01; const AchievementMask c_achmProbeSpot = 0x02; const AchievementMask c_achmNewRepair = 0x04; +const AchievementMask c_achmGarrSpot = 0x08; enum ShipControlStateIGC {