Ctrl.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package com.l2jserver.gameserver.ai;
  16. import com.l2jserver.gameserver.model.actor.L2Character;
  17. /**
  18. * Interface of AI and client state.<br>
  19. * To correctly send messages to client we need it's state.<br>
  20. * For example, if we've sent 'StartAutoAttack' message, we need to send 'StopAutoAttack' message before any other action.<br>
  21. * Or if we've sent 'MoveToPawn', we need to send 'StopMove' when the movement of a character is canceled (by Root spell or any other reason).<br>
  22. * Thus, we need to know the state of client, i.e. which messages we've sent and how the client will show the scene.<br>
  23. * Close to this task is the task of AI.<br>
  24. * If a player's character is attacking a mob, his ATTACK may be interrupted by an event, that temporary disable attacking.<br>
  25. * But when the possibility to ATTACK will be enabled, the character must continue the ATTACK.<br>
  26. * For mobs it may be more complex, since we want them to decide when to use magic, or when to follow the player for physical combat, or when to escape, to help another mob, etc.<br>
  27. * This interface is hiding complexity of server<->client interaction and multiple states of a character.<br>
  28. * It allows to set a desired, simple "wish" of a character, and the implementation of this interface will take care about the rest.<br>
  29. * The goal of a character may be like "ATTACK", "random walk" and so on.<br>
  30. * To reach the goal implementation will split it into several small actions, several steps (possibly repeatable).<br>
  31. * Like "run to target" then "hit it", then if target is not dead - repeat.<br>
  32. * This flow of simpler steps may be interrupted by incoming events.<br>
  33. * Like a character's movement was disabled (by Root spell, for instance).<br>
  34. * Depending on character's ability AI may choose to wait, or to use magic ATTACK and so on.<br>
  35. * Additionally incoming events are compared with client's state of the character,<br>
  36. * and required network messages are sent to client's, i.e. if we have incoming event that character's movement was disabled, it causes changing if its behavior,<br>
  37. * and if client's state for the character is "moving" we send messages to clients to stop the avatar/mob.
  38. */
  39. public interface Ctrl
  40. {
  41. /**
  42. * Gets the actor.
  43. * @return the actor
  44. */
  45. L2Character getActor();
  46. /**
  47. * Gets the intention.
  48. * @return the intention
  49. */
  50. CtrlIntention getIntention();
  51. /**
  52. * Gets the attack target.
  53. * @return the attack target
  54. */
  55. L2Character getAttackTarget();
  56. /**
  57. * Set general state/intention for AI, with optional data.
  58. * @param intention the new intention
  59. */
  60. void setIntention(CtrlIntention intention);
  61. /**
  62. * Sets the intention.
  63. * @param intention the intention
  64. * @param arg0 the arg0
  65. */
  66. void setIntention(CtrlIntention intention, Object arg0);
  67. /**
  68. * Sets the intention.
  69. * @param intention the intention
  70. * @param arg0 the arg0
  71. * @param arg1 the arg1
  72. */
  73. void setIntention(CtrlIntention intention, Object arg0, Object arg1);
  74. /**
  75. * Event, that notifies about previous step result, or user command, that does not change current general intention.
  76. * @param evt the event
  77. */
  78. void notifyEvent(CtrlEvent evt);
  79. /**
  80. * Notify an event.
  81. * @param evt the event
  82. * @param arg0 the arg0
  83. */
  84. void notifyEvent(CtrlEvent evt, Object arg0);
  85. /**
  86. * Notify an event.
  87. * @param evt the event
  88. * @param arg0 the arg0
  89. * @param arg1 the arg1
  90. */
  91. void notifyEvent(CtrlEvent evt, Object arg0, Object arg1);
  92. }