Ver Fonte

Corrected some Summoner skills (#3719)

* Fixes #3706.
* Resolved Blessing of Shrimp not boosting SP recovery properly.
* Resolved Tasty Shrimp Party not accounting for Fresh Shrimp level learned.
* Resolved Lope not placing the caster at the selected target location.
Thanks to @Everade and @exneval!
Aleos há 6 anos atrás
pai
commit
570c07d50c
2 ficheiros alterados com 13 adições e 13 exclusões
  1. 11 9
      src/map/skill.cpp
  2. 2 4
      src/map/status.cpp

+ 11 - 9
src/map/skill.cpp

@@ -10946,7 +10946,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case SU_BUNCHOFSHRIMP:
 	case SU_HISS:
 	case SU_PURRING:
-	case SU_SHRIMPARTY:
 	case SU_MEOWMEOW:
 		if (sd == NULL || sd->status.party_id == 0 || flag&1) {
 			int duration = skill_get_time(skill_id, skill_lv);
@@ -10955,12 +10954,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 				duration += skill_get_time2(SU_BUNCHOFSHRIMP, skill_lv);
 			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, duration));
 		} else if (sd) {
-			if (skill_id == SU_SHRIMPARTY)
-				sc_start(src, bl, SC_SHRIMPBLESSING, 100, skill_lv, skill_get_time2(skill_id, skill_lv));
 			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
 		}
 		break;
 
+	case SU_SHRIMPARTY:
+		if (sd == NULL || sd->status.party_id == 0 || flag&1) {
+			sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
+			if (sd && (i = pc_checkskill(sd, SU_FRESHSHRIMP)) > 0) {
+				clif_skill_nodamage(bl, bl, SU_FRESHSHRIMP, i, 1);
+				sc_start(src, bl, SC_FRESHSHRIMP, 100, i, skill_get_time(SU_FRESHSHRIMP, i));
+			}
+		} else if (sd)
+			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
+		break;
+
 	case SU_POWEROFFLOCK:
 		if (flag&1) {
 			sc_start(src, bl, SC_FEAR, 100, skill_lv, skill_get_time(skill_id, skill_lv));
@@ -12479,12 +12487,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 			if (map_getmapflag(src->m, MF_NOTELEPORT) && !(map_getmapflag(src->m, MF_BATTLEGROUND) || map_flag_gvg2(src->m))) {
 				x = src->x;
 				y = src->y;
-			} else if (dir%2) { // Diagonal
-				x += dirx[dir] * (skill_lv * 4) / 3;
-				y += diry[dir] * (skill_lv * 4) / 3;
-			} else {
-				x += dirx[dir] * skill_lv * 2;
-				y += diry[dir] * skill_lv * 2;
 			}
 
 			clif_skill_nodamage(src, src, skill_id, skill_lv, 1);

+ 2 - 4
src/map/status.cpp

@@ -893,7 +893,7 @@ void initChangeTables(void)
 	set_sc( SU_NYANGGRASS			, SC_NYANGGRASS		, EFST_NYANGGRASS		, SCB_DEF|SCB_MDEF );
 	set_sc( SU_GROOMING				, SC_GROOMING		, EFST_GROOMING		, SCB_FLEE );
 	add_sc( SU_PURRING				, SC_GROOMING );
-	add_sc( SU_SHRIMPARTY			, SC_FRESHSHRIMP );
+	set_sc( SU_SHRIMPARTY			, SC_SHRIMPBLESSING , EFST_PROTECTIONOFSHRIMP , SCB_REGEN );
 	add_sc( SU_MEOWMEOW				, SC_CHATTERING );
 	set_sc( SU_CHATTERING			, SC_CHATTERING		, EFST_CHATTERING		, SCB_WATK|SCB_MATK );
 
@@ -1118,7 +1118,6 @@ void initChangeTables(void)
 
 	/* Summoners status icons */
 	StatusIconChangeTable[SC_SPRITEMABLE] = EFST_SPRITEMABLE;
-	StatusIconChangeTable[SC_SHRIMPBLESSING] = EFST_PROTECTIONOFSHRIMP;
 	StatusIconChangeTable[SC_DORAM_BUF_01] = EFST_DORAM_BUF_01;
 	StatusIconChangeTable[SC_DORAM_BUF_02] = EFST_DORAM_BUF_02;
 
@@ -1331,7 +1330,6 @@ void initChangeTables(void)
 	StatusChangeFlagTable[SC_GLASTHEIM_HPSP] |= SCB_MAXHP|SCB_MAXSP;
 
 	// Summoner
-	StatusChangeFlagTable[SC_SHRIMPBLESSING] |= SCB_REGEN;
 	StatusChangeFlagTable[SC_DORAM_WALKSPEED] |= SCB_SPEED;
 	StatusChangeFlagTable[SC_DORAM_MATK] |= SCB_MATK;
 	StatusChangeFlagTable[SC_DORAM_FLEE2] |= SCB_FLEE2;
@@ -4589,7 +4587,7 @@ void status_calc_regen(struct block_list *bl, struct status_data *status, struct
 
 		if (sc && sc->count) {
 			if (sc->data[SC_SHRIMPBLESSING])
-				val += 150 / 100;
+				val *= 150 / 100;
 			if (sc->data[SC_ANCILLA])
 				val += sc->data[SC_ANCILLA]->val2 / 100;
 		}