v1.4.4.1 (Blood in the Water Update)
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user