Selaa lähdekoodia

Implemented additional item bonus bMagicAddRace2 and bIGnoreMdefRace2Rate

Jittapan Pluemsumran 9 vuotta sitten
vanhempi
commit
0f1b1af928
5 muutettua tiedostoa jossa 22 lisäystä ja 5 poistoa
  1. 5 4
      src/map/battle.c
  2. 2 1
      src/map/map.h
  3. 10 0
      src/map/pc.c
  4. 2 0
      src/map/pc.h
  5. 3 0
      src/map/script_constants.h

+ 5 - 4
src/map/battle.c

@@ -570,6 +570,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
 	sstatus = status_get_status_data(src);
 	tstatus = status_get_status_data(target);
 	s_race2 = status_get_race2(src);
+	t_race2 = status_get_race2(target);
 	s_defele = (tsd) ? (enum e_element)status_get_element(src) : ELE_NONE;
 
 //Official servers apply the cardfix value on a base of 1000 and round down the reduction/increase
@@ -579,7 +580,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
 		case BF_MAGIC:
 			// Affected by attacker ATK bonuses
 			if( sd && !(nk&NK_NO_CARDFIX_ATK) ) {
-				cardfix = cardfix * (100 + sd->magic_addrace[tstatus->race] + sd->magic_addrace[RC_ALL]) / 100;
+				cardfix = cardfix * (100 + sd->magic_addrace[tstatus->race] + sd->magic_addrace[RC_ALL] + sd->magic_addrace2[t_race2]) / 100;
 				if( !(nk&NK_NO_ELEFIX) ) { // Affected by Element modifier bonuses
 					cardfix = cardfix * (100 + sd->magic_addele[tstatus->def_ele] + sd->magic_addele[ELE_ALL] + 
 						sd->magic_addele_script[tstatus->def_ele] + sd->magic_addele_script[ELE_ALL]) / 100;
@@ -643,7 +644,6 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
 			break;
 
 		case BF_WEAPON:
-			t_race2 = status_get_race2(target);
 			// Affected by attacker ATK bonuses
 			if( sd && !(nk&NK_NO_CARDFIX_ATK) && (left&2) ) {
 				short cardfix_ = 1000;
@@ -5525,6 +5525,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 	int skill_damage = 0;
 #endif
 	short s_ele = 0;
+	enum e_race2 t_race2;
 
 	TBL_PC *sd;
 	TBL_PC *tsd;
@@ -5559,7 +5560,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 	tsd = BL_CAST(BL_PC, target);
 	sc = status_get_sc(src);
 	tsc = status_get_sc(target);
-
+	t_race2 = status_get_race2(target);
 	//Initialize variables that will be used afterwards
 	s_ele = skill_get_ele(skill_id, skill_lv);
 
@@ -6123,7 +6124,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 				mdef <<= 1; // only eMDEF is doubled
 #endif
 			if(sd) {
-				i = sd->ignore_mdef_by_race[tstatus->race] + sd->ignore_mdef_by_race[RC_ALL];
+				i = sd->ignore_mdef_by_race[tstatus->race] + sd->ignore_mdef_by_race2[t_race2] + sd->ignore_mdef_by_race[RC_ALL];
 				i += sd->ignore_mdef_by_class[tstatus->class_] + sd->ignore_mdef_by_class[CLASS_ALL];
 				if (i)
 				{

+ 2 - 1
src/map/map.h

@@ -296,6 +296,7 @@ enum e_race2 {
 	RC2_GVG,
 	RC2_BATTLEFIELD,
 	RC2_TREASURE,
+	RC2_BIOLAB,
 	RC2_MAX
 };
 
@@ -464,7 +465,7 @@ enum _sp {
 	SP_WEAPON_COMA_CLASS, SP_IGNORE_MDEF_CLASS_RATE, SP_EXP_ADDCLASS, SP_ADD_CLASS_DROP_ITEM, //2067-2070
 	SP_ADD_CLASS_DROP_ITEMGROUP, SP_ADDMAXWEIGHT, SP_ADD_ITEMGROUP_HEAL_RATE,  // 2071-2073
 	SP_HP_VANISH_RACE_RATE, SP_SP_VANISH_RACE_RATE, SP_ABSORB_DMG_MAXHP, SP_SUB_SKILL, SP_SUBDEF_ELE, // 2074-2078
-	SP_STATE_NORECOVER_RACE, SP_CRITICAL_RANGEATK, // 2079-2080
+	SP_STATE_NORECOVER_RACE, SP_CRITICAL_RANGEATK, SP_MAGIC_ADDRACE2, SP_IGNORE_MDEF_RACE2_RATE // 2079-2082
 };
 
 enum _look {

+ 10 - 0
src/map/pc.c

@@ -3673,6 +3673,16 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
 		sd->coma_race[type2] += val;
 		sd->special_state.bonus_coma = 1;
 		break;
+	case SP_MAGIC_ADDRACE2: // bonus2 bMagicAddRace2,r,n;
+		PC_BONUS_CHK_RACE2(type2, SP_MAGIC_ADDRACE2);
+		if(sd->state.lr_flag != 2)
+			sd->magic_addrace2[type2] += val;
+		break;
+	case SP_IGNORE_MDEF_RACE2_RATE: //bonus2 bIgnoreMdefRace2Rate,r,n;
+		PC_BONUS_CHK_RACE2(type2, SP_IGNORE_MDEF_RACE2);
+		if (sd->state.lr_flag != 2)
+			sd->ignore_mdef_by_race2[type2] += val;
+		break;
 	default:
 		ShowWarning("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);
 		break;

+ 2 - 0
src/map/pc.h

@@ -366,6 +366,8 @@ struct map_session_data {
 	int ignore_mdef_by_class[CLASS_MAX];
 	int ignore_def_by_race[RC_MAX];
 	short sp_gain_race[RC_MAX];
+	int magic_addrace2[RC2_MAX];
+	int ignore_mdef_by_race2[RC2_MAX];
 	// zeroed arrays end here.
 
 	// zeroed structures start here

+ 3 - 0
src/map/script_constants.h

@@ -652,6 +652,8 @@
 	script_set_constant("bSubDefEle",SP_SUBDEF_ELE,false);
 	script_set_constant("bStateNoRecoverRace",SP_STATE_NORECOVER_RACE,false);
 	script_set_constant("bCriticalLong",SP_CRITICAL_RANGEATK,false);
+	script_set_constant("bMagicAddRace2", SP_MAGIC_ADDRACE2, false);
+	script_set_constant("bIgnoreMdefRace2Rate", SP_IGNORE_MDEF_RACE2_RATE, false);
 
 	/* equip positions */
 	export_constant(EQI_HEAD_TOP);
@@ -2414,6 +2416,7 @@
 	export_constant(RC2_GVG);
 	export_constant(RC2_BATTLEFIELD);
 	export_constant(RC2_TREASURE);
+	export_constant(RC2_BIOLAB);
 
 	/* classes */
 	export_constant(CLASS_NORMAL);