diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/char_sql/char.c | 2 | ||||
-rw-r--r-- | src/common/mmo.h | 12 | ||||
-rw-r--r-- | src/map/mercenary.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 33 | ||||
-rw-r--r-- | src/map/skill.h | 2 | ||||
-rw-r--r-- | src/map/status.c | 2 |
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; |