Selaa lähdekoodia

Follow up to 19f2bc5
* Reverted parts of the Earth Quake cleanup.
* Added the missing 100% damage increase for levels 5 and higher.
* Corrected the hit rate to be 2x not 1.2x.
* Commented out the unofficial ATK2 damage increase.

aleos89 9 vuotta sitten
vanhempi
commit
e39293f129
7 muutettua tiedostoa jossa 33 lisäystä ja 26 poistoa
  1. 1 1
      db/pre-re/skill_db.txt
  2. 0 1
      db/pre-re/skill_unit_db.txt
  3. 1 1
      db/re/skill_db.txt
  4. 0 1
      db/re/skill_unit_db.txt
  5. 16 11
      src/map/battle.c
  6. 14 10
      src/map/skill.c
  7. 1 1
      src/map/skill.h

+ 1 - 1
db/pre-re/skill_db.txt

@@ -778,7 +778,7 @@
 
 //****
 // Additional NPC Skills (Episode 11.3)
-653,0,8,4,0,0x26,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x1,	NPC_EARTHQUAKE,Earthquake
+653,0,8,4,0,0x6,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x0,	NPC_EARTHQUAKE,Earthquake
 654,6,6,1,3,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_FIREBREATH,Fire Breath
 655,6,6,1,1,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_ICEBREATH,Ice Breath
 656,6,6,1,4,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_THUNDERBREATH,Thunder Breath

+ 0 - 1
db/pre-re/skill_unit_db.txt

@@ -105,7 +105,6 @@
 538,0xbb,    ,  1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010	//NJ_SUITON
 539,0x86,    ,  3, 0,1000,enemy, 0x010	//NJ_HYOUSYOURAKU
 541,0x86,    ,  2:2:3:3:4, 0,1000,enemy, 0x010	//NJ_RAIGEKISAI
-653,0xc6,    ,  0, 5:7:9:11:13:5:7:9:11:13, 300,enemy, 0x010	//NPC_EARTHQUAKE
 670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 //706,0xfd,    ,  0, 0,1000,all, 0x000	//NPC_VENOMFOG

+ 1 - 1
db/re/skill_db.txt

@@ -778,7 +778,7 @@
 
 //****
 // Additional NPC Skills (Episode 11.3)
-653,0,8,4,0,0x26,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x1,	NPC_EARTHQUAKE,Earthquake
+653,0,8,4,0,0x6,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x0,	NPC_EARTHQUAKE,Earthquake
 654,6,6,1,3,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_FIREBREATH,Fire Breath
 655,6,6,1,1,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_ICEBREATH,Ice Breath
 656,6,6,1,4,0,3,10,1,no,0,0x2,14,weapon,0,0x0,	NPC_THUNDERBREATH,Thunder Breath

+ 0 - 1
db/re/skill_unit_db.txt

@@ -106,7 +106,6 @@
 538,0xbb,    ,  1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010	//NJ_SUITON
 539,0x86,    ,  3, 0,1000,enemy, 0x010	//NJ_HYOUSYOURAKU
 541,0x86,    ,  1:1:2:2:3, 0,1000,enemy, 0x010	//NJ_RAIGEKISAI
-653,0xc6,    ,  0, 5:7:9:11:13:5:7:9:11:13, 300,enemy, 0x010	//NPC_EARTHQUAKE
 670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 //706,0xfd,    ,  0, 0,1000,all, 0x000	//NPC_VENOMFOG

+ 16 - 11
src/map/battle.c

@@ -2526,13 +2526,15 @@ static bool is_attack_hitting(struct Damage wd, struct block_list *src, struct b
 			case NPC_UNDEADATTACK:
 			case NPC_TELEKINESISATTACK:
 			case NPC_BLEEDING:
+				hitrate += hitrate * 20 / 100;
+				break;
 			case NPC_EARTHQUAKE:
 			case NPC_FIREBREATH:
 			case NPC_ICEBREATH:
 			case NPC_THUNDERBREATH:
 			case NPC_ACIDBREATH:
 			case NPC_DARKNESSBREATH:
-				hitrate += hitrate * 20 / 100;
+				hitrate *= 2;
 				break;
 			case KN_PIERCE:
 			case ML_PIERCE:
@@ -3498,9 +3500,6 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 		case NPC_PULSESTRIKE:
 			skillratio += 100 * (skill_lv - 1);
 			break;
-		case NPC_EARTHQUAKE:
-			skillratio += 100 + 100 * skill_lv + 100 * (skill_lv / 2);
-			break;
 		case RG_BACKSTAP:
 			if(sd && sd->status.weapon == W_BOW && battle_config.backstab_bow_penalty)
 				skillratio += (200 + 40 * skill_lv) / 2;
@@ -5690,12 +5689,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 			case PF_SOULBURN:
 				ad.damage = tstatus->sp * 2;
 				break;
-			case NPC_EARTHQUAKE: {
-					struct Damage wd = battle_calc_weapon_attack(src, target, skill_id, skill_lv, ad.miscflag);
-
-					ad.damage = wd.damage;
-				}
-				break;
 			case AB_RENOVATIO:
 				ad.damage = status_get_lv(src) * 10 + sstatus->int_;
 				break;
@@ -5855,6 +5848,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 					case NPC_ENERGYDRAIN:
 						skillratio += 100 * skill_lv;
 						break;
+					case NPC_EARTHQUAKE:
+						skillratio += 100 + 100 * skill_lv + 100 * (skill_lv / 2) + (skill_lv > 4) ? 100 : 0;
+						break;
 #ifdef RENEWAL
 					case WZ_HEAVENDRIVE:
 					case WZ_METEOR:
@@ -6171,7 +6167,16 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 				ad.damage = ad.damage * (100-mdef)/100 - mdef2;
 #endif
 		}
-
+#if 0 // Doesn't seem to be official
+		if (skill_id == NPC_EARTHQUAKE) {
+			//Adds atk2 to the damage, should be influenced by number of hits and skill-ratio, but not mdef reductions. [Skotlex]
+			//Also divide the extra bonuses from atk2 based on the number in range [Kevin]
+			if(mflag>0)
+				ad.damage+= (sstatus->rhw.atk2*skillratio/100)/mflag;
+			else
+				ShowError("Zero range by %d:%s, divide per 0 avoided!\n", skill_id, skill_get_name(skill_id));
+		}
+#endif
 		if(ad.damage<1)
 			ad.damage=1;
 		else if(sc) { //only applies when hit

+ 14 - 10
src/map/skill.c

@@ -3959,6 +3959,14 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 				case BS_HAMMERFALL:
 					sc_start(src, target, status_skill2sc(skl->skill_id), skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv));
 					break;
+				case NPC_EARTHQUAKE:
+					if( skl->type > 1 )
+						skill_addtimerskill(src,tick+250,src->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag);
+					skill_area_temp[0] = map_foreachinrange(skill_area_sub, src, skill_get_splash(skl->skill_id, skl->skill_lv), BL_CHAR, src, skl->skill_id, skl->skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
+					skill_area_temp[1] = src->id;
+					skill_area_temp[2] = 0;
+					map_foreachinrange(skill_area_sub, src, skill_get_splash(skl->skill_id, skl->skill_lv), splash_target(src), src, skl->skill_id, skl->skill_lv, tick, skl->flag, skill_castend_damage_id);
+					break;
 				case WZ_WATERBALL:
 				{
 					//Get the next waterball cell to consume
@@ -4658,6 +4666,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case NJ_HUUMA:
 	case ASC_METEORASSAULT:
 	case GS_SPREADATTACK:
+	case NPC_EARTHQUAKE:
 	case NPC_PULSESTRIKE:
 	case NPC_HELLJUDGEMENT:
 	case NPC_VAMPIRE_GIFT:
@@ -4741,6 +4750,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				case MH_XENO_SLASHER:
 					clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
 					break;
+				case NPC_EARTHQUAKE: //FIXME: Isn't EarthQuake a ground skill after all?
+					skill_addtimerskill(src,tick+250,src->id,0,0,skill_id,skill_lv,2,flag|BCT_ENEMY|SD_SPLASH|1);
+					break;
 				case WM_REVERBERATION_MELEE:
 				case WM_REVERBERATION_MAGIC:
 					skill_area_temp[1] = 0;
@@ -4765,7 +4777,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				skill_area_temp[0] = map_foreachinrange(skill_area_sub, bl, (skill_id == AS_SPLASHER)?1:skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
 
 			// recursive invocation of skill_castend_damage_id() with flag|1
-			if (battle_config.skill_wall_check)
+			if (battle_config.skill_wall_check && skill_id != NPC_EARTHQUAKE)
 				map_foreachinshootrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
 			else
 				map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
@@ -6841,6 +6853,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
 	case SR_EARTHSHAKER:
 	case NC_INFRAREDSCAN:
+	case NPC_EARTHQUAKE:
 	case NPC_VAMPIRE_GIFT:
 	case NPC_HELLJUDGEMENT:
 	case NPC_PULSESTRIKE:
@@ -11588,7 +11601,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 #ifdef RENEWAL
 	case NJ_HUUMA:
 #endif
-	case NPC_EARTHQUAKE:
 	case NPC_EVILLAND:
 	case RA_ELECTRICSHOCKER:
 	case RA_CLUSTERBOMB:
@@ -12759,9 +12771,6 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
 
 			break;
 		}
-	case NPC_EARTHQUAKE:
-		clif_skill_damage(src, src, gettick(), status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SKILL);
-		break;
 	case GC_POISONSMOKE:
 		if( !(sc && sc->data[SC_POISONINGWEAPON]) )
 			return NULL;
@@ -13523,11 +13532,6 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
 			skill_delunit(unit);
 			break;
 
-		case UNT_EARTHQUAKE:
-			skill_attack(BF_MAGIC, ss, &unit->bl, bl, sg->skill_id, sg->skill_lv, tick, 
-				map_foreachinrange(skill_area_sub, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), BL_CHAR, &unit->bl, sg->skill_id, sg->skill_lv, tick, BCT_ENEMY, skill_area_sub_count));
-			break;
-
 		case UNT_SKIDTRAP: {
 				//Knockback away from position of user during placement [Playtester]
 				skill_blown(&unit->bl,bl,skill_get_blewcount(sg->skill_id,sg->skill_lv),

+ 1 - 1
src/map/skill.h

@@ -1965,7 +1965,7 @@ enum s_skill_unit_id {
 	UNT_DEATHWAVE, //TODO
 	UNT_WATERATTACK, //TODO
 	UNT_WINDATTACK, //TODO
-	UNT_EARTHQUAKE,
+	UNT_EARTHQUAKE, //TODO
 	UNT_EVILLAND,
 	UNT_DARK_RUNNER, //TODO
 	UNT_DARK_TRANSFER, //TODO