Commit part 3 of patch #901, score submission is now ported over to the new API.
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3220 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
c2c5fdb3dc
commit
62d372c471
|
@ -700,7 +700,7 @@ BOOL recvMessage(void)
|
||||||
recvGift(&msg);
|
recvGift(&msg);
|
||||||
break;
|
break;
|
||||||
case NET_SCORESUBMIT: // a score update from another player
|
case NET_SCORESUBMIT: // a score update from another player
|
||||||
recvScoreSubmission(&msg);
|
recvScoreSubmission();
|
||||||
break;
|
break;
|
||||||
case NET_VTOL:
|
case NET_VTOL:
|
||||||
recvHappyVtol(&msg);
|
recvHappyVtol(&msg);
|
||||||
|
|
|
@ -58,7 +58,7 @@ extern BOOL sendWholeDroid (DROID *pD, UDWORD dest);
|
||||||
//extern BOOL sendWholeStructure (STRUCTURE *pS, DPID dest);
|
//extern BOOL sendWholeStructure (STRUCTURE *pS, DPID dest);
|
||||||
extern void recvOptions (NETMSG *pMsg);
|
extern void recvOptions (NETMSG *pMsg);
|
||||||
extern void sendOptions (UDWORD dest, UDWORD play);
|
extern void sendOptions (UDWORD dest, UDWORD play);
|
||||||
extern BOOL recvScoreSubmission (NETMSG *pMsg);
|
extern BOOL recvScoreSubmission ();
|
||||||
extern BOOL recvDestroyExtra (NETMSG *pMsg);
|
extern BOOL recvDestroyExtra (NETMSG *pMsg);
|
||||||
extern BOOL recvAudioMsg (NETMSG *pMsg);
|
extern BOOL recvAudioMsg (NETMSG *pMsg);
|
||||||
extern BOOL recvHappyVtol (NETMSG *pMsg);
|
extern BOOL recvHappyVtol (NETMSG *pMsg);
|
||||||
|
|
132
src/multisync.c
132
src/multisync.c
|
@ -950,104 +950,112 @@ BOOL recvPowerCheck()
|
||||||
BOOL sendScoreCheck(void)
|
BOOL sendScoreCheck(void)
|
||||||
{
|
{
|
||||||
static UDWORD lastsent = 0;
|
static UDWORD lastsent = 0;
|
||||||
UDWORD i;
|
uint8_t i;
|
||||||
|
BOOL isData = FALSE;
|
||||||
PLAYERSTATS stats;
|
PLAYERSTATS stats;
|
||||||
NETMSG m;
|
|
||||||
|
|
||||||
if(lastsent > gameTime)lastsent= 0;
|
if (lastsent > gameTime)
|
||||||
if((gameTime-lastsent) < SCORE_FREQUENCY ) // only send if not done recently.
|
{
|
||||||
|
lastsent= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameTime - lastsent < SCORE_FREQUENCY)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastsent = gameTime;
|
lastsent = gameTime;
|
||||||
|
|
||||||
// syncronise scores.
|
// Update local score
|
||||||
|
stats = getMultiStats(selectedPlayer, TRUE);
|
||||||
|
|
||||||
// update local score
|
// Add recently scored points
|
||||||
stats = getMultiStats(selectedPlayer,TRUE);
|
stats.recentKills += stats.killsToAdd;
|
||||||
|
|
||||||
stats.recentKills += stats.killsToAdd; // add recently scored points.
|
|
||||||
stats.totalKills += stats.killsToAdd;
|
stats.totalKills += stats.killsToAdd;
|
||||||
stats.recentScore += stats.scoreToAdd;
|
stats.recentScore += stats.scoreToAdd;
|
||||||
stats.totalScore += stats.scoreToAdd;
|
stats.totalScore += stats.scoreToAdd;
|
||||||
stats.killsToAdd =0;
|
|
||||||
stats.scoreToAdd =0;
|
|
||||||
|
|
||||||
setMultiStats(player2dpid[selectedPlayer],stats,TRUE); // store local version.
|
// Zero them now added
|
||||||
setMultiStats(player2dpid[selectedPlayer],stats,FALSE); // send score to the ether
|
stats.killsToAdd = stats.scoreToAdd = 0;
|
||||||
|
|
||||||
// broadcast any changes in other players, but not in FRONTEND!!!
|
// Store local version
|
||||||
if(titleMode != MULTIOPTION && titleMode != MULTILIMIT)
|
setMultiStats(player2dpid[selectedPlayer], stats, TRUE);
|
||||||
|
|
||||||
|
// Send score to the ether
|
||||||
|
setMultiStats(player2dpid[selectedPlayer], stats, FALSE);
|
||||||
|
|
||||||
|
// Broadcast any changes in other players, but not in FRONTEND!!!
|
||||||
|
if (titleMode != MULTIOPTION && titleMode != MULTILIMIT)
|
||||||
{
|
{
|
||||||
m.size =0;
|
NETbeginEncode(NET_SCORESUBMIT, NET_ALL_PLAYERS);
|
||||||
for(i = 0; i<MAX_PLAYERS; i++)
|
|
||||||
|
for (i = 0; i < MAX_PLAYERS; i++)
|
||||||
{
|
{
|
||||||
if(isHumanPlayer(i) && (i!=selectedPlayer))
|
if (isHumanPlayer(i) && i != selectedPlayer)
|
||||||
{
|
{
|
||||||
stats=getMultiStats(i,TRUE);
|
stats = getMultiStats(i, TRUE);
|
||||||
if(stats.killsToAdd || stats.scoreToAdd )
|
|
||||||
|
if (stats.killsToAdd || stats.scoreToAdd )
|
||||||
{
|
{
|
||||||
m.body[m.size] = (UBYTE)i;
|
NETuint8_t(&i);
|
||||||
m.size += 1;
|
|
||||||
NetAdd(m,m.size,stats.killsToAdd);
|
NETuint32_t(&stats.killsToAdd);
|
||||||
m.size += sizeof(stats.killsToAdd);
|
NETuint32_t(&stats.scoreToAdd);
|
||||||
NetAdd(m,m.size,stats.scoreToAdd);
|
|
||||||
m.size += sizeof(stats.scoreToAdd);
|
isData = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(m.size != 0)
|
|
||||||
{
|
|
||||||
m.body[m.size] = ANYPLAYER; // terminate msg.
|
|
||||||
m.size += 1;
|
|
||||||
m.type = NET_SCORESUBMIT;
|
|
||||||
NETbcast(&m,FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// get global versions of scores.
|
// If we added any data to the packet
|
||||||
for(i = 0; i<MAX_PLAYERS; i++)
|
if (isData)
|
||||||
{
|
{
|
||||||
if(isHumanPlayer(i) )
|
// Terminate the message with ANYPLAYER
|
||||||
{
|
uint8_t player = ANYPLAYER;
|
||||||
setMultiStats(player2dpid[i], getMultiStats(i,FALSE) ,TRUE);
|
NETuint8_t(&player);
|
||||||
|
|
||||||
|
// Send the message
|
||||||
|
NETend();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get global versions of scores
|
||||||
|
for (i = 0; i < MAX_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (isHumanPlayer(i))
|
||||||
|
{
|
||||||
|
setMultiStats(player2dpid[i], getMultiStats(i, FALSE), TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOL recvScoreSubmission(NETMSG *pMsg)
|
BOOL recvScoreSubmission()
|
||||||
{
|
{
|
||||||
UDWORD player=0,kil,index;
|
uint8_t player;
|
||||||
SDWORD sco;
|
uint32_t kills, score;
|
||||||
PLAYERSTATS stats;
|
PLAYERSTATS stats;
|
||||||
|
|
||||||
// process msg, add to next score addition.
|
NETbeginDecode();
|
||||||
index = 0;
|
|
||||||
while(player != ANYPLAYER)
|
|
||||||
{
|
|
||||||
player = pMsg->body[index];
|
|
||||||
index+=1;
|
|
||||||
if(player != ANYPLAYER)
|
|
||||||
{
|
|
||||||
NetGet(pMsg,index,kil);
|
|
||||||
index+=sizeof(kil);
|
|
||||||
NetGet(pMsg,index,sco);
|
|
||||||
index+=sizeof(sco);
|
|
||||||
|
|
||||||
// do the update.
|
for (NETuint8_t(&player); player != ANYPLAYER; NETuint8_t(&player))
|
||||||
if(player == selectedPlayer)
|
|
||||||
{
|
{
|
||||||
stats = getMultiStats(player,TRUE);
|
if (player == selectedPlayer)
|
||||||
stats.killsToAdd += kil;
|
{
|
||||||
stats.scoreToAdd += sco;
|
NETuint32_t(&kills);
|
||||||
setMultiStats(player2dpid[player],stats,TRUE); // store local version.
|
NETuint32_t(&score);
|
||||||
|
|
||||||
|
stats = getMultiStats(player, TRUE);
|
||||||
|
stats.killsToAdd += kills;
|
||||||
|
stats.scoreToAdd += score;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue