找回密码
 点一下
查看: 3240|回复: 11

[已解决]刚接触JASS,试着编了个死亡英雄原地复活,结果蹦出了4个错误,用谷歌翻译了一下,说是使用了未申报的变量

[复制链接]
发表于 2012-12-30 16:47:09 | 显示全部楼层 |阅读模式
本帖最后由 稻草人009 于 2012-12-30 21:19 编辑

在下面输入自定义脚本代码. 该部分内容会被添加到地图脚本的变量声明和触发代码之间.
我是在这里面弄的,不知道有没有搞错地方
1.globals2.hashtable fuck = InitHashtable()
3.endglobals

1.function Trig_deathCondition takes nothing returns boolean
2.    return ((IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) == true))
3.endfunction
4.
5.function death1 takes nothing returns nothing
6.    local timer jishiqi = GetExpiredTimer()
7.    local unit yingxiong = LoadUnitHandle( fuck, GetHandleId(jishjiqi), 0)
8.    local location dian = LoadLocationHandle ( fuck, GetHandleId(jishiqi), 1)
9.    local timerdialog chuangkou = LoadTimerDialogHandle( fuck, GetHandleId(jishiqi), 3)
10.    call ReviveHeroLoc( yingxiong, dian, true)
11.    call DestroyTimerDialog( chaungkou)
12.    call DestroyTimer( jishiqi)
13.    call RemoveLocation( dian)
14.    set yingxiong = null
15.    set dian = null
16.    set chuangkou = null
17.    set jishiqi = null
18.endfunction
19.
20.function Trig_deathActions takes nothing returns nothing
21.    local unit yingxiong = GetDyingUnit()
22.    local location dian = GetUnitLoc( yingxiong)
23.    local timer jishiqi = CreateTimer()
24.    local timerdialog chuangkou
25.    call TimerStart( jishiqi, 10, false, function death1)
26.    set chuangkou = GetLastCreatedTimerDialogBJ()
27.    call SaveUnitHandle( fuck, GetHandleId(jishiqi), 0, yingxiong)
28.    call SaveLocationHandle( fuck, GetHandleId(jishiqi), 1, dian)
29.    call SaveTimerDialogHandle( fuck, GetHandleId(jishiqi), 3, chuangkou)
30.    set yingxiong = null
31.    set dian = null
32.    set jishiqi = null
33.    set chuangkou = null
34.endfunction
35.
36.//=======================================================
37.function InitTrig_death takes nothing returns nothing
38.    local trigger death = CreateTrigger()
39.    call TriggerRegisterAnyUnitEventBJ( death, EVENT_PLAYER_UNIT_DEATH)
40.    call TriggerAddCondition( death, Condition(function Trig_deathCondition))
41.    call TriggerAddAction( death, function Trig_deathActions)
42.endfunction

报错的行数是7、7、11、27,看了下错误的函数,估计错的地方不止这些,麻烦各位大大帮忙解决下,小弟不胜感激。
发表于 2012-12-30 18:43:19 | 显示全部楼层
本帖最后由 美味豆沙包 于 2012-12-30 18:44 编辑

1、第七行的逗号是全角的“,”而不是半角的“,”
2、第七行的计时器变量名是“jishjiqi”而不是你所定义的“jishiqi”
3、第11行你所使用的计时器窗口变量名是“ chaungkou ”,而不是你所定义的“ chuangkou ”

解决方法:细心,还有学会看错误提示

另:请使用[jass]标签来贴jass代码,以方便观看
回复

使用道具 举报

 楼主| 发表于 2012-12-30 19:44:35 | 显示全部楼层
美味豆沙包 发表于 2012-12-30 18:43
1、第七行的逗号是全角的“,”而不是半角的“,”
2、第七行的计时器变量名是“jishjiqi”而不是你所定义的 ...

学习了,第一个错误是我写上来的时候修改搞错了,2和3的确是我粗心了。还有个问题是我用了哈希表,刚刚检测一下,结果发现还是有两个错误。
line7:undeclared variable fuck
line27: undeclared variable fuck
我在前面已经声明过了,为什么还是说我没申报。求解,
另付:jass标签来贴jass代码是怎么回事?我刚来GA没多久的
回复

使用道具 举报

发表于 2012-12-30 20:50:58 | 显示全部楼层
普通WE不支持将全局变量的定义写在自定义代码区,定义全局变量的方法只有“变量编辑器”
所以如果你用的不是YDWE的话
1.globals2.hashtable fuck = InitHashtable()
3.endglobals
是没有用的
当然,如果魔兽或WE的版本是1.20的话,也是没有hashtable这个东西的
我用来写jass的工具是JassCraft,不知道你用的是什么

