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-861f7616d084master
parent
00fa218b5d
commit
4c64fcfe8e
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue