forked from metin2/server
1
0
Fork 0

Removed MIN/MAX/MINMAX functions, upgraded to C++17, code cleanup

This commit is contained in:
Exynox 2022-11-27 22:18:08 +02:00
parent 3a74dac29e
commit 148223340c
56 changed files with 230 additions and 404 deletions

View File

@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 3.12)
# Build mode debug/release? # Build mode debug/release?
set(CMAKE_BUILD_TYPE Debug) set(CMAKE_BUILD_TYPE Debug)
# Set C++ standard to C++11 # Set C++ standard to C++17
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 17)
project("Metin2 Server") project("Metin2 Server")

View File

@ -96,24 +96,6 @@ namespace std
a.clear(); a.clear();
} }
template <typename T> T MIN(T a, T b)
{
return a < b ? a : b;
}
template <typename T> T MAX(T a, T b)
{
return a > b ? a : b;
}
template <typename T> T MINMAX(T min, T value, T max)
{
T tv;
tv = (min > value ? min : value);
return (max < tv) ? max : tv;
}
template <class _Ty> template <class _Ty>
class void_mem_fun_t : public unary_function<_Ty *, void> class void_mem_fun_t : public unary_function<_Ty *, void>
{ {

View File

@ -22,7 +22,7 @@ const int auctionMinFlushSec = 1800;
CItemCache::CItemCache() CItemCache::CItemCache()
{ {
m_expireTime = MIN(1800, g_iItemCacheFlushSeconds); m_expireTime = std::min(1800, g_iItemCacheFlushSeconds);
} }
CItemCache::~CItemCache() CItemCache::~CItemCache()
@ -158,7 +158,7 @@ void CItemCache::OnFlush()
// //
CPlayerTableCache::CPlayerTableCache() CPlayerTableCache::CPlayerTableCache()
{ {
m_expireTime = MIN(1800, g_iPlayerCacheFlushSeconds); m_expireTime = std::min(1800, g_iPlayerCacheFlushSeconds);
} }
CPlayerTableCache::~CPlayerTableCache() CPlayerTableCache::~CPlayerTableCache()
@ -184,7 +184,7 @@ const int CItemPriceListTableCache::s_nMinFlushSec = 1800;
CItemPriceListTableCache::CItemPriceListTableCache() CItemPriceListTableCache::CItemPriceListTableCache()
{ {
m_expireTime = MIN(s_nMinFlushSec, g_iItemPriceListTableCacheFlushSeconds); m_expireTime = std::min(s_nMinFlushSec, g_iItemPriceListTableCacheFlushSeconds);
} }
void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList) void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList)

View File

