/// <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); } }
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); } }
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); }
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()))); } }