コード例 #1
0
ファイル: Entity.cs プロジェクト: melkor54248/dungeoneye
		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		int RollForAbility()
		{
			Dice dice = new Dice(1, 6, 0);

			List<int> list = new List<int>();
			list.Add(dice.Roll());
			list.Add(dice.Roll());
			list.Add(dice.Roll());
			list.Add(dice.Roll());
			list.Sort();


			return list[1] + list[2] + list[3];
		}
コード例 #2
0
        //{
        //    if (attack == null)
        //        return;

        //    LastAttack = attack;
        //    if (LastAttack.IsAMiss)
        //        return;

        //    HitPoint.Current -= LastAttack.Hit;

        //    // Reward the team for having killed the entity
        //    if (IsDead && attack.Striker is Hero)
        //    {
        //        (attack.Striker as Hero).Team.AddExperience(Reward);
        //    }
        //}


        /// <summary>
        /// Make damage to the hero
        /// </summary>
        /// <param name="damage">Attack roll</param>
        /// <param name="type">Type of saving throw</param>
        /// <param name="difficulty">Difficulty</param>
        public void Damage(Dice damage, SavingThrowType type, int difficulty)
        {
            if (damage == null)
            {
                return;
            }

            int save = Dice.GetD20(1);

            // No damage
            if (save == 20 || save + SavingThrow(type) > difficulty)
            {
                return;
            }

            HitPoint.Current -= damage.Roll();
        }
コード例 #3
0
ファイル: Entity.cs プロジェクト: melkor54248/dungeoneye
		//{
		//    if (attack == null)
		//        return;

		//    LastAttack = attack;
		//    if (LastAttack.IsAMiss)
		//        return;

		//    HitPoint.Current -= LastAttack.Hit;

		//    // Reward the team for having killed the entity
		//    if (IsDead && attack.Striker is Hero)
		//    {
		//        (attack.Striker as Hero).Team.AddExperience(Reward);
		//    }
		//}


		/// <summary>
		/// Make damage to the hero
		/// </summary>
		/// <param name="damage">Attack roll</param>
		/// <param name="type">Type of saving throw</param>
		/// <param name="difficulty">Difficulty</param>
		public void Damage(Dice damage, SavingThrowType type, int difficulty)
		{
			if (damage == null)
				return;

			int save = Dice.GetD20(1);

			// No damage
			if (save == 20 || save + SavingThrow(type) > difficulty)
				return;

			HitPoint.Current -= damage.Roll();

		}
コード例 #4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="striker">Striker entity</param>
        /// <param name="Attacked">Attacked entity</param>
        /// <param name="item">Item used as a weapon. Use null for a hand attack</param>
        /// http://nwn2.wikia.com/wiki/Attack_sequence
        public Attack(Entity striker, Entity target, Item item)
        {
            Team team = GameScreen.Team;

            Time    = DateTime.Now;
            Striker = striker;
            Target  = target;
            Item    = item;

            if (striker == null || target == null)
            {
                return;
            }

            // Ranged attack ?
            DungeonLocation from = null;
            DungeonLocation to   = null;

            if (striker is Hero)
            {
                from = team.Location;
            }
            else
            {
                from = ((Monster)striker).Location;
            }

            if (target is Hero)
            {
                to = team.Location;
            }
            else
            {
                to = ((Monster)target).Location;
            }

            Range = (int)Math.Sqrt((from.Coordinate.Y - to.Coordinate.Y) * (from.Coordinate.Y - to.Coordinate.Y) +
                                   (from.Coordinate.X - to.Coordinate.X) * (from.Coordinate.X - to.Coordinate.X));

            // Attack roll
            int attackdie = Dice.GetD20(1);

            // Critical fail ?
            if (attackdie == 1)
            {
                attackdie = -100000;
            }

            // Critical Hit ?
            if (attackdie == 20)
            {
                attackdie = 100000;
            }


            // Base attack bonus
            int baseattackbonus = 0;
            int modifier        = 0;                            // modifier
            int sizemodifier    = 0;                            // Size modifier
            int rangepenality   = 0;                            // Range penality


            if (striker is Hero)
            {
                baseattackbonus = ((Hero)striker).BaseAttackBonus;
            }
            else if (striker is Monster)
            {
                Monster monster = striker as Monster;
                //sizemodifier = (int)monster.Size;
            }


            // Range penality
            if (RangedAttack)
            {
                modifier = striker.Dexterity.Modifier;

                //TODO : Add range penality
            }
            else
            {
                modifier = striker.Strength.Modifier;
            }

            // Attack bonus
            int attackbonus = baseattackbonus + modifier + sizemodifier + rangepenality;

            if (target.ArmorClass > attackdie + attackbonus)
            {
                return;
            }


            if (item != null)
            {
                Hit = item.Damage.Roll();
            }
            else
            {
                Dice dice = new Dice(1, 4, 0);
                Hit = dice.Roll();
            }

            if (IsAHit)
            {
                Target.Hit(this);
            }
        }
コード例 #5
0
ファイル: Attack.cs プロジェクト: melkor54248/dungeoneye
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="striker">Striker entity</param>
		/// <param name="Attacked">Attacked entity</param>
		/// <param name="item">Item used as a weapon. Use null for a hand attack</param>
		/// http://nwn2.wikia.com/wiki/Attack_sequence
		public Attack(Entity striker, Entity target, Item item)
		{
			Team team = GameScreen.Team;
			Time = DateTime.Now;
			Striker = striker;
			Target = target;
			Item = item;

			if (striker == null || target == null)
				return;

			// Ranged attack ?
			DungeonLocation from = null;
			DungeonLocation to = null;
			if (striker is Hero)
				from = team.Location;
			else
				from = ((Monster)striker).Location;

			if (target is Hero)
				to = team.Location;
			else
				to = ((Monster)target).Location;

			Range = (int)Math.Sqrt((from.Coordinate.Y - to.Coordinate.Y) * (from.Coordinate.Y - to.Coordinate.Y) +
						(from.Coordinate.X - to.Coordinate.X) * (from.Coordinate.X - to.Coordinate.X));

			// Attack roll
			int attackdie = Dice.GetD20(1);

			// Critical fail ?
			if (attackdie == 1)
				attackdie = -100000;

			// Critical Hit ?
			if (attackdie == 20)
				attackdie = 100000;


			// Base attack bonus
			int baseattackbonus = 0;
			int modifier = 0;				// modifier
			int sizemodifier = 0;			// Size modifier
			int rangepenality = 0;			// Range penality


			if (striker is Hero)
			{
				baseattackbonus = ((Hero)striker).BaseAttackBonus;
			}
			else if (striker is Monster)
			{
				Monster monster = striker as Monster;
				//sizemodifier = (int)monster.Size;
			}


			// Range penality
			if (RangedAttack)
			{
				modifier = striker.Dexterity.Modifier;

				//TODO : Add range penality
			}
			else
				modifier = striker.Strength.Modifier;

			// Attack bonus
			int attackbonus = baseattackbonus + modifier + sizemodifier + rangepenality;
			if (target.ArmorClass > attackdie + attackbonus)
				return;


			if (item != null)
				Hit = item.Damage.Roll();
			else
			{
				Dice dice = new Dice(1, 4, 0);
				Hit = dice.Roll();
			}

			if (IsAHit)
				Target.Hit(this);

		}