@ -702,7 +702,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
if (pSet && !m_vec_itemTable.empty()) if (pSet && !m_vec_itemTable.empty())
{ {
CGrid grid(5, MAX(1, pi->pSafebox->bSize) * 9); CGrid grid(5, std::max<int>(1, pi->pSafebox->bSize) * 9);
bool bEscape = false; bool bEscape = false;
for (DWORD i = 0; i < s_items.size(); ++i) for (DWORD i = 0; i < s_items.size(); ++i)
@ -1624,7 +1624,7 @@ void CClientManager::UpdatePlayerCache()
void CClientManager::SetCacheFlushCountLimit(int iLimit) void CClientManager::SetCacheFlushCountLimit(int iLimit)
{ {
m_iCacheFlushCountLimit = MAX(10, iLimit); m_iCacheFlushCountLimit = std::max(10, iLimit);
sys_log(0, "CACHE_FLUSH_LIMIT_PER_SECOND: %d", m_iCacheFlushCountLimit); sys_log(0, "CACHE_FLUSH_LIMIT_PER_SECOND: %d", m_iCacheFlushCountLimit);
} }
@ -3065,8 +3065,8 @@ int CClientManager::Process()
//30ºÐ¸´Ù º¯°æ //30ºÐ¸´Ù º¯°æ
if (((thecore_pulse() % (60 * 30 * 10)) == 0)) if (((thecore_pulse() % (60 * 30 * 10)) == 0))
{ {
g_iPlayerCacheFlushSeconds = MAX(60, rand() % 180); g_iPlayerCacheFlushSeconds = std::max(60, rand() % 180);
g_iItemCacheFlushSeconds = MAX(60, rand() % 180); g_iItemCacheFlushSeconds = std::max(60, rand() % 180);
sys_log(0, "[SAVE_TIME]Change saving time item %d player %d", g_iPlayerCacheFlushSeconds, g_iItemCacheFlushSeconds); sys_log(0, "[SAVE_TIME]Change saving time item %d player %d", g_iPlayerCacheFlushSeconds, g_iItemCacheFlushSeconds);
} }
*/ */
@ -3130,7 +3130,7 @@ int CClientManager::Process()
DWORD dwCount = CClientManager::instance().GetUserCount(); DWORD dwCount = CClientManager::instance().GetUserCount();
g_dwUsageAvg += dwCount; g_dwUsageAvg += dwCount;
g_dwUsageMax = MAX(g_dwUsageMax, dwCount); g_dwUsageMax = std::max(g_dwUsageMax, dwCount);
memset(&thecore_profiler[0], 0, sizeof(thecore_profiler)); memset(&thecore_profiler[0], 0, sizeof(thecore_profiler));

View File

@ -1178,7 +1178,7 @@ void parse_pair_number_string(const char * c_pszString, std::vector<std::pair<in
{ {
if (isdigit(*t)) if (isdigit(*t))
{ {
strncpy(szNum, t, MIN(sizeof(szNum), (p-t)+1)); strncpy(szNum, t, std::min<size_t>(sizeof(szNum), (p-t)+1));
comma = strchr(szNum, ','); comma = strchr(szNum, ',');
@ -1236,7 +1236,7 @@ bool CClientManager::InitializeObjectProto()
m_vec_kObjectProto.clear(); m_vec_kObjectProto.clear();
} }
m_vec_kObjectProto.reserve(MAX(0, pRes->uiNumRows)); m_vec_kObjectProto.reserve(std::max<size_t>(0, pRes->uiNumRows));
MYSQL_ROW data; MYSQL_ROW data;
@ -1277,7 +1277,7 @@ bool CClientManager::InitializeObjectProto()
str_to_number(t.dwDependOnGroupVnum, data[col++]); str_to_number(t.dwDependOnGroupVnum, data[col++]);
t.lNPCX = 0; t.lNPCX = 0;
t.lNPCY = MAX(t.lRegion[1], t.lRegion[3])+300; t.lNPCY = std::max(t.lRegion[1], t.lRegion[3])+300;
// END_OF_ADD_BUILDING_NPC // END_OF_ADD_BUILDING_NPC
sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu", sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu",

View File

@ -531,11 +531,11 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
int max_point = pkTab->level - 9; int max_point = pkTab->level - 9;
int skill_point = int skill_point =
MIN(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP 통솔력 std::min<int>(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP 통솔력
MIN(20, pkTab->skills[124].bLevel) + // SKILL_MINING 채광 std::min<int>(20, pkTab->skills[124].bLevel) + // SKILL_MINING 채광
MIN(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON 말소환 std::min<int>(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON 말소환
MIN(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP보강 std::min<int>(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP보강
MIN(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE 관통저항 std::min<int>(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE 관통저항
pkTab->sub_skill_point = max_point - skill_point; pkTab->sub_skill_point = max_point - skill_point;
} }

View File

@ -211,7 +211,7 @@ int CGuildManager::GetRanking(DWORD dwGID)
if (it == map_kLadderPointRankingByGID.end()) if (it == map_kLadderPointRankingByGID.end())
return GUILD_RANK_MAX_NUM; return GUILD_RANK_MAX_NUM;
return MINMAX(0, it->second, GUILD_RANK_MAX_NUM); return std::clamp(it->second, 0, GUILD_RANK_MAX_NUM);
} }
void CGuildManager::ResultRanking(MYSQL_RES * pRes) void CGuildManager::ResultRanking(MYSQL_RES * pRes)
@ -1013,7 +1013,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
// ÆÄ¿ö °è»ê // ÆÄ¿ö °è»ê
TGuild & k1 = TouchGuild(GID1); TGuild & k1 = TouchGuild(GID1);
lvp = c_aiScoreByLevel[MIN(GUILD_MAX_LEVEL, k1.level)]; lvp = c_aiScoreByLevel[std::min<size_t>(GUILD_MAX_LEVEL, k1.level)];
rkp = c_aiScoreByRanking[GetRanking(GID1)]; rkp = c_aiScoreByRanking[GetRanking(GID1)];
alv = GetAverageGuildMemberLevel(GID1); alv = GetAverageGuildMemberLevel(GID1);
mc = GetGuildMemberCount(GID1); mc = GetGuildMemberCount(GID1);
@ -1029,7 +1029,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
// ÆÄ¿ö °è»ê // ÆÄ¿ö °è»ê
TGuild & k2 = TouchGuild(GID2); TGuild & k2 = TouchGuild(GID2);
lvp = c_aiScoreByLevel[MIN(GUILD_MAX_LEVEL, k2.level)]; lvp = c_aiScoreByLevel[std::min<size_t>(GUILD_MAX_LEVEL, k2.level)];
rkp = c_aiScoreByRanking[GetRanking(GID2)]; rkp = c_aiScoreByRanking[GetRanking(GID2)];
alv = GetAverageGuildMemberLevel(GID2); alv = GetAverageGuildMemberLevel(GID2);
mc = GetGuildMemberCount(GID2); mc = GetGuildMemberCount(GID2);

View File

@ -169,7 +169,7 @@ int Start()
if (CConfig::instance().GetValue("LOG_KEEP_DAYS", &tmpValue)) if (CConfig::instance().GetValue("LOG_KEEP_DAYS", &tmpValue))
{ {
tmpValue = MINMAX(3, tmpValue, 30); tmpValue = std::clamp(tmpValue, 3, 30);
log_set_expiration_days(tmpValue); log_set_expiration_days(tmpValue);
fprintf(stderr, "Setting log keeping days to %d\n", tmpValue); fprintf(stderr, "Setting log keeping days to %d\n", tmpValue);
} }

View File

@ -12,7 +12,7 @@ CGrid::CGrid(int w, int h) : m_iWidth(w), m_iHeight(h)
CGrid::CGrid(CGrid * pkGrid, int w, int h) : m_iWidth(w), m_iHeight(h) CGrid::CGrid(CGrid * pkGrid, int w, int h) : m_iWidth(w), m_iHeight(h)
{ {
m_pGrid = new char[m_iWidth * m_iHeight]; m_pGrid = new char[m_iWidth * m_iHeight];
int iSize = std::MIN(w * h, pkGrid->m_iWidth * pkGrid->m_iHeight); int iSize = std::min(w * h, pkGrid->m_iWidth * pkGrid->m_iHeight);
memcpy(m_pGrid, pkGrid->m_pGrid, sizeof(char) * iSize); memcpy(m_pGrid, pkGrid->m_pGrid, sizeof(char) * iSize);
} }

View File

@ -184,7 +184,7 @@ bool DSManager::RefreshItemAttributes(LPITEM pDS)
} }
fWeight /= 100.f; fWeight /= 100.f;
int n = MIN(basic_apply_num, vec_basic_applys.size()); int n = std::min<int>(basic_apply_num, vec_basic_applys.size());
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
const SApply& basic_apply = vec_basic_applys[i]; const SApply& basic_apply = vec_basic_applys[i];
@ -253,7 +253,7 @@ bool DSManager::PutAttributes(LPITEM pDS)
} }
fWeight /= 100.f; fWeight /= 100.f;
int n = MIN(basic_apply_num, vec_basic_applys.size()); int n = std::min<int>(basic_apply_num, vec_basic_applys.size());
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
const SApply& basic_apply = vec_basic_applys[i]; const SApply& basic_apply = vec_basic_applys[i];
@ -263,7 +263,7 @@ bool DSManager::PutAttributes(LPITEM pDS)
pDS->SetForceAttribute(i, bType, sValue); pDS->SetForceAttribute(i, bType, sValue);
} }
BYTE additional_attr_num = MIN(Random::get(add_min, add_max), 3); BYTE additional_attr_num = std::min(Random::get(add_min, add_max), 3);
std::vector <int> random_set; std::vector <int> random_set;
if (additional_attr_num > 0) if (additional_attr_num > 0)
@ -355,7 +355,7 @@ bool DSManager::ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtract
} }
float fCharge = vec_chargings[idx] * (100 + iBonus) / 100.f; float fCharge = vec_chargings[idx] * (100 + iBonus) / 100.f;
fCharge = std::MINMAX <float> (0.f, fCharge, 100.f); fCharge = std::clamp<float>(fCharge, 0.f, 100.f);
if (fCharge < FLT_EPSILON) if (fCharge < FLT_EPSILON)
{ {

View File

@ -206,11 +206,11 @@ bool ANI::load_one_race(int race, const char *dir_name)
{ {
// 말 안탔을 때 // 말 안탔을 때
m_speed[race][0][weapon][combo] = load_one_weapon(dir_name, weapon, combo, false); m_speed[race][0][weapon][combo] = load_one_weapon(dir_name, weapon, combo, false);
m_speed[race][0][weapon][0] = MIN(m_speed[race][0][weapon][0], m_speed[race][0][weapon][combo]); // 최소값 m_speed[race][0][weapon][0] = std::min(m_speed[race][0][weapon][0], m_speed[race][0][weapon][combo]); // 최소값
// 말 탔을 때 // 말 탔을 때
m_speed[race][1][weapon][combo] = load_one_weapon(dir_name, weapon, combo, true); m_speed[race][1][weapon][combo] = load_one_weapon(dir_name, weapon, combo, true);
m_speed[race][1][weapon][0] = MIN(m_speed[race][1][weapon][0], m_speed[race][1][weapon][combo]); // 최소값 m_speed[race][1][weapon][0] = std::min(m_speed[race][1][weapon][0], m_speed[race][1][weapon][combo]); // 최소값
dev_log(LOG_DEB0, "combo%02d speed=%d horse=%d", dev_log(LOG_DEB0, "combo%02d speed=%d horse=%d",
combo, m_speed[race][0][weapon][combo], m_speed[race][1][weapon][combo]); combo, m_speed[race][0][weapon][combo], m_speed[race][1][weapon][combo]);

View File

@ -135,7 +135,7 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
{ {
// PC일 경우 상대가 melee 몹일 경우 몹의 공격 거리가 최대 공격 거리 // PC일 경우 상대가 melee 몹일 경우 몹의 공격 거리가 최대 공격 거리
if (false == victim->IsPC() && BATTLE_TYPE_MELEE == victim->GetMobBattleType()) if (false == victim->IsPC() && BATTLE_TYPE_MELEE == victim->GetMobBattleType())
max = MAX(300, (int) (victim->GetMobAttackRange() * 1.15f)); max = std::max(300, (int) (victim->GetMobAttackRange() * 1.15f));
} }
if (distance > max) if (distance > max)
@ -211,8 +211,8 @@ float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnor
if (LC_IsYMIR()) // 천마 if (LC_IsYMIR()) // 천마
{ {
iARSrc = MIN(90, pkAttacker->GetPolymorphPoint(POINT_DX)); iARSrc = std::min(90, pkAttacker->GetPolymorphPoint(POINT_DX));
iERSrc = MIN(90, pkVictim->GetPolymorphPoint(POINT_DX)); iERSrc = std::min(90, pkVictim->GetPolymorphPoint(POINT_DX));
} }
else else
{ {
@ -222,8 +222,8 @@ float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnor
int victim_dx = pkVictim->GetPolymorphPoint(POINT_DX); int victim_dx = pkVictim->GetPolymorphPoint(POINT_DX);
int victim_lv = pkAttacker->GetLevel(); int victim_lv = pkAttacker->GetLevel();
iARSrc = MIN(90, (attacker_dx * 4 + attacker_lv * 2) / 6); iARSrc = std::min(90, (attacker_dx * 4 + attacker_lv * 2) / 6);
iERSrc = MIN(90, (victim_dx * 4 + victim_lv * 2) / 6); iERSrc = std::min(90, (victim_dx * 4 + victim_lv * 2) / 6);
} }
float fAR = ((float) iARSrc + 210.0f) / 300.0f; // fAR = 0.7 ~ 1.0 float fAR = ((float) iARSrc + 210.0f) / 300.0f; // fAR = 0.7 ~ 1.0
@ -479,7 +479,7 @@ int CalcMeleeDamage(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreDe
if (pkAttacker->IsNPC()) if (pkAttacker->IsNPC())
iAtk = (int) (iAtk * pkAttacker->GetMobDamageMultiply()); iAtk = (int) (iAtk * pkAttacker->GetMobDamageMultiply());
iDam = MAX(0, iAtk - iDef); iDam = std::max(0, iAtk - iDef);
if (test_server) if (test_server)
{ {
@ -592,7 +592,7 @@ int CalcArrowDamage(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, LPITEM pkBow,
if (pkAttacker->IsNPC()) if (pkAttacker->IsNPC())
iAtk = (int) (iAtk * pkAttacker->GetMobDamageMultiply()); iAtk = (int) (iAtk * pkAttacker->GetMobDamageMultiply());
iDam = MAX(0, iAtk - iDef); iDam = std::max(0, iAtk - iDef);
int iPureDam = iDam; int iPureDam = iDam;

View File

@ -6,7 +6,7 @@ TEMP_BUFFER::TEMP_BUFFER(int Size, bool bForceDelete)
forceDelete = bForceDelete; forceDelete = bForceDelete;
if (forceDelete) if (forceDelete)
Size = MAX(Size, 1024 * 128); Size = std::max(Size, 1024 * 128);
buf = buffer_new(Size); buf = buffer_new(Size);
} }

View File

@ -786,7 +786,7 @@ bool castle_spawn_tower(int empire, int tower_count)
GET_TOWER(empire, i) = NULL; GET_TOWER(empire, i) = NULL;
} }
int spawn_count = MINMAX(MIN_CASTLE_TOWER, tower_count, MAX_CASTLE_TOWER); // 5 ~ 10마리 int spawn_count = std::clamp(tower_count, MIN_CASTLE_TOWER, MAX_CASTLE_TOWER); // 5 ~ 10마리
for (int j = 0; j < spawn_count; ++j) for (int j = 0; j < spawn_count; ++j)
{ {

View File

@ -2411,7 +2411,7 @@ EVENTFUNC(recovery_event)
// 몬스터 회복 // 몬스터 회복
// //
if (ch->IsAffectFlag(AFF_POISON)) if (ch->IsAffectFlag(AFF_POISON))
return PASSES_PER_SEC(MAX(1, ch->GetMobTable().bRegenCycle)); return PASSES_PER_SEC(std::max<int>(1, ch->GetMobTable().bRegenCycle));
if (2493 == ch->GetMobTable().dwVnum) if (2493 == ch->GetMobTable().dwVnum)
{ {
@ -2432,12 +2432,12 @@ EVENTFUNC(recovery_event)
} }
} }
ch->PointChange(POINT_HP, MAX(1, (ch->GetMaxHP() * regenPct) / 100)); ch->PointChange(POINT_HP, std::max(1, (ch->GetMaxHP() * regenPct) / 100));
} }
else if (!ch->IsDoor()) else if (!ch->IsDoor())
{ {
ch->MonsterLog("HP_REGEN +%d", MAX(1, (ch->GetMaxHP() * ch->GetMobTable().bRegenPercent) / 100)); ch->MonsterLog("HP_REGEN +%d", std::max(1, (ch->GetMaxHP() * ch->GetMobTable().bRegenPercent) / 100));
ch->PointChange(POINT_HP, MAX(1, (ch->GetMaxHP() * ch->GetMobTable().bRegenPercent) / 100)); ch->PointChange(POINT_HP, std::max(1, (ch->GetMaxHP() * ch->GetMobTable().bRegenPercent) / 100));
} }
if (ch->GetHP() >= ch->GetMaxHP()) if (ch->GetHP() >= ch->GetMaxHP())
@ -2456,12 +2456,12 @@ EVENTFUNC(recovery_event)
size_t val = BlueDragon_GetIndexFactor("DragonStone", i, "val"); size_t val = BlueDragon_GetIndexFactor("DragonStone", i, "val");
size_t cnt = SECTREE_MANAGER::instance().GetMonsterCountInMap( ch->GetMapIndex(), dwDragonStoneID ); size_t cnt = SECTREE_MANAGER::instance().GetMonsterCountInMap( ch->GetMapIndex(), dwDragonStoneID );
return PASSES_PER_SEC(MAX(1, (ch->GetMobTable().bRegenCycle - (val*cnt)))); return PASSES_PER_SEC(std::max<int>(1, (ch->GetMobTable().bRegenCycle - (val*cnt))));
} }
} }
} }
return PASSES_PER_SEC(MAX(1, ch->GetMobTable().bRegenCycle)); return PASSES_PER_SEC(std::max<int>(1, ch->GetMobTable().bRegenCycle));
} }
else else
{ {
@ -2492,7 +2492,7 @@ EVENTFUNC(recovery_event)
int iAmount = 0; int iAmount = 0;
{ {
iPercent = aiRecoveryPercents[MIN(9, iSec)]; iPercent = aiRecoveryPercents[std::min(9, iSec)];
iAmount = 15 + (ch->GetMaxHP() * iPercent) / 100; iAmount = 15 + (ch->GetMaxHP() * iPercent) / 100;
} }
@ -2520,7 +2520,7 @@ void CHARACTER::StartRecoveryEvent()
info->ch = this; info->ch = this;
int iSec = IsPC() ? 3 : (MAX(1, GetMobTable().bRegenCycle)); int iSec = IsPC() ? 3 : (std::max<int>(1, GetMobTable().bRegenCycle));
m_pkRecoveryEvent = event_create(recovery_event, info, PASSES_PER_SEC(iSec)); m_pkRecoveryEvent = event_create(recovery_event, info, PASSES_PER_SEC(iSec));
} }
@ -3210,7 +3210,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
int prev_hp = GetHP(); int prev_hp = GetHP();
amount = MIN(GetMaxHP() - GetHP(), amount); amount = std::min(GetMaxHP() - GetHP(), amount);
SetHP(GetHP() + amount); SetHP(GetHP() + amount);
val = GetHP(); val = GetHP();
@ -3226,7 +3226,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
if (IsDead() || IsStun()) if (IsDead() || IsStun())
return; return;
amount = MIN(GetMaxSP() - GetSP(), amount); amount = std::min(GetMaxSP() - GetSP(), amount);
SetSP(GetSP() + amount); SetSP(GetSP() + amount);
val = GetSP(); val = GetSP();
} }
@ -3238,7 +3238,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
return; return;
int prev_val = GetStamina(); int prev_val = GetStamina();
amount = MIN(GetMaxStamina() - GetStamina(), amount); amount = std::min(GetMaxStamina() - GetStamina(), amount);
SetStamina(GetStamina() + amount); SetStamina(GetStamina() + amount);
val = GetStamina(); val = GetStamina();
@ -3265,7 +3265,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
//SetMaxHP(GetMaxHP() + amount); //SetMaxHP(GetMaxHP() + amount);
// 최대 생명력 = (기본 최대 생명력 + 추가) * 최대생명력% // 최대 생명력 = (기본 최대 생명력 + 추가) * 최대생명력%
int hp = GetRealPoint(POINT_MAX_HP); int hp = GetRealPoint(POINT_MAX_HP);
int add_hp = MIN(3500, hp * GetPoint(POINT_MAX_HP_PCT) / 100); int add_hp = std::min(3500, hp * GetPoint(POINT_MAX_HP_PCT) / 100);
add_hp += GetPoint(POINT_MAX_HP); add_hp += GetPoint(POINT_MAX_HP);
add_hp += GetPoint(POINT_PARTY_TANKER_BONUS); add_hp += GetPoint(POINT_PARTY_TANKER_BONUS);
@ -3282,7 +3282,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
//SetMaxSP(GetMaxSP() + amount); //SetMaxSP(GetMaxSP() + amount);
// 최대 정신력 = (기본 최대 정신력 + 추가) * 최대정신력% // 최대 정신력 = (기본 최대 정신력 + 추가) * 최대정신력%
int sp = GetRealPoint(POINT_MAX_SP); int sp = GetRealPoint(POINT_MAX_SP);
int add_sp = MIN(800, sp * GetPoint(POINT_MAX_SP_PCT) / 100); int add_sp = std::min(800, sp * GetPoint(POINT_MAX_SP_PCT) / 100);
add_sp += GetPoint(POINT_MAX_SP); add_sp += GetPoint(POINT_MAX_SP);
add_sp += GetPoint(POINT_PARTY_SKILL_MASTER_BONUS); add_sp += GetPoint(POINT_PARTY_SKILL_MASTER_BONUS);
@ -5105,7 +5105,7 @@ void CHARACTER::SetTarget(LPCHARACTER pkChrTarget)
int iHorseMaxHealth = owner->GetHorseMaxHealth(); int iHorseMaxHealth = owner->GetHorseMaxHealth();
if (iHorseMaxHealth) if (iHorseMaxHealth)
p.bHPPercent = MINMAX(0, iHorseHealth * 100 / iHorseMaxHealth, 100); p.bHPPercent = std::clamp(iHorseHealth * 100 / iHorseMaxHealth, 0, 100);
else else
p.bHPPercent = 100; p.bHPPercent = 100;
} }
@ -5113,7 +5113,7 @@ void CHARACTER::SetTarget(LPCHARACTER pkChrTarget)
p.bHPPercent = 100; p.bHPPercent = 100;
} }
else else
p.bHPPercent = MINMAX(0, (m_pkChrTarget->GetHP() * 100) / m_pkChrTarget->GetMaxHP(), 100); p.bHPPercent = std::clamp((m_pkChrTarget->GetHP() * 100) / m_pkChrTarget->GetMaxHP(), 0, 100);
} }
} }
else else
@ -5138,7 +5138,7 @@ void CHARACTER::BroadcastTargetPacket()
if (IsPC()) if (IsPC())
p.bHPPercent = 0; p.bHPPercent = 0;
else else
p.bHPPercent = MINMAX(0, (GetHP() * 100) / GetMaxHP(), 100); p.bHPPercent = std::clamp((GetHP() * 100) / GetMaxHP(), 0, 100);
CHARACTER_SET::iterator it = m_set_pkChrTargetedBy.begin(); CHARACTER_SET::iterator it = m_set_pkChrTargetedBy.begin();
@ -5727,7 +5727,7 @@ bool CHARACTER::BuildUpdatePartyPacket(TPacketGCPartyUpdate & out)
out.header = HEADER_GC_PARTY_UPDATE; out.header = HEADER_GC_PARTY_UPDATE;
out.pid = GetPlayerID(); out.pid = GetPlayerID();
out.percent_hp = MINMAX(0, GetHP() * 100 / GetMaxHP(), 100); out.percent_hp = std::clamp(GetHP() * 100 / GetMaxHP(), 0, 100);
out.role = GetParty()->GetRole(GetPlayerID()); out.role = GetParty()->GetRole(GetPlayerID());
sys_log(1, "PARTY %s role is %d", GetName(), out.role); sys_log(1, "PARTY %s role is %d", GetName(), out.role);
@ -5881,8 +5881,8 @@ void CHARACTER::ResetPoint(int iLv)
SetRandomHP((iLv - 1) * Random::get(JobInitialPoints[GetJob()].hp_per_lv_begin, JobInitialPoints[GetJob()].hp_per_lv_end)); SetRandomHP((iLv - 1) * Random::get(JobInitialPoints[GetJob()].hp_per_lv_begin, JobInitialPoints[GetJob()].hp_per_lv_end));
SetRandomSP((iLv - 1) * Random::get(JobInitialPoints[GetJob()].sp_per_lv_begin, JobInitialPoints[GetJob()].sp_per_lv_end)); SetRandomSP((iLv - 1) * Random::get(JobInitialPoints[GetJob()].sp_per_lv_begin, JobInitialPoints[GetJob()].sp_per_lv_end));
//PointChange(POINT_STAT, ((MINMAX(1, iLv, 99) - 1) * 3) + GetPoint(POINT_LEVEL_STEP) - GetPoint(POINT_STAT)); //PointChange(POINT_STAT, ((std::clamp(iLv, 1, 99) - 1) * 3) + GetPoint(POINT_LEVEL_STEP) - GetPoint(POINT_STAT));
PointChange(POINT_STAT, ((MINMAX(1, iLv, 90) - 1) * 3) + GetPoint(POINT_LEVEL_STEP) - GetPoint(POINT_STAT)); PointChange(POINT_STAT, ((std::clamp(iLv, 1, 90) - 1) * 3) + GetPoint(POINT_LEVEL_STEP) - GetPoint(POINT_STAT));
ComputePoints(); ComputePoints();
@ -6126,7 +6126,7 @@ int CHARACTER::GetPolymorphPower() const
if (value) if (value)
return value; return value;
} }
return aiPolymorphPowerByLevel[MINMAX(0, GetSkillLevel(SKILL_POLYMORPH), 40)]; return aiPolymorphPowerByLevel[std::clamp(GetSkillLevel(SKILL_POLYMORPH), 0, 40)];
} }
void CHARACTER::SetPolymorph(DWORD dwRaceNum, bool bMaintainStat) void CHARACTER::SetPolymorph(DWORD dwRaceNum, bool bMaintainStat)
@ -7204,5 +7204,5 @@ DWORD CHARACTER::GetNextExp() const
int CHARACTER::GetSkillPowerByLevel(int level, bool bMob) const int CHARACTER::GetSkillPowerByLevel(int level, bool bMob) const
{ {
return CTableBySkill::instance().GetSkillPowerByLevelFromType(GetJob(), GetSkillGroup(), MINMAX(0, level, SKILL_MAX_LEVEL), bMob); return CTableBySkill::instance().GetSkillPowerByLevelFromType(GetJob(), GetSkillGroup(), std::clamp<int>(level, 0, SKILL_MAX_LEVEL), bMob);
} }

View File

@ -103,11 +103,11 @@ bool CHARACTER::UpdateAffect()
if (LC_IsYMIR()) if (LC_IsYMIR())
{ {
iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 9 / 100); iVal = std::min(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 9 / 100);
} }
else else
{ {
iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 7 / 100); iVal = std::min(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 7 / 100);
} }
PointChange(POINT_HP, iVal); PointChange(POINT_HP, iVal);
@ -124,9 +124,9 @@ bool CHARACTER::UpdateAffect()
int iVal; int iVal;
if (!g_iUseLocale) if (!g_iUseLocale)
iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100); iVal = std::min(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);
else else
iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100); iVal = std::min(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);
PointChange(POINT_SP, iVal); PointChange(POINT_SP, iVal);
PointChange(POINT_SP_RECOVERY, -iVal); PointChange(POINT_SP_RECOVERY, -iVal);

View File

@ -328,22 +328,22 @@ void CHARACTER::DeathPenalty(BYTE bTown)
} }
// END_OF_NO_DEATH_PENALTY_BUG_FIX // END_OF_NO_DEATH_PENALTY_BUG_FIX
int iLoss = ((GetNextExp() * aiExpLossPercents[MINMAX(1, GetLevel(), PLAYER_EXP_TABLE_MAX)]) / 100); int iLoss = ((GetNextExp() * aiExpLossPercents[std::clamp<int>(GetLevel(), 1, PLAYER_EXP_TABLE_MAX)]) / 100);
if (true == LC_IsYMIR()) if (true == LC_IsYMIR())
{ {
if (PLAYER_EXP_TABLE_MAX < GetLevel()) if (PLAYER_EXP_TABLE_MAX < GetLevel())
{ {
iLoss = MIN(500000, iLoss); iLoss = std::min(500000, iLoss);
} }
else else
{ {
iLoss = MIN(200000, iLoss); iLoss = std::min(200000, iLoss);
} }
} }
else if (true == LC_IsEurope()) else if (true == LC_IsEurope())
{ {
iLoss = MIN(800000, iLoss); iLoss = std::min(800000, iLoss);
} }
if (bTown) if (bTown)
@ -361,7 +361,7 @@ void CHARACTER::DeathPenalty(BYTE bTown)
if (IsEquipUniqueItem(UNIQUE_ITEM_TEARDROP_OF_GODNESS)) if (IsEquipUniqueItem(UNIQUE_ITEM_TEARDROP_OF_GODNESS))
iLoss /= 2; iLoss /= 2;
sys_log(0, "DEATH_PENALTY(%s) EXP_LOSS: %d percent %d%%", GetName(), iLoss, aiExpLossPercents[MIN(gPlayerMaxLevel, GetLevel())]); sys_log(0, "DEATH_PENALTY(%s) EXP_LOSS: %d percent %d%%", GetName(), iLoss, aiExpLossPercents[std::min(gPlayerMaxLevel, GetLevel())]);
PointChange(POINT_EXP, -iLoss, true); PointChange(POINT_EXP, -iLoss, true);
} }
@ -1054,7 +1054,7 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller)
{ {
random_shuffle(vec_bSlots.begin(), vec_bSlots.end()); random_shuffle(vec_bSlots.begin(), vec_bSlots.end());
int iQty = MIN(vec_bSlots.size(), r.iInventoryQty); int iQty = std::min<int>(vec_bSlots.size(), r.iInventoryQty);
if (iQty) if (iQty)
iQty = Random::get(1, iQty); iQty = Random::get(1, iQty);
@ -1090,7 +1090,7 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller)
if (isDropAllEquipments) if (isDropAllEquipments)
iQty = vec_bSlots.size(); iQty = vec_bSlots.size();
else else
iQty = MIN(vec_bSlots.size(), Random::get(1, r.iEquipmentQty)); iQty = std::min<int>(vec_bSlots.size(), Random::get(1, r.iEquipmentQty));
if (iQty) if (iQty)
iQty = Random::get(1, iQty); iQty = Random::get(1, iQty);
@ -1306,7 +1306,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
if (GetEmpire() != pkKiller->GetEmpire()) if (GetEmpire() != pkKiller->GetEmpire())
{ {
int iEP = MIN(GetPoint(POINT_EMPIRE_POINT), pkKiller->GetPoint(POINT_EMPIRE_POINT)); int iEP = std::min(GetPoint(POINT_EMPIRE_POINT), pkKiller->GetPoint(POINT_EMPIRE_POINT));
PointChange(POINT_EMPIRE_POINT, -(iEP / 10)); PointChange(POINT_EMPIRE_POINT, -(iEP / 10));
pkKiller->PointChange(POINT_EMPIRE_POINT, iEP / 5); pkKiller->PointChange(POINT_EMPIRE_POINT, iEP / 5);
@ -1916,7 +1916,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
if (Random::get(1, 10) <= pct) if (Random::get(1, 10) <= pct)
{ {
int iHP = MIN(dam, MAX(0, iCurHP)) * pAttacker->GetPoint(POINT_STEAL_HP) / 100; int iHP = std::min(dam, std::max(0, iCurHP)) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;
if (iHP > 0 && GetHP() >= iHP) if (iHP > 0 && GetHP() >= iHP)
{ {
@ -1941,7 +1941,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
else else
iCur = iCurHP; iCur = iCurHP;
int iSP = MIN(dam, MAX(0, iCur)) * pAttacker->GetPoint(POINT_STEAL_SP) / 100; int iSP = std::min(dam, std::max(0, iCur)) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;
if (iSP > 0 && iCur >= iSP) if (iSP > 0 && iCur >= iSP)
{ {
@ -1968,7 +1968,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
// 칠 때마다 HP회복 // 칠 때마다 HP회복
if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률 if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률
{ {
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100; int i = std::min(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;
if (i) if (i)
{ {
@ -1980,7 +1980,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
// 칠 때마다 SP회복 // 칠 때마다 SP회복
if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률 if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률
{ {
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100; int i = std::min(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;
if (i) if (i)
{ {
@ -2009,7 +2009,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
if (pAttacker->GetPoint(POINT_NORMAL_HIT_DAMAGE_BONUS)) if (pAttacker->GetPoint(POINT_NORMAL_HIT_DAMAGE_BONUS))
dam = dam * (100 + pAttacker->GetPoint(POINT_NORMAL_HIT_DAMAGE_BONUS)) / 100; dam = dam * (100 + pAttacker->GetPoint(POINT_NORMAL_HIT_DAMAGE_BONUS)) / 100;
dam = dam * (100 - MIN(99, GetPoint(POINT_NORMAL_HIT_DEFEND_BONUS))) / 100; dam = dam * (100 - std::min(99, GetPoint(POINT_NORMAL_HIT_DEFEND_BONUS))) / 100;
break; break;
case DAMAGE_TYPE_MELEE: case DAMAGE_TYPE_MELEE:
@ -2022,7 +2022,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
if (pAttacker->GetPoint(POINT_SKILL_DAMAGE_BONUS)) if (pAttacker->GetPoint(POINT_SKILL_DAMAGE_BONUS))
dam = dam * (100 + pAttacker->GetPoint(POINT_SKILL_DAMAGE_BONUS)) / 100; dam = dam * (100 + pAttacker->GetPoint(POINT_SKILL_DAMAGE_BONUS)) / 100;
dam = dam * (100 - MIN(99, GetPoint(POINT_SKILL_DEFEND_BONUS))) / 100; dam = dam * (100 - std::min(99, GetPoint(POINT_SKILL_DEFEND_BONUS))) / 100;
break; break;
default: default:
@ -2049,7 +2049,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
{ {
// 정신력이 모자라서 피가 더 깍여야할?? // 정신력이 모자라서 피가 더 깍여야할??
PointChange(POINT_SP, -GetSP()); PointChange(POINT_SP, -GetSP());
dam -= iSP * 100 / MAX(GetPoint(POINT_MANASHIELD), 1); dam -= iSP * 100 / std::max(GetPoint(POINT_MANASHIELD), 1);
} }
} }
@ -2058,7 +2058,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
// //
if (GetPoint(POINT_MALL_DEFBONUS) > 0) if (GetPoint(POINT_MALL_DEFBONUS) > 0)
{ {
int dec_dam = MIN(200, dam * GetPoint(POINT_MALL_DEFBONUS) / 100); int dec_dam = std::min(200, dam * GetPoint(POINT_MALL_DEFBONUS) / 100);
dam -= dec_dam; dam -= dec_dam;
} }
@ -2069,7 +2069,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
// //
if (pAttacker->GetPoint(POINT_MALL_ATTBONUS) > 0) if (pAttacker->GetPoint(POINT_MALL_ATTBONUS) > 0)
{ {
int add_dam = MIN(300, dam * pAttacker->GetLimitPoint(POINT_MALL_ATTBONUS) / 100); int add_dam = std::min(300, dam * pAttacker->GetLimitPoint(POINT_MALL_ATTBONUS) / 100);
dam += add_dam; dam += add_dam;
} }
@ -2484,7 +2484,7 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
iExp = iExp * CHARACTER_MANAGER::instance().GetMobExpRate(to) / 100; iExp = iExp * CHARACTER_MANAGER::instance().GetMobExpRate(to) / 100;
// 경험치 한번 획득량 제한 // 경험치 한번 획득량 제한
iExp = MIN(to->GetNextExp() / 10, iExp); iExp = std::min<int>(to->GetNextExp() / 10, iExp);
if (test_server) if (test_server)
{ {
@ -2821,7 +2821,7 @@ int CHARACTER::GetArrowAndBow(LPITEM * ppkBow, LPITEM * ppkArrow, int iArrowCoun
return 0; return 0;
} }
iArrowCount = MIN(iArrowCount, pkArrow->GetCount()); iArrowCount = std::min<int>(iArrowCount, pkArrow->GetCount());
*ppkBow = pkBow; *ppkBow = pkBow;
*ppkArrow = pkArrow; *ppkArrow = pkArrow;
@ -2833,7 +2833,7 @@ void CHARACTER::UseArrow(LPITEM pkArrow, DWORD dwArrowCount)
{ {
int iCount = pkArrow->GetCount(); int iCount = pkArrow->GetCount();
DWORD dwVnum = pkArrow->GetVnum(); DWORD dwVnum = pkArrow->GetVnum();
iCount = iCount - MIN(iCount, dwArrowCount); iCount = iCount - std::min<int>(iCount, dwArrowCount);
pkArrow->SetCount(iCount); pkArrow->SetCount(iCount);
if (iCount == 0) if (iCount == 0)
@ -3303,7 +3303,7 @@ void CHARACTER::UpdateAlignment(int iAmount)
int i = m_iAlignment / 10; int i = m_iAlignment / 10;
m_iRealAlignment = MINMAX(-200000, m_iRealAlignment + iAmount, 200000); m_iRealAlignment = std::clamp(m_iRealAlignment + iAmount, -200000, 200000);
if (bShow) if (bShow)
{ {

View File

@ -1129,16 +1129,16 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL) if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
{ {
if (LC_IsYMIR() == true || LC_IsKorea() == true) if (LC_IsYMIR() == true || LC_IsKorea() == true)
success_prob = hyuniron_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)]; success_prob = hyuniron_prob_euckr[std::clamp(item->GetRefineLevel(), 0, 8)];
else else
success_prob = hyuniron_prob[MINMAX(0, item->GetRefineLevel(), 8)]; success_prob = hyuniron_prob[std::clamp(item->GetRefineLevel(), 0, 8)];
} }
else if (pkItemScroll->GetValue(0) == YAGONG_SCROLL) else if (pkItemScroll->GetValue(0) == YAGONG_SCROLL)
{ {
if (LC_IsYMIR() == true || LC_IsKorea() == true) if (LC_IsYMIR() == true || LC_IsKorea() == true)
success_prob = yagong_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)]; success_prob = yagong_prob_euckr[std::clamp(item->GetRefineLevel(), 0, 8)];
else else
success_prob = yagong_prob[MINMAX(0, item->GetRefineLevel(), 8)]; success_prob = yagong_prob[std::clamp(item->GetRefineLevel(), 0, 8)];
} }
else else
{ {
@ -3144,7 +3144,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
} }
DWORD dwSkillVnum = item->GetValue(0); DWORD dwSkillVnum = item->GetValue(0);
int iPct = MINMAX(0, item->GetValue(1), 100); int iPct = std::clamp(item->GetValue(1), 0, 100);
if (GetSkillLevel(dwSkillVnum)>=20 || dwSkillVnum-SKILL_LANGUAGE1+1 == GetEmpire()) if (GetSkillLevel(dwSkillVnum)>=20 || dwSkillVnum-SKILL_LANGUAGE1+1 == GetEmpire())
{ {
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 완벽하게 알아들을 수 있는 언어이다.")); ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 완벽하게 알아들을 수 있는 언어이다."));
@ -3172,7 +3172,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
} }
DWORD dwSkillVnum = item->GetValue(0); DWORD dwSkillVnum = item->GetValue(0);
int iPct = MINMAX(0, item->GetValue(1), 100); int iPct = std::clamp(item->GetValue(1), 0, 100);
if (GetSkillLevel(dwSkillVnum) >= 10) if (GetSkillLevel(dwSkillVnum) >= 10)
{ {
@ -3204,7 +3204,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
int iSkillLevelLowLimit = item->GetValue(0); int iSkillLevelLowLimit = item->GetValue(0);
int iSkillLevelHighLimit = item->GetValue(1); int iSkillLevelHighLimit = item->GetValue(1);
int iPct = MINMAX(0, item->GetValue(2), 100); int iPct = std::clamp(item->GetValue(2), 0, 100);
int iLevelLimit = item->GetValue(3); int iLevelLimit = item->GetValue(3);
DWORD dwSkillVnum = 0; DWORD dwSkillVnum = 0;
@ -3276,7 +3276,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
} }
DWORD dwSkillVnum = SKILL_CREATE; DWORD dwSkillVnum = SKILL_CREATE;
int iPct = MINMAX(0, item->GetValue(1), 100); int iPct = std::clamp(item->GetValue(1), 0, 100);
if (GetSkillLevel(dwSkillVnum)>=40) if (GetSkillLevel(dwSkillVnum)>=40)
{ {
@ -3318,7 +3318,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
} }
DWORD dwSkillVnum = SKILL_MINING; DWORD dwSkillVnum = SKILL_MINING;
int iPct = MINMAX(0, item->GetValue(1), 100); int iPct = std::clamp(item->GetValue(1), 0, 100);
if (GetSkillLevel(dwSkillVnum)>=40) if (GetSkillLevel(dwSkillVnum)>=40)
{ {
@ -3348,7 +3348,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
} }
DWORD dwSkillVnum = SKILL_HORSE; DWORD dwSkillVnum = SKILL_HORSE;
int iPct = MINMAX(0, item->GetValue(1), 100); int iPct = std::clamp(item->GetValue(1), 0, 100);
if (GetLevel() < 50) if (GetLevel() < 50)
{ {
@ -3406,7 +3406,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
if (GetAlignment() >= 0) if (GetAlignment() >= 0)
return false; return false;
int delta = MIN(-GetAlignment(), item->GetValue(0)); int delta = std::min(-GetAlignment(), item->GetValue(0));
sys_log(0, "%s ALIGNMENT ITEM %d", GetName(), delta); sys_log(0, "%s ALIGNMENT ITEM %d", GetName(), delta);
@ -4232,7 +4232,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
return false; return false;
} }
PointChange(POINT_SP_RECOVERY, item->GetValue(1) * MIN(200, (100 + GetPoint(POINT_POTION_BONUS))) / 100); PointChange(POINT_SP_RECOVERY, item->GetValue(1) * std::min(200, (100 + GetPoint(POINT_POTION_BONUS))) / 100);
StartAffectEvent(); StartAffectEvent();
EffectPacket(SE_SPUP_BLUE); EffectPacket(SE_SPUP_BLUE);
} }
@ -4244,7 +4244,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
return false; return false;
} }
PointChange(POINT_HP_RECOVERY, item->GetValue(0) * MIN(200, (100 + GetPoint(POINT_POTION_BONUS))) / 100); PointChange(POINT_HP_RECOVERY, item->GetValue(0) * std::min(200, (100 + GetPoint(POINT_POTION_BONUS))) / 100);
StartAffectEvent(); StartAffectEvent();
EffectPacket(SE_HPUP_RED); EffectPacket(SE_HPUP_RED);
} }
@ -5597,7 +5597,7 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
sys_log(0, "%s: ITEM_STACK %s (window: %d, cell : %d) -> (window:%d, cell %d) count %d", GetName(), item->GetName(), Cell.window_type, Cell.cell, sys_log(0, "%s: ITEM_STACK %s (window: %d, cell : %d) -> (window:%d, cell %d) count %d", GetName(), item->GetName(), Cell.window_type, Cell.cell,
DestCell.window_type, DestCell.cell, count); DestCell.window_type, DestCell.cell, count);
count = MIN(200 - item2->GetCount(), count); count = std::min<BYTE>(200 - item2->GetCount(), count);
item->SetCount(item->GetCount() - count); item->SetCount(item->GetCount() - count);
item2->SetCount(item2->GetCount() + count); item2->SetCount(item2->GetCount() + count);
@ -5815,7 +5815,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
if (j != ITEM_SOCKET_MAX_NUM) if (j != ITEM_SOCKET_MAX_NUM)
continue; continue;
BYTE bCount2 = MIN(200 - item2->GetCount(), bCount); BYTE bCount2 = std::min<BYTE>(200 - item2->GetCount(), bCount);
bCount -= bCount2; bCount -= bCount2;
item2->SetCount(item2->GetCount() + bCount2); item2->SetCount(item2->GetCount() + bCount2);
@ -6541,7 +6541,7 @@ LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool
bCount = p->alValues[1]; bCount = p->alValues[1];
} }
BYTE bCount2 = MIN(200 - item->GetCount(), bCount); BYTE bCount2 = std::min<BYTE>(200 - item->GetCount(), bCount);
bCount -= bCount2; bCount -= bCount2;
item->SetCount(item->GetCount() + bCount2); item->SetCount(item->GetCount() + bCount2);
@ -7037,7 +7037,7 @@ bool CHARACTER::GiveItemFromSpecialItemGroup(DWORD dwGroupNum, std::vector<DWORD
{ {
int iDropHP = GetMaxHP()*dwCount/100; int iDropHP = GetMaxHP()*dwCount/100;
sys_log(0, "CSpecialItemGroup::DRAIN_HP %d", -iDropHP); sys_log(0, "CSpecialItemGroup::DRAIN_HP %d", -iDropHP);
iDropHP = MIN(iDropHP, GetHP()-1); iDropHP = std::min(iDropHP, GetHP()-1);
sys_log(0, "CSpecialItemGroup::DRAIN_HP %d", -iDropHP); sys_log(0, "CSpecialItemGroup::DRAIN_HP %d", -iDropHP);
PointChange(POINT_HP, -iDropHP); PointChange(POINT_HP, -iDropHP);
bSuccess = true; bSuccess = true;
@ -7183,7 +7183,7 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
sys_log(0, "USE_POLYMORPH_BALL PID(%d) vnum(%d)", GetPlayerID(), dwVnum); sys_log(0, "USE_POLYMORPH_BALL PID(%d) vnum(%d)", GetPlayerID(), dwVnum);
// 레벨 제한 체크 // 레벨 제한 체크
int iPolymorphLevelLimit = MAX(0, 20 - GetLevel() * 3 / 10); int iPolymorphLevelLimit = std::max(0, 20 - GetLevel() * 3 / 10);
if (pMob->m_table.bLevel >= GetLevel() + iPolymorphLevelLimit) if (pMob->m_table.bLevel >= GetLevel() + iPolymorphLevelLimit)
{ {
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나보다 너무 높은 레벨의 몬스터로는 변신 할 수 없습니다.")); ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나보다 너무 높은 레벨의 몬스터로는 변신 할 수 없습니다."));

View File

@ -26,7 +26,7 @@ int GetPoisonDamageRate(LPCHARACTER ch)
else else
iRate = poison_damage_rate[ch->GetMobRank()]; iRate = poison_damage_rate[ch->GetMobRank()];
iRate = MAX(0, iRate - ch->GetPoint(POINT_POISON_REDUCE)); iRate = std::max(0, iRate - ch->GetPoint(POINT_POISON_REDUCE));
return iRate; return iRate;
} }

View File

@ -125,7 +125,7 @@ bool TSkillUseInfo::UseSkill(bool isGrandMaster, DWORD vid, DWORD dwCooltime, in
int CHARACTER::GetChainLightningMaxCount() const int CHARACTER::GetChainLightningMaxCount() const
{ {
return aiChainLightningCountBySkillLevel[MIN(SKILL_MAX_LEVEL, GetSkillLevel(SKILL_CHAIN))]; return aiChainLightningCountBySkillLevel[std::min<int>(SKILL_MAX_LEVEL, GetSkillLevel(SKILL_CHAIN))];
} }
void CHARACTER::SetAffectedEunhyung() void CHARACTER::SetAffectedEunhyung()
@ -178,7 +178,7 @@ void CHARACTER::SetSkillLevel(DWORD dwVnum, BYTE bLev)
return; return;
} }
m_pSkillLevels[dwVnum].bLevel = MIN(40, bLev); m_pSkillLevels[dwVnum].bLevel = std::min<BYTE>(40, bLev);
if (bLev >= 40) if (bLev >= 40)
m_pSkillLevels[dwVnum].bMasterType = SKILL_PERFECT_MASTER; m_pSkillLevels[dwVnum].bMasterType = SKILL_PERFECT_MASTER;
@ -320,7 +320,7 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
// 여기서 확률을 계산합니다. // 여기서 확률을 계산합니다.
BYTE bLastLevel = GetSkillLevel(dwSkillVnum); BYTE bLastLevel = GetSkillLevel(dwSkillVnum);
int idx = MIN(9, GetSkillLevel(dwSkillVnum) - 30); int idx = std::min(9, GetSkillLevel(dwSkillVnum) - 30);
sys_log(0, "LearnGrandMasterSkill %s table idx %d value %d", GetName(), idx, aiGrandMasterSkillBookCountForLevelUp[idx]); sys_log(0, "LearnGrandMasterSkill %s table idx %d value %d", GetName(), idx, aiGrandMasterSkillBookCountForLevelUp[idx]);
@ -500,7 +500,7 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
} }
else else
{ {
int idx = MIN(9, GetSkillLevel(dwSkillVnum) - 20); int idx = std::min(9, GetSkillLevel(dwSkillVnum) - 20);
sys_log(0, "LearnSkillByBook %s table idx %d value %d", GetName(), idx, aiSkillBookCountForLevelUp[idx]); sys_log(0, "LearnSkillByBook %s table idx %d value %d", GetName(), idx, aiSkillBookCountForLevelUp[idx]);
@ -818,7 +818,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
} }
else else
{ {
if (Random::get(1, 21 - MIN(20, GetSkillLevel(pkSk->dwVnum))) == 1) if (Random::get(1, 21 - std::min(20, GetSkillLevel(pkSk->dwVnum))) == 1)
SetSkillLevel(pkSk->dwVnum, 20); SetSkillLevel(pkSk->dwVnum, 20);
} }
} }
@ -827,7 +827,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
case SKILL_MASTER: case SKILL_MASTER:
if (GetSkillLevel(pkSk->dwVnum) >= 30) if (GetSkillLevel(pkSk->dwVnum) >= 30)
{ {
if (Random::get(1, 31 - MIN(30, GetSkillLevel(pkSk->dwVnum))) == 1) if (Random::get(1, 31 - std::min(30, GetSkillLevel(pkSk->dwVnum))) == 1)
SetSkillLevel(pkSk->dwVnum, 30); SetSkillLevel(pkSk->dwVnum, 30);
} }
break; break;
@ -2648,7 +2648,7 @@ int CHARACTER::GetUsedSkillMasterType(DWORD dwVnum)
if (rInfo.isGrandMaster) if (rInfo.isGrandMaster)
return GetSkillMasterType(dwVnum); return GetSkillMasterType(dwVnum);
return MIN(GetSkillMasterType(dwVnum), SKILL_MASTER); return std::min<int>(GetSkillMasterType(dwVnum), SKILL_MASTER);
} }
int CHARACTER::GetSkillMasterType(DWORD dwVnum) const int CHARACTER::GetSkillMasterType(DWORD dwVnum) const
@ -2708,7 +2708,7 @@ int CHARACTER::GetSkillLevel(DWORD dwVnum) const
return 0; return 0;
} }
return MIN(SKILL_MAX_LEVEL, m_pSkillLevels ? m_pSkillLevels[dwVnum].bLevel : 0); return std::min<int>(SKILL_MAX_LEVEL, m_pSkillLevels ? m_pSkillLevels[dwVnum].bLevel : 0);
} }
EVENTFUNC(skill_muyoung_event) EVENTFUNC(skill_muyoung_event)

