diff --git a/db/pre-re/status.yml b/db/pre-re/status.yml index cba39382d3..5671c96d53 100644 --- a/db/pre-re/status.yml +++ b/db/pre-re/status.yml @@ -1287,6 +1287,8 @@ Body: - Status: Spiderweb Icon: EFST_SPIDERWEB DurationLookup: PF_SPIDERWEB + States: + NoMove: true CalcFlags: Flee: true Flags: @@ -6791,7 +6793,6 @@ Body: DurationLookup: GN_HELLS_PLANT Flags: NoSave: true - RemoveOnChangeMap: true DisplayPc: true BlEffect: true - Status: Increase_Maxhp diff --git a/db/re/status.yml b/db/re/status.yml index 1dd02be4b8..9fc57f77e8 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -1300,6 +1300,8 @@ Body: - Status: Spiderweb Icon: EFST_SPIDERWEB DurationLookup: PF_SPIDERWEB + States: + NoMove: true CalcFlags: Flee: true Flags: @@ -7068,7 +7070,6 @@ Body: DurationLookup: GN_HELLS_PLANT Flags: NoSave: true - RemoveOnChangeMap: true DisplayPc: true BlEffect: true - Status: Increase_Maxhp diff --git a/src/map/skill.cpp b/src/map/skill.cpp index cfb63ce995..77624f541c 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -11179,7 +11179,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui status_heal(bl, heal, 0, 0); } - if( (tsc && tsc->opt1) && (rnd()%100 < ((skill_lv * 5) + (status_get_dex(src) + status_get_lv(src)) / 4) - (1 + (rnd() % 10))) ) { + if( tsc && tsc->count && rnd_chance( ( skill_lv * 5 + ( status_get_dex( src ) + status_get_lv( src ) ) / 4 ) - rnd_value( 1, 10 ), 100 ) ){ status_change_end(bl, SC_STONE, INVALID_TIMER); status_change_end(bl, SC_FREEZE, INVALID_TIMER); status_change_end(bl, SC_STUN, INVALID_TIMER); diff --git a/src/map/status.cpp b/src/map/status.cpp index 6f48696a75..1b539f0920 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -1557,7 +1557,7 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui (src->type != BL_PC || ((TBL_PC*)src)->skillitem != skill_id) ) { // Skills blocked through status changes... if (!flag && ( // Blocked only from using the skill (stuff like autospell may still go through - sc->cant.cast || + ( sc->cant.cast && skill_id != RK_REFRESH && skill_id != SU_GROOMING && skill_id != SR_GENTLETOUCH_CURE ) || #ifndef RENEWAL (sc->data[SC_BASILICA] && (sc->data[SC_BASILICA]->val4 != src->id || skill_id != HP_BASILICA)) || // Only Basilica caster that can cast, and only Basilica to cancel it #endif @@ -12888,6 +12888,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const bool disable_opt_flag = false; switch (type) { + case SC_STONE: + sc->opt1 = OPT1_NONE; + break; case SC_DANCING: if ((sce->val1&0xFFFF) == CG_MOONLIT) sc->opt3 &= ~OPT3_MOONLIT;