summaryrefslogtreecommitdiff
path: root/src/map/status.c
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-03-18 01:37:53 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-03-18 01:37:53 +0000
commitaefef10ae8e198660785b9dbaa267751274ba672 (patch)
treecc3acdb6ce754e5d16cd458138ec98618db51f05 /src/map/status.c
parent9374324b4198605a9ee57f31de010ae18af49256 (diff)
downloadhercules-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.c59
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: