v1.4.4.1 (Blood in the Water Update)

This commit is contained in:
Regalis11
2024-04-24 18:09:05 +03:00
parent 89b91d1c3e
commit ff1b8951a7
397 changed files with 15250 additions and 6479 deletions
@@ -183,33 +183,32 @@ namespace Barotrauma
completeCheckDataAction = new CheckDataAction(endConditionElement, $"Mission ({prefab.Identifier})");
}
for (int n = 0; n < 2; n++)
{
string locationName = $"‖color:gui.orange‖{locations[n].DisplayName}‖end‖";
if (description != null) { description = description.Replace("[location" + (n + 1) + "]", locationName); }
if (successMessage != null) { successMessage = successMessage.Replace("[location" + (n + 1) + "]", locationName); }
if (failureMessage != null) { failureMessage = failureMessage.Replace("[location" + (n + 1) + "]", locationName); }
for (int m = 0; m < messages.Length; m++)
{
messages[m] = messages[m].Replace("[location" + (n + 1) + "]", locationName);
}
}
string rewardText = $"‖color:gui.orange‖{string.Format(CultureInfo.InvariantCulture, "{0:N0}", GetReward(sub))}‖end‖";
if (description != null)
{
descriptionWithoutReward = description;
description = description.Replace("[reward]", rewardText);
}
if (successMessage != null) { successMessage = successMessage.Replace("[reward]", rewardText); }
if (failureMessage != null) { failureMessage = failureMessage.Replace("[reward]", rewardText); }
descriptionWithoutReward = ReplaceVariablesInMissionMessage(description, sub, replaceReward: false);
description = ReplaceVariablesInMissionMessage(description, sub);
successMessage = ReplaceVariablesInMissionMessage(successMessage, sub);
failureMessage = ReplaceVariablesInMissionMessage(failureMessage, sub);
for (int m = 0; m < messages.Length; m++)
{
messages[m] = messages[m].Replace("[reward]", rewardText);
messages[m] = ReplaceVariablesInMissionMessage(messages[m], sub);
}
Messages = messages.ToImmutableArray();
}
public LocalizedString ReplaceVariablesInMissionMessage(LocalizedString message, Submarine sub, bool replaceReward = true)
{
for (int locationIndex = 0; locationIndex < 2; locationIndex++)
{
string locationName = $"‖color:gui.orange‖{Locations[locationIndex].DisplayName}‖end‖";
message = message.Replace("[location" + (locationIndex + 1) + "]", locationName);
}
if (replaceReward)
{
string rewardText = $"‖color:gui.orange‖{string.Format(CultureInfo.InvariantCulture, "{0:N0}", GetReward(sub))}‖end‖";
message = message.Replace("[reward]", rewardText);
}
return message;
}
public virtual void SetLevel(LevelData level) { }
public static Mission LoadRandom(Location[] locations, string seed, bool requireCorrectLocationType, MissionType missionType, bool isSinglePlayer = false)
@@ -254,11 +253,30 @@ namespace Barotrauma
return null;
}
public virtual int GetReward(Submarine sub)
/// <summary>
/// Calculates the base reward, can be overridden for different mission types
/// </summary>
public virtual int GetBaseReward(Submarine sub)
{
return Prefab.Reward;
}
/// <summary>
/// Calculates the available reward, taking into account universal modifiers such as campaign settings
/// </summary>
public int GetReward(Submarine sub)
{
int reward = GetBaseReward(sub);
// Some modifiers should apply universally to all implementations of GetBaseReward
if (GameMain.GameSession?.Campaign is CampaignMode campaign)
{
reward = (int)Math.Round(reward * campaign.Settings.MissionRewardMultiplier);
}
return reward;
}
public void Start(Level level)
{
state = 0;
@@ -353,7 +371,7 @@ namespace Barotrauma
}
if (GameMain.GameSession?.EventManager != null)
{
var newEvent = eventPrefab.CreateInstance();
var newEvent = eventPrefab.CreateInstance(GameMain.GameSession.EventManager.RandomSeed);
GameMain.GameSession.EventManager.ActivateEvent(newEvent);
}
}
@@ -455,9 +473,13 @@ namespace Barotrauma
foreach (var reputationReward in ReputationRewards)
{
var reputationGainMultiplier = new AbilityMissionReputationGainMultiplier(this, 1f, character: null);
foreach (var c in crewCharacters) { c.CheckTalents(AbilityEffectType.OnCrewGainMissionReputation, reputationGainMultiplier); }
float amount = reputationReward.Amount * reputationGainMultiplier.Value;
if (reputationReward.FactionIdentifier == "location")
{
OriginLocation.Reputation?.AddReputation(reputationReward.Amount);
OriginLocation.Reputation?.AddReputation(amount);
TryGiveReputationForOpposingFaction(OriginLocation.Faction, reputationReward.AmountForOpposingFaction);
}
else
@@ -465,7 +487,7 @@ namespace Barotrauma
Faction faction = campaign.Factions.Find(faction1 => faction1.Prefab.Identifier == reputationReward.FactionIdentifier);
if (faction != null)
{
faction.Reputation.AddReputation(reputationReward.Amount);
faction.Reputation.AddReputation(amount);
TryGiveReputationForOpposingFaction(faction, reputationReward.AmountForOpposingFaction);
}
}
@@ -664,5 +686,19 @@ namespace Barotrauma
public Mission Mission { get; set; }
public Character Character { get; set; }
}
class AbilityMissionReputationGainMultiplier : AbilityObject, IAbilityValue, IAbilityMission, IAbilityCharacter
{
public AbilityMissionReputationGainMultiplier(Mission mission, float reputationMultiplier, Character character)
{
Value = reputationMultiplier;
Mission = mission;
Character = character;
}
public float Value { get; set; }
public Mission Mission { get; set; }
public Character Character { get; set; }
}
}