请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 46475|回复: 13

[转]魔兽地图编辑器详解

  [复制链接]
发表于 2010-2-26 17:19:41 | 显示全部楼层 |阅读模式
单位篇

声音
单位声音设置 : 都是很好理解的东西,不过貌似只有该项有效
建筑 移动 随机 循环淡入率 循环淡出率 : 略过
战斗
主动攻击范围 : 单位会对该范围内的敌人进行主动攻击. 另该值还起到限制射程的作用,单位射程不会大于其主动攻击范围.同时也影响到一些自动选取目标技能的施法距离,例如:召唤骷髅.
最小攻击范围 : 单位无法对小于该值的范围内的敌人进行主动攻击.
防御类型 : 同样的攻击对不同的防御类型往往会造成不同的伤害.
基础防御 : 对英雄来说就是没有敏捷加成时的防御力.
防御升级奖励 : 升级科技-提升一次防御等级增加的防御值.
作为目标类型 : 作为单位被攻击或施法时的目标判定依据. 该项为空则单位不能被攻击或施法,即无敌.
死亡类型 : 略
装甲类型 : 该项只影响被近战单位攻击时的声音效果. 与其它任何东西无关.
允许攻击模式: 设置单位可使用的攻击模式.
攻击 - 投射物图像 : 设置远程单位攻击时发出的投射物模型.
攻击 - 射弹速率 : 投射物飞行速度.
攻击 - 射弹弧度 : 投射物发射弧度,弧度=射弹抛物线最大高度/平面位移距离.
攻击 - 射弹自导允许 : 允许箭矢类攻击(非炮火)的投射物能跟踪目标. 自导不允许时,对箭矢和箭矢(弹射),尽管目标已经不在目标点,仍会对目标造成伤害;对箭矢(溅射/穿透)则相当于没有攻击地面图标的炮火或炮火(穿透).
攻击 - 攻击类型 : 不同攻击类型对各种护甲造成的伤害不同. 无表示该攻击对所有护甲造成全额伤害.
攻击 - 武器类型 : 表示各种攻击方式.
近战 : 无投射物效果,武器声音有效. 只有该类型的攻击被视为近战,其他都是远程.
立即 : 不显示投射物发射轨迹.
箭矢 : 显示投射物发射轨迹.
溅射攻击 : 箭矢(溅射)和炮火. 其中炮火会带有攻击地面按钮. 如恶魔猎手和投石车.
弹射 : 箭矢(弹射). 发出的箭矢能在单位间弹射. 如女猎手.
穿透 : 箭矢(穿透)和炮火(穿透). 能穿透目标伤害其后面的单位,其中炮火(穿透)在普通攻击时为穿透效果,攻击地面时为溅射效果,两者不叠加. 如狮鹫和投刃车.
攻击 - 武器声音 : 只对武器类型为普通的攻击有效.攻击时的声音效果.
攻击 - 目标允许 : 可以攻击的单位类型.以下面的分类:同行之间为Or关系,异行之间为And关系,该行不选则取默认值.
例:只选择无敌则表示目标允许无敌的存活的别人的单位(空中地面建筑).此时原默认值-可攻击将不再起作用,单位只能攻击无敌的单位,而其它未被改动的行则采用默认值.
没有(选中即无允许目标,没悬念的DD...)
残骸 物品 地形 树木 墙 桥 装饰物 空中 地面 建筑 守卫 (默认空中 地面 建筑)
存活 死亡 (默认存活)
无敌 可攻击 (默认可攻击)
联盟 友军(不包括玩家单位) 敌人 玩家单位 中立 自己 别人 (默认别人)
英雄 非英雄 (默认全选)
古树 非古树 (默认全选)
自爆工兵 非自爆工兵 (默认全选)
机械 有机 (默认全选)
攻击 - 显示UI : 设置是否显示攻击键.
攻击 - 动画伤害点 : 单位实际发动攻击效果,进行伤害判断的时间点,该项大于攻击间隔时将取该项为单位实际攻击间隔. 例:A单位攻击间隔2,动画伤害点0;B单位攻击间隔0,动画伤害点2.那么两者实际攻击间隔都是2秒.而他们之间的差距就是,A单位发动攻击会立刻产生效果,而B单位则要等待2秒,且这2秒之间取消攻击的话该次攻击将无效化.
攻击 - 动画回复点 : 单位发动攻击效果到完成攻击动作所需要的时间,该值不大于(攻击间隔-动画伤害点). 该时间可以手动取消,例:2秒动画回复的单位杀死单位并按Shift移动到某点需要等待2秒,但不用Shift可以直接移动.
攻击 - 攻击范围 : 相当于射程,当如果主动攻击范围小于该值,则会取主动攻击范围作为射程.
攻击 - 攻击范围缓冲 : 近战单位攻击移动中的单位,因为发动攻击需要时间,目标可能跑出了射程以外,该值表示允许的缓冲范围值,只要目标没跑出该范围(射程+缓冲范围)则仍会受到伤害.
攻击 - 基础伤害 : 魔兽的随机伤害输出采用D&D的掷骰子模式.实际伤害 = 基础伤害 + 骰子数量 x Random(1,骰子面数)
攻击 - 伤害骰子数量 : 同上
攻击 - 伤害骰子面数 : 同上
攻击 - 伤害升级奖励 : 升级科技-提升一次攻击等级增加的伤害值.
攻击 - 攻击间隔 : 两次攻击间的间隔,最小值为0.1.攻速增加上限为原速的5倍(加上本身,即提高4倍),但不会超过每秒45.46次的上限.
攻击 - 范围影响目标 : 溅射或穿透攻击影响的允许目标类型.
攻击 - 全伤害范围 : 溅射攻击的全伤害范围或是弹射攻击的弹射距离.
攻击 - 中伤害范围 : 仅对溅射攻击有效. 应遵循全伤害范围<中伤害范围<小伤害范围(不包括0),否则会出问题.比如300/200/100的范围实际上会等于只有100的全伤害范围.
攻击 - 中伤害参数 : 仅对溅射攻击有效. 伤害参数可以大于100%,伤害优先权:全伤害>中伤害>小伤害,与伤害值大小无关.
攻击 - 小伤害范围 : 同上
攻击 - 小伤害参数 : 同上
攻击 - 最大目标数 : 仅对弹射攻击有效.
攻击 - 伤害衰减参数 : 仅对弹射和穿透攻击有效. 注意穿透攻击的伤害衰减也是逐个衰减的.
攻击 - 穿透伤害范围 : 仅对穿透攻击有效.
攻击 - 穿透伤害距离 : 仅对穿透攻击有效.
技能
普通 : 略
英雄 : 学习性技能,最多只能有5个.
默认主动技能 : 默认激活的主动技能.如心灵之火等.
文本
名字 : 略
名字 - 编辑器后缀 : 仅在编辑器中显示,一般用于区分同名单位.
称谓 : 略
称谓数量 : 实际采用的称谓数量.
提示工具 - 基础 : 建造该单位时的提示文本.
提示工具 - 扩展 : 同上
提示工具 - 重生 : 复活英雄时的提示文本.(需要复活时间,如祭坛)
提示工具 - 唤醒 : 唤醒英雄时的提示文本.(不需要复活时间,如酒馆)
说明 : 仅对物品有效,多出来的无效项.
热键 : 建造/雇用/复活单位时的热键.
魔法升级名字 : 拥有魔法升级科技的单位在状态栏右边会有个魔法升级图标. 该项为其说明信息. 可参照各族法师.
魔法升级说明 : 同上
显示
模型文件 : 略
模型文件 - 版本 : 某些单位有ROC/TFT两个版本的模型,如蒸汽坦克.
模型缩放 : 设置模型显示大小.
缩放投射物 : 修改模型大小时是否同时缩放攻击或技能的投射物大小.
选择缩放 : 设置选择圈的大小.
选择圈高度 : 略
选择圈在水面上 : 单位在水中时,选择圈在水面或是水底显示
颜色值(红) : 略
颜色值(绿) : 略
颜色值(蓝) : 略
闭塞高度 : 如,单位站在有闭塞高度的非联盟建筑旁边,会有视线被阻挡,就是所谓闭塞.将该值设为0则不会有此效果.
X轴旋转角度(度数) : 仅取负数时有效. 模型绕X轴旋转的角度.
Y轴旋转角度(度数) : 仅取负数时有效. 模型绕Y轴旋转的角度.
射弹偏移 - X : 单位攻击时发射投射物的X轴偏移.
射弹偏移 - Y : 单位攻击时发射投射物的Y轴偏移.
射弹偏移 - Z : 单位攻击时发射投射物的Z轴偏移.
射弹偏移 - Z (深水) : 深水区中单位攻击时发射投射物的Z轴偏移.
射弹碰撞偏移 - Z : 单位被攻击时投射物碰撞的Z轴偏移.
射弹碰撞偏移 - Z (深水) : 深水区中单位被攻击时投射物碰撞的Z轴偏移.
阴影图像(单位) : 单位形态时的阴影图片.
阴影图像(建筑) : 建筑形态时的阴影图片.
阴影图像 - 宽度 : 略
阴影图像 - 高度 : 略
阴影图像 - X轴偏移 : 略
阴影图像 - Y轴偏移 : 略
深水区有阴影 : 当阴影落在深水区时是否显示.
建筑地面纹理 : 略
图标 - 游戏界面 : 游戏中使用的图标.
图标 - 计分屏 : 游戏结束计分屏显示的图标,注意该类图标是很小的.
按钮位置(X) : 训练或雇用时单位按钮的排列坐标.
按钮位置(Y) : 训练或雇用时单位按钮的排列坐标.
魔法升级图标 : 如果该单位有魔法科技升级(如各种法师),该项为状态栏右边显示的魔法升级图标.
死亡时间(秒) : 从死亡到产生尸体的时间.
特殊效果 : 单位被炮轰而死时的爆炸效果.
目标效果 : 弹射攻击时对弹射目标附加的效果.
要求动画名 : 如为恶魔猎手添加alternate就会显示恶魔状态,为人类农民添加gold会显示背负黄金形态. 动画名可在模型预览窗口找到.
要求动画名 - 附加动画 : 为附加在单位身上的效果动画添加动画名.一般为medium和large,影响如反魔法外壳的大小(为空表示小). 动画名可在模型预览窗口找到.
要求附加动画链接名 : 可参考恶魔猎手(恶魔形态)
要求骨骼名 : 同上
动画 - 魔法施放点 : 从施放魔法到魔法生效需要的时间,该时间内单位不可做其他动作,但可以按Stop或Hold停止施法,此时魔法将不被发动.
动画 - 魔法施放回复 : 从魔法生效到结束施法所需最小时间,该时间内作其他动作的话'施法结束'事件将不会被触发.
动画 - 混合时间(秒) : 单位动画图像混合时间. 决定身体部件连接的快慢,比如攻击时手臂挥舞的速度. 增大该值会是单位动作僵硬化(如冰霜巨龙). 物体编辑器中设置无效,只能在触发中设置.
动画 - 行走速度 : 见下.
动画 - 跑步速度 : 取两者中更接近于实际移动速度者(如果相等则取跑步速度). 该值和单位移动动画共同决定单位移动时的跨步距离,数值越大跨步距离越大,相对的跨步频率就会变小.
动画 - 转向角度 : 单位最大转向角度. 当单位移动转向角度大于该值时将会有一个原地转身的过程. 不是很好解释的东西,建议调低转身速度自己测试看看效果.
动画 - 转向补正 : 该值决定单位模型转向的速度和幅度,取值0-8,取值越大则速度越慢,幅度越大.不同移动类型的模型转向方式是不一样的,比如飞行单位会进行身体翻转,建议设到7或8自己看看效果.
队伍颜色 : 设置单位的队伍颜色.
队伍颜色 - 允许自定义 : 只有该项为True才允许设置单位的队伍颜色.
高度变化 - 采样点数量 : 见下.
高度变化 - 采样范围 : 设置单位在经过突起或下陷的地面时的高度变化.此时将取采样范围处的几个点的平均值作为单位显示的高度.
战争迷雾 - 采样范围 : 未知
不可见区域显示单位 : 勾选该项则单位可以在不可见区域被显示.
状态
种族 : 略
等级 : 单位等级决定杀死该单位所得的经验.该项对英雄无效.
单位类别 : 许多单位类别都有特殊作用.
不死族 机械类 古树 牛头人 召唤生物 城镇大厅: 可作为一些技能的判定依据.
中立 : 在小地图上显示中立建筑标记.
可通行 : 比如传送门是可通行的,但事实上一般建筑你添加了也没用.
守卫 : UI按钮全不可见,只能使用右键命令.
工人 : 空闲时会显示左下角的闲置图标,且不会主动攻击.
树木 : 该项貌似是多余项.
自爆工兵 : 会自动使用自爆技能.
泰坦族 : 未使用的一个类别,只在魔兽历史中出现.
是一个建筑 : 设置单位是否为建筑.
黄金消耗 : 建造或雇用该单位的费用.
木材消耗 : 同上
建造时间 : 建造该单位需要的时间.
修理黄金消耗 : 修理该单位所需费用,还和修理技能的参数设置有关.
修理木材消耗 : 同上
修理时间 : 修理该单位所需时间,还和修理技能的参数设置有关.
黄金奖励 - 基础值 : 杀死该单位所能得到的奖励. 随机奖励采用D&D的掷骰子模式. 所得奖励 = 基础值 + 骰子数量 x Random(1,骰子面数)
黄金奖励 - 骰子数量 : 同上
黄金奖励 - 骰子面数 : 同上
木材奖励 - 基础值 : 同上,但木材奖励不会有漂浮文字显示.
木材奖励 - 骰子数量 : 同上
木材奖励 - 骰子面数 : 同上
占用人口 : 略
提供人口 : 略
生命最大值 : 略
生命回复 : 略
生命回复类型 : 略
魔法最大值 : 略
魔法回复 : 略
魔法初始数量 : 英雄复活以及单位刚建造出来时的魔法值.
视野范围(白天) : 单位在白天的视野范围
视野范围(夜晚) : 单位在晚上的视野范围
雇佣开始时间 : 单位作为雇佣兵第一次能被雇佣的时间.
雇佣时间间隔 : 略
最大库存量 : 单位作为雇佣兵的最大库存量.
运输尺寸 : 单位被装载时所占的装载格数.
英雄 - 主要属性 : 略
英雄 - 初始力量 : 略
英雄 - 初始敏捷 : 略
英雄 - 初始智力 : 略
英雄 - 每等级提升力量 : 略
英雄 - 每等级提升敏捷 : 略
英雄 - 每等级提升智力 : 略
英雄 - 隐藏小地图英雄显示 : 勾选的话,会使用普通单位标记代替小地图中该英雄标记.
英雄 - 隐藏英雄栏图标 : 左上角不显示该英雄图标.
英雄 - 隐藏英雄死亡信息 : 死亡时不显示死亡讯息.
中立建筑 - 可作为随机建筑 : 略
中立建筑 - 显示小地图标记 : 略
隐藏小地图显示 : 小地图上不显示该单位的标记.
单位附加值 : 并无任何实际意义,仅用于触发器中,比如在一个TD地图中,我们可以使用该项来作为建筑的售出价格.
允许睡眠 : 允许在夜晚进入睡眠状态. 只对中立敌对有效.
可以逃跑 : 单位被攻击而无法反击时会自动跑开一段距离.
编队优先权 : 编队时单位图标的排列顺序,该值较高者会排列在前面.
队形排列 : 移动时的队形排列,数值越小的会越靠前.
能建造在其他建筑上 : 仅用于不死族金矿,其他建筑乱用会跳错.
能被其他建筑建造 : 仅用于金矿,其他建筑乱用会跳错.
科技树
需求 : 建造单位所需的科技项目,可添加多个.
需求 - 等级 N : 仅对英雄有效,建造第N个英雄需要的科技项目.
需求 - 使用等级数 : 略
需求值 : 所需科技项目的等级(科技)或数量(单位),可添加多个,与科技树需求依次对应.
从属等价物 : 这里列出的对象可以代替该单位,但该单位不能代替列出的对象. 即A属于B不代表B属于A.
可重生阵亡英雄 : 该建筑可以用来重生死亡英雄.
可研究项目 : 该建筑中可以研究的科技项目.
指定复活点 : 该建筑必须可以复活英雄. 英雄将只能在指定的建筑复活.
可建造建筑 : 该单位可以建造的建筑种类.
使用科技 : 该单位所应用的科技项目.
售出物品 : 该建筑可以出售的物品.
制造物品 : 该建筑可以出售的物品.与售出物品的区别是该项中的物品出售有科技树限制,而售出物品没有.
售出单位 : 该建筑可以出售的单位.
训练单位 : 该建筑可以出售的单位.与售出单位的区别是该项中的单位出售有科技树限制,且有训练时间,而售出单位没有.
建筑升级 : 该建筑可以升级为指定建筑.
移动
类型 : 移动类型影响单位可移动区域以及飞行高度和转身动作等等.
无 : 能在包括边界的所有区域移动
步行 骑马 : 只能在陆地和浅水区移动.
飞行 : 可以在边界之外的地区移动.
浮空(陆) : 只能在陆地和浅水区移动,单位可以浮在空中.
漂浮(水) : 只能在水中移动.
两栖 : 可以在陆地和水中移动.
基础速度 : 单位的移动速度将处于最大和最小值之间.
最大速度 : 数值0代表使用默认值(游戏平衡常数)
最小速度 : 数值0代表使用默认值(游戏平衡常数)
转身速度 : 取值0-1. 数值越大,单位转身越快. 为0时单位将只能向前移动.
高度 : 单位的飞行高度.
最小高度 : 单位飞行高度不会小于该值.
组群分离 - 允许 : 开启该项的同类单位在距离过近时会自动排斥.(像磁铁一样)
组群分离 - 参数 : 设置排斥强度,即距离.
组群分离 - 组号 : 同组的不同单位间也会有排斥效应.0表示无组号.
组群分离 - 优先权 : 两单位发生排斥时,优先级低的单位会被排斥,优先级相同则相互排斥.
编辑器
分类 - 战役 : 单位显示在战役分类中.
分类 - 特殊 : 单位显示在特殊分类中.
可在编辑器中放置 : 该项为False则单位将无法在编辑其中放置...
地形设置 : 单位将只在工具面板的指定地形中显示,仅由于中立单位.
使用点击帮助 : 在模型中心显示一个紫色小方块,对一些特别小的模型大概有用.
可作为中立敌对显示 : 勾选该项的中立单位会被显示在中立敌对分类中.
可设置死亡掉落物品 : 可在设置单位属性中设置其死亡掉落物品.
有地形指定数据 : 据说某些模型对于不同地形会使用不同数据,比如模型皮肤. 测试未果,只知道该项开启后更换地形很容易跳错. 建议不要理会.
路径
放置不允许 : 不允许放置该建筑的区域.
放置要求 : 对允许放置区域的要求.
放置要求距离水的范围 : 建筑需要建造在离水距离为该范围内的地方. 0表示不需要.
AI放置类型 : 用于对战AI.
AI放置范围 : 用于对战AI.
碰撞体积 : 单位的实际大小而非显示大小,碰撞体积过大的单位经常会被被堵住,对建筑无效.
路径纹理 : 建造建筑时显示的绿色方块区域. 可设置该区域的建造和通行状态.在编辑器中勾选菜单 - 编辑 - 路径(地面/海路)项可以详细查看路径纹理.
如下图为人类基地的默认路径纹理,紫色区域表示不可建造,粉色区域表示地面单位不可通行.

