3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 4762|回复: 10
打印 上一主题 下一主题

[分享] 《星际争霸2》超时空加速代码 -完善版-

[复制链接]

26

主题

2816

帖子

4085

积分

游戏精英

Rank: 8Rank: 8

贡献度
496
金元
21012
积分
4085
精华
0
注册时间
2008-9-8
跳转到指定楼层
主题
发表于 2010-3-10 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不想再写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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-4-6 14:00 , Processed in 0.025028 second(s), 17 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表