📄 playerstats.cpp.svn-base
字号:
}
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 + -