summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-03-23 09:30:37 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-03-23 09:30:37 +0000
commit0184004cacce57c32c7d06dfa24e0a703de76554 (patch)
tree6879914f15f437ca61108f3ad3dd52b4e6c8c873 /src
parent0352df880b0e71766ce0c3886355e285e329429d (diff)
downloadhercules-0184004cacce57c32c7d06dfa24e0a703de76554.tar.gz
hercules-0184004cacce57c32c7d06dfa24e0a703de76554.tar.bz2
hercules-0184004cacce57c32c7d06dfa24e0a703de76554.tar.xz
hercules-0184004cacce57c32c7d06dfa24e0a703de76554.zip
Added the missing Fixed Casting Time support.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15780 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/config/Data/Const.h5
-rw-r--r--src/map/skill.c22
-rw-r--r--src/map/skill.h3
3 files changed, 21 insertions, 9 deletions
diff --git a/src/map/config/Data/Const.h b/src/map/config/Data/Const.h
index b4984f9c2..2071a4a8c 100644
--- a/src/map/config/Data/Const.h
+++ b/src/map/config/Data/Const.h
@@ -13,6 +13,11 @@
* "Constants"
**/
#if RECASTING
+
+ #if REMODE == 0
+ #error RECASTING requires REMODE enabled
+ #endif
+
#define CONST_CASTRATE_SCALE RECASTING_VMIN
/**
* Cast Rate Formula: (DEX x 2)+INT
diff --git a/src/map/skill.c b/src/map/skill.c
index c8dbd1d5f..d602cc799 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -217,7 +217,9 @@ int skill_get_unit_bl_target( int id ) { skill_get (skill_db[id].unit_target&
int skill_get_unit_flag( int id ) { skill_get (skill_db[id].unit_flag, id, 1); }
int skill_get_unit_layout_type( int id ,int lv ){ skill_get (skill_db[id].unit_layout_type[lv-1], id, lv); }
int skill_get_cooldown( int id ,int lv ) { skill_get (skill_db[id].cooldown[lv-1], id, lv); }
-
+#if RECASTING
+int skill_get_fixed_cast( int id ,int lv ){ skill_get (skill_db[id].fixed_cast[lv-1], id, lv); }
+#endif
int skill_tree_get_max(int id, int b_class)
{
int i;
@@ -12132,15 +12134,14 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
/*==========================================
* Does cast-time reductions based on sc data.
*------------------------------------------*/
-int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_lv)
-{
+int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_lv) {
struct status_change *sc = status_get_sc(bl);
#if RECASTING
- int fixed = skill_get_cast(skill_id, skill_lv);
- if( fixed > 1 )
- fixed = fixed * 20 / 100;
- else
- fixed = 0;
+ int fixed = skill_get_fixed_cast(skill_id, skill_lv);
+ if( !fixed ) {
+ fixed = skill_get_cast(skill_id, skill_lv);
+ fixed = ( fixed > 1 ? ( fixed * 20 / 100 ) : 0 );
+ }
#endif
if (sc && sc->count) {
if (sc->data[SC_SLOWCAST])
@@ -15552,6 +15553,9 @@ static bool skill_parse_row_castdb(char* split[], int columns, int current)
skill_split_atoi(split[4],skill_db[i].upkeep_time);
skill_split_atoi(split[5],skill_db[i].upkeep_time2);
skill_split_atoi(split[6],skill_db[i].cooldown);
+#if RECASTING
+ skill_split_atoi(split[7],skill_db[i].fixed_cast);
+#endif
return true;
}
@@ -15783,7 +15787,7 @@ static void skill_readdb(void)
sv_readdb(db_path, DBPATH"skill_db.txt" , ',', 17, 17, MAX_SKILL_DB, skill_parse_row_skilldb);
sv_readdb(db_path, DBPATH"skill_require_db.txt" , ',', 32, 32, MAX_SKILL_DB, skill_parse_row_requiredb);
- sv_readdb(db_path, DBPATH"skill_cast_db.txt" , ',', 7, 7, MAX_SKILL_DB, skill_parse_row_castdb);
+ sv_readdb(db_path, DBPATH"skill_cast_db.txt" , ',', 7, 8, MAX_SKILL_DB, skill_parse_row_castdb);
sv_readdb(db_path, DBPATH"skill_castnodex_db.txt", ',', 2, 3, MAX_SKILL_DB, skill_parse_row_castnodexdb);
sv_readdb(db_path, DBPATH"skill_unit_db.txt" , ',', 8, 8, MAX_SKILL_DB, skill_parse_row_unitdb);
diff --git a/src/map/skill.h b/src/map/skill.h
index fe187b039..b78b1d54c 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -94,6 +94,9 @@ struct s_skill_db {
int range[MAX_SKILL_LEVEL],hit,inf,element[MAX_SKILL_LEVEL],nk,splash[MAX_SKILL_LEVEL],max;
int num[MAX_SKILL_LEVEL];
int cast[MAX_SKILL_LEVEL],walkdelay[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL];
+#if RECASTING
+ int fixed_cast[MAX_SKILL_LEVEL];
+#endif
int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL],cooldown[MAX_SKILL_LEVEL];
int castcancel,cast_def_rate;
int inf2,maxcount[MAX_SKILL_LEVEL],skill_type;