diff options
Diffstat (limited to 'src/map/unit.h')
-rw-r--r-- | src/map/unit.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/map/unit.h b/src/map/unit.h new file mode 100644 index 000000000..9d1c02a31 --- /dev/null +++ b/src/map/unit.h @@ -0,0 +1,145 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _UNIT_H_ +#define _UNIT_H_ + +//#include "map.h" +struct block_list; +struct unit_data; +struct map_session_data; + +#include "clif.h" // clr_type +#include "map.h" // struct block_list +#include "path.h" // struct walkpath_data +#include "skill.h" // struct skill_timerskill, struct skill_unit_group, struct skill_unit_group_tickset + +struct unit_data { + struct block_list *bl; + struct walkpath_data walkpath; + struct skill_timerskill *skilltimerskill[MAX_SKILLTIMERSKILL]; + struct skill_unit_group *skillunit[MAX_SKILLUNITGROUP]; + struct skill_unit_group_tickset skillunittick[MAX_SKILLUNITGROUPTICKSET]; + short attacktarget_lv; + short to_x,to_y; + short skillx,skilly; + uint16 skill_id,skill_lv; + int skilltarget; + int skilltimer; + int target; + int target_to; + int attacktimer; + int walktimer; + int chaserange; + unsigned int attackabletime; + unsigned int canact_tick; + unsigned int canmove_tick; + uint8 dir; + unsigned char walk_count; + unsigned char target_count; + struct { + unsigned change_walk_target : 1 ; + unsigned skillcastcancel : 1 ; + unsigned attack_continue : 1 ; + unsigned walk_easy : 1 ; + unsigned running : 1; + unsigned speed_changed : 1; + } state; +}; + +struct view_data { +#ifdef __64BIT__ + unsigned int class_; +#endif + unsigned short +#ifndef __64BIT__ + class_, +#endif + weapon, + shield, //Or left-hand weapon. + robe, + head_top, + head_mid, + head_bottom, + hair_style, + hair_color, + cloth_color; + char sex; + unsigned dead_sit : 2; +}; + +// PC, MOB, PET に共通する処理を1つにまとめる計画 + +// 歩行開始 +// 戻り値は、0 ( 成功 ), 1 ( 失敗 ) +int unit_walktoxy( struct block_list *bl, short x, short y, int easy); +int unit_walktobl( struct block_list *bl, struct block_list *target, int range, int easy); +int unit_run(struct block_list *bl); +int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir); + +// 歩行停止 +// typeは以下の組み合わせ : +// 1: 位置情報の送信( この関数の後に位置情報を送信する場合は不要 ) +// 2: ダメージディレイ有り +// 4: 不明(MOBのみ?) +int unit_stop_walking(struct block_list *bl,int type); +int unit_can_move(struct block_list *bl); +int unit_is_walking(struct block_list *bl); +int unit_set_walkdelay(struct block_list *bl, unsigned int tick, int delay, int type); + +int unit_escape(struct block_list *bl, struct block_list *target, short dist); +// 位置の強制移動(吹き飛ばしなど) +int unit_movepos(struct block_list *bl, short dst_x, short dst_y, int easy, bool checkpath); +int unit_warp(struct block_list *bl, short map, short x, short y, clr_type type); +int unit_setdir(struct block_list *bl,unsigned char dir); +uint8 unit_getdir(struct block_list *bl); +int unit_blown(struct block_list* bl, int dx, int dy, int count, int flag); + +// そこまで歩行でたどり着けるかの判定 +bool unit_can_reach_pos(struct block_list *bl,int x,int y,int easy); +bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, int easy, short *x, short *y); + +// 攻撃関連 +int unit_stop_attack(struct block_list *bl); +int unit_attack(struct block_list *src,int target_id,int continuous); +int unit_cancel_combo(struct block_list *bl); + +// スキル使用 +int unit_skilluse_id(struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv); +int unit_skilluse_pos(struct block_list *src, short skill_x, short skill_y, uint16 skill_id, uint16 skill_lv); + +// スキル使用( 補正済みキャスト時間、キャンセル不可設定付き ) +int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv, int casttime, int castcancel); +int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, uint16 skill_id, uint16 skill_lv, int casttime, int castcancel); + +// 詠唱キャンセル +int unit_skillcastcancel(struct block_list *bl,int type); + +int unit_counttargeted(struct block_list *bl); +int unit_set_target(struct unit_data* ud, int target_id); + +// unit_data の初期化処理 +void unit_dataset(struct block_list *bl); + +int unit_fixdamage(struct block_list *src,struct block_list *target,unsigned int tick,int sdelay,int ddelay,int damage,int div,int type,int damage2); +// その他 +struct unit_data* unit_bl2ud(struct block_list *bl); +void unit_remove_map_pc(struct map_session_data *sd, clr_type clrtype); +void unit_free_pc(struct map_session_data *sd); +#define unit_remove_map(bl,clrtype) unit_remove_map_(bl,clrtype,__FILE__,__LINE__,__func__) +int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, int line, const char* func); +int unit_free(struct block_list *bl, clr_type clrtype); +int unit_changeviewsize(struct block_list *bl,short size); + +// 初期化ルーチン +int do_init_unit(void); +int do_final_unit(void); +/** + * Ranger + **/ +int unit_wugdash(struct block_list *bl, struct map_session_data *sd); + +extern const short dirx[8]; +extern const short diry[8]; + +#endif /* _UNIT_H_ */ |