Modified UnitAI to respect diplomatic status of players, allies can no longer be attacked, and fixed some related bugs in player init
This was SVN commit r8583.
This commit is contained in:
parent
25cd781641
commit
3cefbbe253
@ -123,7 +123,7 @@ function determineAction(x, y, fromMinimap)
|
||||
continue;
|
||||
|
||||
var playerOwned = ((targetState.player == entState.player)? true : false);
|
||||
var enemyOwned = ((targetState.player != entState.player)? true : false);
|
||||
var enemyOwned = ((targetState.player != entState.player && entState.diplomacy && entState.diplomacy[targetState.player - 1] < 0)? true : false);
|
||||
var gaiaOwned = ((targetState.player == 0)? true : false);
|
||||
|
||||
if (targetState.garrisonHolder && playerOwned && Engine.HotkeyIsPressed("session.garrison"))
|
||||
|
@ -262,6 +262,9 @@ var UnitFsmSpec = {
|
||||
{
|
||||
this.PushOrderFront("Attack", { "target": msg.data.attacker });
|
||||
}
|
||||
else
|
||||
{ // TODO: If unit can't attack, run away
|
||||
}
|
||||
},
|
||||
|
||||
"IDLE": {
|
||||
@ -604,21 +607,33 @@ UnitAI.prototype.SetupRangeQuery = function(owner)
|
||||
var cmpVision = Engine.QueryInterface(this.entity, IID_Vision);
|
||||
if (!cmpVision)
|
||||
return;
|
||||
|
||||
|
||||
var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
||||
var playerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
|
||||
|
||||
if (this.losRangeQuery)
|
||||
rangeMan.DestroyActiveQuery(this.losRangeQuery);
|
||||
|
||||
var range = cmpVision.GetRange();
|
||||
|
||||
// Find all enemy players (i.e. exclude Gaia and ourselves)
|
||||
|
||||
var players = [];
|
||||
for (var i = 1; i < playerMan.GetNumPlayers(); ++i)
|
||||
if (i != owner)
|
||||
players.push(i);
|
||||
|
||||
if(owner != -1)
|
||||
{ // If unit not just killed, get enemy players via diplomacy
|
||||
var player = Engine.QueryInterface(playerMan.GetPlayerByID(owner), IID_Player);
|
||||
|
||||
// Get our diplomacy array
|
||||
var diplomacy = player.GetDiplomacy();
|
||||
var numPlayers = playerMan.GetNumPlayers();
|
||||
|
||||
for (var i = 1; i < numPlayers; ++i)
|
||||
{ // Exclude gaia, allies, and self
|
||||
// TODO: How to handle neutral players - Special query to attack military only?
|
||||
if (i != owner && diplomacy[i - 1] < 0)
|
||||
players.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
this.losRangeQuery = rangeMan.CreateActiveQuery(this.entity, range, players, IID_DamageReceiver);
|
||||
rangeMan.EnableActiveQuery(this.losRangeQuery);
|
||||
};
|
||||
|
@ -18,7 +18,7 @@ function LoadPlayerSettings(settings)
|
||||
var playerDefaults = rawData.PlayerData;
|
||||
|
||||
// default number of players
|
||||
var numPlayers = 2;
|
||||
var numPlayers = 8;
|
||||
|
||||
if (settings.PlayerData)
|
||||
{ //Get number of players including gaia
|
||||
@ -41,12 +41,17 @@ function LoadPlayerSettings(settings)
|
||||
diplomacy[i] = cmpPlayerMan.Diplomacy.ENEMY;
|
||||
|
||||
var pData = settings.PlayerData ? settings.PlayerData[i] : {};
|
||||
var pDefs = playerDefaults ? playerDefaults[i] : {};
|
||||
var team = getSetting(settings, pDefs, "Team");
|
||||
var pDefs = playerDefaults ? playerDefaults[i+1] : {};
|
||||
var team = getSetting(pData, pDefs, "Team");
|
||||
|
||||
// If team defined, add player to the team
|
||||
if (team && team != -1)
|
||||
teams[team].push(i);
|
||||
{
|
||||
if (!teams[team])
|
||||
teams[team] = [i];
|
||||
else
|
||||
teams[team].push(i);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < numPlayers; ++i)
|
||||
@ -82,7 +87,7 @@ function LoadPlayerSettings(settings)
|
||||
player.SetResourceCounts(getSetting(pData, pDefs, "Resources"));
|
||||
|
||||
|
||||
var team = getSetting(settings, pDefs, "Team");
|
||||
var team = getSetting(pData, pDefs, "Team");
|
||||
|
||||
//If diplomacy array exists use that, otherwise use team data or default diplomacy
|
||||
if (getSetting(pData, pDefs, "Diplomacy") !== undefined)
|
||||
|
Loading…
Reference in New Issue
Block a user