diff --git a/src/char/char.c b/src/char/char.c index c99cbdea28..45e041d7fc 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1550,7 +1550,7 @@ int char_delete_char_sql(uint32 char_id){ Sql_GetData(sql_handle, 8, &data, NULL); mother_id = atoi(data); Sql_GetData(sql_handle, 9, &data, NULL); elemental_id = atoi(data); - Sql_EscapeStringLen(sql_handle, esc_name, name, min(len, NAME_LENGTH)); + Sql_EscapeStringLen(sql_handle, esc_name, name, zmin(len, NAME_LENGTH)); Sql_FreeResult(sql_handle); //check for config char del condition [Lupus] @@ -1715,16 +1715,16 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) buf = WBUFP(buffer,0); WBUFL(buf,0) = p->char_id; - WBUFL(buf,4) = min(p->base_exp, INT32_MAX); + WBUFL(buf,4) = umin(p->base_exp, INT32_MAX); WBUFL(buf,8) = p->zeny; - WBUFL(buf,12) = min(p->job_exp, INT32_MAX); + WBUFL(buf,12) = umin(p->job_exp, INT32_MAX); WBUFL(buf,16) = p->job_level; WBUFL(buf,20) = 0; // probably opt1 WBUFL(buf,24) = 0; // probably opt2 WBUFL(buf,28) = p->option; WBUFL(buf,32) = p->karma; WBUFL(buf,36) = p->manner; - WBUFW(buf,40) = min(p->status_point, INT16_MAX); + WBUFW(buf,40) = umin(p->status_point, INT16_MAX); WBUFL(buf,42) = p->hp; WBUFL(buf,46) = p->max_hp; offset+=4; @@ -1745,7 +1745,7 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) WBUFW(buf,56) = p->option&(0x20|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000) ? 0 : p->weapon; WBUFW(buf,58) = p->base_level; - WBUFW(buf,60) = min(p->skill_point, INT16_MAX); + WBUFW(buf,60) = umin(p->skill_point, INT16_MAX); WBUFW(buf,62) = p->head_bottom; WBUFW(buf,64) = p->shield; WBUFW(buf,66) = p->head_top; @@ -1753,12 +1753,12 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) WBUFW(buf,70) = p->hair_color; WBUFW(buf,72) = p->clothes_color; memcpy(WBUFP(buf,74), p->name, NAME_LENGTH); - WBUFB(buf,98) = min(p->str, UINT8_MAX); - WBUFB(buf,99) = min(p->agi, UINT8_MAX); - WBUFB(buf,100) = min(p->vit, UINT8_MAX); - WBUFB(buf,101) = min(p->int_, UINT8_MAX); - WBUFB(buf,102) = min(p->dex, UINT8_MAX); - WBUFB(buf,103) = min(p->luk, UINT8_MAX); + WBUFB(buf,98) = u16min(p->str, UINT8_MAX); + WBUFB(buf,99) = u16min(p->agi, UINT8_MAX); + WBUFB(buf,100) = u16min(p->vit, UINT8_MAX); + WBUFB(buf,101) = u16min(p->int_, UINT8_MAX); + WBUFB(buf,102) = u16min(p->dex, UINT8_MAX); + WBUFB(buf,103) = u16min(p->luk, UINT8_MAX); WBUFW(buf,104) = p->slot; WBUFW(buf,106) = ( p->rename > 0 ) ? 0 : 1; offset += 2; @@ -1956,7 +1956,7 @@ void char_read_fame_list(void) smith_fame_list[i].fame = atoi(data); // name Sql_GetData(sql_handle, 2, &data, &len); - memcpy(smith_fame_list[i].name, data, min(len, NAME_LENGTH)); + memcpy(smith_fame_list[i].name, data, zmin(len, NAME_LENGTH)); } // Build Alchemist ranking list if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`fame`,`name` FROM `%s` WHERE `fame`>0 AND (`class`='%d' OR `class`='%d' OR `class`='%d' OR `class`='%d' OR `class`='%d' OR `class`='%d') ORDER BY `fame` DESC LIMIT 0,%d", schema_config.char_db, JOB_ALCHEMIST, JOB_CREATOR, JOB_BABY_ALCHEMIST, JOB_GENETIC, JOB_GENETIC_T, JOB_BABY_GENETIC, fame_list_size_chemist) ) @@ -1971,7 +1971,7 @@ void char_read_fame_list(void) chemist_fame_list[i].fame = atoi(data); // name Sql_GetData(sql_handle, 2, &data, &len); - memcpy(chemist_fame_list[i].name, data, min(len, NAME_LENGTH)); + memcpy(chemist_fame_list[i].name, data, zmin(len, NAME_LENGTH)); } // Build Taekwon ranking list if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`fame`,`name` FROM `%s` WHERE `fame`>0 AND (`class`='%d') ORDER BY `fame` DESC LIMIT 0,%d", schema_config.char_db, JOB_TAEKWON, fame_list_size_taekwon) ) @@ -1986,7 +1986,7 @@ void char_read_fame_list(void) taekwon_fame_list[i].fame = atoi(data); // name Sql_GetData(sql_handle, 2, &data, &len); - memcpy(taekwon_fame_list[i].name, data, min(len, NAME_LENGTH)); + memcpy(taekwon_fame_list[i].name, data, zmin(len, NAME_LENGTH)); } Sql_FreeResult(sql_handle); } diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 05cf3fb05c..27d3a9e110 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -362,8 +362,8 @@ struct guild * inter_guild_fromsql(int guild_id) CREATE(g, struct guild, 1); g->guild_id = guild_id; - Sql_GetData(sql_handle, 0, &data, &len); memcpy(g->name, data, min(len, NAME_LENGTH)); - Sql_GetData(sql_handle, 1, &data, &len); memcpy(g->master, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 0, &data, &len); memcpy(g->name, data, zmin(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 1, &data, &len); memcpy(g->master, data, zmin(len, NAME_LENGTH)); Sql_GetData(sql_handle, 2, &data, NULL); g->guild_lv = atoi(data); Sql_GetData(sql_handle, 3, &data, NULL); g->connect_member = atoi(data); Sql_GetData(sql_handle, 4, &data, NULL); g->max_member = atoi(data); @@ -376,8 +376,8 @@ struct guild * inter_guild_fromsql(int guild_id) Sql_GetData(sql_handle, 6, &data, NULL); g->exp = strtoull(data, NULL, 10); Sql_GetData(sql_handle, 7, &data, NULL); g->next_exp = (unsigned int)strtoul(data, NULL, 10); Sql_GetData(sql_handle, 8, &data, NULL); g->skill_point = atoi(data); - Sql_GetData(sql_handle, 9, &data, &len); memcpy(g->mes1, data, min(len, sizeof(g->mes1))); - Sql_GetData(sql_handle, 10, &data, &len); memcpy(g->mes2, data, min(len, sizeof(g->mes2))); + Sql_GetData(sql_handle, 9, &data, &len); memcpy(g->mes1, data, zmin(len, sizeof(g->mes1))); + Sql_GetData(sql_handle, 10, &data, &len); memcpy(g->mes2, data, zmin(len, sizeof(g->mes2))); Sql_GetData(sql_handle, 11, &data, &len); g->emblem_len = atoi(data); Sql_GetData(sql_handle, 12, &data, &len); g->emblem_id = atoi(data); Sql_GetData(sql_handle, 13, &data, &len); @@ -428,7 +428,7 @@ struct guild * inter_guild_fromsql(int guild_id) Sql_GetData(sql_handle, 10, &data, NULL); m->position = atoi(data); if( m->position >= MAX_GUILDPOSITION ) // Fix reduction of MAX_GUILDPOSITION [PoW] m->position = MAX_GUILDPOSITION - 1; - Sql_GetData(sql_handle, 11, &data, &len); memcpy(m->name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 11, &data, &len); memcpy(m->name, data, zmin(len, NAME_LENGTH)); m->modified = GS_MEMBER_UNMODIFIED; } @@ -448,7 +448,7 @@ struct guild * inter_guild_fromsql(int guild_id) if( position < 0 || position >= MAX_GUILDPOSITION ) continue;// invalid position gpos = &g->position[position]; - Sql_GetData(sql_handle, 1, &data, &len); memcpy(gpos->name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 1, &data, &len); memcpy(gpos->name, data, zmin(len, NAME_LENGTH)); Sql_GetData(sql_handle, 2, &data, NULL); gpos->mode = atoi(data); Sql_GetData(sql_handle, 3, &data, NULL); gpos->exp_mode = atoi(data); gpos->modified = GS_POSITION_UNMODIFIED; @@ -467,7 +467,7 @@ struct guild * inter_guild_fromsql(int guild_id) Sql_GetData(sql_handle, 0, &data, NULL); a->opposition = atoi(data); Sql_GetData(sql_handle, 1, &data, NULL); a->guild_id = atoi(data); - Sql_GetData(sql_handle, 2, &data, &len); memcpy(a->name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 2, &data, &len); memcpy(a->name, data, zmin(len, NAME_LENGTH)); } //printf("- Read guild_expulsion %d from sql \n",guild_id); @@ -482,8 +482,8 @@ struct guild * inter_guild_fromsql(int guild_id) struct guild_expulsion *e = &g->expulsion[i]; Sql_GetData(sql_handle, 0, &data, NULL); e->account_id = atoi(data); - Sql_GetData(sql_handle, 1, &data, &len); memcpy(e->name, data, min(len, NAME_LENGTH)); - Sql_GetData(sql_handle, 2, &data, &len); memcpy(e->mes, data, min(len, sizeof(e->mes))); + Sql_GetData(sql_handle, 1, &data, &len); memcpy(e->name, data, zmin(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 2, &data, &len); memcpy(e->mes, data, zmin(len, sizeof(e->mes))); } //printf("- Read guild_skill %d from sql \n",guild_id); diff --git a/src/char/int_homun.c b/src/char/int_homun.c index a34dd202a8..7167b2a391 100644 --- a/src/char/int_homun.c +++ b/src/char/int_homun.c @@ -195,7 +195,7 @@ bool mapif_homunculus_load(int homun_id, struct s_homunculus* hd) Sql_GetData(sql_handle, 21, &data, NULL); hd->vaporize = atoi(data); Sql_FreeResult(sql_handle); - hd->intimacy = min(hd->intimacy,100000); + hd->intimacy = umin(hd->intimacy,100000); hd->hunger = cap_value(hd->hunger, 0, 100); // Load Homunculus Skill diff --git a/src/char/int_party.c b/src/char/int_party.c index 290e753259..72ea30a336 100644 --- a/src/char/int_party.c +++ b/src/char/int_party.c @@ -217,7 +217,7 @@ struct party_data *inter_party_fromsql(int party_id) return NULL; p->party.party_id = party_id; - Sql_GetData(sql_handle, 1, &data, &len); memcpy(p->party.name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 1, &data, &len); memcpy(p->party.name, data, zmin(len, NAME_LENGTH)); Sql_GetData(sql_handle, 2, &data, NULL); p->party.exp = (atoi(data) ? 1 : 0); Sql_GetData(sql_handle, 3, &data, NULL); p->party.item = atoi(data); Sql_GetData(sql_handle, 4, &data, NULL); leader_id = atoi(data); @@ -235,7 +235,7 @@ struct party_data *inter_party_fromsql(int party_id) m = &p->party.member[i]; Sql_GetData(sql_handle, 0, &data, NULL); m->account_id = atoi(data); Sql_GetData(sql_handle, 1, &data, NULL); m->char_id = atoi(data); - Sql_GetData(sql_handle, 2, &data, &len); memcpy(m->name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 2, &data, &len); memcpy(m->name, data, zmin(len, NAME_LENGTH)); Sql_GetData(sql_handle, 3, &data, NULL); m->lv = atoi(data); Sql_GetData(sql_handle, 4, &data, NULL); m->map = mapindex_name2id(data); Sql_GetData(sql_handle, 5, &data, NULL); m->online = (atoi(data) ? 1 : 0); diff --git a/src/char/int_pet.c b/src/char/int_pet.c index 023af8249c..5586ed5335 100644 --- a/src/char/int_pet.c +++ b/src/char/int_pet.c @@ -76,7 +76,7 @@ int inter_pet_fromsql(int pet_id, struct s_pet* p) { p->pet_id = pet_id; Sql_GetData(sql_handle, 1, &data, NULL); p->class_ = atoi(data); - Sql_GetData(sql_handle, 2, &data, &len); memcpy(p->name, data, min(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 2, &data, &len); memcpy(p->name, data, zmin(len, NAME_LENGTH)); Sql_GetData(sql_handle, 3, &data, NULL); p->account_id = atoi(data); Sql_GetData(sql_handle, 4, &data, NULL); p->char_id = atoi(data); Sql_GetData(sql_handle, 5, &data, NULL); p->level = atoi(data); diff --git a/src/char/inter.c b/src/char/inter.c index de8c34188a..e1304c2647 100644 --- a/src/char/inter.c +++ b/src/char/inter.c @@ -1040,7 +1040,7 @@ int mapif_parse_WisRequest(int fd) // to be sure of the correct name, rewrite it Sql_GetData(sql_handle, 0, &data, &len); memset(name, 0, NAME_LENGTH); - memcpy(name, data, min(len, NAME_LENGTH)); + memcpy(name, data, zmin(len, NAME_LENGTH)); // if source is destination, don't ask other servers. if( strncmp((const char*)RFIFOP(fd,4), name, NAME_LENGTH) == 0 ) { diff --git a/src/common/cbasetypes.h b/src/common/cbasetypes.h index c9a04d425b..aa9f5e70bd 100644 --- a/src/common/cbasetypes.h +++ b/src/common/cbasetypes.h @@ -286,14 +286,6 @@ typedef char bool; #define swap(a,b) if (a != b) ((a ^= b), (b ^= a), (a ^= b)) #define swap_ptr(a,b) if ((a) != (b)) ((a) = (void*)((intptr_t)(a) ^ (intptr_t)(b)), (b) = (void*)((intptr_t)(a) ^ (intptr_t)(b)), (a) = (void*)((intptr_t)(a) ^ (intptr_t)(b))) -#ifndef max -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#endif - -#ifndef min -#define min(a,b) (((a) < (b)) ? (a) : (b)) -#endif - ////////////////////////////////////////////////////////////////////////// // should not happen #ifndef NULL @@ -358,7 +350,7 @@ typedef char bool; #define TOUPPER(c) (toupper((unsigned char)(c))) ////////////////////////////////////////////////////////////////////////// -// length of a static array +// length of a static array (size_t) #define ARRAYLENGTH(A) ( sizeof(A)/sizeof((A)[0]) ) ////////////////////////////////////////////////////////////////////////// @@ -404,5 +396,35 @@ void SET_FUNCPOINTER(T1& var, T2 p) #define SET_FUNCPOINTER(var,p) (var) = (p) #endif +//#ifndef max +//#define max(a,b) (((a) > (b)) ? (a) : (b)) +//wish we could have template in C +static inline int max(int a, int b){ return (a > b) ? a : b; } //default is int +static inline int8 i8max(int8 a, int8 b){ return (a > b) ? a : b; } +static inline int16 i16max(int16 a, int16 b){ return (a > b) ? a : b; } +static inline int32 i32max(int32 a, int32 b){ return (a > b) ? a : b; } +static inline int64 i64max(int64 a, int64 b){ return (a > b) ? a : b; } +static inline uint32 umax(uint32 a, uint32 b){ return (a > b) ? a : b; } +static inline uint8 u8max(uint8 a, uint8 b){ return (a > b) ? a : b; } +static inline uint16 u16max(uint16 a, uint16 b){ return (a > b) ? a : b; } +static inline uint32 u32max(uint32 a, uint32 b){ return (a > b) ? a : b; } +static inline uint64 u64max(uint64 a, uint64 b){ return (a > b) ? a : b; } +static inline size_t zmax(size_t a, size_t b){ return (a > b) ? a : b; } //cause those varie +//#endif + +//#ifndef min +//#define min(a,b) (((a) < (b)) ? (a) : (b)) +//#endif +static inline int min(int a, int b){ return (a < b) ? a : b; } //default is int +static inline int8 i8min(int8 a, int8 b){ return (a < b) ? a : b; } +static inline int16 i16min(int16 a, int16 b){ return (a < b) ? a : b; } +static inline int32 i32min(int32 a, int32 b){ return (a < b) ? a : b; } +static inline int64 i64min(int64 a, int64 b){ return (a < b) ? a : b; } +static inline uint32 umin(uint32 a, uint32 b){ return (a < b) ? a : b; } +static inline uint8 u8min(uint8 a, uint8 b){ return (a < b) ? a : b; } +static inline uint16 u16min(uint16 a, uint16 b){ return (a < b) ? a : b; } +static inline uint32 u32min(uint32 a, uint32 b){ return (a < b) ? a : b; } +static inline uint64 u64min(uint64 a, uint64 b){ return (a < b) ? a : b; } +static inline size_t zmin(size_t a, size_t b){ return (a < b) ? a : b; } #endif /* _CBASETYPES_H_ */ diff --git a/src/common/mapindex.c b/src/common/mapindex.c index d55ce9d3ec..19d187de17 100644 --- a/src/common/mapindex.c +++ b/src/common/mapindex.c @@ -33,7 +33,7 @@ const char* mapindex_getmapname(const char* string, char* output) { if (len >= 4 && stricmp(&string[len-4], ".gat") == 0) len -= 4; // strip .gat extension - len = min(len, MAP_NAME_LENGTH-1); + len = zmin(len, MAP_NAME_LENGTH-1); safestrncpy(dest, string, len+1); memset(&dest[len], '\0', MAP_NAME_LENGTH-len); diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 37e48e8cec..a376997f65 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -3322,11 +3322,11 @@ ACMD_FUNC(lostskill) *------------------------------------------*/ ACMD_FUNC(spiritball) { - int max_spiritballs; + uint32 max_spiritballs; int number; nullpo_retr(-1, sd); - max_spiritballs = min(ARRAYLENGTH(sd->spirit_timer), 0x7FFF); + max_spiritballs = zmin(ARRAYLENGTH(sd->spirit_timer), 0x7FFF); if( !message || !*message || (number = atoi(message)) < 0 || number > max_spiritballs ) { @@ -3854,8 +3854,9 @@ ACMD_FUNC(partysharelvl) { if(!message || !*message) { clif_displaymessage(fd, msg_txt(sd,1322)); // Please enter an amount. return -1; - } else + } else { share_lvl = min(abs(atoi(message)),MAX_LEVEL); + } if(intif_party_sharelvlupdate(share_lvl)) //Successfully updated clif_displaymessage(fd, msg_txt(sd,1478)); // Party share level range has been changed successfully. diff --git a/src/map/battle.c b/src/map/battle.c index 7eb7439112..1ca53161fb 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -492,7 +492,7 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d else damage = damage + (damage * (ratio - 100) / 100); - return max(damage,0); + return i64max(damage,0); } /** @@ -1470,7 +1470,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam if (flag & BF_LONG) damage = damage * battle_config.pk_long_damage_rate / 100; } - damage = max(damage,1); + damage = i64max(damage,1); } if(battle_config.skill_min_damage && damage > 0 && damage < div_) { @@ -1550,7 +1550,7 @@ int64 battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int64 damage = damage * battle_config.bg_long_damage_rate / 100; } - damage = max(damage,1); //min 1 damage + damage = i64max(damage,1); //min 1 damage return damage; } @@ -1619,7 +1619,7 @@ int64 battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int64 if (flag & BF_LONG) damage = damage * battle_config.gvg_long_damage_rate / 100; } - damage = max(damage,1); + damage = i64max(damage,1); return damage; } @@ -4478,7 +4478,6 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list if (sd) { int i = sd->ignore_def_by_race[tstatus->race] + sd->ignore_def_by_race[RC_ALL]; - if (i) { i = min(i,100); //cap it to 100 for 0 def min def1 -= def1 * i / 100; @@ -4487,9 +4486,8 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list //Kagerou/Oboro Earth Charm effect +10% eDEF if(sd->spiritcharm_type == CHARM_TYPE_LAND && sd->spiritcharm > 0) { - short i = 10 * sd->spiritcharm; - - def1 = (def1 * (100 + i)) / 100; + short si = 10 * sd->spiritcharm; + def1 = (def1 * (100 + si)) / 100; } } @@ -6665,7 +6663,7 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i if (flag & BF_SHORT) {//Bounces back part of the damage. if ( !status_reflect && sd && sd->bonus.short_weapon_damage_return ) { rdamage += damage * sd->bonus.short_weapon_damage_return / 100; - rdamage = max(rdamage,1); + rdamage = i64max(rdamage,1); } else if( status_reflect && sc && sc->count ) { if( sc->data[SC_REFLECTSHIELD] ) { struct status_change_entry *sce_d; @@ -6731,7 +6729,7 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i #ifdef RENEWAL rdamage = cap_value(rdamage, 1, max_damage); #else - rdamage = max(rdamage,1); + rdamage = i64max(rdamage,1); #endif } diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c index 4824a4f10f..5bd377441e 100644 --- a/src/map/buyingstore.c +++ b/src/map/buyingstore.c @@ -678,7 +678,7 @@ void do_init_buyingstore_autotrade( void ) { Sql_GetData(mmysql_handle, 1, &data, NULL); at->account_id = atoi(data); Sql_GetData(mmysql_handle, 2, &data, NULL); at->char_id = atoi(data); Sql_GetData(mmysql_handle, 3, &data, NULL); at->sex = (data[0] == 'F') ? 0 : 1; - Sql_GetData(mmysql_handle, 4, &data, &len); safestrncpy(at->title, data, min(len + 1, MESSAGE_SIZE)); + Sql_GetData(mmysql_handle, 4, &data, &len); safestrncpy(at->title, data, zmin(len + 1, MESSAGE_SIZE)); Sql_GetData(mmysql_handle, 5, &data, NULL); at->limit = atoi(data); Sql_GetData(mmysql_handle, 6, &data, NULL); at->dir = atoi(data); Sql_GetData(mmysql_handle, 7, &data, NULL); at->head_dir = atoi(data); diff --git a/src/map/clif.c b/src/map/clif.c index 3e7b91c90d..aa8f0021b7 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1433,7 +1433,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) #else WBUFW(buf,35)=cap_value(status->rhw.atk2+status->batk, 0, INT16_MAX); #endif - WBUFW(buf,37)=min(status->matk_max, INT16_MAX); //FIXME capping to INT16 here is too late + WBUFW(buf,37)=i16min(status->matk_max, INT16_MAX); //FIXME capping to INT16 here is too late WBUFW(buf,39)=status->hit; if (battle_config.hom_setting&HOMSET_DISPLAY_LUK) WBUFW(buf,41)=status->luk/3 + 1; //crit is a +1 decimal value! Just display purpose.[Vicious] @@ -16869,14 +16869,14 @@ void clif_search_store_info_ack(struct map_session_data* sd) unsigned int i, start, end; start = sd->searchstore.pages*SEARCHSTORE_RESULTS_PER_PAGE; - end = min(sd->searchstore.count, start+SEARCHSTORE_RESULTS_PER_PAGE); + end = umin(sd->searchstore.count, start+SEARCHSTORE_RESULTS_PER_PAGE); WFIFOHEAD(fd,7+(end-start)*blocksize); WFIFOW(fd,0) = 0x836; WFIFOW(fd,2) = 7+(end-start)*blocksize; WFIFOB(fd,4) = !sd->searchstore.pages; WFIFOB(fd,5) = searchstore_querynext(sd); - WFIFOB(fd,6) = (unsigned char)min(sd->searchstore.uses, UINT8_MAX); + WFIFOB(fd,6) = (unsigned char)umin(sd->searchstore.uses, UINT8_MAX); for( i = start; i < end; i++ ) { struct s_search_store_info_item* ssitem = &sd->searchstore.items[i]; @@ -16944,7 +16944,7 @@ void clif_open_search_store_info(struct map_session_data* sd) WFIFOW(fd,0) = 0x83a; WFIFOW(fd,2) = sd->searchstore.effect; #if PACKETVER > 20100701 - WFIFOB(fd,4) = (unsigned char)min(sd->searchstore.uses, UINT8_MAX); + WFIFOB(fd,4) = (unsigned char)umin(sd->searchstore.uses, UINT8_MAX); #endif WFIFOSET(fd,packet_len(0x83a)); } diff --git a/src/map/map.c b/src/map/map.c index ad3cab8c48..7e331e4d7a 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -565,10 +565,10 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis va_list ap; m = center->m; - x0 = max(center->x - range, 0); - y0 = max(center->y - range, 0); - x1 = min(center->x + range, map[ m ].xs - 1); - y1 = min(center->y + range, map[ m ].ys - 1); + x0 = i16max(center->x - range, 0); + y0 = i16max(center->y - range, 0); + x1 = i16min(center->x + range, map[ m ].xs - 1); + y1 = i16min(center->y + range, map[ m ].ys - 1); if ( type&~BL_MOB ) for ( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) { @@ -633,10 +633,10 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block if ( m < 0 ) return 0; - x0 = max(center->x-range, 0); - y0 = max(center->y-range, 0); - x1 = min(center->x+range, map[m].xs-1); - y1 = min(center->y+range, map[m].ys-1); + x0 = i16max(center->x-range, 0); + y0 = i16max(center->y-range, 0); + x1 = i16min(center->x+range, map[m].xs-1); + y1 = i16min(center->y+range, map[m].ys-1); if ( type&~BL_MOB ) for( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) { @@ -707,10 +707,10 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0 if ( y1 < y0 ) swap(y0, y1); - x0 = max(x0, 0); - y0 = max(y0, 0); - x1 = min(x1, map[ m ].xs - 1); - y1 = min(y1, map[ m ].ys - 1); + x0 = i16max(x0, 0); + y0 = i16max(y0, 0); + x1 = i16min(x1, map[ m ].xs - 1); + y1 = i16min(y1, map[ m ].ys - 1); if ( type&~BL_MOB ) for( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) for( bx = x0 / BLOCK_SIZE; bx <= x1 / BLOCK_SIZE; bx++ ) @@ -755,10 +755,10 @@ int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_li va_list ap; m = center->m; - x0 = max(center->x - range, 0); - y0 = max(center->y - range, 0); - x1 = min(center->x + range, map[ m ].xs - 1); - y1 = min(center->y + range, map[ m ].ys - 1); + x0 = i16max(center->x - range, 0); + y0 = i16max(center->y - range, 0); + x1 = i16min(center->x + range, map[ m ].xs - 1); + y1 = i16min(center->y + range, map[ m ].ys - 1); if ( type&~BL_MOB ) for ( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) { @@ -823,10 +823,10 @@ int map_forcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x if ( y1 < y0 ) swap(y0, y1); - x0 = max(x0, 0); - y0 = max(y0, 0); - x1 = min(x1, map[ m ].xs - 1); - y1 = min(y1, map[ m ].ys - 1); + x0 = i16max(x0, 0); + y0 = i16max(y0, 0); + x1 = i16min(x1, map[ m ].xs - 1); + y1 = i16min(y1, map[ m ].ys - 1); if ( type&~BL_MOB ) for( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) @@ -872,7 +872,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_ int returnCount = 0; //total sum of returned values of func() [Skotlex] struct block_list *bl; int blockcount = bl_list_count, i; - int x0, x1, y0, y1; + int16 x0, x1, y0, y1; va_list ap; if ( !range ) return 0; @@ -904,10 +904,10 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_ x1 = x0 + dx - 1; } - x0 = max(x0, 0); - y0 = max(y0, 0); - x1 = min(x1, map[ m ].xs - 1); - y1 = min(y1, map[ m ].ys - 1); + x0 = i16max(x0, 0); + y0 = i16max(y0, 0); + x1 = i16min(x1, map[ m ].xs - 1); + y1 = i16min(y1, map[ m ].ys - 1); for( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) { for( bx = x0 / BLOCK_SIZE; bx <= x1 / BLOCK_SIZE; bx++ ) { @@ -931,11 +931,10 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_ } } } else { // Diagonal movement - - x0 = max(x0, 0); - y0 = max(y0, 0); - x1 = min(x1, map[ m ].xs - 1); - y1 = min(y1, map[ m ].ys - 1); + x0 = i16max(x0, 0); + y0 = i16max(y0, 0); + x1 = i16min(x1, map[ m ].xs - 1); + y1 = i16min(y1, map[ m ].ys - 1); for( by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++ ) { for( bx = x0 / BLOCK_SIZE; bx <= x1 / BLOCK_SIZE; bx++ ) { diff --git a/src/map/npc.c b/src/map/npc.c index 2230b5da92..a0651109af 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -1097,10 +1097,10 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) int xs,ys; if (range < 0) return 0; - x0 = max(x-range, 0); - y0 = max(y-range, 0); - x1 = min(x+range, map[m].xs-1); - y1 = min(y+range, map[m].ys-1); + x0 = i16max(x-range, 0); + y0 = i16max(y-range, 0); + x1 = i16min(x+range, map[m].xs-1); + y1 = i16min(y+range, map[m].ys-1); //First check for npc_cells on the range given i = 0; diff --git a/src/map/pc.c b/src/map/pc.c index 32aaa081a6..191bcc08a5 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -554,20 +554,20 @@ void pc_inventory_rentals(struct map_session_data *sd) else { expire_tick = (unsigned int)(sd->status.inventory[i].expire_time - time(NULL)) * 1000; clif_rental_time(sd->fd, sd->status.inventory[i].nameid, (int)(expire_tick / 1000)); - next_tick = min(expire_tick, next_tick); + next_tick = umin(expire_tick, next_tick); c++; } } if( c > 0 ) // min(next_tick,3600000) 1 hour each timer to keep announcing to the owner, and to avoid a but with rental time > 15 days - sd->rental_timer = add_timer(gettick() + min(next_tick,3600000), pc_inventory_rental_end, sd->bl.id, 0); + sd->rental_timer = add_timer(gettick() + umin(next_tick,3600000), pc_inventory_rental_end, sd->bl.id, 0); else sd->rental_timer = INVALID_TIMER; } -void pc_inventory_rental_add(struct map_session_data *sd, int seconds) +void pc_inventory_rental_add(struct map_session_data *sd, unsigned int seconds) { - int tick = seconds * 1000; + unsigned int tick = seconds * 1000; if( sd == NULL ) return; @@ -581,7 +581,7 @@ void pc_inventory_rental_add(struct map_session_data *sd, int seconds) sd->rental_timer = add_timer(gettick() + tick, pc_inventory_rental_end, sd->bl.id, 0); } } else - sd->rental_timer = add_timer(gettick() + min(tick,3600000), pc_inventory_rental_end, sd->bl.id, 0); + sd->rental_timer = add_timer(gettick() + umin(tick,3600000), pc_inventory_rental_end, sd->bl.id, 0); } /** @@ -2051,14 +2051,14 @@ static void pc_bonus_autospell_onskill(struct s_autospell *spell, int max, short /** * Add inflict effect bonus for player while attacking/atatcked * @param effect Effect array - * @param max Max array + * @param pmax Max array * @param sc SC/Effect type * @param rate Success chance * @param arrow_rate success chance if bonus comes from arrow-type item * @param flag Target flag * @param duration Duration. If 0 use default duration lookup for associated skill with level 7 **/ -static void pc_bonus_addeff(struct s_addeffect* effect, int max, enum sc_type sc, short rate, short arrow_rate, unsigned char flag, unsigned int duration) +static void pc_bonus_addeff(struct s_addeffect* effect, int pmax, enum sc_type sc, short rate, short arrow_rate, unsigned char flag, unsigned int duration) { uint16 i; @@ -2070,18 +2070,18 @@ static void pc_bonus_addeff(struct s_addeffect* effect, int max, enum sc_type sc flag |= ATF_WEAPON; //Default type: weapon. if (!duration) - duration = skill_get_time2(status_sc2skill(sc),7); + duration =(unsigned int) skill_get_time2(status_sc2skill(sc),7); - for (i = 0; i < max && effect[i].flag; i++) { + for (i = 0; i < pmax && effect[i].flag; i++) { if (effect[i].sc == sc && effect[i].flag == flag) { effect[i].rate += rate; effect[i].arrow_rate += arrow_rate; - effect[i].duration = max(effect[i].duration, duration); + effect[i].duration = umax(effect[i].duration, duration); return; } } - if (i == max) { - ShowWarning("pc_bonus_addeff: Reached max (%d) number of add effects per character!\n", max); + if (i == pmax) { + ShowWarning("pc_bonus_addeff: Reached max (%d) number of add effects per character!\n", pmax); return; } effect[i].sc = sc; @@ -2094,28 +2094,28 @@ static void pc_bonus_addeff(struct s_addeffect* effect, int max, enum sc_type sc /** * Add inflict effect bonus for player while attacking using skill * @param effect Effect array - * @param max Max array + * @param pmax Max array * @param sc SC/Effect type * @param rate Success chance * @param flag Target flag * @param duration Duration. If 0 use default duration lookup for associated skill with level 7 **/ -static void pc_bonus_addeff_onskill(struct s_addeffectonskill* effect, int max, enum sc_type sc, short rate, short skill_id, unsigned char target, unsigned int duration) +static void pc_bonus_addeff_onskill(struct s_addeffectonskill* effect, int pmax, enum sc_type sc, short rate, short skill_id, unsigned char target, unsigned int duration) { uint8 i; if (!duration) - duration = skill_get_time2(status_sc2skill(sc),7); + duration =(unsigned int) skill_get_time2(status_sc2skill(sc),7); - for( i = 0; i < max && effect[i].skill_id; i++ ) { + for( i = 0; i < pmax && effect[i].skill_id; i++ ) { if( effect[i].sc == sc && effect[i].skill_id == skill_id && effect[i].target == target ) { effect[i].rate += rate; - effect[i].duration = max(effect[i].duration, duration); + effect[i].duration = umax(effect[i].duration, duration); return; } } - if( i == max ) { - ShowWarning("pc_bonus_addeff_onskill: Reached max (%d) number of add effects on skill per character!\n", max); + if( i == pmax ) { + ShowWarning("pc_bonus_addeff_onskill: Reached max (%d) number of add effects on skill per character!\n", pmax); return; } effect[i].sc = sc; @@ -4413,7 +4413,7 @@ char pc_additem(struct map_session_data *sd,struct item *item,int amount,e_log_p clif_rental_expired(sd->fd, i, sd->status.inventory[i].nameid); pc_delitem(sd, i, sd->status.inventory[i].amount, 1, 0, LOG_TYPE_OTHER); } else { - int seconds = (int)( item->expire_time - time(NULL) ); + unsigned int seconds = ( item->expire_time - time(NULL) ); clif_rental_time(sd->fd, sd->status.inventory[i].nameid, seconds); pc_inventory_rental_add(sd, seconds); } @@ -5455,7 +5455,7 @@ bool pc_memo(struct map_session_data* sd, int pos) uint8 i; // prevent memo-ing the same map multiple times ARR_FIND( 0, MAX_MEMOPOINTS, i, sd->status.memo_point[i].map == map_id2index(sd->bl.m) ); - memmove(&sd->status.memo_point[1], &sd->status.memo_point[0], (min(i,MAX_MEMOPOINTS-1))*sizeof(struct point)); + memmove(&sd->status.memo_point[1], &sd->status.memo_point[0], (u8min(i,MAX_MEMOPOINTS-1))*sizeof(struct point)); pos = 0; } @@ -7461,7 +7461,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) if (base_penalty > 0){ //recheck after altering to speedup if (battle_config.pk_mode && src && src->type==BL_PC) base_penalty*=2; - sd->status.base_exp -= min(sd->status.base_exp, base_penalty); + sd->status.base_exp -= u32min(sd->status.base_exp, base_penalty); clif_updatestatus(sd,SP_BASEEXP); } } @@ -7474,7 +7474,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) if(job_penalty) { if (battle_config.pk_mode && src && src->type==BL_PC) job_penalty*=2; - sd->status.job_exp -= min(sd->status.job_exp, job_penalty); + sd->status.job_exp -= u32min(sd->status.job_exp, job_penalty); clif_updatestatus(sd,SP_JOBEXP); } } diff --git a/src/map/pc.h b/src/map/pc.h index f4abe66f4a..ab8ac3f4cf 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1160,7 +1160,7 @@ int map_night_timer(int tid, unsigned int tick, int id, intptr_t data); // by [y // Rental System void pc_inventory_rentals(struct map_session_data *sd); void pc_inventory_rental_clear(struct map_session_data *sd); -void pc_inventory_rental_add(struct map_session_data *sd, int seconds); +void pc_inventory_rental_add(struct map_session_data *sd, unsigned int seconds); void pc_rental_expire(struct map_session_data *sd, int i); int pc_read_motd(void); // [Valaris] diff --git a/src/map/skill.c b/src/map/skill.c index be0c7ff385..29da398230 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2659,7 +2659,7 @@ void skill_combo_toogle_inf(struct block_list* bl, uint16 skill_id, int inf){ } void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int tick){ - int duration = 0; //Set to duration the user can use a combo skill or 1 for aftercast delay of pre-skill + unsigned int duration = 0; //Set to duration the user can use a combo skill or 1 for aftercast delay of pre-skill int nodelay = 0; //Set to 1 for no walk/attack delay, set to 2 for no walk delay int target_id = bl->id; //Set to 0 if combo skill should not autotarget struct status_change_entry *sce; @@ -2751,7 +2751,7 @@ void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_li if (duration) { //Possible to chain if(sd && duration==1) duration = DIFF_TICK(sd->ud.canact_tick, tick); //Auto calc duration - duration = max(status_get_amotion(src),duration); //Never less than aMotion + duration = umax(status_get_amotion(src),duration); //Never less than aMotion sc_start4(src,src,SC_COMBO,100,skill_id,target_id,nodelay,0,duration); clif_combo_delay(src, duration); } @@ -4905,7 +4905,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint clif_spiritball(src); } skill_attack(BF_MISC, src, src, bl, skill_id, skill_lv, tick, flag); - status_set_hp(src, max(status_get_max_hp(src) / 100, 1), 0); + status_set_hp(src, umax(status_get_max_hp(src) / 100, 1), 0); status_change_end(src, SC_NEN, INVALID_TIMER); status_change_end(src, SC_HIDING, INVALID_TIMER); } @@ -10159,10 +10159,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case KO_KAZEHU_SEIRAN: case KO_DOHU_KOUKAI: if (sd) { - int type = skill_get_ele(skill_id,skill_lv); - + int ele_type = skill_get_ele(skill_id,skill_lv); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - pc_addspiritcharm(sd,skill_get_time(skill_id,skill_lv),MAX_SPIRITCHARM,type); + pc_addspiritcharm(sd,skill_get_time(skill_id,skill_lv),MAX_SPIRITCHARM,ele_type); } break; case KO_ZANZOU: diff --git a/src/map/status.c b/src/map/status.c index a6f1df1016..f9a04cc891 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2918,30 +2918,30 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) { * @return max The max value of HP or SP */ static unsigned int status_calc_maxhpsp_pc(struct map_session_data* sd, unsigned int stat, bool isHP) { - double max = 0; + double dmax = 0; uint16 idx, level, job_id; nullpo_ret(sd); job_id = pc_mapid2jobid(sd->class_,sd->status.sex); idx = pc_class2idx(job_id); - level = max(sd->status.base_level,1); + level = umax(sd->status.base_level,1); if (isHP) { //Calculates MaxHP - max = job_info[idx].base_hp[level-1] * (1 + (max(stat,1) * 0.01)) * ((sd->class_&JOBL_UPPER)?1.25:1); - max += status_get_hpbonus(&sd->bl,STATUS_BONUS_FIX); - max += (int64)(max * status_get_hpbonus(&sd->bl,STATUS_BONUS_RATE) / 100); //Aegis accuracy + dmax = job_info[idx].base_hp[level-1] * (1 + (umax(stat,1) * 0.01)) * ((sd->class_&JOBL_UPPER)?1.25:1); + dmax += status_get_hpbonus(&sd->bl,STATUS_BONUS_FIX); + dmax += (int64)(dmax * status_get_hpbonus(&sd->bl,STATUS_BONUS_RATE) / 100); //Aegis accuracy } else { //Calculates MaxSP - max = job_info[idx].base_sp[level-1] * (1 + (max(stat,1) * 0.01)) * ((sd->class_&JOBL_UPPER)?1.25:1); - max += status_get_spbonus(&sd->bl,STATUS_BONUS_FIX); - max += (int64)(max * status_get_spbonus(&sd->bl,STATUS_BONUS_RATE) / 100); //Aegis accuracy + dmax = job_info[idx].base_sp[level-1] * (1 + (umax(stat,1) * 0.01)) * ((sd->class_&JOBL_UPPER)?1.25:1); + dmax += status_get_spbonus(&sd->bl,STATUS_BONUS_FIX); + dmax += (int64)(dmax * status_get_spbonus(&sd->bl,STATUS_BONUS_RATE) / 100); //Aegis accuracy } //Make sure it's not negative before casting to unsigned int - if(max < 1) max = 1; + if(dmax < 1) dmax = 1; - return cap_value((unsigned int)max,1,UINT_MAX); + return cap_value((unsigned int)dmax,1,UINT_MAX); } /** @@ -4238,7 +4238,7 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc // Can't move if( flag&SCS_NOMOVE ) { if( !(flag&SCS_NOMOVECOND) ) - sc->cant.move += ( start ? 1 : -1 ); + sc->cant.move += ( start ? 1 : ((sc->cant.move)? -1:0) ); else if( (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) // cannot move while gospel is in effect || (sc->data[SC_BASILICA] && sc->data[SC_BASILICA]->val4 == bl->id) // Basilica caster cannot move @@ -4247,8 +4247,7 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc || (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3) || (sc->data[SC_MAGNETICFIELD] && sc->data[SC_MAGNETICFIELD]->val2 != bl->id) ) - sc->cant.move += ( start ? 1 : -1 ); - sc->cant.move = max(sc->cant.move,0); // safecheck + sc->cant.move += ( start ? 1 : ((sc->cant.move)? -1:0) ); } // Can't use skills @@ -4564,7 +4563,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) if(battle_config.hp_rate != 100) status->max_hp = (unsigned int)(battle_config.hp_rate * (status->max_hp/100.)); - status->max_hp = min(status->max_hp,(unsigned int)battle_config.max_hp); + status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp); } else status->max_hp = status_calc_maxhp(bl, b_status->max_hp); @@ -4582,7 +4581,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) if(battle_config.sp_rate != 100) status->max_sp = (unsigned int)(battle_config.sp_rate * (status->max_sp/100.)); - status->max_sp = min(status->max_sp,(unsigned int)battle_config.max_sp); + status->max_sp = umin(status->max_sp,(unsigned int)battle_config.max_sp); } else status->max_sp = status_calc_maxsp(bl, b_status->max_sp); diff --git a/src/map/storage.c b/src/map/storage.c index df9bf587b2..4de0303222 100644 --- a/src/map/storage.c +++ b/src/map/storage.c @@ -580,7 +580,8 @@ bool gstorage_additem2(struct guild_storage* stor, struct item* item, int amount for (i = 0; i < MAX_GUILD_STORAGE; i++) { if (compare_item(&stor->items[i], item)) { // Set the amount, make it fit with max amount - amount = min(amount, ((id->stack.guildstorage) ? id->stack.amount : MAX_AMOUNT) - stor->items[i].amount); + int da = ((id->stack.guildstorage) ? id->stack.amount : MAX_AMOUNT) - stor->items[i].amount; + amount = min(amount, da); if (amount != item->amount) ShowWarning("gstorage_additem2: Stack limit reached! Altered amount of item \""CL_WHITE"%s"CL_RESET"\" (%d). '"CL_WHITE"%d"CL_RESET"' -> '"CL_WHITE"%d"CL_RESET"'.\n", id->name, id->nameid, item->amount, amount); stor->items[i].amount += amount; diff --git a/src/map/vending.c b/src/map/vending.c index 97e947a2ac..0919bd6c78 100755 --- a/src/map/vending.c +++ b/src/map/vending.c @@ -567,7 +567,7 @@ void do_init_vending_autotrade(void) Sql_GetData(mmysql_handle, 1, &data, NULL); at->account_id = atoi(data); Sql_GetData(mmysql_handle, 2, &data, NULL); at->char_id = atoi(data); Sql_GetData(mmysql_handle, 3, &data, NULL); at->sex = (data[0] == 'F') ? SEX_FEMALE : SEX_MALE; - Sql_GetData(mmysql_handle, 4, &data, &len); safestrncpy(at->title, data, min(len + 1, MESSAGE_SIZE)); + Sql_GetData(mmysql_handle, 4, &data, &len); safestrncpy(at->title, data, zmin(len + 1, MESSAGE_SIZE)); Sql_GetData(mmysql_handle, 5, &data, NULL); at->dir = atoi(data); Sql_GetData(mmysql_handle, 6, &data, NULL); at->head_dir = atoi(data); Sql_GetData(mmysql_handle, 7, &data, NULL); at->sit = atoi(data);