Persönliche Werkzeuge

Terran.galaxy

Aus Starcraft II Map-Editor Wiki

Wechseln zu: Navigation, Suche

//================================================================================================== // Terran Melee AI //================================================================================================== include "TriggerLibs/Terran0" //-------------------------------------------------------------------------------------------------- // Counter-Attack Units //-------------------------------------------------------------------------------------------------- static void InitCounters (int player) { //xxx lots of old data -- needs to be totally redone // versus Protoss AICounterUnit(player, c_PB_PhotonCannon, 0.50, c_TU_SiegeTank); AICounterUnit(player, c_PU_Zealot, 1.00, c_TU_Hellion); AICounterUnit(player, c_PU_Stalker, 1.00, c_TU_Marauder); AICounterUnit(player, c_PU_Immortal, 2.00, c_TU_Marauder); AICounterUnit(player, c_PU_Disruptor, 1.00, c_TU_Ghost); AICounterUnit(player, c_PU_HighTemplar, 1.00, c_TU_Ghost); AICounterUnit(player, c_PU_DarkTemplar, 1.00, c_TU_Hellion); AICounterUnit(player, c_PU_Archon, 0.33, c_TU_Hellion); AICounterUnit(player, c_PU_Colossus, 1.00, c_TU_Thor); AICounterUnit(player, c_PU_VoidRay, 0.50, c_TU_Battlecruiser); AICounterUnit(player, c_PU_Phoenix, 0.50, c_TU_BattlecruiserMissile); AICounterUnit(player, c_PU_Carrier, 0.75, c_TU_BattlecruiserYamato); // versus Terran AICounterUnit(player, c_TB_Bunker, 0.33, c_TU_SiegeTank); AICounterUnit(player, c_TU_Marine, 0.50, c_TU_Hellion); AICounterUnit(player, c_TU_Reaper, 0.70, c_TU_Hellion); AICounterUnit(player, c_TU_Marauder, 0.50, c_TU_SiegeTank); AICounterUnit(player, c_TU_Ghost, 2.00, c_TU_Hellion); AICounterUnit(player, c_TU_Hellion, 0.25, c_TU_Thor); AICounterUnit(player, c_TU_SiegeTank_Alias, 0.50, c_TU_Thor); AICounterUnit(player, c_TU_Thor, 3.00, c_TU_Marauder); AICounterUnit(player, c_TU_Viking_Alias, 1.00, c_TU_Viking); AICounterUnit(player, c_TU_Banshee, 1.00, c_TU_Viking); AICounterUnit(player, c_TU_BattlecruiserClass, 1.00, c_TU_BattlecruiserYamato); // versus Zerg AICounterUnit(player, c_ZB_SpineCrawler, 0.33, c_TU_SiegeTank); AICounterUnit(player, c_ZU_Zergling, 0.25, c_TU_Hellion); AICounterUnit(player, c_ZU_Roach, 0.80, c_TU_Marauder); AICounterUnit(player, c_ZU_Hydralisk, 0.50, c_TU_Ghost); AICounterUnit(player, c_ZU_Lurker, 1.00, c_TU_Marauder); AICounterUnit(player, c_ZU_Infestor, 0.50, c_TU_Ghost); AICounterUnit(player, c_ZU_Ultralisk, 1.00, c_TU_Thor); AICounterUnit(player, c_ZU_Mutalisk, 0.80, c_TU_Viking); AICounterUnit(player, c_ZU_Corruptor, 0.50, c_TU_Battlecruiser); AICounterUnit(player, c_ZU_BroodLord, 0.50, c_TU_Viking); } //-------------------------------------------------------------------------------------------------- // TerranSubStateName //-------------------------------------------------------------------------------------------------- string TerranSubStateName (int state) { // TODO Call the individual difficulties to return a real substate name return "-" + IntToString(state) + "-"; } //-------------------------------------------------------------------------------------------------- // DebugCallbackTerr //-------------------------------------------------------------------------------------------------- void DebugCallbackTerr (int player) { DebugAI("=====TERRAN=====\n"); DebugMelee(player); DebugAI("e_mainState = " + MainStateName(AIState(player, e_mainState)) + ", e_mainSubState = " + TerranSubStateName(AIState(player, e_mainSubState)) + ", e_attackState = " + AttackStateName(AIState(player, e_attackState)) ); } //-------------------------------------------------------------------------------------------------- // AINewUnitTerr //-------------------------------------------------------------------------------------------------- void AINewUnitTerr (int player, unit u) { wave w; string type = UnitGetType(u); // ignored units // if (UnitTypeTestAttribute(type, c_unitAttributeStructure)) { return; } if (UnitTypeTestFlag(type, c_unitFlagWorker)) { return; } if (type == c_TU_Medivac) { // TODO after normal scouting claims the ones it wants give the rest to the // attack wave instead of the extra scout group AIAddToExtraScoutGroup(player, u); return; } // detector // if (type == c_TU_Raven) { AINewDetector(player, u, false); return; } // clear obstacle units // if (AIWaveNeedClearObsUnits(player)) { if (type == c_TU_Marine || type == c_TU_Reaper || type == c_TU_Marauder) { AIMergeUnit(player, u, AIWaveGet(player, c_waveClearObs)); return; } } // diversion units if (AIGetFlag(player, e_flagsDiversion)) { if (type == c_TU_Reaper) { AIMergeUnit(player, u, AIWaveGet(player, c_waveDivert1)); return; } if (type == c_TU_Banshee) { AIMergeUnit(player, u, AIWaveGet(player, c_waveDivert2)); return; } } // main wave units // AINewUnitDefault(player, u); } //-------------------------------------------------------------------------------------------------- // AIGetScoutTerr //-------------------------------------------------------------------------------------------------- unit AIGetScoutTerr (int player, int index, unit prev) { unit medivac; if (!AIGetFlag(player, e_flagsScouting)) { return c_nullUnit; } if (UnitGetType(prev) == c_TU_Medivac) { return prev; } medivac = AIGrabUnit(player, c_TU_Medivac, c_prioScout, null); if (medivac) { return medivac; } if (prev) { return prev; } if (AIGetFlag(player, e_flagsLateScout)) { return c_nullUnit; } return AIGrabUnit(player, c_TU_SCV, c_prioScout, null); } //-------------------------------------------------------------------------------------------------- // AIEarlyDefScoutTerr //-------------------------------------------------------------------------------------------------- unit AIEarlyDefScoutTerr (int player, unit prev) { unit obs; if (!AIGetFlag(player, e_flagsEarlyDefScout)) { return c_nullUnit; } if (UnitGetType(prev) == c_TU_Medivac) { return prev; } obs = AIGrabUnit(player, c_TU_Medivac, c_prioScout, null); if (obs) { return obs; } if (UnitGetType(prev) == c_TU_Marine) { return prev; } obs = AIGrabUnit(player, c_TU_Marine, c_prioScout, null); if (obs) { return obs; } if (prev) { return prev; } return AIGrabUnit(player, c_TU_SCV, c_prioScout, null); } //-------------------------------------------------------------------------------------------------- // AIWaveThinkTerr //-------------------------------------------------------------------------------------------------- void AIWaveThinkTerr (int player, wave w, int type) { AIWaveThinkDefault(player, w, type); } //-------------------------------------------------------------------------------------------------- // Terran Init //-------------------------------------------------------------------------------------------------- static void TerranInit (int player) { int state; InitCounters(player); AISetNumScouts(player, 1); AISetFlag(player, e_flagsScouting, false); AISetFlag(player, e_flagsEarlyDefScout, false); AITechCountFixupEither(player, c_TB_CommandCenter, c_TB_OrbitalCommand, c_TB_PlanetaryFortress); if (AIGetGroundStartLocs(PlayerStartLocation(player)) > 0) { state = AIDiffEnum(player, e_mainState_OpenGnd0); } else { state = AIDiffEnum(player, e_mainState_OpenAir0); } AISetMainState(player, state, e_mainSubState_Unset); } //-------------------------------------------------------------------------------------------------- // AIMeleeTerr //-------------------------------------------------------------------------------------------------- void AIMeleeTerr (int player) { int mainState = AIState(player, e_mainState); if (mainState == e_mainState_Init) { TerranInit(player); } else if (mainState == e_mainState_OpenGnd0) { TerranOpenGnd0(player); } //else if (mainState == e_mainState_OpenGnd1) { TerranOpenGnd1(player); } //else if (mainState == e_mainState_OpenGnd2) { TerranOpenGnd2(player); } //else if (mainState == e_mainState_OpenGnd3) { TerranOpenGnd3(player); } //else if (mainState == e_mainState_OpenGnd4) { TerranOpenGnd4(player); } //else if (mainState == e_mainState_OpenGnd5) { TerranOpenGnd5(player); } else if (mainState == e_mainState_OpenAir0) { TerranOpenAir0(player); } //else if (mainState == e_mainState_OpenAir1) { TerranOpenAir1(player); } //else if (mainState == e_mainState_OpenAir2) { TerranOpenAir2(player); } //else if (mainState == e_mainState_OpenAir3) { TerranOpenAir3(player); } //else if (mainState == e_mainState_OpenAir4) { TerranOpenAir4(player); } //else if (mainState == e_mainState_OpenAir5) { TerranOpenAir5(player); } else if (mainState == e_mainState_Mid0) { TerranMid0(player); } //else if (mainState == e_mainState_Mid1) { TerranMid1(player); } //else if (mainState == e_mainState_Mid2) { TerranMid2(player); } //else if (mainState == e_mainState_Mid3) { TerranMid3(player); } //else if (mainState == e_mainState_Mid4) { TerranMid4(player); } //else if (mainState == e_mainState_Mid5) { TerranMid5(player); } else if (mainState == e_mainState_Late0) { TerranLate0(player); } //else if (mainState == e_mainState_Late1) { TerranLate1(player); } //else if (mainState == e_mainState_Late2) { TerranLate2(player); } //else if (mainState == e_mainState_Late3) { TerranLate3(player); } //else if (mainState == e_mainState_Late4) { TerranLate4(player); } //else if (mainState == e_mainState_Late5) { TerranLate5(player); } else if (mainState == e_mainState_Off) { EndMeleeScript(player); } else if (mainState == e_mainState_Disabled) { } else { ErrorMeleeScript(player, "Invalid mainState"); } }

Autoren: Peq