forked from 0ad/0ad
check that enemy units don't leave foundations. based on patch from Stork. fixes #724
This was SVN commit r9532.
This commit is contained in:
parent
1fac936d68
commit
069f567f7e
@ -414,6 +414,11 @@ var UnitFsmSpec = {
|
||||
// anything more important (and we might be stuck in the WALKING
|
||||
// state forever and need to get out of foundations in that case)
|
||||
"Order.LeaveFoundation": function(msg) {
|
||||
if (!IsOwnedByAlly(this.entity, msg.data.target))
|
||||
{
|
||||
this.FinishOrder();
|
||||
return;
|
||||
}
|
||||
// Move a tile outside the building
|
||||
var range = 4;
|
||||
var ok = this.MoveToTargetRangeExplicit(msg.data.target, range, range);
|
||||
@ -526,6 +531,11 @@ var UnitFsmSpec = {
|
||||
// Override the LeaveFoundation order since we're not doing
|
||||
// anything more important
|
||||
"Order.LeaveFoundation": function(msg) {
|
||||
if (!IsOwnedByAlly(this.entity, msg.data.target))
|
||||
{
|
||||
this.FinishOrder();
|
||||
return;
|
||||
}
|
||||
// Move a tile outside the building
|
||||
var range = 4;
|
||||
var ok = this.MoveToTargetRangeExplicit(msg.data.target, range, range);
|
||||
@ -978,6 +988,11 @@ var UnitFsmSpec = {
|
||||
// Override the LeaveFoundation order since we don't want to be
|
||||
// accidentally blocking our own building
|
||||
"Order.LeaveFoundation": function(msg) {
|
||||
if (!IsOwnedByAlly(this.entity, msg.data.target))
|
||||
{
|
||||
this.FinishOrder();
|
||||
return;
|
||||
}
|
||||
// Move a tile outside the building
|
||||
var range = 4;
|
||||
var ok = this.MoveToTargetRangeExplicit(msg.data.target, range, range);
|
||||
|
@ -191,6 +191,30 @@ function QueryPlayerIDInterface(id, iid)
|
||||
return Engine.QueryInterface(playerEnt, iid);
|
||||
}
|
||||
|
||||
function IsOwnedByAlly(entity, target)
|
||||
{
|
||||
//figure out which player controls us
|
||||
var cmpOwnership = Engine.QueryInterface(entity, IID_Ownership);
|
||||
var owner = 0;
|
||||
if (cmpOwnership)
|
||||
owner = cmpOwnership.GetOwner();
|
||||
|
||||
var playerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
var player = Engine.QueryInterface(playerMan.GetPlayerByID(owner), IID_Player);
|
||||
// Get our diplomacy array
|
||||
var diplomacy = player.GetDiplomacy();
|
||||
|
||||
//figure out which player controls the foundation being built
|
||||
var cmpOwnershipTarget = Engine.QueryInterface(target, IID_Ownership);
|
||||
var targetOwner = 0;
|
||||
if (cmpOwnershipTarget)
|
||||
targetOwner = cmpOwnershipTarget.GetOwner();
|
||||
|
||||
//If we don't like the guy with the building, ignore their request to move
|
||||
return owner==targetOwner || diplomacy[targetOwner - 1] > 0;
|
||||
}
|
||||
|
||||
Engine.RegisterGlobal("LoadPlayerSettings", LoadPlayerSettings);
|
||||
Engine.RegisterGlobal("QueryOwnerInterface", QueryOwnerInterface);
|
||||
Engine.RegisterGlobal("QueryPlayerIDInterface", QueryPlayerIDInterface);
|
||||
Engine.RegisterGlobal("IsOwnedByAlly", IsOwnedByAlly);
|
||||
|
Loading…
Reference in New Issue
Block a user