Sanity check power sync packets, and add net log if power is changed. Add getPower()

function to avoid direct access to asPower array.


git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3789 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2008-02-15 21:18:13 +00:00
parent 00fa218b5d
commit 4c64fcfe8e
3 changed files with 28 additions and 4 deletions

View File

@ -907,7 +907,7 @@ static BOOL sendPowerCheck()
{
static UDWORD lastsent = 0;
uint8_t player = selectedPlayer;
uint32_t power = asPower[player]->currentPower;
uint32_t power = getPower(player);
if (lastsent > gameTime)
{
@ -931,14 +931,26 @@ static BOOL sendPowerCheck()
BOOL recvPowerCheck()
{
uint8_t player;
uint32_t power;
uint32_t power, power2;
NETbeginDecode(NET_CHECK_POWER);
NETuint8_t(&player);
NETuint32_t(&power);
NETend();
setPower(player, power);
if (player >= MAX_PLAYERS)
{
debug(LOG_ERROR, "Bad NET_CHECK_POWER packet: player is %d", (int)player);
return FALSE;
}
power2 = getPower(player);
if (power != power2)
{
debug(LOG_NET, "NET_CHECK_POWER: Adjusting power for player %d from %u to %u",
(int)player, power2, power);
setPower(player, power);
}
return TRUE;
}

View File

@ -337,6 +337,15 @@ void setPower(UDWORD player, UDWORD avail)
asPower[player]->currentPower = avail;
}
// only used in multiplayer games.
UDWORD getPower(UDWORD player)
{
ASSERT(player < MAX_PLAYERS, "setPower: Bad player (%u)", player);
ASSERT(asPower[player] != NULL, "asPower[player=%u] not allocated", player);
return asPower[player]->currentPower;
}
/*sets the initial value for the power*/
void setPlayerPower(UDWORD power, UDWORD player)
{

View File

@ -75,6 +75,9 @@ extern void updatePlayerPower(UDWORD player);
// used in multiplayer to force power levels.
extern void setPower(UDWORD player, UDWORD avail);
/** Get the amount of power current held by the given player. */
extern UDWORD getPower(UDWORD player);
/*resets the power levels for all players when power is turned back on*/
void powerCalc(BOOL on);