Browse Source

Updated new guild skills (50%)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@338 54d463be-8e91-2dee-dedb-b68131a5f0ec
(no author) 20 years ago
parent
commit
427a127b53
5 changed files with 294 additions and 39 deletions
  1. 1 1
      Changelog.txt
  2. 2 0
      src/map/guild.c
  3. 42 17
      src/map/pc.c
  4. 247 20
      src/map/skill.c
  5. 2 1
      src/map/skill.h

+ 1 - 1
Changelog.txt

@@ -5,7 +5,7 @@ Date	Added
 	* @charpetfriendly is now #petfriendly [MC Cameri]
 	* @charstats is now #stats [MC Cameri]
         * Skill Updates: [celest]
-          - Added some code for the new guild skills (10%) and Moonlit Petals (5%)
+          - Added some code for the new guild skills (50%) and Moonlit Petals (5%)
           - Notes to other devs: Guild skills with id's 10000-10014 will be stored in
             skill_db[500-514]
           - Corrected Hilt Binding

+ 2 - 0
src/map/guild.c

@@ -940,6 +940,8 @@ int guild_skillup(struct map_session_data *sd,int skill_num,int flag)
 		g->skill[idx].lv < guild_skill_get_max(skill_num) ){
 		intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id,flag);
 	}
+	pc_calcstatus (sd, 0); // Celest
+
 	return 0;
 }
 // スキルポイント割り振り通知

+ 42 - 17
src/map/pc.c

@@ -1,4 +1,4 @@
-// $Id: pc.c 101 2004-11-23 14:33:00Z Celestia $
+// $Id: pc.c 101 2004-11-24 10:52:07 Celestia $
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -1438,20 +1438,28 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		sd->base_atk += 4;
 	}
 
-	// Celest
+	// New guild skills - Celest
 	if (sd->status.guild_id > 0) {
 		struct guild *g;
 		if ((g = guild_search(sd->status.guild_id)) && strcmp(sd->status.name,g->master)==0) {
-			if (guild_checkskill(g, GD_LEADERSHIP)>0)
-				; //skillunitsetting
-			if (guild_checkskill(g, GD_GLORYWOUNDS)>0)
-				; //skillunitsetting
-			if (guild_checkskill(g, GD_SOULCOLD)>0)
-				; //skillunitsetting
-			if (guild_checkskill(g, GD_HAWKEYES)>0)
-				; //skillunitsetting
-		}		
-		if (sd->sc_count) {
+			if (!sd->sc_data[SC_LEADERSHIP].val4 && guild_checkskill(g, GD_LEADERSHIP)>0) {
+				//skill_status_change_start(&sd->bl,SC_LEADERSHIP,1,0,0,0,0,0 );
+				skill_unitsetting(&sd->bl,GD_LEADERSHIP,1,sd->bl.x,sd->bl.y,0);
+			}
+			if (!sd->sc_data[SC_GLORYWOUNDS].val4 && guild_checkskill(g, GD_GLORYWOUNDS)>0) {
+				//skill_status_change_start(&sd->bl,SC_GLORYWOUNDS,1,0,0,0,0,0 );
+				skill_unitsetting(&sd->bl,GD_GLORYWOUNDS,1,sd->bl.x,sd->bl.y,0);
+			}
+			if (!sd->sc_data[SC_SOULCOLD].val4 && guild_checkskill(g, GD_SOULCOLD)>0) {
+				//skill_status_change_start(&sd->bl,SC_SOULCOLD,1,0,0,0,0,0 );
+				skill_unitsetting(&sd->bl,GD_SOULCOLD,1,sd->bl.x,sd->bl.y,0);
+			}
+			if (!sd->sc_data[SC_HAWKEYES].val4 && guild_checkskill(g, GD_HAWKEYES)>0) {
+				//skill_status_change_start(&sd->bl,SC_HAWKEYES,1,0,0,0,0,0 );
+				skill_unitsetting(&sd->bl,GD_HAWKEYES,1,sd->bl.x,sd->bl.y,0);
+			}
+		}
+		else {
 			if (sd->sc_data[SC_LEADERSHIP].timer != -1)
 				sd->paramb[0] += 2;
 			if (sd->sc_data[SC_GLORYWOUNDS].timer != -1)
@@ -3796,8 +3804,21 @@ static int pc_walk(int tid,unsigned int tick,int id,int data)
 		sd->bl.y = y;
 		if(moveblock) map_addblock(&sd->bl);
 
-		if(sd->sc_data[SC_DANCING].timer!=-1)
-			skill_unit_move_unit_group((struct skill_unit_group *)sd->sc_data[SC_DANCING].val2,sd->bl.m,dx,dy);
+		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);
+			}
+		}
 
 		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;
