forked from metin2/server
191 lines
5.3 KiB
C++
191 lines
5.3 KiB
C++
#ifndef __INC_METIN_II_GAME_CONSTANTS_H__
|
|
#define __INC_METIN_II_GAME_CONSTANTS_H__
|
|
|
|
#include <common/tables.h>
|
|
|
|
enum EMonsterChatState
|
|
{
|
|
MONSTER_CHAT_WAIT,
|
|
MONSTER_CHAT_ATTACK,
|
|
MONSTER_CHAT_CHASE,
|
|
MONSTER_CHAT_ATTACKED,
|
|
};
|
|
|
|
typedef struct SMobRankStat
|
|
{
|
|
int iGoldPercent; // µ·ÀÌ ³ª¿Ã È®·ü
|
|
} TMobRankStat;
|
|
|
|
typedef struct SMobStat
|
|
{
|
|
BYTE byLevel;
|
|
WORD HP;
|
|
DWORD dwExp;
|
|
WORD wDefGrade;
|
|
} TMobStat;
|
|
|
|
typedef struct SBattleTypeStat
|
|
{
|
|
int AttGradeBias;
|
|
int DefGradeBias;
|
|
int MagicAttGradeBias;
|
|
int MagicDefGradeBias;
|
|
} TBattleTypeStat;
|
|
|
|
typedef struct SJobInitialPoints
|
|
{
|
|
int st, ht, dx, iq;
|
|
int max_hp, max_sp;
|
|
int hp_per_ht, sp_per_iq;
|
|
int hp_per_lv_begin, hp_per_lv_end;
|
|
int sp_per_lv_begin, sp_per_lv_end;
|
|
int max_stamina;
|
|
int stamina_per_con;
|
|
int stamina_per_lv_begin, stamina_per_lv_end;
|
|
} TJobInitialPoints;
|
|
|
|
typedef struct __coord
|
|
{
|
|
int x, y;
|
|
} Coord;
|
|
|
|
typedef struct SApplyInfo
|
|
{
|
|
BYTE bPointType; // APPLY -> POINT
|
|
} TApplyInfo;
|
|
|
|
enum {
|
|
FORTUNE_BIG_LUCK,
|
|
FORTUNE_LUCK,
|
|
FORTUNE_SMALL_LUCK,
|
|
FORTUNE_NORMAL,
|
|
FORTUNE_SMALL_BAD_LUCK,
|
|
FORTUNE_BAD_LUCK,
|
|
FORTUNE_BIG_BAD_LUCK,
|
|
FORTUNE_MAX_NUM,
|
|
};
|
|
|
|
const int STONE_INFO_MAX_NUM = 10;
|
|
const int STONE_LEVEL_MAX_NUM = 4;
|
|
|
|
struct SStoneDropInfo
|
|
{
|
|
DWORD dwMobVnum;
|
|
int iDropPct;
|
|
int iLevelPct[STONE_LEVEL_MAX_NUM+1];
|
|
};
|
|
|
|
inline bool operator < (const SStoneDropInfo& l, DWORD r)
|
|
{
|
|
return l.dwMobVnum < r;
|
|
}
|
|
|
|
inline bool operator < (DWORD l, const SStoneDropInfo& r)
|
|
{
|
|
return l < r.dwMobVnum;
|
|
}
|
|
|
|
inline bool operator < (const SStoneDropInfo& l, const SStoneDropInfo& r)
|
|
{
|
|
return l.dwMobVnum < r.dwMobVnum;
|
|
}
|
|
|
|
extern const TApplyInfo aApplyInfo[MAX_APPLY_NUM];
|
|
extern const TMobRankStat MobRankStats[MOB_RANK_MAX_NUM];
|
|
|
|
extern TBattleTypeStat BattleTypeStats[BATTLE_TYPE_MAX_NUM];
|
|
|
|
extern const DWORD party_exp_distribute_table[PLAYER_MAX_LEVEL_CONST + 1];
|
|
|
|
extern const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1];
|
|
extern const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1];
|
|
extern const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1];
|
|
|
|
extern const DWORD* exp_table;
|
|
|
|
extern const DWORD guild_exp_table[GUILD_MAX_LEVEL + 1];
|
|
extern const DWORD guild_exp_table2[GUILD_MAX_LEVEL + 1];
|
|
|
|
#define MAX_EXP_DELTA_OF_LEV 31
|
|
#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[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)
|
|
extern const int aiPercentByDeltaLev_euckr[MAX_EXP_DELTA_OF_LEV];
|
|
extern const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV];
|
|
extern const int * aiPercentByDeltaLev;
|
|
extern const int * aiPercentByDeltaLevForBoss;
|
|
|
|
#define ARROUND_COORD_MAX_NUM 161
|
|
extern Coord aArroundCoords[ARROUND_COORD_MAX_NUM];
|
|
extern TJobInitialPoints JobInitialPoints[JOB_MAX_NUM];
|
|
|
|
extern const int aiMobEnchantApplyIdx[MOB_ENCHANTS_MAX_NUM];
|
|
extern const int aiMobResistsApplyIdx[MOB_RESISTS_MAX_NUM];
|
|
|
|
extern const int aSkillAttackAffectProbByRank[MOB_RANK_MAX_NUM];
|
|
|
|
extern const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL]; // 1°³±îÁö
|
|
extern const int aiItemMagicAttributePercentLow[ITEM_ATTRIBUTE_MAX_LEVEL];
|
|
|
|
extern const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM];
|
|
|
|
extern const int aiWeaponSocketQty[WEAPON_NUM_TYPES];
|
|
extern const int aiArmorSocketQty[ARMOR_NUM_TYPES];
|
|
extern const int aiSocketPercentByQty[5][4];
|
|
|
|
extern const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1];
|
|
|
|
extern const int * aiSkillPowerByLevel;
|
|
extern const int aiSkillPowerByLevel_euckr[SKILL_MAX_LEVEL + 1];
|
|
|
|
extern const int aiPolymorphPowerByLevel[SKILL_MAX_LEVEL + 1];
|
|
|
|
extern const int aiSkillBookCountForLevelUp[10];
|
|
extern const int aiGrandMasterSkillBookCountForLevelUp[10];
|
|
extern const int aiGrandMasterSkillBookMinCount[10];
|
|
extern const int aiGrandMasterSkillBookMaxCount[10];
|
|
extern const int CHN_aiPartyBonusExpPercentByMemberCount[9];
|
|
extern const int KOR_aiPartyBonusExpPercentByMemberCount[9];
|
|
extern const int KOR_aiUniqueItemPartyBonusExpPercentByMemberCount[9];
|
|
|
|
typedef std::map<DWORD, TItemAttrTable> TItemAttrMap;
|
|
extern TItemAttrMap g_map_itemAttr;
|
|
extern TItemAttrMap g_map_itemRare;
|
|
|
|
extern const int * aiChainLightningCountBySkillLevel;
|
|
extern const int aiChainLightningCountBySkillLevel_euckr[SKILL_MAX_LEVEL + 1];
|
|
|
|
extern const char * c_apszEmpireNames[EMPIRE_MAX_NUM];
|
|
extern const char * c_apszPrivNames[MAX_PRIV_NUM];
|
|
extern const SStoneDropInfo aStoneDrop[STONE_INFO_MAX_NUM];
|
|
|
|
typedef struct
|
|
{
|
|
int lMapIndex;
|
|
int iWarPrice;
|
|
int iWinnerPotionRewardPctToWinner;
|
|
int iLoserPotionRewardPctToWinner;
|
|
int iInitialScore;
|
|
int iEndScore;
|
|
} TGuildWarInfo;
|
|
|
|
extern TGuildWarInfo KOR_aGuildWarInfo[GUILD_WAR_TYPE_MAX_NUM];
|
|
|
|
// ACCESSORY_REFINE
|
|
enum
|
|
{
|
|
ITEM_ACCESSORY_SOCKET_MAX_NUM = 3
|
|
};
|
|
|
|
extern const int aiAccessorySocketAddPct[ITEM_ACCESSORY_SOCKET_MAX_NUM];
|
|
extern const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1];
|
|
extern const int aiAccessorySocketDegradeTime[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1];
|
|
extern const int aiAccessorySocketPutPct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1];
|
|
int FN_get_apply_type(const char *apply_type_string);
|
|
|
|
// END_OF_ACCESSORY_REFINE
|
|
|
|
int FN_get_apply_type(const char *apply_type_string);
|
|
#endif
|
|
|