From 7d4cef5d03815911547efb37dce1c5ee9d5b05fa Mon Sep 17 00:00:00 2001 From: zephyrus Date: Thu, 21 Aug 2008 20:38:32 +0000 Subject: - Big update to Basilica, implementing official behavior. * Basilica caster cannot walk. * On Basilica area, only caster can use Basilica again to stop it. * On Basilica no one can use skills. (Previous bug on eA because you can use support skills on it, also caster). * Only Pressure can bypass Basilica protection. * Any enemy of the caster bounce 2 cells back from basilica, except Boss type. (Bugreport 2099). * Any monster can target you on basilica and try to attack you, also with skills, but damage is reduced to 0, except Boss. Notes: - Basilica Cell stuff is not used anymore... is it required? - Still need to add a check previous to cast basilica because if there are mobs, items, npcs, walls, skills around the caster (7x7 i think) the skill should fail. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13106 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/clif.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/map/clif.c') diff --git a/src/map/clif.c b/src/map/clif.c index a84622d54..f4ed8d1df 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8369,10 +8369,13 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, case 0x00: // once attack case 0x07: // continuous attack - if (pc_cant_act(sd) || sd->sc.option&OPTION_HIDE) + if( pc_cant_act(sd) || sd->sc.option&OPTION_HIDE ) return; - if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER)) + if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) ) + return; + + if( sd->sc.data[SC_BASILICA] ) return; if (!battle_config.sdelay_attack_enable && pc_checkskill(sd, SA_FREECAST) <= 0) { @@ -9226,8 +9229,11 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) return; } - if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER)) + if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) ) return; + + if( sd->sc.data[SC_BASILICA] && (skillnum != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) ) + return; // On basilica only caster can use Basilica again to stop it. if(target_id<0 && -target_id == sd->bl.id) // for disguises [Valaris] target_id = sd->bl.id; @@ -9324,15 +9330,19 @@ void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, short skil if (sd->ud.skilltimer != -1) return; + if (DIFF_TICK(tick, sd->ud.canact_tick) < 0) { clif_skill_fail(sd, skillnum, 4, 0); return; } - if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER)) + if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) ) return; - + + if( sd->sc.data[SC_BASILICA] && (skillnum != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) ) + return; // On basilica only caster can use Basilica again to stop it. + if(sd->menuskill_id) { if (sd->menuskill_id == SA_TAMINGMONSTER) @@ -9402,7 +9412,7 @@ void clif_parse_UseSkillMap(int fd, struct map_session_data* sd) if(skill_num != sd->menuskill_id) return; - if (pc_cant_act(sd)) + if( pc_cant_act(sd) ) { sd->menuskill_id = sd->menuskill_val = 0; return; -- cgit v1.2.3-70-g09d2