@@ -3820,18 +3841,22 @@ static int pc_walk(int tid,unsigned int tick,int id,int data)
 				break;
 			}
 		/* ”íƒfƒBƒ{?ƒVƒ‡ƒ“?�¸ */
-		if(sd->sc_data) {
+		if(sd->sc_count) {
+			if (sd->sc_data[SC_DANCING].timer!=-1)
+				skill_unit_move_unit_group((struct skill_unit_group *)sd->sc_data[SC_DANCING].val2,sd->bl.m,dx,dy);
+
 			if (sd->sc_data[SC_DEVOTION].val1)
 				skill_devotion2(&sd->bl,sd->sc_data[SC_DEVOTION].val1);
+
 			if (sd->sc_data[SC_BASILICA].timer != -1) { // Basilica cancels if caster moves [celest]
 				struct skill_unit *su;
 				if ((su = (struct skill_unit *)sd->sc_data[SC_BASILICA].val4)) {
 					struct skill_unit_group *sg;
 					if ((sg = su->group) && sg->src_id == sd->bl.id) {
 						skill_status_change_end(&sd->bl,SC_BASILICA,-1);
-						skill_delunitgroup (sg);						
+						skill_delunitgroup (sg);
 					}
-				}				
+				}
 			}
 		}
 

+ 247 - 20
src/map/skill.c

@@ -1,4 +1,4 @@
-// $Id: skill.c,v 1.8 2004/09/25 05:32:19 MouseJstr Exp $
+// $Id: skill.c,v 1.8 2004/11/24 10:51:28 Celestia Exp $
 /* スキル?係 */
 
 #include <stdio.h>
@@ -837,7 +837,7 @@ int skill_tree_get_max(int id, int b_class){
 }
 
 /* プロトタイプ */
-struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,int skilllv,int x,int y,int flag);
+//struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,int skilllv,int x,int y,int flag);
 int skill_check_condition( struct map_session_data *sd,int type);
 int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
 int skill_frostjoke_scream(struct block_list *bl,va_list ap);
@@ -4391,24 +4391,72 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
 			}
 		}
 		break;
+
+	// New guild skills [Celest]
 	case GD_BATTLEORDER:
 		{
 			struct guild *g = NULL;
-			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id))) {
+			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
+				strcmp(sd->status.name,g->master)==0) {
 				for(i = 0; i < g->max_member; i++) {
-					if ((dstsd = g->member[i].sd) != NULL) {
+					if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) {
 						clif_skill_nodamage(src,bl,skillid,skilllv,1);
-						skill_status_change_start(&dstsd->bl,SC_BATTLEORDERS,skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
+						skill_status_change_start(&dstsd->bl,SC_BATTLEORDERS,skilllv,0,0,0,0,0 );
+					}
+				}
+			}
+		}
+		break;
+	case GD_REGENERATION:		
+		{
+			struct guild *g = NULL;
+			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
+				strcmp(sd->status.name,g->master)==0) {
+				for(i = 0; i < g->max_member; i++) {
+					if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) {
+						clif_skill_nodamage(src,bl,skillid,skilllv,1);
+						skill_status_change_start(&dstsd->bl,SC_REGENERATION,skilllv,0,0,0,0,0 );
+					}
+				}
+			}
+		}
+		break;
+	case GD_RESTORE:		
+		{
+			struct guild *g = NULL;
+			int hp, sp;
+			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
+				strcmp(sd->status.name,g->master)==0) {
+				for(i = 0; i < g->max_member; i++) {
+					if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) {
+						hp = dstsd->status.max_hp*0.9;
+						sp = dstsd->status.sp + hp < dstsd->status.max_sp ? hp : dstsd->status.max_sp - dstsd->status.sp;
+						clif_skill_nodamage(src,bl,AL_HEAL,hp,1);
+						battle_heal(NULL,bl,hp,sp,0);
 					}
 				}
 			}
 		}
-		printf("Guild skill castend:%d\n",skillid);
 		break;
-	case GD_REGENERATION:
-	case GD_RESTORE:
 	case GD_EMERGENCYCALL:
-		printf("Guild skill castend:%d\n",skillid);
+		{
+			struct guild *g = NULL;
+			// i don't know if it actually summons in a circle, but oh well. ;P
+			int dx[9]={-2, 0, 2,-2, 0, 2,-2, 0, 2};
+			int dy[9]={-2,-2,-2, 0, 0, 0, 2, 2, 2};
+			int j = 0;
+			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
+				strcmp(sd->status.name,g->master)==0) {
+				for(i = 0; i < g->max_member; i++, j++) {
+					if (j>8) j=0;
+					if ((dstsd = g->member[i].sd) != NULL && sd != dstsd &&
+						!map[sd->bl.m].flag.nowarpto && !map[sd->bl.m].flag.nowarp) {
+						clif_skill_nodamage(src,bl,skillid,skilllv,1);
+						pc_setpos(dstsd, sd->mapname, sd->bl.x+dx[j], sd->bl.y+dy[j], 2);
+					}
+				}
+			}
+		}
 		break;
 	default:
 		printf("Unknown skill used:%d\n",skillid);
@@ -4946,6 +4994,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 		limit=500;
 		range=5;
 		break;
+
 	case WZ_HEAVENDRIVE:		/* ヘヴンズドライブ */
 		limit=500;
 		range=2;
@@ -5146,12 +5195,14 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 			val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
 		val2 = battle_get_luk(src)/10;
 		break;
+
 	case AM_DEMONSTRATION:		/* デモンストレ?ション */
 		limit=skill_get_time(skillid,skilllv);
 		interval=1000;
 		range=1;
 		target=BCT_ENEMY;
 		break;
+
 	case WE_CALLPARTNER:		/* あなたに逢いたい */
 		limit=skill_get_time(skillid,skilllv);
 		range=-1;
@@ -5166,16 +5217,19 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 		//skill_status_change_start(src,SC_ANKLE,skilllv,0,0,0,limit,0);
 		//sd->canmove_tick = gettick() + limit; // added later [celest]
 		break;
+
 	case PA_GOSPEL:		/* ゴスペル */
 		count=49;
 		target=BCT_PARTY;
 		limit=skill_get_time(skillid,skilllv);
 		break;
+
 	case CG_MOONLIT:
 		range=1;
 		target=BCT_ALL;
 		limit=skill_get_time(skillid,skilllv);
 		break;
+
 	case PF_FOGWALL:	/* フォグウォ?ル */
 		count=15;
 		limit=skill_get_time(skillid,skilllv);
@@ -5183,11 +5237,21 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 			if (sc_data[SC_DELUGE].timer!=-1) limit *= 2;
 		}
 		break;
+
 	case RG_GRAFFITI:			/* Graffiti */
 		count=1;	// Leave this at 1 [Valaris]
 		limit=600000;	// Time length [Valaris]
 		break;
-	};
+
+	case GD_LEADERSHIP:
+	case GD_GLORYWOUNDS:
+	case GD_SOULCOLD:
+	case GD_HAWKEYES:
+		range=2;
+		target=BCT_NOENEMY;
+		limit=600000;
+		break;
+	}
 
 	nullpo_retr(NULL, group=skill_initunitgroup(src,count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)));
 	group->limit=limit;
