# Minor AI fixes.
Avoid script errors on Miletus. Use pre-existing female citizens as workers. Fix autostart. This was SVN commit r8999.
This commit is contained in:
parent
b15ea0691f
commit
cb0e322a61
@ -102,6 +102,18 @@ var EconomyManager = Class({
|
||||
return bestType;
|
||||
},
|
||||
|
||||
reassignRolelessUnits: function(gameState)
|
||||
{
|
||||
var roleless = gameState.getOwnEntitiesWithRole(undefined);
|
||||
|
||||
roleless.forEach(function(ent) {
|
||||
if (ent.hasClass("Worker"))
|
||||
ent.setMetadata("role", "worker");
|
||||
else
|
||||
ent.setMetadata("role", "unknown");
|
||||
});
|
||||
},
|
||||
|
||||
reassignIdleWorkers: function(gameState, planGroups)
|
||||
{
|
||||
var self = this;
|
||||
@ -197,6 +209,8 @@ var EconomyManager = Class({
|
||||
|
||||
update: function(gameState, planGroups)
|
||||
{
|
||||
this.reassignRolelessUnits(gameState);
|
||||
|
||||
this.buildMoreBuildings(gameState, planGroups);
|
||||
|
||||
this.trainMoreWorkers(gameState, planGroups);
|
||||
|
@ -4,11 +4,21 @@ var BuildingConstructionPlan = Class({
|
||||
{
|
||||
this.type = gameState.applyCiv(type);
|
||||
|
||||
this.cost = new Resources(gameState.getTemplate(this.type).cost());
|
||||
var template = gameState.getTemplate(this.type);
|
||||
if (!template)
|
||||
{
|
||||
this.invalidTemplate = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this.cost = new Resources(template.cost());
|
||||
},
|
||||
|
||||
canExecute: function(gameState)
|
||||
{
|
||||
if (this.invalidTemplate)
|
||||
return false;
|
||||
|
||||
// TODO: verify numeric limits etc
|
||||
|
||||
var builders = gameState.findBuilders(this.type);
|
||||
|
@ -6,12 +6,22 @@ var UnitTrainingPlan = Class({
|
||||
this.amount = amount;
|
||||
this.metadata = metadata;
|
||||
|
||||
this.cost = new Resources(gameState.getTemplate(this.type).cost());
|
||||
var template = gameState.getTemplate(this.type);
|
||||
if (!template)
|
||||
{
|
||||
this.invalidTemplate = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this.cost = new Resources(template.cost());
|
||||
this.cost.multiply(amount); // (assume no batch discount)
|
||||
},
|
||||
|
||||
canExecute: function(gameState)
|
||||
{
|
||||
if (this.invalidTemplate)
|
||||
return false;
|
||||
|
||||
// TODO: we should probably check pop caps
|
||||
|
||||
var trainers = gameState.findTrainers(this.type);
|
||||
|
@ -85,6 +85,7 @@ Identity.prototype.Schema =
|
||||
"<value>Town</value>" +
|
||||
"<value>City</value>" +
|
||||
"<value>ConquestCritical</value>" +
|
||||
"<value>Worker</value>" +
|
||||
"<value a:help='Primary weapon type'>Bow</value>" + // TODO: what are these used for?
|
||||
"<value a:help='Primary weapon type'>Javelin</value>" +
|
||||
"<value a:help='Primary weapon type'>Spear</value>" +
|
||||
|
@ -10,7 +10,7 @@ function InitGame(settings)
|
||||
var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
|
||||
for (var i = 0; i < settings.PlayerData.length; ++i)
|
||||
{
|
||||
if (settings.PlayerData[i].AI != "")
|
||||
if (settings.PlayerData[i] && settings.PlayerData[i].AI != "")
|
||||
cmpAIManager.AddPlayer(settings.PlayerData[i].AI, i+1);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
<GenericName>Female Citizen</GenericName>
|
||||
<History>Women in the ancient world took on a variety of roles - from leadership (Celts) to servant (Greeks). Women are hard workers, the economic backbone of any civilisation. In history, it was typical when all the males (capable of fighting) were killed for the females, children, and elderly to be sold as slaves.</History>
|
||||
<Tooltip>Gather resources, build civic structures, and inspire nearby males to work faster.</Tooltip>
|
||||
<Classes datatype="tokens">Worker</Classes>
|
||||
</Identity>
|
||||
<Cost>
|
||||
<Resources>
|
||||
|
@ -968,36 +968,41 @@ static bool Autostart(const CmdLineArgs& args)
|
||||
ScriptInterface& scriptInterface = g_Game->GetSimulation2()->GetScriptInterface();
|
||||
CScriptValRooted attrs;
|
||||
scriptInterface.Eval("({})", attrs);
|
||||
scriptInterface.SetProperty(attrs.get(), "mapType", std::string("scenario"), false);
|
||||
scriptInterface.SetProperty(attrs.get(), "map", std::string(autostartMap), false);
|
||||
scriptInterface.SetProperty(attrs.get(), "mapType", std::string("scenario"));
|
||||
scriptInterface.SetProperty(attrs.get(), "map", std::string(autostartMap));
|
||||
|
||||
// Set attrs.settings = { AIs: [...] }:
|
||||
// Set attrs.settings = { PlayerData: [ { AI: ... }, ... ] }:
|
||||
|
||||
/*
|
||||
* Handle command-line options for AI:
|
||||
* -autostart-ai=1:dummybot -autostart-ai=2:dummybot -- adds the dummybot AI to players 1 and 2
|
||||
*/
|
||||
CScriptValRooted ais;
|
||||
scriptInterface.Eval("([])", ais);
|
||||
CScriptVal playerData;
|
||||
scriptInterface.Eval("([])", playerData);
|
||||
if (args.Has("autostart-ai"))
|
||||
{
|
||||
std::vector<CStr> aiArgs = args.GetMultiple("autostart-ai");
|
||||
for (size_t i = 0; i < aiArgs.size(); ++i)
|
||||
{
|
||||
int player = aiArgs[i].BeforeFirst(":").ToInt();
|
||||
CScriptVal player;
|
||||
scriptInterface.Eval("({})", player);
|
||||
|
||||
int playerID = aiArgs[i].BeforeFirst(":").ToInt();
|
||||
CStr name = aiArgs[i].AfterFirst(":");
|
||||
scriptInterface.SetPropertyInt(ais.get(), player, std::string(name), false);
|
||||
|
||||
scriptInterface.SetProperty(player.get(), "AI", std::string(name));
|
||||
scriptInterface.SetPropertyInt(playerData.get(), playerID-1, player);
|
||||
}
|
||||
}
|
||||
|
||||
CScriptValRooted settings;
|
||||
CScriptVal settings;
|
||||
scriptInterface.Eval("({})", settings);
|
||||
scriptInterface.SetProperty(settings.get(), "AIs", ais, false);
|
||||
scriptInterface.SetProperty(attrs.get(), "settings", settings, false);
|
||||
scriptInterface.SetProperty(settings.get(), "PlayerData", playerData);
|
||||
scriptInterface.SetProperty(attrs.get(), "settings", settings);
|
||||
|
||||
|
||||
|
||||
CScriptValRooted mpInitData;
|
||||
CScriptVal mpInitData;
|
||||
g_GUI->GetScriptInterface().Eval("({isNetworked:true, playerAssignments:{}})", mpInitData);
|
||||
g_GUI->GetScriptInterface().SetProperty(mpInitData.get(), "attribs",
|
||||
CScriptVal(g_GUI->GetScriptInterface().CloneValueFromOtherContext(scriptInterface, attrs.get())), false);
|
||||
|
Loading…
Reference in New Issue
Block a user