Browse Source

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).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13012 54d463be-8e91-2dee-dedb-b68131a5f0ec

ultramage 17 years ago
parent
commit
582c36c11e
7 changed files with 36 additions and 20 deletions
  1. 3 0
      Changelog-Trunk.txt
  2. 1 1
      src/char_sql/char.c
  3. 8 4
      src/common/mmo.h
  4. 1 1
      src/map/mercenary.c
  5. 21 12
      src/map/skill.c
  6. 1 1
      src/map/skill.h
  7. 1 1
      src/map/status.c

+ 3 - 0
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.

+ 1 - 1
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;

+ 8 - 4
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

+ 1 - 1
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;

+ 21 - 12
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;

+ 1 - 1
src/map/skill.h

@@ -349,7 +349,7 @@ enum {
 	ST_WATER,
 };
 
-enum s_skill {
+enum e_skill {
 	NV_BASIC = 1,
 
 	SM_SWORD,

+ 1 - 1
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;