找回密码
 点一下
查看: 5005|回复: 24

[已解决]关于VJASS的语法问题

[复制链接]
发表于 2009-2-17 12:07:44 | 显示全部楼层 |阅读模式
由于昨天血魔发了别人的VJ出来 就弄了个下来看了下
学着建了了库 建完后 用语法检查 第一行就报了句法错误
代码如下:
[codes=jass]
library CacheSystem initializer Init

    //初始化缓存
    private function Init takes nothing returns nothing
        call InitGameCacheBJ("TheRoadOfLight.w3v")
    endfunction
   
    //转换一个Handle为Integer
    public function H2I takes handle h returns integer
        return h
        return 0
    endfunction
   
    //转换一个Handle为Integer
    public function I2Unit takes integer i returns unit
        return i
        return null
    endfunction
   
    //转换一个Handle为Struct
    public function I2Struct takes integer i returns struct
        return i
        return null
    endfunction
   
endlibrary
[/codes]

实在是弄不懂 以前想学的时候也是莫名其妙就出了类似的错 看了半天楞没看出来
发表于 2009-2-17 12:52:17 | 显示全部楼层
I2Struct
把后面的return null删了。
(VJASS的struct本身就是个integer,作为指向数组位置的index)
回复

使用道具 举报

 楼主| 发表于 2009-2-17 13:27:47 | 显示全部楼层
他报第一行错了我删除了还是报错 我整个触发就这么些语句 是不是这个问题?
截个报错的图,如下
Exception.jpg
回复

使用道具 举报

发表于 2009-2-17 16:08:56 | 显示全部楼层
是不是你没开JassHelper?还是你的代码打错了?
回复

使用道具 举报

 楼主| 发表于 2009-2-17 18:08:08 | 显示全部楼层
颜色都变色了 怎么能错 我复制教程上面的 代码上去 他也报错
JassHelper打开拉 如图
Helper.jpg
回复

使用道具 举报

发表于 2009-2-18 12:49:28 | 显示全部楼层
试着把initializer函数去掉(试试看)。
回复

使用道具 举报

 楼主| 发表于 2009-2-18 16:41:14 | 显示全部楼层
还是报错 很无语了 你传一个你用的工具 我看看是不是工具出了问题
回复

使用道具 举报

发表于 2009-2-18 17:43:22 | 显示全部楼层
最后一个函数删除就可以了。其他没错。
回复

使用道具 举报

 楼主| 发表于 2009-2-18 20:22:40 | 显示全部楼层
晕死 还是报错 是不是JASSHELPER里面 除了Blizzard.j 和 common.j 还有一个j文件啊
话说标题怎么变成已解决了 改后如下
VJ.jpg
回复

使用道具 举报

发表于 2009-2-18 20:24:39 | 显示全部楼层
你要选择:禁止WE的语法检查机制

因为WE自己是不认识vJass的

使用vJass时,是通过pjass检查的
回复

使用道具 举报

 楼主| 发表于 2009-2-18 22:28:02 | 显示全部楼层
额 如果我英语不是很烂 或者大哥你的教程没写错的话 应该是这样吧
show.jpg

如果是这样的话,仍然很遗憾,还是报错
实在是郁闷 我跑去官网下了个1.5B的 验证句法的时候还是报错
回复

使用道具 举报

发表于 2009-2-19 09:47:10 | 显示全部楼层
initializer 后面跟着的函数必须在这个库中

如果使用NewGen不行,你试着用命令行看看:

1.打开命令行,然后cd到NewGen的目录(不是jasshelper目录,是NewGen的目录,这是因为sfmpq.dll 必须在当前目录下的bin\\子目录下)
2.运行命令: jasshelper\\jasshelper.exe <common.j的路径(一般在jasshelper目录下有一个)>&#160; <blizzard.j的路径(同common.j)> <地图的路径>

示例:C:\\MISC\\WarCraft Hack\\JassNewGenPack> jasshelper\\jasshelper.exe&#160; jasshelper\\common
.j jasshelper\\Blizzard.j&#160; D:\\WC3\\Maps\\FrozenThrone\\(12)EmeraldGardens.w3x

如果命令行有问题,那么是jasshelper的问题,否则就是WE的问题

如果实在不能解决,请把war3map.j贴上来,我来看看
回复

使用道具 举报

 楼主| 发表于 2009-2-19 23:11:34 | 显示全部楼层
如果我这样写 他就说系统找不到指定路径

E:\\jassnewgenpack5b\\> jasshelper\\jasshelper.exe  jasshelper\\common
.j jasshelper\\Blizzard.j  E:\\Test.w3x

我一定要写完整路径 而且开始他说bin\\不存在sfmpq.dll
可是E:\\jassnewgenpack5b\\bin 文件夹下面绝对是存在sfmpq.dll 的 后来实在火了
就在E:\\jassnewgenpack5b\\jasshelper\\ 下新建了一个bin 复制了一个sfmpq.dll 进去 下面这段命令行就成功运行了 出现了两次进度条 完了就什么都没了 第二次进度条出现那个是Success j就是成功咯 进了NewGen WE 再来句法测试 继续报错 我已经无语了我
E:\\jassnewgenpack5b\\jasshelper\\jasshelper.exe E:\\jassnewgenpack5b\\jasshelper\\common.j E:\\jassnewgenpack5b\\jasshelper\\Blizzard.j E:\\Test.w3x
回复

