public void Attack(IWeapon weapon, ICreature attacker, ICreature target, World world) { MessageTypes messageTypeToUse; bool attackHits = RandomNumberProvider.CheckIfChanceOccurs(_chanceOfHit); int amountOfDamage = RandomNumberProvider.GetRandomNumber(_minimumDamage, _maximumDamage); if (attacker.IsPlayer()) { messageTypeToUse = MessageTypes.PlayerAttack; } else { messageTypeToUse = MessageTypes.CreatureAttack; } if (attackHits) { target.Health.Current -= amountOfDamage; Announcer.Instance.Announce(attacker.Name + " hits " + target.Name + " for " + amountOfDamage + " damage!", MessageTypes.CreatureAttack); } else { Announcer.Instance.Announce(attacker.Name + " misses " + target.Name + "!", MessageTypes.CreatureAttack); } world.AddSpecialEffectToWorld(new Fireball(attacker.WorldIndex, target.WorldIndex, world)); }
public void TakeTurn(ICreature creature, World world) { _countdownToNextTurn -= 1; if (_countdownToNextTurn <= 0) { _countdownToNextTurn = _speed; bool turnOver = false; if (world.CanPlayerSeeWorldIndex(creature.WorldIndex) && RandomNumberProvider.CheckIfChanceOccurs(25) && world.GetStraightLineDistance(creature.WorldIndex, world.Player.WorldIndex) <= 5) { _spell.CastSpell(creature, world.Player.WorldIndex); } else { while (turnOver != true) { int roll = RandomNumberProvider.GetRandomNumber(1, 4); if (roll == 1) { turnOver = world.MoveCreatureInDirectionSuccessful(Direction.North, creature); } else if (roll == 2) { turnOver = world.MoveCreatureInDirectionSuccessful(Direction.South, creature); } else if (roll == 3) { turnOver = world.MoveCreatureInDirectionSuccessful(Direction.East, creature); } else if (roll == 4) { turnOver = world.MoveCreatureInDirectionSuccessful(Direction.West, creature); } } } } }