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