forked from 0ad/0ad
historic_bruno
b1c4e29ac8
NOTE: requires update-workspaces and may require correction of some modded actors/scenarios This was SVN commit r16438.
162 lines
4.5 KiB
JavaScript
162 lines
4.5 KiB
JavaScript
//-------------------------------- --------------------------------
|
|
// Utility functions
|
|
//-------------------------------- --------------------------------
|
|
|
|
//===============================================
|
|
// Player functions
|
|
|
|
// Get the basic player data
|
|
function getPlayerData(playerAssignments)
|
|
{
|
|
var players = [];
|
|
|
|
var simState = GetSimState();
|
|
if (!simState)
|
|
return players;
|
|
|
|
for (var i = 0; i < simState.players.length; i++)
|
|
{
|
|
var playerState = simState.players[i];
|
|
|
|
var name = playerState.name;
|
|
var civ = playerState.civ;
|
|
var color = {
|
|
"r": playerState.color.r*255,
|
|
"g": playerState.color.g*255,
|
|
"b": playerState.color.b*255,
|
|
"a": playerState.color.a*255
|
|
};
|
|
|
|
var player = {
|
|
"name": name,
|
|
"civ": civ,
|
|
"color": color,
|
|
"team": playerState.team,
|
|
"teamsLocked": playerState.teamsLocked,
|
|
"cheatsEnabled": playerState.cheatsEnabled,
|
|
"state": playerState.state,
|
|
"isAlly": playerState.isAlly,
|
|
"isMutualAlly": playerState.isMutualAlly,
|
|
"isNeutral": playerState.isNeutral,
|
|
"isEnemy": playerState.isEnemy,
|
|
"guid": undefined, // network guid for players controlled by hosts
|
|
"disconnected": false // flag for host-controlled players who have left the game
|
|
};
|
|
players.push(player);
|
|
}
|
|
|
|
// Overwrite default player names with multiplayer names
|
|
if (playerAssignments)
|
|
{
|
|
for (var playerGuid in playerAssignments)
|
|
{
|
|
var playerAssignment = playerAssignments[playerGuid];
|
|
if (players[playerAssignment.player])
|
|
{
|
|
players[playerAssignment.player].guid = playerGuid;
|
|
players[playerAssignment.player].name = playerAssignment.name;
|
|
}
|
|
}
|
|
}
|
|
|
|
return players;
|
|
}
|
|
|
|
function findGuidForPlayerID(playerAssignments, player)
|
|
{
|
|
for (var playerGuid in playerAssignments)
|
|
{
|
|
var playerAssignment = playerAssignments[playerGuid];
|
|
if (playerAssignment.player == player)
|
|
return playerGuid;
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
// Update player data when a host has connected
|
|
function updatePlayerDataAdd(players, hostGuid, playerAssignment)
|
|
{
|
|
if (players[playerAssignment.player])
|
|
{
|
|
players[playerAssignment.player].guid = hostGuid;
|
|
players[playerAssignment.player].name = playerAssignment.name;
|
|
players[playerAssignment.player].offline = false;
|
|
}
|
|
}
|
|
|
|
// Update player data when a host has disconnected
|
|
function updatePlayerDataRemove(players, hostGuid)
|
|
{
|
|
for each (var player in players)
|
|
if (player.guid == hostGuid)
|
|
player.offline = true;
|
|
}
|
|
|
|
|
|
function hasClass(entState, className)
|
|
{
|
|
// note: use the functions in globalscripts/Templates.js for more versatile matching
|
|
if (entState.identity)
|
|
{
|
|
var classes = entState.identity.classes;
|
|
if (classes && classes.length)
|
|
return (classes.indexOf(className) != -1);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function getRankIconSprite(entState)
|
|
{
|
|
if ("Elite" == entState.identity.rank)
|
|
return "stretched:session/icons/rank3.png";
|
|
else if ("Advanced" == entState.identity.rank)
|
|
return "stretched:session/icons/rank2.png";
|
|
else if (entState.identity.classes && entState.identity.classes.length && -1 != entState.identity.classes.indexOf("CitizenSoldier"))
|
|
return "stretched:session/icons/rank1.png";
|
|
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* Returns a message with the details of the trade gain.
|
|
*/
|
|
function getTradingTooltip(gain)
|
|
{
|
|
var gainString = gain.traderGain;
|
|
if (gain.market1Gain && gain.market1Owner == gain.traderOwner)
|
|
gainString += translate("+") + gain.market1Gain;
|
|
if (gain.market2Gain && gain.market2Owner == gain.traderOwner)
|
|
gainString += translate("+") + gain.market2Gain;
|
|
|
|
var tooltip = sprintf(translate("%(gain)s (%(player)s)"), {
|
|
gain: gainString,
|
|
player: translate("you")
|
|
});
|
|
|
|
if (gain.market1Gain && gain.market1Owner != gain.traderOwner)
|
|
tooltip += translate(", ") + sprintf(translate("%(gain)s (%(player)s)"), {
|
|
gain: gain.market1Gain,
|
|
player: sprintf(translate("player %(name)s"), { name: gain.market1Owner })
|
|
});
|
|
if (gain.market2Gain && gain.market2Owner != gain.traderOwner)
|
|
tooltip += translate(", ") + sprintf(translate("%(gain)s (%(player)s)"), {
|
|
gain: gain.market2Gain,
|
|
player: sprintf(translate("player %(name)s"), { name: gain.market2Owner })
|
|
});
|
|
|
|
return tooltip;
|
|
}
|
|
|
|
/**
|
|
* Returns the entity itself except when garrisoned where it returns its garrisonHolder
|
|
*/
|
|
function getEntityOrHolder(ent)
|
|
{
|
|
var entState = GetEntityState(ent);
|
|
if (entState && !entState.position && entState.unitAI && entState.unitAI.orders.length > 0 &&
|
|
(entState.unitAI.orders[0].type == "Garrison" || entState.unitAI.orders[0].type == "Autogarrison"))
|
|
return entState.unitAI.orders[0].data.target;
|
|
|
|
return ent;
|
|
}
|