public override void Init(Creature creature) { base.Init(creature); MoveController = new NpcMoveController(Npc); BattleController = new NpcBattleController(Npc); }
public SpNpcStatus(Npc npc, int unk1, int unk2, Creature target = null) { Npc = npc; Unk1 = unk1; Unk2 = unk2; Target = target; }
public Abnormal(Creature.Creature creature, Abnormality abnormality, Creature.Creature caster = null) { Creature = creature; Caster = caster ?? creature; Abnormality = abnormality; TimeoutUts = RandomUtilities.GetCurrentMilliseconds() + abnormality.Time; }
public void Release() { Creature = null; Npc = null; Projectile = null; TargetPosition = null; }
public static float CheckIntersections(Creature creature, short heading, Point3D moveVector, float distance) { if (distance <= 0f) return 0f; WorldPosition targetPosition = moveVector.Clone().Add(creature.Position).ToWorldPosition(); double minDistance = distance; List<Creature> around = Global.VisibleService.FindTargets(creature, creature.Position, distance + 40, TargetingAreaType.All); for (int x = 0; x < around.Count; x++) { if (around[x] == creature) continue; short diff = Geom.GetAngleDiff(heading, Geom.GetHeading(creature.Position, around[x].Position)); if (diff > 90) continue; double d = Geom.DistanceToLine(around[x].Position, creature.Position, targetPosition); if (d > 40) continue; d = creature.Position.DistanceTo(around[x].Position) - 40; if (d <= 0) return 0f; if (d < minDistance) minDistance = d; } return (float)(minDistance / distance); }
public virtual void Release() { Creature = null; Npc = null; Player = null; Random = null; }
public static bool IsVisible(Player player, Creature creature) { if (creature is Player && !Communication.Global.PlayerService.IsPlayerOnline((Player)creature)) return false; if (creature == null) return false; if (!(creature is Item) && !(creature is Gather) && !(creature is Campfire) && creature.LifeStats.IsDead()) return false; if (creature is Gather && ((Gather)creature).CurrentGatherCounter <= 0) return false; double distance = player.Position.DistanceTo(creature.Position); if (distance > VisibleDistance) return false; if (creature is Npc && distance < 75) creature.Position.Z = player.Position.Z + 25; PlayerLogic.DistanceToCreatureRecalculated(player, creature, distance); return true; }
public override void OnAttacked(Creature attacker, int damage) { Npc.Target = attacker; BattleController.AddDamage(attacker, damage); BattleController.AddAggro(attacker, damage); }
public virtual void Init(Creature creature) { Creature = creature; Npc = creature as Npc; Player = creature as Player; Random = new Random((int) (DateTime.Now.Ticks + RandomUtilities.Random().Next(int.MinValue, (int) Math.Abs(creature.Position.X)))); }
public override void Init(Creature creature) { base.Init(creature); NextRegenUts = RandomUtilities.GetCurrentMilliseconds() + 1000; NextDistressUts = RandomUtilities.GetCurrentMilliseconds() + 60000; LastBattleUts = 0; }
public SpNpcMove(Creature creature, short speed, float x2, float y2, float z2) { Creature = creature; Speed = speed; X2 = x2; Y2 = y2; Z2 = z2; }
public static void OnAttack(Creature creature, Creature target) { creature.Ai.OnAttack(target); Player player = creature as Player; if (player != null) ObserverService.AddObserved(player, target); }
public NpcMoveController(Creature creature) { Creature = creature; Npc = creature as Npc; Projectile = creature as Projectile; TargetPosition = new Point3D(); MoveVector = new Point3D(); }
public static void MpChanged(Creature creature, int diff, Creature attacker = null) { ObserverService.NotifyMpChanged(creature); if (creature is Player) { FeedbackService.MpChanged(creature as Player, diff, attacker); PartyService.SendLifestatsToPartyMembers(((Player)creature).Party); } }
public static void UpdateCreatureStats(Creature creature) { StatsService.UpdateStats(creature); Player player = creature as Player; if (player != null) { FeedbackService.StatsUpdated(player); } }
public override void OnAttack(Creature target) { if (Player.Controller is DeathController) return; if (!(Player.Controller is BattleController)) Global.ControllerService.SetController(Player, new BattleController()); ((BattleController) Player.Controller).AddTarget(target); }
public void Send(Creature creature, ISendPacket packet) { Player player = creature as Player; if (player != null) { if (player.Connection != null) packet.Send(player.Connection); } creature.VisiblePlayers.Each(p => packet.Send(p.Connection)); }
public void RemoveObserved(Player player, Creature creature) { if (player == creature) return; if (!creature.ObserversList.Contains(player)) return; creature.ObserversList.Remove(player); new SpRemoveHpBar(creature).Send(player); if (player.ObservedCreature == creature) player.ObservedCreature = null; }
public override void Init(Creature creature) { base.Init(creature); Projectile = (Projectile) creature; if (Projectile.TargetPosition != null) { MoveController = new NpcMoveController(creature); MoveController.MoveTo(Projectile.TargetPosition); } DieUts = RandomUtilities.GetCurrentMilliseconds() + Projectile.Lifetime; }
public void ResetChanges(Creature creature) { IsBlockFrontAttacks = false; //Power ChangeOfPower = 0; //Endurance ChangeOfEndurance = 0; //ImpactFactor ChangeOfImpactFactor = 0; //BalanceFactor ChangeOfBalanceFactor = 0; //Movement ChangeOfMovement = 0; MovementModificator = 0; MovementPercentModificator = 0; //AttackSpeed ChangeOfAttackSpeed = 0; AttackSpeedModificator = 0; AttackSpeedPercentModificator = 0; Player.Player player = creature as Player.Player; if (player != null) { MovementModificator += player.MovementByAdminCommand; if (player.PlayerMode != PlayerMode.Armored && player.PlayerMount == 0) MovementModificator += (short) (170 - player.GameStats.Movement); if (player.Attack != null && !player.Attack.IsFinished && player.Attack.Args.GetSkill(player).BaseId == 20100 && (player.PlayerData.Class == PlayerClass.Berserker || player.PlayerData.Class == PlayerClass.Lancer)) { IsBlockFrontAttacks = true; } } creature.Effects.ForEach(effect => effect.SetImpact(this)); ChangeOfMovement = (short)(MovementModificator + creature.GameStats.Movement * MovementPercentModificator); ChangeOfAttackSpeed = (short)(AttackSpeedModificator + creature.GameStats.AttackSpeed * AttackSpeedPercentModificator); }
public List<Creature> FindTargets(Creature creature, float x, float y, float z, double distance, TargetingAreaType type) { List<Creature> finded = new List<Creature>(); switch (type) { case TargetingAreaType.Me: finded.Add(creature); break; case TargetingAreaType.EnemyOrPvP: case TargetingAreaType.Enemy: if (creature is Player) { finded.AddRange(FindNpcs(creature, x, y, z, distance)); finded.AddRange(FindPlayers(creature, x, y, z, distance)); } else finded.AddRange(FindPlayers(creature, x, y, z, distance)); break; case TargetingAreaType.PvP: break; case TargetingAreaType.AllIncludeVillager: finded.Add(creature); finded.AddRange(FindNpcs(creature, x, y, z, distance, true)); finded.AddRange(FindPlayers(creature, x, y, z, distance)); break; case TargetingAreaType.All: finded.Add(creature); finded.AddRange(FindNpcs(creature, x, y, z, distance)); finded.AddRange(FindPlayers(creature, x, y, z, distance)); break; case TargetingAreaType.AllyOnDeath: case TargetingAreaType.AllyVillager: case TargetingAreaType.Ally: case TargetingAreaType.Party: case TargetingAreaType.AllyExceptMe: case TargetingAreaType.PartyExceptMe: break; case TargetingAreaType.AllExceptMe: finded.AddRange(FindNpcs(creature, x, y, z, distance)); finded.AddRange(FindPlayers(creature, x, y, z, distance)); break; case TargetingAreaType.No: return finded; } return finded; }
public SpAttackResult(Creature creature, int skillId, AttackResult atk) { Creature = creature; Target = atk.Target; SkillId = skillId; AttackUid = atk.AttackUid; AttackType = atk.AttackType.GetHashCode(); Damage = atk.Damage; VisualEffect = atk.VisualEffect; if (VisualEffect != null) AttackType |= 1 << 24; }
public void AddObserved(Player player, Creature creature) { if (player == creature) return; if (creature.ObserversList.Contains(player)) return; creature.ObserversList.Add(player); if (player.ObservedCreature == null) { player.ObservedCreature = creature; new DelayedAction(() => new SpNpcHpWindow(creature).Send(player.Connection), 1000); } }
public IAi CreateAi(Creature creature) { if (creature is Player) return new PlayerAi(); if (creature is Npc) return new NpcAi(); if (creature is Projectile) return new ProjectileAi(); if (creature is Gather) return new GatherAi(); return new DefaultAi(); }
public CreatureBaseStats InitStats(Creature creature) { Player player = creature as Player; if (player != null) { return GetBaseStats(player).Clone(); } Npc npc = creature as Npc; if (npc != null) { return NpcStats[npc.NpcTemplate.HuntingZoneId][npc.NpcTemplate.Id].Clone(); } Logger.WriteLine(LogState.Error,"StatsService: Unknown type: {0}.", creature.GetType().Name); return new CreatureBaseStats(); }
public void UpdateStats(Creature creature) { Player player = creature as Player; if (player != null) { UpdatePlayerStats(player); return; } Npc npc = creature as Npc; if (npc != null) { UpdateNpcStats(npc); return; } Logger.WriteLine(LogState.Error,"StatsService: Unknown type: {0}.", creature.GetType().Name); }
public void AddTarget(Creature creature) { lock (TargetsLock) { if (Targets == null) Targets = new Dictionary<Creature, long>(); if (!Targets.ContainsKey(creature)) { Targets.Add(creature, RandomUtilities.GetCurrentMilliseconds()); if (Targets.Count == 1) SystemMessages.BattleBegan.Send(Player.Connection); } else UpdateTarget(creature); } }
public void AddAbnormality(Creature target, int id, Creature caster = null) { if (id == 0) return; lock (target.EffectsLock) { for (int i = 0; i < target.Effects.Count; i++) { if (target.Effects[i].Abnormality.Id == id) { ReleaseAbnormal(target.Effects[i]); break; } } } Abnormal abnormal = new Abnormal(target, Data.Data.Abnormalities[id], caster); lock (target.EffectsLock) { target.Effects.Add(abnormal); } EffectsProvider.ProvideEffects(abnormal); Player player = target as Player; if (abnormal.Effects.Count == 0 && player != null && player.AccountName.Equals("alehandr", StringComparison.OrdinalIgnoreCase)) { new SpChatMessage("Unknown effects for abnormality: " + id, ChatType.System).Send(player); } Global.VisibleService.Send(target, new SpAbnormal(abnormal)); if (player != null) Global.PartyService.SendEffectsToPartyMembers(player.Party); lock (AbnormalsLock) { Abnormals.Add(abnormal); } }
public override void Release() { if (ObserversList != null) ObserversList.Clear(); ObserversList = null; VisiblePlayers = null; VisibleNpcs = null; VisibleItems = null; VisibleGathers = null; if (Ai != null) Ai.Release(); Ai = null; if (_lifeStats != null) _lifeStats.Release(); _lifeStats = null; GameStats = null; Position = null; BindPoint = null; Instance = null; Target = null; if (VisualEffect != null) VisualEffect.Release(); VisualEffect = null; if (Effects != null) for (int i = 0; i < Effects.Count; i++) Effects[i].Release(); Effects = null; EffectsLock = null; base.Release(); }
public SpRemoveHpBar(Creature creature) { Creature = creature; }