评分

参与人数 1互助 +5 收起 理由
疯人¢衰人 + 5 凑整

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-12-30 20:53:41 | 显示全部楼层
美味豆沙包 发表于 2012-12-30 20:50
普通WE不支持将全局变量的定义写在自定义代码区,定义全局变量的方法只有“变量编辑器”
所以如果你用的不 ...

我用地是YDWE,我是把版本转换器从1.20e升级到1.24e的。写J我直接在YDWE里面写的
回复

使用道具 举报

发表于 2012-12-30 20:54:01 | 显示全部楼层
至于[ jass ]标签
只要把代码写在[ jass ]和[ /jass ]之间(去掉空格)就可以自动编号加高亮
例如:
[jass]
globals
    hashtable udg_hashtable
endglobals

function UnitInRange takes unit u,real r,code c returns integer
    local integer h
    local trigger t
    local triggeraction a
    set t = CreateTrigger()
    set a = TriggerAddAction(t,c)
    call TriggerRegisterUnitInRange(t,u,r,null)
    set h = GetHandleId(t)
    call SaveUnitHandle(udg_hashtable,h,StringHash("unit"),u)   
    call SaveTriggerHandle(udg_hashtable,h,StringHash("trigger"),t)
    call SaveTriggerActionHandle(udg_hashtable,h,StringHash("triggeraction"),a)
    set t = null
    set a = null
    return h
endfunction

function HandleDestroyTrigger takes integer h returns nothing
    local trigger t
    local triggeraction a
    set t = LoadTriggerHandle(udg_hashtable,h,StringHash("trigger"))
    set a = LoadTriggerActionHandle(udg_hashtable,h,StringHash("triggeraction"))
    call FlushChildHashtable(udg_hashtable,h)
    call TriggerRemoveAction(t,a)
    call DestroyTrigger(t)
    set t = null
    set a = null
endfunction

function TriggerLoadUnit takes nothing returns unit
    local integer h
    set h = GetHandleId(GetTriggeringTrigger())
    return LoadUnitHandle(udg_hashtable,h,StringHash("unit"))   
endfunction
[/jass]
回复

使用道具 举报

 楼主| 发表于 2012-12-30 21:00:58 | 显示全部楼层
是这个吗
QQ截图20121230210040.png
回复

使用道具 举报

发表于 2012-12-30 21:13:40 | 显示全部楼层
稻草人009 发表于 2012-12-30 20:53
我用地是YDWE,我是把版本转换器从1.20e升级到1.24e的。写J我直接在YDWE里面写的

作为WEER我们应该永远告别“版本转换器”
因为大部分的版本转换器都只会替换“war3.exe”"game.dll"“war3patch.dll”"Storm.dll"四个文件
但是他们不会替换“worldedit.exe”文件,地图编辑器版本和魔兽版本不一致会导致严重的后果
例如:地图损坏、地图损坏、还有地图损坏之类的问题

使用剑心补丁吧,或者使用那些可以自定义的版本转换器,把worldedit.exe加进去

另:YDWE的版本也要设置为1.24哦
回复

使用道具 举报

 楼主| 发表于 2012-12-30 21:17:02 | 显示全部楼层
美味豆沙包 发表于 2012-12-30 21:13
作为WEER我们应该永远告别“版本转换器”
因为大部分的版本转换器都只会替换“war3.exe”"game.dll"“wa ...

额……我看还是去重新下一个魔兽好了
回复

使用道具 举报

发表于 2012-12-30 21:26:18 | 显示全部楼层
稻草人009 发表于 2012-12-30 21:17
额……我看还是去重新下一个魔兽好了

这倒没必要,用剑心补丁转换一次就可以了
回复

使用道具 举报

发表于 2012-12-30 21:41:01 | 显示全部楼层
另外:
推荐两个东西
http://pan.baidu.com/share/link?shareid=156751&uk=3727240465
1.26纯净版魔兽,还有weer专用魔兽版本转换器

点评

嗯,感谢豆沙包大大的热心帮助!  详情 回复 发表于 2012-12-31 11:37
回复

使用道具 举报

 楼主| 发表于 2012-12-31 11:37:14 | 显示全部楼层
美味豆沙包 发表于 2012-12-30 21:41
另外:
推荐两个东西
http://pan.baidu.com/share/link?shareid=156751&uk=3727240465

嗯,感谢豆沙包大大的热心帮助!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 17:50 , Processed in 0.225730 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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