找回密码
 点一下
查看: 5988|回复: 22

War3 PTR  1.23B 到1.24A的变化

[复制链接]
发表于 2009-7-11 23:29:22 | 显示全部楼层 |阅读模式
关于1.23a到1.23b的变化看这边
http://bbs.islga.org/read-htm-tid-28544.html

再补充一条:
1.23b相比1.23a增加了一条
[jass]constant native GetTriggerDestructable takes nothing returns destructable[/jass]
可以直接获得触发事件的可破坏物,不需要通过Widget了


然后1.23b到1.24a之间的变化,第一点wisp同学已经有说过了。就是增加了agent类型,把handle细分为agent和非agent 。如
[jass]
type agent       extends     handle  // all reference counted objects
type event              extends     agent  // a reference to an event registration
type player             extends     agent  // a single player reference
type widget             extends     agent  // an interactive game object with life
type unit               extends     widget  // a single unit reference
type destructable       extends     widget
type item               extends     widget
type ability            extends     agent
type buff               extends     ability
type force              extends     agent
type group              extends     agent
type trigger            extends     agent
type triggercondition   extends     agent
type triggeraction      extends     handle
//………………
type gamestate          extends     handle
[/jass]
即有实际指向对象(其实更标准的说法是一切需要计算变量连接数的对象)的变量类型,将继承自agent。然后agent再继承自handle。方便归类。以这里为例的话,trigger就属于agent的handle而gamestate则属于非agent,因为它其实只是拿来保存整数的变量而已,和integer的作用没有区别。

然后别的变化是增加了
[jass]
constant native GetSpellTargetX    takes nothing returns real
constant native GetSpellTargetY    takes nothing returns real
[/jass]
可以直接获得技能目标点的X和Y坐标,这样就可以省去以前用GetSpellTargetLoc()时会创建一个点对象的麻烦了。

实际功能方面
[jass]
native  SaveAgentHandle     takes hashtable table, integer parentKey, integer childKey, agent whichAgent returns boolean
native  SaveHashtableHandle    takes hashtable table, integer parentKey, integer childKey, hashtable whichHashtable returns boolean
native  LoadHashtableHandle   takes hashtable table, integer parentKey, integer childKey returns hashtable
[/jass]
前一条只是为了能把新类型也存入哈希表而已。后两条比较重要,现在1.24允许把哈希表自身作为元素来保存进哈希表,这样就可以非常方便地做出相链接的多重哈希表了。


另外Blizzard.j中除了把agent类型和表中表功能GUI化以外,还修正了1.23b中的一处非常土的BUG。


