#ifdef ENABLE_SKILL_SET_BONUS
constexpr BYTE SKILL_COUNT = 6;
static const DWORD SkillList[JOB_MAX_NUM][SKILL_GROUP_MAX_NUM][SKILL_COUNT] =
{
{ { 1, 2, 3, 4, 5, 6 }, { 16, 17, 18, 19, 20, 21 } }, // savasci bedensel - zihinsel
{ { 31, 32, 33, 34, 35, 36 }, { 46, 47, 48, 49, 50, 51 } }, // ninja yakin - uzak
{ { 61, 62, 63, 64, 65, 66 }, { 76, 77, 78, 79, 80, 81 } }, // sura buyulu - kara buyu
{ { 91, 92, 93, 94, 95, 96 }, { 106,107,108,109,110,111 } }, // saman ejderha - iyilestirme
#ifdef ENABLE_WOLFMAN_CHARACTER
{ { 170,171,172,173,174,175 }, { 0, 0, 0, 0, 0, 0 } }, // kurt
#endif
};
enum class ESkillSetState {
TYPE_FAIL,
TYPE_LEGENDARY,
};
static const uint32_t skillSetBonusTable[1][4][2] =
{
{// legendary bonuslar
{ POINT_ATTBONUS_MONSTER, 3000 },
{ POINT_ATTBONUS_STONE, 3000 },
{ POINT_ATTBONUS_BOSS, 3000 },
{ POINT_ST, 500 },
}
};
constexpr uint8_t SAGE_LEVEL = 50; // sage_level skill leveli (default 50)
constexpr uint8_t LEGENDARY_LEVEL = 60; // legendary skill leveli (default 60)
void CHARACTER::CheckSkillBonus() {
const auto& tempList = SkillList[GetJob()][GetSkillGroup() - 1];
const auto& giveAffects = [&](const auto& arr, const auto aff) { // -> affect lambd
if (FindAffect(aff)) { return; }
const auto arrSize = sizeof(arr) / sizeof(arr[0]);
for (unsigned i(0); i < arrSize; ++i) {
const auto bonus = arr[i][0];
const auto val = arr[i][1];
if (val == 0) { continue; }
AddAffect(aff, bonus, val, 0, INFINITE_AFFECT_DURATION, 0, true, true);
if (IsGM()) { ChatPacket(1, "[GM_INFO] SkillSetBonus adding point : %u, val : %u", bonus, val); }
}
};
auto state = ESkillSetState::TYPE_LEGENDARY;
// sage begin
for (const auto skillVnum : tempList)
{
//if (skillVnum == 0) { continue; }
if (GetSkillLevel(skillVnum) < LEGENDARY_LEVEL) {
state = ESkillSetState::TYPE_FAIL;
break;
}
}
if (state == ESkillSetState::TYPE_FAIL) {
if (FindAffect(AFFECT_SAGE_SKILL_SET_BONUS)) { RemoveAffect(AFFECT_SAGE_SKILL_SET_BONUS); return; }
}
else {
auto& setBonusList = skillSetBonusTable[static_cast<BYTE>(ESkillSetState::TYPE_LEGENDARY) - 1];
giveAffects(setBonusList, AFFECT_SAGE_SKILL_SET_BONUS);
}
// sage end
/*
// legendary begin
state = ESkillSetState::TYPE_LEGENDARY;
for (const auto skillVnum : tempList)
{ // check sage
if (skillVnum == 0) { continue; }
if (GetSkillLevel(skillVnum) < LEGENDARY_LEVEL) {
state = ESkillSetState::TYPE_FAIL;
break;
}
}
if (state == ESkillSetState::TYPE_FAIL) {
if (FindAffect(AFFECT_LEG_SKILL_SET_BONUS)) { RemoveAffect(AFFECT_LEG_SKILL_SET_BONUS); }
}
else {
auto& setBonusList = skillSetBonusTable[static_cast<BYTE>(ESkillSetState::TYPE_LEGENDARY) - 1];
giveAffects(setBonusList, AFFECT_LEG_SKILL_SET_BONUS);
}
// legendary end
*/
}
#endif