View File

@ -390,7 +390,7 @@ void CHARACTER::__StateIdle_Stone()
m_dwStateDuration = PASSES_PER_SEC(1); m_dwStateDuration = PASSES_PER_SEC(1);
int iPercent = (GetHP() * 100) / GetMaxHP(); int iPercent = (GetHP() * 100) / GetMaxHP();
DWORD dwVnum = Random::get(MIN(GetMobTable().sAttackSpeed, GetMobTable().sMovingSpeed ), MAX(GetMobTable().sAttackSpeed, GetMobTable().sMovingSpeed)); DWORD dwVnum = Random::get(std::min(GetMobTable().sAttackSpeed, GetMobTable().sMovingSpeed ), std::max(GetMobTable().sAttackSpeed, GetMobTable().sMovingSpeed));
if (iPercent <= 10 && GetMaxSP() < 10) if (iPercent <= 10 && GetMaxSP() < 10)
{ {
@ -1069,7 +1069,7 @@ void CHARACTER::StateBattle()
if ((dwCurTime - m_dwLastAttackTime) < dwDuration) // 2초 마다 공격해야 한다. if ((dwCurTime - m_dwLastAttackTime) < dwDuration) // 2초 마다 공격해야 한다.
{ {
m_dwStateDuration = MAX(1, (passes_per_sec * (dwDuration - (dwCurTime - m_dwLastAttackTime)) / 1000)); m_dwStateDuration = std::max<int>(1, (passes_per_sec * (dwDuration - (dwCurTime - m_dwLastAttackTime)) / 1000));
return; return;
} }

View File

@ -2133,8 +2133,8 @@ ACMD(do_inventory)
} }
else else
{ {
str_to_number(index, arg1); index = MIN(index, INVENTORY_MAX_NUM); str_to_number(index, arg1); index = std::min<int>(index, INVENTORY_MAX_NUM);
str_to_number(count, arg2); count = MIN(count, INVENTORY_MAX_NUM); str_to_number(count, arg2); count = std::min<int>(count, INVENTORY_MAX_NUM);
} }
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
@ -2374,8 +2374,8 @@ ACMD(do_dice)
end = atoi(arg1); end = atoi(arg1);
} }
end = MAX(start, end); end = std::max(start, end);
start = MIN(start, end); start = std::min(start, end);
int n = Random::get(start, end); int n = Random::get(start, end);

View File

