Remove AttackSuicides trait.
This commit is contained in:
@@ -288,7 +288,6 @@
|
|||||||
<Compile Include="Traits\Attack\AttackFrontal.cs" />
|
<Compile Include="Traits\Attack\AttackFrontal.cs" />
|
||||||
<Compile Include="Traits\Attack\AttackGarrisoned.cs" />
|
<Compile Include="Traits\Attack\AttackGarrisoned.cs" />
|
||||||
<Compile Include="Traits\Attack\AttackOmni.cs" />
|
<Compile Include="Traits\Attack\AttackOmni.cs" />
|
||||||
<Compile Include="Traits\Attack\AttackSuicides.cs" />
|
|
||||||
<Compile Include="Traits\Attack\AttackTurreted.cs" />
|
<Compile Include="Traits\Attack\AttackTurreted.cs" />
|
||||||
<Compile Include="Traits\AttackWander.cs" />
|
<Compile Include="Traits\AttackWander.cs" />
|
||||||
<Compile Include="Traits\AutoTarget.cs" />
|
<Compile Include="Traits\AutoTarget.cs" />
|
||||||
@@ -599,6 +598,7 @@
|
|||||||
<Compile Include="Traits\World\ActorSpawnManager.cs" />
|
<Compile Include="Traits\World\ActorSpawnManager.cs" />
|
||||||
<Compile Include="Traits\ActorSpawner.cs" />
|
<Compile Include="Traits\ActorSpawner.cs" />
|
||||||
<Compile Include="UpdateRules\Rules\20181215\RemoveAttackIgnoresVisibility.cs" />
|
<Compile Include="UpdateRules\Rules\20181215\RemoveAttackIgnoresVisibility.cs" />
|
||||||
|
<Compile Include="UpdateRules\Rules\20181215\RemoveAttackSuicides.cs" />
|
||||||
<Compile Include="UpdateRules\Rules\20181215\RemovedDemolishLocking.cs" />
|
<Compile Include="UpdateRules\Rules\20181215\RemovedDemolishLocking.cs" />
|
||||||
<Compile Include="UpdateRules\Rules\20181215\RemoveNegativeDamageFullHealthCheck.cs" />
|
<Compile Include="UpdateRules\Rules\20181215\RemoveNegativeDamageFullHealthCheck.cs" />
|
||||||
<Compile Include="UpdateRules\Rules\20181215\RemoveResourceExplodeModifier.cs" />
|
<Compile Include="UpdateRules\Rules\20181215\RemoveResourceExplodeModifier.cs" />
|
||||||
|
|||||||
@@ -1,98 +0,0 @@
|
|||||||
#region Copyright & License Information
|
|
||||||
/*
|
|
||||||
* Copyright 2007-2019 The OpenRA Developers (see AUTHORS)
|
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
|
||||||
* available to you under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation, either version 3 of
|
|
||||||
* the License, or (at your option) any later version. For more
|
|
||||||
* information, see COPYING.
|
|
||||||
*/
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using OpenRA.Activities;
|
|
||||||
using OpenRA.Mods.Common.Orders;
|
|
||||||
using OpenRA.Primitives;
|
|
||||||
using OpenRA.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Traits
|
|
||||||
{
|
|
||||||
[Desc("Does a suicide attack where it moves next to the target when used in combination with `Explodes`.")]
|
|
||||||
class AttackSuicidesInfo : ConditionalTraitInfo, Requires<IMoveInfo>
|
|
||||||
{
|
|
||||||
[Desc("Types defined by `Targetable:` trait that this actor can target.")]
|
|
||||||
public readonly BitSet<TargetableType> TargetTypes = new BitSet<TargetableType>("DetonateAttack");
|
|
||||||
|
|
||||||
[Desc("Types of damage that this trait causes to self while suiciding. Leave empty for no damage types.")]
|
|
||||||
public readonly BitSet<DamageType> DamageTypes = default(BitSet<DamageType>);
|
|
||||||
|
|
||||||
[VoiceReference] public readonly string Voice = "Action";
|
|
||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new AttackSuicides(init.Self, this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
class AttackSuicides : ConditionalTrait<AttackSuicidesInfo>, IIssueOrder, IResolveOrder, IOrderVoice, IIssueDeployOrder
|
|
||||||
{
|
|
||||||
readonly IMove move;
|
|
||||||
|
|
||||||
public AttackSuicides(Actor self, AttackSuicidesInfo info)
|
|
||||||
: base(info)
|
|
||||||
{
|
|
||||||
move = self.Trait<IMove>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<IOrderTargeter> Orders
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (IsTraitDisabled)
|
|
||||||
yield break;
|
|
||||||
|
|
||||||
yield return new TargetTypeOrderTargeter(Info.TargetTypes, "DetonateAttack", 5, "attack", true, false) { ForceAttack = false };
|
|
||||||
yield return new DeployOrderTargeter("Detonate", 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
|
||||||
{
|
|
||||||
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, target, queued);
|
|
||||||
}
|
|
||||||
|
|
||||||
Order IIssueDeployOrder.IssueDeployOrder(Actor self, bool queued)
|
|
||||||
{
|
|
||||||
return new Order("Detonate", self, queued);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; }
|
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
|
||||||
{
|
|
||||||
return Info.Voice;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ResolveOrder(Actor self, Order order)
|
|
||||||
{
|
|
||||||
if (order.OrderString == "DetonateAttack")
|
|
||||||
{
|
|
||||||
var target = self.ResolveFrozenActorOrder(order, Color.Red);
|
|
||||||
if (target.Type != TargetType.Actor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!order.Queued)
|
|
||||||
self.CancelActivity();
|
|
||||||
|
|
||||||
self.SetTargetLine(target, Color.Red);
|
|
||||||
|
|
||||||
self.QueueActivity(move.MoveToTarget(self, target, targetLineColor: Color.Red));
|
|
||||||
|
|
||||||
self.QueueActivity(new CallFunc(() => self.Kill(self, Info.DamageTypes)));
|
|
||||||
}
|
|
||||||
else if (order.OrderString == "Detonate")
|
|
||||||
self.Kill(self, Info.DamageTypes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2018 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation, either version 3 of
|
||||||
|
* the License, or (at your option) any later version. For more
|
||||||
|
* information, see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.UpdateRules.Rules
|
||||||
|
{
|
||||||
|
public class RemoveAttackSuicides : UpdateRule
|
||||||
|
{
|
||||||
|
public override string Name { get { return "AttackSuicides trait has been removed."; } }
|
||||||
|
public override string Description
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return "The AttackSuicides trait has been removed, and should be replaced by\n" +
|
||||||
|
"AttackFrontal + GrantConditionOnAttack + GrantConditionOnDeploy + a dummy\n" +
|
||||||
|
"weapon for targeting. Affected actors are listed so that these traits can be defined.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly List<string> locations = new List<string>();
|
||||||
|
|
||||||
|
public override IEnumerable<string> AfterUpdate(ModData modData)
|
||||||
|
{
|
||||||
|
if (locations.Any())
|
||||||
|
yield return "The AttackSuicides trait has been removed from the following actors.\n" +
|
||||||
|
"You must manually define AttackFrontal, GrantConditionOnAttack, GrantConditionOnDeploy\n" +
|
||||||
|
"traits and create a dummy weapon to use for targeting:\n" +
|
||||||
|
UpdateUtils.FormatMessageList(locations);
|
||||||
|
|
||||||
|
locations.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode)
|
||||||
|
{
|
||||||
|
if (actorNode.RemoveNodes("AttackSuicides") > 0)
|
||||||
|
locations.Add("{0} ({1})".F(actorNode.Key, actorNode.Location.Filename));
|
||||||
|
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -86,7 +86,7 @@ namespace OpenRA.Mods.Common.UpdateRules
|
|||||||
|
|
||||||
new UpdatePath("release-20180923", "release-20181215", new UpdateRule[0]),
|
new UpdatePath("release-20180923", "release-20181215", new UpdateRule[0]),
|
||||||
|
|
||||||
new UpdatePath("release-20181215", new UpdateRule[]
|
new UpdatePath("release-20181215", "playtest-20190106", new UpdateRule[]
|
||||||
{
|
{
|
||||||
// Bleed only changes here
|
// Bleed only changes here
|
||||||
new AddCarryableHarvester(),
|
new AddCarryableHarvester(),
|
||||||
@@ -113,6 +113,11 @@ namespace OpenRA.Mods.Common.UpdateRules
|
|||||||
new RemoveAttackIgnoresVisibility(),
|
new RemoveAttackIgnoresVisibility(),
|
||||||
new ReplacedWithChargeAnimation(),
|
new ReplacedWithChargeAnimation(),
|
||||||
new RefactorResourceLevelAnimating(),
|
new RefactorResourceLevelAnimating(),
|
||||||
|
}),
|
||||||
|
|
||||||
|
new UpdatePath("playtest-20190106", new UpdateRule[]
|
||||||
|
{
|
||||||
|
new RemoveAttackSuicides(),
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user