评分

参与人数 1威望 +9 收起 理由
alexries + 9

查看全部评分

 楼主| 发表于 2010-2-26 17:21:04 | 显示全部楼层
技能篇

声音

音效 : 技能音效.
音效(循环) : 持续技能的循环音效.

文本
名字 : 略
名字 - 编辑器后缀 : 仅在编辑器中显示,一般用于区分同名技能.
提示工具 - 学习 : 学习技能时的提示文本.
提示工具 - 学习 - 扩展 : 同上
提示工具 - 普通 : 正常状态时的技能提示文本.
提示工具 - 普通 - 扩展 : 同上
提示工具 - 关闭 : 激活/关闭技能的提示文本.
提示工具 - 关闭   - 扩展 : 同上
命令串 - 使用/打开 : 用于发布相应技能动作的命令串.
命令串 - 关闭 : 同上
命令串 - 激活 : 同上
命令串 - 取消激活 : 同上
热键 - 学习 : 学习技能的热键.
热键 - 普通 : 使用技能的热键.
热键 - 关闭 : 关闭技能的热键.

显示
图标 - 学习 : 学习技能的图标.
图标 - 普通 : 使用技能的图标.
图标 - 关闭 : 关闭技能的图标.
按钮位置 : 相应按钮图标的位置.
效果 - 投射物图像 : 技能投射物效果. 只对有射弹轨迹的技能有效(如风暴之锤、灼热之箭).
效果 - 射弹速度 : 技能投射物飞行速度.
效果 - 射弹弧度 : 射弹弧度 = 技能投射物飞行最大高度/平面位移.
效果 - 射弹自导允许 : 技能投射物可以自动跟踪目标单位.
效果 - 闪电效果 : 只对闪电链、魔法吸吮之类连通单位之间的技能有效.设置单位之间的连接效果.
效果 - 区域 : 地面区域的效果影响.只有闪烁和传送类技能该项有效.
效果 - 施法动作 : 施法者在施法过程中所做的动作.
效果 - 施法者 : 对施法者附加的效果影响.
效果 - 施法者 - 附加数量 : 对施法者附加的效果数量. 0表示使用效果默认值.
效果 - 施法者附加点 : 对施法者的效果附加点位置.
效果 - 目标点 : 对目标点的效果附加. 只有以点为目标施放技能才有效.
效果 - 目标 : 对目标单位的效果附加. 只有以单位为目标施放技能才有效.
效果 - 目标 - 附加数量 : 对目标单位附加的效果数量. 0表示使用效果默认值.
效果 - 目标附加点 : 对目标单位的效果附加点位置.
效果 - 特殊 : 技能指定作特殊用途的效果. 不是每个技能都有效,而且对各技能的用途都不一样.
效果 - 特殊附加点 : 特殊效果的效果附加点位置.
附加点:
     hand 手     foot 脚     real 后肢(四足生物)     weapon 武器
     left right 修饰手脚等附加点,添加在前面和后面都可以
     head 头部     overhead 头顶     chest 胸部     origin 脚底
     turret 炮塔头部     mount 坐骑头部     eattree吃树时树的附加点所在位置
     rally 聚集点(设置聚集点在该单位身上时的聚集点附加位置)
     sprite 只有血法和建筑物有该附加点
     first second third fourth fifth sixth 修饰sprite的后缀

状态
种族 : 技能所在种族分类.
英雄技能 : 是否作为英雄技能.
物品技能 : 是否作为物品技能.
等级 : 技能的总等级数量.
学习等级 : 技能初始学习需要的等级. 等级高于或等于6级的技能才能对魔免单位施放.
跳级要求 : 学习技能所需等级间隔. 0表示取默认值(平衡常数)
魔法偷取优先权 : 一般来说是作为对战AI中判断使用.
魔法效果 : 对目标单位附加的魔法效果.
区域持续效果 : 对目标区域的持续性效果. 只有对区域持续效果的技能才有效. 如暴风雪、地震.
目标允许 : 可以对其施放的对象类型.以下面的分类:同行之间为Or关系,异行之间为And关系,该行不选则取默认值.
例:只选择无敌则表示目标允许无敌的存活的别人的单位(空中地面建筑).此时原默认值-可攻击将不再起作用,单位只能对无敌的单位施法,而其它未被改动的行则采用默认值.
         没有(选中即无允许目标,没悬念的DD...)
         残骸 物品 地形 树木 墙 桥 装饰物 空中 地面 建筑 守卫 (默认空中 地面 建筑)
         存活 死亡 (默认存活)
         无敌 可攻击 (默认可攻击)
         联盟 友军(不包括玩家单位) 敌人 玩家单位 中立 自己 别人 (默认别人)
         英雄 非英雄 (默认全选)
         古树 非古树 (默认全选)
         自爆工兵 非自爆工兵 (默认全选)
         机械 有机 (默认全选)
魔法施放时间 : 魔法施放准备时间,但常被用来作为其他数据使用. 如暴风雪中作为波次间隔时间使用.
魔法施放时间间隔 : 略
持续时间 - 普通 : 魔法效果对普通单位的持续时间. 也常被用来作其他用途.
持续时间 - 英雄 : 魔法效果对英雄单位的持续时间. 也常被用来作其他用途.
魔法消耗 : 略
施法距离 : 略
影响区域 : 一般作为范围性技能的影响范围大小.

科技树
检查等价所属 : 检查等价从属关系.如A从属于B,那么该项为True时A可以代替B,而B不能代替A;为False则两者可以相互替代.
需求 : 使用技能所需的科技项目,可添加多个.
需求值 : 所需科技项目的等级(科技)或数量(单位),可添加多个,与科技树需求依次对应.
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:22:01 | 显示全部楼层
地形装饰物篇

装饰物

声音
循环声音 : 略

文本
名字 : 略

显示
模型文件 : 略
默认比例 : 默认的模型缩放大小.
X轴旋转角度(度数) : 仅取负数时有效. 模型绕X轴旋转的角度.
Y轴旋转角度(度数) : 仅取负数时有效. 模型绕Y轴旋转的角度.
固定角度 : 物体朝向方向. 取-1可以自由调节方向,当路径纹理为无时或正方形单一纹理(如树木)时,可以自由选择角度,否则调节幅度为90度.
样式总数 : 模型样式的数量. 如10种样式的物体该项设为3,则只会出现3种样式.
选择圈大小 : 编辑器中的选择圈直径.
小地图 - 显示 : 是否在小地图显示.
小地图 - 使用自定义颜色 : 是否使用自定义小地图标记颜色.
小地图颜色(红) : 自定义小地图标记颜色.
小地图颜色(绿) : 同上
小地图颜色(蓝) : 同上
可见范围 : 未知
有阴影 : 未知
漂浮 : 装饰物在水中时是否漂浮在水面上.
迷雾中显示 : 设置装饰物能否在迷雾中被显示.
迷雾中显示动画 : 设置装饰物能否在迷雾中显示动画.
颜色值(红) : 略
颜色值(绿) : 略
颜色值(蓝) : 略

编辑器
类别 : 装饰物所处分类.
加入用户指定列表 : 将装饰物加入到工具面板的用户指定列表.
地形设置 : 装饰物将只在工具面板的指定地形分类中显示.
悬崖上可放置 : 略
水面可放置 : 略
可以放置随机比例 : 略
最大比例 : 允许的模型最大缩放值.
最小比例 : 允许的模型最小缩放值.
使用点击帮助 : 在模型中心显示一个紫色小方块来辅助点击.
忽略模型点击 : 点击模型将不能选中该装饰物,但能被框选. 如果开启了点击帮助,点击紫色方块也能选中装饰物.
有地形指定数据 : 据说某些模型对于不同地形会使用不同数据,比如模型皮肤. 测试未果,只知道该项开启后更换地形很容易跳错. 建议不要理会.
可通行 : 设置单位通过该装饰物时是否改变其Z轴高度使其从装饰物表面通过.
路径纹理 : 设置装饰物所占区域的大小以及建造和通行状态.在编辑器中勾选菜单 - 编辑 - 路径(地面/海路)项可以详细查看路径纹理.
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:22:35 | 显示全部楼层
科技篇

科技

文本

名字 : 略
编辑器后缀 : 仅在编辑器中显示,一般用于区分同名科技.
提示工具 : 科技研究的说明文本.
提示工具 - 扩展 : 同上
热键 : 研究该科技的热键.

显示
图标 : 该科技使用的图标.
按钮位置(X) : 研究科技的按钮图标所在位置.
按钮位置(Y) : 研究科技的按钮图标所在位置.

数据
光环数据奖励 : 仅对兽族的战鼓升级及以它为基础的自定义科技有效,可以对兽族战鼓光环的数据进行修正.
单位可用性更改 : 设置单位可用性,仅对指定的几个科技项有效.
增加夜视能力 : 空壳而已,无实际作用.
复活死尸持续时间奖励 : 延长复活死尸技能召唤骷髅的持续时间.
尖刺障碍 : 升级有尖刺障碍技能单位受到近战攻击时的反弹伤害值.
应用攻击升级奖励 : 提升单位攻击力,数值在单位编辑器中给定.
应用防御升级奖励 : 提升单位防御力,数值在单位编辑器中给定.
技能等级奖励 : 提升技能等级.
攻击伤害奖励 : 提升单位攻击力.
攻击伤害衰减奖励 : 弹射和穿透攻击的伤害衰减,注意增加伤害衰减表示每次反弹后的攻击伤害会减少,所以要提升威力的话应该输入负值. (暴雪官方编辑器该项有Bug,不能输入实数,在该UI的V1.2中修正可用.)
攻击允许 : 设置单位攻击模式.
攻击允许(扎根) : 古树扎根形态的攻击模式.
攻击允许(拔起) : 古树移动形态的攻击模式.
攻击射程奖励 : 增加单位攻击射程.
攻击目标数量奖励 : 增加弹射攻击弹射目标数量.
攻击速度奖励 : 增加攻击速度.
攻击骰子数奖励 : 增加单位攻击伤害骰子数量.
木材采集奖励 : 增加单位一次携带的木材数量.
生命值奖励 : 增加单位生命值.
生命值奖励(%) : 增加单位生命值.(基础生命值的百分比)
生命回复 : 增加单位生命恢复速度.
移动速度奖励 : 增加单位移动速度.
移动速度奖励(%) : 增加单位移动速度.(基础移动速度的百分比)
穿透攻击范围奖励 : 穿透攻击的范围奖励.
穿透攻击距离奖励 : 穿透攻击的穿透距离奖励.
视野范围奖励 : 增加单位的视野范围.
防御类型更改 : 修改单位的防御类型.
魔法值奖励 : 增加单位魔法值.
魔法值奖励(%) : 增加单位魔法值.(基础魔法值的百分比)
魔法免疫 : 空壳而已,无实际作用.
魔法回复 : 增加单位魔法恢复速度.
黄金采集奖励 : 增加单位一次采集的黄金数量.
黄金采集奖励(缠绕) : 增加一次采集的黄金数量.(该升级针对金矿使用,如不死或暗夜的金矿)

状态
种族 : 科技所属种族分类.
等级 : 科技升级等级总数.
升级类型 : 升级研究的科技类型,并会在单位状态栏中显示.
基础黄金消耗 : 首次研究科技所需花费.
基础木材消耗 : 同上
基础时间消耗 : 同上
每等级增加黄金 : 每次研究科技需要增加的花费.
每等级增加木材 : 同上
每等级增加时间 : 同上
可随单位转移所有者 : 转移单位所属同时能使玩家获得该单位的科技升级.
应用于所有单位 : 无效选项

科技树
需求 : 研究该科技所需的科技项目,可添加多个.
需求值 : 所需科技项目的等级(科技)或数量(单位),可添加多个,与科技树需求依次对应.
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:27:12 | 显示全部楼层
平衡常数篇

杂项
人口上限 FoodCeiling : 略
单位最大等级 MaxUnitLevel : 普通单位的等级上限.
显示其它玩家物品栏 DisplayEnemyInventory : 该项为False将无法看到其他玩家的物品栏,除非得到其控制权.
攻击反应延迟 ReactionDelay : 单位发布攻击命令(或是发现攻击目标)到发动攻击之间的反应延迟.
昼夜动画时间比例 ScaledAnimTime : 昼夜更替速率,60为标准值,数值越大昼夜更替越快.
最大碰撞范围 MaxCollisionRadius : 未发现作用
隐形转换速率 InvisSpeed : 未发现作用
集结点Z轴偏移 RallyZOffset : 未发现作用
通过可破坏物时选择圈Z偏移 ImageWalkableZOffset : 地面单位通过可通行的可破坏物时单位选择圈和阴影的Z轴偏移.
建筑朝向角度(度数) BuildingAngle : 普通建筑朝向角度.
扎根建筑朝向角度(度数) RootAngle : 古树扎根后的朝向角度.
回收建筑HP流失速率 ConstructionLifeDrainRate : 使用不死族侍僧的回收建筑时,被回收建筑的每秒流失的生命值.
建筑荒芜地表驱散范围 BuildingUnBlightRadius : 未发现作用
建造状态显示 DisplayBuildingStatus : 未发现作用
点命令指示器颜色(一般) : 发布一般点命令时的点命令指示器颜色. 颜色值格式:(A,R,G,B),取值0-255.
点命令指示器颜色(攻击) : 发布指定点攻击命令时的点命令指示器颜色. 颜色值格式:(A,R,G,B),取值0-255.