@ -258,7 +258,7 @@ bool FindInString(const char * c_pszFind, const char * c_pszIn)
do do
{ {
strncpy(sz, c, MIN(sizeof(sz), (p - c) + 1)); strncpy(sz, c, std::min<size_t>(sizeof(sz), (p - c) + 1));
if (!strncasecmp(c_pszFind, sz, strlen(c_pszFind))) if (!strncasecmp(c_pszFind, sz, strlen(c_pszFind)))
return true; return true;
@ -391,7 +391,7 @@ ACMD(do_goto)
if (*arg2 && isdigit(*arg2)) if (*arg2 && isdigit(*arg2))
{ {
str_to_number(empire, arg2); str_to_number(empire, arg2);
empire = MINMAX(1, empire, 3); empire = std::clamp<BYTE>(empire, 1, 3);
} }
else else
empire = ch->GetEmpire(); empire = ch->GetEmpire();
@ -513,7 +513,7 @@ ACMD(do_item)
if (*arg2) if (*arg2)
{ {
str_to_number(iCount, arg2); str_to_number(iCount, arg2);
iCount = MINMAX(1, iCount, ITEM_MAX_COUNT); iCount = std::clamp<int>(iCount, 1, ITEM_MAX_COUNT);
} }
DWORD dwVnum; DWORD dwVnum;
@ -655,7 +655,7 @@ ACMD(do_mob_coward)
else else
iCount = 1; iCount = 1;
iCount = MIN(20, iCount); iCount = std::min(20, iCount);
while (iCount--) while (iCount--)
{ {
@ -737,7 +737,7 @@ ACMD(do_mob_aggresive)
else else
iCount = 1; iCount = 1;
iCount = MIN(20, iCount); iCount = std::min(20, iCount);
while (iCount--) while (iCount--)
{ {
@ -798,9 +798,9 @@ ACMD(do_mob)
iCount = 1; iCount = 1;
if (test_server) if (test_server)
iCount = MIN(40, iCount); iCount = std::min(40, iCount);
else else
iCount = MIN(20, iCount); iCount = std::min(20, iCount);
while (iCount--) while (iCount--)
{ {
@ -1547,7 +1547,7 @@ ACMD(do_advance)
int level = 0; int level = 0;
str_to_number(level, arg2); str_to_number(level, arg2);
tch->ResetPoint(MINMAX(0, level, PLAYER_MAX_LEVEL_CONST)); tch->ResetPoint(std::clamp<int>(level, 0, PLAYER_MAX_LEVEL_CONST));
} }
ACMD(do_respawn) ACMD(do_respawn)
@ -1730,7 +1730,7 @@ ACMD(do_event_flag)
!strcmp(arg1, "mob_gold_buyer") || !strcmp(arg1, "mob_gold_buyer") ||
!strcmp(arg1, "mob_gold_pct_buyer") !strcmp(arg1, "mob_gold_pct_buyer")
) )
value = MINMAX(0, value, 1000); value = std::clamp(value, 0, 1000);
//quest::CQuestManager::instance().SetEventFlag(arg1, atoi(arg2)); //quest::CQuestManager::instance().SetEventFlag(arg1, atoi(arg2));
quest::CQuestManager::instance().RequestSetEventFlag(arg1, value); quest::CQuestManager::instance().RequestSetEventFlag(arg1, value);
@ -2158,7 +2158,7 @@ ACMD(do_level)
int level = 0; int level = 0;
str_to_number(level, arg2); str_to_number(level, arg2);
ch->ResetPoint(MINMAX(1, level, PLAYER_MAX_LEVEL_CONST)); ch->ResetPoint(std::clamp<int>(level, 1, PLAYER_MAX_LEVEL_CONST));
ch->ClearSkill(); ch->ClearSkill();
ch->ClearSubSkill(); ch->ClearSubSkill();
@ -2513,7 +2513,7 @@ ACMD(do_priv_empire)
str_to_number(empire, arg1); str_to_number(empire, arg1);
str_to_number(type, arg2); str_to_number(type, arg2);
str_to_number(value, arg3); str_to_number(value, arg3);
value = MINMAX(0, value, 1000); value = std::clamp(value, 0, 1000);
str_to_number(duration, arg4); str_to_number(duration, arg4);
if (empire < 0 || 3 < empire) if (empire < 0 || 3 < empire)
@ -3159,7 +3159,7 @@ ACMD(do_horse_level)
} }
str_to_number(level, arg2); str_to_number(level, arg2);
level = MINMAX(0, level, HORSE_MAX_LEVEL); level = std::clamp(level, 0, HORSE_MAX_LEVEL);
ch->ChatPacket(CHAT_TYPE_INFO, "horse level set (%s: %d)", victim->GetName(), level); ch->ChatPacket(CHAT_TYPE_INFO, "horse level set (%s: %d)", victim->GetName(), level);
@ -3172,7 +3172,7 @@ ACMD(do_horse_level)
char arg1[256]; char arg1[256];
one_argument(argument, arg1, sizeof(arg1)); one_argument(argument, arg1, sizeof(arg1));
int level = MINMAX(0, atoi(arg1), HORSE_MAX_LEVEL); int level = std::clamp<int>(atoi(arg1), 0, HORSE_MAX_LEVEL);
ch->ChatPacket(CHAT_TYPE_INFO, "horse level set to %d.", level); ch->ChatPacket(CHAT_TYPE_INFO, "horse level set to %d.", level);
ch->SetHorseLevel(level); ch->SetHorseLevel(level);

View File

@ -695,7 +695,7 @@ void config_init(const string& st_localeServiceName)
TOKEN("mark_min_level") TOKEN("mark_min_level")
{ {
str_to_number(guild_mark_min_level, value_string); str_to_number(guild_mark_min_level, value_string);
guild_mark_min_level = MINMAX(0, guild_mark_min_level, GUILD_MAX_LEVEL); guild_mark_min_level = std::clamp<BYTE>(guild_mark_min_level, 0, GUILD_MAX_LEVEL);
continue; continue;
} }
@ -709,7 +709,7 @@ void config_init(const string& st_localeServiceName)
{ {
int i = 0; int i = 0;
str_to_number(i, value_string); str_to_number(i, value_string);
log_set_expiration_days(MINMAX(1, i, 90)); log_set_expiration_days(std::clamp(i, 1, 90));
continue; continue;
} }
@ -988,13 +988,13 @@ void config_init(const string& st_localeServiceName)
TOKEN("spam_block_score") TOKEN("spam_block_score")
{ {
str_to_number(g_uiSpamBlockScore, value_string); str_to_number(g_uiSpamBlockScore, value_string);
g_uiSpamBlockScore = MAX(1, g_uiSpamBlockScore); g_uiSpamBlockScore = std::max<int>(1, g_uiSpamBlockScore);
} }
TOKEN("spam_block_reload_cycle") TOKEN("spam_block_reload_cycle")
{ {
str_to_number(g_uiSpamReloadCycle, value_string); str_to_number(g_uiSpamReloadCycle, value_string);
g_uiSpamReloadCycle = MAX(60, g_uiSpamReloadCycle); // ĂÖźŇ 1şĐ g_uiSpamReloadCycle = std::max<int>(60, g_uiSpamReloadCycle); // ÃÖ¼Ò 1ºÐ
} }
TOKEN("check_multihack") TOKEN("check_multihack")
@ -1025,7 +1025,7 @@ void config_init(const string& st_localeServiceName)
{ {
str_to_number(gPlayerMaxLevel, value_string); str_to_number(gPlayerMaxLevel, value_string);
gPlayerMaxLevel = MINMAX(1, gPlayerMaxLevel, PLAYER_MAX_LEVEL_CONST); gPlayerMaxLevel = std::clamp<int>(gPlayerMaxLevel, 1, PLAYER_MAX_LEVEL_CONST);
fprintf(stderr, "PLAYER_MAX_LEVEL: %d\n", gPlayerMaxLevel); fprintf(stderr, "PLAYER_MAX_LEVEL: %d\n", gPlayerMaxLevel);
} }

View File

@ -107,8 +107,8 @@ extern const DWORD guild_exp_table[GUILD_MAX_LEVEL + 1];
extern const DWORD guild_exp_table2[GUILD_MAX_LEVEL + 1]; extern const DWORD guild_exp_table2[GUILD_MAX_LEVEL + 1];
#define MAX_EXP_DELTA_OF_LEV 31 #define MAX_EXP_DELTA_OF_LEV 31
#define PERCENT_LVDELTA(me, victim) aiPercentByDeltaLev[MINMAX(0, (victim + 15) - me, MAX_EXP_DELTA_OF_LEV - 1)] #define PERCENT_LVDELTA(me, victim) aiPercentByDeltaLev[std::clamp<int>((victim + 15) - me, 0, MAX_EXP_DELTA_OF_LEV - 1)]
#define PERCENT_LVDELTA_BOSS(me, victim) aiPercentByDeltaLevForBoss[MINMAX(0, (victim + 15) - me, MAX_EXP_DELTA_OF_LEV - 1)] #define PERCENT_LVDELTA_BOSS(me, victim) aiPercentByDeltaLevForBoss[std::clamp<int>((victim + 15) - me, 0, MAX_EXP_DELTA_OF_LEV - 1)]
#define CALCULATE_VALUE_LVDELTA(me, victim, val) ((val * PERCENT_LVDELTA(me, victim)) / 100) #define CALCULATE_VALUE_LVDELTA(me, victim, val) ((val * PERCENT_LVDELTA(me, victim)) / 100)
extern const int aiPercentByDeltaLev_euckr[MAX_EXP_DELTA_OF_LEV]; extern const int aiPercentByDeltaLev_euckr[MAX_EXP_DELTA_OF_LEV];
extern const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV]; extern const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV];

View File

@ -209,7 +209,7 @@ void DBManager::PushBilling(CLoginData * pkLD)
pkLD->SetLogonTime(); pkLD->SetLogonTime();
int lRemainSecs = pkLD->GetRemainSecs() - t.dwUseSec; int lRemainSecs = pkLD->GetRemainSecs() - t.dwUseSec;
pkLD->SetRemainSecs(MAX(0, lRemainSecs)); pkLD->SetRemainSecs(std::max(0, lRemainSecs));
t.dwLoginKey = pkLD->GetKey(); t.dwLoginKey = pkLD->GetKey();
t.bBillType = pkLD->GetBillType(); t.bBillType = pkLD->GetBillType();
@ -614,7 +614,7 @@ void SendBillingExpire(const char * c_pszLogin, BYTE bBillType, int iSecs, CLogi
strncpy(ptod.szLogin, c_pszLogin, sizeof(ptod.szLogin)); strncpy(ptod.szLogin, c_pszLogin, sizeof(ptod.szLogin));
ptod.bBillType = bBillType; ptod.bBillType = bBillType;
ptod.dwRemainSeconds = MAX(0, iSecs); ptod.dwRemainSeconds = std::max(0, iSecs);
db_clientdesc->DBPacket(HEADER_GD_BILLING_EXPIRE, 0, &ptod, sizeof(TPacketBillingExpire)); db_clientdesc->DBPacket(HEADER_GD_BILLING_EXPIRE, 0, &ptod, sizeof(TPacketBillingExpire));
sys_log(0, "BILLING: EXPIRE %s type %d sec %d ptr %p", c_pszLogin, bBillType, iSecs, pkLD); sys_log(0, "BILLING: EXPIRE %s type %d sec %d ptr %p", c_pszLogin, bBillType, iSecs, pkLD);
} }
@ -927,7 +927,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
} }
} }
SendBillingExpire(pinfo->szLogin, pinfo->bBillType, MAX(0, iRemainSecs), pkLD); SendBillingExpire(pinfo->szLogin, pinfo->bBillType, std::max(0, iRemainSecs), pkLD);
M2_DELETE(pinfo); M2_DELETE(pinfo);
} }
break; break;

View File

