/// -------------------------------------------------------------------------------------- /// <summary> /// �ı�Ӣ�۵ĵȼ� /// </summary> /// -------------------------------------------------------------------------------------- private void LevelChange(int nValue, bool bKill) { int MAX_LEVEL = 100; if (nValue < 0 || nValue > MAX_LEVEL) { return; } if (m_nLevel == nValue) { return; } m_nLevel = nValue; tagLevelUpEffect pEffect = CProtoManager.inst.GetEffectLevel(m_nLevel); if (pEffect != null) { SetBaseAttValue(ERoleAttribute.ERA_Physique, pEffect.nRoleAtt[0]); SetBaseAttValue(ERoleAttribute.ERA_Strength, pEffect.nRoleAtt[1]); SetBaseAttValue(ERoleAttribute.ERA_Pneuma, pEffect.nRoleAtt[2]); SetBaseAttValue(ERoleAttribute.ERA_InnerForce, pEffect.nRoleAtt[3]); SetBaseAttValue(ERoleAttribute.ERA_Technique, pEffect.nRoleAtt[4]); SetBaseAttValue(ERoleAttribute.ERA_MaxHP, pEffect.nMaxHP); SetBaseAttValue(ERoleAttribute.ERA_MaxMP, pEffect.nMaxMP); } RecalAtt(); SetAttValue(ERoleAttribute.ERA_HP, GetAttValue(ERoleAttribute.ERA_MaxHP), false); SetAttValue(ERoleAttribute.ERA_MP, GetAttValue(ERoleAttribute.ERA_MaxMP), false); OnAttChangeEvent(); }
private void LoadLevelExp( ) { CXmlContainer xml = new CXmlContainer(); List <string> list = new List <string> (); if (xml.LoadXML("data/level_up", "id", list)) { for (int i = 0; i < list.Count; i++) { tagLevelUpEffect item = new tagLevelUpEffect(); item.nLevel = xml.GetInt("id", list[i], 0); item.nExpLevelUp = xml.GetInt("ExpLevelUp", list[i], 0); item.nRoleAtt[0] = xml.GetInt("Physique", list[i], 0); item.nRoleAtt[1] = xml.GetInt("Strength", list[i], 0); item.nRoleAtt[2] = xml.GetInt("Pneuma", list[i], 0); item.nRoleAtt[3] = xml.GetInt("InnerForce", list[i], 0); item.nRoleAtt[4] = xml.GetInt("Technique", list[i], 0); item.nMaxHP = xml.GetInt("HP", list[i], 0); item.nMaxMP = xml.GetInt("MP", list[i], 0); m_mapLevelExp.Add(item); } } }
/// -------------------------------------------------------------------------------------- /// <summary> /// �ı�Ӣ�۵ľ��� /// </summary> /// -------------------------------------------------------------------------------------- public int ChangeExp(int nVal) { if (nVal < 0) { m_nCurExp += nVal; } if (nVal > 0) { tagLevelUpEffect pEffect = CProtoManager.inst.GetEffectLevel(m_nLevel); int nLevelUpExpRemain = pEffect.nExpLevelUp - m_nCurExp; if (nLevelUpExpRemain > nVal) { // not up level // 20 % int nPhaseExp = pEffect.nExpLevelUp / 5; int nOldPhase = m_nCurExp / nPhaseExp; int nNewPhase = (m_nCurExp + nVal) / nPhaseExp; if (nOldPhase != nNewPhase) { SetAttValue(ERoleAttribute.ERA_HP, GetAttValue(ERoleAttribute.ERA_MaxHP), false); SetAttValue(ERoleAttribute.ERA_MP, GetAttValue(ERoleAttribute.ERA_MaxMP), false); } m_nCurExp += nVal; } else { int MAX_LEVEL = 100; m_nCurExp += nLevelUpExpRemain; if (m_nLevel == MAX_LEVEL) { return(0); } nVal -= nLevelUpExpRemain; int nNextLevel = m_nLevel + 1; for ( ; nNextLevel <= MAX_LEVEL; nNextLevel++) { pEffect = CProtoManager.inst.GetEffectLevel(nNextLevel); if (pEffect.nExpLevelUp <= nVal) { nVal -= pEffect.nExpLevelUp; } else { break; } } if (nNextLevel > MAX_LEVEL) { nNextLevel = MAX_LEVEL; nVal = pEffect.nExpLevelUp; } LevelChange(nNextLevel, false); m_nCurExp = nVal; } } OnAttChangeEvent(); return(m_nCurExp); }