From 890930b7296683744525d43f8a914f20704c461a Mon Sep 17 00:00:00 2001 From: L0ne_W0lf Date: Tue, 17 Aug 2010 00:48:37 +0000 Subject: * Attempting to tackle, and fix some simple errors in skills. - Stormgust hit counter no longer resets under new casts of stormgust. - RG_STEALCOIN will now cause the monster to aggro player on success. (bugreport:3547) - SL_WIZARD will now consume one crystal fragement per reflected hit. (bugreport:3603) - WZ_FROSTNOVA will now ignore targets in area that are already frozen. (bugreport:3980) - SL_KAAHI will no longer uses SP if player has full health already. (bugreport:3918) - CG_TAROTCARD "The Lovers" will heal source player instead of target. (bugreport:4171) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14378 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 2 +- src/map/skill.c | 29 ++++++++++++----------------- src/map/status.c | 2 +- 3 files changed, 14 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 3ed1aa33c..0f800b759 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3052,7 +3052,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t return (damage_lv)skill_attack(BF_MAGIC,src,src,target,NPC_MAGICALATTACK,sc->data[SC_MAGICALATTACK]->val1,tick,0); } - if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == -1) + if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == -1 && tstatus->hp < tstatus->max_hp) tsc->data[SC_KAAHI]->val4 = add_timer(tick + skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1), kaahi_heal_timer, target->id, SC_KAAHI); //Activate heal. wd = battle_calc_attack(BF_WEAPON, src, target, 0, 0, flag); diff --git a/src/map/skill.c b/src/map/skill.c index 5fd1fe54d..e214a7f55 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1677,15 +1677,11 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds //Spirit of Wizard blocks Kaite's reflection if( type == 2 && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD ) - { //It should only consume once per skill casted. Val3 is the skill id and val4 is the ID of the damage src. + { //Consume one Fragment per hit of the casted skill. Val3 is the skill id and val4 is the ID of the damage src. //This should account for ground spells (and single target spells will be completed on castend_id) [Skotlex] - if (tsd && !(sc->data[SC_SPIRIT]->val3 == skillid && sc->data[SC_SPIRIT]->val4 == dsrc->id) ) - { //Check if you have stone to consume. - type = pc_search_inventory (tsd, 7321); - if (type >= 0) - pc_delitem(tsd, type, 1, 0); - } else - type = 0; + type = pc_search_inventory (tsd, 7321); + if (type >= 0) + pc_delitem(tsd, type, 1, 0); if (type >= 0) { dmg.damage = dmg.damage2 = 0; @@ -4258,7 +4254,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case RG_STEALCOIN: if(sd) { if(pc_steal_coin(sd,bl)) + { + dstmd->state.provoke_flag = src->id; + mob_target(dstmd, src, skill_get_range2(src,skillid,skilllv)); clif_skill_nodamage(src,bl,skillid,skilllv,1); + + } else clif_skill_fail(sd,skillid,0,0); } @@ -5373,7 +5374,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in sc_start(bl,SC_INCATKRATE,100,-50,skill_get_time2(skillid,skilllv)); break; case 5: // 2000HP heal, random teleported - status_heal(bl, 2000, 0, 0); + status_heal(src, 2000, 0, 0); if( !map_flag_vs(bl->m) ) unit_warp(bl, -1,-1,-1, 3); break; @@ -7539,15 +7540,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns ++count < SKILLUNITTIMER_INTERVAL/sg->interval && !status_isdead(bl) ); } break; - case WZ_STORMGUST: - if (tsc) - { //Reset hit counter when under new storm gust. - if (tsc->sg_id != sg->group_id) { - tsc->sg_id = sg->group_id; - tsc->sg_counter = 0; - } + case WZ_STORMGUST: //SG counter does not reset per stormgust. IE: One hit from a SG and two hits from another will freeze you. + if (tsc) tsc->sg_counter++; //SG hit counter. - } if (skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0) <= 0 && tsc) tsc->sg_counter=0; //Attack absorbed. break; diff --git a/src/map/status.c b/src/map/status.c index aa639337e..f1315f23f 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1175,7 +1175,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int { if(!skill_num && !(status->mode&MD_BOSS) && tsc->data[SC_TRICKDEAD]) return 0; - if((skill_num == WZ_STORMGUST || skill_num == NJ_HYOUSYOURAKU) + if((skill_num == WZ_STORMGUST || skill_num == WZ_FROSTNOVA || skill_num == NJ_HYOUSYOURAKU) && tsc->data[SC_FREEZE]) return 0; if(skill_num == PR_LEXAETERNA && (tsc->data[SC_FREEZE] || (tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE))) -- cgit v1.2.3-70-g09d2