@ -248,7 +248,7 @@ void Initialize()
do do
{ {
strncpy(szCol2, start, MIN(sizeof(szCol2), (tab - start) + 1)); strncpy(szCol2, start, std::min<size_t>(sizeof(szCol2), (tab - start) + 1));
szCol2[tab-start] = '\0'; szCol2[tab-start] = '\0';
trim_and_lower(szCol2, szCol, sizeof(szCol)); trim_and_lower(szCol2, szCol, sizeof(szCol));
@ -378,7 +378,7 @@ int DetermineFish(LPCHARACTER ch)
int adjust = 0; int adjust = 0;
if (quest::CQuestManager::instance().GetEventFlag("fish_miss_pct") != 0) if (quest::CQuestManager::instance().GetEventFlag("fish_miss_pct") != 0)
{ {
int fish_pct_value = MINMAX(0, quest::CQuestManager::instance().GetEventFlag("fish_miss_pct"), 200); int fish_pct_value = std::clamp(quest::CQuestManager::instance().GetEventFlag("fish_miss_pct"), 0, 200);
adjust = (100-fish_pct_value) * fish_info[0].prob[prob_idx] / 100; adjust = (100-fish_pct_value) * fish_info[0].prob[prob_idx] / 100;
} }
@ -565,7 +565,7 @@ int Compute(DWORD fish_id, DWORD ms, DWORD* item, int level)
if (ms > 6000) if (ms > 6000)
return -1; return -1;
int time_step = MINMAX(0,((ms + 99) / 200), MAX_FISHING_TIME_COUNT - 1); int time_step = std::clamp<int>(((ms + 99) / 200), 0, MAX_FISHING_TIME_COUNT - 1);
if (Random::get(1, 100) <= aFishingTime[fish_info[fish_id].time_type][time_step]) if (Random::get(1, 100) <= aFishingTime[fish_info[fish_id].time_type][time_step])
{ {

View File

@ -446,7 +446,7 @@ void CGuild::SendListPacket(LPCHARACTER ch)
buf.write(&(it->second), sizeof(DWORD)*3+1); buf.write(&(it->second), sizeof(DWORD)*3+1);
strncpy(c, it->second.name.c_str(), MIN(sizeof(c), it->second.name.length() + 1)); strncpy(c, it->second.name.c_str(), std::min(sizeof(c), it->second.name.length() + 1));
buf.write(c, CHARACTER_NAME_MAX_LEN+1 ); buf.write(c, CHARACTER_NAME_MAX_LEN+1 );
@ -604,7 +604,7 @@ void CGuild::LoadGuildData(SQLMsg* pmsg)
else else
memset(m_data.abySkill, 0, sizeof(BYTE) * GUILD_SKILL_COUNT); memset(m_data.abySkill, 0, sizeof(BYTE) * GUILD_SKILL_COUNT);
m_data.power = MAX(0, strtoul(row[6], (char **) NULL, 10)); m_data.power = std::max<int>(0, strtoul(row[6], (char **) NULL, 10));
str_to_number(m_data.ladder_point, row[7]); str_to_number(m_data.ladder_point, row[7]);
@ -1411,7 +1411,7 @@ void CGuild::ComputeGuildPoints()
{ {
m_data.max_power = GUILD_BASE_POWER + (m_data.level-1) * GUILD_POWER_PER_LEVEL; m_data.max_power = GUILD_BASE_POWER + (m_data.level-1) * GUILD_POWER_PER_LEVEL;
m_data.power = MINMAX(0, m_data.power, m_data.max_power); m_data.power = std::clamp(m_data.power, 0, m_data.max_power);
} }
int CGuild::GetSkillLevel(DWORD vnum) int CGuild::GetSkillLevel(DWORD vnum)
@ -1489,7 +1489,7 @@ void CGuild::GuildPointChange(BYTE type, int amount, bool save)
case POINT_SP: case POINT_SP:
m_data.power += amount; m_data.power += amount;
m_data.power = MINMAX(0, m_data.power, m_data.max_power); m_data.power = std::clamp(m_data.power, 0, m_data.max_power);
if (save) if (save)
{ {
@ -1800,7 +1800,7 @@ void CGuild::AdvanceLevel(int iLevel)
if (m_data.level == iLevel) if (m_data.level == iLevel)
return; return;
m_data.level = MIN(GUILD_MAX_LEVEL, iLevel); m_data.level = std::min<BYTE>(GUILD_MAX_LEVEL, iLevel);
} }
void CGuild::RequestDepositMoney(LPCHARACTER ch, int iGold) void CGuild::RequestDepositMoney(LPCHARACTER ch, int iGold)

View File

@ -166,7 +166,7 @@ void CHorseRider::UpdateHorseStamina(int iStamina, bool bSend)
{ {
int level = GetHorseLevel(); int level = GetHorseLevel();
m_Horse.sStamina = MINMAX(0, m_Horse.sStamina + iStamina, c_aHorseStat[level].iMaxStamina); m_Horse.sStamina = std::clamp(m_Horse.sStamina + iStamina, 0, c_aHorseStat[level].iMaxStamina);
if (GetHorseStamina() == 0 && IsHorseRiding()) if (GetHorseStamina() == 0 && IsHorseRiding())
{ {
@ -347,7 +347,7 @@ void CHorseRider::UpdateHorseHealth(int iHealth, bool bSend)
{ {
int level = GetHorseLevel(); int level = GetHorseLevel();
m_Horse.sHealth = MINMAX(0, m_Horse.sHealth + iHealth, c_aHorseStat[level].iMaxHealth); m_Horse.sHealth = std::clamp(m_Horse.sHealth + iHealth, 0, c_aHorseStat[level].iMaxHealth);
if (level && m_Horse.sHealth == 0) if (level && m_Horse.sHealth == 0)
HorseDie(); HorseDie();
@ -366,7 +366,7 @@ void CHorseRider::HorseDie()
void CHorseRider::SetHorseLevel(int iLevel) void CHorseRider::SetHorseLevel(int iLevel)
{ {
m_Horse.bLevel = iLevel = MINMAX(0, iLevel, HORSE_MAX_LEVEL); m_Horse.bLevel = iLevel = std::clamp(iLevel, 0, HORSE_MAX_LEVEL);
m_Horse.sStamina = c_aHorseStat[iLevel].iMaxStamina; m_Horse.sStamina = c_aHorseStat[iLevel].iMaxStamina;
m_Horse.sHealth = c_aHorseStat[iLevel].iMaxHealth; m_Horse.sHealth = c_aHorseStat[iLevel].iMaxHealth;

View File

@ -526,7 +526,7 @@ dev_log(LOG_DEB0, "DC : '%s'", msg.c_str());
is >> strPrivEmpire >> empire >> type >> value >> duration; is >> strPrivEmpire >> empire >> type >> value >> duration;
// 최대치 10배 // 최대치 10배
value = MINMAX(0, value, 1000); value = std::clamp(value, 0, 1000);
stResult = "PRIV_EMPIRE FAIL"; stResult = "PRIV_EMPIRE FAIL";
if (!is.fail()) if (!is.fail())

View File

@ -1875,7 +1875,7 @@ void CInputDB::BillingExpire(const char * c_pData)
if (p->dwRemainSeconds <= 60) if (p->dwRemainSeconds <= 60)
{ {
int i = MAX(5, p->dwRemainSeconds); int i = std::max<int>(5, p->dwRemainSeconds);
sys_log(0, "BILLING_EXPIRE: %s %u", p->szLogin, p->dwRemainSeconds); sys_log(0, "BILLING_EXPIRE: %s %u", p->szLogin, p->dwRemainSeconds);
d->DelayedDisconnect(i); d->DelayedDisconnect(i);
} }

View File

@ -395,7 +395,7 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
BYTE bType = WHISPER_TYPE_NORMAL; BYTE bType = WHISPER_TYPE_NORMAL;
char buf[CHAT_MAX_LEN + 1]; char buf[CHAT_MAX_LEN + 1];
strncpy(buf, data + sizeof(TPacketCGWhisper), MIN(iExtraLen + 1, sizeof(buf))); strncpy(buf, data + sizeof(TPacketCGWhisper), std::min<size_t>(iExtraLen + 1, sizeof(buf)));
const size_t buflen = strlen(buf); const size_t buflen = strlen(buf);
if (true == SpamBlockCheck(ch, buf, buflen)) if (true == SpamBlockCheck(ch, buf, buflen))
@ -654,7 +654,7 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
} }
char buf[CHAT_MAX_LEN - (CHARACTER_NAME_MAX_LEN + 3) + 1]; char buf[CHAT_MAX_LEN - (CHARACTER_NAME_MAX_LEN + 3) + 1];
strncpy(buf, data + sizeof(TPacketCGChat), MIN(iExtraLen + 1, sizeof(buf))); strncpy(buf, data + sizeof(TPacketCGChat), std::min<size_t>(iExtraLen + 1, sizeof(buf)));
const size_t buflen = strlen(buf); const size_t buflen = strlen(buf);
if (buflen > 1 && *buf == '/') if (buflen > 1 && *buf == '/')
@ -1359,7 +1359,7 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
} }
else if (bArg > 14 && bArg < 22) else if (bArg > 14 && bArg < 22)
{ {
int idx = MIN(2, ch->GetComboIndex()); int idx = std::min<int>(2, ch->GetComboIndex());
if (ch->GetComboSequence() > 5) // 현재 6콤보 이상은 없다. if (ch->GetComboSequence() > 5) // 현재 6콤보 이상은 없다.
{ {
@ -2561,7 +2561,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
// by mhh : 길드자금은 당분간 넣을 수 없다. // by mhh : 길드자금은 당분간 넣을 수 없다.
return SubPacketLen; return SubPacketLen;
const int gold = MIN(*reinterpret_cast<const int*>(c_pData), __deposit_limit()); const int gold = std::min(*reinterpret_cast<const int*>(c_pData), __deposit_limit());
if (gold < 0) if (gold < 0)
{ {
@ -2584,7 +2584,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
// by mhh : 길드자금은 당분간 뺄 수 없다. // by mhh : 길드자금은 당분간 뺄 수 없다.
return SubPacketLen; return SubPacketLen;
const int gold = MIN(*reinterpret_cast<const int*>(c_pData), 500000); const int gold = std::min(*reinterpret_cast<const int*>(c_pData), 500000);
if (gold < 0) if (gold < 0)
{ {

View File

@ -73,7 +73,7 @@ int CInputP2P::Relay(LPDESC d, const char * c_pData, size_t uiBytes)
} }
char buf[1024]; char buf[1024];
memcpy(buf, c_pbData, MIN(p->lSize, sizeof(buf))); memcpy(buf, c_pbData, std::min<size_t>(p->lSize, sizeof(buf)));
TPacketGCWhisper* p2 = (TPacketGCWhisper*) buf; TPacketGCWhisper* p2 = (TPacketGCWhisper*) buf;
// bType 상위 4비트: Empire 번호 // bType 상위 4비트: Empire 번호
@ -117,7 +117,7 @@ int CInputP2P::Notice(LPDESC d, const char * c_pData, size_t uiBytes)
} }
char szBuf[256+1]; char szBuf[256+1];
strncpy(szBuf, c_pData + sizeof(TPacketGGNotice), MIN(p->lSize + 1, sizeof(szBuf))); strncpy(szBuf, c_pData + sizeof(TPacketGGNotice), std::min<size_t>(p->lSize + 1, sizeof(szBuf)));
SendNotice(szBuf); SendNotice(szBuf);
return (p->lSize); return (p->lSize);
} }
@ -137,7 +137,7 @@ int CInputP2P::MonarchNotice(LPDESC d, const char * c_pData, size_t uiBytes)
} }
char szBuf[256+1]; char szBuf[256+1];
strncpy(szBuf, c_pData + sizeof(TPacketGGMonarchNotice), MIN(p->lSize + 1, sizeof(szBuf))); strncpy(szBuf, c_pData + sizeof(TPacketGGMonarchNotice), std::min<size_t>(p->lSize + 1, sizeof(szBuf)));
SendMonarchNotice(p->bEmpire, szBuf); SendMonarchNotice(p->bEmpire, szBuf);
return (p->lSize); return (p->lSize);
} }

View File

@ -224,10 +224,10 @@ void CItem::UpdatePacket()
DWORD CItem::GetCount() DWORD CItem::GetCount()
{ {
if (GetType() == ITEM_ELK) return MIN(m_dwCount, INT_MAX); if (GetType() == ITEM_ELK) return std::min<DWORD>(m_dwCount, INT_MAX);
else else
{ {
return MIN(m_dwCount, 200); return std::min<DWORD>(m_dwCount, 200);
} }
} }
@ -235,11 +235,11 @@ bool CItem::SetCount(DWORD count)
{ {
if (GetType() == ITEM_ELK) if (GetType() == ITEM_ELK)
{ {
m_dwCount = MIN(count, INT_MAX); m_dwCount = std::min<DWORD>(count, INT_MAX);
} }
else else
{ {
m_dwCount = MIN(count, ITEM_MAX_COUNT); m_dwCount = std::min<DWORD>(count, ITEM_MAX_COUNT);
} }
if (count == 0 && m_pOwner) if (count == 0 && m_pOwner)
@ -630,7 +630,7 @@ void CItem::ModifyPoints(bool bAdd)
} }
else else
{ {
accessoryGrade = MIN(GetAccessorySocketGrade(), ITEM_ACCESSORY_SOCKET_MAX_NUM); accessoryGrade = std::min<int>(GetAccessorySocketGrade(), ITEM_ACCESSORY_SOCKET_MAX_NUM);
} }
for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i) for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
@ -647,7 +647,7 @@ void CItem::ModifyPoints(bool bAdd)
else else
{ {
if (0 != accessoryGrade) if (0 != accessoryGrade)
value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100); value += std::max(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100);
m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value); m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value);
} }
@ -1340,7 +1340,7 @@ EVENTFUNC(timer_based_on_wear_expire_event)
return 0; return 0;
} }
pkItem->SetSocket(ITEM_SOCKET_REMAIN_SEC, remain_time); pkItem->SetSocket(ITEM_SOCKET_REMAIN_SEC, remain_time);
return PASSES_PER_SEC (MIN (60, remain_time)); return PASSES_PER_SEC (std::min<int>(60, remain_time));
} }
void CItem::SetUniqueExpireEvent(LPEVENT pkEvent) void CItem::SetUniqueExpireEvent(LPEVENT pkEvent)
@ -1433,7 +1433,7 @@ void CItem::StartUniqueExpireEvent()
if (iSec == 0) if (iSec == 0)
iSec = 60; iSec = 60;
else else
iSec = MIN(iSec, 60); iSec = std::min(iSec, 60);
SetSocket(ITEM_SOCKET_UNIQUE_SAVE_TIME, 0); SetSocket(ITEM_SOCKET_UNIQUE_SAVE_TIME, 0);
@ -1525,7 +1525,7 @@ bool CItem::IsAccessoryForSocket()
void CItem::SetAccessorySocketGrade(int iGrade) void CItem::SetAccessorySocketGrade(int iGrade)
{ {
SetSocket(0, MINMAX(0, iGrade, GetAccessorySocketMaxGrade())); SetSocket(0, std::clamp(iGrade, 0, GetAccessorySocketMaxGrade()));
int iDownTime = aiAccessorySocketDegradeTime[GetAccessorySocketGrade()]; int iDownTime = aiAccessorySocketDegradeTime[GetAccessorySocketGrade()];
@ -1537,7 +1537,7 @@ void CItem::SetAccessorySocketGrade(int iGrade)
void CItem::SetAccessorySocketMaxGrade(int iMaxGrade) void CItem::SetAccessorySocketMaxGrade(int iMaxGrade)
{ {
SetSocket(1, MINMAX(0, iMaxGrade, ITEM_ACCESSORY_SOCKET_MAX_NUM)); SetSocket(1, std::clamp<int>(iMaxGrade, 0, ITEM_ACCESSORY_SOCKET_MAX_NUM));
} }
void CItem::SetAccessorySocketDownGradeTime(DWORD time) void CItem::SetAccessorySocketDownGradeTime(DWORD time)
@ -1603,7 +1603,7 @@ void CItem::StartAccessorySocketExpireEvent()
if (iSec <= 1) if (iSec <= 1)
iSec = 5; iSec = 5;
else else
iSec = MIN(iSec, 60); iSec = std::min(iSec, 60);
item_vid_event_info* info = AllocEventInfo<item_vid_event_info>(); item_vid_event_info* info = AllocEventInfo<item_vid_event_info>();
info->item_vid = GetVID(); info->item_vid = GetVID();
@ -1881,17 +1881,17 @@ void CItem::CopySocketTo(LPITEM pItem)
int CItem::GetAccessorySocketGrade() int CItem::GetAccessorySocketGrade()
{ {
return MINMAX(0, GetSocket(0), GetAccessorySocketMaxGrade()); return std::clamp<int>(GetSocket(0), 0, GetAccessorySocketMaxGrade());
} }
int CItem::GetAccessorySocketMaxGrade() int CItem::GetAccessorySocketMaxGrade()
{ {
return MINMAX(0, GetSocket(1), ITEM_ACCESSORY_SOCKET_MAX_NUM); return std::clamp<int>(GetSocket(1), 0, ITEM_ACCESSORY_SOCKET_MAX_NUM);
} }
int CItem::GetAccessorySocketDownGradeTime() int CItem::GetAccessorySocketDownGradeTime()
{ {
return MINMAX(0, GetSocket(2), aiAccessorySocketDegradeTime[GetAccessorySocketGrade()]); return std::clamp<int>(GetSocket(2), 0, aiAccessorySocketDegradeTime[GetAccessorySocketGrade()]);
} }
void CItem::AttrLog() void CItem::AttrLog()

View File

@ -22,7 +22,7 @@ void CItemAddonManager::ApplyAddonTo(int iAddonType, LPITEM pItem)
// TODO 일단 하드코딩으로 평타 스킬 수치 변경만 경우만 적용받게한다. // TODO 일단 하드코딩으로 평타 스킬 수치 변경만 경우만 적용받게한다.
int iSkillBonus = MINMAX(-30, (int) (Random::get<std::normal_distribution<>>(0, 5) + 0.5f), 30); int iSkillBonus = std::clamp((int) (Random::get<std::normal_distribution<>>(0, 5) + 0.5f), -30, 30);
int iNormalHitBonus = 0; int iNormalHitBonus = 0;
if (abs(iSkillBonus) <= 20) if (abs(iSkillBonus) <= 20)
iNormalHitBonus = -2 * iSkillBonus + abs(Random::get(-8, 8) + Random::get(-8, 8)) + Random::get(1, 4); iNormalHitBonus = -2 * iSkillBonus + abs(Random::get(-8, 8) + Random::get(-8, 8)) + Random::get(1, 4);

View File

@ -104,7 +104,7 @@ void CItem::AddAttr(BYTE bApply, BYTE bLevel)
else else
{ {
const TItemAttrTable & r = g_map_itemAttr[bApply]; const TItemAttrTable & r = g_map_itemAttr[bApply];
int lVal = r.lValues[MIN(4, bLevel - 1)]; int lVal = r.lValues[std::min(4, bLevel - 1)];
if (lVal) if (lVal)
SetAttribute(i, bApply, lVal); SetAttribute(i, bApply, lVal);

View File

@ -263,7 +263,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
; ;
else if (item->IsStackable()) // 합칠 수 있는 아이템의 경우 else if (item->IsStackable()) // 합칠 수 있는 아이템의 경우
{ {
count = MINMAX(1, count, ITEM_MAX_COUNT); count = std::clamp<int>(count, 1, ITEM_MAX_COUNT);
if (bTryMagic && count <= 1 && IS_SET(item->GetFlag(), ITEM_FLAG_MAKECOUNT)) if (bTryMagic && count <= 1 && IS_SET(item->GetFlag(), ITEM_FLAG_MAKECOUNT))
count = item->GetValue(1); count = item->GetValue(1);

View File

@ -60,7 +60,7 @@ bool ITEM_MANAGER::ReadCommonDropItemFile(const char * c_pszFileName)
if (!p2) if (!p2)
break; break;
strncpy(szTemp, p, MIN(sizeof(szTemp), (p2 - p) + 1)); strncpy(szTemp, p, std::min<size_t>(sizeof(szTemp), (p2 - p) + 1));
p = p2 + 1; p = p2 + 1;
switch (j) switch (j)
@ -610,7 +610,7 @@ bool ITEM_MANAGER::ReadMonsterDropItemGroup(const char * c_pszFileName)
int iRarePct = 0; int iRarePct = 0;
str_to_number(iRarePct, pTok->at(3).c_str()); str_to_number(iRarePct, pTok->at(3).c_str());
iRarePct = MINMAX(0, iRarePct, 100); iRarePct = std::clamp(iRarePct, 0, 100);
sys_log(0," %s count %d rare %d", name.c_str(), iCount, iRarePct); sys_log(0," %s count %d rare %d", name.c_str(), iCount, iRarePct);
pkGroup->AddItem(dwVnum, iCount, iPartPct, iRarePct); pkGroup->AddItem(dwVnum, iCount, iPartPct, iRarePct);

View File

@ -268,7 +268,7 @@ void heartbeat(LPHEART ht, int pulse)
if (save_idx < g_vec_save.size()) if (save_idx < g_vec_save.size())
{ {
count = MIN(100, g_vec_save.size() - save_idx); count = std::min<int>(100, g_vec_save.size() - save_idx);
for (int i = 0; i < count; ++i, ++save_idx) for (int i = 0; i < count; ++i, ++save_idx)
db_clientdesc->DBPacket(HEADER_GD_PLAYER_SAVE, 0, &g_vec_save[save_idx], sizeof(TPlayerTable)); db_clientdesc->DBPacket(HEADER_GD_PLAYER_SAVE, 0, &g_vec_save[save_idx], sizeof(TPlayerTable));

View File

@ -64,7 +64,7 @@ namespace marriage
int TMarriage::GetMarriageGrade() int TMarriage::GetMarriageGrade()
{ {
int point = MINMAX(50, GetMarriagePoint(), 100); int point = std::clamp(GetMarriagePoint(), 50, 100);
if (point < 65) if (point < 65)
return 0; return 0;
else if (point < 80) else if (point < 80)
@ -80,7 +80,7 @@ namespace marriage
{ {
int value = quest::CQuestManager::instance().GetEventFlag("lovepoint"); int value = quest::CQuestManager::instance().GetEventFlag("lovepoint");
if (value) if (value)
return MINMAX(0, value, 100); return std::clamp(value, 0, 100);
} }
int point_per_day = MARRIAGE_POINT_PER_DAY; int point_per_day = MARRIAGE_POINT_PER_DAY;
@ -112,7 +112,7 @@ namespace marriage
// 날짜에 의한 영향 60% 하루당 6% // 날짜에 의한 영향 60% 하루당 6%
// 전투에 의한 영향 60% // 전투에 의한 영향 60%
// 토탈 100% // 토탈 100%
return MIN(50 + MIN(days * point_per_day, max_limit) + MIN(love_point / 1000000, max_limit), 100); return std::min(50 + std::min(days * point_per_day, max_limit) + std::min(love_point / 1000000, max_limit), 100);
} }
bool TMarriage::IsNear() bool TMarriage::IsNear()
@ -433,7 +433,7 @@ namespace marriage
bSave = true; bSave = true;
love_point += point; love_point += point;
love_point = MIN( love_point, 2000000000 ); love_point = std::min( love_point, 2000000000 );
if (test_server) if (test_server)
{ {

View File

@ -157,7 +157,7 @@ namespace mining
if (!pick || pick->GetType() != ITEM_PICK) if (!pick || pick->GetType() != ITEM_PICK)
return 0; return 0;
return defaultPct + SkillLevelAddPct[MINMAX(0, iSkillLevel, 40)] + PickGradeAddPct[MINMAX(0, pick->GetRefineLevel(), 9)]; return defaultPct + SkillLevelAddPct[std::clamp(iSkillLevel, 0, 40)] + PickGradeAddPct[std::clamp(pick->GetRefineLevel(), 0, 9)];
} }
EVENTINFO(mining_event_info) EVENTINFO(mining_event_info)

View File

@ -1220,8 +1220,8 @@ void CParty::ComputeRolePoint(LPCHARACTER ch, BYTE bRole, bool bAdd)
} }
//SKILL_POWER_BY_LEVEL //SKILL_POWER_BY_LEVEL
float k = (float) ch->GetSkillPowerByLevel( MIN(SKILL_MAX_LEVEL, m_iLeadership ) )/ 100.0f; float k = (float) ch->GetSkillPowerByLevel(std::min<int>(SKILL_MAX_LEVEL, m_iLeadership)) / 100.0f;
//float k = (float) aiSkillPowerByLevel[MIN(SKILL_MAX_LEVEL, m_iLeadership)] / 100.0f; //float k = (float) aiSkillPowerByLevel[std::min<int>(SKILL_MAX_LEVEL, m_iLeadership)] / 100.0f;
// //
//sys_log(0,"ComputeRolePoint %fi %d, %d ", k, SKILL_MAX_LEVEL, m_iLeadership ); //sys_log(0,"ComputeRolePoint %fi %d, %d ", k, SKILL_MAX_LEVEL, m_iLeadership );
//END_SKILL_POWER_BY_LEVEL //END_SKILL_POWER_BY_LEVEL
@ -1646,7 +1646,7 @@ BYTE CParty::GetMemberMaxLevel()
if (!bMax) if (!bMax)
bMax = it->second.bLevel; bMax = it->second.bLevel;
else if (it->second.bLevel) else if (it->second.bLevel)
bMax = MAX(bMax, it->second.bLevel); bMax = std::max(bMax, it->second.bLevel);
++it; ++it;
} }
return bMax; return bMax;
@ -1668,7 +1668,7 @@ BYTE CParty::GetMemberMinLevel()
if (!bMin) if (!bMin)
bMin = it->second.bLevel; bMin = it->second.bLevel;
else if (it->second.bLevel) else if (it->second.bLevel)
bMin = MIN(bMin, it->second.bLevel); bMin = std::min(bMin, it->second.bLevel);
++it; ++it;
} }
return bMin; return bMin;
@ -1684,7 +1684,7 @@ int CParty::ComputePartyBonusExpPercent()
int iBonusPartyExpFromItem = 0; int iBonusPartyExpFromItem = 0;
// UPGRADE_PARTY_BONUS // UPGRADE_PARTY_BONUS
int iMemberCount=MIN(8, GetNearMemberCount()); int iMemberCount = std::min<int>(8, GetNearMemberCount());
if (leader && (leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP) || leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_MALL) if (leader && (leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP) || leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_MALL)
|| leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_GIFT) || leader->IsEquipUniqueGroup(10010))) || leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_GIFT) || leader->IsEquipUniqueGroup(10010)))

