diff options
author | rud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-06-04 17:11:22 +0000 |
---|---|---|
committer | rud0lp20 <rud0lp20@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-06-04 17:11:22 +0000 |
commit | 9479293df183202eec534ec3c5fd4ecba94fae41 (patch) | |
tree | 35c13c523fc208f7c2b3df5f7392099b60bf374e | |
parent | 47408b74369ba8f49f7b1d2caa453557b66ede0f (diff) | |
download | hercules-9479293df183202eec534ec3c5fd4ecba94fae41.tar.gz hercules-9479293df183202eec534ec3c5fd4ecba94fae41.tar.bz2 hercules-9479293df183202eec534ec3c5fd4ecba94fae41.tar.xz hercules-9479293df183202eec534ec3c5fd4ecba94fae41.zip |
Fixed bugreport:5919 RK_ENCHANTBLADE bonus damage at any level should now work properly.
Fixed bugreport:5914 SC_MANHOLE duration at level 2 is now 10 seconds.
Fixed bugreport:5928 SR_CURSEDCIRCLE should now work properly(castable with other skills & should end after the execution of a skill)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16233 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | db/pre-re/skill_cast_db.txt | 2 | ||||
-rw-r--r-- | db/re/skill_cast_db.txt | 2 | ||||
-rw-r--r-- | src/map/battle.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 20 | ||||
-rw-r--r-- | src/map/status.c | 6 | ||||
-rw-r--r-- | src/map/unit.c | 12 |
6 files changed, 25 insertions, 19 deletions
diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index d3182678b..eaf2bf727 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1361,7 +1361,7 @@ //-- SC_STRIPACCESORY 2298,1000,1000,0,60000:70000:80000:90000:100000,0,0 //-- SC_MANHOLE -2299,1000,2000,0,5000:1000:15000,5000:1000:15000,0 +2299,1000,2000,0,5000:10000:15000,5000:10000:15000,0 //-- SC_DIMENSIONDOOR 2300,1000,2000,0,4000:8000:12000,0,0 //-- SC_CHAOSPANIC diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 203e40b79..5bead601b 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1362,7 +1362,7 @@ //-- SC_STRIPACCESORY 2298,1000,1000,0,60000:70000:80000:90000:100000,0,0,0 //-- SC_MANHOLE -2299,1000,2000,0,5000:1000:15000,5000:1000:15000,0,0 +2299,1000,2000,0,5000:10000:15000,5000:10000:15000,0,0 //-- SC_DIMENSIONDOOR 2300,1000,2000,0,4000:8000:12000,0,0,0 //-- SC_CHAOSPANIC diff --git a/src/map/battle.c b/src/map/battle.c index 044ab59e5..16c744491 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3078,7 +3078,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo **/ if( sc->data[SC_ENCHANTBLADE] && sd && ( (flag.rh && sd->weapontype1) || (flag.lh && sd->weapontype2) ) ) { //[( ( Skill Lv x 20 ) + 100 ) x ( casterBaseLevel / 150 )] + casterInt - wd.damage += ( ( ( sc->data[SC_ENCHANTBLADE]->val1 * 20 ) + 100 ) * ( status_get_lv(src) / 150 ) ) + status_get_int(src); + ATK_ADD( ( sc->data[SC_ENCHANTBLADE]->val1*20+100 ) * status_get_lv(src) / 150 + status_get_int(src) ); } } } diff --git a/src/map/skill.c b/src/map/skill.c index 467b07fa3..1274feae7 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4501,6 +4501,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int return 1; } + if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) { //Should only remove after the skill has been casted. + sc->data[SC_CURSEDCIRCLE_ATKER]->val3 = 1; + status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + } + map_freeblock_unlock(); if( sd && !(flag&1) ) @@ -8585,6 +8590,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in return 1; } + if(skillid != SR_CURSEDCIRCLE){ + struct status_change *sc = status_get_sc(src); + if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) { //Should only remove after the skill had been casted. + sc->data[SC_CURSEDCIRCLE_ATKER]->val3 = 1; + status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + } + } + if (dstmd) { //Mob skill event for no damage skills (damage ones are handled in battle_calc_damage) [Skotlex] mob_log_damage(dstmd, src, 0); //Log interaction (counts as 'attacker' for the exp bonus) mobskill_event(dstmd, src, tick, MSC_SKILLUSED|(skillid<<16)); @@ -9708,6 +9721,11 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk return 1; } + if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) { //Should only remove after the skill has been casted. + sc->data[SC_CURSEDCIRCLE_ATKER]->val3 = 1; + status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + } + if( sd ) {// ensure that the skill last-cast tick is recorded sd->canskill_tick = gettick(); @@ -11863,7 +11881,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh case MO_EXTREMITYFIST: // if(sc && sc->data[SC_EXTREMITYFIST]) //To disable Asura during the 5 min skill block uncomment this... // return 0; - if( sc && sc->data[SC_BLADESTOP] ) + if( sc && (sc->data[SC_BLADESTOP] || sc->data[SC_CURSEDCIRCLE_ATKER]) ) break; if( sc && sc->data[SC_COMBO] ) { diff --git a/src/map/status.c b/src/map/status.c index ba6e3631f..8b10b2711 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -627,7 +627,7 @@ void initChangeTables(void) { add_sc( SR_DRAGONCOMBO , SC_STUN ); add_sc( SR_EARTHSHAKER , SC_STUN ); set_sc( SR_CRESCENTELBOW , SC_CRESCENTELBOW , SI_CRESCENTELBOW , SCB_NONE ); - set_sc( SR_CURSEDCIRCLE , SC_CURSEDCIRCLE_TARGET, SI_CURSEDCIRCLE_TARGET , SCB_NONE ); + set_sc_with_vfx( SR_CURSEDCIRCLE , SC_CURSEDCIRCLE_TARGET, SI_CURSEDCIRCLE_TARGET , SCB_NONE ); set_sc( SR_LIGHTNINGWALK , SC_LIGHTNINGWALK , SI_LIGHTNINGWALK , SCB_NONE ); set_sc( SR_RAISINGDRAGON , SC_RAISINGDRAGON , SI_RAISINGDRAGON , SCB_REGEN|SCB_MAXHP|SCB_MAXSP/*|SCB_ASPD*/ ); set_sc( SR_GENTLETOUCH_ENERGYGAIN, SC_GT_ENERGYGAIN , SI_GENTLETOUCH_ENERGYGAIN, SCB_NONE ); @@ -8911,8 +8911,8 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const } break; case SC_CURSEDCIRCLE_ATKER: - if( sce->val3 ) - map_foreachinrange(status_change_timer_sub, bl, skill_get_splash(SR_CURSEDCIRCLE, sce->val1),BL_CHAR, bl, sce, SC_CURSEDCIRCLE_TARGET, gettick()); + if( sce->val3 ) // used the default area size cause there is a chance the caster could knock back and can't clear the target. + map_foreachinrange(status_change_timer_sub, bl, battle_config.area_size,BL_CHAR, bl, sce, SC_CURSEDCIRCLE_TARGET, gettick()); break; case SC_RAISINGDRAGON: if( sd && sce->val2 && !pc_isdead(sd) ) { diff --git a/src/map/unit.c b/src/map/unit.c index 47f9b5a39..1f8cbf4e1 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1274,12 +1274,6 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if (!src->prev) return 0; } else if( sc->data[SC_CAMOUFLAGE] && skill_num != RA_CAMOUFLAGE ) status_change_end(src,SC_CAMOUFLAGE,INVALID_TIMER); - - if( sc->data[SC_CURSEDCIRCLE_ATKER] ) { - sc->data[SC_CURSEDCIRCLE_ATKER]->val3 = 1; - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); - } - } @@ -1402,12 +1396,6 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh if (!src->prev) return 0; } else if( sc->data[SC_CAMOUFLAGE] && skill_num != RA_CAMOUFLAGE ) status_change_end(src,SC_CAMOUFLAGE,INVALID_TIMER); - - if( sc->data[SC_CURSEDCIRCLE_ATKER] ) { - sc->data[SC_CURSEDCIRCLE_ATKER]->val3 = 1; - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); - } - } if( casttime > 0 ) { |