Necromancer.cs - command skeletons (done RuneA - RuneD, missing RuneC now). Needs further testing in regards to functionality, I think it's not freezing the target yet???

This commit is contained in:
Lucca Faria Ferri 2023-01-29 18:32:43 -08:00
parent 16ae7fd2b6
commit 1587c02f54
3 changed files with 116 additions and 17 deletions

View File

@ -3255,6 +3255,23 @@ public class Player : Actor, IMessageConsumer, IUpdateable
if (ActiveSkeletons) if (ActiveSkeletons)
{ {
if (Followers.All(s => s.Value != ActorSno._p6_necro_commandskeletons_a) && NecroSkeletons.Any())
{
foreach (var skel in NecroSkeletons)
{
try
{
InGameClient.SendMessage(new PetDetachMessage()
{
PetId = skel.GlobalID
});
World.Leave(skel);
}
catch{}
}
NecroSkeletons.Clear();
}
while (NecroSkeletons.Count < 7) while (NecroSkeletons.Count < 7)
{ {
var Skeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this); var Skeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this);

View File

@ -17,6 +17,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet;
namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
{ {
@ -1983,14 +1985,42 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
User.PlayEffect(Effect.PlayEffectGroup, 466026); User.PlayEffect(Effect.PlayEffectGroup, 466026);
if (Target != null) if (Target != null)
{ {
DamageType damageType = DamageType.Physical;
bool greaterDamage = false;
// Enforcer
if (Rune_A > 0) if (Rune_A > 0)
{
}
// Frenzy
else if (Rune_B > 0)
{
UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); UsePrimaryResource(EvalTag(PowerKeys.ResourceCost));
UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); }
// Dark Mending
else if (Rune_C > 0)
{
UsePrimaryResource(EvalTag(PowerKeys.ResourceCost));
damageType = DamageType.Cold;
}
// Freezing Grasp
else if (Rune_D > 0)
{
UsePrimaryResource(EvalTag(PowerKeys.ResourceCost));
damageType = DamageType.Poison;
}
else if (Rune_E > 0)
{
UsePrimaryResource(EvalTag(PowerKeys.ResourceCost));
greaterDamage = true;
damageType = DamageType.Poison;
Logger.Warn("Rune E not implemented for Necromancer's Command Skeletons");
}
foreach (var Skelet in (User as PlayerSystem.Player).NecroSkeletons) foreach (var skeleton in ((Player)User).NecroSkeletons)
{ {
//User.PlayEffectGroup(474172); //User.PlayEffectGroup(474172);
ActorMover mover = new ActorMover(Skelet); ActorMover mover = new ActorMover(skeleton);
mover.MoveArc(Target.Position, 6, -0.1f, new ACDTranslateArcMessage mover.MoveArc(Target.Position, 6, -0.1f, new ACDTranslateArcMessage
{ {
//Field3 = 303110, // used for male barb leap, not needed? //Field3 = 303110, // used for male barb leap, not needed?
@ -1999,13 +2029,65 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
Gravity = 0.6f, Gravity = 0.6f,
PowerSNO = PowerSNO PowerSNO = PowerSNO
}); });
Skelet.Position = Target.Position; skeleton.Position = Target.Position;
Skelet.PlayEffectGroup(474172); skeleton.SetVisible(true);
skeleton.Hidden = false;
skeleton.PlayEffectGroup(474172);
AttackPayload attack = new AttackPayload(this)
WeaponDamage(Target, 0.50f, DamageType.Physical); {
Target = Target
};
attack.AddWeaponDamage(greaterDamage ? skeleton.Attributes[GameAttribute.Damage_Min, 0] * 2.15f : skeleton.Attributes[GameAttribute.Damage_Min, 0], damageType);
attack.OnHit = hit =>
{
if (Rune_C > 0)
{
if (!HasBuff<DebuffFrozen>(hit.Target))
{
AddBuff(hit.Target, new DebuffFrozen(WaitSeconds(3.0f)));
}
}
};
attack.Apply();
//AddBuff(Target, new DebuffStunned(WaitSeconds(0.3f))); //AddBuff(Target, new DebuffStunned(WaitSeconds(0.3f)));
} }
// var player = (Player)User;
// if (player.ActiveSkeletons)
// {
// while (player.NecroSkeletons.Count < 7)
// {
// var skeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, player);
// skeleton.Brain.DeActivate();
// skeleton.Scale = 1.2f;
//
// skeleton.EnterWorld(PowerContext.RandomDirection(player.Position, 3f, 8f));
// player.NecroSkeletons.Add(skeleton);
// /*this.InGameClient.SendMessage(new PetMessage()
// {
// Owner = this.PlayerIndex,
// Index = this.CountFollowers(473147),
// PetId = Skeleton.DynamicID(this),
// Type = 70,
// });
// //*/
// skeleton.Brain.Activate();
// }
// }
// else
// {
// foreach (var skel in player.NecroSkeletons)
// {
// player.InGameClient.SendMessage(new PetDetachMessage()
// {
// PetId = skel.GlobalID
// });
// World.Leave(skel);
// }
//
// player.NecroSkeletons.Clear();
// }
} }
yield break; yield break;
} }

View File

@ -109,34 +109,34 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem
public void GeneratePrimaryResource(float amount) public void GeneratePrimaryResource(float amount)
{ {
if (User is Player) if (User is Player player)
{ {
(User as Player).GeneratePrimaryResource(amount); player.GeneratePrimaryResource(amount);
} }
} }
public void UsePrimaryResource(float amount) public void UsePrimaryResource(float amount)
{ {
if (User is Player) if (User is Player player)
{ {
if (User.Attributes[GameAttribute.Free_Cast_All] != true) if (player.Attributes[GameAttribute.Free_Cast_All] != true)
(User as Player).UsePrimaryResource(amount - User.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]); player.UsePrimaryResource(amount - player.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]);
} }
} }
public void GenerateSecondaryResource(float amount) public void GenerateSecondaryResource(float amount)
{ {
if (User is Player) if (User is Player player)
{ {
(User as Player).GenerateSecondaryResource(amount); player.GenerateSecondaryResource(amount);
} }
} }
public void UseSecondaryResource(float amount) public void UseSecondaryResource(float amount)
{ {
if (User is Player) if (User is Player player)
{ {
(User as Player).UseSecondaryResource(amount - User.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]); player.UseSecondaryResource(amount - player.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]);
} }
} }
@ -275,7 +275,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem
get get
{ {
if (World.IsPvP) if (World.IsPvP)
return (actor) => ((actor is Player && actor.GlobalID != User.GlobalID) || (actor is Minion && actor.GlobalID != User.GlobalID && (actor as Minion).Master.GlobalID != User.GlobalID)); return (actor) => ((actor is Player && actor.GlobalID != User.GlobalID) || (actor is Minion minion && minion.GlobalID != User.GlobalID && minion.Master.GlobalID != User.GlobalID));
else else
{ {
if (User is Player || User is Minion || User is Hireling || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1) || User.SNO == ActorSno._pt_blacksmith_nonvendor || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1)) if (User is Player || User is Minion || User is Hireling || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1) || User.SNO == ActorSno._pt_blacksmith_nonvendor || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1))