Bläddra i källkod

- 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)
- Fixed compilation error...


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8053 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 år sedan
förälder
incheckning
19a4f0b31a
5 ändrade filer med 32 tillägg och 30 borttagningar
  1. 3 0
      Changelog-Trunk.txt
  2. 1 1
      src/map/mercenary.c
  3. 13 14
      src/map/skill.c
  4. 8 8
      src/map/status.c
  5. 7 7
      src/map/unit.c

+ 3 - 0
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

+ 1 - 1
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 ;

+ 13 - 14
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;
 }
 
 /*==========================================

+ 8 - 8
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)

+ 7 - 7
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 &&