瀏覽代碼

Macro clean up for Element, Race, Race2, Class, & Size validation check

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Cydh Ramdh 11 年之前
父節點
當前提交
cd41c6d028
共有 12 個文件被更改,包括 243 次插入236 次删除
  1. 1 1
      src/char/char_cnslif.c
  2. 1 1
      src/char/char_logif.c
  3. 5 5
      src/map/battle.c
  4. 1 1
      src/map/battle.h
  5. 1 1
      src/map/elemental.c
  6. 8 2
      src/map/map.h
  7. 1 1
      src/map/mercenary.c
  8. 2 2
      src/map/mob.c
  9. 2 0
      src/map/mob.h
  10. 199 203
      src/map/pc.c
  11. 6 6
      src/map/pc.h
  12. 16 13
      src/map/script.c

+ 1 - 1
src/char/char_cnslif.c

@@ -96,4 +96,4 @@ void do_init_chcnslif(void){
 		add_timer_func_list(cnslif_console_timer, "cnslif_console_timer");
 		add_timer_interval(gettick()+1000, cnslif_console_timer, 0, 0, 1000); //start in 1s each 1sec
 	}
-}
+}

+ 1 - 1
src/char/char_logif.c

@@ -771,4 +771,4 @@ void do_final_chlogif(void)
 		do_close(login_fd);
 		login_fd = -1;
 	}
-}
+}

+ 5 - 5
src/map/battle.c

@@ -35,7 +35,7 @@
 #include <string.h>
 #include <math.h>
 
-int attr_fix_table[4][ELE_NONE][ELE_NONE];
+int attr_fix_table[4][ELE_MAX][ELE_MAX];
 
 struct Battle_Config battle_config;
 static struct eri *delay_damage_ers; //For battle delay damage structures.
