#ifndef MOB_HPP
#define MOB_HPP
#include "mob.t.hpp"
#include "../common/timer.hpp"
#include "map.hpp"
#include "skill.t.hpp"
#define MAX_RANDOMMONSTER 3
struct mob_skill
{
MSS state;
SkillID skill_id;
short skill_lv;
short permillage;
int casttime, delay;
short cancel;
MSC cond1;
int cond2i;
StatusChange cond2sc() { return StatusChange(cond2i); }
SkillID cond2sk() { return SkillID(cond2i); };
MST target;
int val[5];
short emotion;
};
struct mob_db
{
char name[24], jname[24];
int lv;
int max_hp, max_sp;
int base_exp, job_exp;
int atk1, atk2;
int def, mdef;
int str, agi, vit, int_, dex, luk;
int range, range2, range3;
int size, race, element, mode;
int speed, adelay, amotion, dmotion;
int mexp, mexpper;
int mutations_nr, mutation_power;
struct
{
int nameid, p;
} dropitem[8];
struct
{
int nameid, p;
} mvpitem[3];
int view_class, sex;
short hair, hair_color, weapon, shield, head_top, head_mid, head_buttom, option, clothes_color; // [Valaris]
int equip; // [Valaris]
int summonper[MAX_RANDOMMONSTER];
int maxskill;
struct mob_skill skill[MAX_MOBSKILL];
};
extern struct mob_db mob_db[];
int mobdb_searchname(const char *str);
int mobdb_checkid(const int id);
int mob_once_spawn(struct map_session_data *sd, const char *mapname,
int x, int y, const char *mobname, int class_, int amount,
const char *event);
int mob_once_spawn_area(struct map_session_data *sd, const char *mapname, int x0,
int y0, int x1, int y1, const char *mobname,
int class_, int amount, const char *event);
int mob_spawn_guardian(struct map_session_data *sd, const char *mapname, // Spawning Guardians [Valaris]
int x, int y, const char *mobname, int class_, int amount, const char *event, int guardian); // Spawning Guardians [Valaris]
int mob_target(struct mob_data *md, struct block_list *bl, int dist);
int mob_stop_walking(struct mob_data *md, int type);
int mob_stopattack(struct mob_data *);
int mob_spawn(int);
int mob_damage(struct block_list *, struct mob_data *, int, int);
int mob_changestate(struct mob_data *md, int state, int type);
int mob_heal(struct mob_data *, int);
int mob_get_viewclass(int);
int mob_get_sex(int);
short mob_get_hair(int);
short mob_get_hair_color(int);
short mob_get_weapon(int);
short mob_get_shield(int);
short mob_get_head_top(int);
short mob_get_head_mid(int);
short mob_get_head_buttom(int);
short mob_get_clothes_color(int); //player mob dye [Valaris]
int mob_get_equip(int); // mob equip [Valaris]
int do_init_mob(void);
int mob_delete(struct mob_data *md);
int mob_catch_delete(struct mob_data *md, int type);
void mob_timer_delete(timer_id, tick_t, custom_id_t, custom_data_t);
int mob_deleteslave(struct mob_data *md);
int mob_counttargeted(struct mob_data *md, struct block_list *src,
int target_lv);
int mob_class_change(struct mob_data *md, int *value);
int mob_warp(struct mob_data *md, int m, int x, int y, int type);
int mobskill_use(struct mob_data *md, unsigned int tick,
MSC event, SkillID skill=SkillID::ZERO);
int mobskill_event(struct mob_data *md, int flag);
void mobskill_castend_id(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data);
void mobskill_castend_pos(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data);
int mob_summonslave(struct mob_data *md2, int *value, int amount, int flag);
void mob_reload(void);
#endif // MOB_HPP