소스 검색

Updates Quest skills from kRO patch (#6736)

* Fixes #6732.
* kRO Changelog: https://ro.gnjoy.com/news/notice/View.asp?BBSMode=10001&seq=7177&curpage=1
Thanks to @Atemo, @attackjom, and @Lemongrass3110!
Aleos 3 년 전
부모
커밋
7c275f3130
6개의 변경된 파일106개의 추가작업 그리고 40개의 파일을 삭제
  1. 8 8
      db/re/produce_db.txt
  2. 17 15
      db/re/skill_db.yml
  3. 10 7
      doc/status_change.txt
  4. 32 1
      src/map/battle.cpp
  5. 29 5
      src/map/skill.cpp
  6. 10 4
      src/map/status.cpp

+ 8 - 8
db/re/produce_db.txt

@@ -388,14 +388,14 @@
 
 //===== Elemental Converters === ItemLV=23 =====
 
-//-- Fire Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 3 Scorpion Tail
-142,12114,23,1007,1,7433,1,904,3
-//-- Water Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 3 Snail's Shell
-143,12115,23,1007,1,7433,1,946,3
-//-- Earth Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 3 Horn
-144,12116,23,1007,1,7433,1,947,3
-//-- Wind Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 3 Rainbow Shell
-145,12117,23,1007,1,7433,1,1013,3
+//-- Fire Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 1 Red Blood
+142,12114,23,1007,1,7433,1,990,1
+//-- Water Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 1 Crystal Blue
+143,12115,23,1007,1,7433,1,991,1
+//-- Earth Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 1 Green Live
+144,12116,23,1007,1,7433,1,992,1
+//-- Wind Elemental Converter <-- SA_CREATECON & 1 Blank Scroll, 1 Wind of Verdure
+145,12117,23,1007,1,7433,1,993,1
 
 //==============================================
 

+ 17 - 15
db/re/skill_db.yml

@@ -13812,7 +13812,7 @@ Body:
         Element: Ghost
       - Level: 10
         Element: Undead
-    Duration1: 180000
+    Duration1: 1200000
     Requires:
       SpCost: 1
     Status: EnchantArms
@@ -17911,6 +17911,7 @@ Body:
     Range: 14
     Hit: Single
     HitCount: 1
+    Knockback: 2
     Element: Weapon
     CopyFlags:
       Skill:
@@ -17930,10 +17931,10 @@ Body:
     Flags:
       IsQuest: true
     Hit: Single
-    Knockback: 2
-    Duration1: 300000
+    Duration1: 900000
+    Duration2: 5000
     Requires:
-      SpCost: 15
+      SpCost: 100
       State: Shield
     Status: Shrink
   - Id: 1003
@@ -17984,7 +17985,7 @@ Body:
       - Level: 10
         Time: 60000
     Requires:
-      SpCost: 15
+      SpCost: 35
       Ammo:
         Dagger: true
       AmmoAmount: 1
@@ -18003,7 +18004,7 @@ Body:
     HitCount: 1
     Duration1: 10000
     Requires:
-      SpCost: 25
+      SpCost: 40
     Status: CloseConfine2
   - Id: 1006
     Name: WZ_SIGHTBLASTER
@@ -18025,10 +18026,10 @@ Body:
         Reproduce: true
     CastCancel: true
     CastTime: 1280
-    Duration1: 120000
+    Duration1: 900000
     FixedCastTime: 320
     Requires:
-      SpCost: 40
+      SpCost: 80
     Status: SightBlaster
   - Id: 1007
     Name: SA_CREATECON
@@ -18077,14 +18078,14 @@ Body:
     Range: -9
     Hit: Single
     HitCount: 1
-    Element: Weapon
+    Element: Wind
     Knockback: 3
     CopyFlags:
       Skill:
         Plagiarism: true
         Reproduce: true
     Requires:
-      SpCost: 10
+      SpCost: 50
       Weapon:
         Bow: true
   - Id: 1010
@@ -18102,9 +18103,10 @@ Body:
     CastTime: 800
     AfterCastActDelay: 2000
     Duration1: 17000
+    Duration2: 120000
     FixedCastTime: 200
     Requires:
-      SpCost: 20
+      SpCost: 40
   - Id: 1011
     Name: DC_WINKCHARM
     Description: Wink of Charm
@@ -18123,7 +18125,7 @@ Body:
     Duration2: 17000
     FixedCastTime: 200
     Requires:
-      SpCost: 20
+      SpCost: 40
     Status: WinkCharm
   - Id: 1012
     Name: BS_UNFAIRLYTRICK
@@ -18169,7 +18171,7 @@ Body:
     CastTimeFlags:
       IgnoreDex: true
     Requires:
-      SpCost: 400
+      SpCost: 800
   - Id: 1015
     Name: MO_KITRANSLATION
     Description: Ki Translation
@@ -18214,8 +18216,8 @@ Body:
     AfterCastActDelay: 2000
     Duration2: 5000
     Requires:
-      HpCost: 10
-      SpCost: 20
+      HpCost: 200
+      SpCost: 40
     Status: Stun
   - Id: 1017
     Name: SA_ELEMENTGROUND

+ 10 - 7
doc/status_change.txt

@@ -669,13 +669,16 @@ SC_WINKCHARM	()
 	desc:
 	val1:
 
-SC_CLOSECONFINE	()
-	desc:
-	val1:
-
-SC_CLOSECONFINE2	()
-	desc:
-	val1:
+SC_CLOSECONFINE	(EFST_RG_CCONFINE_M)
+	desc: Flee bonus and counter for confined enemies
+	val1: Skill level
+	val2: Confined enemy count
+	val3: +50 Flee
+
+SC_CLOSECONFINE2	(EFST_RG_CCONFINE_S)
+	desc: Confines target in place
+	val1: Skill level
+	val2: MapID of caster
 
 SC_DANCING	()
 	desc:

+ 32 - 1
src/map/battle.cpp

@@ -1284,8 +1284,13 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
 		} else {
 			clif_skill_nodamage(target, target, CR_AUTOGUARD, sce->val1, 1);
 			unit_set_walkdelay(target, gettick(), delay, 1);
+#ifdef RENEWAL
+			if (sc->data[SC_SHRINK])
+				sc_start(src, target, SC_STUN, 50, skill_lv, skill_get_time2(skill_id, skill_lv));
+#else
 			if (sc->data[SC_SHRINK] && rnd() % 100 < 5 * sce->val1)
 				skill_blown(target, src, skill_get_blewcount(CR_SHRINK, 1), -1, BLOWN_NONE);
+#endif
 			d->dmg_lv = ATK_MISS;
 			return false;
 		}
@@ -2977,7 +2982,11 @@ static bool is_attack_hitting(struct Damage* wd, struct block_list *src, struct
 				break;
 			case AS_SONICBLOW:
 				if(sd && pc_checkskill(sd,AS_SONICACCEL) > 0)
+#ifdef RENEWAL
+					hitrate += hitrate * 90 / 100;
+#else
 					hitrate += hitrate * 50 / 100;
+#endif
 				break;
 #ifdef RENEWAL
 			case RG_BACKSTAP:
@@ -4373,7 +4382,13 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 		case NJ_KUNAI:
 			skillratio += -100 + 100 * skill_lv;
 			break;
-#endif
+		case KN_CHARGEATK:
+			skillratio += 600;
+			break;
+		case AS_VENOMKNIFE:
+			skillratio += 400;
+			break;
+#else
 		case KN_CHARGEATK: { // +100% every 3 cells of distance but hard-limited to 500%
 				int k = (wd->miscflag-1)/3;
 				if (k < 0)
@@ -4383,11 +4398,20 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 				skillratio += 100 * k;
 			}
 			break;
+#endif
 		case HT_PHANTASMIC:
+#ifdef RENEWAL
+			skillratio += 400;
+#else
 			skillratio += 50;
+#endif
 			break;
 		case MO_BALKYOUNG:
+#ifdef RENEWAL
+			skillratio += 700;
+#else
 			skillratio += 200;
+#endif
 			break;
 		case HFLI_MOON: //[orn]
 			skillratio += 10 + 110 * skill_lv;
@@ -5753,7 +5777,11 @@ static void battle_calc_attack_post_defense(struct Damage* wd, struct block_list
 	switch (skill_id) {
 		case AS_SONICBLOW:
 			if(sd && pc_checkskill(sd,AS_SONICACCEL)>0)
+#ifdef RENEWAL
+				ATK_ADDRATE(wd->damage, wd->damage2, 90);
+#else
 				ATK_ADDRATE(wd->damage, wd->damage2, 10);
+#endif
 			break;
 	}
 }
@@ -7056,6 +7084,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						skillratio += -100 + 500 + 150 * skill_lv;
 						RE_LVL_DMOD(100);
 						break;
+					case WZ_SIGHTBLASTER:
+						skillratio += 500;
+						break;
 #else
 					case WZ_VERMILION:
 						skillratio += 20 * skill_lv - 20;

+ 29 - 5
src/map/skill.cpp

@@ -5161,7 +5161,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case KN_CHARGEATK:
 		{
 		bool path = path_search_long(NULL, src->m, src->x, src->y, bl->x, bl->y,CELL_CHKWALL);
+#ifdef RENEWAL
+		int dist = skill_get_blewcount(skill_id, skill_lv);
+#else
 		unsigned int dist = distance_bl(src, bl);
+#endif
 		uint8 dir = map_calc_dir(bl, src->x, src->y);
 
 		// teleport to target (if not on WoE grounds)
@@ -5170,8 +5174,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 
 		// cause damage and knockback if the path to target was a straight one
 		if (path) {
-			if(skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, dist))
+			if(skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, dist)) {
+#ifdef RENEWAL
+				if (map_getmapdata(src->m)->flag[MF_PVP])
+					dist += 2; // Knockback is 4 on PvP maps
+#endif
 				skill_blown(src, bl, dist, dir, BLOWN_NONE);
+			}
 			//HACK: since knockback officially defaults to the left, the client also turns to the left... therefore,
 			// make the caster look in the direction of the target
 			unit_setdir(src, (dir+4)%8);
@@ -7094,13 +7103,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 				break;
 			}
+#ifndef RENEWAL
 			skill_area_temp[0] = battle_config.exp_cost_redemptio_limit - skill_area_temp[0]; // The actual penalty...
 			if (skill_area_temp[0] > 0 && !map_getmapflag(src->m, MF_NOEXPPENALTY) && battle_config.exp_cost_redemptio) { //Apply penalty
 				//If total penalty is 1% => reduced 0.2% penalty per each revived player
 				pc_lostexp(sd, u64min(sd->status.base_exp, (pc_nextbaseexp(sd) * skill_area_temp[0] * battle_config.exp_cost_redemptio / battle_config.exp_cost_redemptio_limit) / 100), 0);
 			}
-			status_set_hp(src, 1, 0);
 			status_set_sp(src, 0, 0);
+#endif
+			status_set_hp(src, 1, 0);
 			break;
 		} else if (status_isdead(bl) && flag&1) { //Revive
 			skill_area_temp[0]++; //Count it in, then fall-through to the Resurrection code.
@@ -8609,12 +8620,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 
 	case BA_PANGVOICE:
 		clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,50,7,skill_get_time(skill_id,skill_lv)));
+#ifdef RENEWAL
+		sc_start(src, bl, SC_BLEEDING, 30, skill_lv, skill_get_time2(skill_id, skill_lv)); // TODO: Confirm success rate
+#endif
 		break;
 
 	case DC_WINKCHARM:
-		if( dstsd )
+		if( dstsd ) {
 			clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,30,7,skill_get_time2(skill_id,skill_lv)));
-		else
+#ifdef RENEWAL
+			sc_start(src, bl, SC_HALLUCINATION, 30, skill_lv, skill_get_time(skill_id, skill_lv)); // TODO: Confirm success rate and duration
+#endif
+		} else
 		if( dstmd )
 		{
 			if( status_get_lv(src) > status_get_lv(bl)
@@ -16930,6 +16947,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 				}
 			}
 			break;
+#ifndef RENEWAL
 		case PR_REDEMPTIO:
 			{
 				t_exp exp = pc_nextbaseexp(sd);
@@ -16941,7 +16959,6 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 				}
 				break;
 			}
-#ifndef RENEWAL
 		case HP_BASILICA:
 			if( !sc || (sc && !sc->data[SC_BASILICA])) {
 				if( sd ) {
@@ -18212,8 +18229,15 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
 	// Check for cost reductions due to skills & SCs
 	switch(skill_id) {
 		case MC_MAMMONITE:
+#ifdef RENEWAL
+		case WS_CARTTERMINATION:
+#endif
 			if(pc_checkskill(sd,BS_UNFAIRLYTRICK)>0)
+#ifdef RENEWAL
+				req.zeny -= req.zeny*20/100;
+#else
 				req.zeny -= req.zeny*10/100;
+#endif
 			break;
 		case AL_HOLYLIGHT:
 			if(sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_PRIEST)

+ 10 - 4
src/map/status.cpp

@@ -6794,7 +6794,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
 	if(sc->data[SC_MOON_COMFORT]) // SG skill [Komurka]
 		flee += sc->data[SC_MOON_COMFORT]->val2;
 	if(sc->data[SC_CLOSECONFINE])
-		flee += 10;
+		flee += sc->data[SC_CLOSECONFINE]->val3;
 	if (sc->data[SC_ANGRIFFS_MODUS])
 		flee -= sc->data[SC_ANGRIFFS_MODUS]->val3;
 	if(sc->data[SC_ADJUSTMENT])
@@ -10388,9 +10388,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			struct status_change_entry *sce2 = sc2?sc2->data[SC_CLOSECONFINE]:NULL;
 
 			if (src2 && sc2) {
-				if (!sce2) // Start lock on caster.
-					sc_start4(src2,src2,SC_CLOSECONFINE,100,val1,1,0,0,tick+1000);
-				else { // Increase count of locked enemies and refresh time.
+				if (!sce2) { // Start lock on caster.
+#ifdef RENEWAL
+					val3 = 50; // Flee increase
+#else
+					val3 = 10; // Flee increase
+#endif
+
+					sc_start4(src2,src2,SC_CLOSECONFINE,100,val1,1,val3,0,tick+1000);
+				} else { // Increase count of locked enemies and refresh time.
 					(sce2->val2)++;
 					delete_timer(sce2->timer, status_change_timer);
 					sce2->timer = add_timer(gettick()+tick+1000, status_change_timer, src2->id, SC_CLOSECONFINE);