diff options
author | rud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-06-29 15:52:29 +0000 |
---|---|---|
committer | rud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-06-29 15:52:29 +0000 |
commit | 86aafca6da0a843db09a33e74faf8d9bb77e2508 (patch) | |
tree | ae44006b9f05054ccdf479780b2d0a03743252e4 /src/map/pc.c | |
parent | 05972632af5de3ddce35ea54797bf3a0598368b2 (diff) | |
download | hercules-86aafca6da0a843db09a33e74faf8d9bb77e2508.tar.gz hercules-86aafca6da0a843db09a33e74faf8d9bb77e2508.tar.bz2 hercules-86aafca6da0a843db09a33e74faf8d9bb77e2508.tar.xz hercules-86aafca6da0a843db09a33e74faf8d9bb77e2508.zip |
Implemented new item script bonuses:
- bSkillCooldown,n,x;
- bSkillFixedCast,n,x;
- *bSkillVariableCast,n,x;
- bFixedCastrate,x;
- *bVariableCastrate,x;
*Pending until RE Casting system is fully implemented.
ATM bCastrate is used to manipulate variable cast time where it should not.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16355 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/pc.c')
-rw-r--r-- | src/map/pc.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/map/pc.c b/src/map/pc.c index c4a2c4ef9..928eec87c 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2583,6 +2583,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val) if(sd->state.lr_flag != 2) sd->bonus.sp_base_matk += val; break; + case SP_FIXCASTRATE: + if(sd->state.lr_flag != 2) + sd->fixcastrate+=val; + break; + case SP_VARCASTRATE: + if(sd->state.lr_flag != 2) + sd->varcastrate+=val; + break; default: ShowWarning("pc_bonus: unknown type %d %d !\n",type,val); break; @@ -3064,7 +3072,55 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->sprateskill[i].id = type2; sd->sprateskill[i].val = val; } - break; + break; + case SP_SKILL_COOLDOWN: + if(sd->state.lr_flag == 2) + break; + ARR_FIND(0, ARRAYLENGTH(sd->skillcooldown), i, sd->skillcooldown[i].id == 0 || sd->skillcooldown[i].id == type2); + if (i == ARRAYLENGTH(sd->skillcooldown)) + { + ShowDebug("run_script: bonus2 bSkillCoolDown reached it's limit (%d skills per character), bonus skill %d (+%d%%) lost.\n", ARRAYLENGTH(sd->skillcooldown), type2, val); + break; + } + if (sd->skillcooldown[i].id == type2) + sd->skillcooldown[i].val += val; + else { + sd->skillcooldown[i].id = type2; + sd->skillcooldown[i].val = val; + } + break; + case SP_SKILL_FIXEDCAST: + if(sd->state.lr_flag == 2) + break; + ARR_FIND(0, ARRAYLENGTH(sd->skillfixcast), i, sd->skillfixcast[i].id == 0 || sd->skillfixcast[i].id == type2); + if (i == ARRAYLENGTH(sd->skillfixcast)) + { + ShowDebug("run_script: bonus2 bSkillFixedCast reached it's limit (%d skills per character), bonus skill %d (+%d%%) lost.\n", ARRAYLENGTH(sd->skillfixcast), type2, val); + break; + } + if (sd->skillfixcast[i].id == type2) + sd->skillfixcast[i].val += val; + else { + sd->skillfixcast[i].id = type2; + sd->skillfixcast[i].val = val; + } + break; + case SP_SKILL_VARIABLECAST: + if(sd->state.lr_flag == 2) + break; + ARR_FIND(0, ARRAYLENGTH(sd->skillvarcast), i, sd->skillvarcast[i].id == 0 || sd->skillvarcast[i].id == type2); + if (i == ARRAYLENGTH(sd->skillvarcast)) + { + ShowDebug("run_script: bonus2 bSkillVariableCast reached it's limit (%d skills per character), bonus skill %d (+%d%%) lost.\n", ARRAYLENGTH(sd->skillvarcast), type2, val); + break; + } + if (sd->skillvarcast[i].id == type2) + sd->skillvarcast[i].val += val; + else { + sd->skillvarcast[i].id = type2; + sd->skillvarcast[i].val = val; + } + break; default: ShowWarning("pc_bonus2: unknown type %d %d %d!\n",type,type2,val); break; |