瀏覽代碼

- Added some code for the new guild skills (10%) and Moonlit
- Corrected Hilt Binding and Assassin Cross' dual wield

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

celest 20 年之前
父節點
當前提交
3af0e7d98a
共有 9 個文件被更改,包括 279 次插入97 次删除
  1. 8 0
      Changelog.txt
  2. 2 0
      db/Changelog.txt
  3. 5 0
      db/skill_cast_db.txt
  4. 16 15
      db/skill_db.txt
  5. 4 1
      db/skill_require_db.txt
  6. 1 1
      src/map/map.h
  7. 46 9
      src/map/pc.c
  8. 176 58
      src/map/skill.c
  9. 21 13
      src/map/skill.h

+ 8 - 0
Changelog.txt

@@ -1,4 +1,12 @@
 Date	Added
+11/23
+        * Skill Updates: [celest]
+          - Added some code for the new guild skills (10%) 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
+          - Corrected Assassin Cross' dual wield
+
 11/22
 	* (TXT)Stripped some code off read_gm_accounts() and made with it addGM() [MC Cameri]
 	  -Usage: addGM(account_id,level);

+ 2 - 0
db/Changelog.txt

@@ -5,6 +5,8 @@
 	Ayathoya items == Added but no effect ( all are "ect" itens)
 	Skill databases == celest working on them i believe.
 
+11/23   * Added temporary requirements for the new guild skills [celest]
+
 11/22
         * Changed weapon requirements for Sharp Shooting [celest]
 	* fixed job_db2.txt (,, -> ,) [Lupus]

+ 5 - 0
db/skill_cast_db.txt

@@ -267,3 +267,8 @@
 405,0,0,30000,8000	//PF_SPIDERWEB#スパイダーウェッブ#
 406,0,0,0,3000	//ASC_METEORASSAULT#メテオアサルト#
 407,0,5000,0,0	//ASC_CDP
+
+10010,100,60000,0	//GD_BATTLEORDER##
+10011,100,60000,0	//GD_REGENERATION##
+10012,100,0,0	//GD_RESTORE##
+10013,100,0,0	//GD_EMERGENCYCALL##

+ 16 - 15
db/skill_db.txt

@@ -508,21 +508,22 @@
 471,0,0,0,0,0,0,0,no,0,0,0,none,0	//SL_SKE##
 472,0,0,0,0,0,0,0,no,0,0,0,none,0	//SL_SKA##
 
-10000,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_APPROVAL#正規ギルド承認#
-10001,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_KAFRACONTRACT#カプラ雇用#
-10002,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_GUARDRESEARCH#ガ?ディアン研究#
-10003,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_CHARISMA#カリス?#Later changed to GD_GUARDUP#
-10004,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_EXTENSION#ギルド拡張#
-10005,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_GLORYGUILD##
-10006,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_LEADERSHIP##
-10007,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_GLORYWOUNDS##
-10008,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_SOULCOLD##
-10009,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_HAWKEYES##
-10010,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_BATTLEORDER##
-10011,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_REGENERATION##
-10012,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_RESTORE##
-10013,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_EMERGENCYCALL##
-10014,0,0,0,0,0,0,0,no,0,0,0,none,0	//GD_DEVELOPMENT##
+//id,range,hit,inf,pl,nk,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count
+10000,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_APPROVAL#正規ギルド承認#
+10001,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_KAFRACONTRACT#カプラ雇用#
+10002,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_GUARDRESEARCH#ガ?ディアン研究#
+10003,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_CHARISMA#カリス?#Later changed to GD_GUARDUP#
+10004,0,0,0,0,0,10,0,no,0,0,0,none,0	//GD_EXTENSION#ギルド拡張#
+10005,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_GLORYGUILD##
+10006,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_LEADERSHIP##
+10007,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_GLORYWOUNDS##
+10008,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_SOULCOLD##
+10009,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_HAWKEYES##
+10010,0,0,4,0,1,1,0,no,0,0,0,none,0	//GD_BATTLEORDER##
+10011,0,0,4,0,1,3,0,no,0,0,0,none,0	//GD_REGENERATION##
+10012,0,0,4,0,1,1,0,no,0,0,0,none,0	//GD_RESTORE##
+10013,0,0,4,0,1,1,0,no,0,0,0,none,0	//GD_EMERGENCYCALL##
+10014,0,0,0,0,0,1,0,no,0,0,0,none,0	//GD_DEVELOPMENT##
 
 // ST_PRESERVE#ヌチクョタ德�#
 // ST_FULLSTRIP#ヌョ_スコニョクウ#

