|
[jass]
native DebugS takes string str returns nothing
native DebugFI takes string str, integer val returns nothing
native DebugUnitID takes string str, integer val returns nothing
native DisplayText takes integer p, string str returns nothing
native DisplayTextI takes integer p, string str, integer val returns nothing
native DisplayTextII takes integer p, string str, integer v1, integer v2 returns nothing
native DisplayTextIII takes integer p, string str, integer v1, integer v2, integer v3 returns nothing
native DoAiScriptDebug takes nothing returns boolean
native GetAiPlayer takes nothing returns integer
native GetHeroId takes nothing returns integer
native GetHeroLevelAI takes nothing returns integer
native GetUnitCount takes integer unitid returns integer
native GetPlayerUnitTypeCount takes player p, integer unitid returns integer
native GetUnitCountDone takes integer unitid returns integer
native GetTownUnitCount takes integer id, integer tn, boolean dn returns integer
native GetUnitGoldCost takes integer unitid returns integer
native GetUnitWoodCost takes integer unitid returns integer
native GetUnitBuildTime takes integer unitid returns integer
native GetMinesOwned takes nothing returns integer
native GetGoldOwned takes nothing returns integer
native TownWithMine takes nothing returns integer
native TownHasMine takes integer townid returns boolean
native TownHasHall takes integer townid returns boolean
native GetUpgradeLevel takes integer id returns integer
native GetUpgradeGoldCost takes integer id returns integer
native GetUpgradeWoodCost takes integer id returns integer
native GetNextExpansion takes nothing returns integer
native GetMegaTarget takes nothing returns unit
native GetBuilding takes player p returns unit
native GetEnemyPower takes nothing returns integer
native SetAllianceTarget takes unit id returns nothing
native GetAllianceTarget takes nothing returns unit
native SetProduce takes integer qty, integer id, integer town returns boolean
native Unsummon takes unit unitid returns nothing
native SetExpansion takes unit peon, integer id returns boolean
native SetUpgrade takes integer id returns boolean
native SetHeroLevels takes code func returns nothing
native SetNewHeroes takes boolean state returns nothing
native PurchaseZeppelin takes nothing returns nothing
native MergeUnits takes integer qty, integer a, integer b, integer make returns boolean
native ConvertUnits takes integer qty, integer id returns boolean
native SetCampaignAI takes nothing returns nothing
native SetMeleeAI takes nothing returns nothing
native SetTargetHeroes takes boolean state returns nothing
native SetPeonsRepair takes boolean state returns nothing
native SetRandomPaths takes boolean state returns nothing
native SetDefendPlayer takes boolean state returns nothing
native SetHeroesFlee takes boolean state returns nothing
native SetHeroesBuyItems takes boolean state returns nothing
native SetWatchMegaTargets takes boolean state returns nothing
native SetIgnoreInjured takes boolean state returns nothing
native SetHeroesTakeItems takes boolean state returns nothing
native SetUnitsFlee takes boolean state returns nothing
native SetGroupsFlee takes boolean state returns nothing
native SetSlowChopping takes boolean state returns nothing
native SetCaptainChanges takes boolean allow returns nothing
native SetSmartArtillery takes boolean state returns nothing
native SetReplacementCount takes integer qty returns nothing
native GroupTimedLife takes boolean allow returns nothing
native RemoveInjuries takes nothing returns nothing
native RemoveSiege takes nothing returns nothing
native InitAssault takes nothing returns nothing
native AddAssault takes integer qty, integer id returns boolean
native AddDefenders takes integer qty, integer id returns boolean
native GetCreepCamp takes integer min, integer max, boolean flyers_ok returns unit
native StartGetEnemyBase takes nothing returns nothing
native WaitGetEnemyBase takes nothing returns boolean
native GetEnemyBase takes nothing returns unit
native GetExpansionFoe takes nothing returns unit
native GetEnemyExpansion takes nothing returns unit
native GetExpansionX takes nothing returns integer
native GetExpansionY takes nothing returns integer
native SetStagePoint takes real x, real y returns nothing
native AttackMoveKill takes unit target returns nothing
native AttackMoveXY takes integer x, integer y returns nothing
native LoadZepWave takes integer x, integer y returns nothing
native SuicidePlayer takes player id, boolean check_full returns boolean
native SuicidePlayerUnits takes player id, boolean check_full returns boolean
native CaptainInCombat takes boolean attack_captain returns boolean
native IsTowered takes unit target returns boolean
native ClearHarvestAI takes nothing returns nothing
native HarvestGold takes integer town, integer peons returns nothing
native HarvestWood takes integer town, integer peons returns nothing
native GetExpansionPeon takes nothing returns unit
native StopGathering takes nothing returns nothing
native AddGuardPost takes integer id, real x, real y returns nothing
native FillGuardPosts takes nothing returns nothing
native ReturnGuardPosts takes nothing returns nothing
native CreateCaptains takes nothing returns nothing
native SetCaptainHome takes integer which, real x, real y returns nothing
native ResetCaptainLocs takes nothing returns nothing
native ShiftTownSpot takes real x, real y returns nothing
native TeleportCaptain takes real x, real y returns nothing
native ClearCaptainTargets takes nothing returns nothing
native CaptainAttack takes real x, real y returns nothing
native CaptainVsUnits takes player id returns nothing
native CaptainVsPlayer takes player id returns nothing
native CaptainGoHome takes nothing returns nothing
native CaptainIsHome takes nothing returns boolean
native CaptainIsFull takes nothing returns boolean
native CaptainIsEmpty takes nothing returns boolean
native CaptainGroupSize takes nothing returns integer
native CaptainReadiness takes nothing returns integer
native CaptainRetreating takes nothing returns boolean
native CaptainReadinessHP takes nothing returns integer
native CaptainReadinessMa takes nothing returns integer
native CaptainAtGoal takes nothing returns boolean
native CreepsOnMap takes nothing returns boolean
native SuicideUnit takes integer count, integer unitid returns nothing
native SuicideUnitEx takes integer ct, integer uid, integer pid returns nothing
native StartThread takes code func returns nothing
native Sleep takes real seconds returns nothing
native UnitAlive takes unit id returns boolean
native UnitInvis takes unit id returns boolean
native IgnoredUnits takes integer unitid returns integer
native TownThreatened takes nothing returns boolean
native DisablePathing takes nothing returns nothing
native SetAmphibious takes nothing returns nothing
native CommandsWaiting takes nothing returns integer
native GetLastCommand takes nothing returns integer
native GetLastData takes nothing returns integer
native PopLastCommand takes nothing returns nothing
native MeleeDifficulty takes nothing returns integer
[/jass]
这个是很郁闷猜测的功能
native DebugS 带 入 S , 除 错 S
native DebugFI 带 入 S 和 数 字 X , 除 错 第 X 个 字 符 串
native DebugUnitID 同 上 。
↓区 别 不 知 道
native DisplayText 播 放 字 符
native DisplayTextI 播 放 字 符
native DisplayTextII 播 放 字 符
native DisplayTextIII 播 放 字 符
↑
native DoAiScriptDebug AI 是 否 有 错 , 返 回 对 应 的 。
native GetAiPlayer 获 得 正在 执 行 AI 的 的 玩 家 数 字 , 玩 家 1 对 应 0 。
native GetHeroId 返 回 单 位 ID , 和 GetUnitId 同 ( 那 为 何 弄 两 个 ?我 不 知 道 )
native GetHeroLevelAI 不 清 楚 , 是 返 回 等 级 就 是 了 ,被 AI 操 作 的 英 雄 ?
native GetUnitCount 带 入 单 位 ID , 获 得 一 类 单 位 总 数 。
native GetPlayerUnitTypeCount 同 上 多 个 玩 家 限 制 。带 入 多 一 个 玩 家 数 字 。
native GetUnitCountDone 不 知 道 。 返 回 是 玩 家 单 位 数 量 。 ( 被 操 纵 的 单 位 ?)
native GetTownUnitCount 不 知 道 。 城 镇 单 位 ?? 守 城 镇 ? 城 镇 一 定 范 围 的 单 位 ? 路 径 半 径 内 ?
native GetUnitGoldCost 带 入 单 位 ID , 返 回 购 买 此 单 位 所 需 要 的 金 币 。
native GetUnitWoodCost 同 上 , 木 材 。
native GetUnitBuildTime 建 造 ( 训 练 ) 此 单 位 所 需 要 的 时 间 。
native GetMinesOwned 返 回 矿 山 拥 有 者 。 ( 大 概 返 回 中 立 被 动 了 )
native GetGoldOwned 金 币 还 有 拥 有 者 的 ? 暂 不 明 白 。
native TownWithMine 城 镇 拥 有 的 金 矿 数 。
native TownHasMine 带 入 城 镇 ID , 城 镇 是 否 拥 有 金 矿 。
native TownHasHall 带 入 城 镇 ID , 城 镇 是 否 拥 有 Hall 。 ( 大 厅 ,出 农 民 的 那 个 ?)
native GetUpgradeLevel 获 得 升 级 的 等 级 。
native GetUpgradeGoldCost 带 入 升 级 技 能 ID , 返 回 升 级 所 需 要 的 金 币 。
native GetUpgradeWoodCost 同 上 , 木 头 。
native GetNextExpansion 不 知 道 。
native GetMegaTarget 什 么 叫 大 单 位 ? 返 回 单 位 。
native GetBuilding 带 入 玩 家 数 字 , 返 回 正 在 建 造 的 单 位 。( 若 是 多 个 怎 么 办 ? )
native GetEnemyPower 返 回 主 要 敌 对 玩 家 ? 不 知 道 。
native SetAllianceTarget 带 入 单 位 数 据 , 设 置 与 单 位 联 合 。(竟 然 只 同 盟 一 个 单 位 ,真 神 奇 。)
native GetAllianceTarget 返 回 被 同 盟 的 单 位 。
native SetProduce 带 入 产 数 量 ,生 产 单 位 ID ,城 镇 ? 让 某 单 位 生 产 ( 产 孩 子 ? Muhaha )
native Unsummon 带 入 单 位 类 型 , 使 单 位 为 非 召 唤 单 位 。 不 知 道 对 否 。
native SetExpansion 带 入 农 民 单 位 , 数 字 。 不 知 道 撒 。
native SetUpgrade 带 入 升 级 科 技 ID , 设 置 升 级 。
native SetHeroLevels 带 入 一 个 func , 设 置 英 雄 单 位 等 级 。
native SetNewHeroes 带 入 布 尔 , 是 否 设 置 新 英 雄 。
native PurchaseZeppelin 购 买 飞 艇 。啥 意 识 ? 偶 也 不 明 白 。
native MergeUnits 带 入 数 量 , 3 数 字 , 估 计 是 编 组 。 还 返 回 布 尔 (是 否 合 并 成 功 ?)
native ConvertUnits 不 清 楚 。
↓
native SetCampaignAI 设 置 战 役 AI ( 至 于 战 役 AI 导 入 路 径 偶 就 不 知 道 了 。)
native SetMeleeAI 设 置 混 战 AI ( 同 上 。 )
↑ 这 个 ……………………
native SetTargetHeroes 带 入 布 尔 , 对 应 设 置 英 雄 目 标 。( 为 主 要 目 标 ?)
native SetPeonsRepair 带 入 布 尔 , 对 应 设 置 主 动 修 理 ?
native SetRandomPaths 带 入 布 尔 , 对 应 设 置 随 机 路 线 ?
native SetDefendPlayer 带 入 布 尔 , 对 应 设 置 帮 助 玩 家 防 御 ?
native SetHeroesFlee 带 入 布 尔 , 对 应 设 置 英 雄 逃 跑 ?
native SetWatchMegaTargets 带 入 布 尔 , 对 应 设 置 监 视 大 单 位 ( 主 要 的)。
native SetIgnoreInjured 带 入 布 尔 , 对 应 设 置 忽 视 伤 害 。(只 攻 不 守 ?不 回 家 回 血 ?)
native SetHeroesTakeItems 带 入 布 尔 , 对 应 设 置 英 雄 捡 物 品 。 (捡 个 老 虎 回 家 算 了 。。)
native SetUnitsFlee 同native SetHeroesFlee 所 有 单 位 。
native SetGroupsFlee 同 , 集 体 逃 亡 ? - -
native SetSlowChopping 慢 采 矿 ? 不 是 很 清 楚 。
native SetCaptainChanges 带 入 布 尔 , 对 应 设 置 允 许 改 变 队 长 (带 头 大 哥 → 英 雄 ?)
native SetSmartArtillery 带 入 布 尔 , 对 应 设 置 炮 兵 巧 妙 攻 击 。 (太 近 会 走 开 点 去 攻 击 ?)
native SetReplacementCount 带 入 数 字 , 替 代 原 来 数 字 。(编 组 么 ?)
native GroupTimedLife 带 入 布 尔 , 对 应 设 置 集 体 时 间 生 命 。(太 难 了 。)
native RemoveInjuries 移 除 伤 害 。(没 伤 害 了 ? 起 不 是 无 敌 了 ?貌 似 不 是 那 样 的 。)
native RemoveSiege 去 除 围 攻 ?
native InitAssault 启 动 攻 击 ?
native AddAssault 带 入 单 位 数 量 和 类 型 , 增 加 攻 击 单 位 数 量 。 返 回 布 尔 。
native AddDefenders 增 加 单 位 数 量 和 类 型 , 增 加 防 御 单 位 数 量 。 返 回 布 尔 。
native GetCreepCamp 带 入 X X X X ,最 小 最 大 数 2 , 是 否 飞 行 。 返 回 单 位 。( 中 立 营 地 )
native StartGetEnemyBase 开 始 获 得 敌 人 基 地 ?
native WaitGetEnemyBase 等 待 获 得 敌 人 最 基 本 单 位 ?返 回 布 尔 。
native GetEnemyBase 返 回 敌 人 基 本 单 位 ?
native GetExpansionFoe 返 回 除 住 基 地 外 敌 人 单 位 。 (不 知 道 对 不 对 )
native GetEnemyExpansion 同 上 。
native GetExpansionY 返 回 扩 大 势 力 Y 坐 标 。 (第 二 基 地)
native GetExpansionY 返 回 扩 大 势 力 X 坐 标 。
native SetStagePoint 带 入 X 、Y ,设 置 舞 台 坐 标?
native AttackMoveKill 带 入 单 位 ,攻 击 移 动 直 到 杀 死 此 单 位 。
native AttackMoveXY 带 入 X ,Y , 攻击 移 动 到 X Y 。
native LoadZepWave 带 入 X ,Y ,飞 艇 登 陆 示 意 坐 标 。 (图 上 的 感 叹 圈 圈 号 ?)
native SuicidePlayer 带 入 玩 家 ID 和 布 尔 , 玩 家 自 杀 。返 回 布 尔 。
native SuicidePlayerUnits 同 上 单 位 自 杀 。
native CaptainInCombat 带 入 布 尔 , 对 应 设 置 攻 击 队 长 (英 雄 ?)
native IsTowered 带 入 单 位 , 判 断 在 城 镇 内 。返 回 布 尔 。
native ClearHarvestAI 清 除 造 农 民 AI ?
native HarvestGold 带 入 城 镇 (范 围 ?),农 民 数 量 , 设 置 此 基 地 采 黄 金 农 民 数 量 。
native HarvestWood 同 上 木 头 。
native GetExpansionPeon 获 得 非 主 基 地 农 民 。(不 知 道 )
native StopGathering 停 止 聚 集 。
native AddGuardPost 带 入 单 位 ID , 站 岗 点 X Y ,添 加 卫 士 站 岗 。
native FillGuardPosts 同 上
native ReturnGuardPosts 返 回
native CreateCaptains 建 立 队 长
native SetCaptainHome 设 置 家 。 特 殊 单 位 ID X Y 。
native ResetCaptainLocs 重 置 队 长 坐 标 。
native ShiftTownSpot 带 入 坐 标 , 转 移 城 镇 点
native TeleportCaptain 带 入 坐 标 , 传 送 队 长 点
native ClearCaptainTargets 清 除 队 长 目 标
native CaptainAttack 设 置 主 攻 点 。
native CaptainVsUnits 不 清 楚 。
native CaptainVsPlayer 同 上 。
native CaptainGoHome 队 长 回 家 。
native CaptainIsHome 队 长 在 家 。 返 回 布 尔 。
native CaptainIsFull 队 长 满 ? 返 回 布 尔
native CaptainIsEmpty 队 长 空 ? 返 回 布 尔
native CaptainGroupSize 队 长 组 大 小 。返 回 整 数 。
native CaptainReadiness 队 长 准 备 就 绪 。 同 上 。
native CaptainRetreating 队 长 撤 退 。 返 回 布 尔 。
native CaptainReadinessHP 队 长 准 备 就 绪 血 值 。返 回 整 数 。
native CaptainReadinessMa 魔 法 值 。
native CaptainAtGoal 队 长 在 目 的 地 , 返 回 布 尔 。
native CreepsOnMap 中 立 在 地 图 上 ?
native SuicideUnit 自 杀 单 位 数 量 和 类 型
native SuicideUnitEx 不 知 道 。
native StartThread 带 入 FUNC ,开 始 线 路 。
native Sleep 带 入 实 数 , AI 作 用 器 停 止 X 秒
native UnitAlive 带 入 单 位 ID , 单 位 是 否 活 者 。 返 回 布 尔 。
native UnitInvis 未 知 。
native IgnoredUnits 忽 视 单 位 ,返 回 忽 视 总 数 ?
native TownThreatened 城 镇 被 攻 击 ?返 回 布 尔
native DisablePathing 路 线 不 可 用 。
native SetAmphibious 设 置 为 两 栖 ?
native CommandsWaiting 命 令 滞 后 时 间 。 返 回 整 数 。
native GetLastCommand 获 得 最 后 的 命 令 。 返 回 整 数 。(咋 不 是 S 呢 )
native GetLastData 获 得 最 后 的 数 据 。 返 回 整 数 。
native PopLastCommand 未 知 。
native MeleeDifficulty 返 回 难 度 数 值 。
native GetMinesOwned 返 回 矿 山 拥 有 者 。 ( 大 概 返 回 中 立 被 动 了 )
native GetGoldOwned 金 币 还 有 拥 有 者 的 ? 暂 不 明 白 。
金矿如果有一个玩家正在开采,另一个玩家就无法开采的..
JASS与C语言很类似,所以在阅读以下内容之前,首先应该对TRIGGER JASS有着一定的了解。
了解JASS之后,你将很快的了解AI JASS。
AI JASS的概念
最主要的是理解AI线程(Threads)的概念。
线程是什么?
线程就象TRIGGER的一个循环判断语句,线程会不停的判断在线程程序列表内所缺少的元素,并去按照线程的指令排放顺序去完成它。
就象碗中的饭,有即吃,有即吃,有即吃,Loop......
为什么不用TRIGGER去完成电脑的人工智能呢?
由于使用TRIGGER相比之下可能会消耗大量的内存,所以,最好用AI线程来完成电脑的人工智能。
注意: 线程只针对单个玩家运作。
AI的类型(Melee AI 和 Campaign AI )
Melee AI 对战AI基本上完全可以利用WORLDEDITOR自带的AI编辑器(AI Edior)完成
Campaign AI 战役AI(即“非对战AI”),可以详细了解以下内容即可制作一般常用的战役AI
注:战役AI的用途十分广泛,完全可以利用其制作生存,3C,TD等类型的地图,并且免除了不停使用TRIGGER创造单位所带来的内存泄露。
线程(Threads)和触发器(Trigger)的区别AI脚本只能使用JASS函数库common.j和common.ai中的函数和量Trigger脚本只能使用common.j和Blizzard.j中的函数和量线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass)触发器只应用用于触发器脚本(Trigger Jass),不能用于AI脚本(AI JASS)
通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用comman.j的本地函数:
native StartThread takes code func returns nothing
运行方式的区别在于线程一旦开启即可自动运转,触发器必须调用或者借助事件的发生才可以运行。 调用 call StartThread(function myfunc) 将创建一个从函数myfunc开始执行的线程.
调用 call SleepForever() 使线程永久性的关闭 *每个玩家最多可以拥有6个线程(包括一开始执行的主线程在内,当一个玩家有6个线程数时, 调用StartThread()的语句将被忽略. ) *线程不能回收, 当你为某玩家创建了5个自定义线程, 将无法为该玩家创建更多的线程. *局域性的全局状态,在同一玩家中的所有线程都共享全局状态(包括变量). 即是修改某个全局变量, 修改后的值在此玩家的所有线程中都是可见的. *当新线程创建时, 线程立即生效. *当线程让步执行时, 创建此线程的父线程将继续执行.
线程在以下的情况让步执行, 返回父线程
a) 当线程中的操作码(opcode)超出限制, 线程会自动休眠 1 秒
当线程中用使用 Sleep(n), 线程将休眠 n 秒, 然后继续执行.
线程在以下情况会中止, 返回父线程
a) 如果 call StartThread(null)中, 线程中止
当线程的主函数返回, 线程中止.
(StartThread()中之间调用的函数就是主函数.)
c) 当线程中使用没有声明的变量, 线程中止. 在使用之前, 变量必须声明.
d) 当线程中出现零为被除数时, 线程中止
e) 线程主函数出现语法错误.
注意: 虽然AI脚本可以使用大部分common.j的库函数, 但有些类型的函数在AI不能正常工作, 如:
a) 返回字符串类型(string)的本地函数, 如I2S(), SubString()等
需要以code, trigger, boolexpr 等类型数据为参数的本地函数, 如触发器函数, 队列函数(ForGroup, 等)
注意: AI中不可以使用Blizzard.j的函数, 触发器中也不可以使用common.ai的函数, AI和触发器都可以使用common.j的函数(当然, 对于AI, 还受上面所说的限制)
common.ai和common.j是写AI时可以调用和参考库文件, 要研究AI, 先去读这2个文件.******************************************************************
3) 跨脚本通讯(Inter-Script Communication)
在游戏中, 可能会有多个独立的Jass脚本文件同时运行. 比如在对战地图中的游戏, 运行触发器脚本文件的同时, 也可能运行了每个电脑玩家的AI脚本文件. 每个脚本文件之间的全局变量不是共享的. 所以, 一个电脑玩家的AI脚本中设置的全局变量不会影响另一个电脑玩家的AI脚本的执行.
触发器脚本也不可以和AI脚本共享全局变量. 但可以用传递命令的方法进行脚本之间的数据交换. 命令由一对数值型数据(integer)组成: 命令值(command value)和数据值(data value).
从触发器脚本向AI脚本发出通讯命令, 可以使用common.j中定义的以下本地函数:
native CommandAI takes player num,
integer command, integer data returns nothing
参数:
player num //玩家
integer command //命令
integer data //命令数据
常数:
//--------------------------------------------------------------------
constant integer M1 = 60 实际上是时间!
constant integer M2 = 2*60
constant integer M3 = 3*60
constant integer M4 = 4*60
constant integer M5 = 5*60
constant integer M6 = 6*60
constant integer M7 = 7*60
constant integer M8 = 8*60
constant integer M9 = 9*60
constant integer M10 = 10*60
constant integer M11 = 11*60
constant integer M12 = 12*60
constant integer M13 = 13*60
constant integer M14 = 14*60
constant integer M15 = 15*60
constant integer EASY = 1
constant integer NORMAL = 2
constant integer HARD = 3
constant integer INSANE = 4 // not used
constant integer MELEE_NEWBIE = 1
constant integer MELEE_NORMAL = 2
constant integer MELEE_INSANE = 3
constant integer ATTACK_CAPTAIN = 1
constant integer DEFENSE_CAPTAIN = 2
constant integer BOTH_CAPTAINS = 3
constant integer BUILD_UNIT = 1
constant integer BUILD_UPGRADE = 2
constant integer BUILD_EXPAND = 3
constant integer UPKEEP_TIER1 = 50
constant integer UPKEEP_TIER2 = 80
JASS函数库common.ai的全局变量(可以更改,也可以自行增加,以下内容会经常在AI脚本中使用):
player ai_player //AI玩家 integer sleep_seconds
//等待时间
integer total_gold = 0 //总计的金钱 integer total_wood = 0
//总计的木材
integer gold_buffer = 0
// usually for potion money
integer difficulty = NORMAL
//难度,默认为中等难度
integer exp_seen = 0
integer racial_farm = 'hhou'
integer hero_id = 'Hamg'
//第一个英雄的ID,默认为圣骑士
integer hero_id2 = 'Hmkg'
//第二个英雄的ID,默认为山丘之王
integer hero_id3 = 'Hpal'
//第三个英雄的ID,默认为大法
integer array skill
integer array skills1
integer array skills2
integer array skills3
integer max_hero_level = 0
integer array harass_qty
integer array harass_max
integer array harass_units
integer harass_length = 0
防守单位的全局变量
例子:防守单位defense_units[defense_length]的数量为defense_qty[defense_length]
integer array defense_qty //设置防守单位的数量
integer array defense_units //设置防守的单位
integer defense_length = 0 //单位Index
建造的全局变量
为了区分建造的种类,BLZ为建造的全局变量设置了4类例子:建造单位build_type[build_length]的数量为build_qty[build_length]
integer array build_qty //建造的数量 设置建造单位的数量
integer array build_type //建造的种类 普通单位类(包括单位和建筑)
integer array build_item //购买物品的种类 物品类
integer array build_town //建造基地的种类 基地类
integer build_length = 0
设置采集工人的数量
integer campaign_gold_peons = 5 //主基地采集金子的人数
integer campaign_wood_peons = 3 //住基地采集木材的人数
integer campaign_basics_speed = 5
integer min_creeps = -1 integer max_creeps = -1
游戏初试设置的全局变量
boolean harvest_town1 = true
boolean harvest_town2 = true
boolean harvest_town3 = true
boolean do_campaign_farms = true
//自动制造战役AI 提供人口的建筑
boolean two_heroes = false
//双英雄
boolean allow_air_creeps = false
//空中的中立单位(假如有,AI会针对性的发展)
boolean take_exp = false //<
一般战役AI常用函数
CampaignAI takes integer farms, code heroes returns nothing
是BLZ在COMMON.AI中设置的一个简便函数,直接初始化战役AI
farms - 提供AI玩家人口的建筑类型
heroes - 指向设置英雄的ID的CODE
SetReplacements takes integer easy, integer med, integer hard returns nothing
尚未研究的函数,一般用法为:
call SetReplacement( 2, 2, 4 )
easy - 游戏难度为简单所赋的值
med - 游戏难度为普通所赋的值
hard - 游戏难度为困难所赋的值
native SetCaptainHome takes integer which, real x, real y returns nothing
设置攻击组队长在家的点?
which - 什么的聚集点,参数有:
constant integer ATTACK_CAPTAIN = 1 进攻的点
constant integer DEFENSE_CAPTAIN = 2 防御的点
constant integer BOTH_CAPTAINS = 3 进攻和防御的点
x - X坐标
Y - Y坐标
SetBuildUnit takes integer qty, integer unitid returns nothing
指令AI玩家制造(所有类型的建造,包括升级)
qty - 数量
unitid - 单位类型
SetBuildUnitEx takes integer easy, integer med, integer hard, integer unitid returns nothing
指令AI玩家制造单位按照游戏难度
easy - 简单时候的数量
med - 普通时候的数量
hard - 困难时候的数量
unitid - 单位类型
CampaignDefender takes integer level, integer qty, integer unitid returns nothing
设置防守单位的数量
CampaignDefenderEx takes integer easy, integer med, integer hard, integer unitid returns nothing
设置防守单位的数量,
按难度 call WaitForSignal() 等待TRIGGER发出AI指令,当堆积的指令数量不等于0时,继续进行AI线程
进攻组的指令
function InitAssaultGroup takes nothing returns nothing
初始化进攻组,设置全局变量harass_length = 0
CampaignAttacker takes integer level, integer qty, integer unitid returns nothing
增加进攻组的进攻单位
qty - 数量
unitid - 单位类型
CampaignAttackerEx takes integer easy, integer med, integer hard, integer unitid returns nothing
增加进攻组的进攻单位,按游戏难度
easy - 简单时候的数量
med - 普通时候的数量
hard - 困难时候的数量
unitid - 单位类型
SuicideOnPoint takes integer seconds, player p, integer x, integer y returns nothing
设置进攻的玩家的点seconds 发起进攻等待的时间,
常量参数有
constant integer M1 = 60
constant integer M2 = 260
constant integer M3 = 360
constant integer M4 = 460
constant integer M5 = 560
constant integer M6 = 660
constant integer M7 = 760
constant integer M8 = 860
constant integer M9 = 960
constant integer M10 = 1060
constant integer M11 = 1160
constant integer M12 = 1260
constant integer M13 = 1360
constant integer M14 = 1460
constant integer M15 = 1560
p - 目标玩家
SuicideOnUnits takes integer seconds, player p returns nothing
设置进攻的目标玩家seconds
一般战役AI的制作方案
参看BLZ在战役中所制作的AI脚本“n08_green.ai”来了解怎么制作AI
//变量 进攻的目标玩家
globals
player user = Player(1)
endglobals function main takes nothing returns nothing //AI初试设置
call CampaignAI(ZIGGURAT_1,null)
call SetReplacements(2,2,4)
call SetCaptainHome(ATTACK_CAPTAIN,4161,-4668 )
call SetCaptainHome(DEFENSE_CAPTAIN,5218,-6441 )
set campaign_wood_peons = 2 //需要建造的建筑以及单位
call SetBuildUnit( 1, NECROPOLIS_1 )
call SetBuildUnit( 1, ACOLYTE )
call SetBuildUnit( 1, UNDEAD_MINE )
call SetBuildUnit( 1, GRAVEYARD )
call SetBuildUnit( 8, ZIGGURAT_1 )
call SetBuildUnit( 2, CRYPT )
call SetBuildUnit( 1, UNDEAD_ALTAR )
call SetBuildUnit( 1, NECROPOLIS_2 )
call SetBuildUnit( 2, SLAUGHTERHOUSE )
call SetBuildUnit( 1, DAMNED_TEMPLE )
call SetBuildUnit( 1, NECROPOLIS_3 )
call SetBuildUnit( 2, BONEYARD )
call SetBuildUnit( 5, ACOLYTE )
call SetBuildUnit( 8, ZIGGURAT_2 ) //防守单位
call CampaignDefenderEx( 1,1,2, ABOMINATION )
call CampaignDefenderEx( 1,1,1, GARGOYLE )
call CampaignDefenderEx( 1,1,1, FROST_WYRM )
call CampaignDefenderEx( 1,1,1, CRYPT_FIEND )
call CampaignDefenderEx( 1,1,1, DREAD_LORD ) //TRIGGER发出指令就开始进行下面的AI进程
call WaitForSignal() //进攻,制造
//WAVE 1
call InitAssaultGroup()
call CampaignAttackerEx( 6,6,8, GARGOYLE )
call SuicideOnPlayerEx(M5,M5,M3,user)
call SetBuildUpgrEx( 1,1,1, UPG_FIEND_WEB )
call SetBuildUpgrEx( 1,1,1, UPG_CANNIBALIZE )
call SetBuildUpgrEx( 1,1,1, UPG_UNHOLY_STR )
call SetBuildUpgrEx( 1,1,1, UPG_CR_ATTACK )
//WAVE 2
call InitAssaultGroup()
call CampaignAttackerEx( 6,6,8, GARGOYLE )
call CampaignAttackerEx( 2,2,4, CRYPT_FIEND )
call CampaignAttackerEx( 1,1,2, FROST_WYRM )
call SuicideOnPlayerEx(M6,M6,M4,user)
//WAVE 3
call InitAssaultGroup()
call CampaignAttackerEx( 6,6,8, GARGOYLE )
call CampaignAttackerEx( 2,2,4, CRYPT_FIEND )
call CampaignAttackerEx( 1,1,2, FROST_WYRM )
call CampaignAttackerEx( 1,1,1, DREAD_LORD )
call SuicideOnPlayerEx(M6,M6,M4,user)
call SetBuildUpgrEx( 2,2,2, UPG_UNHOLY_STR )
call SetBuildUpgrEx( 2,2,2, UPG_CR_ATTACK )
call SetBuildUpgrEx( 1,1,1, UPG_SKEL_LIFE )
call SetBuildUpgrEx( 1,1,1, UPG_WYRM_BREATH )
//WAVE 4
call InitAssaultGroup()
call CampaignAttackerEx( 2,2,3, GARGOYLE )
call CampaignAttackerEx( 5,5,6, CRYPT_FIEND )
call CampaignAttackerEx( 1,1,2, |
|