Updated new guild skills (50%)
git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@338 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
a1de05ce9f
commit
427a127b53
@ -5,7 +5,7 @@ Date Added
|
|||||||
* @charpetfriendly is now #petfriendly [MC Cameri]
|
* @charpetfriendly is now #petfriendly [MC Cameri]
|
||||||
* @charstats is now #stats [MC Cameri]
|
* @charstats is now #stats [MC Cameri]
|
||||||
* Skill Updates: [celest]
|
* 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
|
- Notes to other devs: Guild skills with id's 10000-10014 will be stored in
|
||||||
skill_db[500-514]
|
skill_db[500-514]
|
||||||
- Corrected Hilt Binding
|
- Corrected Hilt Binding
|
||||||
|
@ -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) ){
|
g->skill[idx].lv < guild_skill_get_max(skill_num) ){
|
||||||
intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id,flag);
|
intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id,flag);
|
||||||
}
|
}
|
||||||
|
pc_calcstatus (sd, 0); // Celest
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// スキルポイント割り振り通知
|
// スキルポイント割り振り通知
|
||||||
|
59
src/map/pc.c
59
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 <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -1438,20 +1438,28 @@ int pc_calcstatus(struct map_session_data* sd,int first)
|
|||||||
sd->base_atk += 4;
|
sd->base_atk += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Celest
|
// New guild skills - Celest
|
||||||
if (sd->status.guild_id > 0) {
|
if (sd->status.guild_id > 0) {
|
||||||
struct guild *g;
|
struct guild *g;
|
||||||
if ((g = guild_search(sd->status.guild_id)) && strcmp(sd->status.name,g->master)==0) {
|
if ((g = guild_search(sd->status.guild_id)) && strcmp(sd->status.name,g->master)==0) {
|
||||||
if (guild_checkskill(g, GD_LEADERSHIP)>0)
|
if (!sd->sc_data[SC_LEADERSHIP].val4 && guild_checkskill(g, GD_LEADERSHIP)>0) {
|
||||||
; //skillunitsetting
|
//skill_status_change_start(&sd->bl,SC_LEADERSHIP,1,0,0,0,0,0 );
|
||||||
if (guild_checkskill(g, GD_GLORYWOUNDS)>0)
|
skill_unitsetting(&sd->bl,GD_LEADERSHIP,1,sd->bl.x,sd->bl.y,0);
|
||||||
; //skillunitsetting
|
}
|
||||||
if (guild_checkskill(g, GD_SOULCOLD)>0)
|
if (!sd->sc_data[SC_GLORYWOUNDS].val4 && guild_checkskill(g, GD_GLORYWOUNDS)>0) {
|
||||||
; //skillunitsetting
|
//skill_status_change_start(&sd->bl,SC_GLORYWOUNDS,1,0,0,0,0,0 );
|
||||||
if (guild_checkskill(g, GD_HAWKEYES)>0)
|
skill_unitsetting(&sd->bl,GD_GLORYWOUNDS,1,sd->bl.x,sd->bl.y,0);
|
||||||
; //skillunitsetting
|
}
|
||||||
}
|
if (!sd->sc_data[SC_SOULCOLD].val4 && guild_checkskill(g, GD_SOULCOLD)>0) {
|
||||||
if (sd->sc_count) {
|
//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)
|
if (sd->sc_data[SC_LEADERSHIP].timer != -1)
|
||||||
sd->paramb[0] += 2;
|
sd->paramb[0] += 2;
|
||||||
if (sd->sc_data[SC_GLORYWOUNDS].timer != -1)
|
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;
|
sd->bl.y = y;
|
||||||
if(moveblock) map_addblock(&sd->bl);
|
if(moveblock) map_addblock(&sd->bl);
|
||||||
|
|
||||||
if(sd->sc_data[SC_DANCING].timer!=-1)
|
if (sd->status.guild_id > 0) {
|
||||||
skill_unit_move_unit_group((struct skill_unit_group *)sd->sc_data[SC_DANCING].val2,sd->bl.m,dx,dy);
|
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);
|
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;
|
sd->walktimer = -1;
|
||||||
@ -3820,18 +3841,22 @@ static int pc_walk(int tid,unsigned int tick,int id,int data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* ”íƒfƒBƒ{?ƒVƒ‡ƒ“?<3F>¸ */
|
/* ”íƒfƒBƒ{?ƒVƒ‡ƒ“?<3F>¸ */
|
||||||
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)
|
if (sd->sc_data[SC_DEVOTION].val1)
|
||||||
skill_devotion2(&sd->bl,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]
|
if (sd->sc_data[SC_BASILICA].timer != -1) { // Basilica cancels if caster moves [celest]
|
||||||
struct skill_unit *su;
|
struct skill_unit *su;
|
||||||
if ((su = (struct skill_unit *)sd->sc_data[SC_BASILICA].val4)) {
|
if ((su = (struct skill_unit *)sd->sc_data[SC_BASILICA].val4)) {
|
||||||
struct skill_unit_group *sg;
|
struct skill_unit_group *sg;
|
||||||
if ((sg = su->group) && sg->src_id == sd->bl.id) {
|
if ((sg = su->group) && sg->src_id == sd->bl.id) {
|
||||||
skill_status_change_end(&sd->bl,SC_BASILICA,-1);
|
skill_status_change_end(&sd->bl,SC_BASILICA,-1);
|
||||||
skill_delunitgroup (sg);
|
skill_delunitgroup (sg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
267
src/map/skill.c
267
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>
|
#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_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_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);
|
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;
|
break;
|
||||||
|
|
||||||
|
// New guild skills [Celest]
|
||||||
case GD_BATTLEORDER:
|
case GD_BATTLEORDER:
|
||||||
{
|
{
|
||||||
struct guild *g = NULL;
|
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++) {
|
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);
|
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;
|
break;
|
||||||
case GD_REGENERATION:
|
|
||||||
case GD_RESTORE:
|
|
||||||
case GD_EMERGENCYCALL:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Unknown skill used:%d\n",skillid);
|
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;
|
limit=500;
|
||||||
range=5;
|
range=5;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WZ_HEAVENDRIVE: /* ヘヴンズドライブ */
|
case WZ_HEAVENDRIVE: /* ヘヴンズドライブ */
|
||||||
limit=500;
|
limit=500;
|
||||||
range=2;
|
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;
|
val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
|
||||||
val2 = battle_get_luk(src)/10;
|
val2 = battle_get_luk(src)/10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AM_DEMONSTRATION: /* デモンストレ?ション */
|
case AM_DEMONSTRATION: /* デモンストレ?ション */
|
||||||
limit=skill_get_time(skillid,skilllv);
|
limit=skill_get_time(skillid,skilllv);
|
||||||
interval=1000;
|
interval=1000;
|
||||||
range=1;
|
range=1;
|
||||||
target=BCT_ENEMY;
|
target=BCT_ENEMY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WE_CALLPARTNER: /* あなたに逢いたい */
|
case WE_CALLPARTNER: /* あなたに逢いたい */
|
||||||
limit=skill_get_time(skillid,skilllv);
|
limit=skill_get_time(skillid,skilllv);
|
||||||
range=-1;
|
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);
|
//skill_status_change_start(src,SC_ANKLE,skilllv,0,0,0,limit,0);
|
||||||
//sd->canmove_tick = gettick() + limit; // added later [celest]
|
//sd->canmove_tick = gettick() + limit; // added later [celest]
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PA_GOSPEL: /* ゴスペル */
|
case PA_GOSPEL: /* ゴスペル */
|
||||||
count=49;
|
count=49;
|
||||||
target=BCT_PARTY;
|
target=BCT_PARTY;
|
||||||
limit=skill_get_time(skillid,skilllv);
|
limit=skill_get_time(skillid,skilllv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CG_MOONLIT:
|
case CG_MOONLIT:
|
||||||
range=1;
|
range=1;
|
||||||
target=BCT_ALL;
|
target=BCT_ALL;
|
||||||
limit=skill_get_time(skillid,skilllv);
|
limit=skill_get_time(skillid,skilllv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PF_FOGWALL: /* フォグウォ?ル */
|
case PF_FOGWALL: /* フォグウォ?ル */
|
||||||
count=15;
|
count=15;
|
||||||
limit=skill_get_time(skillid,skilllv);
|
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;
|
if (sc_data[SC_DELUGE].timer!=-1) limit *= 2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RG_GRAFFITI: /* Graffiti */
|
case RG_GRAFFITI: /* Graffiti */
|
||||||
count=1; // Leave this at 1 [Valaris]
|
count=1; // Leave this at 1 [Valaris]
|
||||||
limit=600000; // Time length [Valaris]
|
limit=600000; // Time length [Valaris]
|
||||||
break;
|
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)));
|
nullpo_retr(NULL, group=skill_initunitgroup(src,count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)));
|
||||||
group->limit=limit;
|
group->limit=limit;
|
||||||
@ -5427,8 +5491,25 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
|
|||||||
|
|
||||||
// [celest]
|
// [celest]
|
||||||
if (sc_data) {
|
if (sc_data) {
|
||||||
if (sc_data[SC_BASILICA].timer!=-1) // attach Basilica's id to the caster
|
// attach the unit's id to the caster
|
||||||
sc_data[SC_BASILICA].val4 = (int)unit;
|
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;
|
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:
|
/* default:
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
printf("skill_unit_onplace: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
|
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;
|
sg->limit=DIFF_TICK(tick,sg->tick)+1000;
|
||||||
}
|
}
|
||||||
break;
|
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:
|
/* default:
|
||||||
if(battle_config.error_log)
|
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 0xae: /* 幸運のキス */
|
||||||
case 0xaf: /* サ?ビスフォ?ユ? */
|
case 0xaf: /* サ?ビスフォ?ユ? */
|
||||||
case 0xb4:
|
case 0xb4:
|
||||||
|
case 0xc1:
|
||||||
|
case 0xc2:
|
||||||
|
case 0xc3:
|
||||||
|
case 0xc4:
|
||||||
return skill_unit_onout(src,bl,tick);
|
return skill_unit_onout(src,bl,tick);
|
||||||
|
|
||||||
/* default:
|
/* 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);
|
pc_setpos(p_sd,map[src->bl.m].name,src->bl.x,src->bl.y,3);
|
||||||
}
|
}
|
||||||
break;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -6962,11 +7146,21 @@ int skill_use_id( struct map_session_data *sd, int target_id,
|
|||||||
sd->skillid_old = skill_num;
|
sd->skillid_old = skill_num;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GD_BATTLEORDER:
|
case GD_BATTLEORDER:
|
||||||
case GD_REGENERATION:
|
case GD_REGENERATION:
|
||||||
case GD_RESTORE:
|
case GD_RESTORE:
|
||||||
case GD_EMERGENCYCALL:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8652,8 +8846,20 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
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 );
|
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_KEEPING:
|
||||||
case SC_BARRIER:
|
case SC_BARRIER:
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
|
|
||||||
case SC_HALLUCINATION:
|
case SC_HALLUCINATION:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_CONCENTRATION: /* コンセントレ?ション */
|
case SC_CONCENTRATION: /* コンセントレ?ション */
|
||||||
*opt3 |= 1;
|
*opt3 |= 1;
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_TENSIONRELAX: /* テンションリラックス */
|
case SC_TENSIONRELAX: /* テンションリラックス */
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
if(bl->type == BL_PC) {
|
if(bl->type == BL_PC) {
|
||||||
tick = 10000;
|
tick = 10000;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_AURABLADE: /* オ?ラブレ?ド */
|
case SC_AURABLADE: /* オ?ラブレ?ド */
|
||||||
case SC_PARRYING: /* パリイング */
|
case SC_PARRYING: /* パリイング */
|
||||||
// case SC_ASSUMPTIO: /* */
|
// 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;
|
calc_flag = 1;
|
||||||
val2 = (val1 / 2); //Flee上昇率
|
val2 = (val1 / 2); //Flee上昇率
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_BERSERK: /* バ?サ?ク */
|
case SC_BERSERK: /* バ?サ?ク */
|
||||||
if(sd){
|
if(sd){
|
||||||
sd->status.hp = sd->status.max_hp * 3;
|
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;
|
tick = 10000;
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_ASSUMPTIO: /* アスムプティオ */
|
case SC_ASSUMPTIO: /* アスムプティオ */
|
||||||
*opt3 |= 2048;
|
*opt3 |= 2048;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_BASILICA: // [celest]
|
case SC_BASILICA: // [celest]
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_MARIONETTE: /* マリオネットコントロ?ル */
|
case SC_MARIONETTE: /* マリオネットコントロ?ル */
|
||||||
case SC_MARIONETTE2:
|
case SC_MARIONETTE2:
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
*opt3 |= 1024;
|
*opt3 |= 1024;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_MELTDOWN: /* メルトダウン */
|
case SC_MELTDOWN: /* メルトダウン */
|
||||||
case SC_CARTBOOST: /* カ?トブ?スト */
|
case SC_CARTBOOST: /* カ?トブ?スト */
|
||||||
case SC_TRUESIGHT: /* トゥル?サイト */
|
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: /* 魔法力?幅 */
|
case SC_MAGICPOWER: /* 魔法力?幅 */
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_REJECTSWORD: /* リジェクトソ?ド */
|
case SC_REJECTSWORD: /* リジェクトソ?ド */
|
||||||
val2 = 3; //3回攻?を跳ね返す
|
val2 = 3; //3回攻?を跳ね返す
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_MEMORIZE: /* メモライズ */
|
case SC_MEMORIZE: /* メモライズ */
|
||||||
val2 = 3; //3回詠唱を1/3にする
|
val2 = 3; //3回詠唱を1/3にする
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_GRAFFITI: /* グラフィティ */
|
case SC_GRAFFITI: /* グラフィティ */
|
||||||
{
|
{
|
||||||
struct skill_unit_group *sg = skill_unitsetting(bl,RG_GRAFFITI,val1,val2,val3,0);
|
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;
|
val4 = (int)sg;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_SPLASHER: /* ベナムスプラッシャ? */
|
case SC_SPLASHER: /* ベナムスプラッシャ? */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_FOGWALL:
|
case SC_FOGWALL:
|
||||||
val2 = 75;
|
val2 = 75;
|
||||||
// calc_flag = 1; // not sure of effects yet [celest]
|
// calc_flag = 1; // not sure of effects yet [celest]
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_BLOCKSKILL:
|
case SC_BLOCKSKILL:
|
||||||
if (!tick) tick = 60000;
|
if (!tick) tick = 60000;
|
||||||
if (!val3) val3 = -1;
|
if (!val3) val3 = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_SLOWDOWN:
|
case SC_SLOWDOWN:
|
||||||
|
calc_flag = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case SC_LEADERSHIP:
|
case SC_LEADERSHIP:
|
||||||
case SC_GLORYWOUNDS:
|
case SC_GLORYWOUNDS:
|
||||||
case SC_SOULCOLD:
|
case SC_SOULCOLD:
|
||||||
case SC_HAWKEYES:
|
case SC_HAWKEYES:
|
||||||
case SC_BATTLEORDERS:
|
tick = 1000;
|
||||||
|
calc_flag = 1;
|
||||||
|
//val4 = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case SC_REGENERATION:
|
case SC_REGENERATION:
|
||||||
|
val1 = 2;
|
||||||
|
case SC_BATTLEORDERS:
|
||||||
|
tick = 60000; // 1 minute
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
printf("UnknownStatusChange [%d]\n", type);
|
printf("UnknownStatusChange [%d]\n", type);
|
||||||
@ -10080,12 +10313,6 @@ int skill_unit_timer_sub( struct block_list *bl, va_list ap )
|
|||||||
if(unit->alive &&
|
if(unit->alive &&
|
||||||
(DIFF_TICK(tick,group->tick)>=group->limit || DIFF_TICK(tick,group->tick)>=unit->limit) ){
|
(DIFF_TICK(tick,group->tick)>=group->limit || DIFF_TICK(tick,group->tick)>=unit->limit) ){
|
||||||
switch(group->unit_id){
|
switch(group->unit_id){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case 0x8f: /* ブラストマイン */
|
case 0x8f: /* ブラストマイン */
|
||||||
group->unit_id = 0x8c;
|
group->unit_id = 0x8c;
|
||||||
clif_changelook(bl,LOOK_BASE,group->unit_id);
|
clif_changelook(bl,LOOK_BASE,group->unit_id);
|
||||||
|
@ -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);
|
int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick);
|
||||||
|
|
||||||
// ユニットスキル
|
// ユニットスキル
|
||||||
|
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);
|
struct skill_unit *skill_initunit(struct skill_unit_group *group,int idx,int x,int y);
|
||||||
int skill_delunit(struct skill_unit *unit);
|
int skill_delunit(struct skill_unit *unit);
|
||||||
struct skill_unit_group *skill_initunitgroup(struct block_list *src,
|
struct skill_unit_group *skill_initunitgroup(struct block_list *src,
|
||||||
@ -347,7 +348,7 @@ enum { // struct map_session_data
|
|||||||
SC_SOULCOLD = 198,
|
SC_SOULCOLD = 198,
|
||||||
SC_HAWKEYES = 199,
|
SC_HAWKEYES = 199,
|
||||||
SC_BATTLEORDERS = 200,
|
SC_BATTLEORDERS = 200,
|
||||||
SC_REGENERATION = 201,
|
SC_REGENERATION = 201,
|
||||||
|
|
||||||
|
|
||||||
// -- testing various SC effects
|
// -- testing various SC effects
|
||||||
|
Loading…
x
Reference in New Issue
Block a user