+ 4 - 1
db/skill_require_db.txt

@@ -291,4 +291,7 @@
 //407,0,0,50,0,0,0,99,none,0,937,1,952,1,939,1,7033,1,972,1,657,1,713,1,0,0,0,0,0,0	//ASC_CDP
 407,0,0,50,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//ASC_CDP#ƒfƒbƒhƒŠ?ƒ|ƒCƒYƒ“�ì�¬#
 
-
+10010,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_BATTLEORDER##
+10011,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_REGENERATION##
+10012,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_RESTORE##
+10013,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_EMERGENCYCALL##

+ 1 - 1
src/map/map.h

@@ -17,7 +17,7 @@
 #define DAMAGELOG_SIZE 30
 #define LOOTITEM_SIZE 10
 #define MAX_SKILL_LEVEL 100
-#define MAX_STATUSCHANGE 200
+#define MAX_STATUSCHANGE 210
 #define MAX_SKILLUNITGROUP 32
 #define MAX_MOBSKILLUNITGROUP 8
 #define MAX_SKILLUNITGROUPTICKSET 128

+ 46 - 9
src/map/pc.c

@@ -1,4 +1,4 @@
-// $Id: pc.c 101 2004-09-25 17:57:22Z Valaris $
+// $Id: pc.c 101 2004-11-23 14:33:00Z Celestia $
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -1434,10 +1434,40 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		sd->paramb[4] += skill;
 
 	if((skill=pc_checkskill(sd,BS_HILTBINDING))>0) {   // Hilt binding gives +1 str +4 atk
-		sd->paramb[4] ++;
+		sd->paramb[0] ++;
 		sd->base_atk += 4;
 	}
 
