找回密码
 点一下
查看: 2811|回复: 6

关于Takes Bug在1.24c里运行的效果……请求头目解答一下

[复制链接]
发表于 2009-12-12 10:40:20 | 显示全部楼层 |阅读模式
[jass]function I2I takes integer i returns integer
    return i
endfunction

function U2U takes unit u returns unit
    if u == null then
        call BJDebugMsg( "0" )
    else
        call BJDebugMsg( "1" )
    endif
    return u
endfunction

function I2UHelper takes integer i returns unit
    call I2I( i )
    if false then
        return null
    endif
endfunction

function I2U takes integer i returns unit
    return U2U( I2UHelper( i ) )
endfunction[/jass]
[trigger]
Trigger 1
    事件
        时间 - Elapsed game time is 0.00 seconds
    环境
    动作
        Set U = 国王祭坛 0001 <情报>
        Custom script:   call BJDebugMsg( I2S( GetHandleId( I2U( GetHandleId( udg_U ) ) ) ) )
        Custom script:   call BJDebugMsg( "Trigger 1End" )

[/trigger]
上面就是我的测试代码和触发。
结果什么也没有显示。
于是我把I2UHelper换成这个样子:
[jass]
function I2UHelper takes integer i returns unit
    if false then
        return null
    endif
    call BJDebugMsg( I2S( i ) )
    call I2I( i )
endfunction
[/jass]
这回有结果了:
1048587(这个应该是在I2UHelper里发送的信息的)

于是再换另一个代码:
[jass]
function I2I takes integer i returns integer
    return i
endfunction

function I2IHelper takes integer i returns integer
    call I2I( i )
    if false then
        return 0
    endif
endfunction

function Convert takes integer i returns integer
    return I2I( I2IHelper( i ) )
endfunction
[/jass]
触发:
[trigger]
Trigger 1
    事件
        时间 - Every 0.50 seconds of game time
    环境
    动作
        Set U = 国王祭坛 0001 <情报>
        Custom script:   call BJDebugMsg( "Trigger 1 Start" )
        Custom script:   call BJDebugMsg( I2S( Convert( GetHandleId( udg_U ) ) ) )
        Custom script:   call BJDebugMsg( I2S( Convert( 100 ) ) )
        Custom script:   call BJDebugMsg( "Trigger 1 End" )

[/trigger]
[trigger]
Trigger 2
    事件
        时间 - Every 0.51 seconds of game time
    环境
    动作
        Custom script:   call BJDebugMsg( "Trigger 2" )
        Custom script:   if IsTriggerWaitOnSleeps( gg_trg_Trigger_1 ) then
        Custom script:   call BJDebugMsg( "Trigger 1 is Sleeping" )
        Custom script:   else
        Custom script:   call BJDebugMsg( "All Right" )
        Custom script:   endif

[/trigger]
结果是不断重复
Trigger 1 Start
Trigger 2
All Right

似乎每次执行到I2XHelper的最后返回值的时候,Trigger就被卡住了……
貌似是1.24c在执行函数时,函数不再能从前一个执行的函数里获取返回值了?

不知道是不是我测试的有问题呢……请求头目解答~~
发表于 2009-12-12 11:04:35 | 显示全部楼层
1.24C解决了Takes Bug……
回复

使用道具 举报

 楼主| 发表于 2009-12-12 11:34:10 | 显示全部楼层
但是TakesBug的代码还是能通过jass语法检查
回复

使用道具 举报

发表于 2009-12-12 11:36:49 | 显示全部楼层
大约只是修改了返回值
--------------------------------------------------------------------------
《魔兽争霸III:冰封王座》版本历史\\
--------------------------------------------------------------------------

--------------------------------------------------------------------------
- 补丁 1.24c
--------------------------------------------------------------------------

修正

- 修正了在游戏剧情第六章的人类战役中,游戏地图无法读取的问题。
- 修正了一个会允许JASS函数在某种条件下返还错误值的问题。
- 修正了一个会导致TriggerEvaluate本地函数在某种条件下会返还错误值的问题。
- 修正了在使用GroupEnum本地函数时会出现少量内存泄漏的错误。
- 修正了当在PPC Mac系统上使用CreateImage本地函数时会发生崩溃的错误。
- 对Mac版本的地图编辑器进行了升级,使其能够兼容近期的JASS改动。
回复

使用道具 举报

发表于 2009-12-12 11:40:16 | 显示全部楼层
1.24c做的就是修改这个………………
语法仍然嫩通过通过,但是效果没了
在beta的时候照wc3c某帖子的说法貌似是改为返回未初始化值,后面的都被跳过了,正是发布后没试过,不过应该不会差太多
回复

使用道具 举报

发表于 2009-12-12 11:42:23 | 显示全部楼层
- -
介个有啥用?
回复

使用道具 举报

发表于 2009-12-12 11:43:17 | 显示全部楼层
在1.24b的时候可以实现和return bug一样的效果
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:15 , Processed in 0.036397 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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