@@ -5427,8 +5491,25 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 
 			// [celest]
 			if (sc_data) {
-				if (sc_data[SC_BASILICA].timer!=-1) // attach Basilica's id to the caster
-					sc_data[SC_BASILICA].val4 = (int)unit;
+				// attach the unit's id to the caster
+				switch (skillid) {
+				case HP_BASILICA:
+					if (sc_data[SC_BASILICA].timer!=-1)
+						sc_data[SC_BASILICA].val4 = (int)unit;
+					break;
+				case GD_LEADERSHIP:
+					sc_data[SC_LEADERSHIP].val4 = (int)unit;
+					break;
+				case GD_GLORYWOUNDS:
+					sc_data[SC_GLORYWOUNDS].val4 = (int)unit;
+					break;
+				case GD_SOULCOLD:
+					sc_data[SC_SOULCOLD].val4 = (int)unit;
+					break;
+				case GD_HAWKEYES:
+					sc_data[SC_HAWKEYES].val4 = (int)unit;
+					break;
+				}
 			}
 		}
 	}
@@ -5781,6 +5862,44 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 		}
 		break;
 
+	// New guild skills [Celest]
+	case 0xc1: // GD_LEADERSHIP
+		{
+			struct map_session_data *sd;
+			if (srcsd && bl->type == BL_PC && (sd=(struct map_session_data *)bl) &&
+				sd->status.guild_id == srcsd->status.guild_id &&
+				sd->sc_data[SC_LEADERSHIP].timer == -1 && !sd->sc_data[SC_LEADERSHIP].val4)
+				skill_status_change_start(bl,SC_LEADERSHIP,1,0,0,0,0,0 );
+		}
+		break;
+	case 0xc2: // GD_GLORYWOUNDS
+		{
+			struct map_session_data *sd;
+			if (srcsd && bl->type == BL_PC && (sd=(struct map_session_data *)bl) &&
+				sd->status.guild_id == srcsd->status.guild_id &&
+				sd->sc_data[SC_GLORYWOUNDS].timer == -1 && !sd->sc_data[SC_GLORYWOUNDS].val4)
+				skill_status_change_start(bl,SC_GLORYWOUNDS,1,0,0,0,0,0 );
+		}
+		break;
+	case 0xc3: // GD_SOULCOLD
+		{
+			struct map_session_data *sd;
+			if (srcsd && bl->type == BL_PC && (sd=(struct map_session_data *)bl) &&
+				sd->status.guild_id == srcsd->status.guild_id &&
+				sd->sc_data[SC_SOULCOLD].timer == -1 && !sd->sc_data[SC_SOULCOLD].val4)
+				skill_status_change_start(bl,SC_SOULCOLD,1,0,0,0,0,0 );
+		}
+		break;
+	case 0xc4: // GD_HAWKEYES
+		{
+			struct map_session_data *sd;
+			if (srcsd && bl->type == BL_PC && (sd=(struct map_session_data *)bl) &&
+				sd->status.guild_id == srcsd->status.guild_id &&
+				sd->sc_data[SC_HAWKEYES].timer == -1 && !sd->sc_data[SC_HAWKEYES].val4)
+				skill_status_change_start(bl,SC_HAWKEYES,1,0,0,0,0,0 );
+		}
+		break;
+
 /*	default:
 		if(battle_config.error_log)
 			printf("skill_unit_onplace: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
@@ -5916,6 +6035,35 @@ 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 status_change *sc_data=battle_get_sc_data(bl);
+			if (sc_data && sc_data[SC_LEADERSHIP].timer != -1)
+				skill_status_change_end(bl,SC_LEADERSHIP,-1);
+		}
+		break;
+	case 0xc2: // GD_GLORYWOUNDS
+		{
+			struct status_change *sc_data=battle_get_sc_data(bl);
+			if (sc_data && sc_data[SC_GLORYWOUNDS].timer != -1)
+				skill_status_change_end(bl,SC_GLORYWOUNDS,-1);
+		}
+		break;
+	case 0xc3: // GD_SOULCOLD
+		{
+			struct status_change *sc_data=battle_get_sc_data(bl);
+			if (sc_data && sc_data[SC_SOULCOLD].timer != -1)
+				skill_status_change_end(bl,SC_SOULCOLD,-1);
+		}
+		break;
+	case 0xc4: // GD_HAWKEYES
+		{
+			struct status_change *sc_data=battle_get_sc_data(bl);
+			if (sc_data && sc_data[SC_HAWKEYES].timer != -1)
+				skill_status_change_end(bl,SC_HAWKEYES,-1);
+		}
+		break;
 
 /*	default:
 		if(battle_config.error_log)
@@ -5969,6 +6117,10 @@ int skill_unit_ondelete(struct skill_unit *src,struct block_list *bl,unsigned in
 	case 0xae:	/* 幸運のキス */
 	case 0xaf:	/* サ?ビスフォ?ユ? */
 	case 0xb4:
+	case 0xc1:
+	case 0xc2:
+	case 0xc3:
+	case 0xc4:
 		return skill_unit_onout(src,bl,tick);
 
 /*	default:
@@ -6024,6 +6176,38 @@ 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->sc_data[SC_LEADERSHIP].val4 = 0;
+			}				
+		}
+		break;
+	case 0xc2: // GD_GLORYWOUNDS
+		{
+			struct map_session_data *sd;
+			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
+				sd->sc_data[SC_GLORYWOUNDS].val4 = 0;
+			}				
+		}
+		break;
+	case 0xc3: // GD_SOULCOLD
+		{
+			struct map_session_data *sd;
+			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
+				sd->sc_data[SC_SOULCOLD].val4 = 0;
+			}				
+		}
+		break;
+	case 0xc4: // GD_HAWKEYES
+		{
+			struct map_session_data *sd;
+			if ((sd = (struct map_session_data *)(map_id2bl(sg->src_id)))!= NULL) {
+				sd->sc_data[SC_HAWKEYES].val4 = 0;
+			}
+		}
+		break;
 	}
 	return 0;
 }
@@ -6962,11 +7146,21 @@ int skill_use_id( struct map_session_data *sd, int target_id,
 			sd->skillid_old = skill_num;
 		}
 		break;
+
 	case GD_BATTLEORDER:
 	case GD_REGENERATION:
 	case GD_RESTORE:
 	case GD_EMERGENCYCALL:
-		if (skill_lv <= 0) skill_lv = 1;
+		{
+			struct guild *g;
+			if (!sd->status.guild_id)
+				return 0;
+			if (!(g = guild_search(sd->status.guild_id)))
+				return 0;
+			if (strcmp(sd->status.name,g->master))
+				return 0;
+			if (skill_lv <= 0) skill_lv = 1;
+		}
 		break;
 	}
 
@@ -8652,8 +8846,20 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
 				return 0;
 		}
 		break;
+	case SC_LEADERSHIP:
+	case SC_GLORYWOUNDS:
+	case SC_SOULCOLD:
+	case SC_HAWKEYES:
+		if (sd) {
+			sc_data[type].timer = add_timer(
+				1000+tick, skill_status_change_timer,
+				bl->id, data);
+		}
+		break;
 	}
 
+	
+
 	return skill_status_change_end( bl,type,tid );
 }
 
@@ -9283,18 +9489,22 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 		case SC_KEEPING:
 		case SC_BARRIER:
 			calc_flag = 1;
+
 		case SC_HALLUCINATION:
 			break;
+
 		case SC_CONCENTRATION:	/* コンセントレ?ション */
 			*opt3 |= 1;
 			calc_flag = 1;
 			break;
+
 		case SC_TENSIONRELAX:	/* テンションリラックス */
 			calc_flag = 1;
 			if(bl->type == BL_PC) {
 				tick = 10000;
 			}
 			break;
+
 		case SC_AURABLADE:		/* オ?ラブレ?ド */
 		case SC_PARRYING:		/* パリイング */
 //		case SC_ASSUMPTIO:		/*  */
@@ -9334,6 +9544,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 			calc_flag = 1;
 			val2 = (val1 / 2); //Flee上昇率
 			break;