+	// 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].timer != -1)
+				sd->paramb[0] += 2;
+			if (sd->sc_data[SC_GLORYWOUNDS].timer != -1)
+				sd->paramb[2] += 2;
+			if (sd->sc_data[SC_SOULCOLD].timer != -1)
+				sd->paramb[1] += 2;
+			if (sd->sc_data[SC_HAWKEYES].timer != -1)
+				sd->paramb[4] += 2;
+			if (sd->sc_data[SC_BATTLEORDERS].timer != -1) {
+				sd->paramb[0]+= 5;
+				sd->paramb[3]+= 5;
+				sd->paramb[4]+= 5;
+			}
+		}
+	}
+
 	// ステ?タス?化による基本パラメ?タ補正
 	if(sd->sc_count){
 		if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){	// 集中力向上
@@ -6301,7 +6331,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int pos)
 	// 二刀流?理
 	if ((pos==0x22) // 一?、?備要求箇所が二刀流武器かチェックする
 	 &&	(id->equip==2)	// ? 手武器
-	 &&	(pc_checkskill(sd, AS_LEFT) > 0 || sd->status.class == 12) ) // 左手修?有
+	 &&	(pc_checkskill(sd, AS_LEFT) > 0 || pc_calc_base_job2(sd->status.class) == 12) ) // 左手修?有
 	{
 		int tpos=0;
 		if(sd->equip_index[8] >= 0)
@@ -6745,9 +6775,13 @@ static int pc_spheal(struct map_session_data *sd)
 
 	a = natural_heal_diff_tick;
 	if(pc_issit(sd)) a += a;
-	if (sd->sc_data[SC_MAGNIFICAT].timer!=-1)	// マグニフィカ?ト
-		a += a;
-	 if((skill = pc_checkskill(sd,HP_MEDITATIO)) > 0) //Increase natural SP regen with Meditatio [DracoRPG]
+	if (sd->sc_count) {
+		if (sd->sc_data[SC_MAGNIFICAT].timer!=-1)	// マグニフィカ?ト
+			a += a;
+		if (sd->sc_data[SC_REGENERATION].timer != -1)
+			a *= sd->sc_data[SC_REGENERATION].val1;
+	}
+	if((skill = pc_checkskill(sd,HP_MEDITATIO)) > 0) //Increase natural SP regen with Meditatio [DracoRPG]
 		a += a*skill*3/100;
 
 	gc=guild_mapname2gc(sd->mapname);	// Increased guild castle regen [Valaris]
@@ -6774,9 +6808,12 @@ static int pc_hpheal(struct map_session_data *sd)
 
 	a = natural_heal_diff_tick;
 	if(pc_issit(sd)) a += a;
-	if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 )	// Modified by RoVeRT
-		a += a;
-
+	if (sd->sc_count) {
+		if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 )	// Modified by RoVeRT
+			a += a;
+		if (sd->sc_data[SC_REGENERATION].timer != -1)
+			a *= sd->sc_data[SC_REGENERATION].val1;
+	}
 	gc=guild_mapname2gc(sd->mapname);	// Increased guild castle regen [Valaris]
 	if(gc)	{
 		struct guild *g;

+ 176 - 58
src/map/skill.c

@@ -740,29 +740,94 @@ struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
 /* アブラカダブラ?動スキルデ?タベ?ス */
 struct skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
 
-int	skill_get_hit( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].hit : 0; }
-int	skill_get_inf( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf : guild_skill_get_inf(id); }
-int	skill_get_pl( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].pl : 0; }
-int	skill_get_nk( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].nk : 2; }
-int skill_get_max( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].max : guild_skill_get_max(id); }
-int skill_get_range( int id , int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].range[lv-1] : guild_skill_get_max(id)); }
-int	skill_get_hp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].hp[lv-1]; }
-int	skill_get_sp( int id ,int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].sp[lv-1] : guild_skill_get_sp(id, lv)); }
-int	skill_get_zeny( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].zeny[lv-1]; }
-int	skill_get_num( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].num[lv-1]; }
-int	skill_get_cast( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].cast[lv-1]; }
-int	skill_get_delay( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].delay[lv-1]; }
-int	skill_get_time( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time[lv-1]; }
-int	skill_get_time2( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1]; }
-int	skill_get_castdef( int id ){ return skill_db[id].cast_def_rate; }
-int	skill_get_weapontype( int id ){ return skill_db[id].weapon; }
-int	skill_get_inf2( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf2 : 0; }
-int	skill_get_castcancel( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].maxcount : 0; }
-int	skill_get_maxcount( int id ){ return skill_db[id].maxcount; }
-int	skill_get_blewcount( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1]; }
-int	skill_get_mhp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].mhp[lv-1]; }
-int	skill_get_castnodex( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].castnodex[lv-1]; }
-
+int	skill_get_hit( int id ){
+	if (id >= 10000 && id < 10015) id -= 9500;
+	return skill_db[id].hit;
+}
+int	skill_get_inf( int id ){
+	return (id < 500) ? skill_db[id].inf : guild_skill_get_inf(id);
+}
+int	skill_get_pl( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].pl;
+}
+int	skill_get_nk( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].nk;
+}
+int skill_get_max( int id ){
+	return (id < 500) ? skill_db[id].max : guild_skill_get_max(id);
+}
+int skill_get_range( int id , int lv ){
+	if (lv <= 0) return 0;
+	return (id < 500) ? skill_db[id].range[lv-1] : guild_skill_get_range(id);
+}
+int	skill_get_hp( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0: skill_db[id].hp[lv-1];
+}
+int	skill_get_sp( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	//if (lv <= 0) return 0;
+	//return (id < 500) ? skill_db[id].sp[lv-1] : guild_skill_get_sp(id, lv);
+	return (lv <= 0) ? 0: skill_db[id].sp[lv-1];
+}
+int	skill_get_zeny( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].zeny[lv-1];
+}
+int	skill_get_num( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].num[lv-1];
+}
+int	skill_get_cast( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].cast[lv-1];
+}
+int	skill_get_delay( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].delay[lv-1];
+}
+int	skill_get_time( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].upkeep_time[lv-1];
+}
+int	skill_get_time2( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1];
+}
+int	skill_get_castdef( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].cast_def_rate;
+}
+int	skill_get_weapontype( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].weapon;
+}
+int	skill_get_inf2( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].inf2;
+}
+int	skill_get_castcancel( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].maxcount;
+}
+int	skill_get_maxcount( int id ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return skill_db[id].maxcount;
+}
+int	skill_get_blewcount( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1];
+}
+int	skill_get_mhp( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].mhp[lv-1];
+}
+int	skill_get_castnodex( int id ,int lv ){
+	if (id >= 10000 && id < 10015) id-= 9500;
+	return (lv <= 0) ? 0:skill_db[id].castnodex[lv-1];
+}
 int skill_tree_get_max(int id, int b_class){
 	struct pc_base_job s_class = pc_calc_base_job(b_class);
 	int i, skillid;
@@ -872,8 +937,14 @@ int skill_get_unit_id(int id,int flag)
 	case WE_CALLPARTNER:	return 0xb2;				/* あなたに逢いたい */
 	case PA_GOSPEL:			return 0xb3;				/* ゴスペル */
 	case HP_BASILICA:		return 0xb4;				/* バジリカ */
+	case CG_MOONLIT:		return 0xb5;
 	case PF_FOGWALL:		return 0xb6;				/* フォグウォ?ル */
 	case PF_SPIDERWEB:		return 0xb7;				/* スパイダ?ウェッブ */
+	// temporary unit ID's [Celest]
+	case GD_LEADERSHIP:		return 0xc1;
+	case GD_GLORYWOUNDS:	return 0xc2;
+	case GD_SOULCOLD:		return 0xc3;
+	case GD_HAWKEYES:		return 0xc4;
 	}
 	return 0;
 	/*
@@ -2169,6 +2240,7 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
 	if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl))
 		return 1;
 	map_freeblock_lock();
+
 	switch(skillid)
 	{
 	/* 武器攻?系スキル */
