diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/map/mercenary.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 27 | ||||
-rw-r--r-- | src/map/status.c | 16 | ||||
-rw-r--r-- | src/map/unit.c | 14 |
5 files changed, 32 insertions, 30 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index c8b112f94..20d020f79 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/08/02
+ * Recoded the GuildAura code to use val3 & val4, allowing much greater stat
+ bonuses (in case someone wants to get Guild Skill level 20 or something
+ crazy like that) [Skotlex]
* Updated battle_check_target so that all alchemist summoned mobs can be
target by everyone. [Skotlex]
* Cleaned up skill_check_condition_mob_master_sub, it will now count both
diff --git a/src/map/mercenary.c b/src/map/mercenary.c index 7a5a8217c..d35aefe9b 100644 --- a/src/map/mercenary.c +++ b/src/map/mercenary.c @@ -657,7 +657,7 @@ static int merc_hom_hungry(int tid,unsigned int tick,int id,int data) merc_stop_attack(hd);
// Send homunculus_dead to client
sd->homunculus.hp = 0;
- clif_hominfo(sd, 0);
+ clif_hominfo(sd, hd, 0);
merc_hom_delete(hd,1);
clif_emotion(&sd->bl, 23) ; //omg
return 0 ;
diff --git a/src/map/skill.c b/src/map/skill.c index 605a02006..4992cce2c 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2274,29 +2274,28 @@ static int skill_check_unit_range2 (struct block_list *bl, int x, int y, int ski int skill_guildaura_sub (struct block_list *bl, va_list ap) { struct map_session_data *sd; - int gid, id, *flag; + int gid, id, strvit, agidex; - nullpo_retr(0, sd = (struct map_session_data *)bl); - nullpo_retr(0, ap); + sd = (struct map_session_data *)bl; id = va_arg(ap,int); gid = va_arg(ap,int); if (sd->status.guild_id != gid) return 0; - nullpo_retr(0, flag = va_arg(ap,int *)); + strvit = va_arg(ap,int); + agidex = va_arg(ap,int); - if (flag && *flag > 0) { - if (sd->sc.count && sd->sc.data[SC_GUILDAURA].timer != -1) { - if (sd->sc.data[SC_GUILDAURA].val4 != *flag) { - sd->sc.data[SC_GUILDAURA].val4 = *flag; - status_calc_bl(&sd->bl, StatusChangeFlagTable[SC_GUILDAURA]); - } - return 0; + if (sd->sc.count && sd->sc.data[SC_GUILDAURA].timer != -1) { + if (sd->sc.data[SC_GUILDAURA].val3 != strvit || + sd->sc.data[SC_GUILDAURA].val4 != agidex) { + sd->sc.data[SC_GUILDAURA].val3 = strvit; + sd->sc.data[SC_GUILDAURA].val4 = agidex; + status_calc_bl(&sd->bl, StatusChangeFlagTable[SC_GUILDAURA]); } - sc_start4(&sd->bl, SC_GUILDAURA,100, 1, id, 0, *flag, 1000); + return 0; } - - return 0; + sc_start4(&sd->bl, SC_GUILDAURA,100, 1, id, strvit, agidex, 1000); + return 1; } /*========================================== diff --git a/src/map/status.c b/src/map/status.c index 437be3cdf..8ac13bb3a 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2916,8 +2916,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang str += sc->data[SC_STRFOOD].val1; if(sc->data[SC_BATTLEORDERS].timer!=-1) str += 5; - if(sc->data[SC_GUILDAURA].timer != -1 && ((sc->data[SC_GUILDAURA].val4>>12)&0xF)) - str += (sc->data[SC_GUILDAURA].val4>>12)&0xF; + if(sc->data[SC_GUILDAURA].timer != -1 && sc->data[SC_GUILDAURA].val3>>16) + str += sc->data[SC_GUILDAURA].val3>>16; if(sc->data[SC_LOUD].timer!=-1) str += 4; if(sc->data[SC_TRUESIGHT].timer!=-1) @@ -2957,8 +2957,8 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang agi += sc->data[SC_INCAGI].val1; if(sc->data[SC_AGIFOOD].timer!=-1) agi += sc->data[SC_AGIFOOD].val1; - if(sc->data[SC_GUILDAURA].timer != -1 && ((sc->data[SC_GUILDAURA].val4>>4)&0xF)) - agi += (sc->data[SC_GUILDAURA].val4>>4)&0xF; + if(sc->data[SC_GUILDAURA].timer != -1 && sc->data[SC_GUILDAURA].val4>>16) + agi += sc->data[SC_GUILDAURA].val4>>16; if(sc->data[SC_TRUESIGHT].timer!=-1) agi += 5; if(sc->data[SC_INCREASEAGI].timer!=-1) @@ -2992,8 +2992,8 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang vit += sc->data[SC_INCVIT].val1; if(sc->data[SC_VITFOOD].timer!=-1) vit += sc->data[SC_VITFOOD].val1; - if(sc->data[SC_GUILDAURA].timer != -1 && ((sc->data[SC_GUILDAURA].val4>>8)&0xF)) - vit += (sc->data[SC_GUILDAURA].val4>>8)&0xF; + if(sc->data[SC_GUILDAURA].timer != -1 && sc->data[SC_GUILDAURA].val3&0xFFFF) + vit += sc->data[SC_GUILDAURA].val3&0xFFFF; if(sc->data[SC_TRUESIGHT].timer!=-1) vit += 5; if(sc->data[SC_STRIPARMOR].timer!=-1) @@ -3063,8 +3063,8 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang dex += sc->data[SC_DEXFOOD].val1; if(sc->data[SC_BATTLEORDERS].timer!=-1) dex += 5; - if(sc->data[SC_GUILDAURA].timer != -1 && (sc->data[SC_GUILDAURA].val4&0xF)) - dex += sc->data[SC_GUILDAURA].val4&0xF; + if(sc->data[SC_GUILDAURA].timer != -1 && sc->data[SC_GUILDAURA].val4&0xFFFF) + dex += sc->data[SC_GUILDAURA].val4&0xFFFF; if(sc->data[SC_TRUESIGHT].timer!=-1) dex += 5; if(sc->data[SC_QUAGMIRE].timer!=-1) diff --git a/src/map/unit.c b/src/map/unit.c index 9c8f66517..e35a8005c 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -176,14 +176,14 @@ static int unit_walktoxy_timer(int tid,unsigned int tick,int id,int data) if (sd->state.gmaster_flag) { //Guild Aura: Likely needs to be recoded, this method seems inefficient. struct guild *g = sd->state.gmaster_flag; - int skill, guildflag = 0; - if ((skill = guild_checkskill(g, GD_LEADERSHIP)) > 0) guildflag |= skill<<12; - if ((skill = guild_checkskill(g, GD_GLORYWOUNDS)) > 0) guildflag |= skill<<8; - if ((skill = guild_checkskill(g, GD_SOULCOLD)) > 0) guildflag |= skill<<4; - if ((skill = guild_checkskill(g, GD_HAWKEYES)) > 0) guildflag |= skill; - if (guildflag) + int skill, strvit= 0, agidex = 0; + if ((skill = guild_checkskill(g, GD_LEADERSHIP)) > 0) strvit |= (skill&0xFFFF)<<16; + if ((skill = guild_checkskill(g, GD_GLORYWOUNDS)) > 0) strvit |= (skill&0xFFFF); + if ((skill = guild_checkskill(g, GD_SOULCOLD)) > 0) agidex |= (skill&0xFFFF)<<16; + if ((skill = guild_checkskill(g, GD_HAWKEYES)) > 0) agidex |= skill&0xFFFF; + if (strvit || agidex) map_foreachinrange(skill_guildaura_sub, bl,2, BL_PC, - bl->id, sd->status.guild_id, &guildflag); + bl->id, sd->status.guild_id, strvit, agidex); } if ( (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && |