From 61f8a2a0670998c502684bb8ecf88e0fb4d256ab Mon Sep 17 00:00:00 2001 From: ultramage Date: Sun, 8 Mar 2009 12:32:45 +0000 Subject: * Fixed a couple bugs with marionette control - Reduces caster max hp by 1000. - Job and Equipment bonuses counts toward the 99 limit. - Fixed stat overflow on baby targets with stats over 80 (bugreport:2232). - Fixed clowns being able to cast it on another bard/clown (same for gypsy/dancer) (bugreport:166). - Caster is no longer blocked from using items. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13572 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/skill.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'src/map/skill.c') diff --git a/src/map/skill.c b/src/map/skill.c index 54f8495f8..78d29cb40 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3267,22 +3267,35 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case CG_MARIONETTE: { - struct status_change *sc= status_get_sc(src); - enum sc_type type2 = SC_MARIONETTE2; + struct status_change* sc = status_get_sc(src); - if(sc && tsc){ - if (!sc->data[type] && !tsc->data[type2]) { - sc_start(src,type,100,bl->id,skill_get_time(skillid,skilllv)); - sc_start(bl,type2,100,src->id,skill_get_time(skillid,skilllv)); + if( sd && dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_BARDDANCER && dstsd->status.sex == sd->status.sex ) + {// Cannot cast on another bard/dancer-type class of the same gender as caster + clif_skill_fail(sd,skillid,0,0); + map_freeblock_unlock(); + return 1; + } + + if( sc && tsc ) + { + if( !sc->data[SC_MARIONETTE] && !tsc->data[SC_MARIONETTE2] ) + { + sc_start(src,SC_MARIONETTE,100,bl->id,skill_get_time(skillid,skilllv)); + sc_start(bl,SC_MARIONETTE2,100,src->id,skill_get_time(skillid,skilllv)); clif_skill_nodamage(src,bl,skillid,skilllv,1); } - else if (sc->data[type] && tsc->data[type2] && - sc->data[type]->val1 == bl->id && tsc->data[type2]->val1 == src->id) { - status_change_end(src, type, -1); - status_change_end(bl, type2, -1); + else + if( sc->data[SC_MARIONETTE ] && sc->data[SC_MARIONETTE ]->val1 == bl->id && + tsc->data[SC_MARIONETTE2] && tsc->data[SC_MARIONETTE2]->val1 == src->id ) + { + status_change_end(src, SC_MARIONETTE, -1); + status_change_end(bl, SC_MARIONETTE2, -1); } - else { - if (sd) clif_skill_fail(sd,skillid,0,0); + else + { + if( sd ) + clif_skill_fail(sd,skillid,0,0); + map_freeblock_unlock(); return 1; } -- cgit v1.2.3-70-g09d2