Wall.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Server.MirDatabase;
  2. using S = ServerPackets;
  3. namespace Server.MirObjects.Monsters
  4. {
  5. public class Wall : MonsterObject
  6. {
  7. public ConquestObject Conquest;
  8. public int WallIndex;
  9. protected internal Wall(MonsterInfo info) : base(info)
  10. {
  11. Direction = MirDirection.Up;
  12. }
  13. public override void Despawn()
  14. {
  15. base.Despawn();
  16. }
  17. protected override bool CanAttack
  18. {
  19. get
  20. {
  21. return false;
  22. }
  23. }
  24. protected override bool CanMove { get { return false; } }
  25. public override void Turn(MirDirection dir) { }
  26. public override bool Walk(MirDirection dir) { return false; }
  27. public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true)
  28. {
  29. CheckDirection();
  30. if (!Conquest.WarIsOn || attacker.MyGuild != null && Conquest.GuildInfo.Owner == attacker.MyGuild.Guildindex) damage = 0;
  31. return base.Attacked(attacker, damage, type, damageWeapon);
  32. }
  33. public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility)
  34. {
  35. CheckDirection();
  36. if (!Conquest.WarIsOn) damage = 0;
  37. return base.Attacked(attacker, damage, type);
  38. }
  39. public void RepairWall()
  40. {
  41. if (HP == 0)
  42. Revive(Stats[Stat.HP], false);
  43. else
  44. SetHP(Stats[Stat.HP]);
  45. CheckDirection();
  46. }
  47. public void CheckDirection()
  48. {
  49. MirDirection newDirection = (MirDirection)(4 - GetDamageLevel());
  50. if (newDirection != Direction)
  51. {
  52. Direction = newDirection;
  53. Broadcast(new S.ObjectTurn { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation });
  54. }
  55. }
  56. public override void Die()
  57. {
  58. base.Die();
  59. }
  60. protected int GetDamageLevel()
  61. {
  62. int level = (int)Math.Round((double)(4 * HP) / Stats[Stat.HP]);
  63. if (level < 1) level = 1;
  64. return level;
  65. }
  66. protected override bool CanRegen
  67. {
  68. get
  69. {
  70. return false;
  71. }
  72. }
  73. }
  74. }