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

📄 playerstats.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
                            }
                        }
                    }
                }
            }    
        }        
        break;
        case ONE_HAND_BUNT_SWORD://one hand blunt sword
            attack += (UINT)floor( (Attr->Str + Attr->Estr)*0.75 + Stats->Level*0.2 + ((Attr->Str + Attr->Estr)*0.05 + 29) * weaponatk * 0.03333334 );
            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] == ONE_HAND_WEAP_AP || 
                            cskills[i].thisskill->buff[j] == ONE_HAND_MELEE_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }           
        break;
        case TWO_HAND_SWORD://two hand sword
        {
            attack += (UINT)floor( (Attr->Str + Attr->Estr)*0.75 + Stats->Level*0.2 + ((Attr->Str + Attr->Estr)*0.05 + 29) * weaponatk * 0.03333334 );
            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] == TWO_HAND_WEAP_AP || 
                            cskills[i].thisskill->buff[j] == TWO_HAND_SWORD_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }        
        } 
        break;
        case SPEAR://spear
        {
            attack += (UINT)floor( (Attr->Str + Attr->Estr)*0.75 + Stats->Level*0.2 + ((Attr->Str + Attr->Estr)*0.05 + 29) * weaponatk * 0.03333334 );
            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] == TWO_HAND_WEAP_AP || 
                            cskills[i].thisskill->buff[j] == TWO_HAND_SPEAR_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }      
        }   
        break;        
        case TWO_HAND_AXE://two hand axe
        {
            attack += (UINT)floor( (Attr->Str + Attr->Estr)*0.75 + Stats->Level*0.2 + ((Attr->Str + Attr->Estr)*0.05 + 29) * weaponatk * 0.03333334 );
            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] == TWO_HAND_WEAP_AP || 
                            cskills[i].thisskill->buff[j] == TWO_HAND_AXE_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }  
        }
        break;
        case BOW://bow
        {    
            float arrows = 0;
            if(items[132].count>0)
                arrows = GServer->NaturalList.Index[items[132].itemnum]->quality*0.5;
            attack += (UINT)floor((((Attr->Str + Attr->Estr) + Stats->Level)*0.1) + ((Attr->Dex + Attr->Edex)*0.04 + (Attr->Sen + Attr->Esen)*0.03 + 29) * weaponatk * 0.03333334 + (Attr->Dex+Attr->Edex)*0.52 + arrows);
            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_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }
        }              
        break;
        case GUN://gun
        case DUAL_GUN://dual guns
        {
            float bullets = 0;
            if(items[133].count>1)
                bullets = GServer->NaturalList.Index[items[133].itemnum]->quality * 0.8;
            attack += (UINT)floor( (Attr->Con + Attr->Econ)*0.47 + bullets + Stats->Level*0.1 + (Attr->Dex + Attr->Edex)*0.3 + ((Attr->Con + Attr->Econ)*0.04 + (Attr->Sen + Attr->Esen)*0.05 + 29) * weaponatk * 0.03333334);            
            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_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            } 
        }             
        break;
        case LAUNCHER://launcher
        {
            float cannons = 0;
            if(items[134].count>0)
            {
                cannons = GServer->NaturalList.Index[items[134].itemnum]->quality;
            }
            attack += (UINT)floor( cannons*0.8 + Stats->Level*0.1 + (Attr->Str + Attr->Estr)*0.32 + (Attr->Con + Attr->Econ)*0.45 + ((Attr->Con + Attr->Econ)*0.04 + (Attr->Sen + Attr->Esen)*0.05 + 29) * weaponatk * 0.03333334 );
            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_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            } 
        }            
        break;
        case STAFF://staff
        {                            
            attack += (UINT)floor( Stats->Level*0.2 + ((Attr->Int + Attr->Eint)+(Attr->Str + Attr->Estr))*0.4 + ((Attr->Int + Attr-> Eint)*0.05 + 29) * weaponatk * 0.03333334 );      
            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] == STAFF_POWER )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }       
        }       
        break;
        case WAND://wand
        {
            attack += (UINT)floor( Stats->Level*0.2 + (Attr->Int + Attr->Eint)*0.6 + ( ((Attr->Sen + Attr->Esen)*0.1 +26) * 0.03703704 * weaponatk )  );
            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] == WAND_POWER )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }   
        }           
        break;
        case KATAR://katar
        {
            attack += (UINT)floor( Stats->Level*0.2 + (Attr->Str + Attr->Estr)*0.42 + (Attr->Dex + Attr->Edex)*0.55 + ((Attr->Dex + Attr->Edex)*0.05 + 20) * weaponatk * 0.0476190);               
            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_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }   
        }       
        break;
        case DOUBLE_SWORD://double sword
        {
            attack += (UINT)floor( Stats->Level*0.2 + (Attr->Str + Attr->Estr)*0.63 + (Attr->Dex + Attr->Edex)*0.45 + ((Attr->Dex + Attr->Edex)*0.05 + 25) * weaponatk * 0.03846154);               
            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_AP )
                        {
                            if( cskills[i].thisskill->value2[j] > 0 )
                                attack += attack * cskills[i].thisskill->value2[j] / 100;
                            if( cskills[i].thisskill->value1[j] > 0 )
                            {
                                attack += cskills[i].thisskill->value1[j];
                            }
                        }
                    }
                }
            }   
        }           
        break;
        case CROSSBOW://crossbow
        {
            float arrows = 0;
            if(items[132].count>0)
                arrows = GServer->NaturalList.Index[items[132].itemnum]->quality*0.5;
            attack += (UINT)floor((((Attr->Str + Attr->Estr)+Stats->Level)*0.1) + ((Attr->Dex + Attr->Edex)*0.04 + (Attr->Sen +Attr->Esen)*0.03 + 29) * weaponatk * 0.03333334 + (Attr->Dex + Attr->Edex)*0.52 + arrows);
        }
        break;
    }	
    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_ATTACK)
            {
                attack += GServer->EquipList[items[i].itemtype].Index[items[i].itemnum]->stat1[1];

⌨️ 快捷键说明

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