elemental.hpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef ELEMENTAL_HPP
  4. #define ELEMENTAL_HPP
  5. #include "../common/mmo.hpp"
  6. #include "../common/timer.hpp"
  7. #include "status.hpp" // struct status_data, struct status_change
  8. #include "unit.hpp" // struct unit_data
  9. const t_tick MIN_ELETHINKTIME = 100;
  10. #define MIN_ELEDISTANCE 2
  11. #define MAX_ELEDISTANCE 5
  12. #define EL_MODE_AGGRESSIVE (MD_CANMOVE|MD_AGGRESSIVE|MD_CANATTACK)
  13. #define EL_MODE_ASSIST (MD_CANMOVE|MD_ASSIST)
  14. #define EL_MODE_PASSIVE MD_CANMOVE
  15. ///Enum of Elemental Skill Mode
  16. enum elemental_skillmode : uint8 {
  17. EL_SKILLMODE_PASSIVE = 0x1,
  18. EL_SKILLMODE_ASSIST = 0x2,
  19. EL_SKILLMODE_AGGRESSIVE = 0x4,
  20. };
  21. ///Enum of Elemental ID
  22. enum elemental_elementalid : uint16 {
  23. ELEMENTALID_AGNI_S = 2114,
  24. ELEMENTALID_AGNI_M,
  25. ELEMENTALID_AGNI_L,
  26. ELEMENTALID_AQUA_S,
  27. ELEMENTALID_AQUA_M,
  28. ELEMENTALID_AQUA_L,
  29. ELEMENTALID_VENTUS_S,
  30. ELEMENTALID_VENTUS_M,
  31. ELEMENTALID_VENTUS_L,
  32. ELEMENTALID_TERA_S,
  33. ELEMENTALID_TERA_M,
  34. ELEMENTALID_TERA_L,
  35. };
  36. struct elemental_skill {
  37. unsigned short id, lv;
  38. short mode;
  39. };
  40. struct s_elemental_db {
  41. int class_;
  42. char sprite[NAME_LENGTH], name[NAME_LENGTH];
  43. unsigned short lv;
  44. short range2, range3;
  45. struct status_data status;
  46. struct view_data vd;
  47. struct elemental_skill skill[MAX_ELESKILLTREE];
  48. };
  49. extern struct s_elemental_db elemental_db[MAX_ELEMENTAL_CLASS];
  50. struct elemental_data {
  51. struct block_list bl;
  52. struct unit_data ud;
  53. struct view_data *vd;
  54. struct status_data base_status, battle_status;
  55. struct status_change sc;
  56. struct regen_data regen;
  57. struct s_elemental_db *db;
  58. struct s_elemental elemental;
  59. int masterteleport_timer;
  60. struct map_session_data *master;
  61. int summon_timer;
  62. int skill_timer;
  63. t_tick last_thinktime, last_linktime, last_spdrain_time;
  64. short min_chase;
  65. int target_id, attacked_id;
  66. };
  67. bool elemental_class(int class_);
  68. struct view_data * elemental_get_viewdata(int class_);
  69. int elemental_create(struct map_session_data *sd, int class_, unsigned int lifetime);
  70. int elemental_data_received(struct s_elemental *ele, bool flag);
  71. int elemental_save(struct elemental_data *ed);
  72. int elemental_change_mode_ack(struct elemental_data *ed, enum elemental_skillmode skill_mode);
  73. int elemental_change_mode(struct elemental_data *ed, enum e_mode mode);
  74. void elemental_heal(struct elemental_data *ed, int hp, int sp);
  75. int elemental_dead(struct elemental_data *ed);
  76. int elemental_delete(struct elemental_data *ed);
  77. void elemental_summon_stop(struct elemental_data *ed);
  78. t_tick elemental_get_lifetime(struct elemental_data *ed);
  79. int elemental_unlocktarget(struct elemental_data *ed);
  80. bool elemental_skillnotok(uint16 skill_id, struct elemental_data *ed);
  81. int elemental_set_target( struct map_session_data *sd, struct block_list *bl );
  82. int elemental_clean_single_effect(struct elemental_data *ed, uint16 skill_id);
  83. int elemental_clean_effect(struct elemental_data *ed);
  84. int elemental_action(struct elemental_data *ed, struct block_list *bl, t_tick tick);
  85. struct s_skill_condition elemental_skill_get_requirements(uint16 skill_id, uint16 skill_lv);
  86. #define elemental_stop_walking(ed, type) unit_stop_walking(&(ed)->bl, type)
  87. #define elemental_stop_attack(ed) unit_stop_attack(&(ed)->bl)
  88. void read_elemental_skilldb(void);
  89. void reload_elementaldb(void);
  90. void reload_elemental_skilldb(void);
  91. void do_init_elemental(void);
  92. void do_final_elemental(void);
  93. #endif /* ELEMENTAL_HPP */