Sfoglia il codice sorgente

Added 2 new item bonuses as per kenpachi's request:
- bonus2 bHPGainRaceAttack
- bonus2 bSPGainRaceAttack

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15608 54d463be-8e91-2dee-dedb-b68131a5f0ec

shennetsind 13 anni fa
parent
commit
93f8dc1ffd
7 ha cambiato i file con 25 aggiunte e 3 eliminazioni
  1. 2 0
      db/const.txt
  2. 3 0
      doc/item_bonus.txt
  3. 7 1
      src/map/battle.c
  4. 1 1
      src/map/map.h
  5. 8 1
      src/map/pc.c
  6. 2 0
      src/map/pc.h
  7. 2 0
      src/map/status.c

+ 2 - 0
db/const.txt

@@ -559,6 +559,8 @@ bMagicHPGainValue	2044
 bAddClassDropItem	2045
 bWeaponMatk	2046
 bMatk	2047
+bSPGainRaceAttack	2048
+bHPGainRaceAttack	2049
 
 EQI_HEAD_TOP	1
 EQI_ARMOR	2

+ 3 - 0
doc/item_bonus.txt

@@ -422,3 +422,6 @@ bonus bMagicSPGainValue,n;		Heals +n SP when killing an enemy with magic attack.
 bonus bMagicHPGainValue,n;		Heals +n HP when killing an enemy with magic attack.
 
 bonus3 bAddClassDropItem,s,x,n;		Adds an n/100% chance of dropping item s when killing monster class x.
+
+bonus2 bHPGainRaceAttack,x,n;		Heals n HP when attacking x Race on every hit
+bonus2 bSPGainRaceAttack,x,n;		Heals n SP when attacking x Race on every hit

+ 7 - 1
src/map/battle.c

@@ -3792,7 +3792,7 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int rdamage, int ldamage,
 		sp = wd->sp_drain[type].value;
 		if (wd->sp_drain[type].rate)
 			sp += battle_calc_drain(*damage, wd->sp_drain[type].rate, wd->sp_drain[type].per);
-
+		
 		if (hp) {
 			if (wd->hp_drain[type].type)
 				rhp += hp;
@@ -3807,6 +3807,12 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int rdamage, int ldamage,
 
 	if (sd->sp_vanish_rate && rnd()%1000 < sd->sp_vanish_rate)
 		status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->sp_vanish_per, false);
+
+	if( sd->sp_gain_race_attack[race] )
+		tsp += sd->sp_gain_race_attack[race];
+	if( sd->hp_gain_race_attack[race] )
+		thp += sd->hp_gain_race_attack[race];
+
 	if (!thp && !tsp) return;
 
 	status_heal(&sd->bl, thp, tsp, battle_config.show_hp_sp_drain?3:1);

+ 1 - 1
src/map/map.h

@@ -370,7 +370,7 @@ enum _sp {
 	SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD,  // 2034-2037
 	SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040
 	SP_ADD_SKILL_BLOW, SP_SP_VANISH_RATE, SP_MAGIC_SP_GAIN_VALUE, SP_MAGIC_HP_GAIN_VALUE, SP_ADD_CLASS_DROP_ITEM, //2041-2045
-	SP_WEAPON_MATK, SP_BASE_MATK //2046-2047
+	SP_WEAPON_MATK, SP_BASE_MATK, SP_SP_GAIN_RACE_ATTACK, SP_HP_GAIN_RACE_ATTACK //2046-2049
 };
 
 enum _look {

+ 8 - 1
src/map/pc.c

@@ -2971,7 +2971,14 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
 		if(sd->state.lr_flag != 2)
 			sd->ignore_def[type2] += val;
 		break;
-
+	case SP_SP_GAIN_RACE_ATTACK:
+		if(sd->state.lr_flag != 2)
+			sd->sp_gain_race_attack[type2] = cap_value(sd->sp_gain_race_attack[type2] + val, 0, INT16_MAX);
+		break;
+	case SP_HP_GAIN_RACE_ATTACK:
+		if(sd->state.lr_flag != 2)
+			sd->hp_gain_race_attack[type2] = cap_value(sd->hp_gain_race_attack[type2] + val, 0, INT16_MAX);
+		break;
 	default:
 		ShowWarning("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);
 		break;

+ 2 - 0
src/map/pc.h

@@ -249,6 +249,8 @@ struct map_session_data {
 	int ignore_def[RC_MAX];
 	int itemgrouphealrate[MAX_ITEMGROUP];
 	short sp_gain_race[RC_MAX];
+	short sp_gain_race_attack[RC_MAX];
+	short hp_gain_race_attack[RC_MAX];
 	// zeroed arrays end here.
 	// zeroed structures start here
 	struct s_autospell autospell[15], autospell2[15], autospell3[15];

+ 2 - 0
src/map/status.c

@@ -2103,6 +2103,8 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 		+ sizeof(sd->ignore_def)
 		+ sizeof(sd->itemgrouphealrate)
 		+ sizeof(sd->sp_gain_race)
+		+ sizeof(sd->sp_gain_race_attack)
+		+ sizeof(sd->hp_gain_race_attack)
 		);
 
 	memset (&sd->right_weapon.overrefine, 0, sizeof(sd->right_weapon) - sizeof(sd->right_weapon.atkmods));