void CPythonPlayer::SetSkillLevel_(DWORD dwSkillIndex, DWORD dwSkillGrade, DWORD dwSkillLevel) { DWORD dwSlotIndex; if (!GetSkillSlotIndex(dwSkillIndex, &dwSlotIndex)) return; if (dwSlotIndex >= SKILL_MAX_NUM) return; switch (dwSkillGrade) { case 0: m_playerStatus.aSkill[dwSlotIndex].iGrade = dwSkillGrade; m_playerStatus.aSkill[dwSlotIndex].iLevel = dwSkillLevel; break; case 1: m_playerStatus.aSkill[dwSlotIndex].iGrade = dwSkillGrade; m_playerStatus.aSkill[dwSlotIndex].iLevel = dwSkillLevel - 20 + 1; break; case 2: m_playerStatus.aSkill[dwSlotIndex].iGrade = dwSkillGrade; m_playerStatus.aSkill[dwSlotIndex].iLevel = dwSkillLevel - 30 + 1; break; case 3: m_playerStatus.aSkill[dwSlotIndex].iGrade = dwSkillGrade; m_playerStatus.aSkill[dwSlotIndex].iLevel = dwSkillLevel - 40 + 1; break; #ifdef ENABLE_SKILLS_LEVEL_OVER_P case 4: m_playerStatus.aSkill[dwSlotIndex].iGrade = dwSkillGrade; m_playerStatus.aSkill[dwSlotIndex].iLevel = dwSkillLevel - 50 + 1; break; #endif } #ifdef ENABLE_SKILLS_LEVEL_OVER_P const DWORD SKILL_MAX_LEVEL = 50; #else const DWORD SKILL_MAX_LEVEL = 40; #endif if (dwSkillLevel>SKILL_MAX_LEVEL) { m_playerStatus.aSkill[dwSlotIndex].fcurEfficientPercentage = 0.0f; m_playerStatus.aSkill[dwSlotIndex].fnextEfficientPercentage = 0.0f; TraceError("CPythonPlayer::SetSkillLevel(SlotIndex=%d, SkillLevel=%d)", dwSlotIndex, dwSkillLevel); return; } m_playerStatus.aSkill[dwSlotIndex].fcurEfficientPercentage = LocaleService_GetSkillPower(dwSkillLevel) / 100.0f; m_playerStatus.aSkill[dwSlotIndex].fnextEfficientPercentage = LocaleService_GetSkillPower(dwSkillLevel + 1) / 100.0f; }