Browse Source

Clean up AddPlrExperience

pull/4/head
Anders Jenbo 8 years ago committed by Dennis Duda
parent
commit
e42cee1bb5
  1. 136
      Source/player.cpp

136
Source/player.cpp

@ -734,93 +734,63 @@ void __fastcall NextPlrLevel(int pnum)
void __fastcall AddPlrExperience(int pnum, int lvl, int exp) void __fastcall AddPlrExperience(int pnum, int lvl, int exp)
{ {
int v3; // eax if ( pnum != myplr ) {
int v4; // esi return;
int v5; // esi }
char v6; // bl
int v7; // edi
signed int v8; // ecx
int v9; // ecx
int *v10; // eax
int v11; // eax
int v12; // ecx
int v13; // ecx
int v14; // esi
int arglist; // [esp+4h] [ebp-Ch]
int v16; // [esp+8h] [ebp-8h]
v3 = myplr; if ( (DWORD)myplr >= MAX_PLRS ) {
v4 = pnum; TermMsg("AddPlrExperience: illegal player %d", myplr);
v16 = lvl; }
arglist = pnum;
if ( pnum == myplr ) if ( plr[myplr]._pHitPoints <= 0 ) {
{ return;
if ( (unsigned int)myplr >= MAX_PLRS ) }
{
TermMsg("AddPlrExperience: illegal player %d", myplr); // Adjust xp based on difference in level between player and monster
v3 = myplr; exp *= 1 + ((double)lvl - plr[pnum]._pLevel) / 10;
if ( exp < 0 ) {
exp = 0;
}
// Prevent power leveling
if ( gbMaxPlayers > 1 ) {
int powerLvlCap = plr[pnum]._pLevel < 0 ? 0 : plr[pnum]._pLevel;
if ( powerLvlCap >= 50 ) {
powerLvlCap = 50;
} }
if ( plr[v3]._pHitPoints > 0 ) // cap to 1/20 of current levels xp
{ if ( exp >= ExpLvlsTbl[powerLvlCap] / 20 ) {
v5 = v4; exp = ExpLvlsTbl[powerLvlCap] / 20;
v6 = plr[v5]._pLevel; }
v7 = (signed __int64)((((double)v16 - (double)v6) * 0.1 + 1.0) * (double)exp); // cap to 200 * current level
if ( v7 < 0 ) int expCap = 200 * powerLvlCap;
v7 = 0; if ( exp >= expCap ) {
if ( (unsigned char)gbMaxPlayers > 1u ) exp = expCap;
{ }
if ( v6 >= 0 ) }
{
v8 = v6; plr[pnum]._pExperience += exp;
if ( v6 >= 50 ) if ( (DWORD)plr[pnum]._pExperience > MAXEXP ) {
v8 = 50; plr[pnum]._pExperience = MAXEXP;
} }
else
{ if ( plr[pnum]._pExperience >= ExpLvlsTbl[49] ) {
v8 = 0; plr[pnum]._pLevel = 50;
} return;
if ( v7 >= ExpLvlsTbl[v8] / 20 ) }
v7 = ExpLvlsTbl[v8] / 20;
v9 = 200 * v8; // Increase player level if applicable
if ( v7 >= v9 ) int newLvl = 0;
v7 = v9; while ( plr[pnum]._pExperience >= ExpLvlsTbl[newLvl] ) {
} newLvl++;
v10 = &plr[v5]._pExperience; }
*v10 += v7; if ( newLvl != plr[pnum]._pLevel ) {
if ( plr[v5]._pExperience > MAXEXP ) for ( int i = newLvl - plr[pnum]._pLevel; i > 0; i--) {
*v10 = MAXEXP; NextPlrLevel(pnum);
v11 = *v10;
if ( v11 < ExpLvlsTbl[49] )
{
v12 = 0;
if ( v11 >= ExpLvlsTbl[0] )
{
do
++v12;
while ( v11 >= ExpLvlsTbl[v12] );
}
if ( v12 != v6 )
{
v13 = v12 - v6;
if ( v13 > 0 )
{
v14 = v13;
do
{
NextPlrLevel(arglist);
--v14;
}
while ( v14 );
}
}
NetSendCmdParam1(0, CMD_PLRLEVEL, plr[myplr]._pLevel);
}
else
{
plr[v5]._pLevel = 50;
}
} }
} }
NetSendCmdParam1(FALSE, CMD_PLRLEVEL, plr[myplr]._pLevel);
} }
// 679660: using guessed type char gbMaxPlayers; // 679660: using guessed type char gbMaxPlayers;

Loading…
Cancel
Save