Browse Source

- 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
skotlex 17 years ago
parent
commit
655100c9e2
7 changed files with 66 additions and 93 deletions
  1. 6 6
      src/map/battle.c
  2. 4 4
      src/map/clif.c
  3. 1 2
      src/map/map.h
  4. 29 26
      src/map/mob.c
  5. 6 6
      src/map/pc.c
  6. 14 41
      src/map/status.c
  7. 6 8
      src/map/status.h

+ 6 - 6
src/map/battle.c

@@ -705,7 +705,7 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
 			atkmin = atkmax;
 			atkmin = atkmax;
 	} else {	//PCs
 	} else {	//PCs
 		atkmax = wa->atk;
 		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))
 		if (!(flag&1) || (flag&2))
 		{	//Normal attacks
 		{	//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);
 	s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
 	if (!skill_num || s_ele == -1) { //Take weapon's element
 	if (!skill_num || s_ele == -1) { //Take weapon's element
 		s_ele = sstatus->rhw.ele;
 		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)
 		if (flag.arrow && sd && sd->arrow_ele)
 			s_ele = sd->arrow_ele;
 			s_ele = sd->arrow_ele;
 	} else if (s_ele == -2) { //Use enchantment's element
 	} 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.rh=0;
 			flag.lh=1;
 			flag.lh=1;
 		}
 		}
-		if (sstatus->lhw && sstatus->lhw->atk)
+		if (sstatus->lhw.atk)
 			flag.lh=1;
 			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);
 				wd.damage = battle_calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, sd, i);
 				if (flag.lh)
 				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 (nk&NK_SPLASHSPLIT){ // Divide ATK among targets
 					if(wflag>0)
 					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 (sd && flag.weapon && skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) {
 			if (skill_num == MO_FINGEROFFENSIVE) //Counts refine bonus multiple times
 			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 {
 			} else {
-				ATK_ADD2(sstatus->rhw.atk2, sstatus->lhw->atk2);
+				ATK_ADD2(sstatus->rhw.atk2, sstatus->lhw.atk2);
 			}
 			}
 		}
 		}
 
 

+ 4 - 4
src/map/clif.c

@@ -2275,7 +2275,7 @@ int clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOL(fd,4)=sd->battle_status.amotion;
 		WFIFOL(fd,4)=sd->battle_status.amotion;
 		break;
 		break;
 	case SP_ATK1:
 	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;
 		break;
 	case SP_DEF1:
 	case SP_DEF1:
 		WFIFOL(fd,4)=sd->battle_status.def;
 		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;
 		WFIFOL(fd,4)=sd->battle_status.mdef;
 		break;
 		break;
 	case SP_ATK2:
 	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;
 		break;
 	case SP_DEF2:
 	case SP_DEF2:
 		WFIFOL(fd,4)=sd->battle_status.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,14)=min(sd->status.luk, UCHAR_MAX);
 	WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK);
 	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,20) = sd->battle_status.matk_max;
 	WBUFW(buf,22) = sd->battle_status.matk_min;
 	WBUFW(buf,22) = sd->battle_status.matk_min;
 	WBUFW(buf,24) = sd->battle_status.def; // def
 	WBUFW(buf,24) = sd->battle_status.def; // def

+ 1 - 2
src/map/map.h

