소스 검색

* Updated Endure, Tiger Fist, Chain Crush, and Palm Push Strike
* Some rewrites on the passive guild skills effects

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

celest 20 년 전
부모
커밋
2468e69b8a
10개의 변경된 파일130개의 추가작업 그리고 265개의 파일을 삭제
  1. 6 0
      Changelog-SVN.txt
  2. 0 1
      db/skill_nocast_db.txt
  3. 0 4
      db/skill_unit_db.txt
  4. 6 6
      src/map/battle.c
  5. 3 4
      src/map/map.h
  6. 26 53
      src/map/pc.c
  7. 38 147
      src/map/skill.c
  8. 3 0
      src/map/skill.h
  9. 46 49
      src/map/status.c
  10. 2 1
      src/map/status.h

+ 6 - 0
Changelog-SVN.txt

@@ -1,5 +1,11 @@
 Date	Added
 
+02/28
+        * Corrected Tiger Fist, Chain Crush, and Palm Push Strike damage, thanks to
+          Eskadron [celest]
+        * Updated Endure to be usable in GvG, but only gives the mdef bonus [celest]
+        * Some rewrites on the passive guild skills effects [celest]
+
 02/27
 	* Fixed some bugs in Monk Job Quest. Now it's fully passable. [Lupus]
 02/26

+ 0 - 1
db/skill_nocast_db.txt

@@ -7,7 +7,6 @@
 // 8 - Cannot be used when WoE is on
 // 16 - Cannot be used in PK Mode maps
 // Example: 8,6 = Endure cannot be used in PvP and GvG maps (2+4)
-8,4	//SM_ENDURE
 26,4	//AL_TELEPORT
 27,4	//AL_WARP
 87,4	//WZ_ICEWALL

+ 0 - 4
db/skill_unit_db.txt

@@ -72,7 +72,3 @@
 369,0xb3,    ,  3, 0,  -1,all,   0x000,0	//PA_GOSPEL#ゴスペル
 404,0xb6,    , -1, 0,  -1,all,   0x000,0	//PF_FOGWALL#フォグウォール
 405,0xb7,    ,  0, 1,1000,enemy, 0x006,0	//PF_SPIDERWEB#スパイダーウェッブ
-10006,0xc1,  ,  0, 2,  -1,all,   0x000,0	//GD_LEADERSHIP
-10007,0xc2,  ,  0, 2,  -1,all,   0x000,0	//GD_GLORYWOUNDS
-10008,0xc3,  ,  0, 2,  -1,all,   0x000,0	//GD_SOULCOLD
-10009,0xc4,  ,  0, 2,  -1,all,   0x000,0	//GD_HAWKEYES

+ 6 - 6
src/map/battle.c