+
 		case SC_BERSERK:		/* バ?サ?ク */
 			if(sd){
 				sd->status.hp = sd->status.max_hp * 3;
@@ -9346,16 +9557,20 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 			tick = 10000;
 			calc_flag = 1;
 			break;
+
 		case SC_ASSUMPTIO:		/* アスムプティオ */
 			*opt3 |= 2048;
 			break;
+
 		case SC_BASILICA: // [celest]
 			break;
+
 		case SC_MARIONETTE:		/* マリオネットコントロ?ル */
 		case SC_MARIONETTE2:
 			calc_flag = 1;
 			*opt3 |= 1024;
 			break;
+
 		case SC_MELTDOWN:		/* メルトダウン */
 		case SC_CARTBOOST:		/* カ?トブ?スト */
 		case SC_TRUESIGHT:		/* トゥル?サイト */
@@ -9363,12 +9578,15 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 		case SC_MAGICPOWER:		/* 魔法力?幅 */
 			calc_flag = 1;
 			break;
+
 		case SC_REJECTSWORD:	/* リジェクトソ?ド */
 			val2 = 3; //3回攻?を跳ね返す
 			break;
+
 		case SC_MEMORIZE:		/* メモライズ */
 			val2 = 3; //3回詠唱を1/3にする
 			break;
+
 		case SC_GRAFFITI:		/* グラフィティ */
 			{
 				struct skill_unit_group *sg = skill_unitsetting(bl,RG_GRAFFITI,val1,val2,val3,0);
@@ -9376,25 +9594,40 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 					val4 = (int)sg;
 			}
 			break;
+
 		case SC_SPLASHER:		/* ベナムスプラッシャ? */
 			break;
+
 		case SC_FOGWALL:
 			val2 = 75;
 			// calc_flag = 1;	// not sure of effects yet [celest]
 			break;
+
 		case SC_BLOCKSKILL:
 			if (!tick) tick = 60000;
 			if (!val3) val3 = -1;
 			break;
+
 		case SC_SLOWDOWN:
+			calc_flag = 1;
+			break;
+
 		case SC_LEADERSHIP:
 		case SC_GLORYWOUNDS:
 		case SC_SOULCOLD:
 		case SC_HAWKEYES:
-		case SC_BATTLEORDERS:
+			tick = 1000;
+			calc_flag = 1;
+			//val4 = 1;
+			break;
+
 		case SC_REGENERATION:
+			val1 = 2;
+		case SC_BATTLEORDERS:
+			tick = 60000; // 1 minute
 			calc_flag = 1;
 			break;
+
 		default:
 			if(battle_config.error_log)
 				printf("UnknownStatusChange [%d]\n", type);
@@ -10080,12 +10313,6 @@ int skill_unit_timer_sub( struct block_list *bl, va_list ap )
 	if(unit->alive &&
 		(DIFF_TICK(tick,group->tick)>=group->limit || DIFF_TICK(tick,group->tick)>=unit->limit) ){
 		switch(group->unit_id){
-
-
-
-
-
-
 			case 0x8f:	/* ブラストマイン */
 				group->unit_id = 0x8c;
 				clif_changelook(bl,LOOK_BASE,group->unit_id);

+ 2 - 1
src/map/skill.h

@@ -102,6 +102,7 @@ int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int
 int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick);
 
 // ƒ†ƒjƒbƒgƒXƒLƒ‹
+struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,int skilllv,int x,int y,int flag);
 struct skill_unit *skill_initunit(struct skill_unit_group *group,int idx,int x,int y);
 int skill_delunit(struct skill_unit *unit);
 struct skill_unit_group *skill_initunitgroup(struct block_list *src,
@@ -347,7 +348,7 @@ enum {	// struct map_session_data 
 	SC_SOULCOLD			= 198,
 	SC_HAWKEYES			= 199,
 	SC_BATTLEORDERS		= 200,
-	SC_REGENERATION		= 201,	
+	SC_REGENERATION		= 201,
 
 
 // -- testing various SC effects