星陨木枯
发表于 2017-2-13 08:56:55
感谢大神{:147:}
youninajiuhao
发表于 2017-2-16 00:19:03
楼主,utt ai疯狂进攻的,卡片组有更换么‘’{:155:}
mozonglin7
发表于 2017-2-27 22:19:15
youninajiuhao 发表于 2017-2-16 00:19
楼主,utt ai疯狂进攻的,卡片组有更换么‘’
都换了
bbstar303
发表于 2017-3-15 12:40:08
楼主这个ai很强,但是有时候电脑不进攻,要不只造一波兵,死玩就再也不造了,然后就不发展了。特别是土耳其和美洲三国动不动就不发展了。希望楼主能改改电脑有时候不发展的毛病!
mygirl921
发表于 2017-3-22 23:22:05
下载了这个UTT卡组更换版,发现法国电脑没有带步兵,骑兵,炮兵军事加速卡
mozonglin7
发表于 2017-3-23 13:25:58
本帖最后由 mozonglin7 于 2017-3-23 14:04 编辑
mygirl921 发表于 2017-3-22 23:22
下载了这个UTT卡组更换版,发现法国电脑没有带步兵,骑兵,炮兵军事加速卡
请按照说明安装AI
把游戏目录下AI3文件夹删除(注意是删除,不然跟原来的AI文件混一起会没效果的),把这个解压后的AI3文件夹复制粘贴进去就可以了。
电脑小白的请往下看:
首先我的文档My Games/Age of Empires 3/AI3 文件夹里装的只是AI每局游戏的缓存文件,如果你把加强AI的文件丢这个位置的,全都无效。。。
打个比方吧,比如你的游戏安装在D盘甲文件夹里,那这个D盘甲文件夹就是你游戏目录。
然后你每次在游戏里的存档记录截图主城等,会自动缓存在C盘我的文档乙文件夹里,一般乙文件夹里的文件名很多会和游戏目录里的相同,但用处是不一样的。
所以对应不同的修改加强内容,也是放在不同的地方,具体请看安装说明。
如果还是不会查找游戏目录的,请自行百度吧,我只能帮你到这了。{:261:}
bbstar303
发表于 2017-3-23 15:24:05
mozonglin7 发表于 2017-3-23 13:25
请按照说明安装AI
把游戏目录下AI3文件夹删除(注意是删除,不然跟原来的AI文件混一起会没效果的),把 ...
疯狂进攻 那个 土耳其不发展, 楼主希望改善下土耳其的ai
mozonglin7
发表于 2017-3-23 16:04:07
本帖最后由 mozonglin7 于 2017-3-23 16:05 编辑
bbstar303 发表于 2017-3-23 15:24
疯狂进攻 那个 土耳其不发展, 楼主希望改善下土耳其的ai
没发现你说的问题,我这测试土耳其是正常发展的。请按照说明安装AI,别把加强AI文件丢到我的文档里
bbstar303
发表于 2017-3-23 17:13:06
mozonglin7 发表于 2017-3-23 16:04
没发现你说的问题,我这测试土耳其是正常发展的。请按照说明安装AI,别把加强AI文件丢到我的文档里
电脑土耳其只造农民只发展经济 ,但是不发展军事 不进攻 ,只造一波兵死完了以后就再也不造兵了。
flyconan
发表于 2017-3-23 19:44:49
楼主能否在拿破伦时代的基础上修改下AI,这是拿破仑时代2.17b的链接https://www.moddb.com/mods/napoleonic-era/downloads/ne-217b-for-pc
w81568233
发表于 2017-7-19 17:55:31
我想找会城镇中心全被打掉后自动重建的AI 一直找不到 试了楼主的ai也不行 怎么办?
mygirl921
发表于 2017-9-27 19:21:03
woailplz 发表于 2017-1-3 18:36
我想知道这个版本的AI会自己拉墙吗?
不管什么版本的AI都可以拉墙。UTT,蜗牛,雷光,天明,这4种目前主要AI都可以自己修改让电脑拉墙。你想让AI拉墙其实很简单,修改限制AI拉墙的条件。在你的帝国3安装目录下找到AI3文件(注意是你帝国3目录下,不是文档那里的AI3),找到Main.xs文件,用记事本打开,搜索查找decided to do walls,把前面的//删除就是允许电脑拉墙了。为了能保证电脑在墙破坏后自动修复墙,你还需要在ruledelaywalls(造墙)和rulefillInwallGaps(修复墙规则)里面把这两项的数值修改成相同的。
萝卜与白菜
发表于 2017-10-7 13:49:56
做的不错,滋瓷~
听见下雨的声音
发表于 2017-12-5 16:17:50
您好,我最近在修改一个AI,但是不知道怎么修改让AI军队进攻不撤退和AI建筑物间隙距离,可否告知修改哪个地方?谢谢了
听见下雨的声音
发表于 2017-12-6 21:43:49
现在只有移除AI军队撤退机制不知道怎么弄了,跪求大神告知!
mygirl921
发表于 2017-12-29 13:26:33
w81568233 发表于 2017-7-19 17:55
我想找会城镇中心全被打掉后自动重建的AI 一直找不到 试了楼主的ai也不行 怎么办?
//是否转移主基地
rule shouldIMigrate
inactive
minInterval 10
group startup
{
int armySize = aiPlanGetNumberUnits(gLandDefendPlan0, cUnitTypeLogicalTypeLandMilitary) + aiPlanGetNumberUnits(gLandReservePlan, cUnitTypeLogicalTypeLandMilitary);
int enemyArmySize = -1;
bool migrate = false;
static int enemyArmyQuery = -1;
if (enemyArmyQuery < 0)
{// Initialize the queryID
enemyArmyQuery = kbUnitQueryCreate("Enemy army query");
kbUnitQuerySetIgnoreKnockedOutUnits(enemyArmyQuery, true);
kbUnitQuerySetPlayerRelation(enemyArmyQuery, cPlayerRelationEnemyNotGaia);
kbUnitQuerySetUnitType(enemyArmyQuery, cUnitTypeLogicalTypeLandMilitary);
kbUnitQuerySetState(enemyArmyQuery, cUnitStateAlive);
kbUnitQuerySetSeeableOnly(enemyArmyQuery, true); // Ignore units we think are under fog
}
// Check main base first
kbUnitQuerySetPosition(enemyArmyQuery,kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID)));
kbUnitQuerySetMaximumDistance(enemyArmyQuery, cvDefenseReflexSearchRadius);
kbUnitQuerySetSeeableOnly(enemyArmyQuery, true);
kbUnitQuerySetState(enemyArmyQuery, cUnitStateAlive);
kbUnitQueryResetResults(enemyArmyQuery);
enemyArmySize = kbUnitQueryExecute(enemyArmyQuery);
if (enemyArmySize >= 2)
{
// Enemy army size at least 3x my size and more than 30 units total. Thus, we migrate
if ( ((armySize * 3.0) < enemyArmySize) && (enemyArmySize > 30) )
{// Too big to handle
xsEnableRule("createNewBase");
}
}
}
//相关参数设定
bool findACompletedTownCenter()
{
bool retVal = false;
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAny);
kbUnitQuerySetAscendingSort(townCenterQuery, true); // Ascending distance from initial location
}
else
return(retVal);
// Run the query
kbUnitQueryResetResults(townCenterQuery);
int count = kbUnitQueryExecute(townCenterQuery);
int tcID = kbUnitQueryGetResult(townCenterQuery, 0);
if (tcID >=0)
retVal = true;
return(retVal);
}
//建造新基地
rule createNewBase
inactive
minInterval 5
{
// First, create a query if needed, then use it to look for a completed town center
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAlive);
}
// Run the query
kbUnitQueryResetResults(townCenterQuery);
int count = kbUnitQueryExecute(townCenterQuery);
if (count < 1)
return;
for (i=0; < count)
{
int tcID = kbUnitQueryGetResult(townCenterQuery, i);
aiEcho("New TC is "+tcID+" at "+kbUnitGetPosition(tcID));
}
if (findACompletedTownCenter() == true)
{
int tcBase = kbUnitGetBaseID(tcID);
gMainBase = kbBaseGetMainID(cMyID);
aiEcho(" TC base is "+tcBase+", main base is "+gMainBase);
// We have a TC.Make sure that the main base exists, and it includes the TC
if ( gMainBase < 0 )
{// We have no main base, create one
gMainBase = createMainBase(kbUnitGetPosition(tcID));
aiEcho(" We had no main base, so we created one: "+gMainBase);
}
tcBase = kbUnitGetBaseID(tcID);// in case base ID just changed
if ( tcBase != gMainBase )
{
aiEcho(" TC "+tcID+" is not in the main base ("+gMainBase+".");
aiEcho(" Setting base "+gMainBase+" to non-main, setting base "+tcBase+" to main.");
kbBaseSetMain(cMyID, gMainBase, false);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeHuntAggressive, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFish, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFarm, gMainBase);
aiRemoveResourceBreakdown(cResourceWood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceGold, cAIResourceSubTypeEasy, gMainBase);
kbBaseSetMain(cMyID, tcBase, true);
gMainBase = tcBase;
}
}
else
return;
}
//建造其它TC
rule createOtherTC
inactive
minInterval 5
{
// British explorer to build 1 additional TC
if ((cMyCiv == cCivBritish) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional British town center");
}
// French explorer to build 1 additional TC
if ((cMyCiv == cCivFrench) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional French town center");
}
// Spanish explorer to build 2 additional TCs
if ((cMyCiv == cCivSpanish) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Spanish town center");
}
// Russians explorer to build 2 additional TCs
if ((cMyCiv == cCivRussians) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Russians town center");
}
// Germans explorer to build 2 additional TCs
if ((cMyCiv == cCivGermans) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Germans town center");
}
// Dutch explorer to build 2 additional TC
if ((cMyCiv == cCivDutch) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Portuguese town center");
}
// Ottoman explorer to build 1 additional TC
if ((cMyCiv == cCivOttomans) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Ottoman town center");
}
// Sioux explorer to build 2 additional TCs
if ((cMyCiv == cCivXPSioux) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Sioux town center");
}
// Iroquois explorer to build 1 additional TC
if ((cMyCiv == cCivXPIroquois) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Iroquois town center");
}
// Aztec explorer to build 1 additional TC
if ((cMyCiv == cCivXPAztec) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Aztec town center");
}
// Chinese explorer to build 2 additional TCs
if ((cMyCiv == cCivChinese) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Chinese town center");
}
// Japanese explorer to build 1 additional TC
if ((cMyCiv == cCivJapanese) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Japanese town center");
}
// Indians explorer to build 1 additional TC
if ((cMyCiv == cCivIndians) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Indians town center");
}
}
//变更主基地
rule ChangeBase
active
minInterval 5
//group startup
{
if(kbGetAge()<cAge4)
return;
static int lastchangebaseTime=0;
if(kbBaseGetMainID(cMyID)<0)
{
xsEnableRule("createNewBase");
return;}
else
{
if((xsGetTime()-lastchangebaseTime)>300000)
{
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);//去掉重复结果?
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);//查询关系?
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAlive);//查询状态?
}
// Run the query
kbUnitQueryResetResults(townCenterQuery);//重置结果。
int count = kbUnitQueryExecute(townCenterQuery);//执行查询,得到数量。
if (count < 1)
return;
for (i=0; < count)
{
int tcID = kbUnitQueryGetResult(townCenterQuery, i);//得到结果。
aiEcho("New TC is "+tcID+" at "+kbUnitGetPosition(tcID));//“kbUnitGetPosition”获取位置?
}
int tcBase = kbUnitGetBaseID(tcID);
gMainBase = kbBaseGetMainID(cMyID);
aiEcho(" TC base is "+tcBase+", main base is "+gMainBase);
// We have a TC.Make sure that the main base exists, and it includes the TC
if ( gMainBase < 0 )
{// 我们要新建一个基地。
gMainBase = createMainBase(kbUnitGetPosition(tcID));
aiEcho(" We had no main base, so we created one: "+gMainBase);
}
tcBase = kbUnitGetBaseID(tcID);// in case base ID just changed
if ( tcBase != gMainBase )
{
aiEcho(" TC "+tcID+" is not in the main base ("+gMainBase+".");
aiEcho(" Setting base "+gMainBase+" to non-main, setting base "+tcBase+" to main.");
kbBaseSetMain(cMyID, gMainBase, false);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeHuntAggressive, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFish, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFarm, gMainBase);
aiRemoveResourceBreakdown(cResourceWood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceGold, cAIResourceSubTypeEasy, gMainBase);
kbBaseSetMain(cMyID, tcBase, true);
gMainBase = tcBase;
}
lastchangebaseTime=xsGetTime();
}
}
}
mygirl921
发表于 2017-12-29 13:28:30
w81568233 发表于 2017-7-19 17:55
我想找会城镇中心全被打掉后自动重建的AI 一直找不到 试了楼主的ai也不行 怎么办?
把下面这个复制粘贴到你的游戏安装目录下的AI3文件里,再进游戏就会发现AI基地被摧毁后在资源采集范围内重新建立基地
rule shouldIMigrate
inactive
minInterval 10
group startup
{
int armySize = aiPlanGetNumberUnits(gLandDefendPlan0, cUnitTypeLogicalTypeLandMilitary) + aiPlanGetNumberUnits(gLandReservePlan, cUnitTypeLogicalTypeLandMilitary);
int enemyArmySize = -1;
bool migrate = false;
static int enemyArmyQuery = -1;
if (enemyArmyQuery < 0)
{// Initialize the queryID
enemyArmyQuery = kbUnitQueryCreate("Enemy army query");
kbUnitQuerySetIgnoreKnockedOutUnits(enemyArmyQuery, true);
kbUnitQuerySetPlayerRelation(enemyArmyQuery, cPlayerRelationEnemyNotGaia);
kbUnitQuerySetUnitType(enemyArmyQuery, cUnitTypeLogicalTypeLandMilitary);
kbUnitQuerySetState(enemyArmyQuery, cUnitStateAlive);
kbUnitQuerySetSeeableOnly(enemyArmyQuery, true); // Ignore units we think are under fog
}
// Check main base first
kbUnitQuerySetPosition(enemyArmyQuery,kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID)));
kbUnitQuerySetMaximumDistance(enemyArmyQuery, cvDefenseReflexSearchRadius);
kbUnitQuerySetSeeableOnly(enemyArmyQuery, true);
kbUnitQuerySetState(enemyArmyQuery, cUnitStateAlive);
kbUnitQueryResetResults(enemyArmyQuery);
enemyArmySize = kbUnitQueryExecute(enemyArmyQuery);
if (enemyArmySize >= 2)
{
// Enemy army size at least 3x my size and more than 30 units total. Thus, we migrate
if ( ((armySize * 3.0) < enemyArmySize) && (enemyArmySize > 30) )
{// Too big to handle
xsEnableRule("createNewBase");
}
}
}
//相关参数设定
bool findACompletedTownCenter()
{
bool retVal = false;
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAny);
kbUnitQuerySetAscendingSort(townCenterQuery, true); // Ascending distance from initial location
}
else
return(retVal);
// Run the query
kbUnitQueryResetResults(townCenterQuery);
int count = kbUnitQueryExecute(townCenterQuery);
int tcID = kbUnitQueryGetResult(townCenterQuery, 0);
if (tcID >=0)
retVal = true;
return(retVal);
}
//建造新基地
rule createNewBase
inactive
minInterval 5
{
// First, create a query if needed, then use it to look for a completed town center
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAlive);
}
// Run the query
kbUnitQueryResetResults(townCenterQuery);
int count = kbUnitQueryExecute(townCenterQuery);
if (count < 1)
return;
for (i=0; < count)
{
int tcID = kbUnitQueryGetResult(townCenterQuery, i);
aiEcho("New TC is "+tcID+" at "+kbUnitGetPosition(tcID));
}
if (findACompletedTownCenter() == true)
{
int tcBase = kbUnitGetBaseID(tcID);
gMainBase = kbBaseGetMainID(cMyID);
aiEcho(" TC base is "+tcBase+", main base is "+gMainBase);
// We have a TC.Make sure that the main base exists, and it includes the TC
if ( gMainBase < 0 )
{// We have no main base, create one
gMainBase = createMainBase(kbUnitGetPosition(tcID));
aiEcho(" We had no main base, so we created one: "+gMainBase);
}
tcBase = kbUnitGetBaseID(tcID);// in case base ID just changed
if ( tcBase != gMainBase )
{
aiEcho(" TC "+tcID+" is not in the main base ("+gMainBase+".");
aiEcho(" Setting base "+gMainBase+" to non-main, setting base "+tcBase+" to main.");
kbBaseSetMain(cMyID, gMainBase, false);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeHuntAggressive, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFish, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFarm, gMainBase);
aiRemoveResourceBreakdown(cResourceWood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceGold, cAIResourceSubTypeEasy, gMainBase);
kbBaseSetMain(cMyID, tcBase, true);
gMainBase = tcBase;
}
}
else
return;
}
//建造其它TC
rule createOtherTC
inactive
minInterval 5
{
// British explorer to build 1 additional TC
if ((cMyCiv == cCivBritish) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional British town center");
}
// French explorer to build 1 additional TC
if ((cMyCiv == cCivFrench) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional French town center");
}
// Spanish explorer to build 2 additional TCs
if ((cMyCiv == cCivSpanish) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Spanish town center");
}
// Russians explorer to build 2 additional TCs
if ((cMyCiv == cCivRussians) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Russians town center");
}
// Germans explorer to build 2 additional TCs
if ((cMyCiv == cCivGermans) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Germans town center");
}
// Dutch explorer to build 2 additional TC
if ((cMyCiv == cCivDutch) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Portuguese town center");
}
// Ottoman explorer to build 1 additional TC
if ((cMyCiv == cCivOttomans) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Ottoman town center");
}
// Sioux explorer to build 2 additional TCs
if ((cMyCiv == cCivXPSioux) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Sioux town center");
}
// Iroquois explorer to build 1 additional TC
if ((cMyCiv == cCivXPIroquois) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Iroquois town center");
}
// Aztec explorer to build 1 additional TC
if ((cMyCiv == cCivXPAztec) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Aztec town center");
}
// Chinese explorer to build 2 additional TCs
if ((cMyCiv == cCivChinese) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Chinese town center");
}
// Japanese explorer to build 1 additional TC
if ((cMyCiv == cCivJapanese) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Japanese town center");
}
// Indians explorer to build 1 additional TC
if ((cMyCiv == cCivIndians) && (cvOkToBuild == true))
{
createSimpleBuildPlan(cUnitTypeTownCenter, 2, 90, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting build plan for an additional Indians town center");
}
}
//变更主基地
rule ChangeBase
active
minInterval 5
//group startup
{
if(kbGetAge()<cAge4)
return;
static int lastchangebaseTime=0;
if(kbBaseGetMainID(cMyID)<0)
{
xsEnableRule("createNewBase");
return;}
else
{
if((xsGetTime()-lastchangebaseTime)>300000)
{
static int townCenterQuery = -1;
if (townCenterQuery < 0)
{
townCenterQuery=kbUnitQueryCreate("Completed Town Center Query");
kbUnitQuerySetIgnoreKnockedOutUnits(townCenterQuery, true);//去掉重复结果?
}
//Define the query
if (townCenterQuery != -1)
{
kbUnitQuerySetPlayerRelation(townCenterQuery, -1);//查询关系?
kbUnitQuerySetPlayerID(townCenterQuery, cMyID);
kbUnitQuerySetUnitType(townCenterQuery, cUnitTypeTownCenter);
kbUnitQuerySetState(townCenterQuery, cUnitStateAlive);//查询状态?
}
// Run the query
kbUnitQueryResetResults(townCenterQuery);//重置结果。
int count = kbUnitQueryExecute(townCenterQuery);//执行查询,得到数量。
if (count < 1)
return;
for (i=0; < count)
{
int tcID = kbUnitQueryGetResult(townCenterQuery, i);//得到结果。
aiEcho("New TC is "+tcID+" at "+kbUnitGetPosition(tcID));//“kbUnitGetPosition”获取位置?
}
int tcBase = kbUnitGetBaseID(tcID);
gMainBase = kbBaseGetMainID(cMyID);
aiEcho(" TC base is "+tcBase+", main base is "+gMainBase);
// We have a TC.Make sure that the main base exists, and it includes the TC
if ( gMainBase < 0 )
{// 我们要新建一个基地。
gMainBase = createMainBase(kbUnitGetPosition(tcID));
aiEcho(" We had no main base, so we created one: "+gMainBase);
}
tcBase = kbUnitGetBaseID(tcID);// in case base ID just changed
if ( tcBase != gMainBase )
{
aiEcho(" TC "+tcID+" is not in the main base ("+gMainBase+".");
aiEcho(" Setting base "+gMainBase+" to non-main, setting base "+tcBase+" to main.");
kbBaseSetMain(cMyID, gMainBase, false);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeHuntAggressive, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFish, gMainBase);
aiRemoveResourceBreakdown(cResourceFood, cAIResourceSubTypeFarm, gMainBase);
aiRemoveResourceBreakdown(cResourceWood, cAIResourceSubTypeEasy, gMainBase);
aiRemoveResourceBreakdown(cResourceGold, cAIResourceSubTypeEasy, gMainBase);
kbBaseSetMain(cMyID, tcBase, true);
gMainBase = tcBase;
}
lastchangebaseTime=xsGetTime();
}
}
}
yegt
发表于 2018-4-20 21:20:30
雷光AI没25张卡 后期电脑出兵也不够快 老玩家要求兵海来弱
安娜飒飒
发表于 2018-6-24 14:46:10
读取不了附件了
我爱帝国时代3
发表于 2018-6-27 11:18:11
下载不了了