コード例 #1
0
ファイル: Combat.cs プロジェクト: crybx/mud
 /// <summary>
 /// Version that is used for internal that will not try to add the opposite attack order
 /// </summary>
 /// <param name="attacker"></param>
 /// <param name="defender"></param>
 private void AddCombatPairInternal(IMobileObject attacker, IMobileObject defender)
 {
     if (!combatants.Keys.Contains(attacker))
     {
         CombatPair.CombatPair pair = new CombatPair.CombatPair();
         pair.Attacker = attacker;
         pair.Defender = defender;
         combatants.TryAdd(attacker, pair);
     }
 }
コード例 #2
0
ファイル: Combat.cs プロジェクト: crybx/mud
        private void ProcessAttack(IMobileObject mob)
        {
            CombatPair.CombatPair pair = combatants[mob];
            bool invalidComabatPair    = RemoveInvalidCombatant(mob, pair);

            if (!invalidComabatPair)
            {
                ProcessWeapons(pair.Attacker, pair.Defender);
                AddCombatPairInternal(pair.Defender, pair.Attacker);
            }
        }
コード例 #3
0
ファイル: Combat.cs プロジェクト: crybx/mud
        private bool RemoveInvalidCombatant(IMobileObject mob, CombatPair.CombatPair pair)
        {
            if ((pair.Attacker.Health <= 0 || pair.Defender.Health <= 0) ||
                (pair.Attacker.Room != pair.Defender.Room) ||
                pair.Attacker.Room.Attributes.Contains(Room.Room.RoomAttribute.Peaceful))
            {
                combatants.TryRemove(mob, out pair);
                return(true);
            }

            return(false);
        }
コード例 #4
0
ファイル: Combat.cs プロジェクト: crybx/mud
        public IResult AddCombatPair(IMobileObject attacker, IMobileObject defender)
        {
            CombatPair.CombatPair pair;

            if (combatants.TryGetValue(attacker, out pair))
            {
                return(new Result(false, string.Format("You are already attacking {0}.", pair.Defender.KeyWords.FirstOrDefault())));
            }
            else
            {
                pair          = new CombatPair.CombatPair();
                pair.Attacker = attacker;
                pair.Defender = defender;
                combatants.TryAdd(attacker, pair);

                //add the defender attacking the attacker
                AddCombatPairInternal(defender, attacker);

                return(new Result(true, string.Format("You begin to attack {0}.", defender.KeyWords.FirstOrDefault())));
            }
        }