中立生物
对使用中立建筑的警戒范围 NeutralUseNotifyRadius : 未发现作用
对建造建筑物的警戒范围 BuildingPlacementNotifyRadius : 未发现作用
最大中立营地范围(路径单元) CreepCampPathingCellDistance : 该范围用来决定中立单位营地在小地图上的显示和相关AI判断. 以路径单元为单位,每个单元为32距离. 即10表示320距离.
警戒范围 GuardDistance : 中立单位与警戒点距离小于该值时不会主动返回.
警戒返回距离 MaxGuardDistance : 中立单位与警戒点距离大于警戒范围而小于警戒返回距离时,如果在攻击目标则不会返回,否则自动返回警戒点;如果距离警戒点范围大于警戒返回距离时无条件返回警戒点.
警戒返回时间(秒) GuardReturnTime : 中立单位在离开警戒范围时间超过该值时会自动返回.
警戒范围 - 单位出售 UnitSaleAggroRange : 中立生物对玩家雇俑单位事件的警戒范围.
警戒范围 - 技能出售 AbilSaleAggroRange : 中立生物对玩家使用中立建筑技能的警戒范围.
警戒范围 - 物品出售 ItemSaleAggroRange : 中立生物对玩家购买物品事件的警戒范围.

信息面板
Buff图标消褪时间 FadeBuffMinDuration : 当Buff效果剩余时间为该值时Buff图标开始出现消褪效果.
Buff图标消褪最大Alpha值 FadeBuffMaxAlpha : Buff图标的正常Alpha值.
Buff图标消褪最小Alpha值 FadeBuffMinAlpha : Buff图标消褪状态时其Alpha值在最大和最小值之间更替.
任务指示器持续时间 QuestIndicatorTimeout : 任务按钮闪动的持续时间.
攻击速度 - 快 AttackFast : '快' 与 '非常快' 的分界点.
攻击速度 - 中等 AttackAverage : '快' 与 '中等' 的分界点.
攻击速度 - 慢 AttackSlow : '中等' 与 '慢' 的分界点.
攻击速度 - 非常慢 AttackVerySlow : '慢' 与 '非常慢' 的分界点.
移动速度 - 快 SpeedFast : '快' 与 '非常快' 的分界点.
移动速度 - 中等 SpeedAverage: '快' 与 '中等' 的分界点.
移动速度 - 慢 SpeedSlow : '中等' 与 '慢' 的分界点.
移动速度 - 非常慢 SpeedVerySlow : '慢' 与 '非常慢' 的分界点.
近战最大攻击距离 MeleeRangeMax: 该值以下的攻击距离会被显示为近战,但与该单位是否为近战单位无关.

取消返还参数
单位训练 TrainRefundRate : 取消以下各类事件返还的资源百分比. 1表示全额返还.
建筑升级 UpgradeRefundRate : 同上
建造建筑 ConstructionRefundRate : 同上
科技研究 ResearchRefundRate : 同上
英雄复活 ReviveRefundRate : 同上

字体大小
图标右下角数字 CommandButtonNumber : 可设置以下各项对应的字体大小
工具栏 - 标题 ToolTipName :
工具栏 - 消费数值 ToolTipCost :
工具栏 - 说明 ToolTipDesc :
排行榜和多面板 LeaderBoard :
游戏信息提示 WorldFrameMessage :
物体悬浮窗 - 名字 UnitTipPlayerName :
物体悬浮窗 - 说明 UnitTipDesc :
物品栏标题 Inventory :
生命魔法值 PortraitStats :
维修费提示 WorldFrameTopMessage :
聊天文本显示 WorldFrameChatMessage :
聊天输入栏文字大小 ChatEditBar :
触发文本显示 WorldFrameUnitMessage :
计分屏 - 大字体 ScoreScreenLarge :
计分屏 - 普通字体 ScoreScreenNormal :
计分屏 - 玩家名字 ScoreScreenTeam :

小地图信号
完成信号颜色 PingColor : 完成训练/研究/升级等动作时显示的信号. 颜色值格式:(A,R,G,B),取值0-255.
建议信号颜色 PingAdvisorColor : 例如所采集金矿倒塌时会显示该信号.
攻击信号颜色 PingAttackColor : 遭受攻击时显示的信号.
路径点信号颜色 PingWaypointColor : 按Shift设置路径点显示的信号,该信号只有绿颜色值可用,即设置其它颜色通道是无效的.

战斗
伤害奖励列表
虚无 EtherealDamageBonus : 设置虚无状态时各类攻击类型的伤害加成效果. 不过该项暴雪的排序是错误的,正确的应该是普通-穿刺-攻城-魔法-混乱-法术-英雄.
攻城 DamageBonusSiege : 以下设置各类攻击类型对不同护甲的伤害效果.
普通 DamageBonusNormal :
法术 DamageBonusSpells :
混乱 DamageBonusChaos :
穿刺 DamageBonusPierce :
英雄 DamageBonusHero :
魔法 DamageBonusMagic :
失误几率 ChanceToMiss : 远程单位攻击高地上单位时的命中失误几率.
护甲减少伤害因子 DefenseArmor : 确定护甲与伤害减少值之间关系的参数,设该值为x,则
1>. 当防御Def>0时,单位所受伤害%为1/(1+0.06*Def)
2>. 当防御Def<0时,单位所受伤害%为 2-0.94^(-Def) (^符号是幂运算)
闪避抵消伤害因子 MissDamageReduction : 溅射攻击被闪避时,单位仍会受到部分伤害,该值设置其所抵消的伤害值.
攻击通知范围 AttackNotifyRange : 未发现作用
攻击通知间隔 AttackNotifyDelay : 两次攻击通知之间的最小时间间隔.
救援范围 CallForHelp : 发生战斗时,该范围内拥有正面魔法并处于自动施放状态的单位会主动赶去支援.
救援范围(中立) CreepCallForHelp : 同上,针对中立敌对玩家.

时间
每日时间长度 DayLength : 每日对应的真实时间秒数.
每日的小时数 DayHours : 默认为24.
黎明 Dawn : 进入白天的游戏日时间.
黄昏 Dusk : 进入夜晚的游戏日时间.

游戏性
等价所属检查 DepCheckAlias : 未发现作用
允许反弹远程攻击 DefendDeflection : 设置艾鲁尼之优雅、防御等技能的反弹功能可用
允许多种奖励 AllowMultiBounce : 未知
升级使用建造费用 RelativeUpgradeCost : 该项为True时,建筑升级费用=该建筑建造费用;为False时,建筑升级费用=该建筑建造费用 - 原建筑建造费用.
升级建筑损伤返还惩罚 UpgradeDamageRefundPenalty : 如果建筑在升级中受到损伤,设置其被取消时是否需要扣除相应资源.
建造建筑损伤返还惩罚 ConstructionDamageRefundPenalty : 如果建筑在建造中受到损伤,设置其被取消时是否需要扣除相应资源.
移动速度奖励累加 MoveSpeedBonusesStack : 无效项
虚无对盟友伤害加成 EtherealDamageBonusAlly : 设置对盟友虚无单位造成伤害时是否有加成效果.
飓风技能隐藏单位 CycloneStasis : 设置被飓风技能命中的单位能否被选取.
驱逐魔法可对无敌单位造成伤害 InvulnSummonDispelDamage : 该项为True时驱逐、净化等技能可以对无敌召唤单位造成伤害.
变身时禁用其它形态交替技能 MorphAlternateDisable : 使用各类变身技能时将禁用其它形态交替技能(这是个Bug项,事实上除了一些个别技能,所有技能会被禁用)
飞行单位变身寻找最近地着陆 MorphLandClosest : 为True时,当有单位或可破坏物障碍时会自动寻找最近地着陆;为False时会提示无法登陆.
飞行英雄能给予光环 FlyingHerosBestowAuras : 未发现作用
操纵死尸复活的单位能给予光环 AnimatedUnitsBestowAuras : 以下四项如字面意思理解.
被变形单位能给予光环 PolymorphedUnitsBestowAuras :
钻地单位能给予光环 BurrowedUnitsBestowAuras :
隐形单位能给予光环 InvisibleUnitsBestowAuras :
蛛网属于魔法技能 WebIsMagic : 设置蛛网属于物理或是魔法技能.为True则能对虚无单位施放不能对魔免施放,为False则能对魔免单位施放不能对虚无施放.
诱捕属于魔法技能 EnsnareIsMagic : 设置诱捕属于物理或是魔法技能,同上.
召唤护符使单位聚集 AmuletOfRecallCluster : 以下4项设置使用对应魔法时,被传送单位是保持原来的位置或聚集在一起.
回城卷轴使单位聚集 TownPortalCluster :
群体传送使单位聚集 MassTeleportCluster :
黑暗传送使单位聚集 DarkSummoningCluster :
汲取使用虚无奖励 DrainUsesEtheralBonus : 无效项
汲取可传输生命 DrainTransfersLife : 设置是否可对己方传输生命
汲取可传输魔法 DrainTransfersMana : 设置是否可对己方传输魔法
汲取可获得额外生命值 DrainGivesBounsLife : 设置汲取所得生命能否超出生命上限
汲取可获得额外魔法值 DrainGivesBonusMana : 设置汲取所得魔法能否超出魔法上限
镜像有攻击加成 IllusionsGetAttackBonus : 增加攻击的技能、魔法、光环是否有效,不包括属性加成
镜像有防御加成 IllusionsGetDefenseBonus : 增加防御的技能、魔法、光环是否有效,不包括属性加成
镜像有攻击速度加成 IllusionsGetAttackSpeedBonus : 设置某些增加攻速技能对镜像是否有效
镜像有移动速度加成 IllusionsGetMoveSpeedBonus : 设置某些加快移动技能对镜像是否有效
镜像能回复生命 IllusionsCanRestoreLife : 能否对镜像使用加血技能 治疗守卫 邪恶光环 生命指环等恢复技能,以及镜像是否能吸血.
镜像能回复魔法 IllusionsCanRestoreMana : 与以上类似.
镜像能给予光环 IllusionsBestowAuras : 本体拥有的光环,镜像也能给予周围单位该光环的效果影响
镜像自动施法允许 IllusionsGetAutocast : 如霜冻护甲、心灵之火等自动施放技能是否对镜像自动施放.

附 : (其实很多是属于Bug,Blz的Bug见多了)
耐久光环、毒、霜冻、嗜血术、减速等技能改变攻击移动速度总是有效
速度之靴增加移动速度总是有效
增加属性总是有效,且属性附带的加攻加防加回复速度攻击速度都有效
加生命魔法上限总是有效
详细请参考该贴: http://bbs.uuu9.com/viewthread.php?tid=236583

魔法免疫抵抗吸血 MagicImmunesResistLeech : 设置攻击魔免单位时吸血效果是否有效.
魔法免疫抵抗攻击 MagicImmunesResistDamage : 设置魔法攻击能否攻击魔免单位.
魔法免疫抵抗终极 MagicImmunesResistUltimates : 设置终极技能能否对魔免单位有效.
魔法免疫抵抗荆棘 MagicImmunesResistThorns : 由于反弹并不会对魔免单位造成伤害,所以区别只是是否有反弹效果而已.
能取消神圣护盾 CanDeactivateDivineShield :设置神圣护盾可否取消
能取消乌鸦形态(NYI) : 以下带NYI标记都是无效项
能取消剑刃风暴(NYI)
能取消化学风暴(NYI)
能取消恶魔变身(NYI)
能取消复仇者形态(NYI)
能取消天神下凡(NYI)
能取消战斗号召(NYI)
能取消机器人地精(NYI)
能取消潜水(NYI)
能取消灵肉形态(NYI)
能取消熊形态(NYI)
能取消献祭(NYI)
能取消疾风步(NYI)
能取消石像形态(NYI)
能取消装甲皮肤(NYI)
能取消钻地(NYI)
能取消防御(NYI)
能取消魔力之焰(NYI)
能取消魔法护盾(NYI)

漂浮文字 (奖励、黄金、木材、攻击丢失、暗影突袭、法力燃烧、致命一击)
字体大小 TextHeight : 漂浮文字的大小.
文字颜色 TextColor : 颜色值格式:(A,R,G,B),取值0-255
移动速度 TextVelocity : (X,Y)格式,对应X轴和Y轴方向的移动速度.
持续时间 TextLifetime : 漂浮文字存在的时间.
消逝时间点 TextFadeStart : 漂浮文字开始消退的时间.

物品
物品 - 拾取物品范围 PickupItemRange : 以下都可按字面理解
物品 - 丢弃物品范围 DropItemRange :
物品 - 给予物品范围 GiveItemRange :
物品 - 贩卖物品范围 PawnItemRange :
物品 - 贩卖物品价格 PawnItemRate : 卖出和买入价格的比例,1表示原价.
物品阴影 ItemShadowFile : 设置物品所使用的阴影图像
物品阴影大小 ItemShadowSize : 以(X,Y)形式表示.
物品阴影位移 ItemShadowOffset : 以(X,Y)形式表示,相对于物品所在点的位移,方向为X、Y轴的负方向.

科技树
从属等价物 - 英雄 : 这里定义作为英雄的单位. (当限制玩家所能拥有的英雄数量时,只有这些单位被列入计算)
从属等价物 - 祭坛 : 这里定义作为祭坛的单位.
从属等价物 - 主基地 : 这里定义作为各等级基地的单位.
从属等价物文本 - 英雄 : 未满足科技需求时显示的文本.
从属等价物文本 - 祭坛 : 同上
从属等价物文本 - 主基地 : 同上

移动
单位最大速度 MaxUnitSpeed : 定义单位或是建筑(古树)的最大和最小速度.如果在单位编辑器中设置了最大/最小速度,则以单位编辑器中的数据优先.
单位最小速度 MinUnitSpeed : 同上
建筑最大速度 MaxBldgSpeed : 同上
建筑最小速度 MinBldgSpeed : 同上

维修费
人口设置 UpkeepUsage : 以下3者设置相应人口范围内的维修费率.
黄金维修费 UpkeepGoldTax : 同上
木材维修费 UpkeepLumberTax : 同上

英雄
最大等级 MaxHeroLevel : 略
默认技能跳级 HeroAbilityLevelSkip : 默认每提升技能等级需要的英雄等级增加量.
英雄Exp
详细请参考该贴: http://bbs.uuu9.com/viewthread.php?tid=303960
全球化分布 GlobalExperience : 当EXP取得范围内没有英雄时,是否将经验分配给其他英雄
经验取得范围 HeroExpRange : 以下字面理解
建筑杀死单位给予经验值 BuildingKillsGiveExp : 同上
最高等级英雄消耗经验值 MaxLevelHerosDrainExp : 同上

英雄Exp获取
中立生物经验参数表 HeroFactorXP : 中立生物被杀死后,所获得的经验值需要乘以该参数.由1级开始,未列出的等级都按最后一个数据来计算.
召唤单位经验参数 SummonedKillFactor : 召唤单位被杀死后,所获得的经验值需要乘以该参数
普通 - 列表 GrantNormalXP : 以下为杀死普通单位所得经验参数设置
普通 - 上一个值因数 GrantNormalXPFormulaA :
普通 - 等级因数 GrantNormalXPFormulaB :
普通 - 固定因数 GrantNormalXPFormulaC :
英雄 - 列表 GrantHeroXP : 以下为杀死英雄所得经验参数设置
英雄 - 一个值因数 GrantHeroXPFormulaA :
英雄 - 等级因数 GrantHeroXPFormulaB :
英雄 - 固定因数 GrantHeroXPFormulaC :
附 : 列表项中定义每个等级怪物的附带经验值
列表中未列出项,按以下计算公式计算:
设EXP(N)为N级单位的附带经验值,则
EXP(N)=EXP(N-1)*上一个值因素 + N*等级因素 + 固定因素

