血戮魔动冰 发表于 2009-12-12 10:40:20

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

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

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" )


上面就是我的测试代码和触发。
结果什么也没有显示。
于是我把I2UHelper换成这个样子:

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

这回有结果了:
1048587(这个应该是在I2UHelper里发送的信息的)

于是再换另一个代码:

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

触发:

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 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 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改动。

zhuzeitou 发表于 2009-12-12 11:40:16

1.24c做的就是修改这个………………
语法仍然嫩通过通过,但是效果没了
在beta的时候照wc3c某帖子的说法貌似是改为返回未初始化值,后面的都被跳过了,正是发布后没试过,不过应该不会差太多

KickedByOthers 发表于 2009-12-12 11:42:23

- -
介个有啥用?

zhuzeitou 发表于 2009-12-12 11:43:17

在1.24b的时候可以实现和return bug一样的效果
页: [1]
查看完整版本: 关于Takes Bug在1.24c里运行的效果……请求头目解答一下