示例#1
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void AttackSkillAoE(ushort skillid, uint X, uint Y)
        {
            base.AttackSkillAoE(skillid, X, Y); // lol

            if (AttackingSequence != null)
            {
                return;
            }
            AttackingSequence = new AttackSequence(this, 0, InfoServer.Str, skillid, X, Y);
        }
示例#2
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void AttackSkill(ushort skillid, MapObject victim)
        {
            base.AttackSkill(skillid, victim); // lol

            if (AttackingSequence != null)
            {
                return;
            }
            AttackingSequence = new AttackSequence(this, victim, 0, InfoServer.Str, skillid, true);
            Target            = victim;
        }
示例#3
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void Attack(MapObject victim)
        {
            base.Attack(victim); // lol

            if (AttackingSequence != null)
            {
                return;
            }
            AttackingSequence = new AttackSequence(this, victim, 0, InfoServer.Str, 1400);
            Target            = victim;
        }
示例#4
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public void Die()
        {
            HP                = 0;
            Moving            = false;
            boundryLT         = null;
            boundryRB         = null;
            AttackingSequence = null;
            Target            = null;
            DeathTriggered    = true;

            if (Spawnplace != null)
            {
                Spawnplace.CurrentMobs--;
            }
            _nextUpdate = Program.CurrentTime.AddSeconds(3);
        }
示例#5
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void AttackSkillAoE(ushort skillid, uint X, uint Y)
        {
            base.AttackSkillAoE(skillid, X, Y); // lol

            if (AttackingSequence != null) return;
            AttackingSequence = new AttackSequence(this, 0, InfoServer.Str, skillid, X, Y);
        }
示例#6
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void AttackSkill(ushort skillid, MapObject victim)
        {
            base.AttackSkill(skillid, victim); // lol

            if (AttackingSequence != null) return;
            AttackingSequence = new AttackSequence(this, victim, 0, InfoServer.Str, skillid, true);
            Target = victim;
        }
示例#7
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void Attack(MapObject victim)
        {
            base.Attack(victim); // lol

            if (AttackingSequence != null) return;
            AttackingSequence = new AttackSequence(this, victim, 0, InfoServer.Str, 1400);
            Target = victim;
        }
示例#8
0
 public void AttackStop()
 {
     if (IsAttacking)
     {
         AttackingSequence = null;
     }
 }
示例#9
0
        public override void AttackSkillAoE(ushort skillid, uint x, uint y)
        {
            if (IsAttacking) return;

            ushort attackspeed = 1200;
            Equip weapon;
            EquippedItems.TryGetValue(ItemSlot.Weapon, out weapon);
            uint dmgmin = (uint)GetExtraStr();
            uint dmgmax = (uint)(GetExtraStr() + (GetExtraStr() % 3));
            if (weapon != null)
            {
                attackspeed = weapon.Info.AttackSpeed;
                dmgmin += weapon.Info.MinMelee;
                dmgmax += weapon.Info.MaxMelee;
            }

            AttackingSequence = new AttackSequence(this, dmgmin, dmgmax, skillid, x, y);
        }
示例#10
0
        public override void AttackSkill(ushort skillid, MapObject victim)
        {
            if (victim == null)
            {
                victim = SelectedObject;
            }

            if (IsAttacking || victim == null || !victim.IsAttackable) return;

            ushort attackspeed = 1200;
            Equip weapon;
            EquippedItems.TryGetValue(ItemSlot.Weapon, out weapon);
            uint dmgmin = (uint)GetWeaponDamage(true);
            uint dmgmax = (uint)(GetWeaponDamage(true) + (GetWeaponDamage(true) % 3));
            if (weapon != null)
            {
                attackspeed = weapon.Info.AttackSpeed;
                dmgmin += weapon.Info.MinMelee;
                dmgmax += weapon.Info.MaxMelee;
            }

            AttackingSequence = new AttackSequence(this, victim, dmgmin, dmgmax, skillid, true);
        }
示例#11
0
        public override void Update(DateTime date)
        {
            if (AttackingSequence != null)
            {
                AttackingSequence.Update(date);
                if (AttackingSequence.State == AttackSequence.AnimationState.Ended)
                {
                    AttackingSequence = null;
                }
            }

            if (SelectedObject != null)
            {
                if (SelectedObject is Mob)
                {
                    if ((SelectedObject as Mob).IsDead) SelectedObject = null; // Stop the reference ffs
                }
            }

            if (State == PlayerState.Resting)
            {
                if (date >= NextHPRest)
                {
                    HealHP((uint)(MaxHP / 1000 * House.Info.HPRecovery));
                    //TODO: also show this to people who have me selected.
                    NextHPRest = date.AddMilliseconds(House.Info.HPTick);
                }
                if (date >= NextSPRest)
                {
                    HealSP((uint)(MaxSP / 1000 * House.Info.SPRecovery));
                    //TODO: also show this to people who have me selected.
                    NextSPRest = date.AddMilliseconds(House.Info.SPTick);
                }
            }
        }
