From b77170410fbc46495d9d150a501b4387e410693a Mon Sep 17 00:00:00 2001 From: skotlex Date: Fri, 10 Nov 2006 19:20:59 +0000 Subject: - Deluge/Violent Gale/Volcano tiles will now fail to be placed on cells that are already ocuppied by anything else. - status_is_immune will now return 0 or the amount of immunity of the target. In which cases it returns 100 for WoH and the GTB bonus when they have passed the gtb_sc_immunity setting. This enables targetted spells to not "fail silently" unless GTB's magic reduction is 100. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9194 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/skill.c | 12 +++++++++++- src/map/status.c | 7 ++++--- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/map/skill.c b/src/map/skill.c index 03ed2f235..e11fc54f0 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2639,7 +2639,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int if (status_isdead(bl)) return 1; - if (skillid && skill_get_type(skillid) == BF_MAGIC && status_isimmune(bl)) + if (skillid && skill_get_type(skillid) == BF_MAGIC && status_isimmune(bl) == 100) { //GTB makes all targetted magic fail silently. if (sd) clif_skill_fail(sd,skillid,0,0); return 1; @@ -9323,6 +9323,15 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) // Suiton/Kaensin CAN super-impose on each another. // case NJ_SUITON: // case NJ_KAENSIN: +// The official implementation makes them fail to appear when casted on top of ANYTHING +// but I wonder if they didn't actually meant to fail when casted on top of each other? +// hence, I leave the alternate implementation here, commented. [Skotlex] + if (unit->range <= 0) + { + (*alive) = 0; + return 1; + } +/* switch (unit->group->skill_id) { //These cannot override each other. case SA_VOLCANO: @@ -9333,6 +9342,7 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) (*alive) = 0; return 1; } +*/ break; case PF_FOGWALL: switch(unit->group->skill_id) diff --git a/src/map/status.c b/src/map/status.c index e74e7a5a5..f339e3479 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4168,10 +4168,11 @@ int status_isimmune(struct block_list *bl) { struct status_change *sc =status_get_sc(bl); if (sc && sc->count && sc->data[SC_HERMODE].timer != -1) - return 1; + return 100; + if (bl->type == BL_PC && - ((TBL_PC*)bl)->special_state.no_magic_damage) - return ((TBL_PC*)bl)->special_state.no_magic_damage > battle_config.gtb_sc_immunity; + ((TBL_PC*)bl)->special_state.no_magic_damage > battle_config.gtb_sc_immunity) + return ((TBL_PC*)bl)->special_state.no_magic_damage; return 0; } -- cgit v1.2.3-60-g2f50