View File

@ -32,8 +32,8 @@ void CPrivManager::RequestGiveGuildPriv(DWORD guild_id, BYTE type, int value, ti
return; return;
} }
value = MINMAX(0, value, 50); value = std::clamp(value, 0, 50);
duration_sec = MINMAX(0, duration_sec, 60*60*24*7); duration_sec = std::clamp<time_t>(duration_sec, 0, 60*60*24*7);
TPacketGiveGuildPriv p; TPacketGiveGuildPriv p;
p.type = type; p.type = type;
@ -52,8 +52,8 @@ void CPrivManager::RequestGiveEmpirePriv(BYTE empire, BYTE type, int value, time
return; return;
} }
value = MINMAX(0, value, 200); value = std::clamp(value, 0, 200);
duration_sec = MINMAX(0, duration_sec, 60*60*24*7); duration_sec = std::clamp<time_t>(duration_sec, 0, 60*60*24*7);
TPacketGiveEmpirePriv p; TPacketGiveEmpirePriv p;
p.type = type; p.type = type;
@ -72,7 +72,7 @@ void CPrivManager::RequestGiveCharacterPriv(DWORD pid, BYTE type, int value)
return; return;
} }
value = MINMAX(0, value, 100); value = std::clamp(value, 0, 100);
TPacketGiveCharacterPriv p; TPacketGiveCharacterPriv p;
p.type = type; p.type = type;
@ -92,8 +92,8 @@ void CPrivManager::GiveGuildPriv(DWORD guild_id, BYTE type, int value, BYTE bLog
sys_log(0,"Set Guild Priv: guild_id(%u) type(%d) value(%d) duration_sec(%d)", guild_id, type, value, end_time_sec - get_global_time()); sys_log(0,"Set Guild Priv: guild_id(%u) type(%d) value(%d) duration_sec(%d)", guild_id, type, value, end_time_sec - get_global_time());
value = MINMAX(0, value, 50); value = std::clamp(value, 0, 50);
end_time_sec = MINMAX(0, end_time_sec, get_global_time()+60*60*24*7); end_time_sec = std::clamp<time_t>(end_time_sec, 0, get_global_time()+60*60*24*7);
m_aPrivGuild[type][guild_id].value = value; m_aPrivGuild[type][guild_id].value = value;
m_aPrivGuild[type][guild_id].end_time_sec = end_time_sec; m_aPrivGuild[type][guild_id].end_time_sec = end_time_sec;
@ -132,7 +132,7 @@ void CPrivManager::GiveCharacterPriv(DWORD pid, BYTE type, int value, BYTE bLog)
sys_log(0,"Set Character Priv %u %d %d", pid, type, value); sys_log(0,"Set Character Priv %u %d %d", pid, type, value);
value = MINMAX(0, value, 100); value = std::clamp(value, 0, 100);
m_aPrivChar[type][pid] = value; m_aPrivChar[type][pid] = value;
@ -150,8 +150,8 @@ void CPrivManager::GiveEmpirePriv(BYTE empire, BYTE type, int value, BYTE bLog,
sys_log(0, "Set Empire Priv: empire(%d) type(%d) value(%d) duration_sec(%d)", empire, type, value, end_time_sec-get_global_time()); sys_log(0, "Set Empire Priv: empire(%d) type(%d) value(%d) duration_sec(%d)", empire, type, value, end_time_sec-get_global_time());
value = MINMAX(0, value, 200); value = std::clamp(value, 0, 200);
end_time_sec = MINMAX(0, end_time_sec, get_global_time()+60*60*24*7); end_time_sec = std::clamp<time_t>(end_time_sec, 0, get_global_time()+60*60*24*7);
SPrivEmpireData& rkPrivEmpireData=m_aakPrivEmpireData[type][empire]; SPrivEmpireData& rkPrivEmpireData=m_aakPrivEmpireData[type][empire];
rkPrivEmpireData.m_value = value; rkPrivEmpireData.m_value = value;
@ -235,11 +235,11 @@ int CPrivManager::GetPriv(LPCHARACTER ch, BYTE type)
int val; int val;
// 개인, 제국, 길드, 전체 중 큰 값을 취한다. // 개인, 제국, 길드, 전체 중 큰 값을 취한다.
val = MAX(val_ch, GetPrivByEmpire(0, type)); val = std::max(val_ch, GetPrivByEmpire(0, type));
val = MAX(val, GetPrivByEmpire(ch->GetEmpire(), type)); val = std::max(val, GetPrivByEmpire(ch->GetEmpire(), type));
if (ch->GetGuild()) if (ch->GetGuild())
val = MAX(val, GetPrivByGuild(ch->GetGuild()->GetID(), type)); val = std::max(val, GetPrivByGuild(ch->GetGuild()->GetID(), type));
return val; return val;
} }

View File

@ -213,7 +213,7 @@ void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
{ {
TPacketGCWhisper pack; TPacketGCWhisper pack;
int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1); int len = std::min<int>(CHAT_MAX_LEN, strlen(msg) + 1);
pack.bHeader = HEADER_GC_WHISPER; pack.bHeader = HEADER_GC_WHISPER;
pack.wSize = sizeof(TPacketGCWhisper) + len; pack.wSize = sizeof(TPacketGCWhisper) + len;

View File

@ -1133,7 +1133,7 @@ namespace quest
} }
const DWORD dwVnum = static_cast<DWORD>(lua_tonumber(L, 1)); const DWORD dwVnum = static_cast<DWORD>(lua_tonumber(L, 1));
const size_t count = MINMAX(1, static_cast<size_t>(lua_tonumber(L, 2)), 10); const size_t count = std::clamp<size_t>(static_cast<size_t>(lua_tonumber(L, 2)), 1, 10);
const bool isAggresive = static_cast<bool>(lua_toboolean(L, 3)); const bool isAggresive = static_cast<bool>(lua_toboolean(L, 3));
size_t SpawnCount = 0; size_t SpawnCount = 0;

View File

@ -102,7 +102,7 @@ namespace quest
if (!lua_isnumber(L, 1)) if (!lua_isnumber(L, 1))
return 0; return 0;
int newlevel = MINMAX(0, (int)lua_tonumber(L, 1), HORSE_MAX_LEVEL); int newlevel = std::clamp((int)lua_tonumber(L, 1), 0, HORSE_MAX_LEVEL);
ch->SetHorseLevel(newlevel); ch->SetHorseLevel(newlevel);
ch->ComputePoints(); ch->ComputePoints();
ch->SkillLevelPacket(); ch->SkillLevelPacket();
@ -145,7 +145,7 @@ namespace quest
{ {
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
int pct = MINMAX(0, ch->GetHorseHealth() * 100 / ch->GetHorseMaxHealth(), 100); int pct = std::clamp(ch->GetHorseHealth() * 100 / ch->GetHorseMaxHealth(), 0, 100);
sys_log(1, "horse.get_health_pct %d", pct); sys_log(1, "horse.get_health_pct %d", pct);
if (ch->GetHorseLevel()) if (ch->GetHorseLevel())
@ -171,7 +171,7 @@ namespace quest
int horse_get_stamina_pct(lua_State* L) int horse_get_stamina_pct(lua_State* L)
{ {
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
int pct = MINMAX(0, ch->GetHorseStamina() * 100 / ch->GetHorseMaxStamina(), 100); int pct = std::clamp(ch->GetHorseStamina() * 100 / ch->GetHorseMaxStamina(), 0, 100);
sys_log(1, "horse.get_stamina_pct %d", pct); sys_log(1, "horse.get_stamina_pct %d", pct);
if (ch->GetHorseLevel()) if (ch->GetHorseLevel())

View File

@ -77,7 +77,7 @@ namespace quest
lua_pushnumber(L, 0); lua_pushnumber(L, 0);
return 1; return 1;
} }
lua_pushnumber(L, MAX(0, npc->GetPoint(POINT_ATT_GRADE_BONUS))); lua_pushnumber(L, std::max(0, npc->GetPoint(POINT_ATT_GRADE_BONUS)));
return 1; return 1;
} }
@ -88,7 +88,7 @@ namespace quest
{ {
return 0; return 0;
} }
npc->SetPoint(POINT_ATT_GRADE_BONUS, MAX(0, npc->GetPoint(POINT_ATT_GRADE_BONUS)-1)); npc->SetPoint(POINT_ATT_GRADE_BONUS, std::max(0, npc->GetPoint(POINT_ATT_GRADE_BONUS)-1));
return 0; return 0;
} }
@ -100,7 +100,7 @@ namespace quest
lua_pushnumber(L, 0); lua_pushnumber(L, 0);
return 1; return 1;
} }
lua_pushnumber(L, MAX(0, npc->GetPoint(POINT_DEF_GRADE_BONUS))); lua_pushnumber(L, std::max(0, npc->GetPoint(POINT_DEF_GRADE_BONUS)));
return 1; return 1;
} }
@ -111,7 +111,7 @@ namespace quest
{ {
return 0; return 0;
} }
npc->SetPoint(POINT_DEF_GRADE_BONUS, MAX(0, npc->GetPoint(POINT_DEF_GRADE_BONUS)-1)); npc->SetPoint(POINT_DEF_GRADE_BONUS, std::max(0, npc->GetPoint(POINT_DEF_GRADE_BONUS)-1));
return 0; return 0;
} }

View File