等级X奖励因子 XPFactor : 等级X表示基地的等级,后面的数据排列表示拥有N个已定义英雄(等价英雄中定义过的英雄)时的经验加成

英雄Exp需求
列表 NeedHeroXP : 以下为英雄升级到N级所需经验参数设置,计算方法和经验获取一样
上一个值因数 NeedHeroXPFormulaA :
等级因数 NeedHeroXPFormulaB :
固定因数 NeedHeroXPFormulaC :

英雄唤醒/复活 (酒馆的瞬间复活就是唤醒)
生命值因数 : 英雄被唤醒/复活时的生命值百分比.
魔法值因数 : 英雄被唤醒/复活时的魔法值百分比.(当"使用初始魔法值"项为False)
使用初始魔法值 : 英雄被唤醒/复活时是否使用单位编辑器中设置的初始魔法值.
时间因数 : 英雄复活时间 = 英雄建造时间 * 英雄等级 * 时间因数
时间最大因数 : 英雄复活时间 <= 英雄建造时间 * 时间最大因数
时间最大值 : 英雄复活时间 <= 时间最大值
最大黄金/木材因数 : 黄金/木材消费 <= 建造消费 * 最大黄金/木材因数
黄金/木材基础因数 : 黄金/木材消费 = 建造消费*(基础因数+(等级因数*(等级-1)))
黄金/木材等级因数 : 同上
黄金/木材最大值 : 黄金/木材消费 <= 黄金/木材最大值
附 :实际取值为以上各式中的最小值.

英雄属性
每点主属性攻击奖励 StrAttackBonus : 以下字面理解
每点力量生命值奖励 StrHitPointBonus :
每点力量生命回复奖励 StrRegenBonus :
每点敏捷攻击速度奖励 AgiAttackSpeedBonus :
每点敏捷移动速度奖励 AgiMoveBonus :
每点敏捷防御奖励 AgiDefenseBonus :
每点智力魔法值奖励 IntManaBonus :
每点智力魔法回复奖励 IntRegenBonus :
基础防御补正(在敏捷奖励之前) : 英雄本体防御 = 基础防御+防御补正+敏捷加成. 就是说敏捷为0的英雄防御 = 基础防御+防御补正.

衰退时间(秒)
取消 CancelTime : 未发现作用
建筑 StructureDecayTime : 建筑被破坏时残骸保留时间
投射物 BulletDeathTime : 射弹类攻击或魔法(如风暴之锤)击中目标时的动画效果持续时间
效果 EffectDeathTime : 未发现作用
迷雾 FogFlashTime : 被攻击时展现攻击者所在地迷雾的持续时间
英雄消散 DissipateTime : 英雄升天效果持续时间
肉态尸体 DecayTime : 单位死亡后肉态尸体持续时间
骨态尸体 BoneDecayTime : 单位死亡后骨态尸体持续时间

资源交易量
普通点击 TradingincSmall : 设置交易时点击一次增加的资源数量.
Ctrl点击 TradingincLarge : 设置交易时点击一次增加的资源数量(按住Ctrl)

跟随范围
单位 FollowRange : 跟随单位时所保持的距离.
建筑 StructureFollowRange : 未发现作用
物品 FollowItemRange : 捡取物品的检查范围.比如物品栏满的时候去捡取物品就会在该范围处停住.

迷雾展现范围
攻击 FoggedAttackReveakRadius : 单位被视野之外敌人攻击时展现的攻击者所在地范围.
死亡 DyingReveakRadius : 未发现作用

金矿
最大储金量 GoldMineMaxGold : 编辑器中允许设置的金矿最大储金量,不影响触发器的设置.
低含金量 LowGoldAmount : 当含金量小于该值时会提示金矿快采完了.
占据时间 GoldMineOwnDuration : 未发现作用

魔法
冰冻攻击速度降低 FrostAttackSpeedDecrease : 字面理解
冰冻移动速度降低 FrostMoveSpeedDecrease : 同上
虚无状态医疗加成 EtherealhealBonus : 同上
施法范围缓冲 SpellCastRangeBuffer : 由于施法时间的存在,目标可能跑出了施法范围以外,该值表示允许的缓冲范围值,只要目标没跑出该范围(射程+缓冲范围)则施法成立,否则该次施法不成立.
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:27:52 | 显示全部楼层
物品篇

物品

战斗
装甲类型 : 该项只影响被近战单位攻击时的声音效果. 与其它任何东西无关.

技能
技能 : 物品附带的技能,最多4个,超过可以用添加魔法书来做.

文本
名字 : 物品名字
提示工具 - 基础 : 购买物品时的提示文本.
提示工具 - 扩展 : 同上
说明 : 物品说明
热键 : 购买热键


显示
使用模型 : 略
模型缩放 : 设置模型显示大小.
界面图标 : 略
按钮位置(X) : 购买物品时按钮图标的排列坐标.
按钮位置(Y) : 购买物品时按钮图标的排列坐标.
选择圈大小(编辑器) : 编辑器中的选择圈直径, 0表示随模型大小自动调节.
颜色值(红) : 略
颜色值(绿) : 略
颜色值(蓝) : 略


状态
物品分类 : 略
等级 : 物品等级
等级(旧版) : 旧版本的物品等级,可用于触发中创建随机物品的参照对象
生命值 : 略
黄金消耗 : 购买物品所需黄金花费.
木材消耗 : 购买物品所需木材花费.
购买开始时间 : 物品首次到货时间.
购买时间间隔 : 略
最大库存量 : 略
优先权 : 用于对战AI. 物品栏满时,AI会捡取优先权高的物品,丢弃优先权低的物品.
CD间隔组 : 同组的物品将共享CD间隔,即不能连续使用.
无视CD间隔 : 该物品将无视技能CD,可以无限值使用.
有效的物品转换目标 : 使用'AIri'(随机物品)技能转换物品所得到的只能是该项设为True的物品.
主动使用 : 物品可以主动使用.
使用完会消失 : 略
使用次数 : 略
可以丢弃 : 略
可以被抵押 : 是否可以被卖到商店.
可作为随机物品 : 略
可被市场出售 : 只影响对战游戏中市场能否随机出售该物品.
持有者死亡时掉落 : 略
捡取时自动使用 : 如神符和书.

科技树
需求 : 制造物品所需的科技项目,可添加多个.
需求值 : 所需科技项目的等级(科技)或数量(单位),可添加多个,与科技树需求依次对应
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:28:22 | 显示全部楼层
魔法效果篇

魔法效果

声音
声音效果 : 略
声音效果(循环) : 略

文本
名字(编辑器) : 魔法效果的名字,但只在编辑器中使用.
名字 - 编辑器后缀 : 仅在编辑器中显示,一般用于区分同名技能.
工具提示 : 魔法效果的说明文本.
工具提示 - 扩展 : 同上

显示
图标 : 略
效果 - 投射物图像 : 技能投射物效果. 只对有射弹轨迹的技能有效(如风暴之锤、灼热之箭).
效果 - 射弹速度 : 技能投射物飞行速度.
效果 - 射弹弧度 : 射弹弧度 = 技能投射物飞行最大高度/平面位移.
效果 - 射弹自导允许 : 技能投射物可以自动跟踪目标单位.
效果 - 点目标 : 对目标点的效果附加. 只有以点为目标施放技能才有效.
效果 - 点目标附加点 : 无效项
效果 - 目标 : 对目标单位的效果附加. 只有以单位为目标施放技能才有效.
效果 - 目标 - 附加数量 : 对目标单位附加的效果数量. 0表示使用效果默认值.
效果 - 目标附加点 : 对目标单位的效果附加点位置.
效果 - 闪电效果 : 只对闪电链、魔法吸吮之类连通单位之间的技能有效.设置单位之间的连接效果.
效果 - 特殊 : 技能指定作特殊用途的效果. 不是每个技能都有效,而且对各技能的用途都不一样.
效果 - 特殊附加点 : 特殊效果的效果附加点位置.
效果显示需求 : 需要魔法效果设置在该值以上才能显示此效果.

状态
是区域效果 : 是否作为区域效果使用.
种族 : 效果所在种族分类.
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:29:22 | 显示全部楼层
目标附加点解释

(主要骨架附着点)PRIMARY BONES
(胸)chest bone_chest
(足)foot bone_foot unused
(手)hand bone_hand unused
(头)head bone_head
(炮塔?)turret bone_turret
(骨架附着点位置修正)BONE QUALIFIERS
(互生?交替?)alternate alternate
(左)left left unused
(骑马的)mount mount unused
(右)right right unused
(灵巧的?大大的?)smart smart unused

(主要身体部位附着点)PRIMARY LINK POINTS
(胸)chest chest
(双足)feet feet
(足)foot foot
(手)hand hand
(头)head head
(原点?来源?)origin origin
(头顶)overhead overhead
(魂?点?)sprite sprite (for building attachment points)
(武器)weapon weapon

(身体部位附着点位置修正)LINK POINT QUALIFIERS
(互生?交替?)alternate alternate
(左)left left
(骑马的)mount mount
(右)right right
(背后)rear rear
(灵巧的?大大的?)smart smart
(第一?)first first (for building attachment points)
(第二?)second second (for building attachment points)
(第三?)third third (for building attachment points)
(第四?)fourth fourth (for building attachment points)
(第五?)fifth fifth (for building attachment points)
(第六?)sixth sixth (for building attachment points)
(小?)small small (for building attachment points)
(中?)medium medium (for building attachment points)
(大?)large large (for building attachment points)
(金?农民采矿后被上背的金袋?)gold gold
(聚集点?)rally rallypoint (for building attachment points)
(吞噬树木?)eattree eattree
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:34:23 | 显示全部楼层
触发器翻译

Events (事件)
Map Initialization地图最初设定地图一执行启动事件
Destructible Doodad - Destructible Doodad Dies摧毁可破坏的物件 摧毁可破坏对象启动事件
Dialog - Dialog Button Click按下对话按钮按下所设定的对话按钮
Game - Time Of Day游戏时刻藉游戏时刻启动事件
Game - Value Of Real Variable变数Real数值判定判断Real类型变量的数质(大于、小于、等于)
Game - Hero Abilities Button Clicked按下英雄升级技能按钮按下英雄升级钮启动事件
Game - Build Structure Button Clicked按下建造建筑物按钮按下建造建筑钮启动事件
Player - Chat Message游戏者聊天讯息侦测聊天讯息含有某字即通过
Player - Cinematic Skipped跳过电影模式电影模式跳过后即通过(按下ESC键)
Player - Selection Event玩家选择单位选择单位以启动事件
Player - Properties玩家的资源资源的变动以启动事件
Player - Alliance Change(Any)玩家改变同盟 改变同盟以启动事件
Player - Alliance Change(Specific)玩家改变指定同盟项目改变指定同盟项目启动事件
Player - Victory玩家胜利玩家胜利以启动事件
Player - Defeat玩家失败玩家失败以启动事件
Time - Time Elapsed游戏经过时间经过时间以启动事件
Time - Periodic Event游戏循环时间指定几秒中发生一次事件
Time - Timer Expires定时器归零当指定定时器归零时以启动事件
Unit - Specific Unit Event单位动作侦测指定单位做出指定动作即通过
Unit - Player-Owned Unit Event玩家所属单位事件指定游戏者所属单位做出指定动作即通过
Unit - Unit Enters Region单位进入地区单位进入地区以启动事件
Unit - Unit Leaves Region单位离开地区单位离开地区以启动事件
Unit - Unit Within Range单位范围之内接触单位范围内启动事件
Unit - Life单位的生命达到指定单位生命启动事件
Unit - Mana单位的法力达到指定单位法力启动事件


Conditions (限制条件)
Boolean Comparison变数Boolean数值判定 判断指定Boolean是否为True/False
Destructible Comparison可破坏对象判断判断两个可破坏对象是否相等/不相等
Destructible-Type Comparison可破坏对象类型判断判断指定可破坏对象是否属于指定类型
Dialog Button Comparison对话按钮判断判断对话按钮是否等于指定变量
Game Difficulty Comparison游戏难度判断判断游戏难度是否等于/不等于指定难度
Game Speed Comparison游戏速度判断 判断游戏速度等于/不等于指定速度
Hero Skill Comparison英雄技能判断判断学习过的技能等于/不等于指定技能
Integer  Comparison变量判断判断指定数字等于/不等于指定数字
Item Comparison宝物判断指定宝物等于/不等于指定宝物
Item-Type Comparison宝物种类判断指定宝物等于/不等于指定宝物类型
Order Comparison命令判断判断命令等于/不等于指定类型
Player Comparison游戏者判断判断指定游戏者等于/不等于指定游戏者
Player Color Comparison游戏者颜色判断判断指定游戏者颜色等于/不等于指定颜色
Player Controller Comparison游戏者控制判断判断指定游戏者的控制者等于/不等于指定控制者
Player Slot Status Comparison游戏者在线状态判断判断指定游戏者在线状态等于/不等于指定在线状态(离开游戏、在游戏中、没有控制者)
Race Comparison种族判断判断指定游戏者等于/不等于指定种族
Real Comparison变数Real判断判断指定状况的数字是否能通过指定比较式
String Comparison变数String判断判断指定字符串是否等于/不等于指定String变数
Tech-Type Comparison科技判断判断指定科技是否等于/不等于指定科技
Trigger Comparison触发器判断判断前后两个触发器是否相等/不相等
Unit Comparison单位判断判断两个单位是否相等/不相等
Unit-Type Comparison单位类型判断判断指定单位等于/不等于指定单位类型
And Comparison‘还有’判断式出现两个Condition设定,需要满足两个Condition 条件
Or Comparison“或者”判断式出现两个Condition设定,只要满足其一Condition 条件即可


动作
(其它)其它事件和未明确分类的动作项目。等候动作时间、游戏特别效果、设定变量等..
Do Nothing无所事事测试Event与Condition用
Comment批注分隔线,输入批注
Wait等待时间等待指定秒数
Wait For Sound等待时间(音乐拨放后)(秒)在音乐拨放后才开始数秒,若还没拨或已经拨完,则无作用
Variable设定变量设定指定变量为指定数值
Skip Remaining Actions略过剩下的动作跳过此Action以下的Action
If/Then/Else如果/然后/否则若”如果”成立则执行then否则执行Else
如果:Condition然后、否则:Action
For Each Integer A,Do ActionInteger A 数值判断循环判断Integer A数值是否符合指定数字范围
For Each Integer B,Do ActionInteger B 数值判断循环判断Integer B数值是否符合指定数字范围
Ai - Start Melee Ai Script开启对战AI选取指定计算机游戏者所使用的对战AI
Ai - Start Campaign Ai Script开启单人战役AI选取指定计算机游戏者所使用的单人战役AI
Ai - Send Ai Command送出AI命令对指定计算机游戏者发出AI命令
Ai - Ignore Unit Guard Position忽略单位的警戒点让指定计算机玩家忽略指定单位的警戒点,不适用于英雄与工人
Ai - Ignore All Unit Guard Positions忽略所有单位的警戒点让指定计算机玩家忽略所有单位的警戒点,不适用英雄与工人


