diff options
author | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-03-18 01:37:53 +0000 |
---|---|---|
committer | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-03-18 01:37:53 +0000 |
commit | aefef10ae8e198660785b9dbaa267751274ba672 (patch) | |
tree | cc3acdb6ce754e5d16cd458138ec98618db51f05 /src/map/status.c | |
parent | 9374324b4198605a9ee57f31de010ae18af49256 (diff) | |
download | hercules-aefef10ae8e198660785b9dbaa267751274ba672.tar.gz hercules-aefef10ae8e198660785b9dbaa267751274ba672.tar.bz2 hercules-aefef10ae8e198660785b9dbaa267751274ba672.tar.xz hercules-aefef10ae8e198660785b9dbaa267751274ba672.zip |
Added Official Guild Aura Implementation bugreport:667
Before:
- Guild Aura would only trigger when guild master moved
Now:
- Guild Aura is triggered when master moves and/or when guild mate gets inside the area
- Guild Aura range is no longer hardcoded, you may modify it from skill_unit_db
Also:
- Added new skill_unit_db target type 'guild'
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15707 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/src/map/status.c b/src/map/status.c index f5c588b27..77525aed1 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -495,7 +495,11 @@ void initChangeTables(void) set_sc( MER_BLESSING , SC_BLESSING , SI_BLESSING , SCB_STR|SCB_INT|SCB_DEX ); set_sc( MER_INCAGI , SC_INCREASEAGI , SI_INCREASEAGI , SCB_AGI|SCB_SPEED ); - set_sc( GD_LEADERSHIP , SC_GUILDAURA , SI_BLANK , SCB_STR|SCB_AGI|SCB_VIT|SCB_DEX ); + set_sc( GD_LEADERSHIP , SC_LEADERSHIP , SI_BLANK , SCB_STR ); + set_sc( GD_GLORYWOUNDS , SC_GLORYWOUNDS , SI_BLANK , SCB_VIT ); + set_sc( GD_SOULCOLD , SC_SOULCOLD , SI_BLANK , SCB_AGI ); + set_sc( GD_HAWKEYES , SC_HAWKEYES , SI_BLANK , SCB_DEX ); + set_sc( GD_BATTLEORDER , SC_BATTLEORDERS , SI_BLANK , SCB_STR|SCB_INT|SCB_DEX ); set_sc( GD_REGENERATION , SC_REGENERATION , SI_BLANK , SCB_REGEN ); @@ -3721,8 +3725,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang str += sc->data[SC_FOOD_STR_CASH]->val1; if(sc->data[SC_BATTLEORDERS]) str += 5; - if(sc->data[SC_GUILDAURA] && sc->data[SC_GUILDAURA]->val3>>16) - str += (sc->data[SC_GUILDAURA]->val3)>>16; + if(sc->data[SC_LEADERSHIP]) + str += sc->data[SC_LEADERSHIP]->val1; if(sc->data[SC_LOUD]) str += 4; if(sc->data[SC_TRUESIGHT]) @@ -3772,8 +3776,8 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang agi += sc->data[SC_AGIFOOD]->val1; if(sc->data[SC_FOOD_AGI_CASH]) agi += sc->data[SC_FOOD_AGI_CASH]->val1; - if(sc->data[SC_GUILDAURA] && (sc->data[SC_GUILDAURA]->val4)>>16) - agi += (sc->data[SC_GUILDAURA]->val4)>>16; + if(sc->data[SC_SOULCOLD]) + agi += sc->data[SC_SOULCOLD]->val1; if(sc->data[SC_TRUESIGHT]) agi += 5; if(sc->data[SC_INCREASEAGI]) @@ -3822,8 +3826,8 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang vit += sc->data[SC_FOOD_VIT_CASH]->val1; if(sc->data[SC_CHANGE]) vit += sc->data[SC_CHANGE]->val2; - if(sc->data[SC_GUILDAURA] && sc->data[SC_GUILDAURA]->val3&0xFFFF) - vit += sc->data[SC_GUILDAURA]->val3&0xFFFF; + if(sc->data[SC_GLORYWOUNDS]) + vit += sc->data[SC_GLORYWOUNDS]->val1; if(sc->data[SC_TRUESIGHT]) vit += 5; if(sc->data[SC_STRIPARMOR]) @@ -3917,8 +3921,8 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang dex += sc->data[SC_FOOD_DEX_CASH]->val1; if(sc->data[SC_BATTLEORDERS]) dex += 5; - if(sc->data[SC_GUILDAURA] && sc->data[SC_GUILDAURA]->val4&0xFFFF) - dex += sc->data[SC_GUILDAURA]->val4&0xFFFF; + if(sc->data[SC_HAWKEYES]) + dex += sc->data[SC_HAWKEYES]->val1; if(sc->data[SC_TRUESIGHT]) dex += 5; if(sc->data[SC_QUAGMIRE]) @@ -6252,10 +6256,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val } //Check for overlapping fails - if( (sce = sc->data[type]) ) - { - switch( type ) - { + if( (sce = sc->data[type]) ) { + switch( type ) { case SC_MERC_FLEEUP: case SC_MERC_ATKUP: case SC_MERC_HPUP: @@ -6343,6 +6345,13 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_SHAPESHIFT: case SC_PROPERTYWALK: break; + case SC_LEADERSHIP: + case SC_GLORYWOUNDS: + case SC_SOULCOLD: + case SC_HAWKEYES: + if( sce->val4 && !val4 )//you cannot override master guild aura + return 0; + break; case SC_JOINTBEAT: val2 |= sce->val2; // stackable ailments default: @@ -9078,17 +9087,6 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) } break; - case SC_GUILDAURA: - { - struct block_list *tbl = map_id2bl(sce->val2); - - if (tbl && battle_check_range(bl, tbl, 2)){ - sc_timer_next(1000 + tick, status_change_timer, bl->id, data); - return 0; - } - } - break; - case SC_JAILED: if(sce->val1 == INT_MAX || --(sce->val1) > 0) { @@ -9545,9 +9543,16 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) clif_sitting(bl); } sc_timer_next(10000 + tick, status_change_timer, bl->id, data); + return 0; } break; - + case SC_LEADERSHIP: + case SC_GLORYWOUNDS: + case SC_SOULCOLD: + case SC_HAWKEYES: + /* they only end by status_change_end */ + sc_timer_next(600000 + tick, status_change_timer, bl->id, data); + return 0; } // default for all non-handled control paths is to end the status @@ -9650,6 +9655,10 @@ int status_change_clear_buffs (struct block_list* bl, int type) case SC_COMBO: case SC_SMA: case SC_DANCING: + case SC_LEADERSHIP: + case SC_GLORYWOUNDS: + case SC_SOULCOLD: + case SC_HAWKEYES: case SC_GUILDAURA: case SC_SAFETYWALL: case SC_PNEUMA: |