[jass]
//1.23b中的HaveSavedValue()
function HaveSavedValue takes integer key, integer valueType, integer missionKey, hashtable table returns boolean
    if (valueType == bj_HASHTABLE_BOOLEAN) then
        return HaveSavedBoolean(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_INTEGER) then
        return HaveSavedInteger(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_REAL) then
        return HaveSavedReal(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedString(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then //竟然出现2处bj_HASHTABLE_STRING
        return HaveSavedHandle(table, missionKey, key)
    else
        // Unrecognized value type - ignore the request.
        return false
    endif
endfunction

//1.24A中的HaveSavedValue()
function HaveSavedValue takes integer key, integer valueType, integer missionKey, hashtable table returns boolean
    if (valueType == bj_HASHTABLE_BOOLEAN) then
        return HaveSavedBoolean(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_INTEGER) then
        return HaveSavedInteger(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_REAL) then
        return HaveSavedReal(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_STRING) then
        return HaveSavedString(table, missionKey, key)
    elseif (valueType == bj_HASHTABLE_HANDLE) then  //修正为 bj_HASHTABLE_HANDLE了。
        return HaveSavedHandle(table, missionKey, key)
    else
        // Unrecognized value type - ignore the request.
        return false
    endif
endfunction
[/jass]

评分

参与人数 1威望 +5 收起 理由
血戮魔动冰 + 5 膜拜

查看全部评分

 楼主| 发表于 2009-7-11 23:30:55 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

总的来说~~功能上的改进是~~可以把哈希表本身当作哈希表元素了~~
回复

使用道具 举报

发表于 2009-7-11 23:36:50 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

看完路过。
回复

使用道具 举报

发表于 2009-7-11 23:38:12 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

所以说玻璃渣的工作人员也素喜欢copy&paste的。
回复

使用道具 举报

发表于 2009-7-11 23:39:14 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

挺方便嘛这个版本。
回复

使用道具 举报

发表于 2009-7-12 06:02:37 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

我只知道对我没有影响。。

使用int __cdecl H2I(PVOID h){return h;}的路过。。。
回复

使用道具 举报

发表于 2009-7-12 17:16:32 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

能提供个cj bj么..我有用...

1.24还是要游戏连bn才能下么
回复

使用道具 举报

发表于 2009-7-12 17:22:12 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

坚持使用1.20e =.=!
回复

使用道具 举报

发表于 2009-7-12 17:23:40 | 显示全部楼层

Re:Re:War3 PTR 1.23B 到1.24A的变化

引用第7楼Boss于2009-07-12 17:22发表的 Re:War3 PTR 1.23B 到1.24A的变化 :
坚持使用1.20e =.=!

此类人需要BS……
回复

使用道具 举报

发表于 2009-7-12 17:36:53 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

[JASS]native  SaveAgentHandle     takes hashtable table, integer parentKey, integer childKey, agent whichAgent returns boolean [/JASS]

既然有这个。。

那类型仍不安全。。

比如存了个单位。

用LoadItemHandle取出来


或者子类型不能取?
那存那个有啥用。。。
有LoadAgentHandle 吗
回复

使用道具 举报

发表于 2009-7-12 18:02:02 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

1.20e什么时候才能被打破呢
回复

使用道具 举报

 楼主| 发表于 2009-7-12 20:24:40 | 显示全部楼层

Re:Re:War3 PTR 1.23B 到1.24A的变化

引用第9楼linzefei于2009-07-12 17:36发表的 Re:War3 PTR 1.23B 到1.24A的变化 :
[JASS]native  SaveAgentHandle     takes hashtable table, integer parentKey, integer childKey, agent whichAgent returns boolean [/JASS]

既然有这个。。

那类型仍不安全。。
.......

读不出来的,结果是null
回复

使用道具 举报

 楼主| 发表于 2009-7-12 20:48:36 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

没有loadAgentHandle~~

那个SaveAgentHandle是这样运作的~~它会自动对其保存的handle进行判断~~来得知它到底是那种类型的对象~~

所以你存进去一个单位~~还是只能把它当作单位读出来~~当作物品读就不行~~

简单地说就是会自动判断对象类型的~~
回复

使用道具 举报

发表于 2009-7-12 20:51:16 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

估计效率很慢………………
回复

使用道具 举报

发表于 2009-7-12 21:35:01 | 显示全部楼层

Re:Re:War3 PTR 1.23B 到1.24A的变化

引用第12楼Renee于2009-07-12 20:48发表的 Re:War3 PTR 1.23B 到1.24A的变化 :
没有loadAgentHandle~~

那个SaveAgentHandle是这样运作的~~它会自动对其保存的handle进行判断~~来得知它到底是那种类型的对象~~

所以你存进去一个单位~~还是只能把它当作单位读出来~~当作物品读就不行~~
.......
果然和我预想的一样(刚奔回来准备发帖…)

也就是说,原来简化使用gamecache的个人通用函数
[codes=jass]
function StoreHandle takes handle missionKey,string key,handle value returns nothing
    call StoreInteger(udg_GameCache,H2S(missionKey),key,H2I(value))
endfunction
[/codes]
在1.24依然可以写成
[codes=jass]
function StoreAgent takes handle missionKey,integer key,agent value returns nothing
    call StoreAgentHandle(udg_HashTable,GetHandleID(missionKey),key,value)
endfunction
[/codes]
而在之前的测试版中是做不到的
回复

使用道具 举报

发表于 2009-7-12 21:37:05 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

也就是可以 和缓存那样存任意handle
然后对应读取..那修改缓存版 就很好改了..
回复

使用道具 举报

发表于 2009-7-12 21:39:43 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

地图重构进行中
回复

使用道具 举报

发表于 2009-7-12 21:45:54 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

如果原来就用缓存,应该很好改吧…估计Ctrl H就能完成…
回复

使用道具 举报

发表于 2009-7-13 17:44:17 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

只用H2I的飘过
回复

使用道具 举报

发表于 2009-7-13 19:55:00 | 显示全部楼层

Re:War3 PTR 1.23B 到1.24A的变化

话说中国网吧更新1.23B都花了很长时间,1.24无法想象…
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:46 , Processed in 0.188737 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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