示例#12
0
文件: Mob.cs 项目: Canic/Zepheus_2k15
        public override void Update(DateTime date)
        {
            if (Position == null)
            {
                return;
            }

            if (IsDead)
            {
                if (!DeathTriggered)
                {
                    Die();
                    return; // Wait till 3 seconds are over, then remove
                }
                else if (_nextUpdate <= date)
                {
                    Map.RemoveObject(this.MapObjectID);
                    Position = null;
                    return;
                }
                return;
            }

            if (AttackingSequence != null && Target != null)
            {
                if (Vector2.Distance(Target.Position, Position) < 50)
                {
                    AttackingSequence.Update(date);
                    if (AttackingSequence.State == AttackSequence.AnimationState.Ended)
                    {
                        AttackingSequence = null;
                        Target            = null;
                    }
                }
                else
                {
                    _nextUpdate = _nextUpdate.AddDays(-1);
                }
            }

            if (_nextUpdate > date)
            {
                return;
            }


            if (Target != null)
            {
                _nextUpdate = Program.CurrentTime.AddSeconds(1);

                // Try to move to target's pos
                // Might glitch the f**k out. lol
                if (Target.Map != Map)
                {
                    Target = null; // Stop aggro-ing >:(
                }
                else
                {
                    if (Vector2.Distance(Target.Position, Position) < 800)
                    {
                        if (Map.Block.CanWalk(Target.Position.X, Target.Position.Y))
                        {
                            Move(Position.X, Position.Y, Target.Position.X, Target.Position.Y, false, false);
                        }
                    }
                    else
                    {
                        Target = null; // Stop aggro-ing >:(
                    }
                }
                return;
            }
            else
            {
                _nextUpdate = Program.CurrentTime.AddSeconds(Program.Randomizer.Next(10, 60)); // Around 10 seconds to 1 minute before new movement is made

                // Move to random spot.
                Vector2 newpos = new Vector2(Position);
                bool    ok     = false;
                for (int i = 1; i <= 20; i++)
                {
                    // Generate new position, and check if it's in valid bounds, else recheck
                    newpos = Vector2.GetRandomSpotAround(Program.Randomizer, newpos, 60);
                    if (newpos.X > 0 && newpos.Y > 0 && Map.Block.CanWalk(newpos.X, newpos.Y) && PositionIsInBoundries(newpos))
                    {
                        ok = true;
                        break;
                    }

                    /*
                     * int t = Program.Randomizer.Next() % 11;
                     *
                     * if (t <= 2)
                     * {
                     *  // All +
                     *
                     *  newx += Program.Randomizer.Next(MinMovement, MaxMovement);
                     *  newy += Program.Randomizer.Next(MinMovement, MaxMovement);
                     * }
                     * else if (t <= 5)
                     * {
                     *  newx -= Program.Randomizer.Next(MinMovement, MaxMovement);
                     *  newy += Program.Randomizer.Next(MinMovement, MaxMovement);
                     * }
                     * else if (t <= 8)
                     * {
                     *  newx += Program.Randomizer.Next(MinMovement, MaxMovement);
                     *  newy -= Program.Randomizer.Next(MinMovement, MaxMovement);
                     * }
                     * else
                     * {
                     *  newx -= Program.Randomizer.Next(MinMovement, MaxMovement);
                     *  newy -= Program.Randomizer.Next(MinMovement, MaxMovement);
                     * }
                     * Vector2 test = newpos + new Vector2(newx, newy);
                     * if (Map.Block.CanWalk(test.X, test.Y) && PositionIsInBoundries(test))
                     * {
                     *  newpos = test;
                     *  break;
                     * }
                     */
                }

                if (ok)
                {
                    Move(Position.X, Position.Y, newpos.X, newpos.Y, false, false);
                }
            }
        }
示例#13
0
        public override void AttackSkillAoE(ushort skillid, uint x, uint y)
        {
            if (IsAttacking) return;

            Item weapon;
            this.Inventory.GetEquiptBySlot((byte)ItemSlot.Weapon, out weapon);
            uint dmgmin = (uint)GetExtraStr();
            uint dmgmax = (uint)(GetExtraStr() + (GetExtraStr() % 3));
            if (weapon != null)
            {
                dmgmin += weapon.ItemInfo.MinMelee;
                dmgmax += weapon.ItemInfo.MaxMelee;
            }

            attackingSequence = new AttackSequence(this, dmgmin, dmgmax, skillid, x, y);
        }
示例#14
0
        public override void AttackSkill(ushort skillid, MapObject victim)
        {
            if (victim == null)
            {
                victim = SelectedObject;
            }

            if (IsAttacking || victim == null || !victim.IsAttackable) return;

            Item weapon;
            this.Inventory.GetEquiptBySlot((byte)ItemSlot.Weapon, out weapon);
            uint dmgmin = (uint)GetWeaponDamage(true);
            uint dmgmax = (uint)(GetWeaponDamage(true) + (GetWeaponDamage(true) % 3));
            if (weapon != null)
            {
                dmgmin += weapon.ItemInfo.MinMelee;
                dmgmax += weapon.ItemInfo.MaxMelee;
            }

            attackingSequence = new AttackSequence(this, victim, dmgmin, dmgmax, skillid, true);
        }