summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshennetsind <ind@henn.et>2013-11-06 20:28:45 -0200
committershennetsind <ind@henn.et>2013-11-06 20:28:45 -0200
commit665f1306a130d4b8c359972bf4e58ef9d3bd9cd8 (patch)
treede3f9d41fc8a9330675a412791b1151e34cadaf8
parent6dcc3873037631aac15f6a87337c49e18b4cd075 (diff)
downloadhercules-665f1306a130d4b8c359972bf4e58ef9d3bd9cd8.tar.gz
hercules-665f1306a130d4b8c359972bf4e58ef9d3bd9cd8.tar.bz2
hercules-665f1306a130d4b8c359972bf4e58ef9d3bd9cd8.tar.xz
hercules-665f1306a130d4b8c359972bf4e58ef9d3bd9cd8.zip
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 <ind@henn.et>
-rw-r--r--db/const.txt2
-rw-r--r--db/sc_config.txt18
-rw-r--r--src/map/script.c11
-rw-r--r--src/map/status.c13
-rw-r--r--src/map/status.h15
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.