Exemplo n.º 1
0
    /// --------------------------------------------------------------------------------------
    /// <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();
    }
Exemplo n.º 2
0
    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);
            }
        }
    }
Exemplo n.º 3
0
    /// --------------------------------------------------------------------------------------
    /// <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);
    }