游戏精英
 
- 贡献度
- 496
- 金元
- 21012
- 积分
- 4085
- 精华
- 0
- 注册时间
- 2008-9-8
|
不想再写AI了,吐血,怎么写都打不过我。自己跟自己下棋可能永远也没得赢。
把我写的完善点的超时空代码放出来,给各位AI高手借鉴
特点:能给正在生产的建筑物使用超时空加速。可以优先给有排列的加速,但是没有建筑物类型的优先级。除了有两个升级技能代码找不到以外全能加速了。空间之门也行,不过我给屏蔽了,不实用。最后一个美中不足就是分基地无法使用超时空。不过相比以前各个版本已经不错了
使用方法:以原始暴雪的easyai为例,
Protoss0.galaxy文件最开头加入
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
// by DarkZeros
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
static bool ChronoBoost(int player, int CTown, string aliasUnitType, string type) {
unitgroup scanGroup;
int scanCount;
aifilter filter;
unit u = AIGrabUnit(player, c_PB_Nexus, c_prioScriptControlled, AIGetTownLocation (player, CTown));
order o;
order ord;
if (u) {
o = AICreateOrder(player, "TimeWarp", 0);
ord = AICreateOrder(player, "TimeWarp", 0);
if (!UnitOrderIsValid(u, ord)) {
return false;
}
scanGroup = AIFindUnits(player, aliasUnitType, UnitGetPosition(u),
AIUnitFixed(player, c_PB_Nexus, c_fieldRadius)
+ AIAbilityFixed(player, "TimeWarp", c_fieldRange0),
c_noMaxCount
);
filter = AIFilter(player);
AISetFilterBits(filter, UnitFilterStr(AIAbilityStr(player, "TimeWarp", c_fieldTargetFilters)));
AISetFilterBehaviorCount(filter, c_noBehaviorMin, c_noBehaviorMax, type); //behavior data xml other: TimeWarpResearch (for research structures like Cybernetics Core, forges, etc.)
scanGroup = AIGetFilterGroup (filter, scanGroup);
o = AIUnitGroupGetValidOrder(scanGroup, ord, u, c_backwards);
//OrderSetTargetUnit(o, u);
if (UnitOrderIsValid(u, o)) {
//DebugOutput("TimeWarp", false);
AICast(u, o, c_noMarker, c_castHold);
return true;
}
}
return false;
}
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
然后每段AIClearStock(player);代码下面加入
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
// by 3dm vid190
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
if (AITechCount(player, c_PU_Probe, c_techCountIncompleteOnly ) > 1)
{
ChronoBoost(player, j, c_PB_Nexus, "TimeWarpProduction");
}
if (AITechCount(player, c_PU_Mothership, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Nexus, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Zealot, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_Stalker, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_Disruptor, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_DarkTemplar , c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_HighTemplar, c_techCountIncompleteOnly ) > 1) )
{
ChronoBoost(player, j, c_PB_Gateway, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Observer , c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_Colossus, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_Immortal, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_WarpPrism, c_techCountIncompleteOnly ) > 1) )
{
ChronoBoost(player, j, c_PB_RoboticsFacility, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Phoenix, c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_VoidRay , c_techCountIncompleteOnly ) > 1)
||(AITechCount(player, c_PU_Carrier, c_techCountIncompleteOnly ) > 1) )
{
ChronoBoost(player, j, c_PB_Stargate , "TimeWarpProduction");
}
if (AITechCount(player, c_PU_Probe, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Nexus, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Zealot, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_Stalker, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_Disruptor, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_DarkTemplar , c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_HighTemplar, c_techCountIncompleteOnly ) > 0) )
{
ChronoBoost(player, j, c_PB_Gateway, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Observer , c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_Colossus, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_Immortal, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_WarpPrism, c_techCountIncompleteOnly ) > 0) )
{
ChronoBoost(player, j, c_PB_RoboticsFacility, "TimeWarpProduction");
}
if ((AITechCount(player, c_PU_Phoenix, c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_VoidRay , c_techCountIncompleteOnly ) > 0)
||(AITechCount(player, c_PU_Carrier, c_techCountIncompleteOnly ) > 0) )
{
ChronoBoost(player, j, c_PB_Stargate , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_WarpGateResearch, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_DisruptorHallucination, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirArmor1, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirArmor2, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirArmor3, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirWeapons1, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirWeapons2, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_AirWeapons3, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_CyberneticsCore , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_ZealotCharge, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_TwilightCouncil , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_StalkerBlink, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_TwilightCouncil , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_ObserverSpeed, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_RoboticsBay , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_WarpPrismSpeed, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_RoboticsBay , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_ColossusRange, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_RoboticsBay , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_HighTemplarPsiStorm, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_TemplarArchives , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_HighTemplarEnergy, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_TemplarArchives , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundArmor1, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundArmor2, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundArmor3, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundWeapons1, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundWeapons2, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_GroundWeapons3, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_Shields1, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_Shields2, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
if (AITechCount(player, c_PR_Shields3, c_techCountIncompleteOnly ) > 0)
{
ChronoBoost(player, j, c_PB_Forge , "TimeWarpProduction");
}
// if (AITechCount(player, c_PR_VoidRaySpeed , c_techCountIncompleteOnly ) > 0)
// {
// ChronoBoost(player, j, c_PB_FleetBeacon , "TimeWarpProduction");
// }
// if (AITechCount(player, c_PR_CarrierLaunchSpeed, c_techCountIncompleteOnly ) > 0)
// {
// ChronoBoost(player, j, c_PB_FleetBeacon , "TimeWarpProduction");
// if ((AITechCount(player, c_PU_Zealot, c_techCountIncompleteOnly ) > 0)
// ||(AITechCount(player, c_PU_Stalker, c_techCountIncompleteOnly ) > 0)
// ||(AITechCount(player, c_PU_Disruptor, c_techCountIncompleteOnly ) > 0)
// ||(AITechCount(player, c_PU_DarkTemplar , c_techCountIncompleteOnly ) > 0)
// ||(AITechCount(player, c_PU_HighTemplar, c_techCountIncompleteOnly ) > 0) )
// {
// ChronoBoost(player, j, c_PB_WarpGate, "TimeWarpProduction");
// }
//┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
最后在查找到的第一个static void(就是原始版就是static void LateGround (int player);)
下面加入这一小段即可
int j = 0; |
|