@@ -356,7 +356,7 @@ struct status_data {
 		size, race;
 		size, race;
 	signed char
 	signed char
 		def, mdef;
 		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 {
 struct script_reg {
@@ -512,7 +512,6 @@ struct map_session_data {
 	struct unit_data ud;
 	struct unit_data ud;
 	struct view_data vd;
 	struct view_data vd;
 	struct status_data base_status, battle_status;
 	struct status_data base_status, battle_status;
-	struct weapon_atk base_lhw, battle_lhw; //Left-hand weapon atk data.
 	struct status_change sc;
 	struct status_change sc;
 	struct regen_data regen;
 	struct regen_data regen;
 	struct regen_data_sub sregen, ssregen;
 	struct regen_data_sub sregen, ssregen;

+ 29 - 26
src/map/mob.c

@@ -2941,40 +2941,43 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
 	int i,j,inf,skill_id;
 	int i,j,inf,skill_id;
 	struct mob_data *md;
 	struct mob_data *md;
 	struct mob_skill *ms;
 	struct mob_skill *ms;
-	
+	struct mob_db* db;
+	struct status_data *status;
+
 	nullpo_retr(0, sd);
 	nullpo_retr(0, sd);
 
 
 	ARR_FIND( MOB_CLONE_START, MOB_CLONE_END, class_, mob_db_data[class_] == NULL );
 	ARR_FIND( MOB_CLONE_START, MOB_CLONE_END, class_, mob_db_data[class_] == NULL );
 	if(class_ >= MOB_CLONE_END)
 	if(class_ >= MOB_CLONE_END)
 		return 0;
 		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.
 	if (mode) //User provided mode.
-		mob_db_data[class_]->status.mode = mode; 
+		status->mode = mode; 
 	else if (flag&1) //Friendly Character, remove looting.
 	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]
 	//Skill copy [Skotlex]
-	ms = &mob_db_data[class_]->skill[0];
+	ms = &db->skill[0];
 	//Go Backwards to give better priority to advanced skills.
 	//Go Backwards to give better priority to advanced skills.
 	for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
 	for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
 		skill_id = skill_tree[sd->status.class_][j].id;
 		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.
 			if (i+1 < MAX_MOBSKILL) { //duplicate this so it also triggers on self.
 				memcpy(&ms[i+1], &ms[i], sizeof(struct mob_skill));
 				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].target = MST_SELF;
 				ms[i].cond1 = MSC_MYHPLTMAXRATE;
 				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)
 		if (battle_config.mob_skill_delay != 100)
 			ms[i].delay = ms[i].delay*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.
 	//Finally, spawn it.
 	md = mob_once_spawn_sub(&sd->bl, m, x, y, "--en--",class_,event);
 	md = mob_once_spawn_sub(&sd->bl, m, x, y, "--en--",class_,event);

+ 6 - 6
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);
 			status->rhw.atk = cap_value(bonus, 0, USHRT_MAX);
 		}
 		}
 		else if(sd->state.lr_flag == 1) {
 		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;
 		break;
 	case SP_ATK2:
 	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);
 			status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
 		}
 		}
 		else if(sd->state.lr_flag == 1) {
 		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;
 		break;
 	case SP_BASE_ATK:
 	case SP_BASE_ATK:
@@ -1535,7 +1535,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 			}
 			}
 			break;
 			break;
 		case 1:
 		case 1:
-			status->lhw->ele=val;
+			status->lhw.ele=val;
 			break;
 			break;
 		default:
 		default:
 			status->rhw.ele=val;
 			status->rhw.ele=val;
@@ -1594,7 +1594,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 			}
 			}
 			break;
 			break;
 		case 1:
 		case 1:
-			status->lhw->range += val;
+			status->lhw.range += val;
 			break;
 			break;
 		default:
 		default:
 			status->rhw.range += val;
 			status->rhw.range += val;

+ 14 - 41
src/map/status.c

@@ -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]
 	static int calculating = 0; //Check for recursive call preemption. [Skotlex]
 	struct status_data b_status, *status;
 	struct status_data b_status, *status;
-	struct weapon_atk b_lhw;
 	struct skill b_skill[MAX_SKILL];
 	struct skill b_skill[MAX_SKILL];
 
 
 	int b_weight,b_max_weight;
 	int b_weight,b_max_weight;