(能见度)地图可见区域的相关动作设定
Visibility - Enable Fog Of War 能见度 - 显示战争迷雾  显示战争迷雾
Visibility - Disable Fog Of War 能见度 - 移除战争迷雾 移除战争迷雾
Visibility - Enable Black Mask 能见度 - 显示黑色区域 显示黑色区域
Visibility - Disable Black Mask 能见度 - 移除黑色区域 移除黑色区域
Visibility - Create Visibility Modifier Region 能见度 - 显示地图区域(方形显示) 显示地图区域(方形显示
Visibility - Create Visibility Modifier Circle 能见度 - 显示地图区域(圆形显示) 显示地图区域(圆形显示)
Visibility - Enable Visibility Modifier 显示可见区域 显示指定的可见区域
Visibility – Disable Visibility Modifier 不显示指定的可见区域 不显示指定的可见区域
Visibility - Disable Visibility Modifier 能见度 - 移除能见度 移除能见度


Animation - (变化)单位产生不同变化,改变单位小动作,或是实时调整单位的尺寸等等..
Animation - Play Unit Animation 单位变化 - 播放单位动作  拨放指定单位的指定动画
Animation - Play Unit Animation(Specify Rarity) 拨放单位动画(指定动画出现机率)  拨放指定单位的指定动画,并设定动画出现稀有度(常见、稀有)(会被切断)
Animation - Queue Unit Animation 拨放单位动画(完整) 拨放指定单位的动画(不会被切断)
Animation - Reset Unit Animation 回复成普通动画  让指定单位回复成一般动画设定
Animation - Add/Remove Unit Animation Tag 加入/消除单位动画 加入指定动画给指定单位
Animation - Lock Body-Part Facing 锁定单位头部/胸部面向点 指定单位头部/胸部面向某指定单位
Animation - Reset Body-Part Facing 复原单位面向点 复原指定单位的特定面向动作
Animation - Change Unit Size 改变单位大小(原大小百分比) 由左而右依序为改变单位长度/宽度/高度(从单位正面看时)
Animation - Change Unit Vertex Coloring 改变单位着色(百分比) 由左而右依序为改变单位Red/Green/Blue百分比与透明度单位预设:Red:100% Green:100%
Blue:100%
透明度:0%
Animation - Change Unit Animation Speed 改变单位动画拨放速度(原速度百分比) 改变该单位的动画拨放速度
Animation - Change Unit Turn Speed 改变单位移动速度 数值范围0.00-1.00
改变指定单位移动的速度
Animation - Change Unit Blend Time 改变单位转向速度 改变指定单位转向速度 Animation - Change Unit Flying Height 改变飞行高度与速率 改变指定单位的飞行高度与飞行速率
Animation - Play Destructible Doodad Animation 播放可破坏对象动作 拨放指定的可破坏对象指定动画
Animation - Queue Destructible Doodad Animation 拨放可破坏对象动画(完整)  拨放指定可破坏对象的指定动画(不会被切断)
Animation - Play Animation For Doodads In Region 拨放可破坏对象动画(指定区域) 拨放指定可破坏对象种类在指定区域里的指定动画
Animation - Play Animation For Doodads In Circle 拨放可破坏对象动画(指定圆圈内)  拨放指定可破坏对象种类在指定区域(圆形)里的指定动画


Cinematic - (摄影机)(电影)制作以游戏来表现的电影动画,也包括了各种相关画面的动作与特效滤镜
Camera - Apply Camera Object (Timed) 套用/启动摄影机(设定时间) 移动画面到摄影机的对准角度(指定完成时间)
Camera - Pan Camera (Timed) 移动摄影机 移动启动的摄影机到指定区域(指定完成时间)
Camera - Pan Camera With Interpolated Height (Timed) 移动摄影机(指定高度)  移动启动的摄影机到指定区域(可指定高度以避免进入较高的地形中)(指定完成时间)
Camera - Pan Camera As Necessary (Timed) 快速移动摄影机 快速移动启动的摄影机到指定区域(画面快速跳动)
Camera - Set Camera Field (Timed) 设定摄影机视点 改变启动摄影机的视点(上下移动、距离目标距离等)
Camera - Lock Camera Target To Unit 锁定摄影机视野到指定单位  锁定启动摄影机的视点到某单位(跟着单位移动)
Camera - Lock Camera Orientation To Unit 锁定摄影机视点到指定单位 锁定启动摄影机的视点到某单位(转动)
Camera - Stop Camera 结束启动中的摄影机 结束启动中的摄影机
Camera - Reset Game Camera 回复启动中的摄影机  回复启动中的摄影机到一般游戏角度
Camera - Sway Camera Source 摇晃摄影机 摇晃启动中的摄影机之视点位置,指定摇晃强度及速度
Camera - Sway Camera Target 摇晃摄影机 摇晃启动中的摄影机之所在位置,指定摇晃强度及速度
Camera - Stop Swaying Camera 停止摇晃摄影机 停止摇晃摄影机
Camera - Extend/Shrink Camera Bounds 加大/缩小摄影机照射范围 加大/缩小启动中的摄影机之视点范围(东、西、南、北)
Camera - Set Camera Bounds 设定摄影机视点范围 设定启动中摄影机之视点范围(依区域)
Camera - Set Spacebar-Point 设定跳跃地点 设定启动中摄影机若被游戏者按下「空格键」该跳到哪个位置
Cinematic - Transmission From Unit 单位电影对话显示 在电影模式下设定电影发言者与发言内容、音乐、持续时间、等待下个发言与否
Cinematic - Transmission From Unit Type 单位类型电影对话显示 同上,只是指定单位变成在指定区域里的指定单位类型
Cinematic - Cinematic Mode 开/关电影模式 开/关指定游戏者的电影模式
Cinematic - Fade Filter 淡入/淡出滤镜效果 在电影模式设定淡入/淡出滤镜效果
Cinematic - Advanced Filter 进阶配色设定 设定电影的材质、配色、透明度
Cinematic - Show/Hide Filter 使用/停用设定 使用/停用上两项设定
Cinematic - Ping Minimap 标示小地图标示记号 设定标示在小地图上面的绿色光圈记号
Cinematic - Flash SpeechIndicator For Unit 显示闪动标记(单位) 给指定可破坏对象显示闪动标记(红,绿,蓝,透明度)
Cinematic - Flash SpeechIndicator For Destructible 显示闪动标记(可破坏物件) 给指定可破坏对象显示闪动标记(红,绿,蓝,透明度)
Cinematic - Flash Speech Indicator For Item 显示闪动标记(宝物) 给指定宝物显示闪动标记(红,绿,蓝,透明度)
Cinematic - Clear Text Messages  - 清除游戏讯息 清除显示中的讯息
Cinematic - Letterbox Mode On 启动电影模式(指定淡入时间) 开启电影模式(可指定淡入时间)
Cinematic - Letterbox Mode Off 关闭电影模式(指定淡出时间) 关闭电影模式(可指定淡出时间)
Cinematic - Disable User Control 游戏者控制锁定 指定游戏者将无法控制游戏
Cinematic - Enable User Control 允许游戏者控制 指定游戏者将可控制游戏
Cinematic - Enable/Disable Occlusion 开启/关闭透视功能 当视野被阻碍时,选择开启/不开启透视功能


Countdown Timer -(定时器)游戏中实时的定时器、定时器窗口和其它相关设定
Countdown Timer - Start Timer启动定时器开始指定的变量定时器与倒数时间Countdown Timer - Pause Timer暂停定时器停止指定的定时器
Countdown Timer - Create Timer Window创造定时器窗口建造定时器窗口并指定标题
Countdown Timer - Destroy Timer Window移除定时器窗口移除指定的定时器窗口
Countdown Timer - Show/Hide Timer Window显示/隐藏 定时器窗口显示/隐藏指定的定时器窗口
Countdown Timer - Change Timer Window Title改变定时器窗口标题改变指定定时器窗口标题
Countdown Timer - Change Timer Window Title Color改变定时器窗口标题颜色改变指定的定时器窗口之标题颜色(红,绿,蓝,透明度)
Countdown Timer - Change Timer Window Time Color改变定时器窗口时间颜色改变指定的定时器窗口之时间颜色(红,蓝,绿,透明度)


Destructible Doodad -(可破坏物件)可破坏的对象的相关动作设定
Destructible Doodad - Create 创造可破坏对象 在指定的区域建立指定的可破坏对象,并指定面向角度、大小与差异程度
Destructible Doodad - Create(Dead) 创造可破坏对象(以被破坏的) 同上,只不过建立的是已死亡的残骸
Destructible Doodad - Kill 摧毁物件 毁灭指定的可破坏对象
Destructible Doodad - Remove 移除对象 移除指定的可破坏对象
Destructible Doodad - Resurrect 复活物件 复活指定的可破坏对象,指定复活时的HP与是否显示复活动画
Destructible Doodad - Set Life(To Percentage) 改变对象破坏承受值(百分比) 设定可破坏对象的HP(最大HP的百分比)
Destructible Doodad - Set Life(To Value) 改变对象破坏承受值(实数) 设定可破坏对象的HP(实数)
Destructible Doodad - Set Max Life 改变对象最大破坏承受值 设定可破坏对象的最大HP值(实数)
Destructible Doodad - Open/Close/Destroy Gate 打开/关闭/催毁 门类对象 开启/关闭/毁灭指定城门
Destructible Doodad - Make Invulnerable/Vulnerable 可破对象 可损毁/不可损毁 设定可破坏对象为可破坏/不可破坏
Destructible Doodad - Pick Every Destructible Doodad In Region And Do 选取所有可破坏对象并执行动作(正方形区域)  在指定区域里选取所有可破坏对象并做指定Action
Destructible Doodad - Pick Every Destructible Doodad In 选取所有可破坏对象并执行动作(圆形区域)  同上,只不过作用区域为圆形


Environment -(地图环境)进行创造或改变天气、设定浓雾等动作设定
Environment - Create Weather Effecct 创造天气  在指定区域创造天气特效
Environment - Enable/Disable Weather Effect 显示/不显示 天气效果 显示/不显示指定的天气特效
Environment - Remove Weather Effect 移除天气效果  移除指定的天气特效
Environment - Set Sky 设定天空材质 设定天空材质
Environment - Set Fog 设定浓雾 设定雾气(种类,厚度,密度,红,蓝,绿)
Environment - Reset Fog 重设浓雾 恢复预设的无雾状态
Environment - Create/Remove Blight Region 创造/移除 腐地(方形面积) 在指定区域为指定游戏者创造/移除腐地
Environment - Create/Remove Blight Circle 创造/移除 腐地(圆形面积) 同上,区域为圆形


Game -(游戏)游戏进行的相关动作设定
Game - Text Message(Auto-Timed) 显示游戏聊天讯息(自动决定时间) 给指定游戏者显示指定游戏讯息(自动决定时间)
Game - Text Message(Explicitly-Timed) 显示游戏聊天讯息(指定显示时间) 给指定游戏者显示指定游戏讯息(需特别指定显示时间)
Game - Pause Game 暂停游戏  暂停游戏
Game - Unause Game 取消暂停游戏 取消暂停游戏
Game - Set Game Speed 设定游戏速度 设定游戏速度至指定速度
Game - Lock Game Speed 锁定游戏速度 锁定游戏速度使游戏速度无法改变
Game - Unlock Game Speed 解除锁定游戏速度 解除锁定游戏速度使游戏速度可以改变
Game - Set Map Flag 改变游戏设定 解将指定游戏设定开/关
Game - Set Time Of Day 设定游戏时刻 游戏时间为24小时制
Game - Set Time Of Day Speed 设定游戏时刻进行速度 设定游戏内时间经过的速度(原速度百分比)
Game - Turn Day/Night Cycle On/Off 启动/关闭 日夜循环 设定日夜循环是否开启
Game - Share Vision And Full Unit Control 分享同盟视野和单位控制 指定游戏者将可以分享视野与控制权给其同盟
Game - Give Units To Neutral Victim 玩家控制权交给中立国 改变指定游戏者的单位所有权至中立游戏者
Game - Set Next Level 设定下一个进行的地图 设定此地图过关后开启的地图
Game - Victory 游戏获胜 设定指定游戏者胜利,是否开启对话框、是否显示分数
Game - Defeat 游戏失败 设定指定游戏者失败,并输入失败讯息
Game - Set Campaign Screen 设定指定战役 设定此任务为指定单人任务
Game - Enable/Disable Mission 开启/关闭指定任务 开启/关闭单人战役里的任务
Game - Enable/Disable Campapign 开启/关闭战役 开启指定的单人战役
Game - Enable/Disable Cinematic 开启/关闭影片 开启/关闭指定的单人战役影片
Game - Force UI Key 按下指定按键  指定某游戏者按下指定的键
Game - Force UI Cancel 按下取消键  指定某游戏者按下取消键
Game - Preload File 指定读入档案 指定要读入的指定档案
Game - Begin Preloading 开始读入档案 在指定秒数后开始读入
Game - Preload Batch 指定读入多个档案 指定要读入多个指定档案
Game Cache - Create Game Cache 建立游戏纪录 建立游戏纪录,指定文件名
Game Cache - Save Game Cache 储存游戏纪录 储存指定的游戏纪录
Game Cache - Store Unit 储存单位至游戏纪录 在指定游戏纪录里以指定名子储存指定单位在指定卷标里
Game Cache - Store Real 储存Real变量至游戏纪录 在指定游戏纪录里以指定名子储存Real变量在指定卷标里
Game Cache - Store Integer 储存Integer变量至游戏纪录 在指定游戏纪录里以指定名子储存Integer变量在指定卷标里
Game Cache - Store Boolean 储存Boolean变量至游戏纪录 在指定游戏纪录里以指定名子储存Boolean变量在指定卷标里
Game Cache - Restore Unit Facing Angle 加载单位(面向角度) 加载指定卷标里的指定单位名子,并决定拥有游戏者、面向角度与放置区域
Game Cache - Restore Unit Facing Point 加载单位(面向定点) 同上,只不过面向角度改为面向定点


Hero -(英雄)英雄的相关动作设定。新增物品、经验等
Hero - Learn Skill 新增技能 让指定英雄学习指定的英雄技能
Hero - Set Level 设定等级 设定指定英雄的等级
Hero - Set Experience 设定经验 设定指定英雄的累积经验值
Hero - Add Experience 新增经验 增加指定英雄的累积经验值
Hero - Enable/Disable Experience Gain 允许/不允许 继续获得经验 允许/不允许指定单位获得经验值
Hero - Set Experience Rate 设定经验比例  设定指定游戏者拥有的英雄可获得的经验值比率(原经验值比率百分比)
Hero - Revive(Instantly) 复活 让指定英雄立即在指定地点复活
Hero - Give Item To Hero 给予物品到英雄 将指定宝物给予指定英雄
Hero - Create Item For Hero 创造物品给男主角 为指定英雄建立指定的宝物
Hero - Drop Item From Hero 掉落物品 从指定英雄的身上掉下指定宝物
Hero - Drop Item From Hero Inventory Slot 掉落指定字段物品 从指定英雄的身上掉下指定字段的宝物
Hero - Use Item On A Unit 使用物品在单位上 让指定英雄对指定单位使用宝物
Hero - Use Item On A Point 使用物品在上地区 让指定英雄对指定区域使用宝物
Hero - Use Item On A Destructible 使用物品在可破坏物上 让指定英雄对指定可破坏对象使用宝物
Hero - Use Item 使用物品 让英雄使用不需要指定目标的宝物


Item -(物品)物品相关动作设定
Item - Create 创造物品 在指定区域放置指定宝物
Item - Remove 移除物品 移除指定的宝物
Item - Move(Instantly) 搬移物品(立即) 快速的移动指定宝物至指定区域
Item - Set Life 设定物品破坏承受力 设定指定宝物的生命值
Item - Make Invulnerable/Vulnerable 设定 可破坏/不可破坏 设定指定宝物为可破坏/不可破坏
Item - Make Undroppable 设定宝物可否掉落 设定指定宝物在被简起后是否可在丢弃
Item - Make Item Drop From Heroes Upon Death 英雄死亡遗留物品 设定指定宝物在拥有英雄死后是否掉落
Item - Change Owner 改变宝物拥有权 改变指定宝物的拥有权到指定游戏者(改变/不改变颜色)


Leaderboard - (标示窗口)游戏中的标示窗口,用来来配合任务模式用
Leaderboard - Create 创造标示窗口 建立标示窗口,指定显示游戏者,并取标题
Leaderboard - Destroy  移除标示窗口 移除指定的标示窗口
Leaderboard - Sort 标示窗口内容排列顺序 指定标示窗口内容的排列顺序
Leaderboard - Show/Hide 显示/隐藏标示窗口 显示/隐藏指定的标示窗口
Leaderboard - Change Title 改变标示视标题 改变指定的标示窗口标题
Leaderboard - Change Label Colors 改变标示窗口颜色 改变指定标示窗口里的卷标颜色(红,绿,蓝,透明度)
Leaderboard - Change Value Colors 改变标示窗口数值颜色 改变指定标示窗口里的数值颜色(红,绿,蓝,透明度)
Leaderboard - Change Style 改变标示窗口显示设定 改变指定标示窗口的标题、卷标、数值、图像的显示与否
Leaderboard - Add Player 新增游戏者到标示窗口 新增指定的游戏者到标示窗口
Leaderboard - Remove Player 从标示窗口移除游戏者 从标示窗口里移除指定的游戏者
Leaderboard - Change Player Label 从标示窗口里改变游戏者的标签 在指定标示窗口里改变指定游戏者的标签
Leaderboard - Change Player Label Color 从标示窗口里面改变游戏者卷标的颜色 在指定标示窗口里改变指定游戏者的标签颜色(红,绿,蓝,透明度)
Leaderboard - Change Player Value 从标示窗口里改变游戏者的数值 在指定标示窗口里改变指定游戏者的数值
Leaderboard - Change Player Value Color 从标示窗口里改变游戏者数值颜色 在指定标示窗口里改变指定游戏者的数值颜色(红,绿,蓝,透明度)
Leaderboard - Change Player Style 改变游戏者在标示窗口里的显示设定 改变指定游戏者在标示窗口里的显示设定(显示/隐藏卷标、数值或图像


Melee Game - Neutral Building -(多人游戏)(中立建筑)各种多人地图的动作设定和中立建筑的设定。
Melee Game - Use Melee Time Of Day 多人游戏 - 设定多人模式的时间循环 设定死斗模式的时间循环
Melee Game - Hero Limits 多人游戏 - 英雄数量限制 同一位英雄数量限制生产一名
Melee Game - Hero Starting Items 多人游戏 - 英雄起始物品  设定所有游戏者的英雄初始道具为Scroll of Town Portal(传送卷轴)
Melee Game - Set Starting Resources 多人游戏 - 分配游戏预设资源 设定所有游戏者初始资源为多人模式预设资源
Melee Game - Remove Excess Units 多人游戏 - 移除起始点中立生物 移除所有已被启动的游戏者开始点附近的中立怪物、建筑
Melee Game - Create Starting Units 多人游戏 - 创造起始单位 放置所有游戏者的初始单位于所有游戏者的开始点
Melee Game - Run AI 多人游戏 - 执行人工智能 给所有计算机玩家使用多人模式AI
Melee Game - Victory/Defeat Conditions 多人游戏 - 执行胜利/失败条件 启动多人模式的胜利/失败条件
Neutral Building - Add Gold To Gold Mine 中立建筑 - 新增格外黄金数量至地图金矿 增加指定数量黄金到指定金矿(负数为减少)
Neutral Building - Set Resources Of Gold Mine 中立建筑 - 改变金矿黄金数量 设定指定金矿的黄金总量
Neutral Building - Haunt Gold Mine(Instantly) 中立建筑 - 改变矿区为闹鬼金矿 将指定金矿变成指定游戏者的不死族专用金矿
Neutral Building - Enable/Disable Way Gate 中立建筑 - 生效/不生效 传送门功能 允许/不允许指定传送门的使用
Neutral Building - Set Way Gate Destination 中立建筑 - 设定传送门目的地 设定指定传送门到指定地点


Player - Player Group -  (游戏者)(游戏者群)设定调整资源、同盟状况等动作
Player - Set Property 设定资源  改变游戏者的数值(资源等)
Player - Add Property 新增资源 增加黄金等的指定游戏者数值(负数为减少) Player - Turn Player Flag On/Off 改变游戏者的设定  改变指定游戏者的游戏者设定
Player - Set Alliance 设定玩家对立状态 设定敌我状态(同盟、敌对、中立)
Player - Set Aspect Of Alliance 更改同盟状况 改变指定游戏者对指定游戏者之间的同盟设定
Player - Enable/Disable Ability 显示/隐藏技能显示 显示/隐藏指定游戏者的指定技能显示
Player - Set Training/Construction Availability Of Unit 设定玩家允许/不允许生产单位 设定是否限制指定游戏者的指定单位(建筑)类型
Player - Set Current Research Level 设定研究项目等级 设定指定游戏者的指定科技目前研发了几个等级
Player - Set Max Research Level 设定最大研究项目等级 设定游戏者的指定科技最高可研发几个等级
Player - Change Color 改变颜色 改变指定游戏者的颜色,以及是否更改现有单位的颜色
Player - Set Handicap 整体单位生命值(百分比) 加强指定游戏者原生命的百分比
Player - Show/Hide In Score Screen 显示/隐藏 得分画面 在得分表中显示/隐藏指定游戏者
Player Group - Pick Every Player In Player Group And Do Action 游戏者群 - 设定整体动作 选取指定游戏者群内的所有游戏者并执行Action
Player Group - Add Player 游戏者群 -新增游戏者 加入指定游戏者到指定游戏者群变量中
Player Group - Remove Player 游戏者群 -移除游戏者 从指定游戏者群变量中移除游戏者
Player Group - Clear 游戏者群 -清除游戏者群变量 清除指定的游戏者群变量


Quest - (任务目标)制作单人任务的任务对话框的设定
Quest - Quest Message 任务目标讯息 给指定游戏者显示任务讯息
Quest - Create Quest 创造任务目标 建立一个任务目标,设定标题、内容、类型与使用Icon图像
Quest - Destroy Quest 移除任务目标 消除指定的任务目标
Quest - Enable/Disable Quest 显示/不显示 任务目标 显示/隐藏指定的任务
Quest - Mark Quest As Completed 标记任务目标完成 标记指定的任务为完成/未完成
Quest - Mark Quest As Failed 标记任务目标失败 标记指定的任务为失败/未失败
Quest - Mark Quest As Discovered 显示标记任务目标 标记指定的任务为已启动/未启动
Quest - Change Quest Title 改变任务目标标题 改变指定任务的标题
Quest - Change Quest Description 改变任务目标描述 改变指定任务的内容文字Quest - Change Quest Requirement Description 改变主要任务目标描述 在指定任务上建立一个首要任务,并指定内容文字
Quest - Create Defeat Condition 创造任务失败描述 建立一个失败条件,并指定内容文字
Quest - Destroy Defeat Condition 移除任务失败描述 清除指定的失败条件
Quest - Change Defeat Condition 改变任务失败描述 建立一个失败条件,并指定内容文字
Quest - Flash Quest Dialog Button 闪动任务按钮 闪动任务按钮


Selection - (框选)相关框选动作的设定
Selection - Clear 框选 - 清除  取消选取所有单位
Selection - Select Unit Group 框选 - 框选单位群 取消选取所有单位并选取指定的单位群
Selection - Select Unit 框选 -框选单位  取消选取所有单位并选取指定的单位
Selection - Add Unit 框选 - 新增框选单位 从已选取的单位里新增指定单位Selection - Remove Unit 框选 - 移除框选单位 从已选取的单位里移除指定单位


Sound - (声音)地图中所有声音方面相关的动作设定
Sound - Play Sound 播放音效 拨放指定的音效
Sound - Stop Sound 停止音效 以立刻/声音渐小的方式停止指定音效
Sound - Destroy Sound 移除音效 直接移除指定音效;若该音效正在拨放则在结束后移除
Sound - Set Sound Volume 改变音效音量 设定指定音效音量(100%-0%)
Sound - Set Sound Cutoff Distance 声音自动开关距离 设定指定音效自动开关的距离
Sound - Set Sound Pitch 设定声音高低  设定指定音效的高低
Sound - Attach 3D Sound To Unit 附上3D音效于单位  将指定3D音效附于指定单位
Sound - Set 3D Sound Position 调整3D音效于地区  指定3D音效附于指定地点
Sound - Set 3D Sound Distances 调整3D音效于距离  指定3D音效附于指定距离
Sound - Add/Remove 3D Sound Across Region 新增/移除 3D音效于地区  新增/移除指定3D音效于区域
Sound - Use Daytime Ambient Theme 使用白天地形主题背景音效 使用指定地图风格在白天的背景音效
Sound - Use Nighttime Ambient Theme 使用夜晚地形主题背景音效  使用指定地图风格在黑夜的背景音效
Sound - Enable/Disable Dawn And Dusk Sounds 开启/关闭  黎明和夜晚时刻音效 允许/不允许黄昏与背景的音效
Sound - Set Music List (Using A Specific Initial Song) 设定音乐清单(指定拨放特定音乐) 设定音乐清单,特别指定在其它音乐结束后会自动拨放的音乐
Sound - Set Music List (Using A Random Initial Song) 设定音乐清单(随机拨放音乐) 设定音乐清单,随机选定在其它音乐结束后会自动拨放的音乐
Sound - Clear Music List 清除音乐清单 清除后,拨放中的音乐结束后将不会在拨放音乐
Sound - Play Music 播放音乐 拨放指定的音乐
Sound - Play Music Theme 拨放特定的音乐 拨放特定的音乐
Sound - Stop Music Theme 停止拨放特定音乐 停止拨放特定音乐
Sound - Stop Music 停止音乐 停止拨放指定音乐
Sound - Resume Music 回复暂停的音乐 回复之前暂停的音乐
Sound - Set Music Volume 调整音乐音量 设定拨放音乐的音量
Sound - Set Volume Channel 设定音乐音量(指定音乐) 设定指定音乐的音量
Sound - Set All Volume Channels For Cinematics 设定相同音量大小(拨放电影时) 设定在拨放电影时都用相同音量的音乐
Sound - Set All Volume Channels For Speech 设定相同音量大小(电影对话显示时) 设定在电影对话显示时都用相同音量的音乐
Sound - Reset All Volume Channels 回复所有音乐音量 回复所有音乐音量到预设


Trigger - (触发器)触发器动作设定
Trigger - Turn Off 关闭执行后触发器 关闭指定的触发器;现行的触发Action结束后将不会再触发
Trigger - Turn On 启动触发器  开启被关闭的触发器,使其重新启用
Trigger - Run(Checking Conditions) 执行触发器(执行先决条件)  执行指定的触发器,并跳过Events只检查Condition
Trigger - Run(Ignoring Conditions) 执行触发器(略过先决条件)  直接执行指定触发器的Actions,跳过Events与Conditions
Trigger - Add To Trigger Queue 增加触发器到循环触发器清单 增加指定触发器到循环触发器
Trigger - Remove From Trigger Queue 从循环触发器清单移除触发器 从循环触发器清单里移除指定触发器
Trigger - Clear Trigger Queue 清除循环触发器清单 清除循环触发器清单
Trigger - Clear Trigger Queue Of Pending Triggers 清除循环触发器清单(未执行的触发) 清除循环触发器清单,正在执行中的触发器将不会被移除

Unit - Unit Group -  (单位单位群)单位各种相关动作的设定。命令攻击、移动、创造、属性改变等许多动作设定
Unit - Create Unit Facing Angle 创造单位与面向角度 建立指定数量的单位,设定该单位的面向角度
Unit - Create Unit Facing Point 创造单位与面向单位 建立指定数量的单位,并设定该单位面向的定点
Unit - Create Corpse 创造单位尸体 建立指定单位的尸体,指定建立位置与所属游戏者
Unit - Kill 杀死单位 杀死指定的单位
Unit - Remove 移除单位 直接移除单位不留下尸体,英雄将无法复活
Unit - Explode 身体碎开 将指定的单位以身体爆开的方式死亡
Unit - Replace 重设单位 重设单位的种类,许多变量存取的单位在此Action后必须重设
Unit - Hide 隐藏 隐藏指定的单位
Unit - Unhide 解除隐藏 解除隐藏指定的单位
Unit – Change Color 改变单位颜色 改变单位颜色,但不改变所属游戏者
Unit - Change Owner 改变所属玩家 改变指定单位的所属游戏者
Unit - Shared Vision 分享视野 允许/不允许指定游戏者分享指定单位的视野
Unit - Move Unit(Instantly) 搬移单位(立即) 让指定单位立刻移到指定区域
Unit - Move Unit And Face Angle(Instantly) 搬移单位与面向角度 让指定单位立刻移到指定区域,并指定面向角度
Unit - Move Unit And Face Point(Instantly) 搬移单位与面向单位 让指定单位立刻移到指定区域,并指定面向定点
Unit - Set Life(To Percentage) 调整生命值(百分比) 设定单位的现有生命,以最大生命的百分比设定
Unit - Set Mana(To Percentage) 调整法力(百分比) 设定单位的现有法力,以最大生命的百分比设定
Unit - Set Life(To Value)  调整生命值(实数) 设定单位的现有生命,以数字设定
Unit - Set Mana(To Value) 调整法力(实数) 设定单位的现有法力,以实际数设定
Unit - Make Invulnerable/Vulnerable 设定单位 不可攻击/可攻击 设定指定单位为可破坏/无法破坏状态
Unit - Pause/Unpause 暂停/解除 暂停/解除暂停指定单位(单位将停止行动,但会记得当时的命令)
Unit - Pause/Unpause All Unit 暂停/解除 所有单位 暂停/解除暂停所有单位
Unit - Make Unit Explode On Death 设定单位死亡方式 设定指定单位在死亡时是正常死亡或爆开
Unit - SuspendCorpseDecay 暂停持续尸体腐烂 让指定单位的暂停持续尸体腐烂
Unit - Make Unit Sleep 设定单位睡眠 设定单位是否在未被攻击时睡眠,仅适用于中立怪物
Unit - Make Unit Sleep At Night 设定单位夜间睡眠 设定单位是否在晚上、并且未被攻击时睡眠,仅适用于中立怪物
Unit - Wake Up 单位醒来 让指定单位在晚上睡觉时醒来,无法作用于魔法催眠
Unit - Rescue Unit 夺取单位 让指定单位所属于指定游戏者
Unit - Make Rescuable 单位为可捕获/不可捕获 设定指定单位可以为指定游戏者所捕获/不可捕获
Unit - Set Rescue 单位被捕获距离 设定指定单位可被捕获的距离
Unit - Set Rescue Behavior For Units 单位被捕获时颜色变化 设定单位被捕获时颜色的变化(改变颜色或保留原色)
Unit - Set Rescue For Buildings 建筑被捕获时颜色变化 同上,只不过是设定建筑
Unit - Make Unit Face Unit 单位转向于单位 让指定单位面对指定单位
Unit - Make Unit Face Point 单位转向于地区 让指定单位面对指定定点
Unit - Make Unit Face Angle 单位转向于角度  让指定单位面对指定角度
Unit - Set Movement Speed 调整移动速度 设定指定单位的移动速度
Unit - Turn Collision On/Off 设定可否重迭 设定指定单位可否和其它单位重迭
Unit - Set Acquisition Range 单位攻击范围 设定指定单位的攻击范围
Unit - Remove Ability 移除技能 从指定的单位中移除技能
Unit - Issue Order Targeting A Unit 命令单位(对单位) 让指定单位执行目标是单位的命令(攻击、修理等)
Unit - Issue Order Targeting A Point 命令单位(对区域) 让指定单位执行目标是区域的命令(移动、设定集合点等)
Unit - Issue Order Targeting A Destructible 命令单位(对可破坏物件) 让指定单位执行目标是可破坏对象的命令(开采、攻击等)
Unit - Issue Order With No Target 命令单位(无目标) 让指定单位执行无目标的命令(停止、坚守位置等)
Unit - Issue Train/Upgrade Order 命令单位(升级) 让指定单位执行升级的命令
Unit - Issue Research Order 命令建筑研发科技 让指定单位执行研发的命令
Unit - Issue Build Order 命令单位造盖建筑 让指定单位执行建造的命令
Unit Group - Pick Every Unit In Unit Group And Do Action 单位群执行Action 选取指定单位群内的单位并执行Action
Unit Group - Add Unit 新增单位到单位群 新增指定单位到指定单位群
Unit Group - Add Unit Group 新增单位群到单位群 新增指定单位群到指定单位群
Unit Group - Remove Unit 从单位群里移除单位 从单位群里移除单位
Unit Group - Remove Unit Group 从单位群里移除单位群 从指定单位群里移除指定单位群
Unit Group - Clear 清除单位群 清空单位群里的所有单位
Unit Group - Issue Order Targeting A Unit 命令单位群(对单位) 让指定单位群执行目标是单位的命令(攻击、修理等)
Unit Group - Issue Order Targeting A Point 命令单位群(对区域) 让指定单位群执行目标是区域的命令(移动、设定集合点等)
Unit Group - Issue Order Targeting A Destructible 命令单位群(对可破坏物件) 让指定单位群执行目标是可破坏对象的命令(开采、攻击等)
Unit Group - Issue Order With No Target 命令单位群(无目标) 让指定单位群执行无目标的命令(停止、坚守位置等)
Unit Group - Issue Train Order 命令单位群(升级) 让指定单位群执行升级的命令
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:41:32 | 显示全部楼层
本帖最后由 希瓦 于 2012-12-15 22:52 编辑

记忆体漏失


By Danny


一、什麼是记忆体漏失

很多国外的WEer常常把谈Memory Leak(记忆体漏失)掛在嘴边,这是指有些创造出来的物件,已经不会再被用到了,却没有被删掉,因而佔用记忆体空间的情形。
例如:Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing degrees

其中(Center of (Playable map area))就是一个点。可以想成,我要电脑在操场中间產生一个武士,但是电脑不懂什麼叫做地图中间。所以我到操场中间插一个旗子(也就是一个Point),之后我就命令电脑在那个旗子的位置產生一个武士。好了,现在武士產生了,那麼旗子呢?因為我没有删掉它,所以它会一直留在记忆体中。一两个不打紧,但是如果这一类的动作很多,记忆体裡堆了数十万个没有用的东西,跑起来效率自然大打折扣。

同样的情形也发生在其它的物件中。对了,什麼是「物件」?笼\统地说,只要是游戏中一个具体的东东就是物件,除了布林(boolean)、整数(integer)、字串(string)、实数(real)、程式码(code)不是以外,其它类型的变数皆属之 。有些物件像单位、物品是可以看得到的;而有些像计时器、点、单位群组,却是看不见的。有些物件通常并不会大量產生,而且很多都是可重覆利用的,因此并不需要太注意它 们的删除。
当你执行了一些函数,就会產生物件,例如点或单位群组的函数,只要呼叫一次就创造一个点(单位群组)。

最常见堆积记忆体的动作如:

Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing degrees
建立了一个点
Unit Group - Pick every unit in (Units owned by Player 7 (Green) of type Barracks) and do (Unit - Create 1 Footman for Player 7 (Green) at (Position of (Picked unit)) facing Default building facing degrees)
建立了一个单位群组及一个点
Unit Group - Pick every unit in (Last created unit group) and do (Unit - Order (Picked unit) to Attack-Move To (Center of Region 000 ))
建立了一个单位群组及一个点
Special Effect - Create a special effect at (Target point of issued order) using Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl
建立了一个点和一个特效
其中红色和粗字的部分就是建立而没有被删除的物件。

二、记忆体漏失的解决方法(实用篇)

记忆体漏失不是太复杂的一件事,但是概念并不是很容易理解。而且此问题从小到大都有,如果你真的要解决所有的记忆体漏失,那麼你会寸步难行,一行简单的触发都必须被写得复杂百倍。因此这裡先提供最实用的几个技巧,基本上能掌握住这个部分,你的地图已经没什麼大问题了。

重覆利用既有的物件
假设你要製作一张类似DotA或三国无双的地图,像这一类的攻击触发应该是免不了的:
  Unit Attack 1
 Events
  Unit - A unit enters HumanBase1
 Conditions
 Actions
  Unit - Order (Entering unit) to Attack-Move To (Center of DemonBase1 )

但是,每当有一个单位进入了HumanBase1,就要產生一个点(Center of DemonBase1 ),是不是太多餘了?反正点都是同样的位置,何不重覆利用呢?
所以為了环保起见,我们可以改写成这样:
  Map Init
 Events
  Map initialization
 Conditions
 Actions
  Set DemonBase[1] = (Center of DemonBase1 )
  Set DemonBase[2] = (Center of DemonBase2 )
  Set DemonBase[3] = (Center of DemonBase3 )
Unit Attack 1
 Events
  Unit - A unit enters HumanBase1
 Conditions
 Actions
  Unit - Order (Entering unit) to Attack-Move To DemonBase[1]

也就是预先把可以多次利用的物件用变数记录下来,然后直接套用以减少新物件的產生。
删除使用过且不再需要的新建物件

首先介绍删除的方法,有一些要用到JASS:
trigger (Trigger)--Custom script: call DestroyTrigger(xxx)
location (Point)--Custom script: call RemoveLocation(xxx)
group (Unit Group)--Custom script: call DestroyGroup(xxx) ※注意Clear Group是清除单位群组中的单位资料,而不是把整个单位群组删除
force (Player Group)--Custom script: call DestroyForce(xxx) ※注意ForceClear是清除 玩者群组中的玩者资料,而不是把整个玩者群组删除
Unit--死亡的单位於尸体消失之际,系统会自动移除。所以不用特别去管它。像隐藏施法单位这种用后不理的,要删的话可以用GUI的Unit - Remove、Unit - Kill、Unit - Add Expiration Timer,甚至把生命回复设成负值让它自动死亡都可以
Item--被用掉的物品,系统会自动移除。所以不用特别去管它。真的要删的话用GUI的Item - Remove即可
lightning (Lightning)--用GUI的Lightning - Destroy Lightning Effect
effect (Special Effect)--用GUI的Special Effect - Destroy
texttag (Floating Text)--用GUI的Floating Text - Destroy、Floating Text - Change Lifespan皆可。前者是直接删除;后者是设定它的寿命,时间一到会自动被删除
image、ubersplat、quest、……--同样用GUI就能删掉,废话不多话了
删除特效--
创造特效后要移除,只要你没删掉,即使它只出来一下就会消失,看起来好像没了,但是实际上它还是存在,会佔用记忆体的空间。
而建立在单位身上的特效,在单位死亡尸体腐烂后,特效就看不到了,但是和前面一样,只要你没用触发删掉它,它还是会佔用记忆体。
删除的方法就是用Special Effect - Destroy (Last created special effect)。
创造出特效后立刻移除它,特效还是会播放至少一次,所以对於只播一次的特效,顺手删掉它吧。
例如:
  Special Effect - Create a special effect attached to the overhead of (Triggering unit) using Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl
Special Effect - Destroy (Last created special effect)

如果你要让它持续播放一段时间,可以先利用变数存起来,时间到再删掉。
删除触发--把执行一次就用不到的触发删除(关掉(Turn Off)可让它不再执行,但是仍会佔用空间。删除比较一劳永逸)。
方法是在动作的最前面加上Custom script: call DestroyTrigger(GetTriggeringTrigger())。例如:
  Melee Initialization
 Events
  Map initialization
 Conditions
 Actions
  Custom script:  call DestroyTrigger(GetTriggeringTrigger())
  Melee Game - Use melee time of day (for all players)
  Player - Set Player 1 (Red) Current gold to 100000000
  Player - Set Player 1 (Red) Current lumber to 100000000

删除点--
点是最容易產生的垃圾物件,所以特别要注意怎麼删除临时建立的点。除了如之前所述,可以先用变数记录常用的点以外,还有一个简单的方法可以清除这些垃圾。之前的范例我们也可以改用这个方法:
  Unit Attack 1
 Events
  Unit - A unit enters HumanBase1
 Conditions
 Actions
  Set P1 = (Center of DemonBase1 )
  Unit - Order (Entering unit) to Attack-Move To P1
  Custom script:  call RemoveLocation(udg_P1)

简单的说,就是先用变数记录打算要用到的点,对它进行操作,然后删掉它。
特别注意第三行,由於b社会把所有触发编辑器裡定义的变数加上字首udg_,所以这裡要填入udg_P1,而不是P1。

另外像这样的写法常常有人会疏忽:
  Unit - Move (Triggering unit) instantly to ((Position of (Triggering unit)) offset by 500.00 towards (Facing of (Triggering unit)) degrees)

实际上这一行接连產生了两个点,而不是一个。
首先Position of (Triggering unit)就像是在单位的位置插一支旗子,回传之。
后一步的((Position of (Triggering unit)) offset by 500.00 towards (Facing of (Triggering unit)) degrees)就是在那个旗子位移后的位置再插一支旗子,回传之。
所以想把点删乾净就得像这样写:
  Set P1 = (Position of (Triggering unit))
Set P2 = (P1 offset by 500.00 towards (Facing of (Triggering unit)) degrees)
Unit - Move (Triggering unit) instantly to P2
Custom script: call RemoveLocation(udg_P1)
Custom script: call RemoveLocation(udg_P2)


使用这个方法,一个地图裡只需要一、两个像P1、P2这样的临时变数就够了,不必动用大量的变数及阵列。
删除单位群组--
对於单位群组的移除,最简单的方法是用Custom script: set bj_wantDestroyGroup = true。
当Blizzard.j里的Unit Group相关函数执行时会检查bj_wantDestroyGroup, 再决定是否移除传入的Unit Group。
例如:
  Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units owned by Player 1 (Red)) and do (Unit - Kill (Picked unit))

执行到Pick Every Unit In group...动作时,电脑会检查bj_wantDestroyGroup这个变数是否為真,如果為真,就会在进行完动作后,把传入的group(此例中就是(Units owned by Player 1 (Red)))删除掉,并且自动把变数bj_wantDestroyGroup设為假。

但请注意,使用自订变数的Group千万不要乱删,除非你晓得自己在做什麼。例如: Unit Group - Pick every unit in ToTGroup and do (Actions)
 Loop - Actions
  Unit - Remove (Picked unit) from the game
前面千万不要加set bj_wantDestroyGroup = true ,否则那个变数会被砍掉,以后再也不能用来储存单位。

还有Units Of Type使用此用法会有bug,所以也不要对它这样用。

如果你不能放心地使用这个指令,也可以参照删除点的作法。不过同样要记得加上udg_: Set TempGroup = (Units owned by Player 1 (Red))
Unit Group - Pick every unit in TempGroup and do (Unit - Kill (Picked unit))
Custom script:  call DestroyGroup(udg_TempGroup)

不要產生物件
要建立单位於一特定地点,在触发中是Create Units Facing Angle、Create Units Facing Point,对应的JASS函数则是CreateNUnitsAtLoc、CreateNUnitsAtLocFacingLocBJ。但是在JASS中还有像这样的函数可用:
native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit
也就是说,你可以给座标,而不用创造点。
例如:Unit - Create 1 Footman for Player 1 (Red) at (Position Of Triggering Unit) facing Default building facing degrees
用JASS可以改写成:call CreateUnit( Player(0), 'hfoo', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit), bj_UNIT_FACING )
如果你要写一整段的JASS,可以考虑用座标来传送,就可以避免创造不必要的点。


