Sfoglia il codice sorgente

Small corrections of spirit handler skills and data (#8932)

* Corrected Spirit handler Bonus Stats per job level.
* Added NoDispell flag to SC_Tunaparty.
* Moved the buff that increases catnip meteor damage when using the skill SH_COLORS_OF_HYUN_ROK to be added to skillatk item bonus according to test on official server.
* Corrected clif_skill_nodamage of the skill SH_KI_SUL_WATER_SPRAYING.
* Corrected the skill SH_COLORS_OF_HYUN_ROK level 7 that should also remove the buff that increases catnip meteor damage.
* Corrected UNT_HYUN_ROKS_BREEZE that should display the damage in the caster chat and the skill should use SD_ANIMATION flag (SD_ANIMATION with div < 2 send DMG_SPLASH to clif_skill_damage on unit without status change which prevent to display an animation on the player).
* Corrected SH_TEMPORARY_COMMUNION clif_skill_fails
- Corrected  SC Temporary_Communion that shouldn't be dispellable
- Corrected  SC Blessing_of_M_C_Debuff that shouldn't be dispellable
- Confirmed that SH_KI_SUL_RAMPAGE does not require party check
- Removed the logic of SH_KI_SUL_RAMPAGE using skill_get_max

Thanks to @OptimusM for the datas !

Co-authored-by: munkrej <schmunk@posteo.de>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Atemo 3 mesi fa
parent
commit
5386541e1b
6 ha cambiato i file con 45 aggiunte e 24 eliminazioni
  1. 6 4
      db/re/job_stats.yml
  2. 13 4
      db/re/status.yml
  3. 5 3
      src/map/battle.cpp
  4. 2 2
      src/map/clif.hpp
  5. 14 9
      src/map/skill.cpp
  6. 5 2
      src/map/status.cpp

+ 6 - 4
db/re/job_stats.yml

@@ -7787,6 +7787,7 @@ Body:
     BonusStats:
       - Level: 1
         Dex: 1
+        Sta: 1
       - Level: 2
         Int: 1
         Dex: 1
@@ -7812,7 +7813,6 @@ Body:
       - Level: 10
         Str: 1
         Pow: 1
-        Sta: 1
       - Level: 11
         Dex: 1
         Crt: 1
@@ -7845,7 +7845,6 @@ Body:
         Spl: 1
       - Level: 23
         Str: 1
-        Sta: 1
       - Level: 24
         Int: 1
         Con: 1
@@ -7854,6 +7853,7 @@ Body:
         Crt: 1
       - Level: 26
         Vit: 1
+        Sta: 1
       - Level: 27
         Luk: 1
         Wis: 1
@@ -7866,7 +7866,6 @@ Body:
         Spl: 1
       - Level: 31
         Str: 1
-        Sta: 1
       - Level: 32
         Dex: 1
         Con: 1
@@ -7879,7 +7878,6 @@ Body:
         Dex: 1
       - Level: 36
         Str: 1
-        Sta: 1
       - Level: 37
         Int: 1
       - Level: 38
@@ -7902,9 +7900,13 @@ Body:
       - Level: 45
         Spl: 1
         Con: 1
+      - Level: 46
+        Sta: 1
       - Level: 47
         Wis: 1
         Con: 1
+      - Level: 48
+        Sta: 1
       - Level: 49
         Crt: 1
       - Level: 50

+ 13 - 4
db/re/status.yml

@@ -6563,6 +6563,8 @@ Body:
   - Status: Tunaparty
     Icon: EFST_TUNAPARTY
     DurationLookup: SU_TUNAPARTY
+    Flags:
+      NoDispell: true
   - Status: Shrimp
     Icon: EFST_SHRIMP
     DurationLookup: SU_BUNCHOFSHRIMP
@@ -7524,24 +7526,20 @@ Body:
       bonus bVariableCastrate,-80;
   - Status: OverBrandReady
     Icon: EFST_OVERBRANDREADY
-    Flags:
   - Status: Poison_Mist
     Icon: EFST_POISON_MIST
     DurationLookup: MH_POISON_MIST
     CalcFlags:
       Flee: true
-    Flags:
   - Status: Stone_Wall
     Icon: EFST_STONE_WALL
     DurationLookup: MH_STEINWAND
     CalcFlags:
       Def: true
       Mdef: true
-    Flags:
   - Status: Cloud_Poison
     Icon: EFST_CLOUD_POISON
     DurationLookup: SO_CLOUD_KILL
-    Flags:
   - Status: Homun_Time
     Icon: EFST_HOMUN_TIME
     Flags:
@@ -9586,6 +9584,11 @@ Body:
       Patk: true
       Smatk: true
       Hplus: true
+    Flags:
+      # NoClearbuff: true  # !TODO
+      NoDispell: true
+      # NoBanishingBuster: true  # !TODO
+      # NoClearance: true  # !TODO
   - Status: Marine_Festival
     Icon: EFST_MARINE_FESTIVAL
     DurationLookup: SH_MARINE_FESTIVAL_OF_KI_SUL
@@ -9672,6 +9675,12 @@ Body:
     CalcFlags:
       Patk: true
       Smatk: true
+    # Flags:  # !TODO: NoDispell ?
   - Status: Blessing_of_M_C_Debuff
     Icon: EFST_BLESSING_OF_M_C_DEBUFF
     DurationLookup: SH_BLESSING_OF_MYSTICAL_CREATURES
+    Flags:
+      # NoClearbuff: true  # !TODO
+      NoDispell: true
+      # NoBanishingBuster: true  # !TODO
+      # NoClearance: true  # !TODO

+ 5 - 3
src/map/battle.cpp

@@ -8453,9 +8453,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						if (status_get_lv(src) > 99) {
 							skillratio += sstatus->int_ * 5;
 						}
-						// !TODO: the buff could be here or could be part of the skillatk bonus
-						if( sc != nullptr && sc->getSCE( SC_COLORS_OF_HYUN_ROK_BUFF ) != nullptr )
-							skillratio += skillratio * 50 / 100;
 						RE_LVL_DMOD(100);
 						break;
 					case NPC_VENOMFOG:
@@ -9125,6 +9122,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 				if (sc->getSCE(SC_CLIMAX) && sc->getSCE(SC_CLIMAX)->val1 == 4)
 					i += 150;
 				break;
+			case SU_CN_METEOR:
+			case SU_CN_METEOR2:
+				if (sc->getSCE(SC_COLORS_OF_HYUN_ROK_BUFF) != nullptr)
+					i += sc->getSCE(SC_COLORS_OF_HYUN_ROK_BUFF)->val2;
+				break;
 		}
 
 		if (i != 0)

+ 2 - 2
src/map/clif.hpp

@@ -488,8 +488,8 @@ enum useskill_fail_cause : uint8_t
 	USESKILL_FAIL_THERE_ARE_NPC_AROUND = 83,
 	USESKILL_FAIL_NEED_MORE_BULLET = 84,
 	USESKILL_FAIL_COINS = 85,
-	// 86 unknown
-	USESKILL_FAIL_MAP = 87,
+	USESKILL_FAIL_SH_TEMPORARY_COMMUNION,
+	USESKILL_FAIL_MAP,
 	USESKILL_FAIL_NEED_SUMMON_SP,
 	USESKILL_FAIL_SAME_VEND,
 	USESKILL_FAIL_NEED_BULLETS,

+ 14 - 9
src/map/skill.cpp

@@ -13171,9 +13171,10 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			}
 			heal = heal * (100 + status_get_crt(src)) * status_get_lv(src) / 10000;
 			status_heal(bl, heal, 0, 0, 0);
-			clif_skill_nodamage(src, *bl, skill_id, heal);
+			clif_skill_nodamage(nullptr, *bl, AL_HEAL, heal);
 		}
 		else {
+			clif_skill_nodamage(src, *bl, skill_id, skill_lv);
 			int32 range = skill_get_splash(skill_id, skill_lv);
 			if( pc_checkskill( sd, SH_COMMUNE_WITH_KI_SUL ) > 0 || ( sc != nullptr && sc->getSCE( SC_TEMPORARY_COMMUNION ) != nullptr ) )
 				range += 2;
@@ -13212,20 +13213,18 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 
 			status_heal( bl, 0, 0, ap, 0 );
 		}else if( flag&1 ){
-			int32 range = skill_get_splash( SH_KI_SUL_RAMPAGE, skill_lv );
-			uint16 skill_lv2 = skill_lv;
+			int32 range = skill_get_splash( skill_id, skill_lv );
 
 			if( pc_checkskill( sd, SH_COMMUNE_WITH_KI_SUL ) > 0 || ( sc != nullptr && sc->getSCE( SC_TEMPORARY_COMMUNION ) != nullptr ) ){
 				range += 2;
-				skill_lv2 = skill_get_max( SH_KI_SUL_RAMPAGE );
 				// Set a flag for AP increase
 				flag |= 4;
 			}
 
-			clif_skill_nodamage( bl, *bl, SH_KI_SUL_RAMPAGE, skill_lv2 );
-			map_foreachinrange( skill_area_sub, bl, range, BL_CHAR, bl, SH_KI_SUL_RAMPAGE, skill_lv2, tick, flag|BCT_PARTY|SD_SPLASH|2, skill_castend_nodamage_id );
+			clif_skill_nodamage( src, *bl, skill_id, 0 );
+			map_foreachinrange( skill_area_sub, bl, range, BL_CHAR, bl, skill_id, skill_lv, tick, flag|BCT_PARTY|2, skill_castend_nodamage_id );
 		}else{
-			// TODO: no party check ?
+			// No party check required
 			clif_skill_nodamage(src, *bl, skill_id, skill_lv);
 			sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
 		}
@@ -13239,6 +13238,8 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			status_change_end(src, SC_COLORS_OF_HYUN_ROK_4);
 			status_change_end(src, SC_COLORS_OF_HYUN_ROK_5);
 			status_change_end(src, SC_COLORS_OF_HYUN_ROK_6);
+			// The skill also ends the buff that increases Catnip Meteor damage
+			status_change_end(src, SC_COLORS_OF_HYUN_ROK_BUFF);
 
 			clif_skill_nodamage(src, *src, skill_id, skill_lv);
 		}
@@ -16402,7 +16403,6 @@ int32 skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t
 		case UNT_SOLIDTRAP:
 		case UNT_SWIFTTRAP:
 		case UNT_FLAMETRAP:
-		case UNT_HYUN_ROKS_BREEZE:
 			skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
 			break;
 #ifdef RENEWAL
@@ -17135,6 +17135,10 @@ int32 skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t
 				sc_start( ss, bl, skill_get_sc( sg->skill_id ), 100, sg->skill_lv, sg->interval + 100 );
 			} 
 			break;
+
+		case UNT_HYUN_ROKS_BREEZE:
+			skill_attack(skill_get_type(sg->skill_id), ss, ss, bl, sg->skill_id, sg->skill_lv, tick, SD_ANIMATION);
+ 			break;
 	}
 
 	if (bl->type == BL_MOB && ss != bl)
@@ -18534,7 +18538,8 @@ bool skill_check_condition_castbegin( map_session_data& sd, uint16 skill_id, uin
 			break;
 		case SH_TEMPORARY_COMMUNION:
 			if (pc_checkskill(&sd, SH_COMMUNE_WITH_CHUL_HO) == 0 && pc_checkskill(&sd, SH_COMMUNE_WITH_HYUN_ROK) == 0 && pc_checkskill(&sd, SH_COMMUNE_WITH_KI_SUL) == 0) {
-				clif_skill_fail( sd, skill_id, USESKILL_FAIL_CONDITION );
+				clif_skill_fail( sd, skill_id, USESKILL_FAIL_SH_TEMPORARY_COMMUNION );
+				clif_skill_fail( sd, skill_id, USESKILL_FAIL );
 				return false;
 			}
 			break;

+ 5 - 2
src/map/status.cpp

@@ -12535,12 +12535,15 @@ int32 status_change_start(struct block_list* src, struct block_list* bl,enum sc_
 			val2 = 2 * val1;
 			break;
 		case SC_KI_SUL_RAMPAGE:
-			tick_time = 1000;
-			val4 = tick / tick_time;
+			tick_time = 100;
+			val4 = tick / 1000;
 			break;
 		case SC_BLESSING_OF_M_CREATURES:
 			val2 = val1 * 10;
 			break;
+		case SC_COLORS_OF_HYUN_ROK_BUFF:
+			val2 = 50;
+			break;
 
 		default:
 			if (calc_flag.none() && scdb->skill_id == 0 && scdb->icon == EFST_BLANK && scdb->opt1 == OPT1_NONE && scdb->opt2 == OPT2_NONE && scdb->state.none() && scdb->flag.none() && scdb->endonstart.empty() && scdb->endreturn.empty() && scdb->fail.empty() && scdb->endonend.empty()) {