高级玩家

- 贡献度
- 73
- 金元
- 2168
- 积分
- 449
- 精华
- 0
- 注册时间
- 2010-3-21
|
先占位。各位AI作者报到吧.........
现在很多朋友对现有的AI不满意,可以从自己写开局开始,很简单的,只要看得懂数字就行。
第一步,我们做一个12pool爆狗虫族吧。
1) 删掉所有外来AI的痕迹,因为我们不想受到他们的干扰。
2) 在TriggerLibs目录下建立一个Zerg.galaxy【因为要做虫族AI】文本文件,往里面复制黏贴下列内容
先不要懂在干什么,照做就行了
void MyMainLoop(int player) {
}
void AINewUnitZerg(int player, unit u) {
wave w;
string type = UnitGetType(u);
if (type == c_ZU_Larva || type == c_ZU_Broodling || type == c_ZU_Mantaling) {
return;
}
if (UnitTypeTestAttribute(type, c_unitAttributeStructure)) {
return;
}
if (UnitTypeTestFlag(type, c_unitFlagWorker)) {
return;
}
if (type == c_ZB_SpineCrawler || type == c_ZB_SporeCrawler) {
AIWaveAddUnitPriority(AIWaveGet(player, c_waveHome), u, c_prioWavePeon);
return;
}
if (type == c_ZU_Queen) {
AIWaveAddUnitPriority(AIWaveGet(player, c_waveHome), u, c_prioWavePeon);
return;
}
if (type == c_ZU_Overseer) {
AINewDetector(player, u, true);
return;
}
if (type == c_ZU_Overlord || type == c_ZU_OverlordCocoon ) {
AIAddToExtraScoutGroup(player, u);
return;
}
if (AIWaveNeedClearObsUnits(player)) {
if (type == c_ZU_Zergling || type == c_ZU_Roach || type == c_ZU_Hydralisk) {
AIMergeUnit(player, u, AIWaveGet(player, c_waveClearObs));
return;
}
}
AIMergeUnit(player, u, AIWaveGet(player, c_waveAttack));
}
void AIWaveThinkZerg(int player, wave w, int type) {
AIWaveThinkDefault(player, w, type);
}
unit AIGetScoutZerg (int player, int index, unit prev) {
unit seer;
if (!AIGetFlag(player, e_flagsScouting)) {
return c_nullUnit;
}
if (UnitGetType(prev) == c_ZU_Overseer) {
return prev;
}
seer = AIGrabUnit(player, c_ZU_Overseer, c_prioScout, null);
if (seer) {
return seer;
}
if (prev) {
return prev;
}
if (AIGetFlag(player, e_flagsLateScout)) {
return c_nullUnit;
}
return AIGrabUnit(player, c_ZU_Overlord, c_prioScout, null);
}
void AIMeleeZerg(int player) {
int magicNumber = 88888;
int mainState = AIState(player, e_mainState);
if (mainState != magicNumber) {
AISetMainState(player, magicNumber, e_mainSubState_Unset);
AIHarvestBonus(player, 1.0);
AISetDifficulty(player, c_diffNormalVision, false);
AISetDifficulty(player, c_diffLimitAPM, false);
AISetDifficulty(player, c_diffFleeDamage, false);
AISetDifficulty(player, c_diffWaveAvoidDanger, false);
AISetDifficulty(player, c_diffEnableDangerMap, false);
AISetDifficulty(player, c_diffDefendWithPeons, true);
AISetDifficulty(player, c_diffEarlyDefenseScout, false);
AISetDifficulty(player, c_diffAdvanceWave, true);
AISetDifficulty(player, c_diffOptimizeGas, true);
AISetDifficulty(player, c_diffAutoLoadBunkers, true);
AISetDifficulty(player, c_diffEarlyGameRepair, true);
AISetDifficulty(player, c_diffNormalTargetPrio, true);
AISetFlag(player, e_flagsRunScared, false);
AISetFlag(player, e_flagsScouting, false);
AISetFlag(player, e_flagsEarlyDefScout, false);
AISetFlag(player, e_flagsLateScout, false);
AISetFlag(player, e_flagsDiversion, true);
AISetFlag(player, e_flagsClearObs, true);
AISetNumScouts(player, 1);
AIReqCountAsBuiltObject(player, c_ZU_Larva);
AITechCountFixupSingle(player, c_ZB_HydraliskDen, c_ZB_LurkerDen);
AITechCountFixupSingle(player, c_ZB_Spire, c_ZB_GreaterSpire);
AITechCountFixupInOrder(player, c_ZB_Hatchery, c_ZB_Lair, c_ZB_Hive);
AISetCreepBuilding(player, c_ZB_CreepTumor, "ZergBuildingNotOnCreep");
UIDisplayMessage(PlayerGroupAll(), 1, StringToText("Test AI [Zerg]"));
}
MyMainLoop(player);
}
然后运行星际,记得打开一个虫族电脑,看到Test AI字样就说明成功第一步
3) 好,现在我们开始造农民,造狗池,等等
void MyMainLoop(int player) {
AIClearStock(player);
AISetStock( player, 1, c_ZB_Hatchery_Alias );
AISetStock( player, 10, c_ZU_Drone );
AISetStock( player, 2, c_ZU_Overlord );
AISetStock( player, 13, c_ZU_Drone );
AISetStock( player, 1, c_ZB_SpawningPool );
AISetStock( player, 14, c_ZU_Drone );
AISetStock( player, 400, c_ZU_Zergling);
AIEnableStock(player);
}
先保证有基地,然后造10个农民,然后造一个新的宿主(所以就有2个宿主),然后造到13个农民,然后放狗池,然后再造1个农民,然后不断造小狗
但是肯定很快就造不出来的,因为卡人口了,所以我们还要加上自动造宿主的功能
4) 自动造宿主方法 |
|