三、记忆体漏失的解决方法(进阶篇)

首先先声明,以下是写给功力高深,动輒落JASS、耍Custom Script、玩区域变数、搞return bug、……的屌人看的。如果你都没用到,甚至连前面写的那几个名词都不懂,那麼这不是你该来的地方,乖乖回去玩你的GUI Trigger吧!

明辨是非篇
有些强者看了这篇教学以后,回去就开始厉行清扫工作,见point砍point、见group杀group……。像这种: Player Group - Pick every player in (All allies of Player 1 (Red)) and do (Player - Add 1000 to (Picked player) Current gold)
他们自然知道要优化成: Set TempForce = (All allies of Player 1 (Red))
Player Group - Pick every player in TempForce and do (Player - Add 1000 to (Picked player) Current gold)
Custom script: call DestroyForce(udg_TempForce)

啥?你不知道?那你显然是只懂第二篇的GUI Trigger player,早说过你不该来这裡了,赶快回去玩GUI吧-o-"
结果你还是看了……好吧,既然要看就把它看完,不准临阵脱逃,嘿嘿!
依此类推: Set TempForce = (All players)
Player Group - Pick every player in TempForce and do (Player - Add 500 to (Picked player) Current gold)
Custom script: call DestroyForce(udg_TempForce)

写完以后就会发现--一切都变得不对劲了!!
為什麼勒?拜託,见鬼杀鬼、见妖斩妖、见魔屠魔,可不要见神也砍神、见佛照灭佛啊XD