@@ -310,9 +310,9 @@ int battle_delay_damage(unsigned int tick, int amotion, struct block_list *src,
 }
 
 int battle_attr_ratio(int atk_elem,int def_type, int def_lv) {
-	if (atk_elem < ELE_NEUTRAL || atk_elem >= ELE_ALL)
+	if (!CHK_ELEMENT(atk_elem))
 		return 100;
-	if (def_type < ELE_NEUTRAL || def_type > ELE_ALL || def_lv < 1 || def_lv > 4)
+	if (!CHK_ELEMENT(def_type) || def_lv < 1 || def_lv > 4)
 		return 100;
 
 	return attr_fix_table[def_lv-1][atk_elem][def_type];
@@ -331,10 +331,10 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
 	if (src) sc = status_get_sc(src);
 	if (target) tsc = status_get_sc(target);
 
-	if (atk_elem < ELE_NEUTRAL || atk_elem >= ELE_ALL)
+	if (!CHK_ELEMENT(atk_elem))
 		atk_elem = rnd()%ELE_ALL;
 
-	if (def_type < ELE_NEUTRAL || def_type > ELE_ALL ||
+	if (!CHK_ELEMENT(def_type) ||
 		def_lv < 1 || def_lv > 4) {
 		ShowError("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n",atk_elem,def_type,def_lv);
 		return damage;

+ 1 - 1
src/map/battle.h

@@ -62,7 +62,7 @@ struct Damage {
 };
 
 //(Used in read pc.c,) attribute table (battle_attr_fix)
-extern int attr_fix_table[4][ELE_NONE][ELE_NONE];
+extern int attr_fix_table[4][ELE_MAX][ELE_MAX];
 
 struct map_session_data;
 struct mob_data;

+ 1 - 1
src/map/elemental.c

@@ -810,7 +810,7 @@ static bool read_elementaldb_sub(char* str[], int columns, int current) {
 	ele = atoi(str[21]);
 	status->def_ele = ele%10;
 	status->ele_lv = ele/20;
-	if( status->def_ele >= ELE_ALL ) {
+	if( !CHK_ELEMENT(status->def_ele) ) {
 		ShowWarning("read_elementaldb_sub: Elemental %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1);
 		status->def_ele = ELE_NEUTRAL;
 	}

+ 8 - 2
src/map/map.h

@@ -341,6 +341,7 @@ enum e_race2 {
 };
 
 enum e_elemen {
+	ELE_NONE=-1,
 	ELE_NEUTRAL=0,
 	ELE_WATER,
 	ELE_EARTH,
@@ -352,7 +353,7 @@ enum e_elemen {
 	ELE_GHOST,
 	ELE_UNDEAD,
 	ELE_ALL,
-	ELE_NONE
+	ELE_MAX
 };
 
 enum mob_ai {
@@ -476,7 +477,7 @@ enum _sp {
 	SP_EMATK, SP_SP_GAIN_RACE_ATTACK, SP_HP_GAIN_RACE_ATTACK, SP_SKILL_USE_SP_RATE, //2046-2049
 	SP_SKILL_COOLDOWN,SP_SKILL_FIXEDCAST, SP_SKILL_VARIABLECAST, SP_FIXCASTRATE, SP_VARCASTRATE, //2050-2054
 	SP_SKILL_USE_SP,SP_MAGIC_ATK_ELE, SP_ADD_FIXEDCAST, SP_ADD_VARIABLECAST,  //2055-2058
-	SP_DEF_SET,SP_MDEF_SET,SP_HP_VANISH_RATE,  //2059-2061
+	SP_SET_DEF_RACE,SP_SET_MDEF_RACE,SP_HP_VANISH_RATE,  //2059-2061
 
 	SP_IGNORE_DEF_CLASS, SP_DEF_RATIO_ATK_CLASS, SP_ADDCLASS, SP_SUBCLASS, SP_MAGIC_ADDCLASS, //2062-2066
 	SP_WEAPON_COMA_CLASS, SP_IGNORE_MDEF_CLASS_RATE, SP_EXP_ADDCLASS, SP_ADD_CLASS_DROP_ITEM, //2067-2070
@@ -866,6 +867,11 @@ void do_reconnect_map(void); //Invoked on map-char reconnection [Skotlex]
 void map_addmap2db(struct map_data *m);
 void map_removemapdb(struct map_data *m);
 
+#define CHK_ELEMENT(ele) ((ele) > ELE_NONE && (ele) < ELE_MAX) /// Check valid Element
+#define CHK_RACE(race) ((race) > RC_NONE_ && (race) < RC_MAX) /// Check valid Race
+#define CHK_RACE2(race2) ((race2) >= RC2_NONE && (race2) < RC2_MAX) /// Check valid Race2
+#define CHK_CLASS(class_) ((class_) > CLASS_NONE && (class_) < CLASS_MAX) /// Check valid Class
+
 //Options read in cli
 extern char *INTER_CONF_NAME;
 extern char *LOG_CONF_NAME;

+ 1 - 1
src/map/mercenary.c

@@ -516,7 +516,7 @@ static bool mercenary_readdb_sub(char* str[], int columns, int current)
 	ele = atoi(str[21]);
 	status->def_ele = ele%10;
 	status->ele_lv = ele/20;
-	if( status->def_ele >= ELE_ALL )
+	if( !CHK_ELEMENT(status->def_ele) )
 	{
 		ShowWarning("Mercenary %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1);
 		status->def_ele = ELE_NEUTRAL;

+ 2 - 2
src/map/mob.c

@@ -3770,7 +3770,7 @@ static bool mob_parse_dbrow(char** str)
 	i = atoi(str[24]); //Element
 	status->def_ele = i%10;
 	status->ele_lv = i/20;
-	if (status->def_ele >= ELE_ALL) {
+	if (!CHK_ELEMENT(status->def_ele)) {
 		ShowError("mob_parse_dbrow: Invalid element type %d for monster ID %d (max=%d).\n", status->def_ele, mob_id, ELE_ALL-1);
 		return false;
 	}
@@ -4508,7 +4508,7 @@ static bool mob_readdb_race2(char* fields[], int columns, int current)
 
 	race = atoi(fields[0]);
 
-	if (race < RC2_NONE || race >= RC2_MAX)
+	if (!CHK_RACE2(race))
 	{
 		ShowWarning("mob_readdb_race2: Unknown race2 %d.\n", race);
 		return false;

+ 2 - 0
src/map/mob.h

@@ -315,4 +315,6 @@ void mob_reload(void);
 void mvptomb_create(struct mob_data *md, char *killer, time_t time);
 void mvptomb_destroy(struct mob_data *md);
 
+#define CHK_MOBSIZE(size) ((size) >= SZ_SMALL && (size) < SZ_MAX) /// Check valid Monster Size
+
 #endif /* _MOB_H_ */

文件差異過大導致無法顯示
+ 199 - 203
src/map/pc.c


+ 6 - 6
src/map/pc.h

@@ -73,7 +73,7 @@ struct weapon_data {
 	int def_ratio_atk_ele;
 	int def_ratio_atk_race;
 	int def_ratio_atk_class;
-	int addele[ELE_NONE];
+	int addele[ELE_MAX];
 	int addrace[RC_MAX];
 	int addclass[CLASS_MAX];
 	int addrace2[RC2_MAX];
@@ -314,26 +314,26 @@ struct map_session_data {
 
 	// here start arrays to be globally zeroed at the beginning of status_calc_pc()
 	int param_bonus[6],param_equip[6]; //Stores card/equipment bonuses.
-	int subele[ELE_NONE];
+	int subele[ELE_MAX];
 	int subrace[RC_MAX];
 	int subclass[CLASS_MAX];
 	int subrace2[RC2_MAX];
 	int subsize[SZ_MAX];
 	short reseff[SC_COMMON_MAX-SC_COMMON_MIN+1]; //TODO: Make this for all SC?
-	int weapon_coma_ele[ELE_NONE];
+	int weapon_coma_ele[ELE_MAX];
 	int weapon_coma_race[RC_MAX];
 	int weapon_coma_class[CLASS_MAX];
 	int weapon_atk[16];
 	int weapon_atk_rate[16];
-	int arrow_addele[ELE_NONE];
+	int arrow_addele[ELE_MAX];
 	int arrow_addrace[RC_MAX];
 	int arrow_addclass[CLASS_MAX];
 	int arrow_addsize[SZ_MAX];
-	int magic_addele[ELE_NONE];
+	int magic_addele[ELE_MAX];
 	int magic_addrace[RC_MAX];
 	int magic_addclass[CLASS_MAX];
 	int magic_addsize[SZ_MAX];
-	int magic_atk_ele[ELE_NONE];
+	int magic_atk_ele[ELE_MAX];
 	int critaddrace[RC_MAX];
 	int expaddrace[RC_MAX];
 	int expaddclass[CLASS_MAX];

+ 16 - 13
src/map/script.c

@@ -6509,7 +6509,8 @@ BUILDIN_FUNC(getitem2)
 {
 	int amount, get_count, i;
 	unsigned short nameid;
-	int iden, ref, attr, c1, c2, c3, c4;
+	int iden, ref, attr;
+	unsigned short c1, c2, c3, c4;
 	char bound = BOUND_NONE;
 	struct item_data *item_data = NULL;
 	struct item item_tmp;
@@ -6546,6 +6547,7 @@ BUILDIN_FUNC(getitem2)
 			ShowError("buildin_getitem2: Nonexistant item %s requested (by conv_str).\n", name);
 			return SCRIPT_CMD_FAILURE; //No item created.
 		}
+		nameid = item_data->nameid;
 	} else {
 		nameid = conv_num(st,data);
 		if( (item_data = itemdb_exists(nameid)) == NULL ){
@@ -6558,17 +6560,18 @@ BUILDIN_FUNC(getitem2)
 	iden = script_getnum(st,4);
 	ref = script_getnum(st,5);
 	attr = script_getnum(st,6);
-	c1 = (short)script_getnum(st,7);
-	c2 = (short)script_getnum(st,8);
-	c3 = (short)script_getnum(st,9);
-	c4 = (short)script_getnum(st,10);
+	c1 = (unsigned short)script_getnum(st,7);
+	c2 = (unsigned short)script_getnum(st,8);
+	c3 = (unsigned short)script_getnum(st,9);
+	c4 = (unsigned short)script_getnum(st,10);
 
-	if(item_data) {
+	if( item_data ) {
 		memset(&item_tmp,0,sizeof(item_tmp));
-		if(item_data->type == IT_WEAPON || item_data->type == IT_ARMOR || item_data->type == IT_SHADOWGEAR ) {
-			if(ref > MAX_REFINE) ref = MAX_REFINE;
+		if( item_data->type == IT_WEAPON || item_data->type == IT_ARMOR || item_data->type == IT_SHADOWGEAR ) {
+			if(ref > MAX_REFINE)
+				ref = MAX_REFINE;
 		}
-		else if(item_data->type==IT_PETEGG) {
+		else if( item_data->type == IT_PETEGG ) {
 			iden = 1;
 			ref = 0;
 		}
@@ -6581,10 +6584,10 @@ BUILDIN_FUNC(getitem2)
 		item_tmp.identify = iden;
 		item_tmp.refine = ref;
 		item_tmp.attribute = attr;
-		item_tmp.card[0] = (short)c1;
-		item_tmp.card[1] = (short)c2;
-		item_tmp.card[2] = (short)c3;
-		item_tmp.card[3] = (short)c4;
+		item_tmp.card[0] = c1;
+		item_tmp.card[1] = c2;
+		item_tmp.card[2] = c3;
+		item_tmp.card[3] = c4;
 		item_tmp.bound = bound;
 
 		//Check if it's stackable.

部分文件因文件數量過多而無法顯示