浏览代码

Fixed bugreport:5843 WL_HELLINFERNO should now deal 2 elemental(fire ad shadow) hits and updated its damage formula.
Fixed bugreport:6068 Cloaking/Hiding skills is now working to hide it self to non boss/detector monster.
Fixed bugreport:6105 Stone Curse should now stop target to attack once activated.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16346 54d463be-8e91-2dee-dedb-b68131a5f0ec

rud0lp20 13 年之前
父节点
当前提交
fb56e5bc13
共有 3 个文件被更改,包括 16 次插入10 次删除
  1. 10 9
      src/map/battle.c
  2. 4 1
      src/map/skill.c
  3. 2 0
      src/map/status.c

+ 10 - 9
src/map/battle.c

@@ -3513,11 +3513,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case WL_HELLINFERNO:
-						if( status_get_element(target) == ELE_FIRE )
-							skillratio = 60 * skill_lv;
-						else
-							skillratio = 240 * skill_lv;
-						RE_LVL_DMOD(100);
+						skillratio = 300 * skill_lv;
+						RE_LVL_DMOD(100);	
+						// Shadow: MATK [{( Skill Level x 300 ) x ( Caster’s Base Level / 100 ) x 4/5 }] %
+						// Fire : MATK [{( Skill Level x 300 ) x ( Caster’s Base Level / 100 ) /5 }] %
+						if( mflag&ELE_DARK ){ skillratio *= 4; s_ele = ELE_DARK; }
+						skillratio /= 5;
 						break;
 					case WL_COMET: {
 						struct status_change * sc = status_get_sc(src);
@@ -3560,10 +3561,10 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case LG_SHIELDSPELL:// [(Caster’s Base Level x 4) + (Shield MDEF x 100) + (Caster’s INT x 2)] %
-					if( sd ) { 
-						skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2;
-					} else
-						skillratio += 1900;	//2000%	
+						if( sd ) { 
+							skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2;
+						} else
+							skillratio += 1900;	//2000%	
 						break;
 					case WM_METALICSOUND:
 						skillratio += 120 * skill_lv + 60 * ( sd? pc_checkskill(sd, WM_LESSON) : 10 ) - 100;

+ 4 - 1
src/map/skill.c

@@ -3803,7 +3803,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	case AB_RENOVATIO:
 	case AB_HIGHNESSHEAL:
 	case AB_DUPLELIGHT_MAGIC:
-	case WL_HELLINFERNO:
 	case WM_METALICSOUND:
 		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
 		break;
@@ -4212,6 +4211,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 		skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag);
 		}
 		break;
+	case WL_HELLINFERNO:
+		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
+		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag|ELE_DARK);
+		break;
 	case RA_WUGSTRIKE:
 	case RA_WUGBITE:
 		if( path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKNOREACH) ) {

+ 2 - 0
src/map/status.c

@@ -1727,6 +1727,7 @@ int status_check_visibility(struct block_list *src, struct block_list *target)
 	{	//Check for chase-walk/hiding/cloaking opponents.
 	case BL_PC:
 		if ( tsc->data[SC_CLOAKINGEXCEED] && !(status->mode&MD_BOSS) )
+			return 0;
 		if( (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC__INVISIBILITY] || tsc->data[SC_CAMOUFLAGE]) && !(status->mode&MD_BOSS) &&
 			( ((TBL_PC*)target)->special_state.perfect_hiding || !(status->mode&MD_DETECTOR) ) )
 			return 0;
@@ -9224,6 +9225,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 		if(sc->opt1 == OPT1_STONEWAIT && sce->val3) {
 			sce->val4 = 0;
 			unit_stop_walking(bl,1);
+			unit_stop_attack(bl);
 			sc->opt1 = OPT1_STONE;
 			clif_changeoption(bl);
 			sc_timer_next(1000+tick,status_change_timer, bl->id, data );