会拉围墙的加强AI,可联机对战!
本帖最后由 mozonglin7 于 2016-12-18 17:42 编辑雷光 AIv2.8更新内容:
1.优化AI农民分配,使AI会更合理采集和利用各项资源,更快的发展进入新时代。
2.优化AI兵种搭配,使AI军队会大批集结进攻,禁用AI训练佣兵枪手.长炮.迫击炮这类无用杂兵。
3.使AI前期会建造围墙抵御玩家偷袭,围墙被摧毁会优先补墙。(特殊情况下AI会放弃建造围墙)
4.提高AI在帝王时代建造兵营.马厂.炮厂的数量。(AI后期出兵速度会更快)
==============================
以下情况AI会放弃建造围墙:
1.当电脑的文明=亚洲三国或土著。(因为这些国家缺少给围墙开门的科技链)
2.当电脑的盟友大于3,也就是人机4V4以上的时候。 (因为盟友越多离得就越近,容易互相围死...)
==============================
使用说明:
把游戏目录下AI3文件夹删除(注意是删除,不然跟原来的AI文件混一起会没效果的),把这个解压后粘进去就可以了,不会影响联机的!
特别鸣谢狂~劇情狂,黄栌苦竹两位大神参与指导制作本AI
自虐mod
和天明不冲突吧
苦不堪言 发表于 2016-12-18 21:03
和天明不冲突吧
只适用于帝国时代3亚洲王朝1.03版,那些装了MOD改了游戏文件的不敢保证能正常运行。
如果你的帝国3能在游侠对战平台上正常和其他人联机玩人机或对战,那装这个肯定没有问题。 最后问问楼主,能不能弄个天明版的? 非常感谢分享,很喜欢 加强AI的 补丁! 希望楼主继续更新下去!! 试了一下。为什么ai卡组就只有十几张卡牌{:156:} 本帖最后由 mozonglin7 于 2017-1-7 18:16 编辑
流觞、、、 发表于 2017-1-7 17:20
试了一下。为什么ai卡组就只有十几张卡牌
雷光AI就是不带满卡的,Utt才带满卡,但是那个也受玩家等级影响,玩家等级低,AI等级也会跟着降低,很多高级卡片无法使用。AI等级=房间玩家等级总和的平均值 mozonglin7 发表于 2017-1-7 18:12
AI等级=房间玩家等级总和的平均值,如果全是低级玩家,会使电脑等级过低导致很多高级卡片无法使用
主城已经满级了{:160:} 流觞、、、 发表于 2017-1-7 18:15
主城已经满级了
看错了,刚还以为你说Utt。。雷光的帖子我还以为沉了。。雷光AI就是18~22张卡,全都选那种10级能带的卡那个为了不受玩家等级影响。。Utt AI 带满25卡 mozonglin7 发表于 2017-1-7 18:20
看错了,刚还以为你说Utt。。雷光的帖子我还以为沉了。。雷光AI就是18~22张卡,全都选那种10级能带的卡 ...
哦。了解了。我试试utt的{:5_432:} 大师你好,
我看了你关于帝国3所有的贴子,由衷的敬佩你,帝国3是我唯一玩的游戏,这么多年一直不离不弃,有2个问题请教你一下好吗?
1、关于帝国3亚洲王朝,AI造墙,我试了你的雷光AI,发现AI围墙不能升级,
2、我参考了其它的帖子,做了些修改,加入了其它民族造墙
关于帝国3亚洲王朝,亚洲3国和美洲3国,围墙损毁,AI不能像其它欧洲国家一样主动修复,想求AI主动修复的修改方法!
求大师帮助,已经尝试修改了几个星期了,依然没能解决 exand 发表于 2017-1-10 10:48
大师你好,
我看了你关于帝国3所有的贴子,由衷的敬佩你,帝国3是我唯一玩的游戏,这么多年一直不离不弃, ...
1.如果你是在我改的AI基础上进行修改的,那AI不升级围墙只有两个原因,一是处于弱势,没有空闲资源升级围墙,二是AI造的围墙总数低于5且游戏时间低于18分钟。。否则正常情况下游戏开局5分钟后AI就会开始拉围墙,18分~20分升级围墙。
2.亚洲三国和土著都存在无法给围墙开门的BUG,这是官方BUG,要修复就得改data文件,改那个就不能联机了!所以我是直接限制了这些国家造围墙和修围墙。 如果你是在我改的AI上解除了这些国家造围墙的限制条件,那他们不修围墙就是因为你还没解除修围墙的限制条件。
rule delayWalls=造围墙相关参数
rule fillInWallGaps=修复围墙相关参数(围墙被摧毁或者占位的树砍掉了才会启用)
两者的半径设置必须一致,否则围墙被摧毁时,AI就不会在原处进行修复。
rule fillInWallGaps
minInterval 31
inactive
{
if (civIsAsian() == true)
{
xsDisableSelf();
return;
}
if (cMyCiv == cCivXPAztec)
{
xsDisableSelf();
return;
}
rule fillInWallGaps红字部分是我加的限制亚洲三国和土著修复围墙的条件,rule delayWallsy也有,你删掉即可。但是这些国家无法给围墙开门,你如果让他们造围墙,那不是把自己围死吗?
虽然不知道你想干嘛,但我可以给你个能让亚洲三国和土著开门的文件,你把这个复制替换到游戏目录data文件里就可以了,但是改了游戏文件就只能自己玩单机了,不能联机,注意备份原文件。
mozonglin7 发表于 2017-1-10 13:20
1.如果你是在我改的AI基础上进行修改的,那AI不升级围墙只有两个原因,一是处于弱势,没有空闲资源升级围 ...
感恩 mozonglin 大师,
经您指点,第二个,关于AI围墙损毁问题已经解决,
AI围墙升级,我想把它加入到Utt AI上,只想求大师给一段 AI能在堡垒时代或工业时代,AI升级围墙的完整代码
以下是参考了百度贴吧,“凉悲澄”大师,所写
rule wallUpgradeMonitor
inactive
minInterval 30
{
if ((kbResourceGet(cResourceWood) < 400) && (kbResourceGet(cResourceGold) < 600))
xsDisableSelf(); // 凉悲澄”大师忽略了这句,进入总是报错,error 0003 aiLoaderStandard.xs 加入后虽不报错,但依然没能实现
return;
if (kbTechGetStatus(cTechBastion) == cTechStatusActive)
{
xsDisableSelf();
return;
}
int WallConnector = getUnit(cUnitTypeWallConnector, cMyID, cUnitStateAlive);
if (WallConnector >= 0)
{
createSimpleResearchPlan(cTechBastion, WallConnector, cEconomyEscrowID,80);
xsDisableSelf();
}
}
工业时代升级rule age4Monitor 加入
//Enable fort upgrade
xsEnableRule("wallUpgradeMonitor");
但依然没能实现AI升级围墙的代码
----------------------------------
引用您修改的,“雷光AI” 怕耽误你时间所以摘录出
rule insertEye
inactive
group tcComplete
mininterval 30
{
if(cMyCiv == cCivXPSioux)
{
xsDisableSelf();
return;
}
if(xsGetTime() < 900000) // AI围墙升级时间是 18~20 分钟是在这里修改吗?
{
return;
}
vector mainBaseVec = kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID));
vector centerOffset = kbGetMapCenter() - mainBaseVec;
vector targetLocation = cInvalidVector;
int treeQuery = getUnitByLocation(cUnitTypeTree, cPlayerRelationAny, cUnitStateABQ, centerOffset, 300.0);
targetLocation = kbUnitGetPosition(treeQuery);
int tcQuery = getUnitByLocation(cUnitTypeTownCenter, cPlayerRelationAny, cUnitStateABQ, targetLocation, 60.0);
int wcQuery = getUnitCountByLocation(cUnitTypeWallConnector, cPlayerRelationSelf, cUnitStateABQ, targetLocation, 30.0);
if((tcQuery >= 0) || (wcQuery > 1))
return;
int wcPlan=aiPlanCreate("wall connector plan", cPlanBuild);
aiPlanSetVariableInt(wcPlan, cBuildPlanBuildingTypeID, 0, cUnitTypeWallConnector);
aiPlanSetVariableVector(wcPlan, cBuildPlanCenterPosition, 0, targetLocation);
aiPlanSetVariableFloat(wcPlan, cBuildPlanCenterPositionDistance, 0, 15.0);
aiPlanSetDesiredPriority(wcPlan, 99);
aiPlanSetMilitary(wcPlan, false);
aiPlanSetEconomy(wcPlan, true);
aiPlanSetEscrowID(wcPlan, cEconomyEscrowID);
aiPlanAddUnitType(wcPlan, gEconUnit, 1, 1, 1);
aiPlanSetVariableVector(wcPlan, cBuildPlanInfluencePosition, 0, targetLocation);
aiPlanSetVariableFloat(wcPlan, cBuildPlanInfluencePositionDistance, 0, 100.0);
aiPlanSetVariableFloat(wcPlan, cBuildPlanInfluencePositionValue, 0, 200.0);
aiPlanSetVariableInt(wcPlan, cBuildPlanInfluencePositionFalloff, 0, cBPIFalloffLinear);
aiPlanSetActive(wcPlan);
}
只想求大师给一段 AI能在堡垒时代或工业时代,AI升级围墙的代码,把它加入到您制作的Utt AI上,对于我来说觉得帝国就完美了! exand 发表于 2017-1-10 20:01
感恩 mozonglin 大师,
经您指点,第二个,关于AI围墙损毁问题已经解决,
AI围墙升级,我想把它加入到U ...
不是那,升级围墙代码是写在Monitor科技升级监控里的。如果你是想让AI在堡垒时代升级围墙,那就把以下这段升级墙科技代码复制到rule age3Monitor里
int upgradePlanID = -1;
if ((kbTechGetStatus(cTechBastion) == cTechStatusObtainable) && (kbUnitCount(cMyID, cUnitTypeAbstractWall, cUnitStateAlive) >= 5))
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechBastion);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechBastion, getUnit(cUnitTypeChurch), cMilitaryEscrowID, 50);
return;
}
mozonglin7 发表于 2017-1-10 21:09
不是那,升级围墙代码是写在Monitor科技升级监控里的。如果你是想让AI在堡垒时代升级围墙,那就把以下这 ...
感谢大师,经测试可以了,我不懂C++ 瞎捉摸了几个星期了,昨天、今天班都不去上,每天捉摸到4点才睡,唉
真希望能你有的功力、造诣,我的游戏生活就丰富多彩了。
再次感谢!!! 本帖最后由 qidanei625 于 2017-1-11 09:57 编辑
exand 发表于 2017-1-10 21:22
感谢大师,经测试可以了,我不懂C++ 瞎捉摸了几个星期了,昨天、今天班都不去上,每天捉摸到4点才睡,唉
...
可否把修改的分享下啊,我基本上也玩单机!!
我也一直用层主的AI!!
1954659076@qq.com
首先感谢 mozonglin7 大师,其造诣高,平易近人,乐于帮助我们这么菜鸟。(越是高人,越是随合)
在mozonglin7大师做的雷光AI, v2.8 上做出的修改,修改前请备份原文件
1、修改AI围墙的半径,让围城更漂亮。减少城门数量,当一个盟友时为4个,二个盟友时为3个,三个盟友时为2个。。
2、修改了AI在堡垒时代自动升级围墙。
3、增加城墙、城门抗炮击伤害,和血量,城门稍弱。效果是十几门大炮齐轰的情况,要3~5分钟,如果配合哨塔、士兵防守,基本上是一夫当,关万夫莫开的状态,当然也有弱点,城门就是突破口,城门防炮击伤害比较弱,如果用炸药桶,牺牲个几十人再配合军队,一会就攻破了,整个战场模拟真实战场,可以想象当大军攻城时,都集中攻击城门处。
mozonglin7 发表于 2017-1-10 21:09
不是那,升级围墙代码是写在Monitor科技升级监控里的。如果你是想让AI在堡垒时代升级围墙,那就把以下这 ...
请教大师 关于Ai修墙
aiPlanAddUnitType(wallPlanID, cUnitTypeSettler, 1, 1, 1);
中间那个1 代表 农民数,其它2个1,分别代表什么呀?
还有一个技术,大师能否实现?
一个优美的地图,打到后期,树被砍光,光秃秃的,很难看,能否让树再生,再长出来?
一个不完美的解决方案,是让树资源多,耐砍一点。