使用道具 举报

发表于 2009-2-20 12:43:43 | 显示全部楼层
命令行通过,就说明代码是没有问题的,那么可以肯定是WE的问题

关于NewGen,还有要注意的:

1.NewGen不能处理带有中文名的地图(是指地图的文件名,不是WE里设置的地图名),如果地图名称是中文,换成英文或者字母

2.NewGen的触发编辑器是集成TESH的,在文本编辑区域上方有4个按钮,最后一个"Syntax Check"是不能点的!
想要检查语法,一定要保存地图,在保存地图完毕之后,会弹出JassHelper的窗口,这时才是真正的编译和语法检查过程!如果没有问题,就什么也不会弹出来,否则弹出语法错误对话框


你很可能是点了TESH的那个Syntax Check按钮。那个按钮是没有用的,不能正常检查语法。
回复

使用道具 举报

发表于 2009-2-20 13:14:45 | 显示全部楼层
我想建议LZ用WEHelper…………
至少JASS检查没问题……
NewGen经常出问题(比如一个规定returns boolean函数内部居然能写return不加东西)
…………
回复

使用道具 举报

 楼主| 发表于 2009-2-20 15:54:59 | 显示全部楼层
我昨天试着下了WEHELPER 用了下 本来觉得兼容性不错 还有一些非Navite方法的内容显示 功能少一些就算了
下1.8.1汉化版的 在JASS 中使用ALT+X 就报XXX内存错误
我用原版的 用ALT+C 它也来报错
最郁闷的就是按ALT+Z 他直接执行Trigger的撤销功能 写了N久的代码全白写了.

Syntax Check这个不能点...摆在那里纯正的好看.... 我晕
JassHelper进行语法检查的地图文件 如果正在被使用 好像会报错 难道是这个原因
还有如果我把 关闭第一次保存地图时提示 那个选项给去掉..  不管保存几次 他都弹出一个丢失文件路径什么的错误
回复

使用道具 举报

发表于 2009-2-20 16:21:24 | 显示全部楼层
引用第14楼血戮魔动冰于2009-02-20 13:14发表的&#160; :
NewGen经常出问题(比如一个规定returns boolean函数内部居然能写return不加东西)
…………

1.本来我也是觉得WEhelper好用的,可惜它不更新了,这就意味着那些BUG,如LS所说,再也不会修正了。所以我推荐NewGen

2.关于那个“规定returns boolean……“

为什么我的正常?

估计是你的PJass版本太旧,要更新了

[jass]
function Nothing2Nothing takes nothing returns boolean
return
return false
endfunction
[/jass]

检查会报错:
  1. a.j:2: Return nothing in function that should return value
  2. a.j failed with 1 error
  3. Parse failed: 1 error total
复制代码
还有如果我把 关闭第一次保存地图时提示 那个选项给去掉..&#160; 不管保存几次 他都弹出一个丢失文件路径什么的错误

难道是因为你的地图文件名是中文?那样肯定会出错。另外,魔兽的路径推荐也不要含有中文
JassHelper进行语法检查的地图文件 如果正在被使用 好像会报错 难道是这个原因

还有什么程序会占用地图文件呢?WE打开着是没关系的。
如果JassHelper打不开地图,会直接在语法错误对话框中提示:”打不开地图“的。而不会报代码错
你看NewGen的目录下有个logs目录,这个目录就是NewGen的日志记录文件存放的地方,里面可能会有3个J文件,就是JassHelper进行编译和检查时用的。inputwar3map.j就是编译之前的war3map.j内容,outputwar3map.j是编译后的内容,currentwar3map.j就是最终写回地图的脚本文件内容(因为JassHelper支持附加编译器,这个文件就是给其他编译器用的)
回复

使用道具 举报

 楼主| 发表于 2009-2-20 16:33:47 | 显示全部楼层
额... 你看我那串命令行字符串地图名是中文吗? 我就不知道嘛问题..
我保存了地图怎么也不见弹出JASSHELPER 的窗口 测试也测试不了
回复

使用道具 举报

发表于 2009-2-20 16:49:39 | 显示全部楼层
引用第17楼hunluan89于2009-02-20 16:33发表的&#160; :
我保存了地图怎么也不见弹出JASSHELPER 的窗口 测试也测试不了

这是一个很奇怪的问题。之前也有另一个人在QQ上问我这个问题,他也是保存了地图,JassHelper的窗口不弹出。这就意味着JassHelper根本就没有起作用。

那么你就只能用WEHelper了。另外还有一个支持vJass的WE:WOW8的WE第2版
地址:http://www.wow8.org/bbs/thread-45995-1-1.html
这个你试试

记得更新JassHelper,最新0.9.F.1,自带的是0.9.B.1
(这个也是用TESH来显示代码的,所以Syntax Check不要点)
回复

使用道具 举报

 楼主| 发表于 2009-2-20 17:02:29 | 显示全部楼层
我把只要把地图上那个关闭第一次保存提醒取消
他就老说找不到地图路径,请重试,重新保存了无数遍都这样 难道TEST.W3X 也是中文名吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 04:20 , Processed in 0.524247 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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