Browse Source

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://svn.code.sf.net/p/rathena/svn/trunk@16233 54d463be-8e91-2dee-dedb-b68131a5f0ec

rud0lp20 13 years ago
parent
commit
1227572f0e
6 changed files with 25 additions and 19 deletions
  1. 1 1
      db/pre-re/skill_cast_db.txt
  2. 1 1
      db/re/skill_cast_db.txt
  3. 1 1
      src/map/battle.c
  4. 19 1
      src/map/skill.c
  5. 3 3
      src/map/status.c
  6. 0 12
      src/map/unit.c

+ 1 - 1
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

+ 1 - 1
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

+ 1 - 1
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) );
 			}
 		}
 	}

+ 19 - 1
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] )
 			{

+ 3 - 3
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) ) {

+ 0 - 12
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 )
 	{