Files
Sun1602/SolarSlot/ItemOptionHeader.h
2022-10-26 12:25:11 +08:00

386 lines
18 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef _SOLAR_SLOT_ITEMOPTIONHEADER_H
#define _SOLAR_SLOT_ITEMOPTIONHEADER_H
#pragma once
//==================================================================================================
/// 物品选项处理部分通用标题
/**
@author Kim Min Wook < taiyo@webzen.co.kr >
@since 2004. 12. 29
@remark
-
@note
-
@history
- 09.09.06 | waverix | code rearrangement
*/
//==================================================================================================
// NOTE: f101221.3L, add new namespace 'ns_formula' to group calculation logic
namespace ns_formula {};
using namespace ns_formula; // to compatible custom logic
//--------------------------------------------------------------------------------------------------
// 选项相关结构体
//-------------------------------------------------------------------------
enum eENCHANTLEVEL
{
ENCHANT_LOW, //< 0 ~ 6
ENCHANT_MIDDLE, //< 7 ~ 9
ENCHANT_HIGH, //< 10 ~ 12
#ifdef _NA_003966_20111227_ADD_ENCHANT
ENCHANT_HIGHEST, // 13~15
#endif //_NA_003966_20111227_ADD_ENCHANT
ENCHANT_MAX,
};
enum eRANK
{
RANK_F = -1, //< 稀有物品等级时使用
RANK_E = 0,
RANK_D,
RANK_C,
RANK_B,
RANK_MA,
RANK_A,
RANK_PA,
RANK_MS,
RANK_S,
RANK_PS,
RANK_MAX,
};
enum eRANK_LEVEL
{
RANK_LOW = 0, //< E ~ B
RANK_MIDDLE = 1, //< -A ~ +A
RANK_HIGH = 2, //< -S ~ +S
};
// _NA_000251_20100727_SOCKET_SYSTEM
// 贾德等级(为了以后增加等级也容易添加名称,以数字形式命名)
enum eSOCKET_LEVEL
{
kZardGradeUnused = 0, // 禁用贾德等级
kZardGrade1 = 1, // 下级
kZardGrade2 = 2, // 中级
kZardGrade3 = 3, // 上级
kZardGrade4 = 4, // 最高级
kZardGradeMax,
};
enum eSOCKET
{
SOCKET_1 = 0,
SOCKET_2,
SOCKET_3,
#ifdef _NA_0_20100727_SOCKET_SYSTEM_CONVERT
SOCKET_4,
SOCKET_5,
#endif // _NA_0_20100727_SOCKET_SYSTEM_CONVERT
SOCKET_MAX,
};
enum { SOCKET_MAX_V8 = 5 };
enum { SOCKET_MAX_V7 = 3 };
// _NA_0_20100727_SOCKET_SYSTEM_CONVERT
// db 2位信息
enum eSOCKET_IDENTIFY_TYPE
{
eSOCKET_IDENTIFY_NOT_PROCESS = 0, // 非插口道具(一般道具),尚未决定(掉落等)
eSOCKET_UNIDENTIFIED_ITEM, // 未确认插口道具(1次成功)
eSOCKET_FAIL_IDENTIFY_PROCESS, // 未成为插口道具的物品(在第一次未确认插口生成过程中失败)
eSOCKET_IDENTIFIED_ITEM, // 确认插口个数的道具
};
enum sLIMITED_NUM
{
LIMITED_1 = 0,
LIMITED_2,
LIMITED_3,
LIMITED_MAX,
};
// _NA_003740_20111122_RANDOM_ITEM
// 随机物品值种类等级
struct RandomValueTypeGrade
{
enum Value
{
kGrade1 = 1,
kGrade2 = 2
};
enum Boundary
{
kMinGrade = kGrade1,
kMaxGrade = kGrade2
};
}; // RandomValueTypeGrade
// 随机物品值等级
struct RandomValueGrade
{
#ifdef _NA_003740_20210624_ADDITEMRANDOM_ITEM6
enum Value
{
kNone = 0, // 无等级
kGrade1 = 1,
kGrade2 = 2,
kGrade3 = 3,
kGrade4 = 4,
kGrade5 = 5,
kGrade6 = 6,
kGrade7 = 7
};
enum Boundary
{
kMinGrade = kGrade1,
kMaxGrade = kGrade7
};
#else
enum Value
{
kNone = 0, // 无等级
kGrade1 = 1,
kGrade2 = 2,
kGrade3 = 3,
kGrade4 = 4,
kGrade5 = 5,
kGrade6 = 6
};
enum Boundary
{
kMinGrade = kGrade1,
kMaxGrade = kGrade6
};
#endif
}; // RandomValueGrade
//--------------------------------------------------------------------------------------------------
//基本选项信息
//eATTRTYPE的许多属性中,只删除了道具中使用的。
//技能中使用所有属性。
//-------------------------------------------------------------------------------
//注意:不要打折扣。
//由于不同的调试工作,索引错误
//-------------------------------------------------------------------------------
// NOTE: [V]=value type, [R]=ratio type
//-------------------------------------------------------------------------------
const eATTR_TYPE g_ITEM_OPTION[] =
{
eATTR_TYPE_INVALID, //[ 0] 不存在(初始值)
eATTR_ATTACK_SPEED, //[ 1] 增加总攻击速度
eATTR_PHYSICAL_ATTACK_SUCCESS_RATIO, //[ 2] 全体攻击成功率增加率
eATTR_MAGICAL_FIRE_ATTACK_POWER, //[ 3] [V]元素(火)攻击力
eATTR_MAGICAL_WATER_ATTACK_POWER, //[ 4] [V]元素(水)攻击力
eATTR_MAGICAL_EARTH_ATTACK_POWER, //[ 5] [V]元素(风)攻击力
eATTR_MAGICAL_WIND_ATTACK_POWER, //[ 6] [V]元素(土)攻击力
eATTR_MAGICAL_DARKNESS_ATTACK_POWER, //[ 7] [V]元素(黑暗)攻击力
eATTR_DEL_PHYSICAL_TARGET_DEFENSE_RATIO, //[ 8] [R]攻击目标物理防御力减少率
eATTR_DEL_FIRE_TARGET_DEFENSE_RATIO, //[ 9] [R]攻击目标元素(火)防御力减少率
eATTR_DEL_WATER_TARGET_DEFENSE_RATIO, //[ 10] [R]攻击目标元素(水)防御力减少率
eATTR_DEL_EARTH_TARGET_DEFENSE_RATIO, //[ 11] [R]攻击目标元素(风)防御力减少率
eATTR_DEL_WIND_TARGET_DEFENSE_RATIO, //[ 12] [R]攻击目标元素(大地)防御力减少率
eATTR_DEL_DARKNESS_TARGET_DEFENSE_RATIO, //[ 13] [R]攻击目标元素(黑暗)防御力减少率
eATTR_MOVE_SPEED, //[ 14] 增加移动速度
eATTR_PHYSICAL_ATTACK_BLOCK_RATIO, //[ 15] [R]攻击防御率增加率
#ifdef _NA001605_EP2_ATTRIBUTES_RENEWAL_
eATTR_DEL_FIRE_DAMAGE, //[ 16] [R]EP2:元素(火)伤害减率
eATTR_DEL_WATER_DAMAGE, //[ 17] [R]EP2:对元素(水)的伤害减免率
eATTR_DEL_WIND_DAMAGE, //[ 18] [R]EP2:元素(风)伤害减率
eATTR_DEL_EARTH_DAMAGE, //[ 19] [R]EP2:对元素(大地)的伤害减免率
eATTR_DEL_DARKNESS_DAMAGE, //[ 20] [R]EP2:对元素(黑暗)的伤害减免率
#else
eATTR_MAGICAL_FIRE_DEFENSE_POWER, //[ 16] EP2:未使用,[V]魔法属性抵抗(火)
eATTR_MAGICAL_WATER_DEFENSE_POWER, //[ 17] EP2:未使用,[V]魔法属性抵抗(水)
eATTR_MAGICAL_EARTH_DEFENSE_POWER, //[ 18] EP2:未使用,[V]魔法属性抵抗(土)
eATTR_MAGICAL_WIND_DEFENSE_POWER, //[ 19] EP2:未使用,[V]魔法属性抵抗(风)
eATTR_MAGICAL_DARKNESS_DEFENSE_POWER, //[ 20] EP2:未使用,[V]魔法属性抵抗(黑暗)
#endif
eATTR_OPTION_ALL_ATTACK_POWER, //[ 21] EP2:未使用,选项整体物理攻击力,EP2:47相同
eATTR_OPTION_ALL_DEFENSE_POWER, //[ 22] EP2:未使用,选项整体物理防御力,EP2:49相同
eATTR_STR, //[ 23] 属性(力量)
eATTR_DEX, //[ 24] 属性(敏捷)
eATTR_INT, //[ 25] 属性(智力)
eATTR_VIT, //[ 26] 属性(体力)
eATTR_SPR, //[ 27] 属性(精神力)
eATTR_MAX_HP, //[ 28] 最大HP
eATTR_MAX_MP, //[ 29] 最大MP/SP
eATTR_ADD_SKILL_ATTACK_POWER, //[ 30] 技能追加攻击力
eATTR_ADD_SKILL_DAMAGE_RATIO, //[ 31] 技能伤害加成率
eATTR_INCREASE_STAT_POINT, //[ 32] 五重奏
eATTR_DECREASE_LIMIT_STAT, //[ 33] 五重奏限制数值减少
eATTR_MP_SPEND_INCREASE, //[ 34] MP消耗增减
eATTR_MAGICAL_ALL_ATTACK_POWER, //[ 35] 全部元素攻击力
#ifdef _NA001605_EP2_ATTRIBUTES_RENEWAL_
eATTR_DEL_MAGICAL_ALL_DAMAGE, //[ 36] [R]EP2:元素(所有)伤害减率
#else
eATTR_MAGICAL_ALL_DEFENSE_POWER, //[ 36] EP1:所有元素防御力
#endif
eATTR_ABSORB_HP, //[ 37] HP吸收
eATTR_ABSORB_MP, //[ 38] MP/SP吸收
eATTR_RECOVERY_HP, //[ 39] HP恢复量
eATTR_RECOVERY_MP, //[ 40] MP恢复量
eATTR_ADD_ALL_CRITICAL_RATIO, //[ 41] 整体概率
eATTR_CRITICAL_DAMAGE_CHANGE, //[ 42] 暴击伤害
eATTR_REFLECT_DAMAGE_RATIO, //[ 43] 伤害反射
eATTR_BONUS_MONEY_RATIO, //[ 44] 增加游戏币
eATTR_BONUS_EXP_RATIO, //[ 45] 增加经验值
eATTR_AREA_ATTACK_RATIO, //[ 46] 多重攻击概率
eATTR_OPTION_PHYSICAL_ATTACK_POWER, //[ 47] 物理攻击力
eATTR_OPTION_MAGICAL_ATTACK_POWER, //[ 48] EP2:未使用,魔法攻击力
eATTR_OPTION_PHYSICAL_DEFENSE_POWER, //[ 49] 物理防御力
eATTR_OPTION_MAGICAL_DEFENSE_POWER, //[ 50] EP2:未使用,魔法防御力
eATTR_DECREASE_DAMAGE, //[ 51] 伤害减少(适用时间:减少适用伤害本身.)
eATTR_RESURRECTION_RATIO, //[ 52] 死亡时自身复活的几率
eATTR_DOUBLE_DAMAGE_RATIO, //[ 53] 伤害的两倍几率
eATTR_LUCKMON_INC_DAMAGE, //[ 54] 攻击幸运怪时追加伤害
eATTR_COPOSITE_INC_RATIO, //[ 55] 组合成功率增加
eATTR_BYPASS_DEFENCE_RATIO, //[ 56] 防御无视率
eATTR_INCREASE_MIN_DAMAGE, //[ 57] 增加最小伤害
eATTR_INCREASE_MAX_DAMAGE, //[ 58] 最大伤害增加
eATTR_DECREASE_ITEMDURA_RATIO, //[ 59] 道具耐久力减少无视确认率
eATTR_RESISTANCE_BADSTATUS_RATIO, //[ 60] 技能效果无视率
eATTR_INCREASE_SKILLDURATION, //[ 61] 技能持续时间增加(Buff系列)
eATTR_DECREASE_SKILL_SKILLDURATION, //[ 62] 技能持续时间增减(Debuff系列)<f110531.6L,由“减少”改变
eATTR_OPTION_ETHER_DAMAGE_RATIO, //[ 63] 埃特韦手机伤害变化(EP2reserve deletion
eATTR_INCREASE_RESERVE_HP, //[ 64] 累计HP增加
eATTR_BONUS_CASTING_TIME, //[ 65] 技能选角时间增减.
eATTR_RESIST_HOLDING, //[ 66] 保持耐性
eATTR_RESIST_SLEEP, //[ 67] 抗滑性
eATTR_RESIST_POISON, //[ 68] 抗中毒性
eATTR_RESIST_KNOCKBACK, //[ 69] 击退耐性
eATTR_RESIST_DOWN, //[ 70] 击倒耐性
eATTR_RESIST_STUN, //[ 71] 抗晕厥性
eATTR_DECREASE_PVPDAMAGE, //[ 72] PVP伤害减少(适用时间:[51:伤害减少]适用时追加计算PvP限定)
eATTR_ADD_DAMAGE, //[ 73] 附加伤害(适用时间:基本伤害公式最后)
eATTR_AUTO_ITEM_PICK_UP, //[ 74] 自动拾取Item
// __NA_001244_20090417_ATTACK_RESIST
// CHANGES: f110103.4L, block contents about PvP resist attributes. ranges = [75, 92]
eATTR_BONUS_SKILL_COOL_TIME, //[ 75] [R]技能冷却时间增减(EP2)
eATTR_OPTION_ETHER_PvE_DAMAGE_RATIO, //[ 76] 埃特韦手机伤害变化(PvE)
#ifdef _NA_003966_20111227_ADD_ENCHANT
eATTR_INCREASE_ENCHANT_RATIO, // [77] 天赋成功率增加
#else
eATTR_TYPE_INVALID, // [77] eATTR_RESIST_ALLATTACK_ALLCHAR, // 77 莫登凯利所有攻击耐性.
#endif
#ifdef _20220109_ADD_ATTACKDECDAMAGE //xiaomi 添加贯穿词条
eATTR_BYPASS_DECDAMAGE, // [78] 贯穿
#else
eATTR_TYPE_INVALID,
#endif
eATTR_TYPE_INVALID, // [79] eATTR_RESIST_SKILLATTACK_BERSERKER, // 79 Busker技能攻击耐性.
eATTR_TYPE_INVALID, // [80] eATTR_RESIST_ALLATTACK_BERSERKER, // 80 Busker所有攻击耐性.
eATTR_TYPE_INVALID, // [81] eATTR_RESIST_NOMALATTACK_VALKYRIE, // 81 女武神一般攻击耐性.
eATTR_TYPE_INVALID, // [82] eATTR_RESIST_SKILLATTACK_VALKYRIE, // 82 女武神技能攻击耐性.
eATTR_TYPE_INVALID, // [83] eATTR_RESIST_ALLATTACK_VALKYRIE, // 83 女武神所有攻击耐性.
eATTR_TYPE_INVALID, // [84] eATTR_RESIST_NOMALATTACK_DRAGON, // 84 龙一般攻击耐性.
eATTR_TYPE_INVALID, // [85] eATTR_RESIST_SKILLATTACK_DRAGON, // 85 龙技能攻击耐性.
eATTR_TYPE_INVALID, // [86] eATTR_RESIST_ALLATTACK_DRAGON, // 86 龙全体攻击耐性.
eATTR_TYPE_INVALID, // [87] eATTR_RESIST_NOMALATTACK_ELEMENTALIST, // 87 艾尔利普通攻击耐性.
eATTR_TYPE_INVALID, // [88] eATTR_RESIST_SKILLATTACK_ELEMENTALIST, // 88 艾尔利技能攻击耐性.
eATTR_TYPE_INVALID, // [89] eATTR_RESIST_ALLATTACK_ELEMENTALIST, // 89 艾尔利所有攻击耐性.
eATTR_TYPE_INVALID, // [90] eATTR_RESIST_NOMALATTACK_SHADOW, // 90 碎度普通攻击耐性.
eATTR_TYPE_INVALID, // [91] eATTR_RESIST_SKILLATTACK_SHADOW, // 91 碎度技能攻击耐性.
eATTR_TYPE_INVALID, // [92] eATTR_RESIST_ALLATTACK_SHADOW, // 92 突击所有攻击耐性.
// __NA_001290_20090525_SHIELD_SYSTEM
eATTR_MAX_SD, //[ 93] 最大SD
eATTR_RECOVERY_SD, //[ 94] SD恢复量
#ifdef _NA001605_EP2_ATTRIBUTES_RENEWAL_
eATTR_DEL_MAGICAL_ALL_TARGET_DEFENSE_RATIO, //[ 95] [R]攻击目标元素(所有)防御减少率(Be从[V]改为type)
#else
eATTR_DEL_MAGICAL_TARGET_DEFENSE_RATIO, //[ 95] EP2:未使用,攻击对象魔法防御力减少
#endif
eATTR_ENEMY_CRITICAL_RATIO_CHANGE, //[ 96] 被击时目标暴击几率减少
eATTR_PREMIUMSERVICE_PCBANG, //[ 97] 网吧效果
//_NA_006680_20130426_ITEM_OPTION_ADD_AND_MODIFY
eATTR_ATTACK_DAMAGE_ABSORB_SD_RATIO, //[ 98] 加害伤害SD切换量
eATTR_ATTACK_DAMAGE_ABSORB_HP_RATIO, //[ 99] 加害伤害HP转换量
//_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
eATTR_ENEMY_CRITICAL_DAMAGE_CHANGE, //[100]被击时目标的暴击伤害增减
eATTR_CRAFT_COST_RATIO, // [101] 制作费用增减
eATTR_CRAFT_PREVENT_EXTINCTION_MATERIAL_RATIO, // [102] 制作失败时防止材料消失
eATTR_ENCHANT_COST_RATIO, // [103] 成本增减
eATTR_ENCHANT_PREVENT_DESTROY_N_DOWNGRADE_ITEM_RATIO, // [104] 积分失败时,物品消失,防止下载
eATTR_RECOVER_POTION_COOLTIME_RATIO, // [105] 恢复动作冷却时间减少
eATTR_RECOVER_POTION_RECOVERY_RATIO, // [106] 恢复任务恢复量增加
eATTR_QUEST_REWARD_EXP_RATIO, // [107] 任务奖励经验增加
eATTR_MAX_DAMAGE_RATIO, // [108] 最大伤害发生几率增减
eATTR_DOMINATION_MAPOBJECT_DAMAGE_RATIO, // [109] 攻城目标伤害增减
eATTR_SHOP_REPAIR_HEIM_RATIO, // [110] 商店维修增减
eATTR_SHOP_BUY_HEIM_RATIO, // [111] 商店购买时增减
eATTR_MAX_FP, // [112] 位置Blade最大FP
eATTR_RECOVERY_FP, // [113] 位置Blade FP恢复量(攻击时)
eATTR_INCREASE_DAMAGE_RATIO, // [114] 伤害增加
//_NA_008124_20150313_AWAKENING_SYSTEM
eATTR_AWAKENING_PROBABILITY, // [115] 觉醒几率增减
//_NA_008486_20150914_TOTAL_BALANCE
eATTR_DEBUFF_DURATION, // [116]资产ㅡDebuff技术效果持续时间强化(ms)
//_NA_008540_20151027_ADD_ITEMOPTION_ELITE4
eATTR_DECREASE_DAMAGE_NPC, // [117] npc造成的伤害减少
eATTR_DECREASE_DAMAGE_BERSERKER, // [118] Busker造成的伤害减少
eATTR_DECREASE_DAMAGE_DRAGONKNIGHT, // [119] Dragon night造成的伤害减少
eATTR_DECREASE_DAMAGE_VALKYRIE, // [120] 女武神给予的伤害减少
eATTR_DECREASE_DAMAGE_ELEMENTALIST, // [121] 减少艾尔利门塔尔的伤害
eATTR_DECREASE_DAMAGE_SHADOW, // [122] 减少眼影造成的伤害
eATTR_DECREASE_DAMAGE_MYSTIC, // [123] 减少Mystic造成的伤害
eATTR_DECREASE_DAMAGE_HELLROID, // [124] helloid造成的伤害减少
eATTR_DECREASE_DAMAGE_WITCHBLADE, // [125] 位置Blade造成的伤害减少
eATTR_INCREASE_SKILL_LEVEL
#ifdef _NA_003740_20210704_SKILL_LEVLEUP_OPTION
eATTR_LEVELUP_SKILL, // [126] 技能等级提升 by:十里坡剑神 2021-07-04
#endif //_NA_003740_20210704_SKILL_LEVLEUP_OPTION
}; // (WARNING) 可使用到127。之后会形成流媒体扩张,所以要注意.
// 顺序不能改变!!!!
//--------------------------------------------------------------------------------------------------
namespace ns_formula {
;
// f101221.3L, f090906
// argumens:
// option_type : eVALUE_TYPE
extern bool CheckAttrValidity(eATTR_TYPE attr_type, int option_type, int option_value);
// ref: index of g_ITEM_OPTION
// argumens:
// option_index : the index of g_ITEM_OPTION
// option_type : eVALUE_TYPE
extern bool CheckOptionValidity(WORD option_index, int option_type, int option_value);
// NOTE: f110323.3L, this method is planned for item attribute calculation prefetching and
// restriction filter of stable item option calculations
// ref: index of g_ITEM_OPTION
extern bool CheckStatsRelatedOption(uint16_t option_index);
}; //end of namespace 'ns_formula'
//==================================================================================================
inline bool ns_formula::CheckOptionValidity(WORD option_index, int option_type, int option_value)
{
// OptionIndex有效性检查
if (bool out_of_ranges = (option_index >= _countof(g_ITEM_OPTION))) {
return false;
};
bool result = CheckAttrValidity(g_ITEM_OPTION[option_index], option_type, option_value);
return result;
}
//==================================================================================================
#endif //_SOLAR_SLOT_ITEMOPTIONHEADER_H