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

📄 playerstats.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_ATTACK)
            {
                attack += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].gem!=0)
            {
                if(GServer->JemList.Index[items[i].gem]!=NULL)
                {
                    if( GServer->JemList.Index[items[i].gem]->stat1[0] == ATTACK_POWER)
                    {
                        attack += GServer->JemList.Index[items[i].gem]->stat1[1];
                    }
                    if( GServer->JemList.Index[items[i].gem]->stat2[0] == ATTACK_POWER)
                    {
                        attack += GServer->JemList.Index[items[i].gem]->stat2[1];
                    }                    
                }
            }  
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_ATTACK)
                    attack += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == A_ATTACK)
                    attack += GServer->StatsList[items[i].stats].value[1];
            }                             
        }
    }     
    if(Fairy)attack = (unsigned int)floor(attack*1.2);
    if(Status->Attack_up!=0xff)
        attack += MagicStatus[Status->Attack_up].Value;
    if(Status->Attack_down!=0xff)
        attack -= MagicStatus[Status->Attack_down].Value;
    if(attack<30)             
        attack = 30;
	return attack;
}

// Return Defense
unsigned int CPlayer::GetDefense( )
{
    UINT defense = 0;
    switch( CharInfo->Job )
    {
        case 121:case 122:
        case 221:case 222:
        case 321:case 322:
        case 421:case 422:
            defense += 25;
        break;
    }        
    defense += (UINT)floor( ((Attr->Str + Attr->Estr)+5) * 0.35 );
    UINT extra_refine[10] = {0, 6, 12, 18, 27, 36, 45, 57, 70 , 85};    
    for(UINT i=1;i<9;i++)
    {
        if(i==7)
            continue;
        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;
            }                        
            defense += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->defense;
            if(items[i].refine>0)
            {
                UINT refine = (UINT)floor(items[i].refine/16);
                if(refine<10)
                {
                    defense += (UINT)floor(extra_refine[refine] * 0.01 * GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->defense);
                }
            } 
            
        }
    }       
    if(items[8].count>0)//Defense from shield (pasive skill)
    {
        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] == SHIELD_DEFENSE )
                    {
                        if( cskills[i].thisskill->value2[j] > 0 )
                            defense += defense * cskills[i].thisskill->value2[j] / 100;
                        if( cskills[i].thisskill->value1[j] > 0 )
                            defense += cskills[i].thisskill->value1[j];
                    }
                }
            }
        }              
    }
    
    for(UINT i=0;i<MAX_SKILL;i++)//Defense from pasive skills
    {
        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] == DEFENSE || cskills[i].thisskill->buff[j] == A_DEFENSE )
                {
                    if( cskills[i].thisskill->value2[j] > 0 )
                        defense += defense * cskills[i].thisskill->value2[j] / 100;
                    if( cskills[i].thisskill->value1[j] > 0 )
                    {
                        defense += 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_DEFENSE)
            {
                defense += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];
            }
            if( GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[0] == A_DEFENSE)
            {
                defense += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat2[1];
            }
            if(items[i].gem!=0)
            {
                if(GServer->JemList.Index[items[i].gem]!=NULL)
                {
                    if( GServer->JemList.Index[items[i].gem]->stat1[0] == A_DEFENSE)
                    {
                        defense += GServer->JemList.Index[items[i].gem]->stat1[1];
                    }
                    if( GServer->JemList.Index[items[i].gem]->stat2[0] == A_DEFENSE)
                    {
                        defense += GServer->JemList.Index[items[i].gem]->stat2[1];
                    }                    
                }
            }
            if(items[i].stats>0 && items[i].stats<500)
            {
                if(GServer->StatsList[items[i].stats].stat[0] == A_DEFENSE)
                    defense += GServer->StatsList[items[i].stats].value[0];
                if(GServer->StatsList[items[i].stats].stat[1] == A_DEFENSE)
                    defense += GServer->StatsList[items[i].stats].value[1];
            }             
        }
    }      
    if(Fairy) defense = (unsigned int)floor(defense*1.2);
    if(Status->Defense_up!=0xff)
        defense += MagicStatus[Status->Defense_up].Value;
    if(Status->Defense_down!=0xff)
        defense -= MagicStatus[Status->Defense_down].Value;     
    if(defense<30)
        defense=30;             
    return defense;
}

// Return Attack Speed
unsigned int CPlayer::GetAttackSpeed( )
{		  
    UINT aspeed = 0; 
	if( items[7].itemnum!=0 && items[7].count > 0 )
    { 
        UINT wpnspd = 0;
        wpnspd = GServer->EquipList[WEAPON].Index[items[7].itemnum]->attackspeed;
        switch(wpnspd)
        {
            case 12: //normal
                aspeed = 88;
            break;
            case 11: //+1
                aspeed = 93;            
            break;
            case 10: //+2
                aspeed = 100;            
            break;
            case 9: //+3
                aspeed = 107;            
            break;
            case 8: //+4
                aspeed = 115;            
            break;                                                
            case 7: //+5
                aspeed = 125;            
            break;  
            case 6: //+6
                aspeed = 136;            
            break;                          
        }
    }
    else
        aspeed = 115;
    UINT weapontype = 0;
    weapontype = GServer->EquipList[WEAPON].Index[items[7].itemnum]->type;    
    switch(weapontype)
    {
        case 231://bow
            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] == BOW_ATK_SPD || cskills[i].thisskill->buff[j] == A_HASTE )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                aspeed += aspeed * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                aspeed += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }             
        break;
        case 253:
        case 232://Gun
            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] == GUN_ATK_SPD || cskills[i].thisskill->buff[j] == A_HASTE )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                aspeed += aspeed * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                aspeed += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }             
        break;        
        case 233://Gun
            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] == LAUNCHER_ATK_SPD || cskills[i].thisskill->buff[j] == A_HASTE )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                aspeed += aspeed * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                aspeed += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }             
        break;         
        case 251://katar
            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] == KATAR_ATK_SPD || cskills[i].thisskill->buff[j] == A_HASTE ) 
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                aspeed += aspeed * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                aspeed += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }          
        break;
        case 252://dual weapon
            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] == DUALSWORD_ATK_SPD || cskills[i].thisskill->buff[j] == A_HASTE )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                aspeed += aspeed * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                aspeed += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }          

⌨️ 快捷键说明

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