summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/char_sql/char.c2
-rw-r--r--src/common/mmo.h12
-rw-r--r--src/map/mercenary.c2
-rw-r--r--src/map/skill.c33
-rw-r--r--src/map/skill.h2
-rw-r--r--src/map/status.c2
7 files changed, 36 insertions, 20 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 9925e00cf..1c7649878 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2008/07/29
+ * Renamed struct 'skill' to 's_skill' to remove naming collisions.
+ * Added defines for mercenary skill ranges.
+ * Added a mapping of mercenary skills to the skill db (700-799 atm).
* Fixed Sql object not initializing default values properly.
Fixed Sql_Free producing timer deallocation errors when called
without first establishing a database connection.
diff --git a/src/char_sql/char.c b/src/char_sql/char.c
index f11fb7896..e03062197 100644
--- a/src/char_sql/char.c
+++ b/src/char_sql/char.c
@@ -886,7 +886,7 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_everything
char point_map[MAP_NAME_LENGTH_EXT];
struct point tmp_point;
struct item tmp_item;
- struct skill tmp_skill;
+ struct s_skill tmp_skill;
struct s_friend tmp_friend;
#ifdef HOTKEY_SAVING
struct hotkey tmp_hotkey;
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 858a8a513..35af37d85 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -30,7 +30,7 @@
#define MAX_ZENY 1000000000
#define MAX_FAME 1000000000
#define MAX_CART 100
-#define MAX_SKILL 1100 // Bumped to 1100 for new quest skills, will need to further increase one day... [DracoRPG]
+#define MAX_SKILL 1020
#define GLOBAL_REG_NUM 96
#define ACCOUNT_REG_NUM 64
#define ACCOUNT_REG2_NUM 16
@@ -104,6 +104,10 @@
#define MAIL_TITLE_LENGTH 40
#define MAIL_BODY_LENGTH 200
+//Mercenary System
+#define MC_SKILLBASE 8201
+#define MAX_MERCSKILL 37
+
enum item_types {
IT_HEALING = 0,
IT_UNKNOWN, //1
@@ -157,7 +161,7 @@ struct point {
short x,y;
};
-struct skill {
+struct s_skill {
unsigned short id,lv,flag;
};
@@ -216,7 +220,7 @@ struct s_homunculus { //[orn]
int hp,max_hp,sp,max_sp;
unsigned int intimacy; //[orn]
short hunger;
- struct skill hskill[MAX_HOMUNSKILL]; //albator
+ struct s_skill hskill[MAX_HOMUNSKILL]; //albator
short skillpts;
short level;
unsigned int exp;
@@ -280,7 +284,7 @@ struct mmo_charstatus {
struct point last_point,save_point,memo_point[MAX_MEMOPOINTS];
struct item inventory[MAX_INVENTORY],cart[MAX_CART];
struct storage_data storage;
- struct skill skill[MAX_SKILL];
+ struct s_skill skill[MAX_SKILL];
struct s_friend friends[MAX_FRIENDS]; //New friend system [Skotlex]
#ifdef HOTKEY_SAVING
diff --git a/src/map/mercenary.c b/src/map/mercenary.c
index 6a027029f..c56c36cdb 100644
--- a/src/map/mercenary.c
+++ b/src/map/mercenary.c
@@ -836,7 +836,7 @@ int merc_hom_shuffle(struct homun_data *hd)
struct map_session_data *sd;
int lv, i, skillpts;
unsigned int exp;
- struct skill b_skill[MAX_HOMUNSKILL];
+ struct s_skill b_skill[MAX_HOMUNSKILL];
if (!merc_is_hom_active(hd))
return 0;
diff --git a/src/map/skill.c b/src/map/skill.c
index 1a11d9a0f..e0dddd1f3 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -38,11 +38,14 @@
#define SKILLUNITTIMER_INTERVAL 100
-//Guild Skills are shifted to these to make them stick into the skill array.
+
+// ranges reserved for mapping skill ids to skilldb offsets
#define GD_SKILLRANGEMIN 900
#define GD_SKILLRANGEMAX GD_SKILLRANGEMIN+MAX_GUILDSKILL
#define HM_SKILLRANGEMIN 800
#define HM_SKILLRANGEMAX HM_SKILLRANGEMIN+MAX_HOMUNSKILL
+#define MC_SKILLRANGEMIN 700
+#define MC_SKILLRANGEMAX MC_SKILLRANGEMIN+MAX_MERCSKILL
static struct eri *skill_unit_ers = NULL; //For handling skill_unit's [Skotlex]
static struct eri *skill_timer_ers = NULL; //For handling skill_timerskills [Skotlex]
@@ -73,17 +76,23 @@ int skill_name2id(const char* name)
/// Returns the skill's array index, or 0 (Unknown Skill).
int skill_get_index( int id )
{
- // avoid ranges reserved for mapping guild/homun skills
- if( id >= GD_SKILLRANGEMIN && id <= GD_SKILLRANGEMAX )
- return 0;
- if( id >= HM_SKILLRANGEMIN && id <= HM_SKILLRANGEMAX )
+ // avoid ranges reserved for mapping guild/homun/mercenary skills
+ if( id >= GD_SKILLRANGEMIN && id <= GD_SKILLRANGEMAX
+ || id >= HM_SKILLRANGEMIN && id <= HM_SKILLRANGEMAX
+ || id >= MC_SKILLRANGEMIN && id <= MC_SKILLRANGEMAX )
return 0;
- // map skill number to skill id
+ // map skill id to skill db index
if( id >= GD_SKILLBASE )
id = GD_SKILLRANGEMIN + id - GD_SKILLBASE;
+ else
if( id >= HM_SKILLBASE )
id = HM_SKILLRANGEMIN + id - HM_SKILLBASE;
+ else
+ if( id >= MC_SKILLBASE )
+ id = MC_SKILLRANGEMIN + id - MC_SKILLBASE;
+ else
+ ; // identity
// validate result
if( id <= 0 || id >= MAX_SKILL_DB )
@@ -10791,14 +10800,14 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current)
{// id,range,hit,inf,element,nk,splash,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count,name,description
int id = atoi(split[0]);
int i;
- if( id >= GD_SKILLRANGEMIN && id <= GD_SKILLRANGEMAX ) {
- ShowWarning("skill_parse_row_skilldb: Skill id %d is forbidden (interferes with guild skill mapping)!\n");
- return false;
- }
- if( id >= HM_SKILLRANGEMIN && id <= HM_SKILLRANGEMAX ) {
- ShowWarning("skill_parse_row_skilldb: Skill id %d is forbidden (interferes with homunculus skill mapping)!\n");
+ if( id >= GD_SKILLRANGEMIN && id <= GD_SKILLRANGEMAX
+ || id >= HM_SKILLRANGEMIN && id <= HM_SKILLRANGEMAX
+ || id >= MC_SKILLRANGEMIN && id <= MC_SKILLRANGEMAX )
+ {
+ ShowWarning("skill_parse_row_skilldb: Skill id %d is forbidden (interferes with guild/homun/mercenary skill mapping)!\n");
return false;
}
+
i = skill_get_index(id);
if( !i ) // invalid skill id
return false;
diff --git a/src/map/skill.h b/src/map/skill.h
index 03557960d..2509fdf25 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -349,7 +349,7 @@ enum {
ST_WATER,
};
-enum s_skill {
+enum e_skill {
NV_BASIC = 1,
SM_SWORD,
diff --git a/src/map/status.c b/src/map/status.c
index bbc22363e..3341318d0 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1595,7 +1595,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
static int calculating = 0; //Check for recursive call preemption. [Skotlex]
struct status_data b_status, *status;
const struct status_change *sc = &sd->sc;
- struct skill b_skill[MAX_SKILL];
+ struct s_skill b_skill[MAX_SKILL];
int b_weight,b_max_weight;
int i,index;