找回密码
 点一下
查看: 1614|回复: 19

1.24c来了

[复制链接]
发表于 2009-11-22 10:06:18 | 显示全部楼层 |阅读模式
--------------------------------------------------------------------------
Patch 1.24c
--------------------------------------------------------------------------

FIXES

- Fixed a problem with the "Chapter Six: The Culling" human campaign map
that was preventing it from loading.
修正一个人族战役的问题
- Fixed an issue that allowed JASS functions to return incorrect values
under certain conditions
.修正某种情况下的Jass函数的returnBUG
- Fixed an issue that caused the TriggerEvaluate native to return
incorrect values under certain conditions.
修正某种情况下触发器的返回错误
- Fixed a minor memory leak when using GroupEnum natives.
修正一个较小的利用枚举组的内存泄露问题
- Fixed a crash when using the CreateImage native on PPC Mac.
- Updated Mac World Editor to work with recent JASS changes.
这两个都是针对Mac的

目前还在测试,可能比较火星了
发表于 2009-11-22 10:09:18 | 显示全部楼层
猪头大大已经有发上。
只不过在综合区。
回复

使用道具 举报

 楼主| 发表于 2009-11-22 10:13:30 | 显示全部楼层

回 1楼(血戮魔动冰) 的帖子

果然火星了阿
回复

使用道具 举报

发表于 2009-11-22 12:08:30 | 显示全部楼层
其实这个是上次wisp在qq上先发给我的说1.24c出现了,然后我再去看的,而且看了也没在意,只是昨天回眸个帖子的时候才再去看的
回复

使用道具 举报

发表于 2009-11-22 12:15:10 | 显示全部楼层
- Fixed an issue that allowed JASS functions to return incorrect values
under certain conditions
-修正了一个在特定情况下可令jass函数返回不正确值的问题

- Fixed an issue that caused the TriggerEvaluate native to return
incorrect values under certain conditions.
-修正了一个导致TriggerEvaluate函数在特定情况下会返回不正确值的问题。

- Fixed a minor memory leak when using GroupEnum natives.
修正了GroupEnum函数中的小规模内存泄漏。


TriggerEvaluate()和GroupEnum()都是common.j里的函数,你把它们当单词翻译了。
回复

使用道具 举报

发表于 2009-11-22 12:17:30 | 显示全部楼层
恩,不过
- Fixed an issue that allowed JASS functions to return incorrect values
under certain conditions
-修正了一个在特定情况下可令jass函数返回不正确值的问题
这个的确导致了新的return bug的出现……
玻璃渣要将return bug赶尽杀绝啊,不晓得修正后又会出现什么新bug………………
回复

使用道具 举报

发表于 2009-11-22 12:27:09 | 显示全部楼层
[codes=jass]globals
    hashtable rb = InitHashtable()
endglobals

function H2I takes handle v returns integer
    return GetHandleId(v)
endfunction

function I2U takes integer i returns unit
    call SaveFogStateHandle(rb,0,0,ConvertFogState(i))
    return LoadUnitHandle(rb,0,0)
endfunction

function I2IT takes integer i returns item
    call SaveFogStateHandle(rb,0,0,ConvertFogState(i))
    return LoadItemHandle(rb,0,0)
endfunction

function test takes nothing returns nothing
    unit u = CreateUnit(Player(0),'hpea',0,0,0)
    integer i = H2I(u)
    BJDebugMsg(GetUnitName(I2U(i))) //顯示:農民
endfunction
[/codes]
引用AppleSheep 于2009年11月07日 11:47 pm发表的 Return Bug的逆襲 RB再臨~2 :

或許這說明了null值其實只是一個指標?

其實null也是個複合類型?

.......

他这样的解读算是正确么?
回复

使用道具 举报

发表于 2009-11-22 12:34:31 | 显示全部楼层
这个方法我也在wc3c看到了,但我觉得这个的意义相对不大唉,因为综合区某帖的lz意思似乎是说无法用hashtable纪录存取额,而用这个方法的话,我觉得本身就都可以用hashtable去存取……
回复

