diff options
-rw-r--r-- | Changelog.txt | 8 | ||||
-rw-r--r-- | db/Changelog.txt | 2 | ||||
-rw-r--r-- | db/skill_cast_db.txt | 5 | ||||
-rw-r--r-- | db/skill_db.txt | 31 | ||||
-rw-r--r-- | db/skill_require_db.txt | 5 | ||||
-rw-r--r-- | src/map/map.h | 2 | ||||
-rw-r--r-- | src/map/pc.c | 55 | ||||
-rw-r--r-- | src/map/skill.c | 234 | ||||
-rw-r--r-- | src/map/skill.h | 34 |
9 files changed, 279 insertions, 97 deletions
diff --git a/Changelog.txt b/Changelog.txt index d85c7ca4a..fa833028f 100644 --- a/Changelog.txt +++ b/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); diff --git a/db/Changelog.txt b/db/Changelog.txt index cbf534667..e2127d564 100644 --- a/db/Changelog.txt +++ b/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] diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt index 4e4c7bdda..b16117ab4 100644 --- a/db/skill_cast_db.txt +++ b/db/skill_cast_db.txt @@ -267,3 +267,8 @@ 405,0,0,30000,8000 //PF_SPIDERWEB#ƒXƒpƒCƒ_[ƒEƒFƒbƒu# 406,0,0,0,3000 //ASC_METEORASSAULT#ƒƒeƒIƒAƒTƒ‹ƒg# 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## diff --git a/db/skill_db.txt b/db/skill_db.txt index 4c4832153..6e93217f0 100644 --- a/db/skill_db.txt +++ b/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#³‹KƒMƒ‹ƒh³”F# -10001,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_KAFRACONTRACT#ƒJƒvƒ‰ŒÙ—p# -10002,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_GUARDRESEARCH#ƒK?ƒfƒBƒAƒ“Œ¤‹†# -10003,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_CHARISMA#ƒJƒŠƒX?#Later changed to GD_GUARDUP# -10004,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_EXTENSION#ƒMƒ‹ƒhŠg’£# -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#³‹KƒMƒ‹ƒh³”F# +10001,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_KAFRACONTRACT#ƒJƒvƒ‰ŒÙ—p# +10002,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_GUARDRESEARCH#ƒK?ƒfƒBƒAƒ“Œ¤‹†# +10003,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_CHARISMA#ƒJƒŠƒX?#Later changed to GD_GUARDUP# +10004,0,0,0,0,0,10,0,no,0,0,0,none,0 //GD_EXTENSION#ƒMƒ‹ƒhŠg’£# +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#Ç®_½ºÆ®¸³# diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt index 2caeb9e70..4b2c7ca88 100644 --- a/db/skill_require_db.txt +++ b/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## diff --git a/src/map/map.h b/src/map/map.h index f54579ea2..48f1eb750 100644 --- a/src/map/map.h +++ b/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 diff --git a/src/map/pc.c b/src/map/pc.c index b2fb1e120..b755d1790 100644 --- a/src/map/pc.c +++ b/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; + } + } + } + // ƒXƒe?ƒ^ƒX?‰»‚É‚æ‚éŠî–{ƒpƒ‰ƒ?ƒ^•â³ if(sd->sc_count){ if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){ // W’†—ÍŒüã @@ -6301,7 +6331,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int pos) // “ñ“—¬?— if ((pos==0x22) // ˆê?A?”õ—v‹‰ÓŠ‚ª“ñ“—¬•Ší‚©ƒ`ƒFƒbƒN‚·‚é && (id->equip==2) // ? Žè•Ší - && (pc_checkskill(sd, AS_LEFT) > 0 || sd->status.class == 12) ) // ¶ŽèC?—L + && (pc_checkskill(sd, AS_LEFT) > 0 || pc_calc_base_job2(sd->status.class) == 12) ) // ¶ŽèC?—L { 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) // ƒ}ƒOƒjƒtƒBƒJ?ƒg - 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) // ƒ}ƒOƒjƒtƒBƒJ?ƒg + 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; diff --git a/src/map/skill.c b/src/map/skill.c index b77706b00..7dea5f682 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -740,29 +740,94 @@ struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB]; /* ƒAƒuƒ‰ƒJƒ_ƒuƒ‰?“®ƒXƒLƒ‹ƒf?ƒ^ƒx?ƒX */ 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; /* ƒSƒXƒyƒ‹ */ case HP_BASILICA: return 0xb4; /* ƒoƒWƒŠƒJ */ + case CG_MOONLIT: return 0xb5; case PF_FOGWALL: return 0xb6; /* ƒtƒHƒOƒEƒH?ƒ‹ */ case PF_SPIDERWEB: return 0xb7; /* ƒXƒpƒCƒ_?ƒEƒFƒbƒu */ + // 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) { /* •ŠíU?ŒnƒXƒLƒ‹ */ @@ -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: /* ƒtƒHƒOƒEƒH?ƒ‹ */ 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: /* Ž„‚ð–Y‚ê‚È‚¢‚Åc */ case DC_FORTUNEKISS: /* K‰^‚̃LƒX */ case DC_SERVICEFORYOU: /* ƒT?ƒrƒXƒtƒH?ƒ†? */ + 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 ){ /* ‰r¥‚ª•K—v */ 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); /* ‰r¥”½?ƒ‚ƒ“ƒXƒ^? */ 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: //Œ‹¥—p(Œ‹¥ˆßÖ‚É‚È‚Á‚Ä?‚‚Ì‚ª?‚¢‚Æ‚©) case SC_MELTDOWN: /* ƒƒ‹ƒgƒ_ƒEƒ“ */ - 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: /* ƒo?ƒT?ƒN */ @@ -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‚à?³‚Ì•K—v–³‚µ) 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)); diff --git a/src/map/skill.h b/src/map/skill.h index 8d756ebaf..774076649 100644 --- a/src/map/skill.h +++ b/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 // ƒXƒLƒ‹ƒf?ƒ^ƒx?ƒX struct skill_db { @@ -320,27 +320,35 @@ enum { // struct map_session_data ‚Ì status_change‚Ì”Ô?ƒe?ƒuƒ‹ // 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, |