传回物件的函数,大致上可分成两种。一种是先建立一个物件再传回;另一种是传回已知物件的记忆体位址。
像All allies of Player 1 (Red)函数是GetPlayersAllies,我们可在blizzard.j中找到它: function GetPlayersAllies takes player whichPlayer returns force
 local force f = CreateForce()
 call ForceEnumAllies(f, whichPlayer, null)
 return f
endfunction

由此可知它先建立了一个force,把传入的玩者的同盟加入,再传回。所以这个函数实际上產生了一个玩者群组,所以该不该杀? 当然该杀!

而All players呢?它的函数是GetPlayersAll,我们也可以在blizzard.j中找到它: function GetPlayersAll takes nothing returns force
 return bj_FORCE_ALL_PLAYERS
endfunction

嘎?怎麼是变数?我们再继续找,费尽千辛万苦,终於在InitBlizzardGlobals下找到这两行: function InitBlizzardGlobals takes nothing returns nothing
 set bj_FORCE_ALL_PLAYERS = CreateForce()
 call ForceEnumPlayers(bj_FORCE_ALL_PLAYERS, null)
endfunction

这样了解了吗?其实B社在地图初始化之时,就先创造了一个叫bj_FORCE_ALL_PLAYERS的玩者群组,并且把所有的玩者加入。所以我们在地图中无论呼叫GetPlayersAll几遍,它都只是传回同样一个玩者群组,而不是先创一个玩者群组再传回。所以当然不能乱杀,不然以后就抓不到了。
啥?你问我要怎麼写?啊就不杀啊,事实上这样写就没错了,很轻鬆愉快,是不是? Player Group - Pick every player in (All players) and do (Player - Add 500 to (Picked player) Current gold)

同样的,像Playable Map Area、Entire Map也是在初始化就建好等著被人随便乱叫的变数函数,以后看到可别乱砍。
而像Triggering Unit、Sold Item、……这种一看就知道是传回一个已存在的单位(物品),而不是先创一个再传回。该怎麼处理不用多说了吧?

所以以后杀人前要先睁大眼睛,亲朋好友不杀、朝廷命官不杀、皇帝宠妃不杀、……咳,扯远了,总之,不确定的话就先查一下blizzard.j和common.j吧。

本手册的触发器中英对照表中已将会造成记忆体问题的函数以红底标示,以区域為例,Initial Camera Bounds没标示,表示它只是传回一个已存在的物件;Region With Offset有标红底,表示它会先建立一个区域再传回,这种最好在用完后就把它删掉。祝屠杀愉快!
要杀乾净篇
大家长大后大概多少会写到像这样的东西,以下是一个技能触发的片段:
Code1: function Ampify_Damage_child takes nothing returns nothing
call SetUnitLifeBJ( GetTriggerUnit(), RMaxBJ(( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) - GetEventDamage() ), 0.50) )
endfunction

function Trig_Ampify_Damage_Actions takes nothing returns nothing
local trigger trg = CreateTrigger()
call TriggerRegisterUnitEvent( trg, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED )
call TriggerAddAction(trg, function Ampify_Damage_child)
call PolledWait(45.0)
call DestroyTrigger(trg)
endfunction

好啦,我承认范例很烂,JASS的范例很难找羊,不要强人所难了XD

回归正题,以上的程式码是否有记忆体漏失的问题?
嗯,乍看之下没有,实际上是有……。基本上它还漏了一个triggeraction。这样写才不会有这个问题:

Code2: function Ampify_Damage_child takes nothing returns nothing
call SetUnitLifeBJ( GetTriggerUnit(), RMaxBJ(( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) - GetEventDamage() ), 0.50) )
endfunction

function Trig_Ampify_Damage_Actions takes nothing returns nothing
local trigger T = CreateTrigger()
local triggeraction A = TriggerAddAction(trg, function Ampify_Damage_child)
call TriggerRegisterUnitEvent( T, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED )
call PolledWait(45.0)
call TriggerRemoveAction(T,A)
call DestroyTrigger(T)
endfunction

所以如果你常常写那种创临时触发来用的JASS,要记得连Action也一起删除喔。
common.j中还有一个TriggerClearActions函数,它是把触发中的动作清空,但是不会真的把动作删掉。
我们可以想成,CreateTrigger建立一个触发传回;TriggerAddAction建立一个触发动作,把它连结到该触发,再传回触发动作。
TriggerRemoveAction把触发动作和它与触发的连结关系删除;TriggerClearActions是把触发中与所有触发动作的连结切断,但是没有把那些触发动作删除。