@ -865,8 +865,8 @@ namespace quest
//포인트 : 스킬, 서브스킬, 스탯 //포인트 : 스킬, 서브스킬, 스탯
ch->PointChange(POINT_SKILL, newLevel - ch->GetLevel()); ch->PointChange(POINT_SKILL, newLevel - ch->GetLevel());
ch->PointChange(POINT_SUB_SKILL, newLevel < 10 ? 0 : newLevel - MAX(ch->GetLevel(), 9)); ch->PointChange(POINT_SUB_SKILL, newLevel < 10 ? 0 : newLevel - std::max(ch->GetLevel(), 9));
ch->PointChange(POINT_STAT, ((MINMAX(1, newLevel, 90) - ch->GetLevel()) * 3) + ch->GetPoint(POINT_LEVEL_STEP)); ch->PointChange(POINT_STAT, ((std::clamp(newLevel, 1, 90) - ch->GetLevel()) * 3) + ch->GetPoint(POINT_LEVEL_STEP));
//레벨 //레벨
ch->PointChange(POINT_LEVEL, newLevel - ch->GetLevel()); ch->PointChange(POINT_LEVEL, newLevel - ch->GetLevel());
//HP, SP //HP, SP
@ -1149,7 +1149,7 @@ namespace quest
sys_log(0, "QUEST [REWARD] %s give exp %s lev %d percent %g%%", ch->GetName(), lua_tostring(L, 1), lev, proc); sys_log(0, "QUEST [REWARD] %s give exp %s lev %d percent %g%%", ch->GetName(), lua_tostring(L, 1), lev, proc);
DWORD exp = (DWORD)((exp_table[MINMAX(0, lev, PLAYER_EXP_TABLE_MAX)] * proc) / 100); DWORD exp = (DWORD)((exp_table[std::clamp<int>(lev, 0, PLAYER_EXP_TABLE_MAX)] * proc) / 100);
PC * pPC = CQuestManager::instance().GetCurrentPC(); PC * pPC = CQuestManager::instance().GetCurrentPC();
LogManager::instance().QuestRewardLog(pPC->GetCurrentQuestName().c_str(), ch->GetPlayerID(), ch->GetLevel(), exp, 0); LogManager::instance().QuestRewardLog(pPC->GetCurrentQuestName().c_str(), ch->GetPlayerID(), ch->GetLevel(), exp, 0);

View File

@ -159,7 +159,7 @@ namespace quest
istreambuf_iterator<char> ib(inf), ie; istreambuf_iterator<char> ib(inf), ie;
m_mapOwnArgQuest[event_index][quest_index][state_index].resize(MAX(index + 1, m_mapOwnArgQuest[event_index][quest_index][state_index].size())); m_mapOwnArgQuest[event_index][quest_index][state_index].resize(std::max<size_t>(index + 1, m_mapOwnArgQuest[event_index][quest_index][state_index].size()));
if (type_name == "when") if (type_name == "when")
{ {

View File

@ -198,7 +198,7 @@ bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, BYTE count)
if (count == 0) if (count == 0)
count = item->GetCount(); count = item->GetCount();
count = MIN(200 - item2->GetCount(), count); count = std::min<BYTE>(200 - item2->GetCount(), count);
if (item->GetCount() >= count) if (item->GetCount() >= count)
Remove(bCell); Remove(bCell);

View File

@ -1295,9 +1295,6 @@ bool SECTREE_MANAGER::ForAttrRegionRightAngle( int lMapIndex, int lCX, int lCY,
return mode == ATTR_REGION_MODE_CHECK ? false : true; return mode == ATTR_REGION_MODE_CHECK ? false : true;
} }
#define min( l, r ) ((l) < (r) ? (l) : (r))
#define max( l, r ) ((l) < (r) ? (r) : (l))
bool SECTREE_MANAGER::ForAttrRegionFreeAngle( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int lRotate, DWORD dwAttr, EAttrRegionMode mode ) bool SECTREE_MANAGER::ForAttrRegionFreeAngle( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int lRotate, DWORD dwAttr, EAttrRegionMode mode )
{ {
float fx1 = (-lCW/2) * sinf(float(lRotate)/180.0f*3.14f) + (-lCH/2) * cosf(float(lRotate)/180.0f*3.14f); float fx1 = (-lCW/2) * sinf(float(lRotate)/180.0f*3.14f) + (-lCH/2) * cosf(float(lRotate)/180.0f*3.14f);
@ -1330,15 +1327,15 @@ bool SECTREE_MANAGER::ForAttrRegionFreeAngle( int lMapIndex, int lCX, int lCY, i
float fb3 = fy4 - fTilt1*fx4; float fb3 = fy4 - fTilt1*fx4;
float fb4 = fy4 - fTilt2*fx4; float fb4 = fy4 - fTilt2*fx4;
float fxMin = min(fx1, min(fx2, min(fx3, fx4))); float fxMin = std::min(fx1, std::min(fx2, std::min(fx3, fx4)));
float fxMax = max(fx1, max(fx2, max(fx3, fx4))); float fxMax = std::max(fx1, std::max(fx2, std::max(fx3, fx4)));
for (int i = int(fxMin); i < int(fxMax); ++i) for (int i = int(fxMin); i < int(fxMax); ++i)
{ {
float fyValue1 = fTilt1*i + min(fb1, fb3); float fyValue1 = fTilt1*i + std::min(fb1, fb3);
float fyValue2 = fTilt2*i + min(fb2, fb4); float fyValue2 = fTilt2*i + std::min(fb2, fb4);
float fyValue3 = fTilt1*i + max(fb1, fb3); float fyValue3 = fTilt1*i + std::max(fb1, fb3);
float fyValue4 = fTilt2*i + max(fb2, fb4); float fyValue4 = fTilt2*i + std::max(fb2, fb4);
float fMinValue; float fMinValue;
float fMaxValue; float fMaxValue;
@ -1351,7 +1348,7 @@ bool SECTREE_MANAGER::ForAttrRegionFreeAngle( int lMapIndex, int lCX, int lCY, i
else else
fMinValue = fyValue4; fMinValue = fyValue4;
for (int j = int(min(fMinValue, fMaxValue)); j < int(max(fMinValue, fMaxValue)); ++j) { for (int j = int(std::min(fMinValue, fMaxValue)); j < int(std::max(fMinValue, fMaxValue)); ++j) {
if ( ForAttrRegionCell( lMapIndex, lCX + (lCW / 2) + i, lCY + (lCH / 2) + j, dwAttr, mode ) ) if ( ForAttrRegionCell( lMapIndex, lCX + (lCW / 2) + i, lCY + (lCH / 2) + j, dwAttr, mode ) )
return true; return true;
} }

View File

@ -75,7 +75,7 @@ EVENTFUNC(target_event)
int iDist = 5000; int iDist = 5000;
if (info->iMapIndex != pkChr->GetMapIndex()) if (info->iMapIndex != pkChr->GetMapIndex())
return MINMAX(passes_per_sec / 2, iDist / (1500 / passes_per_sec), passes_per_sec * 5); return std::clamp(iDist / (1500 / passes_per_sec), passes_per_sec / 2, passes_per_sec * 5);
switch (info->iType) switch (info->iType)
{ {
@ -128,7 +128,7 @@ EVENTFUNC(target_event)
if (!bRet) if (!bRet)
return passes_per_sec; return passes_per_sec;
else else
return MINMAX(passes_per_sec / 2, iDist / (1500 / passes_per_sec), passes_per_sec * 5); return std::clamp(iDist / (1500 / passes_per_sec), passes_per_sec / 2, passes_per_sec * 5);
} }
void CTargetManager::CreateTarget(DWORD dwPID, void CTargetManager::CreateTarget(DWORD dwPID,

View File

@ -12,7 +12,7 @@ CGrid::CGrid(int w, int h) : m_iWidth(w), m_iHeight(h)
CGrid::CGrid(CGrid * pkGrid, int w, int h) : m_iWidth(w), m_iHeight(h) CGrid::CGrid(CGrid * pkGrid, int w, int h) : m_iWidth(w), m_iHeight(h)
{ {
m_pGrid = new char[m_iWidth * m_iHeight]; m_pGrid = new char[m_iWidth * m_iHeight];
int iSize = std::MIN(w * h, pkGrid->m_iWidth * pkGrid->m_iHeight); int iSize = std::min(w * h, pkGrid->m_iWidth * pkGrid->m_iHeight);
memcpy(m_pGrid, pkGrid->m_pGrid, sizeof(char) * iSize); memcpy(m_pGrid, pkGrid->m_pGrid, sizeof(char) * iSize);
} }

View File

@ -5,20 +5,12 @@
#include "effolkronium/random.hpp" #include "effolkronium/random.hpp"
using Random = effolkronium::random_static; using Random = effolkronium::random_static;
#define SAFE_FREE(p) { if (p) { free( (void *) p); (p) = NULL; } } #include <algorithm>
#define SAFE_DELETE(p) { if (p) { delete (p); (p) = NULL; } }
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p) = NULL; } }
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } }
#define LOWER(c) (((c)>='A' && (c) <= 'Z') ? ((c)+('a'-'A')) : (c)) #define LOWER(c) (((c)>='A' && (c) <= 'Z') ? ((c)+('a'-'A')) : (c))
#define UPPER(c) (((c)>='a' && (c) <= 'z') ? ((c)+('A'-'a')) : (c)) #define UPPER(c) (((c)>='a' && (c) <= 'z') ? ((c)+('A'-'a')) : (c))
#define str_cmp strcasecmp #define str_cmp strcasecmp
#define STRNCPY(dst, src, len) do {strncpy(dst, src, len); dst[len] = '\0'; } while(0)
extern char * str_dup(const char * source); // 메모리 할당 해서 source 복사 한거 리턴
extern void printdata(const unsigned char * data, int bytes); // data를 hex랑 ascii로 출력 (패킷 분석 등에 쓰임)
extern int filesize(FILE * fp); // 파일 크기 리턴
#define core_dump() core_dump_unix(__FILE__, __LINE__) #define core_dump() core_dump_unix(__FILE__, __LINE__)
extern void core_dump_unix(const char *who, WORD line); // 코어를 강제로 덤프 extern void core_dump_unix(const char *who, WORD line); // 코어를 강제로 덤프
@ -29,12 +21,6 @@ using Random = effolkronium::random_static;
extern void trim_and_lower(const char * src, char * dest, size_t dest_size); extern void trim_and_lower(const char * src, char * dest, size_t dest_size);
// 문자열을 소문자로
extern void lower_string(const char * src, char * dest, size_t dest_len);
// arg1이 arg2로 시작하는가? (대소문자 구별하지 않음)
extern int is_abbrev(char *arg1, char *arg2);
// a와 b의 시간이 얼마나 차이나는지 리턴 // a와 b의 시간이 얼마나 차이나는지 리턴
extern struct timeval * timediff(const struct timeval *a, const struct timeval *b); extern struct timeval * timediff(const struct timeval *a, const struct timeval *b);
@ -44,10 +30,6 @@ using Random = effolkronium::random_static;
// 현재 시간 curr_tm으로 부터 days가 지난 날을 리턴 // 현재 시간 curr_tm으로 부터 days가 지난 날을 리턴
extern struct tm * tm_calc(const struct tm *curr_tm, int days); extern struct tm * tm_calc(const struct tm *curr_tm, int days);
extern int MAX(int a, int b); // 둘중에 큰 값을 리턴
extern int MIN(int a, int b); // 둘중에 작은 값을 리턴
extern int MINMAX(int min, int value, int max); // 최소 최대 값을 함께 비교해서 리턴
extern void thecore_sleep(struct timeval * timeout); // timeout만큼 프로세스 쉬기 extern void thecore_sleep(struct timeval * timeout); // timeout만큼 프로세스 쉬기
extern float get_float_time(); extern float get_float_time();

View File

@ -162,7 +162,7 @@ void buffer_reset(LPBUFFER buffer)
void buffer_write(LPBUFFER& buffer, const void *src, int length) void buffer_write(LPBUFFER& buffer, const void *src, int length)
{ {
if (buffer->write_point_pos + length >= buffer->mem_size) if (buffer->write_point_pos + length >= buffer->mem_size)
buffer_realloc(buffer, buffer->mem_size + length + MIN(10240, length)); buffer_realloc(buffer, buffer->mem_size + length + std::min(10240, length));
memcpy(buffer->write_point, src, length); memcpy(buffer->write_point, src, length);
buffer_write_proceed(buffer, length); buffer_write_proceed(buffer, length);

View File

@ -10,56 +10,6 @@
static struct timeval null_time = { 0, 0 }; static struct timeval null_time = { 0, 0 };
#define ishprint(x) ((((x) & 0xE0) > 0x90) || isprint(x))
void printdata(const unsigned char *data, int bytes)
{
int i, j, k;
const unsigned char *p;
fprintf(stderr, "------------------------------------------------------------------\n");
j = bytes;
while (1)
{
k = j >= 16 ? 16 : j;
p = data;
for (i = 0; i < 16; i++)
{
if (i >= k)
fprintf(stderr, " ");
else
fprintf(stderr, "%02x ", *p);
p++;
}
fprintf(stderr, "| ");
p = data;
for (i = 0; i < k; i++)
{
if (i >= k)
fprintf(stderr, " ");
else
{
fprintf(stderr, "%c", ishprint(*p) && ishprint(*(p+1)) ? *p : '.');
}
p++;
}
fprintf(stderr, "\n");
j -= 16;
data += 16;
if (j <= 0)
break;
}
fprintf(stderr, "------------------------------------------------------------------\n");
}
struct timeval * timediff(const struct timeval *a, const struct timeval *b) struct timeval * timediff(const struct timeval *a, const struct timeval *b)
{ {
static struct timeval rslt; static struct timeval rslt;
@ -166,73 +116,6 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
} }
} }
void lower_string(const char *src, char *dest, size_t dest_size)
{
const char* tmp = src;
size_t len = 0;
if (!dest || dest_size == 0)
return;
if (!src)
{
*dest = '\0';
return;
}
// \0 확보
--dest_size;
while (*tmp && len < dest_size)
{
*(dest++) = LOWER(*tmp); // LOWER는 매크로라 ++ 쓰면 안됨
++tmp;
++len;
}
*dest = '\0';
}
char *str_dup(const char *source)
{
char *new_line;
CREATE(new_line, char, strlen(source) + 1);
return (strcpy(new_line, source));
}
/* arg1 이 arg2 의 앞단과 같을 때 1 을 리턴한다. */
int is_abbrev(char *arg1, char *arg2)
{
if (!*arg1)
return 0;
for (; *arg1 && *arg2; arg1++, arg2++)
if (LOWER(*arg1) != LOWER(*arg2))
return 0;
if (!*arg1)
return 1;
else
return 0;
}
int filesize(FILE *fp)
{
int pos;
int size;
pos = ftell(fp);
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, pos, SEEK_SET);
return (size);
}
/* "Name : 비엽" 과 같이 "항목 : 값" 으로 이루어진 문자열에서 /* "Name : 비엽" 과 같이 "항목 : 값" 으로 이루어진 문자열에서
token , value . */ token , value . */
void parse_token(char *src, char *token, char *value) void parse_token(char *src, char *token, char *value)
@ -327,24 +210,6 @@ struct tm * tm_calc(const struct tm * curr_tm, int days)
return (&new_tm); return (&new_tm);
} }
int MIN(int a, int b)
{
return a < b ? a : b;
}
int MAX(int a, int b)
{
return a > b ? a : b;
}
int MINMAX(int min, int value, int max)
{
register int tv;
tv = (min > value ? min : value);
return (max < tv) ? max : tv;
}
#ifndef __WIN32__ #ifndef __WIN32__
void thecore_sleep(struct timeval* timeout) void thecore_sleep(struct timeval* timeout)
{ {