@@ -2235,16 +2235,16 @@ static struct Damage battle_calc_pc_weapon_attack(
 				sd->state.arrow_atk = 1;
 				break;
 			case CH_TIGERFIST:	// 伏虎拳
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
+				damage = damage*(40+ 100*skill_lv)/100;
+				damage2 = damage*(40+ 100*skill_lv)/100;
 				break;
 			case CH_CHAINCRUSH:	// 連柱崩撃
-				damage = damage*(100+ 60*skill_lv)/100;
-				damage2 = damage2*(100+ 60*skill_lv)/100;
+				damage = damage*(400+ 100*skill_lv)/100;
+				damage2 = damage*(400+ 100*skill_lv)/100;
 				break;
 			case CH_PALMSTRIKE:	// 猛虎硬派山
-				damage = damage*(50+ 100*skill_lv)/100;
-				damage2 = damage2*(50+ 100*skill_lv)/100;
+				damage = damage*(200+ 100*skill_lv)/100;
+				damage2 = damage*(200+ 100*skill_lv)/100;
 				break;
 			case LK_SPIRALPIERCE:			/* スパイラルピアース */
 				damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に

+ 3 - 4
src/map/map.h

@@ -139,10 +139,7 @@ struct map_session_data {
 		unsigned potionpitcher_flag : 1;
 		unsigned storage_flag : 1;
 		unsigned snovice_flag : 4;
-		int leadership_flag;
-		int glorywounds_flag;
-		int soulcold_flag;
-		int hawkeyes_flag;
+		int gmaster_flag;
 		// originally by Qamera, adapted by celest
 		unsigned event_death : 1;
 		unsigned event_kill : 1;
@@ -653,6 +650,8 @@ enum {
 #define CELL_MASK		0x0f
 #define CELL_NPC		0x80	// NPCセル
 #define CELL_BASILICA	0x40	// BASILICAセル
+#define CELL_MOONLIT	0x100
+#define CELL_REGEN		0x200
 /*
  * map_getcell()で使用されるフラグ
  */

+ 26 - 53
src/map/pc.c

@@ -3227,24 +3227,6 @@ static int pc_walk(int tid,unsigned int tick,int id,int data)
 		if(moveblock) map_addblock(&sd->bl);
 		skill_unit_move(&sd->bl,tick,1);
 
-	#if 0
-		if (sd->status.guild_id > 0) {
-			struct skill_unit *su;
-			if (sd->sc_data[SC_LEADERSHIP].val4 && (su=(struct skill_unit *)sd->sc_data[SC_LEADERSHIP].val4)) {
-				skill_unit_move_unit_group(su->group,sd->bl.m,dx,dy);
-			}
-			if (sd->sc_data[SC_GLORYWOUNDS].val4 && (su=(struct skill_unit *)sd->sc_data[SC_GLORYWOUNDS].val4)) {
-				skill_unit_move_unit_group(su->group,sd->bl.m,dx,dy);
-			}
-			if (sd->sc_data[SC_SOULCOLD].val4 && (su=(struct skill_unit *)sd->sc_data[SC_SOULCOLD].val4)) {
-				skill_unit_move_unit_group(su->group,sd->bl.m,dx,dy);
-			}
-			if (sd->sc_data[SC_HAWKEYES].val4 && (su=(struct skill_unit *)sd->sc_data[SC_HAWKEYES].val4)) {
-				skill_unit_move_unit_group(su->group,sd->bl.m,dx,dy);
-			}
-		}
-	#endif
-
 		map_foreachinmovearea(clif_pcinsight,sd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,-dx,-dy,0,sd);
 		sd->walktimer = -1;
 
@@ -3349,25 +3331,12 @@ int pc_walktoxy(struct map_session_data *sd,int x,int y)
 		pc_walktoxy_sub(sd);
 	}
 
-	if (sd->sc_data && sd->status.guild_id > 0) {
-		struct skill_unit *su;
-		struct skill_unit_group *sg;
-		if (sd->state.leadership_flag && (su=(struct skill_unit *)sd->state.leadership_flag) &&
-			(sg=su->group) && sg->src_id == sd->bl.id) {
-			skill_unit_move_unit_group(sg,sd->bl.m,(x - sd->bl.x),(y - sd->bl.y));
-		}
-		if (sd->state.glorywounds_flag && (su=(struct skill_unit *)sd->state.glorywounds_flag) &&
-			(sg=su->group) && sg->src_id == sd->bl.id) {
-			skill_unit_move_unit_group(sg,sd->bl.m,(x - sd->bl.x),(y - sd->bl.y));
-		}
-		if (sd->state.soulcold_flag && (su=(struct skill_unit *)sd->state.soulcold_flag) &&
-			(sg=su->group) && sg->src_id == sd->bl.id) {
-			skill_unit_move_unit_group(sg,sd->bl.m,(x - sd->bl.x),(y - sd->bl.y));
-		}
-		if (sd->state.hawkeyes_flag && (su=(struct skill_unit *)sd->state.hawkeyes_flag) &&
-			(sg=su->group) && sg->src_id == sd->bl.id) {
-			skill_unit_move_unit_group(sg,sd->bl.m,(x - sd->bl.x),(y - sd->bl.y));
-		}
+	if (sd->state.gmaster_flag > 0) {
+		struct guild *g = (struct guild *)sd->state.gmaster_flag;
+		if (g)
+			map_foreachinarea (skill_guildaura_sub, sd->bl.m,
+				sd->bl.x-2, sd->bl.y-2, sd->bl.x+2, sd->bl.y+2, BL_PC,
+				sd->bl.id, sd->status.guild_id, g);
 	}
 
 	return 0;
@@ -4573,12 +4542,14 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
 
 	// ? いていたら足を止める
 	if (sd->sc_data) {
-		if (sd->sc_data[SC_ENDURE].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1 && !sd->special_state.infinite_endure)
-			pc_stop_walking(sd,3);
-		else if(sd->sc_data[SC_ENDURE].timer != -1 && (src != NULL && src->type==BL_MOB) && (--sd->sc_data[SC_ENDURE].val2) <= 0)
-			status_change_end(&sd->bl, SC_ENDURE, -1);
-	} else
-		pc_stop_walking(sd,3);
+		if (sd->sc_data[SC_BERSERK].timer != -1 ||
+			sd->special_state.infinite_endure)
+			;	// do nothing
+		else if (sd->sc_data[SC_ENDURE].timer != -1 && (src != NULL && src->type == BL_MOB) && !map[sd->bl.m].flag.gvg) {
+			if ((--sd->sc_data[SC_ENDURE].val2) < 0) 
+				status_change_end(&sd->bl, SC_ENDURE, -1);
+		} else pc_stop_walking(sd,3);
+	}
 
 	// 演奏/ダンスの中?
 	if(damage > sd->status.max_hp>>2)
@@ -4643,17 +4614,19 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
 	status_calc_pc(sd,0);
 
 	if (src && src->type == BL_PC) {
-		if (sd->state.event_death)
-			pc_setglobalreg(sd,"killerrid",((struct map_session_data *)src)->status.account_id);
-
-		if (((struct map_session_data *)src)->state.event_kill) {
-			struct npc_data *npc;
-			if ((npc = npc_name2id(script_config.kill_event_name))) {
-				run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCKillNPC
-				sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_event_name);
-				ShowStatus(tmp_output);
+		struct map_session_data *ssd = (struct map_session_data *)src;
+		if (ssd) {
+			if (sd->state.event_death)
+				pc_setglobalreg(sd,"killerrid",(ssd->status.account_id));
+			if (ssd->state.event_kill) {
+				struct npc_data *npc;
+				if ((npc = npc_name2id(script_config.kill_event_name))) {
+					run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCKillNPC
+					sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_event_name);
+					ShowStatus(tmp_output);
+				}
 			}
-		}	
+		}
 	}
 
 	if (sd->state.event_death) {

+ 38 - 147
src/map/skill.c

@@ -1,4 +1,4 @@
-// $Id: skill.c,v 1.8 2004/02/24 10:28:24 PM Celestia $
+// $Id: skill.c,v 1.8 2004/02/27 5:34:51 PM Celestia $
 /* スキル?係 */
 
 #include <stdio.h>
@@ -672,10 +672,6 @@ struct skill_unit_layout *skill_get_unit_layout(int skillid,int skilllv,struct b
 	return &skill_unit_layout[0];
 }
 
-//	case GD_LEADERSHIP:		return 0xc1;
-//	case GD_GLORYWOUNDS:	return 0xc2;
-//	case GD_SOULCOLD:		return 0xc3;
-//	case GD_HAWKEYES:		return 0xc4;
 //	0x89,0x8a,0x8b 表示無し
 //	0x9a 炎?性の詠唱みたいなエフェクト
 //	0x9b 水?性の詠唱みたいなエフェクト
@@ -1713,6 +1709,42 @@ int skill_check_unit_range2(int m,int x,int y,int skillid, int skilllv)
 	return c;
 }
 
+int skill_guildaura_sub (struct block_list *bl,va_list ap)
+{
+	struct map_session_data *sd;
+	struct guild *g;
+	int gid, id;
+	int flag = 0;
+	
+	nullpo_retr(0, sd=(struct map_session_data *)bl);
+
+	nullpo_retr(0, ap);
+	id = va_arg(ap,int);
+	gid = va_arg(ap,int);
+	if (sd->status.guild_id != gid)
+		return 0;
+	
+	g = va_arg(ap,struct guild *);
+	if (guild_checkskill(g, GD_LEADERSHIP)>0) flag |= 1<<0;
+	if (guild_checkskill(g, GD_GLORYWOUNDS)>0) flag |= 1<<1;
+	if (guild_checkskill(g, GD_SOULCOLD)>0) flag |= 1<<2;
+	if (guild_checkskill(g, GD_HAWKEYES)>0) flag |= 1<<3;
+	if (guild_checkskill(g, GD_CHARISMA)>0) flag |= 1<<4;
+
+	if (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_pc (sd, 0);
+			}
+			return 0;
+		}
+		status_change_start(&sd->bl, SC_GUILDAURA,1,id,0,flag,0,0 );
+	}
+
+	return 0;
+}
+
 /*=========================================================================
  * 範?スキル使用?理小分けここから
  */
