找回密码
 点一下
查看: 1005|回复: 5

Jass_return bug缓存记录的问题.

[复制链接]
发表于 2008-11-6 18:38:04 | 显示全部楼层 |阅读模式
[codes=jass]function www takes nothing returns nothing
local unit u = GetTriggerUnit()
call StoreInteger(GameCache(),I2S(H2I(t)),"TriggerUnit",H2I(u))
set u = null
endfunction

function qqq takes nothing returns nothing
local unit u = I2U(GetStoredInteger(GameCache(),I2S(H2I(t)),"TriggerUnit"))
set u = null
endfunction[/codes]

I2R 整数->实数       R2I 实数->整数
I2S 整数->字符串     R2S 实数->字符串
S2I字符串-> 整数    S2R字符串-> 实数

记录的单位数据I2S有字符串留下?如果有,那么还有其他的记录单位的句子吗?
怎么将www与qqq连在一起?

[codes=jass]//===========================================================================
function InitTrig_test takes nothing returns nothing
      set gg_trg_test = CreateTrigger(   )
      call TriggerRegisterAnyUnitEventBJ( gg_trg_test, EVENT_PLAYER_UNIT_SPELL_EFFECT )
      call TriggerAddAction( gg_trg_test, function Trig_test_Actions )
endfunction[/codes]
//===========================================================================
把上面这行东西删掉会不会有影响?
发表于 2008-11-6 19:11:35 | 显示全部楼层
记录的单位数据I2S有字符串留下?如果有,那么还有其他的记录单位的句子吗?

你指什么?string泄漏吗?如果是的话的确有,但是很少。
怎么将www与qqq连在一起?

虽然有点不明白什么意思,但有一种数据类型叫code.........一般来说两个函数连接用timer,trigger,group等等.......
把上面这行东西删掉会不会有影响?

这个......是生成触发的函数吧......你可以删了,只不过function www 里就不能用GetTriggerUnit()了,要看你真正执行效果的函数是要脱离触发存在还是不脱离.
回复

使用道具 举报

 楼主| 发表于 2008-11-6 19:23:42 | 显示全部楼层
⑴有string泄漏的话,要怎么写才不泄漏?

⑵连在一起就是你所说的函数连接嘛~

⑶即什么意思?GetTriggerUnit()不能用?
回复

使用道具 举报

发表于 2008-11-6 19:33:21 | 显示全部楼层
(1) .......这个,我是从来54这种小泄漏啦........WC3里的string效率很高,只要你不写成
[jass]
StoreInteger(udg_GC,I2S(H2I(t)),"caster"+I2S(H2I(trg)),H2I(GetTriggerUnit()))
[/jass]
之类的就行了..........(引用某大)

(2)比如说 function www 是一单位释放一技能, function qqq 是一 timer 映射函数,于是就写成了:
[jass]

function www takes nothing returns nothing
local unit u = GetTriggerUnit()
local timer t = CreateTimer()
call StoreInteger(GameCache(),I2S(H2I(t)),"TriggerUnit",H2I(u))
call TimerStart(t,1,false,function qqq)
set u = null
endfunction

function qqq takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = I2U(GetStoredInteger(GameCache(),I2S(H2I(t)),"TriggerUnit"))
set u = null
set t = null
endfunction
[/jass]

(3)因为你这个函数并没有属于任何一个Trigger,所以GetTriggerUnit()返回的就是null了。除非用TriggerAddAction,TriggerAddCondition等函数把该函数"加"到某一Trigger下。
回复

使用道具 举报

 楼主| 发表于 2008-11-6 19:42:05 | 显示全部楼层
⑶还是看不明.
[codes=jass]function InitTrig_A00N takes nothing returns nothing
    set gg_trg_A00N = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_A00N,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_A00N,Condition(function Trig_A00N_Conditions))
    call TriggerAddAction(gg_trg_A00N,function Trig_A00N_Actions)
endfunction[/codes]
这样?我这样写能写local unit u = GetTriggerUnit()这句啊....
回复

使用道具 举报

发表于 2008-11-6 19:48:51 | 显示全部楼层
比如说以下两种情况:
1、
[jass]
function a takes nothing returns nothing
    local unit u = GetTriggerUnit()
    call BJDebugMsg(I2S(H2I(u)))
endfunction

function b takes nothing returns nothing
    set gg_trg_a = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_a,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddAction(gg_trg_a,function a)
endfunction
[/jass]

2、
[jass]
function a takes nothing returns nothing
    local unit u = GetTriggerUnit()
    call BJDebugMsg(I2S(H2I(u)))
endfunction

//注意,底下是没有滴。
[/jass]

1在屏幕上看到就是触发单位的Handle值,而2则是0(GetTriggerUnit()返回的是null)。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-21 10:34 , Processed in 0.040806 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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