等等,……action会造成记忆体漏失,那麼类似的event和condition呢?
每一个event都会佔不小的空间并造成leak。不过它就像是附著在trigger中的一部分,所以只要删trigger,event就会一併消失。 然而,如果一个触发摆了上百个event...那也是很佔资源的(trigger佔用量大约為event的1.5倍)。
顺带一提,在触发中註册事件是蛮耗资源的事,跑这一类的函数比跑大多数其它的函数慢得多。
而condition嘛……一般我们在创临时触发的时候都不写condition,把条件直接加在action裡,所以这个问题几乎不用考虑。

事实上和triggercondition相较之下,boolexpr反而比较有可能造成问题。我们通常在建立condition时都是这种格式:
Code3: function Trig_Test_Conditions takes nothing returns boolean
if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction

function Trig_Test_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_Test takes nothing returns nothing
set gg_trg_Test = CreateTrigger( )
call TriggerAddCondition( gg_trg_Test, Condition( function Trig_Test_Conditions ) )
call TriggerAddAction( gg_trg_Test, function Trig_Test_Actions )
endfunction

Condition( function Trig_Test_Conditions )本身就先製造出一个conditionfunc,而TriggerAddCondition又製造一个triggercondition。那麼真要删的话,一定删到头昏眼花。所幸笔者测试conditionfunc和triggercondition的记忆体漏失情形,结果是无法观测(可能没有,可能有但是太小)。所以这部分可以放心。
变数清空篇
我们再来问:上面连triggeraction都删的龟毛函数(code2)还有没有记忆体问题。答案是:有。
我勒!@#$()*&@$%&^!@%#!%#@!&^#@,到底要怎麼改才对?要这样:
  function Ampify_Damage_child takes nothing returns nothing
call SetUnitLifeBJ( GetTriggerUnit(), RMaxBJ(( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) - GetEventDamage() ), 0.50) )
endfunction

function Trig_Ampify_Damage_Actions takes nothing returns nothing
local trigger T = CreateTrigger()
local triggeraction A = TriggerAddAction(trg, function Ampify_Damage_child)
call TriggerRegisterUnitEvent( T, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED )
call PolledWait(45.0)
call TriggerRemoveAction(T,A)
call DestroyTrigger(T)
set T = null
set A = null
endfunction

这个步骤称為变数清空(nullifying)。之所以连这个都要做,是由於B社的程式师偷懒,留下区域变数的bug。
详细原因后面会说明。只有区域变数会造成这个问题,全域变数不会。例如:
  function MyFunc takes nothing returns nothing
local trigger T = CreateTrigger()
call DestroyTrigger(T)
set T = null
endfunction



function MyFunc takes nothing returns nothing
set udg_T = CreateTrigger()
call DestroyTrigger(udg_T)
endfunction
两者同样都不会造成记忆体问题。

此外,这个问题只发生在物件变数,也就是像整数、实数、字串等都不会有问题。譬如以下这个无聊函数,你给电脑跑几十万遍也不会有记忆体问题: function MyFunc takes nothing returns nothing
local string s = "实在太感谢Danny了!"
local integer i = 520
local real r = 5438.49
local boolean IShouldStudyHarder = true
endfunction

事实上和物件没删相比,物件区域变数没清空所造成的影响小非常多(笔者测试大约是1/12左右),更何况使用区域变数的人并没有那麼多。这个问题几乎是小到可以不用考虑,只是既然连物件都很龟毛地删了,最后加个几行清空变数的指令,好人做到底,应该也没什麼大不了吧?



以下提供一个简单的模型解释记忆体的运\作原理与和物件的关系。这个模型只是為了方便说明,未必100%正确(想知道正确理论的请去找B社的程式师);而裡面提供的数据仅作為举例用,未必是确切的数值。电脑方面并非笔者的专业,如果有哪位大大对这方面有更进一步的了解,敬请不吝指教。 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 2 1~20
udg_MyHero unit 1048802 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
(local) target unit 1048809 1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1 81~100
      1048810 0 101~120

这是记忆体内部大致的配置情形,它大约是这样运\作的:

删除物件:假设我们要删除一个点: call RemoveLocation(udg_P1)。电脑会去读udg_P1对到的编号表1048808号,把对应的物件121~125区域清空,并且更新编号表。这是删除后的情形: 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 2 1~20
udg_MyHero unit 1048802 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
(local) target unit 1048809 1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1  
      1048809 1 81~100
      1048810 0 101~120

建立物件:假设我们要建立一个山王。电脑会从记忆体中找一大块可用的位址画给它用,假设是61~80号。然后搜寻变数连结=0且物件位址為空的空间建立物件。这是建立后的情形: 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 2 1~20
udg_MyHero unit 1048802 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
(local) target unit 1048809 1048805 1  
udg_P1 location 1048808 1048806 0 61~80
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1 81~100
      1048810 0 101~120
那个61~80八成就是记录山王的生命啦、魔力啦、技能啦、经验值啦、……等等有的没有的资料。
或许有人会问了:1048805不是没有物件吗?為什麼不建立在这裡? 当然这是為了防止bug,想想為什麼1048805有被变数连结却没有值?也许它之前是连到一个武士,后来那个武士在一场战斗中壮烈牺牲了,系统就很聪明地把它从记忆体中挪走。然后变成一开始那样。但是它仍旧被一个变数udg_FootmanGuard连结,假设我们把山王创造在这个地方,那麼我们会发现,udg_FootmanGuard本来一直是指一个武士,后来武士死了,有一天udg_FootmanGuard突然变成一个山王……这当然不合理,武士死后udg_FootmanGuard理所当然要一直指向空的物件才行。所以只要有被变数连结,那个位置就不能被使用,即使它是空的。
修改变数:假设我们修改变数: set udg_MyHero = udg_Paladin。电脑会把udg_MyHero重新连到1048007号,并且修改编号表中的变数连结个数: 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 1 1~20
udg_MyHero unit 1048807 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
(local) target unit 1048809 1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 2 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1 81~100
      1048810 0 101~120

清空变数:假设我们清空变数: set udg_MyHero = null。电脑会把udg_MyHero连到空号(可能是0),并且修改编号表中的变数连结个数: 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 1 1~20
udg_MyHero unit 0 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
(local) target unit 1048809 1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1 81~100
      1048810 0 101~120

删除区域变数:最后是我们的重点,假设我们的某个函数(其中有一个区域变数target)执行到endfunction,此时target会被清除。电脑会把target这个变数清掉, 此时1048809的变数连结理当被改成0,但是它并不会(应该是一个bug): 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 2 1~20
udg_MyHero unit 1048802 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
      1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1 81~100
      1048810 0 101~120


现在,假设我们执行call RemoveUnit(target)以后离开函数,结果变成: 变数 编号表
名称 类型 内容(物件编号) 编号 变数连结 物件位址
udg_Archmage unit 1048802 1048801 0 21~25
udg_Paladin unit 1048807 1048802 2 1~20
udg_MyHero unit 1048802 1048803 1 31~40
udg_GameTimer timer 1048803 1048804 0 26~30
      1048805 1  
udg_P1 location 1048808 1048806 0  
udg_P2 location 1048805 1048807 1 41~60
udg_FootmanGuard unit 1048805 1048808 1 121~125
      1048809 1  
      1048810 0 101~120



显然这时候1048809的位置早该被清空等著其它的物件放,可是却由於这个bug,导致这个空间不能再被使用。 所以我们只好在区域变数被系统自动删除前,手动把它的内容清空,使它对应的编号表的变数连结被扣掉。如果没有这样做,久而久之,就有一大堆空间被佔据住不能使用,就成了 记忆体漏失。

最后再重申一次,这个模型和裡面写的数字纯粹作為举例用,一个location未必只佔用5个位址;物件也未必是从0开始往上编;编号表也不一定是从1048801开始。
还没清完篇
看完上一篇大家感想如何?嗯……以后写JASS,最后面记得加个几行清空的指令吧(谁叫你就是爱用区域变数?)。
不过这个才是真的麻烦: function bird takes unit whichUnit returns location
local location loc = GetUnitLoc(whichUnit)
//这裡有一段不足為外人道,惨不忍赌,血泪纵横的运\算...
return loc
endfunction

当然我们知道要把区域变数loc清空,问题是清空了怎麼回传loc?

这时候只好祭出我们的大神--return bug来了,请看: function H2I takes handle h returns integer
return h
return 0
endfunction

function bird takes unit whichUnit returns location
local location loc = GetUnitLoc(whichUnit)
local integer li
//这裡有一段不足為外人道,惨不忍赌,血泪纵横的运\算...
set li = H2I(loc)
set loc = null
return li
return null
endfunction

这时候一定有高手会问啦:
ㄟ,你根本在乱写嘛!那个H2I函数不是要传入handle吗?怎麼传入location?那个H2I函数不是要传回整数吗?怎麼传回点?那个鸟(bird)函数明明要传回点,你怎麼传回整数?

关於第一个问题,如果你会问建议你重新阅读一遍JASS教学。因為location是handle的子类型,所以当然也算是handle,当然可以传入。

至於后面两个问题……没错,正常来说你的世界编辑会一如往常地冒出一段废话要你赶快修正,不过这次没有,所以它叫做回传错误(return bug)。
这个错误是由於世界编辑器在检查函数的回传时,会从最下面(endfunction那行)往上查,只要查到一个正确的return就停了,不会再管上面有没有错误的return。
譬如H2I函数,WE只检查return 0是正确的就通过,根本不管上面有个错误的return h

那麼我使用这个回传错误干麻呢?它的用途可广了,你可以用这个函数随便地把单位变成物品、把物品变成触发、把触发变成整数、把整数转成点、……。简单地说,可以做到物件间以及物件和整数间的自由转换。物件间的转换没有问题,可是物件转成整数怎麼转呢?它会把物件在记忆体内部的编号传出来,换句话说,每一个物件会传回一个唯一的整数,就像身分证字号一样。同样地,只要把记忆体内码(整数)输入,就可以回传出对应的物件。这个bug主要用在物件和整数间的自由转换,想也知道,如果你把单位当成物品交给电脑去设它的物品数,显然十之八九会出问题,轻则没效,重则当掉。把物件和字串互转会当机,至於布林和实数笔者没试过, 有兴趣的读者可自行测试,不过那似乎没有什麼实际的用途。

我们先解决这个问题,首先我们定义区域变数loc,然后进行一段操作,接著把loc的内部编码存到整数变数li,接著把loc变数清空,然后回传li,li当然会自动变成对应在记忆体内的点,最后,li是整数变数,所以不会有变数未清空的问题。所以,OK!圆满解决!收工!

附带一提,这个return bug转换配合游戏暂存(Game Cache)可以允许你製作无限多的Custom Value。
我们只要先定义一些转换用函数: function H2I takes handle h returns integer
return h
return 0
endfunction

function I2U takes integer i returns unit
return i
return 0
endfunction

function I2T takes integer i returns trigger
return i
return 0
endfunction

function I2Ti takes integer i returns timer
return i
return 0
endfunction

...

(為什麼不用一个I2H代替全部?……ㄟ,儿子可以代替老子,老子可不能代替儿子啊!如果一个函数takes handle,你可以传unit进去;可是一个函数如果takes unit,你就不能放handle进去,谁知道你的handle不会是trigger或者其它类型的东西)

我们可以把一个单位转成整数再转成字串当做资料夹名,随便取个档名如"UnitLifeTrigger",然后把单位对应的触发转成整数存进去。再用类似的方法读取之。

换句话说,我们可以随便地在物件之间做连结,有一个就能找出其它个,这对於製作多重施法的触发技能是非常好用的功能 。不过当然,游戏暂存的存取速度,相较於一般正统的变数或者内建的Custom Value為慢。至於return bug怎麼应用,笔者也没办法教太多,请自行上国外论坛深造。

既然这是个BUG,以后要是有一天B社改版把它修正了怎麼办?别担心,大概是这个bug太有用了,B社之前公开说明:「魔兽争霸III的世界编辑器日后永远不会修正return bug」。因此,放手去做吧!
笔者废话篇
看完以后有没有觉得世界末日到了?点、单位群组、触发要删不打紧,连触发的动作还要另外删,定区域变数还要清空,如果要回传甚至还得扯上return bug……
不过大家大可不必那麼担心,还记得我们解决记忆体漏失的目的吗--减少游戏lag和减少跳出的延迟(后者是我自己偷加的XD)。

不要看前面说得那麼可怕,那些高频率的执行对电脑而言只是小事一桩,倒是魔兽各方面的运\算,3D贴图的计算等等反而更耗用资源。小问题累积很久才可能变成大问题,而我们通常在发生大问题还没发生以前就结束游戏了。以点的累积来说,大约10~30万以上会感觉到明显的跳出延迟,再更多才会造成游戏中的lag。区域变数没清空造成的记忆体漏失与此相比之下更加微不足道(大约是触发影响力的1/12左右)。而触发动作(triggeraction)虽然严重程度和点差不多,可是它实在是非常非常非常非常不好删,所以除非你太常用临时触发,问题严重,否则还是可以当做没看到。

以B社的官方地图為例,它们其实也只做到删除点、单位群组、特效与漂浮文字,大致上用到的是本文「实用篇」的方式。其它像触发、触发动作、变数清空等,B社根本没有在管。B社提供的blizzard.j函数中用的区域变数(虽然用到的不多)也没有做到变数清空。然而大家玩B社出的地图会很不顺吗?

记住,我们左删右删的最终目的是增加游戏的顺畅度。一条触发或函数,除非解决记忆体漏失不会太麻烦,或者它的使用频率实在太高,漏洞很严重,才有必要去处理;否则都可以不理它。很多老外天天在写JASS,常把memory leak掛在嘴边,不过它们主要是為了严谨性的考量,不希望有人使用了他们的函数或系统后出现lag等症状,所以对此方面的要求较高。 笔者建议像点、单位群组、特效最好都删掉;而像triggeraction和需要用到return bug来清空变数的麻烦事就免了;其它的……自行判断。

总之我们製作地图,只要跑起来顺就好了,记忆体漏失把主要的做好即可,次要的、不重要的就可以马虎一点,不 必把时间浪费在不重要的事情上。(谜:那你写这一串废话不是也在浪费时间吗? 我:……………………)

最后,总结一下重点:

要搞清楚什麼可以删,什麼不能删。千万别把重要的公用物件变数删除了。
除了trigger以外,event和triggeraction也会造成leak。此外,註册event比起大多数的函数更耗资源,执行更慢
如果有使用handle类的区域变数,还要再做变数清空(nullify)的动作才能完全清除。如果有困难可利用return bug解决。区域变数未清空造成的leak不太严重,如果嫌麻烦可以忽略。
return是一个被JASS高手广泛研究的工具,有兴趣可多爬文研究
回复

使用道具 举报

 楼主| 发表于 2010-2-26 17:55:33 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-2-26 18:10:00 | 显示全部楼层
GA等级详解

真实Lv 级别 命题真值 积分区间
0 这是个负数级别 T (-∞,-100)
0 其他任意级别的整数倍 T [-100,0)
1 现在不是Lv2 T [0,200)
2 下一级是单数Lv T [200,500)
3 上一级绝对不是Lv3 T [500,900)
4 下级比上级是现在的2倍 F [900,1400)
5 上一级是在说谎 T [1400,2000)
6 除了我,有三个级别在说谎 F [2000,2700)
7 这里不是GA F [2700,3500)
8 上上级没说谎 F [3500,4400)
9 不存在下一级 F [4400,5400)
10 不存在的级别 F [5400,∞)
??? * ? ∞?
回复

使用道具 举报

 楼主| 发表于 2010-2-26 18:11:30 | 显示全部楼层
这是水
回复

使用道具 举报

 楼主| 发表于 2010-2-26 18:16:32 | 显示全部楼层
版权说明 (C)

本帖版权归 主要归 RedWolf  以及众位大神所有
本人只是进行转载和整理(因为发现好像老狼只是在博客上发的,GA没有)
所以,对他们的劳动成果表示由衷的敬佩

发布在此,只是为了方便大家观看,所以不用加分了,路过的人们请注意。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-19 07:57 , Processed in 0.048703 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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