Updated new guild skills (60%)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@347 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2004-11-24 17:45:04 +00:00
parent 17ba37bf72
commit b22314457f
4 changed files with 75 additions and 35 deletions

View File

@ -1,6 +1,7 @@
Date Added Date Added
11/24 11/24
* Fixed char-txt crashing when closing, Codemaster free()'s. [MC Cameri] * Fixed char-txt crashing when closing, Codemaster free()'s. [MC Cameri]
* Skill Updates: - Updated guild skills (60%) [celest]
11/23 11/23
* Fixed script loading small/large monsters. [Valaris] * Fixed script loading small/large monsters. [Valaris]

View File

@ -865,8 +865,13 @@ int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
int guild_change_emblem(struct map_session_data *sd,int len,const char *data) int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
{ {
nullpo_retr(0, sd); nullpo_retr(0, sd);
struct guild *g = NULL;
return intif_guild_emblem(sd->status.guild_id,len,data); if ((g = guild_search(sd->status.guild_id)) && guild_checkskill(g, GD_GLORYGUILD)>0)
return intif_guild_emblem(sd->status.guild_id,len,data);
clif_skill_fail(sd,GD_GLORYGUILD,0,0);
return 0;
} }
// ギルドエンブレム変更通知 // ギルドエンブレム変更通知
int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)

View File

@ -2106,12 +2106,6 @@ int pc_calcspeed (struct map_session_data *sd)
b_speed = sd->speed; b_speed = sd->speed;
sd->speed = DEFAULT_WALK_SPEED ; sd->speed = DEFAULT_WALK_SPEED ;
sd->speed_rate = 100;
sd->speed_add_rate = 100;
if(sd->speed_add_rate != 100)
sd->speed_rate += sd->speed_add_rate - 100;
if(sd->aspd_add_rate != 100)
sd->aspd_rate += sd->aspd_add_rate - 100;
if(sd->sc_count){ if(sd->sc_count){
if(sd->sc_data[SC_INCREASEAGI].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1){ // ¬“x?‰Á if(sd->sc_data[SC_INCREASEAGI].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1){ // ¬“x?‰Á

View File

@ -4396,55 +4396,93 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
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)) && // Only usable during WoE
strcmp(sd->status.name,g->master)==0) { if (!agit_flag) {
for(i = 0; i < g->max_member; i++) { clif_skill_fail(sd,skillid,0,0);
if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) { map_freeblock_unlock();
clif_skill_nodamage(src,bl,skillid,skilllv,1); return 0;
skill_status_change_start(&dstsd->bl,SC_BATTLEORDERS,skilllv,0,0,0,0,0 ); }
} if(flag&1) {
if (dstsd && dstsd->status.guild_id == sd->status.guild_id) {
skill_status_change_start(&dstsd->bl,SC_BATTLEORDERS,skilllv,0,0,0,0,0 );
} }
} }
else if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
strcmp(sd->status.name,g->master)==0) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
map_foreachinarea(skill_area_sub,
src->m,src->x-15,src->y-15,src->x+15,src->y+15,0,
src,skillid,skilllv,tick, flag|BCT_ALL|1,
skill_castend_nodamage_id);
}
} }
break; break;
case GD_REGENERATION: case GD_REGENERATION:
{ {
struct guild *g = NULL; struct guild *g = NULL;
if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) && // Only usable during WoE
strcmp(sd->status.name,g->master)==0) { if (!agit_flag) {
for(i = 0; i < g->max_member; i++) { clif_skill_fail(sd,skillid,0,0);
if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) { map_freeblock_unlock();
clif_skill_nodamage(src,bl,skillid,skilllv,1); return 0;
skill_status_change_start(&dstsd->bl,SC_REGENERATION,skilllv,0,0,0,0,0 ); }
} if(flag&1) {
if (dstsd && dstsd->status.guild_id == sd->status.guild_id) {
skill_status_change_start(&dstsd->bl,SC_REGENERATION,skilllv,0,0,0,0,0 );
} }
} }
else if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
strcmp(sd->status.name,g->master)==0) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
map_foreachinarea(skill_area_sub,
src->m,src->x-15,src->y-15,src->x+15,src->y+15,0,
src,skillid,skilllv,tick, flag|BCT_ALL|1,
skill_castend_nodamage_id);
}
} }
break; break;
case GD_RESTORE: case GD_RESTORE:
{ {
struct guild *g = NULL; struct guild *g = NULL;
int hp, sp; // Only usable during WoE
if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) && if (!agit_flag) {
strcmp(sd->status.name,g->master)==0) { clif_skill_fail(sd,skillid,0,0);
for(i = 0; i < g->max_member; i++) { map_freeblock_unlock();
if ((dstsd = g->member[i].sd) != NULL && sd->bl.m == dstsd->bl.m) { return 0;
hp = dstsd->status.max_hp*0.9; }
sp = dstsd->status.sp + hp <= dstsd->status.max_sp ? hp : dstsd->status.max_sp - dstsd->status.sp; if(flag&1) {
clif_skill_nodamage(src,bl,AL_HEAL,hp,1); if (dstsd && dstsd->status.guild_id == sd->status.guild_id) {
battle_heal(NULL,bl,hp,sp,0); int hp, sp;
} hp = dstsd->status.max_hp*0.9;
sp = dstsd->status.max_sp*0.9;
sp = dstsd->status.sp + sp <= dstsd->status.max_sp ? sp : dstsd->status.max_sp - dstsd->status.sp;
clif_skill_nodamage(src,bl,AL_HEAL,hp,1);
battle_heal(NULL,bl,hp,sp,0);
} }
} }
else if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) &&
strcmp(sd->status.name,g->master)==0) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
map_foreachinarea(skill_area_sub,
src->m,src->x-15,src->y-15,src->x+15,src->y+15,0,
src,skillid,skilllv,tick, flag|BCT_ALL|1,
skill_castend_nodamage_id);
}
} }
break; break;
case GD_EMERGENCYCALL: case GD_EMERGENCYCALL:
{ {
struct guild *g = NULL; struct guild *g = NULL;
// Only usable during WoE
if (!agit_flag) {
clif_skill_fail(sd,skillid,0,0);
map_freeblock_unlock();
return 0;
}
// i don't know if it actually summons in a circle, but oh well. ;P // 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 dx[9]={-1, 1, 0, 0,-1, 1,-1, 1, 0};
int dy[9]={-2,-2,-2, 0, 0, 0, 2, 2, 2}; int dy[9]={ 0, 0, 1,-1, 1,-1,-1, 1, 0};
int j = 0; int c, j = 0;
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) { strcmp(sd->status.name,g->master)==0) {
for(i = 0; i < g->max_member; i++, j++) { for(i = 0; i < g->max_member; i++, j++) {
@ -4452,6 +4490,8 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && if ((dstsd = g->member[i].sd) != NULL && sd != dstsd &&
!map[sd->bl.m].flag.nowarpto && !map[dstsd->bl.m].flag.nowarp) { !map[sd->bl.m].flag.nowarpto && !map[dstsd->bl.m].flag.nowarp) {
clif_skill_nodamage(src,bl,skillid,skilllv,1); clif_skill_nodamage(src,bl,skillid,skilllv,1);
if ((c=read_gat(sd->bl.m,sd->bl.x+dx[j],sd->bl.y+dy[j]))==1 || c==5)
dx[j] = dy[j] = 0;
pc_setpos(dstsd, sd->mapname, sd->bl.x+dx[j], sd->bl.y+dy[j], 2); pc_setpos(dstsd, sd->mapname, sd->bl.x+dx[j], sd->bl.y+dy[j], 2);
} }
} }