protected override void TickCore(Entity host, RealmTime time, ref object state) { var cool = (int) state; if (cool <= 0) { if (host.HasConditionEffect(ConditionEffects.Stunned)) return; foreach (Enemy entity in host.GetNearestEntitiesByGroup(range, group).OfType<Enemy>()) { int newHp = entity.ObjectDesc.MaxHP; if (newHp != entity.HP) { int n = newHp - entity.HP; entity.HP = newHp; entity.UpdateCount++; entity.Owner.BroadcastPacket(new ShowEffectPacket { EffectType = EffectType.Potion, TargetId = entity.Id, Color = new ARGB(0xffffffff) }, null); entity.Owner.BroadcastPacket(new ShowEffectPacket { EffectType = EffectType.Trail, TargetId = host.Id, PosA = new Position {X = entity.X, Y = entity.Y}, Color = new ARGB(0xffffffff) }, null); entity.Owner.BroadcastPacket(new NotificationPacket { ObjectId = entity.Id, Text = "+" + n, Color = new ARGB(0xff00ff00) }, null); } } cool = coolDown.Next(Random); } else cool -= time.thisTickTimes; state = cool; }
public static Entity GetNearestEntityByGroup(this Entity entity, double dist, string group) { return(entity.GetNearestEntitiesByGroup(dist, group).FirstOrDefault()); }
protected override void TickCore(Entity host, RealmTime time, ref object state) { int cool = (int)state; if (cool <= 0) { if (group == "Self") { Enemy entity = host as Enemy; int newHp = amount; if (newHp != entity.HP) { int n = newHp; entity.HP = entity.HP + newHp; entity.UpdateCount++; entity.Owner.BroadcastPacket(new ShowEffectPacket { EffectType = EffectType.Potion, TargetId = entity.Id, Color = new ARGB(0xffffffff) }, null); entity.Owner.BroadcastPacket(new NotificationPacket { ObjectId = entity.Id, Text = "{\"key\":\"blank\",\"tokens\":{\"data\":\"+" + n + "\"}}", Color = new ARGB(0xff00ff00) }, null); } } else { foreach (Enemy entity in host.GetNearestEntitiesByGroup(range, group).OfType<Enemy>()) { int newHp = amount; if (newHp != entity.HP) { int n = newHp; entity.HP = entity.HP + newHp; entity.UpdateCount++; entity.Owner.BroadcastPacket(new ShowEffectPacket { EffectType = EffectType.Potion, TargetId = entity.Id, Color = new ARGB(0xffffffff) }, null); entity.Owner.BroadcastPacket(new ShowEffectPacket { EffectType = EffectType.Trail, TargetId = host.Id, PosA = new Position { X = entity.X, Y = entity.Y }, Color = new ARGB(0xffffffff) }, null); entity.Owner.BroadcastPacket(new NotificationPacket { ObjectId = entity.Id, Text = "{\"key\":\"blank\",\"tokens\":{\"data\":\"+" + n + "\"}}", Color = new ARGB(0xff00ff00) }, null); } } } cool = coolDown.Next(Random); } else cool -= time.thisTickTimes; state = cool; }