-
-
Save cydh/43f60c7f6e29a931ccd8ed62cff1ff60 to your computer and use it in GitHub Desktop.
Item bonus to change player's race to race 'r' for rAthena
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
doc/item_bonus.txt | 1 + | |
src/map/map.hpp | 1 + | |
src/map/pc.cpp | 4 ++++ | |
src/map/pc.hpp | 1 + | |
src/map/script_constants.hpp | 1 + | |
src/map/status.cpp | 5 +++++ | |
6 files changed, 13 insertions(+) | |
diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt | |
index 7ffe172b5..08ef4a571 100644 | |
--- a/doc/item_bonus.txt | |
+++ b/doc/item_bonus.txt | |
@@ -260,6 +260,7 @@ Atk/Def | |
------- | |
bonus bAtkEle,e; Gives the player's attacks element e | |
bonus bDefEle,e; Gives the player's defense element e | |
+bonus bRace,r; Set the player's race to race r | |
bonus2 bMagicAtkEle,e,x; Increases damage of e element magic by x% | |
diff --git a/src/map/map.hpp b/src/map/map.hpp | |
index 5200ff6b4..44073fbb2 100644 | |
--- a/src/map/map.hpp | |
+++ b/src/map/map.hpp | |
@@ -429,6 +429,7 @@ enum _sp { | |
// Mercenaries | |
SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190, | |
+ SP_RACE, | |
// original 1000- | |
SP_ATTACKRANGE=1000, SP_ATKELE,SP_DEFELE, // 1000-1002 | |
diff --git a/src/map/pc.cpp b/src/map/pc.cpp | |
index ab1040eca..be3d1cdee 100755 | |
--- a/src/map/pc.cpp | |
+++ b/src/map/pc.cpp | |
@@ -3217,6 +3217,10 @@ void pc_bonus(struct map_session_data *sd,int type,int val) | |
if (sd->state.lr_flag != 2) | |
sd->special_state.no_mado_fuel = 1; | |
break; | |
+ case SP_RACE: | |
+ PC_BONUS_CHK_RACE(val, SP_RACE); | |
+ sd->bonus.change_race = (enum e_race)val; | |
+ break; | |
default: | |
if (running_npc_stat_calc_event) { | |
ShowWarning("pc_bonus: unknown bonus type %d %d in OnPCStatCalcEvent!\n", type, val); | |
diff --git a/src/map/pc.hpp b/src/map/pc.hpp | |
index 05e861c64..dfebca1d9 100644 | |
--- a/src/map/pc.hpp | |
+++ b/src/map/pc.hpp | |
@@ -497,6 +497,7 @@ struct map_session_data { | |
int ematk; // matk bonus from equipment | |
int eatk; // atk bonus from equipment | |
uint8 absorb_dmg_maxhp; // [Cydh] | |
+ enum e_race change_race; | |
short critical_rangeatk; | |
short weapon_atk_rate, weapon_matk_rate; | |
} bonus; | |
diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp | |
index 5d5066a4e..2c8a2f0e9 100644 | |
--- a/src/map/script_constants.hpp | |
+++ b/src/map/script_constants.hpp | |
@@ -731,6 +731,7 @@ | |
export_constant2("bRegenPercentHP", SP_REGEN_PERCENT_HP); | |
export_constant2("bRegenPercentSP", SP_REGEN_PERCENT_SP); | |
export_constant2("bSkillDelay",SP_SKILL_DELAY); | |
+ export_constant2("bRace", SP_RACE); | |
/* equip indices */ | |
export_constant(EQI_COMPOUND_ON); | |
diff --git a/src/map/status.cpp b/src/map/status.cpp | |
index d08be8e81..67546d1c2 100644 | |
--- a/src/map/status.cpp | |
+++ b/src/map/status.cpp | |
@@ -3495,6 +3495,7 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) | |
); | |
memset (&sd->bonus, 0, sizeof(sd->bonus)); | |
+ sd->bonus.change_race = RC_NONE_; | |
// Autobonus | |
pc_delautobonus(sd,sd->autobonus,ARRAYLENGTH(sd->autobonus),true); | |
@@ -4208,6 +4209,10 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) | |
if (sc->data[SC_LAUDARAMUS]) | |
sd->bonus.crit_atk_rate += 5 * sc->data[SC_LAUDARAMUS]->val1; | |
} | |
+ | |
+ if (sd->bonus.change_race != RC_NONE_) | |
+ base_status->race = sd->bonus.change_race; | |
+ | |
status_cpy(&sd->battle_status, base_status); | |
// ----- CLIENT-SIDE REFRESH ----- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment