From 570c07d50cc748064a1bc8a5f7dd861654a490c9 Mon Sep 17 00:00:00 2001 From: Aleos Date: Mon, 17 Dec 2018 21:51:50 -0500 Subject: [PATCH] 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! --- src/map/skill.cpp | 20 +++++++++++--------- src/map/status.cpp | 6 ++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 8864470ae7..6fada4e06a 100755 --- a/src/map/skill.cpp +++ b/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); diff --git a/src/map/status.cpp b/src/map/status.cpp index 00db2ebec3..d3204cf80f 100644 --- a/src/map/status.cpp +++ b/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; }