@@ -1612,9 +1611,6 @@ int status_calc_pc(struct map_session_data* sd,int first)
 		return -1;
 		return -1;
 
 
 	memcpy(&b_status, &sd->battle_status, sizeof(struct status_data));
 	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));
 	memcpy(b_skill,&sd->status.skill,sizeof(b_skill));
 	b_weight = sd->weight;
 	b_weight = sd->weight;
 	b_max_weight = sd->max_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.
 		//Load Hp/SP from char-received data.
 		sd->battle_status.hp = sd->status.hp;
 		sd->battle_status.hp = sd->status.hp;
 		sd->battle_status.sp = sd->status.sp;
 		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.sregen = &sd->sregen;
 		sd->regen.ssregen = &sd->ssregen;
 		sd->regen.ssregen = &sd->ssregen;
 		sd->weight=0;
 		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);
 		clif_status_load(&sd->bl, SI_INTRAVISION, 0);
 
 
 	memset(&sd->special_state,0,sizeof(sd->special_state));
 	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]
 	//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;
 	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;
 				wlv = MAX_REFINE_BONUS - 1;
 			if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L) {
 			if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L) {
 				wd = &sd->left_weapon; // Left-hand weapon
 				wd = &sd->left_weapon; // Left-hand weapon
-				wa = status->lhw;
+				wa = &status->lhw;
 			} else {
 			} else {
 				wd = &sd->right_weapon;
 				wd = &sd->right_weapon;
 				wa = &status->rhw;
 				wa = &status->rhw;
@@ -1945,9 +1938,9 @@ int status_calc_pc(struct map_session_data* sd,int first)
 	//param_bonus now holds card bonuses.
 	//param_bonus now holds card bonuses.
 
 
 	if(status->rhw.range < 1) status->rhw.range = 1;
 	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->double_rate += sd->double_add_rate;
 	sd->perfect_hit += sd->perfect_hit_add;
 	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)
 	if(b_status.amotion != status->amotion)
 		clif_updatestatus(sd,SP_ASPD);
 		clif_updatestatus(sd,SP_ASPD);
 	if(b_status.rhw.atk != status->rhw.atk ||
 	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)
 		b_status.batk != status->batk)
 		clif_updatestatus(sd,SP_ATK1);
 		clif_updatestatus(sd,SP_ATK1);
 	if(b_status.def != status->def)
 	if(b_status.def != status->def)
 		clif_updatestatus(sd,SP_DEF1);
 		clif_updatestatus(sd,SP_DEF1);
 	if(b_status.rhw.atk2 != status->rhw.atk2 ||
 	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);
 		clif_updatestatus(sd,SP_ATK2);
 	if(b_status.def2 != status->def2)
 	if(b_status.def2 != status->def2)
 		clif_updatestatus(sd,SP_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);
 		status->rhw.atk = status_calc_watk(bl, sc, b_status->rhw.atk);
 		if (!sd) //Should not affect weapon refine bonus
 		if (!sd) //Should not affect weapon refine bonus
 			status->rhw.atk2 = status_calc_watk(bl, sc, b_status->rhw.atk2);
 			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) {
 			if (sd) {
 				sd->state.lr_flag = 1;
 				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;
 				sd->state.lr_flag = 0;
 			} else {
 			} 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) {
 	if(flag&SCB_ATK_ELE) {
 		status->rhw.ele = status_calc_attack_element(bl, sc, b_status->rhw.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) {
 	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)
 signed char status_get_def(struct block_list *bl)
 {
 {
 	struct unit_data *ud;
 	struct unit_data *ud;
@@ -4128,12 +4107,6 @@ unsigned short status_get_speed(struct block_list *bl)
 	return status_get_status_data(bl)->speed;
 	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)
 int status_get_party_id(struct block_list *bl)
 {
 {
 	nullpo_retr(0, bl);
 	nullpo_retr(0, bl);

+ 6 - 8
src/map/status.h

@@ -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_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);
 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 regen_data *status_get_regen_data(struct block_list *bl);
 struct status_data *status_get_status_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_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_max(bl) status_get_status_data(bl)->matk_max
 #define status_get_matk_min(bl) status_get_status_data(bl)->matk_min
 #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);
 unsigned short status_get_speed(struct block_list *bl);
 #define status_get_adelay(bl) status_get_status_data(bl)->adelay
 #define status_get_adelay(bl) status_get_status_data(bl)->adelay
 #define status_get_amotion(bl) status_get_status_data(bl)->amotion
 #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);
 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_sc_element(bl, sc) status_calc_attack_element(bl, sc, 0)
 #define status_get_attack_element(bl) status_get_status_data(bl)->rhw.ele
 #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_race(bl) status_get_status_data(bl)->race
 #define status_get_size(bl) status_get_status_data(bl)->size
 #define status_get_size(bl) status_get_status_data(bl)->size
 #define status_get_mode(bl) status_get_status_data(bl)->mode
 #define status_get_mode(bl) status_get_status_data(bl)->mode