@@ -5142,15 +5174,6 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 	case RG_GRAFFITI:			/* Graffiti */
 		count=1;	// Leave this at 1 [Valaris]
 		break;
-
-	case GD_LEADERSHIP:
-	case GD_GLORYWOUNDS:
-	case GD_SOULCOLD:
-	case GD_HAWKEYES:
-		range=2;
-		target=BCT_ALL;
-		limit=300000;
-		break;
 	}
 
 	nullpo_retr(NULL, group=skill_initunitgroup(src,(count > 0 ? count : layout->count),
@@ -5211,28 +5234,6 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 			unit->limit=limit;
 			unit->range=range;
 
-			// [celest]
-			if (sc_data && src->type == BL_PC) {
-				struct map_session_data *sd = (struct map_session_data *)src;
-				if (sd) {
-					// attach the unit's id to the caster
-					switch (skillid) {
-					case GD_LEADERSHIP:							
-						sd->state.leadership_flag = (int)group;
-						break;
-					case GD_GLORYWOUNDS:
-						sd->state.glorywounds_flag = (int)group;
-						break;
-					case GD_SOULCOLD:
-						sd->state.soulcold_flag = (int)unit;
-						break;
-					case GD_HAWKEYES:
-						sd->state.hawkeyes_flag = (int)unit;
-						break;
-					}
-				}
-			}
-			
 			if (range==0 && active_flag)
 				map_foreachinarea(skill_unit_effect,unit->bl.m
 					,unit->bl.x,unit->bl.y,unit->bl.x,unit->bl.y
@@ -5378,56 +5379,6 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 		skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
 		break;
 
-	// New guild skills [Celest]
-	case 0xc1: // GD_LEADERSHIP
-		{
-			struct map_session_data *sd, *tsd;
-			tsd=(struct map_session_data *)ss;
-			if (tsd && (sd=(struct map_session_data *)bl) &&
-				sd->status.guild_id == tsd->status.guild_id &&
-				sd != tsd) {
-					sd->state.leadership_flag = (int)src;
-					status_calc_pc (sd, 0);
-				}
-		}
-		break;
-	case 0xc2: // GD_GLORYWOUNDS
-		{
-			struct map_session_data *sd, *tsd;
-			tsd=(struct map_session_data *)ss;
-			if (tsd && (sd=(struct map_session_data *)bl) &&
-				sd->status.guild_id == tsd->status.guild_id &&
-				sd != tsd) {
-					sd->state.glorywounds_flag = (int)src;
-					status_calc_pc (sd, 0);
-				}
-		}
-		break;
-	case 0xc3: // GD_SOULCOLD
-		{
-			struct map_session_data *sd, *tsd;
-			tsd=(struct map_session_data *)ss;
-			if (tsd && (sd=(struct map_session_data *)bl) &&
-				sd->status.guild_id == tsd->status.guild_id &&
-				sd != tsd) {
-					sd->state.soulcold_flag = (int)src;
-					status_calc_pc (sd, 0);
-				}
-		}
-		break;
-	case 0xc4: // GD_HAWKEYES
-		{
-			struct map_session_data *sd, *tsd;
-			tsd=(struct map_session_data *)ss;
-			if (tsd && (sd=(struct map_session_data *)bl) &&
-				sd->status.guild_id == tsd->status.guild_id &&
-				sd != tsd) {
-					sd->state.hawkeyes_flag = (int)src;
-					status_calc_pc (sd, 0);
-				}
-		}
-		break;
-
 	case 0xb2:				/* あなたを_?いたいです */
 	case 0xb3:				/* ゴスペル */
 	//case 0xb6:				/* フォグウォ?ル */ - moved [celest]
@@ -5783,35 +5734,7 @@ int skill_unit_onout(struct skill_unit *src,struct block_list *bl,unsigned int t
 			sg->limit = DIFF_TICK(tick,sg->tick)+1000;
 			break;
 		}
-	// New guild skills [Celest]
-	case 0xc1: // GD_LEADERSHIP
-		{
-			struct map_session_data *sd;
-			if (bl->type == BL_PC && (sd=(struct map_session_data *)bl) && sd->state.leadership_flag > 0)
-				sd->state.leadership_flag = 0;
-		}
-		break;
-	case 0xc2: // GD_GLORYWOUNDS
-		{
-			struct map_session_data *sd;
-			if (bl->type == BL_PC && (sd=(struct map_session_data *)bl) && sd->state.glorywounds_flag > 0)
-				sd->state.glorywounds_flag = 0;
-		}
-		break;
-	case 0xc3: // GD_SOULCOLD
-		{
-			struct map_session_data *sd;
-			if (bl->type == BL_PC && (sd=(struct map_session_data *)bl) && sd->state.soulcold_flag > 0)
-				sd->state.soulcold_flag = 0;
-		}
-		break;
-	case 0xc4: // GD_HAWKEYES
-		{
-			struct map_session_data *sd;
-			if (bl->type == BL_PC && (sd=(struct map_session_data *)bl) && sd->state.hawkeyes_flag > 0)
-				sd->state.hawkeyes_flag = 0;
-		}
-		break;
+
 /*	default:
 		if(battle_config.error_log)
 			printf("skill_unit_onout: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
@@ -5904,38 +5827,6 @@ int skill_unit_onlimit(struct skill_unit *src,unsigned int tick)
 			pc_setpos(p_sd,map[src->bl.m].name,src->bl.x,src->bl.y,3);
 		}
 		break;
-	case 0xc1: // GD_LEADERSHIP
-		{
-			struct map_session_data *sd;
-			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
-				sd->state.leadership_flag = 0;
-			}
-		}
-		break;
-	case 0xc2: // GD_GLORYWOUNDS
-		{
-			struct map_session_data *sd;
-			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
-				sd->state.glorywounds_flag = 0;
-			}
-		}
-		break;
-	case 0xc3: // GD_SOULCOLD
-		{
-			struct map_session_data *sd;
-			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
-				sd->state.soulcold_flag = 0;
-			}
-		}
-		break;
-	case 0xc4: // GD_HAWKEYES
-		{
-			struct map_session_data *sd;
-			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
-				sd->state.hawkeyes_flag = 0;
-			}
-		}
-		break;
 	}
 	return 0;
 }

+ 3 - 0
src/map/skill.h

@@ -153,6 +153,9 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
 struct skill_unit_group *skill_check_dancing( struct block_list *src );
 void skill_stop_dancing(struct block_list *src, int flag);
 
+// Guild skills [celest]
+int skill_guildaura_sub (struct block_list *bl,va_list ap);
+
 // ‰r�¥ƒLƒƒƒ“ƒZƒ‹
 int skill_castcancel(struct block_list *bl,int type);
 

+ 46 - 49
src/map/status.c

@@ -530,6 +530,12 @@ int status_calc_pc(struct map_session_data* sd,int first)
 		pc_setpos(sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
 	}
 
+	if (sd->status.guild_id > 0) {
+		struct guild *g = guild_search(sd->status.guild_id);
+		if (g && strcmp(sd->status.name,g->master)==0)
+			sd->state.gmaster_flag = (int)g;
+	}
+
 	for(i=0;i<10;i++) {
 		index = sd->equip_index[i];
 		if(index < 0)
@@ -708,40 +714,6 @@ int status_calc_pc(struct map_session_data* sd,int first)
 		sd->paramb[3] += (skill+1)*0.5;
 	}
 
-	// New guild skills - Celest
-	if (sd->status.guild_id > 0 && !(first&4)) {
-		struct guild *g;
-		if ((g = guild_search(sd->status.guild_id)) && strcmp(sd->status.name,g->master)==0) {
-			if (!sd->state.leadership_flag && guild_checkskill(g, GD_LEADERSHIP)>0) {
-				skill_unitsetting(&sd->bl,GD_LEADERSHIP,1,sd->bl.x,sd->bl.y,0);
-			}
-			if (!sd->state.glorywounds_flag && guild_checkskill(g, GD_GLORYWOUNDS)>0) {
-				skill_unitsetting(&sd->bl,GD_GLORYWOUNDS,1,sd->bl.x,sd->bl.y,0);
-			}
-			if (!sd->state.soulcold_flag && guild_checkskill(g, GD_SOULCOLD)>0) {
-				skill_unitsetting(&sd->bl,GD_SOULCOLD,1,sd->bl.x,sd->bl.y,0);
-			}
-			if (!sd->state.hawkeyes_flag && guild_checkskill(g, GD_HAWKEYES)>0) {
-				skill_unitsetting(&sd->bl,GD_HAWKEYES,1,sd->bl.x,sd->bl.y,0);
-			}
-		}
-		else if (g) {
-			if (sd->sc_count && sd->sc_data[SC_BATTLEORDERS].timer != -1) {
-				sd->paramb[0]+= 5;
-				sd->paramb[3]+= 5;
-				sd->paramb[4]+= 5;
-			}
-			if (sd->state.leadership_flag)
-				sd->paramb[0] += 2;
-			if (sd->state.glorywounds_flag)
-				sd->paramb[2] += 2;
-			if (sd->state.soulcold_flag)
-				sd->paramb[1] += 2;
-			if (sd->state.hawkeyes_flag)
-				sd->paramb[4] += 2;
-		}
-	}
-
 	// ステ?タス?化による基本パラメ?タ補正
 	if(sd->sc_count){
 		if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){	// 集中力向上
@@ -827,6 +799,22 @@ int status_calc_pc(struct map_session_data* sd,int first)
 				sd->paramb[5]+= 2;
 			}
 		}
+		// New guild skills - Celest
+		if (sd->sc_data[SC_BATTLEORDERS].timer != -1) {
+			sd->paramb[0]+= 5;
+			sd->paramb[3]+= 5;
+			sd->paramb[4]+= 5;
+		}
+		if (sd->sc_data[SC_GUILDAURA].timer != -1) {
+			if (sd->sc_data[SC_GUILDAURA].val4 & 1<<0)
+				sd->paramb[0] += 2;
+			if (sd->sc_data[SC_GUILDAURA].val4 & 1<<1)
+				sd->paramb[2] += 2;
+			if (sd->sc_data[SC_GUILDAURA].val4 & 1<<2)
+				sd->paramb[1] += 2;
+			if (sd->sc_data[SC_GUILDAURA].val4 & 1<<3)
+				sd->paramb[4] += 2;				
+		}
 	}
 
 	//1度も死んでないJob70スパノビに+10
@@ -1355,6 +1343,13 @@ int status_calc_pc(struct map_session_data* sd,int first)
 				}
 			}
 		}
+		// custom stats, since there's no info on how much it actually gives ^^; [Celest]
+		if (sd->sc_data[SC_GUILDAURA].timer != -1) {
+			if (sd->sc_data[SC_GUILDAURA].val4 & 1<<4) {
+				sd->hit += 10;
+				sd->flee += 10;
+			}
+		}
 	}
 
 	if (sd->speed_rate <= 0)
@@ -3789,6 +3784,11 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val
 			calc_flag = 1;
 			break;
 
+		case SC_GUILDAURA:
+			calc_flag = 1;
+			tick = 1000;
+			break;
+
 		default:
 			if(battle_config.error_log)
 				printf("UnknownStatusChange [%d]\n", type);
@@ -4019,12 +4019,9 @@ int status_change_end( struct block_list* bl , int type,int tid )
 			case SC_EDP:
 			case SC_SLOWDOWN:
 			case SC_SPEEDUP0:
-/*			case SC_LEADERSHIP:
-			case SC_GLORYWOUNDS:
-			case SC_SOULCOLD:
-			case SC_HAWKEYES:*/
 			case SC_BATTLEORDERS:
 			case SC_REGENERATION:
+			case SC_GUILDAURA:
 				calc_flag = 1;
 				break;
 			case SC_AUTOBERSERK:
@@ -4666,17 +4663,6 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
 		}
 		break;
 
-/*	case SC_LEADERSHIP:
-	case SC_GLORYWOUNDS:
-	case SC_SOULCOLD:
-	case SC_HAWKEYES:
-		if (sd) {
-			sc_data[type].timer = add_timer(
-				1000+tick, status_change_timer,
-				bl->id, data);
-		}
-		break;*/
-
 	// Celest
 	case SC_CONFUSION:
 		{
@@ -4852,6 +4838,17 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
 				status_calc_pc (sd, 0);
 		}
 		break;
+
+	case SC_GUILDAURA:
+		{
+			struct block_list *tbl = map_id2bl(sc_data[type].val2);
+			if (tbl && battle_check_range(bl, tbl, 2))
+				sc_data[type].timer = add_timer(
+					1000 + tick, status_change_timer,
+					bl->id, data);
+					return 0;			
+		}
+		break;
 	}
 
 	return status_change_end( bl,type,tid );

+ 2 - 1
src/map/status.h

@@ -174,7 +174,8 @@ enum {	// struct map_session_data 
 	SC_LANDPROTECTOR	=193,
 	SC_ADAPTATION		=194,
 	SC_CHASEWALK		=195,
-	SC_REGENERATION		=196,	
+	SC_REGENERATION		=196,
+	SC_GUILDAURA		=199
 };
 extern int SkillStatusChangeTable[];