From 665f1306a130d4b8c359972bf4e58ef9d3bd9cd8 Mon Sep 17 00:00:00 2001 From: shennetsind Date: Wed, 6 Nov 2013 20:28:45 -0200 Subject: Fixed Bug 7799 SC_MOONSTAR, SC_SUPER_STAR are no longer removeable by sc_end all, and sc clear. Modified sc_config.txt, added a new flag (0x80/128) for such cases. http://hercules.ws/board/tracker/issue-7799-sc-moonstar/ Special Thanks to kyeme. Signed-off-by: shennetsind --- db/const.txt | 2 ++ db/sc_config.txt | 18 +++++++++++------- src/map/script.c | 11 ++--------- src/map/status.c | 13 ++----------- src/map/status.h | 15 ++++++++------- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/db/const.txt b/db/const.txt index cdb000417..ddc4a188a 100644 --- a/db/const.txt +++ b/db/const.txt @@ -1242,6 +1242,8 @@ SC_KINGS_GRACE 557 SC_TELEKINESIS_INTENSE 558 SC_OFFERTORIUM 559 SC_FRIGG_SONG 560 +SC_ALL_RIDING 561 +SC_HANBOK 562 SC_MONSTER_TRANSFORM 563 SC_ANGEL_PROTECT 564 SC_ILLUSIONDOPING 565 diff --git a/db/sc_config.txt b/db/sc_config.txt index 9e0b8b268..38e10e4c2 100644 --- a/db/sc_config.txt +++ b/db/sc_config.txt @@ -10,6 +10,7 @@ // 16 - SC considered as buff and be removed by Hermode and etc. // 32 - SC considered as debuff and be removed by Gospel and etc. // 64 - SC cannot be reset when MADO Gear is taken off. +// 128 - SC cannot be reset by sc_end and change clear. //Example: //SC_ENDURE, 21 //SC_ENDURE: cannot be removed by death and dispell and cosidered as buff. (16 + 4 + 1 = 21) @@ -395,12 +396,12 @@ SC_SOULCOLD,78 SC_HAWKEYES,78 // Unremovable -SC_WEIGHTOVER50, 79 -SC_WEIGHTOVER90, 79 +SC_WEIGHTOVER50, 207 +SC_WEIGHTOVER90, 207 SC_WEDDING, 77 SC_XMAS, 77 SC_SUMMER, 77 -SC_NOCHAT, 77 +SC_NOCHAT, 205 SC_FUSION, 77 SC_EARTHSCROLL, 77 SC_STORMKICK_READY, 77 @@ -408,7 +409,7 @@ SC_DOWNKICK_READY, 77 SC_COUNTERKICK_READY, 77 SC_TURNKICK_READY, 77 SC_DODGE_READY, 77 -SC_JAILED, 77 +SC_JAILED, 205 SC_AUTOTRADE, 77 SC_WHISTLE, 79 SC_ASSNCROS, 79 @@ -419,6 +420,9 @@ SC_DONTFORGETME, 79 SC_FORTUNE, 79 SC_SERVICEFORYOU, 79 SC_INCHIT, 77 -SC_PUSH_CART, 0x4D -SC_MOONSTAR, 79 -SC_SUPER_STAR, 79 +SC_PUSH_CART, 205 +SC_MOONSTAR, 207 +SC_SUPER_STAR, 207 + +//Cant Clear +SC_ALL_RIDING, 128 \ No newline at end of file diff --git a/src/map/script.c b/src/map/script.c index 8fd7f425c..a944447e2 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -9425,15 +9425,8 @@ BUILDIN(sc_end) { if (!sce) return true; - switch (type) { - case SC_WEIGHTOVER50: - case SC_WEIGHTOVER90: - case SC_NOCHAT: - case SC_PUSH_CART: - return true; - default: - break; - } + if( status->get_sc_type(type)&SC_NO_CLEAR ) + return true; //This should help status_change_end force disabling the SC in case it has no limit. sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0; diff --git a/src/map/status.c b/src/map/status.c index 1df98a957..e2cc39a70 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -9223,17 +9223,8 @@ int status_change_clear(struct block_list* bl, int type) { } } } - if( type == 3 ) { - switch (i) {// TODO: This list may be incomplete - case SC_WEIGHTOVER50: - case SC_WEIGHTOVER90: - case SC_NOCHAT: - case SC_PUSH_CART: - case SC_JAILED: - case SC_ALL_RIDING: - continue; - } - } + if( type == 3 && status->get_sc_type(i)&SC_NO_CLEAR ) + continue; status_change_end(bl, (sc_type)i, INVALID_TIMER); diff --git a/src/map/status.h b/src/map/status.h index e588fbb3f..784c8ca5f 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -34,13 +34,14 @@ enum refine_type { }; typedef enum sc_conf_type { - SC_NO_REM_DEATH = 0x1, - SC_NO_SAVE = 0x2, - SC_NO_DISPELL = 0x4, - SC_NO_CLEARANCE = 0x8, - SC_BUFF = 0x10, - SC_DEBUFF = 0x20, - SC_MADO_NO_RESET = 0x40 + SC_NO_REM_DEATH = 0x01, + SC_NO_SAVE = 0x02, + SC_NO_DISPELL = 0x04, + SC_NO_CLEARANCE = 0x08, + SC_BUFF = 0x10, + SC_DEBUFF = 0x20, + SC_MADO_NO_RESET = 0x40, + SC_NO_CLEAR = 0x80, } sc_conf_type; // Status changes listing. These code are for use by the server. -- cgit v1.2.3-60-g2f50