使用道具 举报

发表于 2009-11-22 12:47:15 | 显示全部楼层
hashtable那个法子其实不是什么问题。jass本身需要那样的东西而已。

至于那个I2UHelper的原理我倒可以说明下。

因为这东西其实没有返回任何值。

1.24为了修正return bug,改动了jass的语法检测,但是在检测环节上出了毛病,结果没有正确检测“让所有选择肢都要有返回值”。

function Int takes integer i returns integer
    return i
endfunction


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

所以像这种东西,没有正确地检测出来而让其通过了。实际上I2UHelper这个函数没有返回值。一个正确的语法检测器其实至少得检测那个条件分支为else的时候是否有返回值。(其实最初的return bug依然是由于语法检测漏洞而导致的。)

这个函数的作用原理是这样。如果一个jass函数没有返回任何值就结束,那么它就会取上一个返回值作为自己的返回值。这个其实是由jass虚拟机的作用方式决定。

很显然,上一个返回值是i,于是到了这里就成了I2UHelper的返回值,并被自动转换为了unit型。
回复

使用道具 举报

发表于 2009-11-22 12:55:11 | 显示全部楼层
…………………………
头目果然厉害
回复

使用道具 举报

发表于 2009-11-22 13:02:49 | 显示全部楼层
那为什么像这样
local unit u = I2UHelper(i)
就不行呢……那个I2UHelper的实际返回值还是什么都没有,但是用在其它函数作参数却有效
回复

使用道具 举报

发表于 2009-11-22 13:08:29 | 显示全部楼层
因为这时候它还没有一个“返回”的动作。所以虽然会把前一个函数当作返回值,但是没有返回动作自然还是返回不出来。

function Unit takes unit u returns unit
    return u
endfunction

function I2U takes integer i returns unit
    return Unit(I2UHelper(i))
endfunction

再在外边套一层Unit才行。

jass属于写多少做多少那种脚本,所以local unit u = 这种,单纯一个等于号并不能让后面的函数返回值,只有出现return才行,大致这样理解好了。
回复

使用道具 举报

发表于 2009-11-22 13:12:36 | 显示全部楼层
恩……那个帖子里我就是这么做的……
jass可真是那啥到可以了,唉唉………………
回复

使用道具 举报

发表于 2009-11-22 13:20:59 | 显示全部楼层
人blz不是ms和sun那种专业做脚本虚拟机的,而是个RTS游戏商。

其实blz本来也没打算开放jass的,就像sc的编辑器从来就没打算开放jass1一样。

只是mpq格式遭人破解,大家都在用jass,于是干脆在tft放了个自定义脚本。


反正自从wow,blz就已经放弃jass了。
回复

使用道具 举报

发表于 2009-11-22 13:25:15 | 显示全部楼层
当然,那个Unit()获取I2UHelper()的返回值的时机在这个函数运行开始的时候,即takes的时候。而不是直到Unit()出现return的时候。


这个是有点区别的。嗯
回复

使用道具 举报

发表于 2009-11-22 13:26:50 | 显示全部楼层
已经有些看不懂了……
回复

使用道具 举报

发表于 2009-11-22 13:28:51 | 显示全部楼层
那么我完整地说一下,return动作会返回参数,takes也会主动式地获取参数。但是=号不会。
回复

使用道具 举报

发表于 2009-11-22 14:23:56 | 显示全部楼层
http://bbs.islga.org/read.php?tid=34878

这里有个演示可以方便大家理解。
回复

使用道具 举报

发表于 2009-11-22 19:07:34 | 显示全部楼层
在想当我没事之后有没有必要到GA补补课,现在GA相对于我,上面全是awesome的资料。而我是工科专业,讲究的是实用,有时在没有理论基础时,依然可以依靠经验和测试来完成对DotA Mechanics的解释……艾艾艾……
回复

使用道具 举报

发表于 2009-11-22 19:22:00 | 显示全部楼层
感觉嫌疑犯同学已经很强大了啊……
不过,有的时候实用的确是第一位的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 07:18 , Processed in 0.031797 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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