diff options
author | Inkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2009-05-28 11:00:22 +0000 |
---|---|---|
committer | Inkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2009-05-28 11:00:22 +0000 |
commit | 8602a7a5b540436411328c3b42bbe465defa40b7 (patch) | |
tree | 194a5fb1ce272e352163ff84e29f31694731a5e7 | |
parent | 083e1e7f223ca36cdda5bf02940dcbb59a18c466 (diff) | |
download | hercules-8602a7a5b540436411328c3b42bbe465defa40b7.tar.gz hercules-8602a7a5b540436411328c3b42bbe465defa40b7.tar.bz2 hercules-8602a7a5b540436411328c3b42bbe465defa40b7.tar.xz hercules-8602a7a5b540436411328c3b42bbe465defa40b7.zip |
* Fixed some issues of skill condition check.
- HP is now checked at the end of cast.
- Lv 6-10 StoneCurse doesn't consume gems.
- Tarotcard's after-cast delay will still be applied if it fails.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13816 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog-Trunk.txt | 5 | ||||
-rw-r--r-- | src/map/skill.c | 33 |
2 files changed, 23 insertions, 15 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 3047b08cc..d0ea50655 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,11 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +09/05/28 + * Fixed some skill condition issues. [Inkfish] + - HP is now checked at the end of cast. + - Lv 6-10 StoneCurse doesn't consume gems. + - Tarotcard's aftercast delay will still be applied if it fails. 09/05/26 * skill_check_condition clean up (bugreport:2770, bugreport:2957, bugreport:3010) [Inkfish] - Weapon, SP, HP and state are checked at the beginning of cast. diff --git a/src/map/skill.c b/src/map/skill.c index 20ec4292b..34c52a716 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4195,7 +4195,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in else if(sd) { clif_skill_fail(sd,skillid,0,0); // Level 6-10 doesn't consume a red gem if it fails [celest] - if (skilllv > 5) break; + if (skilllv > 5) + { // not to consume items + map_freeblock_unlock(); + return 0; + } } } break; @@ -5225,7 +5229,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case CG_TAROTCARD: { int eff, count = -1; - if( (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) + if( rand() % 100 > skilllv * 8 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) { if( sd ) clif_skill_fail(sd,skillid,0,0); @@ -5233,6 +5237,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in map_freeblock_unlock(); return 0; } + status_zap(src,0,skill_db[skill_get_index(skillid)].sp[skilllv]); // consume sp only if succeeded [Inkfish] do { eff = rand() % 14; clif_specialeffect(bl, 523 + eff, AREA); @@ -8526,11 +8531,6 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh return 0; } - if( require.hp > 0 && status->hp <= (unsigned int)require.hp) { - clif_skill_fail(sd,skill,2,0); - return 0; - } - if( require.sp > 0 && status->sp < (unsigned int)require.sp) { clif_skill_fail(sd,skill,1,0); return 0; @@ -8552,6 +8552,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh int skill_check_condition_castend(struct map_session_data* sd, short skill, short lv) { struct skill_condition require; + struct status_data *status; int i; int index[MAX_SKILL_ITEM_REQUIRE]; @@ -8629,18 +8630,17 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor } break; } - case CG_TAROTCARD: - if( rand() % 100 > lv * 8 ) - { - if( sd ) - clif_skill_fail(sd,skill,0,0); - return 0; - } - break; } + status = &sd->battle_status; + require = skill_get_requirement(sd,skill,lv); + if( require.hp > 0 && status->hp <= (unsigned int)require.hp) { + clif_skill_fail(sd,skill,2,0); + return 0; + } + if( require.ammo ) { //Skill requires stuff equipped in the arrow slot. if((i=sd->equip_index[EQI_AMMO]) < 0 || !sd->inventory_data[i] || @@ -8822,6 +8822,9 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short // Check for cost reductions due to skills & SCs switch(skill) { + case CG_TAROTCARD: + req.sp = 0; // sp will be consumed in skill_cast_nodamage_id [Inkfish] + break; case MC_MAMMONITE: if(pc_checkskill(sd,BS_UNFAIRLYTRICK)>0) req.zeny -= req.zeny*10/100; |