@@ -2750,9 +2822,9 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
 		return 1;
 	if(battle_get_class(bl) == 1288)
 		return 1;
-        if (skillnotok(skillid, (struct map_session_data *)bl)) // [MouseJstr]
-                return 0;
-
+	if (skillnotok(skillid, (struct map_session_data *)bl)) // [MouseJstr]
+		return 0;
+	
 	map_freeblock_lock();
 	switch(skillid)
 	{
@@ -4320,9 +4392,23 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
 		}
 		break;
 	case GD_BATTLEORDER:
+		{
+			struct guild *g = NULL;
+			if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id))) {
+				for(i = 0; i < g->max_member; i++) {
+					if ((dstsd = g->member[i].sd) != NULL) {
+						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 );
+					}
+				}
+			}
+		}
+		printf("Guild skill castend:%d\n",skillid);
+		break;
 	case GD_REGENERATION:
 	case GD_RESTORE:
 	case GD_EMERGENCYCALL:
+		printf("Guild skill castend:%d\n",skillid);
 		break;
 	default:
 		printf("Unknown skill used:%d\n",skillid);
@@ -5085,12 +5171,17 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 		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);
 		if(sc_data) {
 			if (sc_data[SC_DELUGE].timer!=-1) limit *= 2;
-		}		
+		}
 		break;
 	case RG_GRAFFITI:			/* Graffiti */
 		count=1;	// Leave this at 1 [Valaris]
@@ -5292,6 +5383,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 		case DC_DONTFORGETME:	/* 私を忘れないで… */
 		case DC_FORTUNEKISS:	/* 幸運のキス */
 		case DC_SERVICEFORYOU:	/* サ?ビスフォ?ユ? */
+		case CG_MOONLIT:
 			ux+=(i%7-3);
 			uy+=(i/7-3);
 			if(i==40)
@@ -6870,6 +6962,12 @@ 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;
+		break;
 	}
 
 	sd->skillid = skill_num;
@@ -7005,7 +7103,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
 	case GD_REGENERATION:
 	case GD_RESTORE:
 	case GD_EMERGENCYCALL:
-		printf ("guild skill used : id = %d\n", skill_num);
+		casttime = 1000; // temporary [Celest]
 		break;
 	}
 
@@ -7024,8 +7122,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
 
 	if( casttime>0 || forcecast ){ /* 詠唱が必要 */
 		struct mob_data *md;
-		clif_skillcasting( &sd->bl,
-			sd->bl.id, target_id, 0,0, skill_num,casttime);
+		clif_skillcasting( &sd->bl, sd->bl.id, target_id, 0,0, skill_num,casttime);
 
 		/* 詠唱反?モンスタ? */
 		if( bl->type==BL_MOB && (md=(struct mob_data *)bl) && mob_db[md->class].mode&0x10 &&
@@ -7961,9 +8058,17 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
 			case SC_MATKPOT:		/* magic attack potion [Valaris] */
 			case SC_WEDDING:	//結婚用(結婚衣裳になって?くのが?いとか)
 			case SC_MELTDOWN:		/* メルトダウン */
-			case SC_EDP:		// Celest
+			// Celest
+			case SC_EDP:
 			case SC_MARIONETTE:
 			case SC_MARIONETTE2:
+			case SC_SLOWDOWN:
+			case SC_LEADERSHIP:
+			case SC_GLORYWOUNDS:
+			case SC_SOULCOLD:
+			case SC_HAWKEYES:
+			case SC_BATTLEORDERS:
+			case SC_REGENERATION:
 				calc_flag = 1;
 				break;
 			case SC_BERSERK:			/* バ?サ?ク */
@@ -9282,6 +9387,13 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 			if (!val3) val3 = -1;
 			break;
 		case SC_SLOWDOWN:
+		case SC_LEADERSHIP:
+		case SC_GLORYWOUNDS:
+		case SC_SOULCOLD:
+		case SC_HAWKEYES:
+		case SC_BATTLEORDERS:
+		case SC_REGENERATION:
+			calc_flag = 1;
 			break;
 		default:
 			if(battle_config.error_log)
@@ -10193,26 +10305,26 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
 
 	if(group->unit!=NULL){
 		if(!battle_config.unit_movement_type){
-		int i;
-		for(i=0;i<group->unit_count;i++){
-			struct skill_unit *unit=&group->unit[i];
-			if(unit->alive && !(m==unit->bl.m && dx==0 && dy==0)){
-				int range=unit->range;
-				map_delblock(&unit->bl);
-				unit->bl.m = m;
-				unit->bl.x += dx;
-				unit->bl.y += dy;
-				map_addblock(&unit->bl);
-				clif_skill_setunit(unit);
-				if(range>0){
-					if(range<7)
-						range=7;
-					map_foreachinarea( skill_unit_move_unit_group_sub, unit->bl.m,
-						unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
-						&unit->bl,gettick() );
+			int i;
+			for(i=0;i<group->unit_count;i++){
+				struct skill_unit *unit=&group->unit[i];
+				if(unit->alive && !(m==unit->bl.m && dx==0 && dy==0)){
+					int range=unit->range;
+					map_delblock(&unit->bl);
+					unit->bl.m = m;
+					unit->bl.x += dx;
+					unit->bl.y += dy;
+					map_addblock(&unit->bl);
+					clif_skill_setunit(unit);
+					if(range>0){
+						if(range<7)
+							range=7;
+						map_foreachinarea( skill_unit_move_unit_group_sub, unit->bl.m,
+							unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
+							&unit->bl,gettick() );
+					}
 				}
 			}
-		}
 		}else{
 			int i,j, *r_flag, *s_flag, *m_flag;
 			struct skill_unit *unit1;
@@ -10250,9 +10362,9 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
 						//?純移動(rangeも?承の必要無し)
 						int range=unit1->range;
 						map_delblock(&unit1->bl);
-					unit1->bl.m = m;
-					unit1->bl.x += dx;
-					unit1->bl.y += dy;
+						unit1->bl.m = m;
+						unit1->bl.x += dx;
+						unit1->bl.y += dy;
 						map_addblock(&unit1->bl);
 						clif_skill_setunit(unit1);
 						if(range > 0){
@@ -10290,9 +10402,9 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
 					}
 				}
 			}
-                        free(r_flag);
-                        free(s_flag);
-                        free(m_flag);
+			free(r_flag);
+            free(s_flag);
+            free(m_flag);
 		}
 	}
 	return 0;
@@ -10631,7 +10743,9 @@ int skill_readdb(void)
 			continue;
 
 		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
+		if (i>=10000 && i<10015) // for guild skills [Celest]
+			i -= 9500;
+		else if(i<0 || i>MAX_SKILL_DB)
 			continue;
 
 /*		printf("skill id=%d\n",i); */
@@ -10703,7 +10817,9 @@ int skill_readdb(void)
 			continue;
 
 		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
+		if (i>=10000 && i<10015) // for guild skills [Celest]
+			i -= 9500;
+		else if(i<0 || i>MAX_SKILL_DB)
 			continue;
 
 		memset(split2,0,sizeof(split2));
@@ -10842,7 +10958,9 @@ int skill_readdb(void)
 			continue;
 
 		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
+		if (i>=10000 && i<10015) // for guild skills [Celest]
+			i -= 9500;
+		else if(i<0 || i>MAX_SKILL_DB)
 			continue;
 
 		memset(split2,0,sizeof(split2));

+ 21 - 13
src/map/skill.h

@@ -4,11 +4,11 @@
 
 #include "map.h"
 
-#define MAX_SKILL_DB			472
-#define MAX_SKILL_PRODUCE_DB	 150
+#define MAX_SKILL_DB			515
+#define MAX_SKILL_PRODUCE_DB	150
 #define MAX_PRODUCE_RESOURCE	7
-#define MAX_SKILL_ARROW_DB	 150
-#define MAX_SKILL_ABRA_DB	 350
+#define MAX_SKILL_ARROW_DB		150
+#define MAX_SKILL_ABRA_DB		350
 
 // スキルデ?タベ?ス
 struct skill_db {
@@ -320,27 +320,35 @@ enum {	// struct map_session_data 
 // Used by English Team
 	SC_BROKNARMOR		=32,
 	SC_BROKNWEAPON		=33,
+	SC_SLOWDOWN			=45, // for skill slowdown
 	SC_SIGHTTRASHER		=73,
 //	SC_BASILICA			=125, // 125 is the same id as joint break
 	SC_BASILICA			=102, // temporarily use this before an actual id is found [celest]
-	SC_EDP				= 114, // 
-	SC_MARIONETTE2      = 122, // Marionette target
+	SC_EDP				=114, // 
+	SC_MARIONETTE2		=122, // Marionette target
 	SC_ENSEMBLE			=159,
 	SC_FOGWALL			=178,
 	SC_GOSPEL			=179,
-	SC_LANDPROTECTOR		=182,
-	SC_ADAPTATION			=183,
-	SC_CHASEWALK			=184,
+	SC_LANDPROTECTOR	=182,
+	SC_ADAPTATION		=183,
+	SC_CHASEWALK		=184,
 	SC_ATKPOT			=185,	// [Valaris]
 	SC_MATKPOT			=186,	// [Valaris]
 	SC_MINDBREAKER		=191,
 	SC_SPELLBREAKER		=192,
+	SC_DPOISON			=193, /* 猛毒 */
+	SC_BLOCKSKILL		=194, // for disallowing the use of a skill for a time period
 
 // [Celest]
-	SC_SLOWDOWN         = 45, // for skill slowdown
-	SC_BLEEDING         = 124, // Temporarily same id as headcrush
-	SC_DPOISON			= 193, /* 猛毒 */
-	SC_BLOCKSKILL       = 194, // for disallowing the use of a skill for a time period
+	SC_BLEEDING			= 124, // Temporarily same id as headcrush	
+	SC_MOONLIT			= 195,
+	SC_LEADERSHIP		= 196,
+	SC_GLORYWOUNDS		= 197,
+	SC_SOULCOLD			= 198,
+	SC_HAWKEYES			= 199,
+	SC_BATTLEORDERS		= 200,
+	SC_REGENERATION		= 201,	
+
 
 // -- testing various SC effects
 //	SC_AURABLADE			=81,