# Tech Count

Grammar — Get the number of units of type unitType in progress/made by player player using mask countMask|TechTreeCountType
FlagsNative | Function

Returns the number of units of the specified unit type that are in progress/made by a player. Includes units in AI queues.

# Arguments

  • int — Player
  • string<gamelink::Unit> — UnitType
  • int<preset::TechTreeCountType> — Count Mask

Returns — int

native int AITechCount(
	int player,
	string aliasType,
	int countMask,
);

Category: AI Advanced / Construction / Functions

# Examples

mods/core.sc2modbase.sc2data/TriggerLibs/AI.galaxy:575


void AISetStockAlias (int player, int count, string makeType, string aliasType) {
    count = count - AITechCount(player, aliasType, c_techCountQueuedOrBetter);
    if (count > 0) {
        AISetStock(player, count + AITechCount(player, makeType, c_techCountQueuedOrBetter), makeType);

mods/core.sc2modbase.sc2data/TriggerLibs/AI.galaxy:577

    count = count - AITechCount(player, aliasType, c_techCountQueuedOrBetter);
    if (count > 0) {
        AISetStock(player, count + AITechCount(player, makeType, c_techCountQueuedOrBetter), makeType);
    }
}

mods/core.sc2modbase.sc2data/TriggerLibs/AI.galaxy:582


void AISetStockFree (int player, int count, string makeType, string prereq) {
    if (AITechCount(player, prereq, c_techCountCompleteOnly) > 0) {
        AISetStock( player, count, makeType );
    }        

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeAI.galaxy:244

//--------------------------------------------------------------------------------------------------
void AISetStockAll (int player, string source, int max, string what) {
    int make = AITechCount(player, what, c_techCountCompleteOnly)
             + 2 * AITechCount(player, source, c_techCountCompleteOnly);
    if (make > max) {

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeAI.galaxy:245

void AISetStockAll (int player, string source, int max, string what) {
    int make = AITechCount(player, what, c_techCountCompleteOnly)
             + 2 * AITechCount(player, source, c_techCountCompleteOnly);
    if (make > max) {
        make = max;

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeAI.galaxy:407

    }
    
    want = AITechCount(player, what, c_techCountInProgressOrBetter) + 1;
    if (want >= count) {
        want = count;

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeBuildAI.galaxy:464

            specialChance = 0;
            mixedChance = 0;
            if (AITechCount(player, c_ZB_Hive, c_techCountCompleteOnly) > 0) {
                airChance       = AIMeleeDiffSelect(player, 0, 0, 0, 0, 0, 0, 20, 20, 20, 25, 25 );
                highTechChance  = AIMeleeDiffSelect(player, 0, 0, 0, 0, 0, 0, 20, 20, 20, 25, 25 );

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeBuildAI.galaxy:472

            specialChance = 0;
            mixedChance = 0;
            if (AITechCount(player, c_PB_RoboticsFacility, c_techCountCompleteOnly) > 0) {
                highTechChance  = AIMeleeDiffSelect(player, 0, 0, 0, 0, 0, 0, 20, 20, 20, 25, 25 );
            }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeBuildAI.galaxy:479

            specialChance = 0;
            mixedChance = 0;
            if (AITechCount(player, c_TB_Factory, c_techCountCompleteOnly) >= 2) {  // only going to have 2 if going mech, so stay mostly mech
                highTechChance  = AIMeleeDiffSelect(player, 0, 0, 0, 0, 0, 0, 70, 70, 70, 75, 75 );
            }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:107

        // can already make this counter without any new buildings/tech

        countMinDesired = 3 + AITechCount(player, what, c_techCountInProgressOrBetter);
        countMinDesired = FixedToInt(countMinDesired * multiplier);
        if (countMinDesired > countTotal) {

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:130


void AISetAttackStatus (int player, string what, int minAlly, int minSelf, bool merge) {
    int numWhat = AITechCount(player, what, c_techCountCompleteOnly);
    bool goAttack = false;

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:199

    }
        
    AISetFlag(player, e_flagsScouting, AITechCount(player, scout, c_techCountCompleteOnly) >= scoutCount);
}

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:210

    }

    if (AITechCount(player, scout, c_techCountCompleteOnly) >= scoutCount) {
        if (AITechCount(player, preReq, state) >= count) {
            enableScouting = true;

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:211


    if (AITechCount(player, scout, c_techCountCompleteOnly) >= scoutCount) {
        if (AITechCount(player, preReq, state) >= count) {
            enableScouting = true;
        }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:325

    fixed defenseEval = 0;

    if (AITechCount(player, c_ZB_Hatchery_Alias, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:362

    fixed defenseEval = 0;

    if (AITechCount(player, c_PB_Nexus, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeHighAI.galaxy:399

    fixed defenseEval = 0;

    if (AITechCount(player, c_TB_CommandCenter_Alias, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:428

    fixed defenseEval = 0;

    if (AITechCount(player, c_TU_SCV, c_techCountQueuedOrBetter) < 14) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:431

        return false;
    }
    if (AITechCount(player, c_TB_CommandCenter_Alias, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:570

    fixed defenseEval = 0;

    if (AITechCount(player, c_ZU_Drone, c_techCountQueuedOrBetter) < 13) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:573

        return false;
    }
    if (AITechCount(player, c_ZB_Hatchery_Alias, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:712

    fixed defenseEval = 0;

    if (AITechCount(player, c_PU_Probe, c_techCountQueuedOrBetter) < 14) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/MeleeLowAI.galaxy:715

        return false;
    }
    if (AITechCount(player, c_PB_Nexus, c_techCountQueuedOrBetter) >= 2) {
        return false;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/Tactical/TactProtAI.galaxy:948

    }

    if (AITechCount(player, c_PR_WarpGateResearch, c_techCountCompleteOnly) == 0) {
        return;
    }

mods/core.sc2modbase.sc2data/TriggerLibs/Tactical/TactProtAI.galaxy:1050

        return;
    }
    if (AITechCount(player, c_PB_Pylon, c_techCountCompleteOnly) < 1) {
        // wait until we have a pylon to use chronoboost
        return;

mods/core.sc2modbase.sc2data/TriggerLibs/Tactical/TactTerrAI.galaxy:1604

    }
    
    if (AITechCount(player, c_TR_CycloneDamage, c_techCountCompleteOnly) == 1) {
        // LockOn is lower damage without this upgrade and should only be used to attack air by default
        //    (for AI at least use since we won't take advantage of the movement ability)

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:166

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 3, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:171

    
    if (AIGetTime() < 450) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 7) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:226


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:274


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PB_Gateway, c_techCountInProgressOrBetter) < 1) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:338

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 8, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:343

    
    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PB_Assimilator, c_techCountInProgressOrBetter) < 2) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:405

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) >= 5) {
        AISetAttackStatus(player, c_PU_Immortal, 1, 2, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:410

    
    if (AIGetTime() < 480) {
        if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:415

    }
    
    if (AITechCount(player, c_PU_Immortal, c_techCountCompleteOnly) >= 1) {
        AISetAttackStatus(player, c_PU_Stalker, 2, 5, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossChIn.galaxy:478


    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 11) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossEasy.galaxy:20

    if (buildType != e_buildType_Air) {

        if (AITechCount(player, c_PB_CyberneticsCore, c_techCountCompleteOnly) > 0) {
            AISetStock( player, 1, c_PR_WarpGateResearch );
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:20

    if (buildType != e_buildType_Air) {

        if (AITechCount(player, c_PB_CyberneticsCore, c_techCountCompleteOnly) > 0) {
            AISetStock( player, 1, c_PR_WarpGateResearch );
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:28

            AISetStock( player, 1, c_PR_GroundWeapons1 );
            AISetStock( player, 1, c_PR_GroundArmor1 );
            if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) >= 8) {
                AISetStock( player, 1, c_PR_ZealotCharge );
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:31

                AISetStock( player, 1, c_PR_ZealotCharge );
            }
            if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) >= 6) {
                AISetStock( player, 1, c_PR_StalkerBlink );
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:47

                if (phase >= c_ldPhaseFinal) {

                    if (AITechCount(player, c_PU_Colossus, c_techCountInProgressOrBetter) >= 2) {
                        AISetStock( player, 1, c_PR_ColossusRange );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:50

                        AISetStock( player, 1, c_PR_ColossusRange );
                    }
                    if (AITechCount(player, c_PU_HighTemplar, c_techCountInProgressOrBetter) >= 1) {
                        AISetStock( player, 1, c_PR_HighTemplarPsiStorm );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:53

                        AISetStock( player, 1, c_PR_HighTemplarPsiStorm );
                    }
                    if (AITechCount(player, c_PU_Sentry, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_SentryHallucination );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:59

                    AISetStock( player, 1, c_PR_GroundArmor3 );
                    AISetStock( player, 1, c_PR_Shields3 );
                    if (AITechCount(player, c_PU_Phoenix, c_techCountInProgressOrBetter) >= 4) {
                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:62

                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }
                    if (AITechCount(player, c_PU_Carrier, c_techCountInProgressOrBetter) >= 1) {
                        AISetStock( player, 1, c_PR_CarrierLaunch );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:84

                AISetStock( player, 1, c_PR_ObserverSpeed );
                AISetStock( player, 1, c_PR_WarpPrismSpeed );
                if (AITechCount(player, c_PU_Phoenix, c_techCountInProgressOrBetter) >= 4) {
                    AISetStock( player, 1, c_PR_PhoenixRange );
                }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHard.galaxy:87

                    AISetStock( player, 1, c_PR_PhoenixRange );
                }
                if (AITechCount(player, c_PU_Carrier, c_techCountInProgressOrBetter) >= 1) {
                    AISetStock( player, 1, c_PR_CarrierLaunch );
                }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:166

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 3, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:171

    
    if (AIGetTime() < 450) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 7) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:226


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:274


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PB_Gateway, c_techCountInProgressOrBetter) < 1) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:338

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 8, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:343

    
    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PB_Assimilator, c_techCountInProgressOrBetter) < 2) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:405

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) >= 5) {
        AISetAttackStatus(player, c_PU_Immortal, 1, 2, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:410

    
    if (AIGetTime() < 480) {
        if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:415

    }
    
    if (AITechCount(player, c_PU_Immortal, c_techCountCompleteOnly) >= 1) {
        AISetAttackStatus(player, c_PU_Stalker, 2, 5, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHdVH.galaxy:478


    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 11) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:330


            // choose either 4-gate or gate-robo to defend
            if (AITechCount(player, c_PB_RoboticsFacility, c_techCountInProgressOrBetter) > 0) {
                return e_hdBuildIndex_POpenTiming_GateImmortal;
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:339

        if (AIHighCurrentlyUnderHeavyAttack(player))  {
            if (AIGetUserInt(player, c_currentBuildIndex) == e_hdBuildIndex_POpenTiming_DTRush) {
                if (AITechCount(player, c_PB_DarkShrine, c_techCountInProgressOrBetter) <= 0) {
                    // unless we're close to getting dt, switch to four gate
                    return e_hdBuildIndex_POpenTiming_FourGate;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:345

            }
            else if (AIGetUserInt(player, c_currentBuildIndex) == e_hdBuildIndex_POpenTiming_StalkerBlink) {
                if (AITechCount(player, c_PR_StalkerBlink, c_techCountInProgressOrBetter) <= 0) {
                    // unless we're close to getting blink, switch to four gate
                    return e_hdBuildIndex_POpenTiming_FourGate;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:368

            
            // choose either 4-gate or gate-robo to defend
            if (AITechCount(player, c_PB_RoboticsFacility, c_techCountInProgressOrBetter) > 0) {
                return e_hdBuildIndex_POpenTiming_GateImmortal;
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:395


            // choose either 4-gate or gate-robo to defend
            if (AITechCount(player, c_PB_RoboticsFacility, c_techCountInProgressOrBetter) > 0) {
                return e_hdBuildIndex_POpenTiming_GateImmortal;
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:411


    if (currentExactBuild == e_hdBuildIndex_PMidPower_GateVoidPhoenix) {
        if (AITechCount(player, c_PB_Stargate, c_techCountInProgressOrBetter) > 0) {
            // allowed to keep this build
            return e_buildType_Invalid;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:417

    }
    else if (currentExactBuild == e_hdBuildIndex_PMidPower_GateAir) {
        if (AITechCount(player, c_PB_Stargate, c_techCountInProgressOrBetter) > 0) {
            // allowed to keep this build
            return e_buildType_Invalid;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:423

    }
    else if (currentExactBuild == e_hdBuildIndex_PMidPower_GateColossi) {
        if (AITechCount(player, c_PB_RoboticsBay, c_techCountInProgressOrBetter) > 0 &&
            AITechCount(player, c_PB_RoboticsFacility, c_techCountInProgressOrBetter) > 0) {
            // allowed to keep this build

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:424

    else if (currentExactBuild == e_hdBuildIndex_PMidPower_GateColossi) {
        if (AITechCount(player, c_PB_RoboticsBay, c_techCountInProgressOrBetter) > 0 &&
            AITechCount(player, c_PB_RoboticsFacility, c_techCountInProgressOrBetter) > 0) {
            // allowed to keep this build
            return e_buildType_Invalid;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossHigh.galaxy:539

    else if (currentLateGame == e_buildType_Air) {
        if (!AIEnemyBuildingsOnlyOnOtherIslands(player)) {
            if (AITechCount(player, c_PB_Stargate, c_techCountCompleteOnly) < 2) {
                needsNewBuild = true;
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:20

    if (buildType != e_buildType_Air) {

        if (AITechCount(player, c_PB_CyberneticsCore, c_techCountCompleteOnly) > 0) {
            AISetStock( player, 1, c_PR_WarpGateResearch );
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:28

            AISetStock( player, 1, c_PR_GroundWeapons1 );
            AISetStock( player, 1, c_PR_GroundArmor1 );
            if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) >= 8) {
                AISetStock( player, 1, c_PR_ZealotCharge );
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:31

                AISetStock( player, 1, c_PR_ZealotCharge );
            }
            if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) >= 6) {
                AISetStock( player, 1, c_PR_StalkerBlink );
            }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:47

                if (phase >= c_ldPhaseFinal) {

                    if (AITechCount(player, c_PU_Colossus, c_techCountInProgressOrBetter) >= 2) {
                        AISetStock( player, 1, c_PR_ColossusRange );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:50

                        AISetStock( player, 1, c_PR_ColossusRange );
                    }
                    if (AITechCount(player, c_PU_HighTemplar, c_techCountInProgressOrBetter) >= 1) {
                        AISetStock( player, 1, c_PR_HighTemplarPsiStorm );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:56

                    AISetStock( player, 1, c_PR_GroundArmor3 );
                    AISetStock( player, 1, c_PR_Shields3 );
                    if (AITechCount(player, c_PU_Phoenix, c_techCountInProgressOrBetter) >= 4) {
                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:59

                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }
                    if (AITechCount(player, c_PU_Carrier, c_techCountInProgressOrBetter) >= 1) {
                        AISetStock( player, 1, c_PR_CarrierLaunch );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:81

                AISetStock( player, 1, c_PR_ObserverSpeed );
                AISetStock( player, 1, c_PR_WarpPrismSpeed );
                if (AITechCount(player, c_PU_Phoenix, c_techCountInProgressOrBetter) >= 4) {
                    AISetStock( player, 1, c_PR_PhoenixRange );
                }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:84

                    AISetStock( player, 1, c_PR_PhoenixRange );
                }
                if (AITechCount(player, c_PU_Carrier, c_techCountInProgressOrBetter) >= 1) {
                    AISetStock( player, 1, c_PR_CarrierLaunch );
                }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMdHd.galaxy:97

                    AISetStock( player, 1, c_PR_Shields3 );
                    AISetStock( player, 1, c_PR_WarpGateResearch );
                    if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_ZealotCharge );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:20

    if (buildType != e_buildType_Air) {

        if (AITechCount(player, c_PB_CyberneticsCore, c_techCountCompleteOnly) > 0) {
            AISetStock( player, 1, c_PR_WarpGateResearch );
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:36

                if (phase >= c_ldPhaseFinal) {

                    if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_ZealotCharge );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:39

                        AISetStock( player, 1, c_PR_ZealotCharge );
                    }
                    if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_StalkerBlink );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:67

                if (phase >= c_ldPhaseFinal) {

                    if (AITechCount(player, c_PU_Phoenix, c_techCountInProgressOrBetter) >= 4) {
                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:70

                        AISetStock( player, 1, c_PR_PhoenixRange );
                    }
                    if (AITechCount(player, c_PU_Carrier, c_techCountInProgressOrBetter) >= 1) {
                        AISetStock( player, 1, c_PR_CarrierLaunch );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:77

                    AISetStock( player, 1, c_PR_Shields3 );
                    AISetStock( player, 1, c_PR_WarpGateResearch );
                    if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_ZealotCharge );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossMedi.galaxy:80

                        AISetStock( player, 1, c_PR_ZealotCharge );
                    }
                    if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) >= 6) {
                        AISetStock( player, 1, c_PR_StalkerBlink );
                    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyEy.galaxy:20

    if (buildType != e_buildType_Air) {

        if (AITechCount(player, c_PB_CyberneticsCore, c_techCountCompleteOnly) > 0) {
            AISetStock( player, 1, c_PR_WarpGateResearch );
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:199

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 3, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:204

    
    if (AIGetTime() < 450) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 7) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:259


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PU_Zealot, c_techCountInProgressOrBetter) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:307


    if (AIGetTime() < 300) {
        if (AITechCount(player, c_PB_Gateway, c_techCountInProgressOrBetter) < 1) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:371

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Zealot, c_techCountCompleteOnly) >= 2) {
        AISetAttackStatus(player, c_PU_Stalker, 1, 8, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:376

    
    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PB_Assimilator, c_techCountInProgressOrBetter) < 2) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:438

    AISetAttackStatus(player, c_PU_Zealot, 2, 999, c_continuousMerge);
    AISetAttackStatus(player, c_PU_Stalker, 2, 999, c_continuousMerge);
    if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) >= 5) {
        AISetAttackStatus(player, c_PU_Immortal, 1, 2, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:443

    
    if (AIGetTime() < 480) {
        if (AITechCount(player, c_PU_Stalker, c_techCountCompleteOnly) < 5) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:448

    }
    
    if (AITechCount(player, c_PU_Immortal, c_techCountCompleteOnly) >= 1) {
        AISetAttackStatus(player, c_PU_Stalker, 2, 5, c_continuousMerge);
    }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Protoss/ProtossVyHd.galaxy:511


    if (AIGetTime() < 510) {
        if (AITechCount(player, c_PU_Stalker, c_techCountInProgressOrBetter) < 11) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Terran/TerranChIn.galaxy:152


    if (AIGetTime() < 300) {
        if ( (AITechCount(player, c_TU_Marine, c_techCountCompleteOnly) < 9) ||
             (AITechCount(player, c_TU_Marine, c_techCountInProgressOrBetter) < 12) ) {
                // wait for 9 to be done and 3 more queued

mods/liberty.sc2modbase.sc2data/TriggerLibs/Terran/TerranChIn.galaxy:153

    if (AIGetTime() < 300) {
        if ( (AITechCount(player, c_TU_Marine, c_techCountCompleteOnly) < 9) ||
             (AITechCount(player, c_TU_Marine, c_techCountInProgressOrBetter) < 12) ) {
                // wait for 9 to be done and 3 more queued
                return false;

mods/liberty.sc2modbase.sc2data/TriggerLibs/Terran/TerranChIn.galaxy:223


    if (AIGetTime() < 390) {
        if (AITechCount(player, c_TU_Reaper, c_techCountCompleteOnly) < 4) {
            return false;
        }

mods/liberty.sc2modbase.sc2data/TriggerLibs/Terran/TerranChIn.galaxy:267


    if (AIGetTime() < 300) {
        if ( (AITechCount(player, c_TU_Marine, c_techCountCompleteOnly) < 9) ||
             (AITechCount(player, c_TU_Marine, c_techCountInProgressOrBetter) < 12) ) {
                 // wait for 9 to be done and 3 more queued

mods/liberty.sc2modbase.sc2data/TriggerLibs/Terran/TerranChIn.galaxy:268

    if (AIGetTime() < 300) {
        if ( (AITechCount(player, c_TU_Marine, c_techCountCompleteOnly) < 9) ||
             (AITechCount(player, c_TU_Marine, c_techCountInProgressOrBetter) < 12) ) {
                 // wait for 9 to be done and 3 more queued
                return false;