- Made the struct weapon_atk lhw in status_data a static member rather than a pointer as requested by Ultra Mage.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11858 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
48a8f3fb25
commit
655100c9e2
@ -705,7 +705,7 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
|
||||
atkmin = atkmax;
|
||||
} else { //PCs
|
||||
atkmax = wa->atk;
|
||||
type = (wa == status->lhw)?EQI_HAND_L:EQI_HAND_R;
|
||||
type = (wa == &status->lhw)?EQI_HAND_L:EQI_HAND_R;
|
||||
|
||||
if (!(flag&1) || (flag&2))
|
||||
{ //Normal attacks
|
||||
@ -964,7 +964,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
|
||||
s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
|
||||
if (!skill_num || s_ele == -1) { //Take weapon's element
|
||||
s_ele = sstatus->rhw.ele;
|
||||
s_ele_ = sstatus->lhw?sstatus->lhw->ele:0;
|
||||
s_ele_ = sstatus->lhw.ele;
|
||||
if (flag.arrow && sd && sd->arrow_ele)
|
||||
s_ele = sd->arrow_ele;
|
||||
} else if (s_ele == -2) { //Use enchantment's element
|
||||
@ -980,7 +980,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
|
||||
flag.rh=0;
|
||||
flag.lh=1;
|
||||
}
|
||||
if (sstatus->lhw && sstatus->lhw->atk)
|
||||
if (sstatus->lhw.atk)
|
||||
flag.lh=1;
|
||||
}
|
||||
|
||||
@ -1234,7 +1234,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
|
||||
}
|
||||
wd.damage = battle_calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, sd, i);
|
||||
if (flag.lh)
|
||||
wd.damage2 = battle_calc_base_damage(sstatus, sstatus->lhw, sc, tstatus->size, sd, i);
|
||||
wd.damage2 = battle_calc_base_damage(sstatus, &sstatus->lhw, sc, tstatus->size, sd, i);
|
||||
|
||||
if (nk&NK_SPLASHSPLIT){ // Divide ATK among targets
|
||||
if(wflag>0)
|
||||
@ -1737,9 +1737,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
|
||||
if (sd && flag.weapon && skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) {
|
||||
if (skill_num == MO_FINGEROFFENSIVE) //Counts refine bonus multiple times
|
||||
{
|
||||
ATK_ADD2(wd.div_*sstatus->rhw.atk2, wd.div_*sstatus->lhw->atk2);
|
||||
ATK_ADD2(wd.div_*sstatus->rhw.atk2, wd.div_*sstatus->lhw.atk2);
|
||||
} else {
|
||||
ATK_ADD2(sstatus->rhw.atk2, sstatus->lhw->atk2);
|
||||
ATK_ADD2(sstatus->rhw.atk2, sstatus->lhw.atk2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2275,7 +2275,7 @@ int clif_updatestatus(struct map_session_data *sd,int type)
|
||||
WFIFOL(fd,4)=sd->battle_status.amotion;
|
||||
break;
|
||||
case SP_ATK1:
|
||||
WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw->atk;
|
||||
WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw.atk;
|
||||
break;
|
||||
case SP_DEF1:
|
||||
WFIFOL(fd,4)=sd->battle_status.def;
|
||||
@ -2284,7 +2284,7 @@ int clif_updatestatus(struct map_session_data *sd,int type)
|
||||
WFIFOL(fd,4)=sd->battle_status.mdef;
|
||||
break;
|
||||
case SP_ATK2:
|
||||
WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw->atk2;
|
||||
WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2;
|
||||
break;
|
||||
case SP_DEF2:
|
||||
WFIFOL(fd,4)=sd->battle_status.def2;
|
||||
@ -2614,8 +2614,8 @@ int clif_initialstatus(struct map_session_data *sd)
|
||||
WBUFB(buf,14)=min(sd->status.luk, UCHAR_MAX);
|
||||
WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK);
|
||||
|
||||
WBUFW(buf,16) = sd->battle_status.batk + sd->battle_status.rhw.atk + sd->battle_status.lhw->atk;
|
||||
WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw->atk2; //atk bonus
|
||||
WBUFW(buf,16) = sd->battle_status.batk + sd->battle_status.rhw.atk + sd->battle_status.lhw.atk;
|
||||
WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; //atk bonus
|
||||
WBUFW(buf,20) = sd->battle_status.matk_max;
|
||||
WBUFW(buf,22) = sd->battle_status.matk_min;
|
||||
WBUFW(buf,24) = sd->battle_status.def; // def
|
||||
|
@ -356,7 +356,7 @@ struct status_data {
|
||||
size, race;
|
||||
signed char
|
||||
def, mdef;
|
||||
struct weapon_atk rhw, *lhw; //Right Hand/Left Hand Weapon. Only players have a lhw (hence it's a pointer)
|
||||
struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
|
||||
};
|
||||
|
||||
struct script_reg {
|
||||
@ -512,7 +512,6 @@ struct map_session_data {
|
||||
struct unit_data ud;
|
||||
struct view_data vd;
|
||||
struct status_data base_status, battle_status;
|
||||
struct weapon_atk base_lhw, battle_lhw; //Left-hand weapon atk data.
|
||||
struct status_change sc;
|
||||
struct regen_data regen;
|
||||
struct regen_data_sub sregen, ssregen;
|
||||
|
@ -2941,6 +2941,8 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
|
||||
int i,j,inf,skill_id;
|
||||
struct mob_data *md;
|
||||
struct mob_skill *ms;
|
||||
struct mob_db* db;
|
||||
struct status_data *status;
|
||||
|
||||
nullpo_retr(0, sd);
|
||||
|
||||
@ -2948,33 +2950,34 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
|
||||
if(class_ >= MOB_CLONE_END)
|
||||
return 0;
|
||||
|
||||
mob_db_data[class_]=(struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
sprintf(mob_db_data[class_]->sprite,sd->status.name);
|
||||
sprintf(mob_db_data[class_]->name,sd->status.name);
|
||||
sprintf(mob_db_data[class_]->jname,sd->status.name);
|
||||
mob_db_data[class_]->lv=status_get_lv(&sd->bl);
|
||||
memcpy(&mob_db_data[class_]->status, &sd->base_status, sizeof(struct status_data));
|
||||
mob_db_data[class_]->status.lhw = NULL; //Prevent dangling pointer if player quits.
|
||||
mob_db_data[class_]->status.rhw.atk =
|
||||
mob_db_data[class_]->status.rhw.atk2 = sd->base_status.dex; //Min ATK
|
||||
mob_db_data[class_]->status.rhw.atk2+=
|
||||
sd->base_status.rhw.atk + sd->base_status.rhw.atk2 +
|
||||
sd->base_status.lhw->atk + sd->base_status.lhw->atk2; //Max ATK
|
||||
db = mob_db_data[class_]=(struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
status = &db->status;
|
||||
sprintf(db->sprite,sd->status.name);
|
||||
sprintf(db->name,sd->status.name);
|
||||
sprintf(db->jname,sd->status.name);
|
||||
db->lv=status_get_lv(&sd->bl);
|
||||
memcpy(status, &sd->base_status, sizeof(struct status_data));
|
||||
status->rhw.atk2= status->dex + status->rhw.atk + status->rhw.atk2; //Max ATK
|
||||
status->rhw.atk = status->dex; //Min ATK
|
||||
if (status->lhw.atk) {
|
||||
status->lhw.atk2= status->dex + status->lhw.atk + status->lhw.atk2; //Max ATK
|
||||
status->lhw.atk = status->dex; //Min ATK
|
||||
}
|
||||
if (mode) //User provided mode.
|
||||
mob_db_data[class_]->status.mode = mode;
|
||||
status->mode = mode;
|
||||
else if (flag&1) //Friendly Character, remove looting.
|
||||
mob_db_data[class_]->status.mode &= ~MD_LOOTER;
|
||||
mob_db_data[class_]->status.hp = mob_db_data[class_]->status.max_hp;
|
||||
mob_db_data[class_]->status.sp = mob_db_data[class_]->status.max_sp;
|
||||
memcpy(&mob_db_data[class_]->vd, &sd->vd, sizeof(struct view_data));
|
||||
mob_db_data[class_]->base_exp=1;
|
||||
mob_db_data[class_]->job_exp=1;
|
||||
mob_db_data[class_]->range2=AREA_SIZE; //Let them have the same view-range as players.
|
||||
mob_db_data[class_]->range3=AREA_SIZE; //Min chase of a screen.
|
||||
mob_db_data[class_]->option=sd->sc.option;
|
||||
status->mode &= ~MD_LOOTER;
|
||||
status->hp = status->max_hp;
|
||||
status->sp = status->max_sp;
|
||||
memcpy(&db->vd, &sd->vd, sizeof(struct view_data));
|
||||
db->base_exp=1;
|
||||
db->job_exp=1;
|
||||
db->range2=AREA_SIZE; //Let them have the same view-range as players.
|
||||
db->range3=AREA_SIZE; //Min chase of a screen.
|
||||
db->option=sd->sc.option;
|
||||
|
||||
//Skill copy [Skotlex]
|
||||
ms = &mob_db_data[class_]->skill[0];
|
||||
ms = &db->skill[0];
|
||||
//Go Backwards to give better priority to advanced skills.
|
||||
for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
|
||||
skill_id = skill_tree[sd->status.class_][j].id;
|
||||
@ -3057,7 +3060,7 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
|
||||
|
||||
if (i+1 < MAX_MOBSKILL) { //duplicate this so it also triggers on self.
|
||||
memcpy(&ms[i+1], &ms[i], sizeof(struct mob_skill));
|
||||
mob_db_data[class_]->maxskill = ++i;
|
||||
db->maxskill = ++i;
|
||||
ms[i].target = MST_SELF;
|
||||
ms[i].cond1 = MSC_MYHPLTMAXRATE;
|
||||
}
|
||||
@ -3081,7 +3084,7 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
|
||||
if (battle_config.mob_skill_delay != 100)
|
||||
ms[i].delay = ms[i].delay*battle_config.mob_skill_delay/100;
|
||||
|
||||
mob_db_data[class_]->maxskill = ++i;
|
||||
db->maxskill = ++i;
|
||||
}
|
||||
//Finally, spawn it.
|
||||
md = mob_once_spawn_sub(&sd->bl, m, x, y, "--en--",class_,event);
|
||||
|
12
src/map/pc.c
12
src/map/pc.c
@ -1441,8 +1441,8 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
status->rhw.atk = cap_value(bonus, 0, USHRT_MAX);
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
bonus = status->lhw->atk + val;
|
||||
status->lhw->atk = cap_value(bonus, 0, USHRT_MAX);
|
||||
bonus = status->lhw.atk + val;
|
||||
status->lhw.atk = cap_value(bonus, 0, USHRT_MAX);
|
||||
}
|
||||
break;
|
||||
case SP_ATK2:
|
||||
@ -1451,8 +1451,8 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
bonus = status->lhw->atk2 + val;
|
||||
status->lhw->atk2 = cap_value(bonus, 0, USHRT_MAX);
|
||||
bonus = status->lhw.atk2 + val;
|
||||
status->lhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
|
||||
}
|
||||
break;
|
||||
case SP_BASE_ATK:
|
||||
@ -1535,7 +1535,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
status->lhw->ele=val;
|
||||
status->lhw.ele=val;
|
||||
break;
|
||||
default:
|
||||
status->rhw.ele=val;
|
||||
@ -1594,7 +1594,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
status->lhw->range += val;
|
||||
status->lhw.range += val;
|
||||
break;
|
||||
default:
|
||||
status->rhw.range += val;
|
||||
|
@ -1598,7 +1598,6 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
{
|
||||
static int calculating = 0; //Check for recursive call preemption. [Skotlex]
|
||||
struct status_data b_status, *status;
|
||||
struct weapon_atk b_lhw;
|
||||
struct skill b_skill[MAX_SKILL];
|
||||
|
||||
int b_weight,b_max_weight;
|
||||
@ -1612,9 +1611,6 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
return -1;
|
||||
|
||||
memcpy(&b_status, &sd->battle_status, sizeof(struct status_data));
|
||||
memcpy(&b_lhw, &sd->battle_lhw, sizeof(struct weapon_atk));
|
||||
b_status.lhw = &b_lhw;
|
||||
|
||||
memcpy(b_skill,&sd->status.skill,sizeof(b_skill));
|
||||
b_weight = sd->weight;
|
||||
b_max_weight = sd->max_weight;
|
||||
@ -1627,8 +1623,6 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
//Load Hp/SP from char-received data.
|
||||
sd->battle_status.hp = sd->status.hp;
|
||||
sd->battle_status.sp = sd->status.sp;
|
||||
sd->battle_status.lhw = &sd->battle_lhw;
|
||||
sd->base_status.lhw = &sd->base_lhw;
|
||||
sd->regen.sregen = &sd->sregen;
|
||||
sd->regen.ssregen = &sd->ssregen;
|
||||
sd->weight=0;
|
||||
@ -1695,8 +1689,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
clif_status_load(&sd->bl, SI_INTRAVISION, 0);
|
||||
|
||||
memset(&sd->special_state,0,sizeof(sd->special_state));
|
||||
memset(&status->max_hp, 0, sizeof(struct status_data)-(sizeof(status->hp)+sizeof(status->sp)+sizeof(status->lhw)));
|
||||
memset(status->lhw, 0, sizeof(struct weapon_atk));
|
||||
memset(&status->max_hp, 0, sizeof(struct status_data)-(sizeof(status->hp)+sizeof(status->sp)));
|
||||
|
||||
//FIXME: Most of these stuff should be calculated once, but how do I fix the memset above to do that? [Skotlex]
|
||||
status->speed = DEFAULT_WALK_SPEED;
|
||||
@ -1818,7 +1811,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
wlv = MAX_REFINE_BONUS - 1;
|
||||
if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L) {
|
||||
wd = &sd->left_weapon; // Left-hand weapon
|
||||
wa = status->lhw;
|
||||
wa = &status->lhw;
|
||||
} else {
|
||||
wd = &sd->right_weapon;
|
||||
wa = &status->rhw;
|
||||
@ -1945,9 +1938,9 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
//param_bonus now holds card bonuses.
|
||||
|
||||
if(status->rhw.range < 1) status->rhw.range = 1;
|
||||
if(status->lhw->range < 1) status->lhw->range = 1;
|
||||
if(status->rhw.range < status->lhw->range)
|
||||
status->rhw.range = status->lhw->range;
|
||||
if(status->lhw.range < 1) status->lhw.range = 1;
|
||||
if(status->rhw.range < status->lhw.range)
|
||||
status->rhw.range = status->lhw.range;
|
||||
|
||||
sd->double_rate += sd->double_add_rate;
|
||||
sd->perfect_hit += sd->perfect_hit_add;
|
||||
@ -2362,13 +2355,13 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
||||
if(b_status.amotion != status->amotion)
|
||||
clif_updatestatus(sd,SP_ASPD);
|
||||
if(b_status.rhw.atk != status->rhw.atk ||
|
||||
b_status.lhw->atk != status->lhw->atk ||
|
||||
b_status.lhw.atk != status->lhw.atk ||
|
||||
b_status.batk != status->batk)
|
||||
clif_updatestatus(sd,SP_ATK1);
|
||||
if(b_status.def != status->def)
|
||||
clif_updatestatus(sd,SP_DEF1);
|
||||
if(b_status.rhw.atk2 != status->rhw.atk2 ||
|
||||
b_status.lhw->atk2 != status->lhw->atk2)
|
||||
b_status.lhw.atk2 != status->lhw.atk2)
|
||||
clif_updatestatus(sd,SP_ATK2);
|
||||
if(b_status.def2 != status->def2)
|
||||
clif_updatestatus(sd,SP_DEF2);
|
||||
@ -3009,14 +3002,14 @@ void status_calc_bl(struct block_list *bl, unsigned long flag)
|
||||
status->rhw.atk = status_calc_watk(bl, sc, b_status->rhw.atk);
|
||||
if (!sd) //Should not affect weapon refine bonus
|
||||
status->rhw.atk2 = status_calc_watk(bl, sc, b_status->rhw.atk2);
|
||||
if(status->lhw && b_status->lhw && b_status->lhw->atk) {
|
||||
if(b_status->lhw.atk) {
|
||||
if (sd) {
|
||||
sd->state.lr_flag = 1;
|
||||
status->lhw->atk = status_calc_watk(bl, sc, b_status->lhw->atk);
|
||||
status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
|
||||
sd->state.lr_flag = 0;
|
||||
} else {
|
||||
status->lhw->atk = status_calc_watk(bl, sc, b_status->lhw->atk);
|
||||
status->lhw->atk2= status_calc_watk(bl, sc, b_status->lhw->atk2);
|
||||
status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
|
||||
status->lhw.atk2= status_calc_watk(bl, sc, b_status->lhw.atk2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3081,11 +3074,9 @@ void status_calc_bl(struct block_list *bl, unsigned long flag)
|
||||
|
||||
if(flag&SCB_ATK_ELE) {
|
||||
status->rhw.ele = status_calc_attack_element(bl, sc, b_status->rhw.ele);
|
||||
if(status->lhw && b_status->lhw) {
|
||||
if (sd) sd->state.lr_flag = 1;
|
||||
status->lhw->ele = status_calc_attack_element(bl, sc, b_status->lhw->ele);
|
||||
if (sd) sd->state.lr_flag = 0;
|
||||
}
|
||||
if (sd) sd->state.lr_flag = 1;
|
||||
status->lhw.ele = status_calc_attack_element(bl, sc, b_status->lhw.ele);
|
||||
if (sd) sd->state.lr_flag = 0;
|
||||
}
|
||||
|
||||
if(flag&SCB_DEF_ELE) {
|
||||
@ -4098,18 +4089,6 @@ struct status_data *status_get_base_status(struct block_list *bl)
|
||||
}
|
||||
}
|
||||
|
||||
unsigned short status_get_lwatk(struct block_list *bl)
|
||||
{
|
||||
struct status_data *status = status_get_status_data(bl);
|
||||
return status->lhw?status->lhw->atk:0;
|
||||
}
|
||||
|
||||
unsigned short status_get_lwatk2(struct block_list *bl)
|
||||
{
|
||||
struct status_data *status = status_get_status_data(bl);
|
||||
return status->lhw?status->lhw->atk2:0;
|
||||
}
|
||||
|
||||
signed char status_get_def(struct block_list *bl)
|
||||
{
|
||||
struct unit_data *ud;
|
||||
@ -4128,12 +4107,6 @@ unsigned short status_get_speed(struct block_list *bl)
|
||||
return status_get_status_data(bl)->speed;
|
||||
}
|
||||
|
||||
unsigned char status_get_attack_lelement(struct block_list *bl)
|
||||
{
|
||||
struct status_data *status = status_get_status_data(bl);
|
||||
return status->lhw?status->lhw->ele:0;
|
||||
}
|
||||
|
||||
int status_get_party_id(struct block_list *bl)
|
||||
{
|
||||
nullpo_retr(0, bl);
|
||||
|
@ -597,11 +597,9 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag);
|
||||
int status_heal(struct block_list *bl,int hp,int sp, int flag);
|
||||
int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
|
||||
|
||||
//Define for copying a status_data structure from b to a, without overwriting current Hp and Sp, nor messing the lhw pointer.
|
||||
#define status_cpy(a, b) { \
|
||||
memcpy(&((a)->max_hp), &((b)->max_hp), sizeof(struct status_data)-(sizeof((a)->hp)+sizeof((a)->sp)+sizeof((a)->lhw))); \
|
||||
if ((a)->lhw && (b)->lhw) { memcpy((a)->lhw, (b)->lhw, sizeof(struct weapon_atk)); } \
|
||||
}
|
||||
//Define for copying a status_data structure from b to a, without overwriting current Hp and Sp
|
||||
#define status_cpy(a, b) \
|
||||
memcpy(&((a)->max_hp), &((b)->max_hp), sizeof(struct status_data)-(sizeof((a)->hp)+sizeof((a)->sp)))
|
||||
|
||||
struct regen_data *status_get_regen_data(struct block_list *bl);
|
||||
struct status_data *status_get_status_data(struct block_list *bl);
|
||||
@ -633,8 +631,8 @@ signed char status_get_def(struct block_list *bl);
|
||||
#define status_get_watk2(bl) status_get_status_data(bl)->rhw.atk2
|
||||
#define status_get_matk_max(bl) status_get_status_data(bl)->matk_max
|
||||
#define status_get_matk_min(bl) status_get_status_data(bl)->matk_min
|
||||
unsigned short status_get_lwatk(struct block_list *bl);
|
||||
unsigned short status_get_lwatk2(struct block_list *bl);
|
||||
#define status_get_lwatk(bl) status_get_status_data(bl)->lhw.atk
|
||||
#define status_get_lwatk2(bl) status_get_status_data(bl)->lhw.atk2
|
||||
unsigned short status_get_speed(struct block_list *bl);
|
||||
#define status_get_adelay(bl) status_get_status_data(bl)->adelay
|
||||
#define status_get_amotion(bl) status_get_status_data(bl)->amotion
|
||||
@ -644,7 +642,7 @@ unsigned short status_get_speed(struct block_list *bl);
|
||||
unsigned char status_calc_attack_element(struct block_list *bl, struct status_change *sc, int element);
|
||||
#define status_get_attack_sc_element(bl, sc) status_calc_attack_element(bl, sc, 0)
|
||||
#define status_get_attack_element(bl) status_get_status_data(bl)->rhw.ele
|
||||
unsigned char status_get_attack_lelement(struct block_list *bl);
|
||||
#define status_get_attack_lelement(bl) status_get_status_data(bl)->lhw.ele
|
||||
#define status_get_race(bl) status_get_status_data(bl)->race
|
||||
#define status_get_size(bl) status_get_status_data(bl)->size
|
||||
#define status_get_mode(bl) status_get_status_data(bl)->mode
|
||||
|
Loading…
x
Reference in New Issue
Block a user