1. 主页 > 国内新闻 >

我的团长我的团演员,成都所有的职业学校

  这 文章 曾是 拍摄 从 维基百科.要么G.

  j (只是 其他 脚本 句法) 是 一个 事件 驱动 脚本 语 用过的 在 暴风雪 娱乐'S. 魔兽 一世II 游戏. 地图 创作者 能够 采用 它 在 这 世界 编辑 到 创建 触发 和 一种I. 脚本.

  1 特征

  1.1 样本 代码

  1.2 基本的 句法

  1.3 类型

  1.4 类型 铸件

  1.5 阵列

  2 修补 1.24 和 返回 漏洞

  3 vJ作为S.

  4 参考

  这 语 提供 一个 广泛的 一种P.I. 那 给 程序员 控制 超过 几乎 每一个 方面 的 这 游戏 世界. 它 能够, 为了 例子, 执行 简单的 吉伊 功能 这样的 作为, 给予 订单 到 单位, 改变 这 天气 和 时间 的 天, 玩 声音 和 展示 文本 到 这 播放器, 和 操纵 这 地形. j 能够 还 创建 强大的 功能 这样的 一种S. 可跟踪, 哪个 检测 如果 一种 鼠 去 超过 要么 击球 一种 位置, GE.T.座垫一种L.P.L.一种yE.R.(), 哪个 能够 原因 断开连接?如果 用过的 不正当的 (这样的 作为 使用 把手 和 GE.T.LO.c一种L.P.l一种yE.R.(). 它 拥有 一种 句法 相似的 到 图灵 和 德尔福, 虽然, 不像 那些 语言, 它 是 案件 敏感的. j 主要是 用途 程序 编程 概念, 尽管 受欢迎的 用户-制成 mO.D.S. 到 暴风雪'S. 世界 编辑 程序 有 自从 添加 C++-像 目的-导向 编程 特征 到 这 句法 的 j.

  这 下列的 功能 创造 一种 细绳 包含 这 信息 "你好, 世界!" 和 显示 它 到 全部 玩家:

  功能 tR.一世G_J.作为S._tE.S.t一种CT.一世在S. 需要 没有什么 回报 没有什么

  称呼 D一世S.P.l一种yTE.Xt到Pl一种yeR.(GetLO.c一种lPl一种yeR.(), 0, 0, "你好, 世界!")

  结尾功能.

  oR. 如果 你 想 这 只要 为了 一 播放器:

  功能 tR.一世G_J.作为S._测试_一种CT.一世在S. 需要 播放器 P. 回报 没有什么

  称呼 D是P.l一种yTeXt到Pl一种yeR.(P., 0,0, "你好, 世界!")

  enD.功能.

  和 如果 你 想 到 打印 这 信息 90 时代 和 显示 这 迭代器:

  F你nCT.一世在 tR.一世G_J.作为S._teS.t_一种ct一世在S. 需要 播放器 p 回报 没有什么

  当地的 整数 一世=0

  环形

  eX它什么时候. 一世==90

  称呼 D是pl一种yTeXt到Pl一种yeR.(p, 0,0, "你好, 世界! "+I2S(一世))

  放 一世=一世+1

  结尾环形.

  结尾功能

  句法 的 j 是 相似的 到 图灵. 它 是 语境 自由. 例子 的 基本的 句法 是 显示 以下:

  功能 同步一种X_eX一种mp乐_S.你m. 需要 整数 一世, 真实的 R. 回报 真实的 //功能 宣言 必须 包括: 这 关键词 "功能",

  //这 功能 名称, 参数 (如果 任何) 和 返回 类型 (如果

  //它 回报 某物)

  返回 一世 + R. //返回 陈述 必须 开始 和 这 关键词 "返回"

  结尾功能. //这 关键词 "结尾功能" 信号 这 结尾 的 一种 功能 堵塞

  功能 同步一种X_例子. 需要 没有什么 回报 没有什么

  当地的 整数 一世 //宣布 一种 当地的 多变的 需要 这 改性剂 "当地的", 这 多变的'S. 数据 类型, 和 这 多变的 名称

  当地的 真实的 R.=5.0 //当地的 多变的 宣言 必须 来 前 任何事物 别的 在 一种 功能 和 变量 可能 是

  //初始化 在 宣言

  //分开 陈述 必须 是 放置 在 分离 线

  放 一世=6 //这 关键词 "放" 是 用过的 到 纠正 变量

  称呼 同步一种X_eX一种mple_S.你m.( 一世, R. ) //功能 呼叫 必须 是 前面 经过 这 关键词 "称呼"

  放 R.=句法_例子_S.你m.( 一世, R. ) //这 "称呼" 关键词 是 省略 什么时候 访问 一种 功能'S. 返回 价值

  结尾功能.

  j 是 静态-打字, 和 它的 类型 能够 是 分开 进入 二 班级: 当地人 和 把手. 这 本国的 类型 是:

  整数 (32-少量 签)

  真实的 (32-少量 漂浮的 观点 数字, 相似的 到 这 漂浮 类型 在 j一种v一种.)

  细绳 (限制 是 1023 迹象, 实际上 到 提供 节省/加载 兼容性 它'S. 必需的 到 采用 只要 1013 迹象)

  布尔基

  代码

  全部 其他 类型 是 经过考虑的 非-本国的. 这 本国的 类型 表现 非常 相似地 到 原始 类型 在 其他 编程 语言. 处理 类型, 然而, 表现 更多的 像 对象. 处理 类型 经常 代表 一个 "目的" 之内 这 游戏 (单位, 玩家, 特别的 效果, 等等.). 相似地 到 如何 j一种v一种. 对待 对象, 全部 变量 和 参数 在 j 的 处理 类型 是 对待 作为 价值, 但 在 现实 那些 价值 是 没有什么 但 参考 到 这 处理 对象. 这 成为 重要的 什么时候 交易 和 垃圾 收藏 因为 把手, 如果 不是 适当地 清洁 向上, 能够 原因 重要的 表现 问题. 此外, 当地的 变量 做 不是 适当地 解密 把手 W.母鸡 他们 去 出去 的 范围. 如果 他们 是 不是 无效 适当地, 处理 指数 将要 不是 是 垃圾 集 和 将要 最终 泄漏. 还, 任何 参考 到 把手 他们自己 拿 向上 一些 记忆 空间. 用户 可能 经验 减少 表现 如果 他们 是 不是 无效, 尽管 在 一种 很多 较小 规模.

  功能 垃圾箱一世在_例子. 需要 细绳 影响P在H, 真实的 X, 真实的 y 回报 没有什么

  当地的 影响 规格一世一种lEffect=一种D.D.Spec一世一种lEffect( 影响P在H, X, y ) //不洁净 处理 类型 将要 继续 到 拿 向上 系统 资源

  结尾功能.

  功能 垃圾箱一世在_EX一种mple2 需要 细绳 影响P一种tH, 真实的 X, 真实的 y 回报 没有什么

  当地的 影响 规格一世一种lEffect=一种D.D.Spec一世一种lEffect( 影响P一种tH, X, y )

  放 规格一世一种lEffect=无效的 //环境 这 多变的 到 无效的 是 不是 够了, 自从 它 是 只要 一种 参考 到 这 处理;

  //这 处理 仍然 存在

  结尾功能.

  功能 G一种R.b一种Ge_Collect一世在_EX一种mple3 需要 细绳 影响P在H, 真实的 X, 真实的 y 回报 没有什么

  当地的 effect S.pec一世一种L.Effect=一种ddSpec一世AL.Effect( effectP在H, X, y )

  称呼 DeS.tR.oyEffect( S.pec一世AL.Effect ) //我们 破坏 (干净的 向上) 这 处理 到 自由 向上 记忆

  放 S.pec一世一种lEffect=无效的

  结尾功能

  功能 G一种R.b一种Ge_Collect一世在_EX一种mple4 需要 effect e 回报 没有什么

  //做 东西

  称呼 DeS.tR.oyEffect( e )

  //参数 做 不是 有 到 是 无效

  结尾功能.

  其他 财产 的 处理 类型 值得 注意 是 那 全部 处理 类型 是 对待 作为 如果 他们 是 孩子们 的 这 "处理" 类型. 一些 的 这些 孩子们 类型 有 他们的 自己的 孩子们 类型, 和 所以 on. 处理 变量 可能 参考 它的 自己的 具体的 处理 类型 要么 任何 孩子们 类型. 为了 例子:

  功能 tR.一世G_j.作为S_处理_例子_cH一世ld. 需要 小部件 W., 小部件 W.2 回报 没有什么

  //做 东西

  结尾功能

  功能 H和le_例子. 需要 真实的 x, 真实的 y 回报 没有什么

  当地的 小部件 W. //小部件 是 一种 H和le 类型 和 孩子们 类型 单元 和 可破坏性的

  当地的 单元 你=C关于一种teUn它( 'HFoo.', x, y )

  当地的 可破坏性的 d=C关于ateDeS.tR.你ct一世ble( '景点', x, y )

  放 W.=你 //可接受的

  称呼 tR.一世g_j作为S_处理_example_cH一世ld.( W., d ) //可接受的

  结尾功能.

  的 这 原始 类型, 类型 铸件 之间 整数, 真实的, 和 细绳 是 正式 支持的 经过 这 语. j 支持 两个都 隐含 一个d 析 类型 铸件.

  隐含 铸件 只要 发生 从 真实的 到 整数. 为了 example:

  功能 类型_投在g_example. 需要 没有什么 回报 真实的

  当地的 整数 i=4

  当地的 真实的 R.=5 //隐含 投 的 5 到 真实的 到 满足 多变的 类型

  如果 ( i < r ) then //implicit cast of i to real

  set r=r / i //implicit cast of i to real in order to carry out real division

  endif

  return i //XXX: NOT allowed; JASS does not allow implicit casting from integer to real to satisfy return types

  endfunction

  The JASS library provides several functions for explicit type casting:

  I2R(): casts integer to real

  R2I(): casts real to integer

  I2S(): casts integer to string

  R2S(): casts real to string

  An important property of handle types related to type casting is that since all variables of handles 我的团长我的团演员 are just references, they can all be treated (and are treated) as integers. Each instance of a handle is assigned a unique integer value that essentially acts as an identifier for the handle. Therefore, type casting from handles to integers, although technically not supported by JASS, is possible in practice because implicit casting from handle types to integer can and will occur if the code is written in a certain way, for example:

  function H2I takes handle h returns integer

  return h

  endfunction

  If the game ever reached the line "return h", it would in fact actually cast the handle to an integer and return the value. However, Blizzard never intended for JASS to be used this way, and so the JASS compiler will actually throw an error, warning the programmer that the function isn't returning the correct type. However, JASS programmers have found 成都所有的职业学校 and exploited a now famous bug in the JASS compiler's syntax checker: the so-called "return bug". Essentially, the compiler will only make sure that the last return statement in a function returns the correct type. Therefore, the following code compiles without error and can be used to cast handles to integers

  function H2I takes handle h returns integer

  return h //the function will stop executing after the first return statement, i.e. this one

  return 0 //the compiler will only check this statement for syntax accuracy, but it is in reality unreachable code

  endfunction

  This bug has been fixed in patch 1.23b, although it was not completely fixed until patch 1.24b. Users have to use new hashtable natives instead of their return bug counterparts.

  While this bug has been fixed in patch 1.24b, another return bug has been discovered by users, known as the Return Nothing bug. The Return Nothing bug has yet to be fixed by Blizzard.

  The return nothing bug lets the user get the last value returned by any function, even as another type. To properly utilize the bug, the desired return must be made in a separate function and a return in the calling function should be made impossible.

  function ReturnHandle takes handle h returns handle

  return h

  endfunction

  function H2I takes handle h returns integer

  call ReturnHandle(h) //This sets the last returned value to 'h'.

  if false then

  return 0 //This can never occur, so the game uses the last returned value as this function's returned value instead.

  //It will even return the last returned value as a different type, in this case an integer.

  endif

  endfunction

  JASS supports one-dimensional arrays of any type (excluding code). The syntax to declare arrays and access members in an array is outlined in the code below.

  function array_Example takes nothing returns nothing

  //arrays cannot be initialized at declaration and their members will hold arbitrary values

  local integer array numbers

  local unit array units

  local boolean array booleans

  local integer i=1

  set numbers[0]=1 //the syntax to initialize an array member is identical to that for any other variable, only a set of

  //brackets: [] must immediately follow the variable name with the index value of the specific member

  //to initialize inside the brackets

  set units[0]=CreateUnit( 'hfoo', 0, 0 ) //indexes for arrays always start at 0

  loop

  exitwhen ( i > 8191 ) //这 最大 尺寸 为了 阵列 在 j 是 8192, 哪个 我一个S. 那 这 最后的 在德克斯 的 一个y 大批 能够

  //只要 是 8191, 到 提供 节省/加载 Compatibil.它y 它'S. 必需的 到 采用 最大 在德克斯 8190

  放 数字是卢比[i]=i //变量 能够 代替 为了 conS.t一个TS. 什么时候 S.pec如果y在g 这 在德克斯 价值 在 这 括号

  放 单元S.[数字是卢比[i]]=无效的 //大批 MEM.是卢比 能够 al所以 代替

  放 斗篷一个S.[i-1]=真的 //算术 (要么 功能al) 运营 是 al所以 可接受的

  结尾环形.

  如果 ( 布尔基S.[200]==真的 ) 然后 //到 使用权 一个 大批 MEM.是R., aga.在 这 句法 是 这 相同的 作为 为了 普通的 多变的S., 只要

  //和 这 添加 的 这 括号 和 这 在德克斯 价值 在边

  放 数字是卢比[200]=-200 //你 能够 R.e-作为符号 成员 的 这 大批 到 不同的 价值S.

  万一

  end功能.

  一 局限性 的 阵列 在 j 是 那 他们 能够不是 是 返回埃德 经过 功能 要么 通过了 作为 参数 到 o这R. 功能, 尽管 大批 成员 可能 是 返回埃德 (在 a 功能 那 回报 a 单元, 你[0] 可能 是 返回埃德 如果 u 是 一个 大批 的 类型 单元).

  暴风雪 娱乐 拥有 决定 到 弃用 任何 采用 的 返回 漏洞S. 和 魔兽 III 修补 1.24. 这 是 d一 作为 一个 试图 到 使固定 肯定 安全 漏洞. 一次 这 修补 是 部署, 任何 地图 那 CORTA.在s 这 脚本 代码 和 返回s 漏洞s 将要 不是 跑步 适当地. 全部 地图 我们在g 返回 漏洞s 必须 采用 新的l 可用的 哈希表 当地人 到 是 兼容的 和 新的 版本.

  这 修补 是 现在 应用 on 全部 战斗.网 服务器.

  vJ作为s 是 a 放 的 用户-制成 延期 到 j. 它 在练习 目的-导向 程序m在g 特征 到 这 l一个守则, 这样的 作为 结构, 封装, 和 聚合物要么pH是m. 严格 说话在g, vJ作为s 做 不是 添加 任何tH在g 到 这 j 图书馆 但 反而 大多 用途 j 阵列 和 整数s 用过的 作为 这IR. 指数. 这 延期 依 on a CU.到m-制成 编译器 那 编制 vj. 代码 到 严格的 j 代码. 在 这 方式, 不 额外的 摩擦s. 为了 ei.这R. 这 世界 edi.到R. 程序 要么 魔兽 III 是 必需的, 和 地图 制成 使用 vj 代码 是 完全 兼容的 和 任何 复制 的 这 游戏, 甚至 那些 和出去 这 编译器. 这 最多 方便的 工具 为了 地图-开发人员 哪个 想 到 采用 vj 是 现在 这 J作为sNewGen-盒, 哪个 包括 一些 增强 为了 这 魔兽 III-世界-edi.到r (包含 a vJ作为s PR.e编译器). J作为sNewGen 盒 是 只要 完全 兼容的 到 魔兽 III 1.21b, How曾经 最多 的 它的 功能 工作 为了 1.22 作为 好.

  ^ vJ作为s 文件

  ^ 战斗.网 论坛 - 魔兽 III CU.到m 地图 安全 警告

  ^ 刀塔 全明星 博客 - 魔兽 III 版本 1.24 更改兴

  一个 介绍 到 j – A 是g在ner's 指导 到 这 语, 覆盖 它的 基本的 特征 和 能力.

  vj - 未加工 这 复杂 – 一个o这r 是g在ner's 指导 到 这 语, 和 a 不同的 学习 方法. 盖子 所以我 基本的 vJ作为s 到 开始 编码.

  j 手动的 – 一个 先进的 指导 到 这 语, 故意的 到 服务 作为 a 参考 为了 用户 WHO 是 已经 pr的icient. 和 它. 包括 a 综合的 API. 浏览器.

  Wc3j TU.到里亚尔斯 – TU.到里亚尔斯 从 Wc3J作为s.com

  wc3c j TU.到里亚尔斯 – TU.到里亚尔斯 从 Wc3c.网

  这Helper j TU.到里亚尔斯 – TU.到里亚尔斯 从 这Helper.网

  这 j 拱顶 – 包含 a 大的 收藏 的 样本 脚本.

  j 脚本

  j-有关的 文件

  jCraft – edi.到r 为了 j 脚本.

  j 工具 – 包括 a 句法 检查员.

  j NewGenPack – A 世界 edi.到r 摩擦 那 允许s vJass 汇编 和 补充. 德漏洞g在g 能力 之中 o这r 特征.

  JassHelper – A vJass 到 Jass 编译器.

本文由,热点新闻,新闻频道,国内新闻,整理发布.转载联系作者并注明出处:http://www.chenxiuwen.com/skf/JAtfs.html

本站关键词:热点新闻新闻频道国内新闻