⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playerstats.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
            {
                Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
                continue;
            }            
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == A_MAX_MP || GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == A_MP )
            {
                maxmp += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_MAX_MP || GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_MP )
            {
                maxmp += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_MAX_MP || GServer->StatsList[items[i].stats].stat[0] == A_MP)
                    maxmp += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == A_MAX_MP || GServer->StatsList[items[i].stats].stat[0] == A_MP)
                    maxmp += GServer->StatsList[items[i].stats].value[1];
            }               
        }
    }
    

    if(Fairy) maxmp = (unsigned int)floor(maxmp*1.2);     
    if(Status->MP_up!=0xff)
        maxmp += MagicStatus[Status->MP_up].Value;
    if(Status->MP_down!=0xff)
        maxmp -= MagicStatus[Status->MP_down].Value;
        
	return maxmp;
}

// Get HP Regeneration Amount
unsigned int CPlayer::GetHPRegenAmount( )
{
    UINT amount = (UINT)ceil ( Stats->MaxHP * 0.02 );
    if( Status->Stance == 1 )
        amount *= 4;   
    for(UINT i=0;i<MAX_SKILL;i++)
    {
        if( cskills[i].id == 0 || cskills[i].thisskill == 0 )
            continue;
        if( cskills[i].thisskill->type == 15 ) //Pasive
        {         
            for(UINT j=0;j<3;j++ )
            {   // Passive skill fixed by Kirk
                if( cskills[i].thisskill->buff[j] == A_HP_REC_RATE || cskills[i].thisskill->buff[j] == HP_REC_AMONT)
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        amount += amount * cskills[i].thisskill->value2[j] / 100;
                    if( cskills[i].thisskill->value1[j] > 0 )
                        amount += cskills[i].thisskill->value1[j];
                }
            }
        }
    }                       
    for(UINT i=1;i<12;i++)//cloth stats [from tomiz]
    {
        if( items[i].count != 0 )
        {
            if(items[i].itemtype>9)
            {
                Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
                continue;
            }            
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == A_HP_REC_RATE)
            {
                amount += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_HP_REC_RATE)
            {
                amount += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_HP_REC_RATE )
                    amount += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == A_HP_REC_RATE )
                    amount += GServer->StatsList[items[i].stats].value[1];
            }                 
        }
    }        
    return amount;
}

// Get MP Regeneration Amount
unsigned int CPlayer::GetMPRegenAmount( )
{
    UINT amount = (UINT)ceil ( Stats->MaxMP * 0.02 );
    if( Status->Stance == 1 )
        amount *= 4;    
    for(UINT i=0;i<MAX_SKILL;i++)
    {
        if( cskills[i].id == 0 || cskills[i].thisskill == 0 )
            continue;
        if( cskills[i].thisskill->type == 15 ) //Pasive
        {         
            for(UINT j=0;j<3;j++ )
            {   // Passive skill fixed by Kirk
                if( cskills[i].thisskill->buff[j] == A_MP_REC_RATE || cskills[i].thisskill->buff[j] == MP_REC_RATE )
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        amount += amount * cskills[i].thisskill->value2[j] / 100;
                    if( cskills[i].thisskill->value1[j] > 0 )
                        amount += cskills[i].thisskill->value1[j];
                }
            }
        }
    }                             
    for(UINT i=1;i<12;i++)//cloth stats [from tomiz]
    {
        if( items[i].count != 0)
        {
            if(items[i].itemtype>9)
            {
                Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
                continue;
            }            
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == A_MP_REC_RATE)
            {
                amount += amount * GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1] / 100;
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_MP_REC_RATE)
            {
                amount += amount * GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1] / 100;
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_MP_REC_RATE )
                    amount += amount * GServer->StatsList[items[i].stats].value[0] / 100;
                if(GServer->StatsList[items[i].stats].stat[1] == A_MP_REC_RATE )
                    amount += amount * GServer->StatsList[items[i].stats].value[1] / 100;
            }                 
        }
    }                        
    return amount;    
}

// max weight supported
unsigned int CPlayer::GetMaxWeight( )
{
    UINT weight = 0;
    weight = ((Attr->Str + Attr->Estr) + (Attr->Str + Attr->Estr)*2) * 2 + Stats->Level+220 + (Stats->Level+220)*4;
    UINT Extra = 0;    
    for(UINT i=0;i<MAX_SKILL;i++)
    {
        if( cskills[i].id == 0 || cskills[i].thisskill == 0 )
            continue;
        if( cskills[i].thisskill->type == 15 ) //Pasive
        {         
            for(UINT j=0;j<3;j++ )
            {
                if( cskills[i].thisskill->buff[j] == INV_CAPACITY || cskills[i].thisskill->buff[j] == BAGPACK_CAPACITY )
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        Extra += weight * cskills[i].thisskill->value2[j] / 100;
                    if( cskills[i].thisskill->value1[j] > 0 )
                    {
                        Extra += cskills[i].thisskill->value1[j];
                    }
                }
            }
        }
    }      
    for(UINT i=1;i<12;i++)//cloth stats [from tomiz]
    {
        if( items[i].count != 0 )
        {
            if(items[i].itemtype>9)
            {
                Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
                continue;
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == A_INVENTORY_CAPACITY)
            {
                weight += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_INVENTORY_CAPACITY)
            {
                weight += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_INVENTORY_CAPACITY )
                    weight += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == A_INVENTORY_CAPACITY )
                    weight += GServer->StatsList[items[i].stats].value[1];
            }                 
        }
    }
    weight += Extra; 
    return weight;
}

// Current weight
unsigned int CPlayer::GetCurrentWeight( )
{
    UINT weight = 0;
    for(UINT i=0;i<MAX_INVENTORY;i++)
    {
        if(items[i].itemtype<10)
        {
            weight += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->weight;                
        }            
        else
        {
            switch(items[i].itemtype)
            {
                case CONSUMIBLE:
                    weight += GServer->UseList.Index[items[i].itemnum]->weight*items[i].count;                        
                break;
                case JEM:
                    weight += GServer->JemList.Index[items[i].itemnum]->weight*items[i].count;                        
                break;
                case NATURAL:
                    weight += GServer->NaturalList.Index[items[i].itemnum]->weight*items[i].count;                        
                break;
                case PAT:
                    weight += GServer->PatList.Index[items[i].itemnum]->weight;                        
                break;
            }
        }
    }
    return weight;
}

// MP Reduction
unsigned int CPlayer::GetMPReduction( )
{
    UINT mpreduction = 0;
    for(UINT i=0;i<MAX_SKILL;i++)
    {
        if( cskills[i].id == 0 || cskills[i].thisskill == 0 )
            continue;
        if( cskills[i].thisskill->type == 15 ) //Pasive
        {         
            for(UINT j=0;j<3;j++ )
            {
                if( cskills[i].thisskill->buff[j] == MP_COST_RED )
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        mpreduction += cskills[i].thisskill->value2[j];
                    if( cskills[i].thisskill->value1[j] > 0 )
                        mpreduction += cskills[i].thisskill->value1[j];
                }
            }
        }
    }  
    for(UINT i=1;i<12;i++)//cloth stats [from tomiz]
    {
        if(items[i].itemtype>9)
        {
            Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
            continue;
        }
        if(items[i].count>0)
        {
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == MP_COST_RED)
            {
                mpreduction += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == MP_COST_RED)
            {
                mpreduction += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == MP_COST_RED )
                    mpreduction += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == MP_COST_RED )
                    mpreduction += GServer->StatsList[items[i].stats].value[1];
            }           
        }
    } 
    return mpreduction;
}

// Max summon capacity
unsigned int CPlayer::GetMaxSummonGauge( )
{
    UINT gauge = 50;
    for(UINT i=0;i<MAX_SKILL;i++)
    {
        if( cskills[i].id == 0 || cskills[i].thisskill == 0 )
            continue;
        if( cskills[i].thisskill->type == 15 ) //Pasive
        {         
            for(UINT j=0;j<3;j++ )
            {
                if( cskills[i].thisskill->buff[j] == SUMMON_GAUGE )
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        gauge += cskills[i].thisskill->value2[j];
                    if( cskills[i].thisskill->value1[j] > 0 )
                        gauge += cskills[i].thisskill->value1[j];
                }
            }
        }
    }  
    for(UINT i=1;i<12;i++)//cloth stats [from tomiz]
    {
        if(items[i].itemtype>9)
        {
            Log(MSG_WARNING, "Char %s have equip invalid item: %i,%i", CharInfo->charname, items[i].itemtype, items[i].itemnum );
            continue;
        }
        if(items[i].count>0)
        {
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[0] == SUMMON_GAUGE)
            {
                gauge += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[it

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -