JASS笔记
JASS6-1
12:00~12:30
JASS6・鉄骨 工事技術指針 (工場製作編)
ボルト 高力ボルト さび止め めっき
嶋徹 (戸田建設)
13:30~14:30
JASS6・鉄骨 工事技術指針 (工事現場施工編)
製品検査 発送 工事現場施工 耐火
嶋徹 (戸田建設)
14:30~15:30 JASS6
鉄骨精度測定指針
護 雅典 (竹中工務店)
10:05~10:45
10:45~12:00
会場 開催日
JASS6・鉄骨 工事技術指針 (工場製作編)
JASS6・鉄骨 工事技術指針 (工場製作編)
総則 品質管理 材料 特記仕様
工作 溶接
6 月 28 日 秋田
(木)
中込 忠男 (信州大学)
中込 忠男 (信州大学)
*講師は都合により変更となる場合がございます。
1.開催地・期日・会場・申込先・参加費振込方法・振込先
開催地
開催日
定員
会
場
秋田
6 月 28 日(木) 50
ホテル メトロポリタン秋田 (秋田市中通七丁目 2-1)
申込先
日本建築学会東北支部 JASS6 係 〒980-0011 仙台市青葉区上杉 1-5-15
日本生命仙台勾当台南ビル 4F TEL 022-265-3404
5.申込み方法(参加申込書の注意事項も併せてご一読ください) 参加費をお支払いの上、必要事項を明記した参加申込書を添えてお申し込みください。なお、お電話での申込みは受け付けておりません。
講習会 参加申込書
講習会名・会場 氏名(フリガナ)
「JASS 6(鉄骨工事)・鉄骨工事技術指針(工場製作編/工事現場施工編)・鉄骨精度測定指針」改定講習会 秋田会場 日本建築学会 会員番号
红宝书笔记总结
红宝书笔记总结《JavaScript高级程序设计》(红宝书)是一本经典的JavaScript编程指南,由Nicholas C. Zakas撰写。
本书涵盖了JavaScript语言的基础知识、高级概念和最佳实践,对于想要深入学习和理解JavaScript的开发人员来说是一本不可或缺的参考书。
本文将对红宝书中的主要内容进行总结和归纳。
第一部分:JavaScript语言基础第一部分介绍了JavaScript的基本语法、数据类型和操作符等基础知识。
重点包括以下几个方面:1.JavaScript的基本语法:介绍了JavaScript的变量声明、函数定义和控制流语句等基本概念,使读者能够熟悉JavaScript的语法规则。
2.数据类型和变量:详细介绍了JavaScript的基本数据类型(数字、字符串、布尔值等)以及如何声明和操作变量。
3.操作符:介绍了JavaScript的各种操作符,包括算术操作符、比较操作符和逻辑操作符等,以及它们的优先级和使用方法。
4.语句:介绍了JavaScript的各种语句,包括条件语句、循环语句和跳转语句等,使读者能够使用这些语句实现复杂的程序逻辑。
第二部分:引用类型第二部分讲解了JavaScript中的引用类型,包括对象、数组、函数和正则表达式等。
以下是主要内容:1.对象:介绍了JavaScript中对象的基本概念和创建方法,以及如何使用点操作符和方括号操作符来访问对象的属性和方法。
2.数组:详细介绍了JavaScript中数组的特性和操作方法,如如何添加和删除数组元素、排序和迭代数组等。
3.函数:介绍了JavaScript中函数的定义和调用方法,以及函数的参数、作用域和闭包等概念。
4.正则表达式:解释了JavaScript中正则表达式的基本语法和常用方法,以及如何使用正则表达式进行模式匹配和替换等操作。
第三部分:面向对象的JavaScript第三部分讲解了JavaScript中的面向对象编程,包括面向对象的基本概念、继承和封装等。
jass中triggersleepaction()用法
jass中triggersleepaction()用法1. 引言1.1 概述本篇文章将会介绍Jass语言中的triggersleepaction()函数以及其用法。
triggersleepaction()是一个重要的函数,可以用来在Warcraft III地图制作中实现延时和睡眠效果。
在本文中,我们将详细探讨该函数的功能、参数说明、示例代码,并提供一些使用注意事项,以及应用实例分析。
1.2 文章结构本文共分为五个部分,每个部分都涵盖了不同的主题。
具体而言,第一部分是引言,对整篇文章进行概述和介绍。
第二部分将详细说明triggersleepaction()函数的功能和用法。
第三部分则会提供使用该函数时需要注意的事项和技巧。
第四部分将通过几个应用实例来展示如何灵活运用triggersleepaction()函数解决一些问题。
最后,在第五部分中,我们将对整篇文章进行总结,并展望一下未来可能的进一步研究方向。
1.3 目的撰写这篇文章的目的是帮助读者更好地理解和运用Jass语言中的triggersleepaction()函数。
通过深入讲解其功能、参数和示例代码,并指导如何避免滥用以及合理设置睡眠时间等注意事项,读者将能够更加高效地使用这个函数来实现延时和睡眠效果。
同时,通过应用实例的分析,读者也能够从不同的场景中寻找灵感和突破口,将这一函数应用到自己的地图制作中去。
希望本文能为广大Warcraft III地图制作者提供有价值的指导和帮助。
2. jass中triggersleepaction()用法:2.1 功能介绍:triggersleepaction()是JASS(Just Another Scripting Syntax)语言中的一个函数,它用于在Warcraft III地图编辑器中控制触发器延迟执行的时间。
通过使用该函数,我们可以实现一些需要经过一定时间后才能执行的操作,例如延时技能效果触发、单位行动间隔控制等。
Jass基础教程
JASS基础教程■作者:天零萃梦■转载请注明本文出处: 本文假定您拥有WE触发器最基础的知识以及熟悉Windows的基本操作■文中所用UI版本: 夜天新手助推器汉化UI)例如只对某玩家播放音效, 或者让某些华丽的技能支持多人释放等.Jass可以定义局部变量以及自定义函数,增加设计的方便性. 熟练使用Jass可以很好的提高效率, 往往Jass几个输入字符就能完成的事情,GUI需要点选动作无数次才能做完.GUI虽然可以完成几乎所有的功能,但是对于内存释放能力太差,转化成的Jass代码会执行许多额外的动作. 用Jass可以写出比GUI效率更高的代码,可以更灵活和更有效率地控制地图运行Jass 的基本使用方法在地图制作时,Jass 的基本使用方法有3种1.自定义脚本区编辑Jass (位置在触发编辑器左侧,触发器树的最顶端,左键点击地图名字即可进入)2.触发器转换为代码后编辑Jass (选定触发器后,选择菜单->编辑->转化为自定义文本,确定后可将触发器转换为Jass代码)3.在触发器中直接编辑Jass (使用动作->自定义代码动作来输入Jass)一变量篇变量是指在运行过程中随时可以发生变化的量,与其相对的是常量,但是在地图中不允许自定义常量,所以我们这里只说变量.变量是数据的临时存放场所.在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放文字,数值,单位以及玩家等.由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短,易于记忆的名字,因此它们十分有用.变量分为全局变量和局部变量,全局变量是指在任何地方(任意触发器,任意函数中)都可以使用的变量,例如我们在触发器中创建的变量. 而局部变量,则是仅仅在触发器(或函数)当前运行时才存在的变量.创建全局变量只能在变量编辑器中设置.变量的创建和使用方法1. 变量的命名规则要使用变量,必须给变量取一个名字,就好像每个人都有自己的名字一样.在JASS中,变量的命名必须遵循一下规则1.变量名必须以字母开头,名字中间只能以字母,下划线”_”或数字组成,最后一个字符只可使用字母或数字2.在作用范围内不可使用相同名字的变量3.变量名不能与任何函数名字相同4.变量名不能是Jass中保留的关键字(关键字详见附录2)例如strName1 intMax_Length intLesson strNo3等是合法的变量名,而A&B right_3M _Number是非法的变量名需要注意的是变量名是区分大小写的, 也就是说,Jass不会认为“a”和“A”是同一种东西.定义和使用变量时,通常要把变量名定义为容易使用阅读和能够描述所含数据用处的名称,而不要使用一些难懂的缩写如A或B2等.这样会增加理解的难度.例如, 要记录的数值是一个单位的生命值, 可以写为unitLife或者danWeiShengMingZhi,这样仅仅通过变量名就能知道我们记录的是什么,增加阅读难度的话如果出现了BUG, 需要排错时是很困难的.2.变量的声明在变量使用前,必须在代码中进行声明,即创建该变量.在GUI中,我们可以使用变量编辑器来声明新变量在这里声明的变量,是全局变量, 这也是唯一声明全局变量的方法(在仅使用WE的前提下).所以我们这里暂时不讲全局变量的声明, 只用知道声明全局变量就在变量编辑器中创建就可以了注:为了区分全局变量和局部变量的名字,GUI自动在所有变量编辑器设置的全局变量名的前面都加了udg_前缀, 因此图中的变量名实际为udg_unitLife局部变量的声明格式为local <变量类型> <变量名>变量类型是用来区分变量储存的数据类型,比如用于储存单位,就要使用单位unit注:Jass中变量类型与WE中变量类型对照表见附录1例:local unit trigUnit这样就声明了一个类型为单位的变量, 变量名为trigUnit另外变量的声明要求在所有其他动作的前面.例如:local unit trigUnitlocal unit dmgUnit<动作> local unit trigUnitlocal unit dmgUnit<动作>local unit targetUnit表达式执行的结果与变量类型要相同例如声明一个变量trigUnit为触发单位local unit trigUnit = GetTriggerUnit()例如声明一个变量playerId为触发玩家索引号, 另一个变量I为174 (整数: integer)local integer playerId = GetConvertedPlayerId(GetTriggerPlayer())local integer I = 1743. 变量的使用声明完变量后,接下来就是如何使用变量的问题了.对于任意变量通用的赋值操作符是“=”它用于将后面的表达式计算后把结果赋予变量.表达式得到的结果要求与变量类型相同另外Jass要求,除初始化之外, 对变量进行赋值时必须使用set关键字格式为set <变量名> = <表达式>例如:local unit trigUnitset trigUnit = GetTriggerUnit()对于整数,实数来说,可以使用普通的计算符号来进行计算操作.其中 + - * / 分别对应着加减乘除(另外–还表示负号)例如local integer a = 1set a = a + 1 量操作举例:变量的值互换local integer a = 3 声明方法为local <类型名> array <变量名>3为整数而”jass2”是字符串, 这些实际上是一些常量Jass中规定带小数点的为实数小数点前后如果为0则可以省略,例如下列是正确的小数写法 .1234 170.不能把一个实数直接赋予一个整数变量, 例如下面的写法是错误的local integer id = 123. 是一个实数set id =例如整数可以转换为实数, 实数转为字符串, 等等.其函数名列举如下:R2S实数转字符串local string s = R2SS2R字符串转实数local real r =S2R(“1.200”)I2S整数转字符串local string s = I2S(123)S2I字符串转整数local integer I =S2I(“345”)I2R整数转实数local integer r = I2R(1234)R2I实数转整数local integer I = R2I注: 整数转实数时. I2R可省略例: local real r = 3 (隐式转换)注: 在实数转整数时, 小数点后的内容将被忽略例: local integer I = R2II 的值将被设置为1☆在计算时如果同时出现实数和整数, 那么结果为实数例:local integer i = 3*其中逻辑操作符可以对条件进行操作,用以判断全部条件成立或者任意条件成立等复合条件分支语句1.if 语句在Jass中判断条件的格式为if <条件表达式> then<动作>endif其中条件表达式是结果为true(真)或false(假)的表达式, 例如 3 > 5 的结果为false(假),如果表达式的值为true,则做在if与endif之间的动作式为:if <条件表达式> then<动作1>else<动作2>endif当条件表达式的值为true时,执行动作1,当为false时执行动作2请看下图的例子:此触发器在游戏中显示:a小于或等于ba的值增加了3a大于b要注意的是与”大于”相反的是”小于或等于”2.if - elseif 语句在if语句中,允许使用elseif来进一步进行条件的判断,格式如下if <条件表达式1> then<动作1>elseif <条件表达式2> then<动作2>endif等同于if <条件表达式1> thenelseif <条件表达式2> thenendifendif要注意的是每一个if都要对应一个endif, 但是elseif 不用3.if的嵌套在if语句中,允许嵌套使用if,但要保证每个if都要有endif来配对而且一个if语句不能分割其他的if语句例如:if 5>3 thenif 3>2 thenelseif 3<5 thenendifelseif 2>10 thenendifendif这样是可以的但是如果像下面这样,可能就会达不到想要的结果if 5>3 thenif 2< 3 thenendifendif这样人都看不懂- -!虽然没有语法错误.总之最好不要这样写啦..注: 每一个if要与endif配套使用if和elseif连接的条件表达式的最后要加 then逻辑操作符逻辑操作符是对条件表达式进行操作的.. 也就是只能对true或false进行计算逻辑操作符有3个,他们是and or和not-true false简单的归纳为and为所有条件成立,or为任意条件成立,not是取反例如:if not (3>5 or (2>1 and 5>4)) thenendif循环语句需要考虑的2个因素: 要哪些内容执行循环以及到什么时候循环停止如果循环没有停止循环的条件,那么就会成为死循环(也就是永远到不了头),但是可以放心的一点是Jass中有操作数限制来避免死循环,当一个循环中操作数太大时,会自动中断循环,并且令动作中断.以防止死循环的发生.但我们仍要避免死循环..因为这会使循环体后的所有动作失效循环语句的使用循环语句的格式为loop<动作>exitwhen <退出条件表达式>endloop其中exitwhen可以在任何地方, 允许不加exitwhen或有多个exitwhen循环体为loop与endloop之间的代码当 <退出条件表达式> 成立时, 则退出循环,并继续执行endloop后的语句请看下图例子:此触发器将在游戏中显示12345678910可以看到显示a的值被重复执行了10次,a的初始值为1,每次执行后都会加1,在a>10 也就是a等于11的时候循环结束例2: 显示1-n的阶乘,并把它们储存在数组中此触发器在游戏中显示为126241207205040403203628803628800此触发的功能是显示从1到a_max的阶乘并把它们储存在数组中,这里a_max设置为10 (阶乘运算: 非负整数,0的阶乘是1, n的阶乘是1*2*3*….*(n-1)*n )循环的嵌套循环语句允许像if语句那样嵌套,要注意的是loop与endloop配对请看下图例子:此触发器在游戏中显示为123246369循环的注意事项循环需要注意的就是确保条件能够成立例如local integer a = 1loop<动作>exitwhen a > 10endloop在这个循环里, a>10是不可能成立的, 因为a的值始终是1,没有任何语句改变它.四函数将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是函数.函数允许在调用时传递数据给函数体,然后可以返回一个数据给调用者.我们平时用触发的时候,编辑各种触发动作,事实上也是在调用各个函数,GUI里的动作就是把经常用的一些功能封装起来,然后做成一条条的触发供我们使用像触发单位,触发玩家等,这些动作,就是一些函数local unit u = GetTriggerUnit()所以我们无法在一个触发器动作里写函数(因为触发器动作本身就是一个函数)编写函数的一般方法,是在地图的自定义脚本区或将触发器转为代码后编写(请温习前言部分Jass的基本使用方法).为了更直观,将在自定义脚本区编写Jass函数.编写一个函数,要求得到两个整数的乘积function M takes integer a , integer b returns integerreturn a*bendfunction因为整数与整数的乘积仍是整数,所以返回值为整数return语句执行时, 会先计算右边表达式的结果, 然后返回该值要注意的是区分return和returns, 前者为返回(具体的值),后者为函数头中返回值类型调用此函数来工作首先将函数放到自定义代码区.然后就可以在其他地方调用它了需要注意的一点是, 如果要调用函数,那么要保证该函数在调用者的前面例如:function a takes nothing returns integerreturn b()过这些函数,我们可以对游戏进行操作.例如,创建单位,创建触发,设置单位生命,命令发布伤害等等. 这些函数的大部分,已经被制作到了GUI中,我们可以使用动作,然后转换成代码来查看到这些函数的具体名字,当然最好的方法是下载Jass专用的编辑器.使用CJ函数的方法与普通函数相同.例如local unit u = GetTriggerUnit()以上,就是JASS基础教程,所有JASS的基本语法已经包括在内.由于编写仓促不免有疏漏,请与作者联系 Email五附录附录一.关键字type native globals endglobals local endfunction function takes returns return set call endif elseif if then else endloop loop exitwhen and or not arrayinteger boolean real string code handle nothing null false true agent event player widget unit destructable item ability buff force group trigger triggercondition triggeraction timer location region rect boolexpr sound conditionfunc filterfunc unitpool itempool race alliancetype racepreference gamestate igamestate fgamestate playerstate playerscore playergameresult unitstate aidifficulty eventid gameevent playerevent playerunitevent unitevent limitop widgetevent dialogevent unittype gamespeed gamedifficulty gametype mapflag mapvisibility mapsetting mapdensity mapcontrol playerslotstate volumegroup camerafield camerasetup playercolor placement startlocprio raritycontrol blendmode texmapflags effect effecttype weathereffect terraindeformation fogstate fogmodifier dialog button quest questitem defeatcondition timerdialog leaderboard multiboard multiboarditem trackable gamecache version itemtype texttag attacktype damagetype weapontype soundtype lightning pathingtype image ubersplat hashtable constant附录二.WE与JASS变量类型对照JASS变量名称 GUI Trigger变量名称说明ability integer 技能aidifficulty integer 对战AI难度alliancetype integer 盟友类型attacktype Attack Type 攻击类型blendmode integer 合成模式boolean Boolean 布尔boolexpr integer 布尔表达式buff integer 强化法术button Dialog Button 对话框按钮camerafield integer 镜头区域camerasetup Camera Object 镜头物体code integer 程序代码conditionfunc integer 条件函数defeatcondition Defeat Condition 失败条件destructable Destructible 可破坏的dialog Dialog 对话dialogevent Dialog Button 对话事件effect Special Effect 特效effecttype integer 特效类型event integer 事件eventid integer 事件代码fgamestate integer 游戏状态(f) filterfunc integer 过滤函数fogmodifier Visibility Modifier 可见度fogstate integer 可见状态force Player Group 玩者群组gamecache Game Cache 游戏暂存gamedifficulty integer 游戏难度gameevent integer 游戏事件gamespeed Game Speed 游戏速度gamestate integer 游戏状态gametype integerv 游戏类型group Unit Group 单位群组handle integer 句柄igamestate integer 游戏状态(I) integer Integer 整数item Item 物品itempool integer 物品池itemtype Item-Class 物品分类leaderboard Leaderboard 计分板lightning Ligntning 线状特效limitop integer 比较location Point 点mapcontrol integer 玩家控制者mapdensity integer 地图密度mapflag integer 地图标记mapsetting integer 地图设置mapvisibility integer 地图可见性multiboard Multiboard 面板multiboarditem integer 面板项目placement integer 起始位置分布player Player 玩者playercolor Player Color 玩者颜色playerevent integer 玩者事件playergameresult integer 玩者游戏结果playerscore integer 玩者得分playerslotstate integer 玩者槽状态playerstate integer 玩者属性playerunitevent integer 玩者单位事件quest Quest 任务questitem Quest Requirement 任务要求race Race 种族racepreference integer 种族优选raritycontrol integer 动画珍品real Real 实数rect Region 矩形区域region integer 区域sound Sound 音效soundtype Sound Type 声音类型startlocprio integer 起始位置优先权string String 字符串terraindeformation Terrain Deformation 地形特效texmapflags integer 地图涂层标志texttag Floating Text 漂浮文字timer Timer 定时器timerdialog Timer Window 定时器窗口trackable integer 可点选物件trigger Trigger 触发器triggeraction integer 触发器动作triggercondition integer 触发器条件unit Unit 单位unitevent integer 单位事件unitpool integer 单位池unitstate integer 单位属性unittype integer 单位分类version integer 版本volumegroup integer 音量频道weapontype Combat Sound 攻击音效weathereffect Weather Effect 天气特效widget integer 有生命的对象widgetevent integer 有生命对象事件hashtable Hashtable 哈希表。
JASS完全教程
全局变量声明格式:
globals
变量类型 变量名称 = 初始值 //有初始化的全局变量
变量类型 变量名称 //无初始化的全局变量
注意:
1) 不论是全局变量还是局部变量, 必须在程序开始部分首先声明.
即是全局变量声明总是在程序文件的最前端,
而局部变量声明总是在函数的最前面.
2) 在Trigger Editor用变量管理器(Ctrl + B)中定义的变量都是全局变量
3) 在Trigger Editor的循环GUI语句 For Loop (Integer A)和For Loop (Integer B)中的(Integer A)(Integer B)都是全局变量
变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值
...
endglobals
局部变量只作用于函数内部, 即是如果在函数内部定义了局部变量abc, abc的值只影响该函数内部, 不影响全局变量abc的值.
局部变量声明格式:
if (条件==true)
then
(符合条件做某事)
else
(不符合条件就做另一件事)
endif
string
string是字符串变量, 可以是null(空值). 注意Jass的字符串是大小写区分的, 赋值时用双引号 "" 引用
handle
handle句柄, 可以是null(空值). 是用于指向Warcraft III定义的数据结构的指针. 比如上表中的location/player等除了integer/real/boean/string外的的变量实际上就是handle类型的子变量
JASS教程 月协出品 变量篇 函数篇
function一、变量1.什么是变量变量是存放的是实质的东西,并且因存放的东西不同而分类不同:有单位、区域、触发器等变量——这样说吧,就像容器,放水的叫杯,盛饭的叫碗,装屎的叫马桶。
因分类不同,所以你不能让一个变量储存与它类型不同的东西,譬如你不能用单位变量来保存地图上一个区域,就像你不能用马桶给客人盛饭。
2.不同变量类型的转换虽说变量不能储存与它类型不同的东西,但变量的类型,其实是可以改变的。
我们在T 里,看到―将一个整数转换成实数‖,―将一个整数转换成字符窜‖等等;WE里提供了三种变量类型之间的自由转换——整数,实数,字符窜;就像我们可以用杯子装饭,拿碗装水一样。
不知不觉便说到我们的周星星同学了,因为有人看到他居然拿马桶吃饭;这是怎么回事?原来有个Return Bug,利用系统漏洞可以实现任意两个变量类型之间的转换。
由于周星星是个特工,他的皮鞋,其实是吹风机,他的电话,还是吹风机,也就是说,由于职业需要,他把他的东西做了改装,以麻痹敌人。
所以,他拿的马桶也不是真的马桶,那其实是个饭盒,外观像马桶而已。
所以当周星星拿着马桶去厕所,别人以为他是去便便,其实他是去吃饭。
关于Return Bug,将在后面着重单独列出来讲。
3.全局变量与局部变量变量是容器,这里我们拿杯子来说明全局变量与局部变量的区别。
全局变量就像一个玻璃杯,不可能两个人同时使用,使用完下次可继续使用;局部变量则像一叠一次性纸杯,同时可以满足很多任何水的需要,并且使用完纸杯就丢掉,即便你有Sars也不怕传染给别人。
一般而言,由于程序在执行时,速度很快,因此多个T使用同一个全局变量,出错的概率很小;但,一旦T里有等待,情况就不妙了。
就像用杯子喝水,如果你是一口气把水喝完,然后把杯子放回原处给下一个人用,没什么问题;但如果你喝一小口,歇半天,再喝下一口,就出问题了——如果这时,另外有人也要用这杯子,那么,你跟他将轮流喝杯子里的水——很有断臂山的感觉。
jass教程
jass教程本文针对Jass基础=0的各种不想学习Jass 的地图制作者而写, 看完本文后, 我保证jass对你来说仍然是一个未知的广阔世界,但是看完本文后,你一定能够熟练的使用timer和hashtable,配合简单的vjass来做你想要的大部分东西,我不能保证你对Jass了解多么深入,这不是我的目的,我可以保证你们一定能够通过本文,最快的学会Jass中最简易而实用的工具方便我们作图. 高深的Jass知识请去各大论坛查阅相关的Jass教程.Hashtable 属于1.24新的工具,如果你使用1.24b以上版本制作地图,本文hashtable部分将对你有用。
如果你使用1.20~1.23版本作图,那么本文你可以忽略第四章hashtable的部分,但是你需要寻找gamecache/ return bug的教程,因为gamecache/ return bug 是适合于1.23以下版本作图的工具,而不兼容hashtable. 反之,hashtable是1.24以上的工具,不兼容gamecache/ return bug, 这就回答了为什么很多1.24的地图和1.20不能互相并存的原因了。
当然,你可以使用YDWE开发者提供的更强大的YD功能, 具体去看相关帖子,我这里只说最普通情况下的作图方式而已.由于我的水平实在有限,对j的了解也只是初涉皮毛, 不足之处还请见谅和指正目录引言 0楼前奏:至上的拿来主义 0楼第一章: 从Vjass的全局变量开始0楼第二章: 了解一下function 0楼第三章: Timer的使用 7楼点击查看第四章: 1.24b以上的Hashtable哈希表的简易使用方法 8楼到9楼点击查看其他: 让vjass的library为我们开路9楼点击查看---------------------------------------------------------------------------------------------引言---------------------------------------------------------------------------------------------想写一些关于Jass的感言,u9也好,地精研究院也好,Jass教程都无数多,虽然星际2近在咫尺,但是我依然坚信,只要星际2一天不出破解,一天不支持局域网,就只能是一个曲高和寡的游戏罢了,魔兽风采依旧魔兽风采仍在。
JASS教程
[H出品]我也写一个jass教程(草稿版)序:这是hackwaly以前写的教程,在个别地方讲解比较深入;或许它不是很适合做新手教程,但一定很对某些人的口味;因此我特地将它重新排版编辑,收入电子书——如果你有一定程序语言基础,我向你推荐这篇教程。
========================================================JASS培训班专用分割线========================================================Jass教程:为什么要学JASS,JASS有什么用?JASS是魔兽争霸中的脚本语言,在WE中写的触发器实际上都是转换成jass在WAR3中起作用的。
所以我们可以用JASS做一些触发器做不到的事情,而且还能提高完成的效率。
另外一些好的地图都加了密,只要我们能看懂JASS 就能学到地图中一些好的方法。
基本书写规范:1.区分大小写:a和A是不同的。
2.jass中每个语句占一行,并且语句不需要结束符。
(如果你留意的话会发现J ASS的每个语句都是关键字开头的)3.注释:jass中只有一种注释,单行注释,使用//开头,即//到行末的内容。
注释中的内容绝对不会对代码有任何影响,相反它能提示你一些信息。
应当养成写注释的良好习惯。
另外我们可以临时把出错的代码注释起来,再进行调试。
一、基本变量类型:boolean是非型(真假型):可以存放true和false两个状态。
integer整型:可以存放整数。
real实型:可以存放浮点数,也就是实数。
string字符串:可以存放字符串。
支持转义字符,当你在JASS中用字符串表示path(路径)时,别忘了把\改为\\常用的转义字符有:\n换行。
handle句柄:句柄这个概念可能还不太懂是吗?这里粗略的说一下吧。
在魔兽争霸中很多要描述的物体(对象)都不是简单的变量类型。
如unit (单位),ability(技能),item(物品),当一个函数需要以这些对象为参数的时候我们必须填写一个标识符在参数的地方。
jass
第一章 Jass语言简介1.1 Jass语言的用处Jass(正确地说是Jass2)是魔兽3的脚本语言, 用于控制地图的进程和行为, 是魔兽游戏和地图的基础. 正常的地图编辑中摆放的单位(Unit), 设置的触发(Trigger)等最终都会被翻译成Jass语言存在地图文件里在游戏时被调用.1.2 为什么要学习Jass语言a)少量功能用触发(Trigger)不能完成, 必须用Jass来实现, 比如一些内存泄漏, 一些特殊功能b)在实现一些功能时使用Jass可以比触发(Trigger)写得更简洁高效快速1.3 一定要学习Jass吗?答案是否, 只要学习触发(Trigger)就能完成做地图的绝大多数功能, 只需记忆少量Jass特别的语句辅助即可(主要用于防止内存泄漏)1.4 Jass和其它语言的比较Jass的语法比较接近BASIC, 但引入了一些C的优秀的结构, 不过语法比这两者都要简单得多, 不需要任何语言基础就可以轻松学习1.5 本教程的定义/代码/例子表示方法放在两个===================================================================== =====================之间的部分表示定义/代码/例子第二章预备知识2.1 Jass语言的源代码Jass语言的扩展类型定义, 基本函数和常量取值都是直接调用游戏的函数, 他们被存放在war3x.mpq和war3patch.mpq内的Scripts\common.j和Scripts\common.ai中Jass还有一些扩展函数, 放在war3x.mpq和war3patch.mpq内的Scripts\blizzard.j和Scripts\common.ai中common.ai包含了用于设计ai的大量内部函数和扩展函数, 但对于我们只用Jass进行普通脚本编写的人来说可以忽略这个文件内的代码其中war3patch.mpq里的文件是打了升级补丁后的最新版本, 可以使用mpq工具提取, 如果不懂也没有关系, 我们提供了提取好的1.15的Jass源代码文件压缩包.2.2 Jass语言中的注释(comment)任何写在//后面的都是注释内容, 这也是Jass唯一的注释语法, 后面的例子会多处用到这个注释符号, 这个符号和后面的注释只是用于解释一些东西, 大家在看完一些例子后自己编写Jass代码时完全可以去掉2.3 Jass里的数据类型(data type)基本数据类型有:================================================================ ==========================integer 整数型, 相当于C语言里的int, 取值范围为 -2147483648到2147483647可以有4种形式的方法来写整数型的值:1)全部为数字, 第一个数字不为0, 这是10进制表示方法, 如: 232)全部为数字, 第一个数字为0, 这是8进制表示方法, 如: 023(相当于19)3)0x(x可以是大写)开头, 后面全部为数字(16进制的数字包含A,B,C,D,E,F, 分别表示10,11,12,13,14,15, 可以为小写), 这是16进制表示方法, 如: 0x23(相当于35)4)用单引号括起4个字母, 表示单位/技能编号对应的整数, 如'Hpea'real 实数型, 相当于C语言里的float, 取值范围为 1.5 x10^(-45) .. 3.4 x 10^38boolean 布尔型, 只有真假两个值, 用于表示一个判断式是否正确, 分别用true和false来标示string 字符串, 用双引号括起的若干个字母, 空字符串表示为""字符串中遇到"可以用\"来表示这是一个字符串中的引号如: "abc\"def\"", 就表示字符串abc"def"handle 句柄型, 相当于C中的指针类型, 它指向内存的一个地址, 用于表示一个较大的结构, 是很多数据类型的基类型code 代码型, 用于表示一个函数地址, 通常用于传值时传递一个函数, 其值的形式为function <函数名>如: function codeexample注意: 这个值表示的函数必须在前面定义过, 关于函数, 见3.3================================================================ ==========================除了基本数据类型, Jass还提供了大量扩展数据类型, 都是以handle为基类型, 我们先来看定义扩展数据类型的语法:================================================================ ==========================type <数据类型> extends <基类型>================================================================ ==========================我们在自己的脚本中除非有非常特殊的需要, 否则基本不会用到这个语法, 介绍这个语法是为了大家能更好地读common.j的源代码common.j中扩展的类型如widget, player, trigger, ability, boolexpr 等都是基于handle, 除了unit, destructable和item是基于widget, buff是基于ability, conditionfunc, filterfunc是基于boolexpr和几个非常罕用的类型, 通过类型名的英语含义可以清楚地了解这个类型表示的数据的类别2.4 Jass里的表达式(expression)表达式可以是直观可见的值, 也可以是函数, 计算式等, 如:================================================================ ==========================数值型/实数型: 1, 3, 5565.33, ........字符串: "Xasfsfs", "Greedwind", ........布尔型: true, false函数: GetTriggeringUnit()GetUnitLoc(GetTriggeringUnit())计算式: (a + b) * c + d================================================================ ===========================计算式中可以存在的操作符有:================================================================ ==========================数学计算:+, -, *, / 加, 减, 乘, 除(注意整数除法的结果仍然为整数, 是舍去小数点的结果)比较符号(返回的是boolean布尔值):>, <, >=, <=, ==, != 分别是大于,小于, 大于等于, 小于等于, 等于(注意不是=), 不等于布尔值运算:and, or, not 条件与, 或, 非字符串运算:+ 字符串相加, 如"abc" + "def"的结果"abcdef"================================================================ ==========================优先级大家不用记忆很多, 只要记住先*,/后+,-, 先数学运算再比较最后布尔值运算, 括号可以改变运算优先级到最高这3点就可以了第三章 Jass是一种语法非常简单的语言3.1 Jass语法概览Jass语法一共只有以下5种: 变量控制(定义/赋值), 函数控制(定义/返回), 调用函数, 判断和循环. 每行写一个语句, 换行就是语句分隔符号, 可以说是非常的简单, 很快可以理解上手.3.2 全局变量(Global variable)定义Jass中的变量分为两类, 全局变量(Global variable)和本地变量(Local variable), 如果你只使用地图编辑器的触发(Trigger)中的自定义脚本(Custom script)进行Jass编写, 请跳过对全局变量语法的描述, 直接看全局变量在地图编辑器中的命名形式.全局变量必须定义在一个Jass脚本文件的开始, 语法为:================================================================ ==========================globals[constant] <变量类型> [array] <变量名> [= <初始值>]...endglobals================================================================ ==========================其中变量数据类型见2.3, [constant]为可选定义段, 写上表示这个变量被视为常量, 不允许改动变量的内容, 此时必须加上[= <初始值>]这个部分以对常量进行初始化, [array]为可选定义段, 不写表示这是一个普通变量, 加上则表示是这是个数组, [= <初始值>]也是可选定义段, 但只有在不是数组的时候可以使用, 定义了变量被初始化时的取值, 可以为一个表达式. 举例:================================================================ ==========================globalsint udg_i = 1 //整数型变量udg_i, 初始化为1 real udg_d = 1.0 + 2.5 //实数型变量udg_i, 初始化为3.5 constant string udg_s = "abc" //字符串变量udg_s, 初始化为"abc", 并且定义为常量, 不可进行修改boolean udg_b //布尔型变量udg_bint array udg_ia //整数型数组变量udg_iaendglobals================================================================ ==========================我们在这段代码里定义了5个全局变量, 其中最后一个是数组.全局变量可以在地图编辑器的触发(Trigger)部分直接进行定义, 地图编辑器内部转换为Jass后自动会在变量名前面加上udg_, 并把变量名中间的空格转换为下划线. 比如你定义了一个Unit类型的变量my hero, 那么当你要使用Jass访问这个全局变量时, 你必须使用变量名udg_my_hero关于本地变量, 请看3.53.3 Jass的基本组成部分是函数(function)Jass不是面向对象的(OOP), 是一种非常传统的结构化的语言(不懂的人可以忽略这一句). 除了全局变量的定义, Jass完全由函数组成.3.4 函数的语法Jass中定义一个函数的语法为:================================================================ ==========================function <函数名> takes <参数类型> <参数名>[, <参数类型> <参数名>[, ...]] returns <返回类型>.... //函数主体endfunction================================================================ ==========================其中参数可以为多个, 用逗号隔开, 用于传递参数给函数, 传递过去的参数一律被视为本地变量(参见3.5), <返回类型>可以写nothing, 表示不返回任何值.然后介绍函数基本语法return, 它必须写在函数里, 格式为:================================================================ ==========================return [表达式]================================================================ ==========================当函数返回类型为nothing时, 后面不需要表达式, 否则必须写表达式, 它可以出现在函数的任何地方, 可以出现不止一次, 但是一旦碰到这一行, 函数立即返回值并跳出该函数的运行. 注意, return的值的类型必须和函数的返回类型相同或为返回类型的子类型(现在的Jass有解析bug, 只判断最后一个return 返回的类型, 而且官方明确表示永远不会修正这个bug, 但是出于安全考虑,最好保证所有return的值的类型都符合)举例:================================================================ ==========================function example takes int i, real d returns integerreturn i * 2 //返回i * 2endfunction================================================================ ==========================在这里我们建立了一个函数example, 它有两个参数, 整数型的i和实数型的d, 返回一个整数型值, 这里要注意的是returns最后一定要写s, 要和基本语法return区分开来. 在这个例子里, 我们函数中只用到了参数i, 而参数的d没有用到过, 这是不提倡的做法, 如果一个参数没有被使用, 推荐在函数定义中去掉这个参数, 即改写为:================================================================ ==========================function example takes int i returns integerreturn i * 2 //返回i * 2endfunction================================================================ ==========================common.j/common.ai中内部函数的定义语法为:================================================================ ==========================native function <函数名> takes <参数类型> <参数名>[, <参数类型> <参数名>[, ...]] returns <返回类型>==========================================================================================这表示这个函数直接使用了魔兽游戏内部的函数, 所以没有过程也没有endfunction, 所以大家不能通过看代码来分析这些函数的作用, 但是大家在读的时候注意一下函数名和参数名的英语含义基本就能明白这些内部函数的作用3.5 本地变量(Local variable)的定义本地变量(Local variable)的定义必须写在function的开头, 所有非变量定义语句之前, 语法结构为:================================================================ ==========================local <变量类型> [array] <变量名> [= <初始值>]================================================================ ==========================开头必须用local, 后面的含义和全局变量定义相同, 例子见3.6, 注意函数参数也可以视作是本地变量, 本地变量只能在本函数内使用, 而全局变量则可以在任何函数里使用3.6 变量(variable)的赋值和使用变量赋值语句的语法为:================================================================ ==========================set <变量名> = <表达式>================================================================ ==========================这个语句把<表达式>计算结果赋值给<变量名>表示的变量, 结合3.4, 3.5, 3.6举例:================================================================ ==========================function plus takes integer a, integer b returns integer //一个加法函数local integer cset c = a + breturn cendfunction================================================================ ==========================当然, 为了举例我们才这么写, 其实我们可以简写为:================================================================ ==========================function plus takes integer a, integer b returns integer //一个加法函数local integer c = a + breturn cendfunction================================================================ ==========================再进一步化简:================================================================ ==========================function plus takes integer a, integer b returns integer //一个加法函数return a + bendfunction================================================================ ==========================这样就能把本地变量去掉, 节省代码的长度和游戏运行时用的资源, 只不过在函数比较复杂的时候, 通常就无法简化掉本地变量的使用了然后讲一下数组的使用, 数组变量使用中的写法为:================================================================ ==========================<变量名>[<索引>]================================================================ ==========================<索引>是一个数字, 表示数组的元素位置, 最小为0, Jass中的数组不需要定义大小就可以随便使用小于common.j中定义的JASS_MAX_ARRAY_SIZE(8192)的任何索引, 我们将plus函数再做变化来举例:================================================================ ==========================function plus takes integer a, integer b returns integer //一个加法函数local integer array cset c[0] = aset c[1] = bset c[2] = a + breturn c[2]endfunction================================================================ ==========================这里我们用c[0], c[1]来储存a, b的值, 再把它们加起来赋值给c[2]3.7 函数(function)的调用函数调用的语法为:================================================================ ==========================call <函数名>(<变量列表>)================================================================ ==========================调用的函数一定要在前面定义过, 括号内为变量列表, 变量的数量和类型要和函数定义相符合, 用call调用的函数会忽略返回值, 通常用于需要函数的运行过程但不需要判断或使用其返回值的场合, 如我们调用上面的plus函数应该这样写:================================================================ ==========================call plus(1, 2)================================================================ ==========================对于有返回值的函数, 我们可以把它们写在表达式中, 这样就可以取得其返回值, 仍然以plus函数举例:================================================================ ==========================set i = plus(1, 2) * 2 //将(1 + 2) * 2 = 6赋值给本地变量i(注意前面要定义本地变量i)================================================================ ==========================3.8 判断(if)语句判断语句的基本语法为:================================================================ ==========================if <表达式> then... //代码段, 可以为多行endif================================================================ ==========================<表达式>结果必须为布尔型, 因此通常用比较符号和布尔型运算进行复合运算, 当表达式结果为真时, 运行中间的代码段.我们还可以判断语句在其中加入否则(else)和否则如果(elseif)的语句: ================================================================ ==========================if <表达式> then... //代码段, 可以为多行elseif <表达式> then... //代码段, 可以为多行else... //代码段, 可以为多行endif================================================================ ==========================可以用多个elseif, else必须写在最后, 表示前面的条件都不符合时执行else 后面的那段代码例一:==========================================================================================//判断两个数的大小, 相等返回0, a<b返回-1, a>b返回1function compare takes integer a, integer b returns integerif a > b then //如果a>breturn 1elseif a < b then //否则如果a<breturn -1else //否则(a不大于也不小于b, 即a == b)return 0endifendfunction================================================================ ==========================例二, blizzard.j中的RMaxBJ函数(返回两个实数中大的一个):================================================================ ==========================function RMaxBJ takes real a, real b returns realif (a < b) thenreturn belsereturn aendifendfunction================================================================ ==========================其实该函数可以化简为不使用else语句:================================================================ ==========================function RMaxBJ2 takes real a, real b returns realif (a < b) thenreturn b //如果a<b, 则在这里返回b, 不再往下执行 endifreturn a //如果a不小于b, 则返回aendfunction================================================================ ==========================这个例子同时也很好地诠释了return的作用, 大家可以体会一下3.9 循环(loop)语句循环语句的语法为:================================================================ ==========================loop... //代码段, 可以为多行exitwhen <表达式>... //代码段, 可以为多行endloop================================================================ ==========================<表达式>表示跳出循环的条件, 结果必须为布尔型值, 当它为真时, 直接跳出循环运行循环下面的语句, 可以存在多条exitwhen语句, 表示多个跳出条件例一:================================================================ ==========================function addfromone takes integer n returns integer //计算从1加到nlocal integer i = 1 //循环中表示当前加到的数的变量local integer s = 0 //表示和的变量loopexitwhen i > n //当i>n时跳出循环, 计算结束set s = s + i //加上当前数set i = i + 1 //把数加1endloopreturn s //返回计算结果endfunction================================================================ ==========================例二(loop和if嵌套使用):================================================================ ==========================function addevenfrommton takes integer m, integer n returns integer //计算从m到n的所有偶数的和local integer i = m //循环中表示当前加到的数的变量local integer s = 0 //表示和的变量loopexitwhen i > n //当i>n时跳出循环, 计算结束if ModuloInteger(i, 2) == 0 then //ModuloInteger是blizzard.j中的求余数函数, 如果余数为0即i为偶数, 将s加上当前数set s = s + iendifset i = i + 1 //把数加1endloopreturn s //返回计算结果endfunction================================================================ ==========================请注意loop和if嵌套使用时不要交*, 比如:==========================================================================================if .... thenloop....endif....endloop================================================================ ==========================这样写是不对的, loop在必须在endif前给出endloop才能形成正确的嵌套结构由于jass非常简单,所以对学过一种中高级语言的人完全没有难度,而本教程对j语言的各部分都介绍的比较详细,所以没有必要学。
JASS简单教程(原始稿)
什么是 JASS?JASS(正确地说是 JASS2)是魔兽 3的程式语言,用於控制游戏和地图的进行,也是魔兽 游戏和地图的基础。
地图编辑器中摆放的单位(Unit),区域(Region),触发(Trigger)……等, 最终都会被翻译成 JASS 语言存在地图档里,在游戏时被使用。
JASS 在语法结构上比较接近 Basic,同时也引用了许多 C 的东西。
如果读者有接触过这二种程式语言,相信一定能很快 上手!为什么要学习 JASS?某些功能只靠GUI Trigger 无法完成,必须用 JASS来实现。
例如对指定玩家播放音效,或 者替单位加上永不消失的被动物品技能等。
JASS 可以定义区域变数及自订的函数, 增加设计的便利性, 也提供更简单可行的演算法。
GUI 虽然能完成几乎所有的功能,但是对於记忆体释放的能力太差,容易增加电脑不必要的 负担。
用 JASS 可以写出比 GUI 效率更高的程式码,对执行速度有不小的帮助。
一定要学 JASS 吗?当然不一定。
一般来说,单纯使用 GUI Trigger,就可以达到大多数的功能。
但是笔者还 是建议对 Trigger 有相当了解的人学些基本的 JASS 写法,可以省下不少力气,且能让你的地 图更不 lag!!如何使用 JASS?触发编辑器中的Edit=>Convert To Custom Text将触发转成文字型态。
在触发编辑器下面 选Actions=>Custom Script可以插入单列 JASS 叙述。
此外,如果要定义所有触发都能呼叫的 函数JASS 语言的基本函数和常数都是直接调用游戏的函数,他们被存放在 war3patch.mpq 内另外还有一些扩充函数放在war3patch.mpq内的Scripts\blizzard.j中。
的Scripts\common.j中,war3patch.mpq 内的 Scripts\common.ai 则包含了用於设计 AI 的内部函数和扩展函数,虽然 AI 也是用 JASS 码编成,但本文不探讨关於 AI 的设计,有兴趣者请自行研究。
JASS教程
JASS教程[H出品]我也写⼀个jass教程(草稿版)序:这是hackwaly以前写的教程,在个别地⽅讲解⽐较深⼊;或许它不是很适合做新⼿教程,但⼀定很对某些⼈的⼝味;因此我特地将它重新排版编辑,收⼊电⼦书——如果你有⼀定程序语⾔基础,我向你推荐这篇教程。
========================================================JASS培训班专⽤分割线========================================================Jass教程:为什么要学JASS,JASS有什么⽤?JASS是魔兽争霸中的脚本语⾔,在WE中写的触发器实际上都是转换成jass在WAR3中起作⽤的。
所以我们可以⽤JASS做⼀些触发器做不到的事情,⽽且还能提⾼完成的效率。
另外⼀些好的地图都加了密,只要我们能看懂JASS 就能学到地图中⼀些好的⽅法。
基本书写规范:1.区分⼤⼩写:a和A是不同的。
2.jass中每个语句占⼀⾏,并且语句不需要结束符。
(如果你留意的话会发现J ASS的每个语句都是关键字开头的)3.注释:jass中只有⼀种注释,单⾏注释,使⽤//开头,即//到⾏末的内容。
注释中的内容绝对不会对代码有任何影响,相反它能提⽰你⼀些信息。
应当养成写注释的良好习惯。
另外我们可以临时把出错的代码注释起来,再进⾏调试。
⼀、基本变量类型:boolean是⾮型(真假型):可以存放true和false两个状态。
integer整型:可以存放整数。
real实型:可以存放浮点数,也就是实数。
string字符串:可以存放字符串。
⽀持转义字符,当你在JASS中⽤字符串表⽰path(路径)时,别忘了把\改为\\常⽤的转义字符有:\n换⾏。
handle句柄:句柄这个概念可能还不太懂是吗?这⾥粗略的说⼀下吧。
在魔兽争霸中很多要描述的物体(对象)都不是简单的变量类型。
如unit (单位),ability(技能),item(物品),当⼀个函数需要以这些对象为参数的时候我们必须填写⼀个标识符在参数的地⽅。
JASS教程 基础指南 JASS使用教程(eGust)
前言 jass语言概述0. 教程对象本教程适用于没有接触过计算机语言的人。
由于jass非常简单,所以对学过一种中高级语言的人完全没有难度,而本教程对j语言的各部分都介绍的比较详细,所以没有必要学。
如果只会用行号的basic(不包括vb、vbscript、ASP)的话,那还是看看这篇教程吧(不过可以略过很多部分)。
如果是完全没有接触过编程的话,建议第一遍通读,大体掌握jass语言的结构,然后再由基础到高级一步步的提高。
基础篇是对于语言的基本结构的介绍,首先要掌握好里面的关键部分,打好这个基础后,可以跟随高级篇里面的范例一步步的学jass的应用。
1. jass的特点jass语言是一个语法非常简单的语言,语法结构上比较接近basic,同时也引用了许多c的东西。
2. 如何学习和使用jass在trigger editor窗口中,我们可以很容易的把一个t转成j,方法是Edit(alt+e)->Conver to Custom Text(x),然后我们就可以在已有的j的基础上进行编辑。
由于we里的文本编辑器功能不够丰富,另外,we的容错机制比较差(j的错误太多容易导致直接关闭),所以这里推荐两个专门用于jass编辑的工具:jass editor(汉化版)和jass workshop(by soarchin)。
两个工具各有各的特点,后面会在涉及到的部分提到。
另外还需要得到cj和bj两个接口函数库,这个在je和jw中均有提供3. jass和trigger的关系在地图编辑过程中,绝大多数用j能够完成的东西也能够用t来完成。
事实上,所有的t最后都会转化成j,trigger只是面向we的独特体系。
具体的说,war3提供的API有common.j 和blizzad.j两个文件,其中com.j是纯粹的接口,而blz.j是对cj里面接口函数的封装,主要面向trigger editor,t生成的j代码中,绝大多数函数都是bj里的。
魔兽地图制作之十分钟学会jass
───────────────────────────────────────声明:这虽然是别人的教程,但是我受益匪浅,有一定T(触发器)基础的人完全可以在10分钟之内基本掌握该jass教程,直击重点、深入浅出,即使是毫无程序基础的人也能在很短的时间内迅速掌握。
本教程不打算与其他语言挂钩,不论原因为何,基于让人们迅速掌握和理解该语言的初衷,因此采用最有效最通俗的手法去阐述该语言。
可能跨张了些,不过这却是挺容易的!即使不是十分钟,半个小时应该就没什么问题。
──────────────────────────────────一、初识jass1、概览(5秒——10秒)关于jass,只要知道2个内容即可:变量和函数。
╔═══╦════════════════════════╗║变量║存储数据,重点熟悉和掌握全局和局域变量║╠═══╬════════════════════════╣║函数║执行功能,了解函数的结构、生成和运行等║╚═══╩════════════════════════╝光是看了这有些人可能不是很理解,不要紧,看下去,你会懂得2、详解(2分20秒)(1)、变量和函数声明格式如下:───────────────────────────a、全局变量的声明:globals变量类型变量名( = 初始值) //括号表示不赋值亦可,下同变量类型array数组名//数组不可直接赋值,需在函数内逐个赋值endglobalsb、函数和局域变量的声明:function函数名takes参数列表returns返回值类型local变量类型变量名( = 初始值)......执行语句......return返回值endfunction───────────────────────────(2)、全局与局域变量的区别:全局任何函数皆可用,局域只作用于所声明的函数。
不同函数的局域变量命名可相同,最好不要与全局和参数名相同。
J2SE学习总结
J2SE学习总结——LiYi.09-18选择来培训,至结束时,能够达到一个什么样的高度?在来NIIT之前,徘徊于各大培训机构之间,考虑最多的无疑就是这个问题了。
现在想来,这高度也许与自身的学习态度怎样更为关系多一点!回想刚来的那一天,倒是真有了点时光荏苒的感慨了,转眼间,培训时间已经用去了两个月,J2SE阶段也告一段落。
对于这期间的学习,我肯定自己的努力,稍有欠缺的是,不能够灵活运用,离了笔记便有种难为情的瑟瑟感,要做到融会贯通,还有待进一步在程序的敲练中总结归纳。
下面是对J2SE知识点简单汇总:1.java有效标识符:字母、下划线、$开头,其后可出现数字。
2.java关键字(50个):public default protected private class void new static finalboolean byte short int long float double char this returnpackage import if else switch case break continue while do forextends super instanceof abstract interface implements enumtry catch finally throws throw synchronizedgoto const assert native transient strictfp volatilejava保留字:true false null3.package结构中,若使用当前包之外的对象,需要在程序中导入。
(ng包不用导入),import package.ClassName*4.重载方法重载:(1)定义方法名相同(2)参数列表<列表中类型>必须不一致(3)与返回类型、修饰符、参数名无关构造器重载:(1)this(…)必须放在第一行(2)参数列表必须不同5.封装(encapsulation)隐藏了类的实现细节,强迫用户使用接口来访问数据。
jass语言 2008
jass语言 20082008年,JASS语言在计算机科学领域引起了广泛的关注和讨论。
JASS(Just Another Scripting Syntax)是一种专门用于编写魔兽争霸地图脚本的语言。
它是由暴雪娱乐公司开发的,用于定制和扩展魔兽争霸游戏的功能和特性。
JASS语言的出现,使得魔兽争霸地图的开发变得更加灵活和强大。
它采用了C语言的语法结构,使得熟悉C语言的开发者能够很快上手。
与此同时,JASS语言也提供了一些特有的功能和语法,使得开发者能够更加方便地操作游戏内部的资源和对象。
作为一种编程语言,JASS具有一些独特的特性。
首先,它支持面向对象的编程范式,使得开发者可以使用封装、继承和多态等概念来组织代码。
其次,JASS语言提供了丰富的游戏API(Application Programming Interface),开发者可以利用这些API来操作游戏中的单位、技能、装备等,实现各种复杂的游戏功能。
在JASS语言中,开发者可以定义自己的函数和变量,并通过事件驱动的方式来调用这些函数。
例如,当玩家点击鼠标时,游戏会触发一个鼠标点击事件,开发者可以编写相应的函数来处理这个事件,实现自己的逻辑。
除了函数和变量,JASS语言还支持条件语句、循环语句等常见的编程结构。
这使得开发者能够编写复杂的逻辑来控制游戏的流程和行为。
同时,JASS语言还提供了一些高级的功能,例如数组、结构体等,使得开发者能够更好地组织和管理代码。
2008年,JASS语言在魔兽争霸社区中得到了广泛的应用和推广。
越来越多的玩家开始使用JASS语言来开发自己的地图,实现各种创意和想法。
由于JASS语言的强大和灵活性,许多优秀的地图作品相继问世,为玩家们带来了全新的游戏体验。
然而,正是由于JASS语言的特殊性,它也存在一些挑战和难点。
由于JASS语言的文档和教程相对较少,初学者往往需要花费较多的时间和精力来学习和理解。
此外,JASS语言在一些细节上的规定和限制也给开发者带来了一定的困扰。
Jass基础教程
JASS基础教程■作者:天零萃梦■转载请注明本文出处: 本文假定您拥有WE触发器最基础的知识以及熟悉Windows的基本操作■文中所用UI版本: 夜天新手助推器汉化UI)例如只对某玩家播放音效, 或者让某些华丽的技能支持多人释放等.Jass可以定义局部变量以及自定义函数,增加设计的方便性. 熟练使用Jass可以很好的提高效率, 往往Jass几个输入字符就能完成的事情,GUI需要点选动作无数次才能做完.GUI虽然可以完成几乎所有的功能,但是对于内存释放能力太差,转化成的Jass代码会执行许多额外的动作. 用Jass可以写出比GUI效率更高的代码,可以更灵活和更有效率地控制地图运行Jass 的基本使用方法在地图制作时,Jass 的基本使用方法有3种1.自定义脚本区编辑Jass (位置在触发编辑器左侧,触发器树的最顶端,左键点击地图名字即可进入)2.触发器转换为代码后编辑Jass (选定触发器后,选择菜单->编辑->转化为自定义文本,确定后可将触发器转换为Jass代码)3.在触发器中直接编辑Jass (使用动作->自定义代码动作来输入Jass)一变量篇变量是指在运行过程中随时可以发生变化的量,与其相对的是常量,但是在地图中不允许自定义常量,所以我们这里只说变量.变量是数据的临时存放场所.在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放文字,数值,单位以及玩家等.由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短,易于记忆的名字,因此它们十分有用.变量分为全局变量和局部变量,全局变量是指在任何地方(任意触发器,任意函数中)都可以使用的变量,例如我们在触发器中创建的变量. 而局部变量,则是仅仅在触发器(或函数)当前运行时才存在的变量.创建全局变量只能在变量编辑器中设置.变量的创建和使用方法1. 变量的命名规则要使用变量,必须给变量取一个名字,就好像每个人都有自己的名字一样.在JASS中,变量的命名必须遵循一下规则1.变量名必须以字母开头,名字中间只能以字母,下划线”_”或数字组成,最后一个字符只可使用字母或数字2.在作用范围内不可使用相同名字的变量3.变量名不能与任何函数名字相同4.变量名不能是Jass中保留的关键字(关键字详见附录2)例如strName1 intMax_Length intLesson strNo3等是合法的变量名,而A&B right_3M _Number是非法的变量名需要注意的是变量名是区分大小写的, 也就是说,Jass不会认为“a”和“A”是同一种东西.定义和使用变量时,通常要把变量名定义为容易使用阅读和能够描述所含数据用处的名称,而不要使用一些难懂的缩写如A或B2等.这样会增加理解的难度.例如, 要记录的数值是一个单位的生命值, 可以写为unitLife或者danWeiShengMingZhi,这样仅仅通过变量名就能知道我们记录的是什么,增加阅读难度的话如果出现了BUG, 需要排错时是很困难的.2.变量的声明在变量使用前,必须在代码中进行声明,即创建该变量.在GUI中,我们可以使用变量编辑器来声明新变量在这里声明的变量,是全局变量, 这也是唯一声明全局变量的方法(在仅使用WE的前提下).所以我们这里暂时不讲全局变量的声明, 只用知道声明全局变量就在变量编辑器中创建就可以了注:为了区分全局变量和局部变量的名字,GUI自动在所有变量编辑器设置的全局变量名的前面都加了udg_前缀, 因此图中的变量名实际为udg_unitLife局部变量的声明格式为local <变量类型> <变量名>变量类型是用来区分变量储存的数据类型,比如用于储存单位,就要使用单位unit注:Jass中变量类型与WE中变量类型对照表见附录1例:local unit trigUnit这样就声明了一个类型为单位的变量, 变量名为trigUnit另外变量的声明要求在所有其他动作的前面.例如:local unit trigUnitlocal unit dmgUnit<动作> local unit trigUnitlocal unit dmgUnit<动作>local unit targetUnit表达式执行的结果与变量类型要相同例如声明一个变量trigUnit为触发单位local unit trigUnit = GetTriggerUnit()例如声明一个变量playerId为触发玩家索引号, 另一个变量I为174 (整数: integer)local integer playerId = GetConvertedPlayerId(GetTriggerPlayer())local integer I = 1743. 变量的使用声明完变量后,接下来就是如何使用变量的问题了.对于任意变量通用的赋值操作符是“=”它用于将后面的表达式计算后把结果赋予变量.表达式得到的结果要求与变量类型相同另外Jass要求,除初始化之外, 对变量进行赋值时必须使用set关键字格式为set <变量名> = <表达式>例如:local unit trigUnitset trigUnit = GetTriggerUnit()对于整数,实数来说,可以使用普通的计算符号来进行计算操作.其中+ - * / 分别对应着加减乘除(另外–还表示负号)例如local integer a = 1set a = a + 1 量操作举例:变量的值互换local integer a = 3 声明方法为local <类型名> array <变量名>3为整数而”jass2”是字符串, 这些实际上是一些常量Jass中规定带小数点的为实数小数点前后如果为0则可以省略,例如下列是正确的小数写法.1234 170.不能把一个实数直接赋予一个整数变量, 例如下面的写法是错误的local integer id = 123. 是一个实数set id =例如整数可以转换为实数, 实数转为字符串, 等等.其函数名列举如下:R2S实数转字符串local string s = R2SS2R字符串转实数local real r = S2R(“1.200”)I2S整数转字符串local string s = I2S(123)S2I字符串转整数local integer I = S2I(“345”)I2R整数转实数local integer r = I2R(1234)R2I实数转整数local integer I = R2I注: 整数转实数时. I2R可省略例: local real r = 3 (隐式转换)注: 在实数转整数时, 小数点后的内容将被忽略例: local integer I = R2II 的值将被设置为1☆在计算时如果同时出现实数和整数, 那么结果为实数例:local integer i = 3*其中逻辑操作符可以对条件进行操作,用以判断全部条件成立或者任意条件成立等复合条件分支语句1.if 语句在Jass中判断条件的格式为if <条件表达式> then<动作>endif其中条件表达式是结果为true(真)或false(假)的表达式, 例如 3 > 5 的结果为false(假),如果表达式的值为true,则做在if与endif之间的动作式为:if <条件表达式> then<动作1>else<动作2>endif当条件表达式的值为true时,执行动作1,当为false时执行动作2请看下图的例子:此触发器在游戏中显示:a小于或等于ba的值增加了3a大于b要注意的是与”大于”相反的是”小于或等于”2.if - elseif 语句在if语句中,允许使用elseif来进一步进行条件的判断,格式如下if <条件表达式1> then<动作1>elseif <条件表达式2> then<动作2>endif等同于if <条件表达式1> thenelseif <条件表达式2> thenendifendif要注意的是每一个if都要对应一个endif, 但是elseif 不用3.if的嵌套在if语句中,允许嵌套使用if,但要保证每个if都要有endif来配对而且一个if语句不能分割其他的if语句例如:if 5>3 thenif 3>2 thenelseif 3<5 thenendifelseif 2>10 thenendifendif这样是可以的但是如果像下面这样,可能就会达不到想要的结果if 5>3 thenif 2< 3 thenendifendif这样人都看不懂- -!虽然没有语法错误.总之最好不要这样写啦..注: 每一个if要与endif配套使用if和elseif连接的条件表达式的最后要加then逻辑操作符逻辑操作符是对条件表达式进行操作的.. 也就是只能对true或false进行计算逻辑操作符有3个,他们是and or和not简单的归纳为and为所有条件成立,or为任意条件成立,not是取反例如:if not (3>5 or (2>1 and 5>4)) thenendif循环语句需要考虑的2个因素: 要哪些内容执行循环以及到什么时候循环停止如果循环没有停止循环的条件,那么就会成为死循环(也就是永远到不了头),但是可以放心的一点是Jass中有操作数限制来避免死循环,当一个循环中操作数太大时,会自动中断循环,并且令动作中断.以防止死循环的发生.但我们仍要避免死循环..因为这会使循环体后的所有动作失效循环语句的使用循环语句的格式为loop<动作>exitwhen <退出条件表达式>endloop其中exitwhen可以在任何地方, 允许不加exitwhen或有多个exitwhen循环体为loop与endloop之间的代码当<退出条件表达式> 成立时, 则退出循环,并继续执行endloop后的语句请看下图例子:此触发器将在游戏中显示12345678910可以看到显示a的值被重复执行了10次,a的初始值为1,每次执行后都会加1,在a>10 也就是a等于11的时候循环结束例2: 显示1-n的阶乘,并把它们储存在数组中此触发器在游戏中显示为126241207205040403203628803628800此触发的功能是显示从1到a_max的阶乘并把它们储存在数组中,这里a_max设置为10 (阶乘运算: 非负整数,0的阶乘是1, n的阶乘是1*2*3*….*(n-1)*n )循环的嵌套循环语句允许像if语句那样嵌套,要注意的是loop与endloop配对请看下图例子:此触发器在游戏中显示为123246369循环的注意事项循环需要注意的就是确保条件能够成立例如local integer a = 1loop<动作>exitwhen a > 10endloop在这个循环里, a>10是不可能成立的, 因为a的值始终是1,没有任何语句改变它.四函数将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是函数.函数允许在调用时传递数据给函数体,然后可以返回一个数据给调用者.我们平时用触发的时候,编辑各种触发动作,事实上也是在调用各个函数,GUI里的动作就是把经常用的一些功能封装起来,然后做成一条条的触发供我们使用像触发单位,触发玩家等,这些动作,就是一些函数local unit u = GetTriggerUnit()所以我们无法在一个触发器动作里写函数(因为触发器动作本身就是一个函数)编写函数的一般方法,是在地图的自定义脚本区或将触发器转为代码后编写(请温习前言部分Jass的基本使用方法).为了更直观,将在自定义脚本区编写Jass函数.编写一个函数,要求得到两个整数的乘积function M takes integer a , integer b returns integerreturn a*bendfunction因为整数与整数的乘积仍是整数,所以返回值为整数return语句执行时, 会先计算右边表达式的结果, 然后返回该值要注意的是区分return和returns , 前者为返回(具体的值),后者为函数头中返回值类型调用此函数来工作首先将函数放到自定义代码区.然后就可以在其他地方调用它了需要注意的一点是, 如果要调用函数,那么要保证该函数在调用者的前面例如:function a takes nothing returns integerreturn b()过这些函数,我们可以对游戏进行操作.例如,创建单位,创建触发,设置单位生命,命令发布伤害等等. 这些函数的大部分,已经被制作到了GUI中,我们可以使用动作,然后转换成代码来查看到这些函数的具体名字,当然最好的方法是下载Jass专用的编辑器.使用CJ函数的方法与普通函数相同.例如local unit u = GetTriggerUnit()以上,就是JASS基础教程,所有JASS的基本语法已经包括在内.由于编写仓促不免有疏漏,请与作者联系Email五附录附录一.关键字type native globals endglobals local endfunction function takes returns return set call endif elseif if then else endloop loop exitwhen and or not arrayinteger boolean real string code handle nothing null false true agent event player widget unit destructable item ability buff force group trigger triggercondition triggeraction timer location region rect boolexpr sound conditionfunc filterfunc unitpool itempool race alliancetype racepreference gamestate igamestate fgamestate playerstate playerscore playergameresult unitstate aidifficulty eventid gameevent playerevent playerunitevent unitevent limitop widgetevent dialogevent unittype gamespeed gamedifficulty gametype mapflag mapvisibility mapsetting mapdensity mapcontrol playerslotstate volumegroup camerafield camerasetup playercolor placement startlocprio raritycontrol blendmode texmapflags effect effecttype weathereffect terraindeformation fogstate fogmodifier dialog button quest questitem defeatcondition timerdialog leaderboard multiboard multiboarditem trackable gamecache version itemtype texttag attacktype damagetype weapontype soundtype lightning pathingtype image ubersplat hashtable constant附录二.WE与JASS变量类型对照JASS变量名称GUI Trigger变量名称说明ability integer 技能aidifficulty integer 对战AI难度alliancetype integer 盟友类型attacktype Attack Type 攻击类型blendmode integer 合成模式boolean Boolean 布尔boolexpr integer 布尔表达式buff integer 强化法术button Dialog Button 对话框按钮camerafield integer 镜头区域camerasetup Camera Object 镜头物体code integer 程序代码conditionfunc integer 条件函数defeatcondition Defeat Condition 失败条件destructable Destructible 可破坏的dialog Dialog 对话dialogevent Dialog Button 对话事件effect Special Effect 特效effecttype integer 特效类型event integer 事件eventid integer 事件代码fgamestate integer 游戏状态(f) filterfunc integer 过滤函数fogmodifier Visibility Modifier 可见度fogstate integer 可见状态force Player Group 玩者群组gamecache Game Cache 游戏暂存gamedifficulty integer 游戏难度gameevent integer 游戏事件gamespeed Game Speed 游戏速度gamestate integer 游戏状态gametype integerv 游戏类型group Unit Group 单位群组handle integer 句柄igamestate integer 游戏状态(I) integer Integer 整数item Item 物品itempool integer 物品池itemtype Item-Class 物品分类leaderboard Leaderboard 计分板lightning Ligntning 线状特效limitop integer 比较location Point 点mapcontrol integer 玩家控制者mapdensity integer 地图密度mapflag integer 地图标记mapsetting integer 地图设置mapvisibility integer 地图可见性multiboard Multiboard 面板multiboarditem integer 面板项目placement integer 起始位置分布player Player 玩者playercolor Player Color 玩者颜色playerevent integer 玩者事件playergameresult integer 玩者游戏结果playerscore integer 玩者得分playerslotstate integer 玩者槽状态playerstate integer 玩者属性playerunitevent integer 玩者单位事件quest Quest 任务questitem Quest Requirement 任务要求race Race 种族racepreference integer 种族优选raritycontrol integer 动画珍品real Real 实数rect Region 矩形区域region integer 区域sound Sound 音效soundtype Sound Type 声音类型startlocprio integer 起始位置优先权string String 字符串terraindeformation Terrain Deformation 地形特效texmapflags integer 地图涂层标志texttag Floating Text 漂浮文字timer Timer 定时器timerdialog Timer Window 定时器窗口trackable integer 可点选物件trigger Trigger 触发器triggeraction integer 触发器动作triggercondition integer 触发器条件unit Unit 单位unitevent integer 单位事件unitpool integer 单位池unitstate integer 单位属性unittype integer 单位分类version integer 版本volumegroup integer 音量频道weapontype Combat Sound 攻击音效weathereffect Weather Effect 天气特效widget integer 有生命的对象widgetevent integer 有生命对象事件hashtable Hashtable 哈希表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
------------------------------------
可破坏物目标(Destructable):
GetLastCreatedDestructable()(最后创建的可破坏物)
GetOrderTargetDestructable()(命令目标的可破坏物)
GetOrderedUnit()(收到命令单位)
udg_X()(变量X单位)
GetEventDamageSource()(伤害来源)
------------------------------------
点目标(Loc):
GetRectCenter()(区域中心)
GetRandomLocInRect()(区域内随机坐标)
native GetStoredString takes gamecache cache, string missionKey, string key returns string
native RestoreUnit takes gamecache cache, string missionKey, string key, player forWhichPlayer, real x, real y, real facing returns unit
GetSpellTargetDestructable()(对其使用技能的目标点内可破坏物)
GetEnumDestructable()(pickup可破坏物)
GetFilterDestructable()(匹配可破坏物)
RandomDestructableInRectSimpleBJ(区域)(区域内随机可破坏物)
call IssueTargetOrderBJ( 单位 , 指令 , 单位 )((单位目标)
call IssuePointOrderLocBJ( 单位 , 指令 , 点目标 )((点目标)
call IssueTargetDestructableOrder( 单位 , 指令 , 可破坏物目标 )(可破坏物物标)
载入缓存
读取缓存文件的内容之前必须将文件载入缓存,方法如下:
native ReloadGameCachesFromDisk takes nothing returns boolean
读取
读取缓存文件内容使用Get方法,对于Unit变量比较特殊,具体命令为:
native GetStoredBoolean takes gamecache cache, string missionKey, string key returns boolean
udg_X()(变量X物品)
假设命令一个单位对最后掉落的物品所在地点释放烈炎风暴则为:
call IssuePointOrderLocBJ( GetTriggerUnit() , "flamestrike" , GetItemLoc(GetLastRemovedItem()) )
------------------------------------
变量类型和空值:
boolean 布尔型(用于真/假判断) false
destructable 可破坏物 null
dialog 对话 null
button 按钮 null
texttag 漂浮文字 null
integer 数值 0
item 物品 null
leaderboard 排行榜 null
GetLastRemovedItem()(最后掉落的物品)
UnitItemInSlotBJ(单位, X)(单位物品栏X格的物品)
GetItemOfTypeFromUnitBJ(单位, 'X')(单位物品栏中类型为X的物品)
GetEnumTargetItem()(Pickup物品)
OffsetLocation((点, x.xx, y.yy) )(区域内坐标点)
PolarProjectionBJ(点, x.xx, y.yy) )(点方向位移x.xx角度y.yy)
GetCameraTargetPositionLoc()(当前摄像机视角)
GetDestructableLoc(可破坏物)(可破坏物的目标点)
native GetStoredInteger takes gamecache cache, string missionKey, string key returns integer
native GetStoredReal takes gamecache cache, string missionKey, string key returns real
native StoreUnit takes gamecache cache, string missionKey, string key, unit whichUnit returns boolean
保存为文件
缓存在游戏结束后即会消失,所以你必需保存该缓存为文件,方法如下:
native SaveGameCache takes gamecache whichCache returns boolean
function I2TA takes integer i returns triggeraction
return i
return null
endfunction
<font size="3">变量类型格式:
String=""
Integer=''
GetLastCreatedUnit()(最后创建的单位)
GetTriggerUnit()(触发单位)
GroupPickRandomUnit(单位组)(单位组内随机单位)
GetEnteringUnit()(正在进入区域的单位)
GetLeavingUnit()(正在离开区域的单位)
RandomDestructableInRectBJ(区域, Condition(条件))(区域内随机可破坏物并匹配条件)
udg_X()(变量X可破坏物)
------------------------------------
物品(Item):
GetLastCreatedItem()(最后创建的物品)
return i
return null
endfunction
function I2TC takes integer i returns triggercondition
return i
return null
endfunction
timer 计时器 null
timerdialog 计时器窗口 null
unit 单位 null
group 单位组 null
playerscore 积分 null
handle 游戏缓存
------------------------------------
命令单位t(单位) 删除单位
call KillUnit() 杀死单位
call ShowUnit(单位, false/true) 显示隐藏单位false是隐藏
call StoreInteger(缓存,类别,名称,数值) 存入
call GetStoredInteger(缓存,类别,名称) 取出
player 玩家 null
force 玩家组 null
location 位置(点) null
real 真值型数字 null
rect 地区 0
effect 特效 null
string 字符串 null
terraindeformation 地形 null
不会的用T转了看看...
收集了一部分常用的
rbug。。。
function H2I takes handle h returns integer
return h
return 0
endfunction
function I2TG takes integer i returns trigger
GetPlayerStartLocationLoc(玩家)(玩家的初始位置)
udg_X()(变量X点)
------------------------------------
地图区域(MapRect):
GetPlayableMapRect()(可玩区域)
GetEntireMapRect()(整个地图)
GetEventTargetUnit()(命令目标单位)
GetEnumUnit()(Pickup单位)
GetFilterUnit()(匹配单位)
GetDyingUnit()(死亡单位)
GetAttacker()(攻击单位)
GetAttackedUnitBJ()(被攻击单位)
------------------------------------
基本语法:
set 变量 = 值(设置变量)
local 变量类型 变量名称(设置变量类型)
local 变量类型 变量名称=值(设置变量类型和值)
------------------------------------
命令如下:
native StoreBoolean takes gamecache cache, string missionKey, string key, boolean value returns nothing
native StoreInteger takes gamecache cache, string missionKey, string key, integer value returns nothing