Example #1
0
        public override void Init(Creature creature)
        {
            base.Init(creature);

            MoveController = new NpcMoveController(Npc);
            BattleController = new NpcBattleController(Npc);
        }
Example #2
0
 public SpNpcStatus(Npc npc, int unk1, int unk2, Creature target = null)
 {
     Npc = npc;
     Unk1 = unk1;
     Unk2 = unk2;
     Target = target;
 }
Example #3
0
 public Abnormal(Creature.Creature creature, Abnormality abnormality, Creature.Creature caster = null)
 {
     Creature = creature;
     Caster = caster ?? creature;
     Abnormality = abnormality;
     TimeoutUts = RandomUtilities.GetCurrentMilliseconds() + abnormality.Time;
 }
Example #4
0
 public void Release()
 {
     Creature = null;
     Npc = null;
     Projectile = null;
     TargetPosition = null;
 }
Example #5
0
        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);
        }
Example #6
0
 public virtual void Release()
 {
     Creature = null;
     Npc = null;
     Player = null;
     Random = null;
 }
Example #7
0
        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;
        }
Example #8
0
        public override void OnAttacked(Creature attacker, int damage)
        {
            Npc.Target = attacker;

            BattleController.AddDamage(attacker, damage);
            BattleController.AddAggro(attacker, damage);
        }
Example #9
0
        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))));
        }
Example #10
0
        public override void Init(Creature creature)
        {
            base.Init(creature);

            NextRegenUts = RandomUtilities.GetCurrentMilliseconds() + 1000;
            NextDistressUts = RandomUtilities.GetCurrentMilliseconds() + 60000;
            LastBattleUts = 0;
        }
Example #11
0
 public SpNpcMove(Creature creature, short speed, float x2, float y2, float z2)
 {
     Creature = creature;
     Speed = speed;
     X2 = x2;
     Y2 = y2;
     Z2 = z2;
 }
Example #12
0
        public static void OnAttack(Creature creature, Creature target)
        {
            creature.Ai.OnAttack(target);

            Player player = creature as Player;
            if (player != null)
                ObserverService.AddObserved(player, target);
        }
Example #13
0
        public NpcMoveController(Creature creature)
        {
            Creature = creature;
            Npc = creature as Npc;
            Projectile = creature as Projectile;

            TargetPosition = new Point3D();
            MoveVector = new Point3D();
        }
Example #14
0
        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);
            }
        }
Example #15
0
        public static void UpdateCreatureStats(Creature creature)
        {
            StatsService.UpdateStats(creature);

            Player player = creature as Player;
            if (player != null)
            {
                FeedbackService.StatsUpdated(player);
            }
        }
Example #16
0
        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);
        }
Example #17
0
        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));
        }
Example #18
0
        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;
        }
Example #19
0
        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;
        }
Example #20
0
        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);
        }
Example #21
0
        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;
        }
Example #22
0
        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;
        }
Example #23
0
        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);
            }
        }
Example #24
0
        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();
        }
Example #25
0
        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();
        }
Example #26
0
        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);
        }
Example #27
0
        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);
            }
        }
Example #28
0
        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);
            }
        }
Example #29
0
        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();
        }
Example #30
0
 public SpRemoveHpBar(Creature creature)
 {
     Creature = creature;
 }