|
@@ -1446,7 +1446,7 @@ int32 skill_additional_effect( struct block_list* src, struct block_list *bl, ui
|
|
|
break;
|
|
|
|
|
|
case WZ_FROSTNOVA:
|
|
|
- sc_start(src,bl,SC_FREEZE,skill_lv*5+33,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
|
+ sc_start(src,bl,SC_FREEZE,(sd!=nullptr)?skill_lv*5+33:skill_lv*3+35,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
|
break;
|
|
|
|
|
|
case WZ_STORMGUST:
|
|
@@ -1514,12 +1514,19 @@ int32 skill_additional_effect( struct block_list* src, struct block_list *bl, ui
|
|
|
break;
|
|
|
|
|
|
case TF_SPRINKLESAND:
|
|
|
- sc_start(src,bl,SC_BLIND,20,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
|
+ sc_start(src,bl,SC_BLIND,(sd!=nullptr)?20:15,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
|
break;
|
|
|
|
|
|
case TF_THROWSTONE:
|
|
|
- if (!sc_start(src,bl,SC_STUN,3,skill_lv,skill_get_time(skill_id,skill_lv))) //only blind if success
|
|
|
- sc_start(src,bl,SC_BLIND,3,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
|
+ if (sd != nullptr) {
|
|
|
+ // Only blind if used by player and stun failed
|
|
|
+ if (!sc_start(src, bl, SC_STUN, 3, skill_lv, skill_get_time(skill_id, skill_lv)))
|
|
|
+ sc_start(src, bl, SC_BLIND, 3, skill_lv, skill_get_time2(skill_id, skill_lv));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 5% stun chance and no blind chance when used by monsters
|
|
|
+ sc_start(src, bl, SC_STUN, 5, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case NPC_DARKCROSS:
|
|
@@ -1598,7 +1605,20 @@ int32 skill_additional_effect( struct block_list* src, struct block_list *bl, ui
|
|
|
break;
|
|
|
|
|
|
case BD_LULLABY:
|
|
|
- status_change_start(src, bl, SC_SLEEP, (sstatus->int_ * 2 + rnd_value(100, 300)) * 10, skill_lv, 0, 0, 0, skill_get_time2(skill_id, skill_lv), SCSTART_NONE);
|
|
|
+#ifndef RENEWAL
|
|
|
+ if (sc != nullptr && sc->getSCE(SC_DANCING) != nullptr) {
|
|
|
+ block_list* partner = map_id2bl(sc->getSCE(SC_DANCING)->val4);
|
|
|
+ if (partner == nullptr)
|
|
|
+ break;
|
|
|
+ status_data* pstatus = status_get_status_data(*partner);
|
|
|
+ if (pstatus == nullptr)
|
|
|
+ break;
|
|
|
+ status_change_start(src, bl, skill_get_sc(skill_id), (sstatus->int_ + pstatus->int_ + rnd_value(100, 300)) * 10, skill_lv, 0, 0, 0, skill_get_time2(skill_id, skill_lv), SCSTART_NONE);
|
|
|
+ }
|
|
|
+#else
|
|
|
+ // In renewal the chance is simply 100% and uses the original song duration as sleep duration
|
|
|
+ sc_start(src, bl, skill_get_sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
+#endif
|
|
|
break;
|
|
|
|
|
|
#ifdef RENEWAL
|
|
@@ -17485,6 +17505,9 @@ int32 skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick)
|
|
|
//your own. Let's pray that scenario is pretty unlikely and noone will complain too much about it.
|
|
|
status_change_end(bl, SC_DANCING);
|
|
|
}
|
|
|
+ // Sleep effect of Lullaby doesn't end even if song ends
|
|
|
+ if (skill_id == BD_LULLABY)
|
|
|
+ break;
|
|
|
[[fallthrough]];
|
|
|
case MH_STEINWAND:
|
|
|
case MG_SAFETYWALL:
|