魔兽地图吧's Archiver

堕落圣童 发表于 2007-4-24 03:31

伤害显示系统 - 利用游戏缓存 - 详细讲解(堕落版)

和老狼的方法不一样 - 我用游戏缓存写的- -

希望对大家有所帮助

显示所有伤害 - 完美释放-
[attach]30334[/attach]


代码:

自定义脚本区:


function H2I takes handle h returns integer
   return h
   return 0
endfunction       // ============此函数为将handle(句柄,除整数,实数,字符串等都是handle型)转为 integer
function I2T takes integer i returns trigger
   return i
   return null
endfunction      // ============此函数为将integer(整数)转为trigger(触发)
初始化注册事件保存缓存:
function Trig_t_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()      // ============声明局部变量 u = 触发单位
    call CreateTextTagUnitBJ( R2SW(GetEventDamage(),0,0), u, 0, 11.00, 100, 0.00, 0.00, 0 )
    call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
    call SetTextTagPermanent( GetLastCreatedTextTag(), false )
    call SetTextTagLifespan( GetLastCreatedTextTag(), 3.00 )
    call SetTextTagFadepoint( GetLastCreatedTextTag(), 2.60 )      //=====漂移文字设置 - -(可以用触发写好转化)
    set u = nul      l//========设置 u = 空(释放内存)
endfunction

function Trig_Init_Func005A takes nothing returns nothing
    local unit u = GetEnumUnit()      // ============声明局部变量 u = 选取的单位
    local trigger t = CreateTrigger()      // ============声明局部触发 t = 新建的触发器
    call StoreInteger(udg_ceche,I2S(H2I(u)),"CF",H2I(t))     

      // ============以上这句 - 为为单位绑定触发 - H2I(变量名)这个为此单位唯一值

       I2S  -  为转化为字符串

    call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DAMAGED )

      // ============为触发t添加事件  u 接受伤害

    call TriggerAddAction( t, function Trig_t_Actions )

      // ============添加函数 t 中的动作 到 t触发
    set u = null
           // ============释放内存
endfunction
function Trig_Init_Actions takes nothing returns nothing
    set udg_ceche = InitGameCache( "wow8" )   设置ceche(全局) = 游戏缓存名字为:wow8
    set bj_wantDestroyGroup=true           // ============释放内存语句
    call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Init_Func005A )
// ========单位组选取地图中所有单位   

endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
    set gg_trg_Init = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction



随时注册事件:




function Trig_UnitDome_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()      // ============声明局部变量 u = 触发单位
    local trigger t = CreateTrigger()      // ============声明局部变量 t = 新建触发
    call StoreInteger(udg_ceche,I2S(H2I(u)),"CF",H2I(t))

      // ============以上这句 - 为为单位绑定触发 - H2I(变量名)这个为此单位唯一值
    call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DAMAGED )  
      // ============为 t添加事件, u 接受伤害
    call TriggerAddAction( t, function Trig_t_Actions )
      // ============添加函数 t 中的动作 到 t触发
    set u = null
           // ============释放内存
endfunction


//===========================================================================
function InitTrig_UnitDome takes nothing returns nothing
    set gg_trg_UnitDome = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_UnitDome, GetPlayableMapRect() )
    call TriggerAddAction( gg_trg_UnitDome, function Trig_UnitDome_Actions )
endfunction   

              // ============为触发UnitDome添加事件单位进去地图可用区域



释放:


function Trig_UnitDeath_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()      // ============声明局部变量 u = 触发单位
    local trigger t=I2T(GetStoredInteger(udg_ceche,I2S(H2I(u)),"CF"))
   // ===========设置 局部变量 t = 转化integer为trigger ,读取缓存值 I2S(H2I(u)为此单位唯一值
    call TriggerClearActions(t)
   // ===========删除临时触发 t中的动作
    call DestroyTrigger(t)
   // ===========删除临时触发 t
    call FlushStoredMission( udg_ceche,I2S(H2I(u)))
   // ===========将u 所有缓存清除
    set u = null
  // =========== 释放语句
endfunction
//===========================================================================
function InitTrig_UnitDeath takes nothing returns nothing
    set gg_trg_UnitDeath = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitDeath, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_UnitDeath, function Trig_UnitDeath_Actions )
endfunction

// ===========为触发UnitDeath添加事件单位死亡




详细的每一句就是这样了,有问题大家可以提问,当然可能有些解释不太准确 -

[[i] 本帖最后由 堕落圣童 于 2007-4-24 14:47 编辑 [/i]]

残月星痕 发表于 2007-4-24 08:10

支持童哥:victory:

永恆De神話 发表于 2007-4-24 08:54

飘过- -

彪哥 发表于 2007-4-24 09:03

哎高手就是厉害

龙小天 发表于 2007-4-24 10:58

把代码贴出来吧

feelerly 发表于 2007-4-24 12:38

米看到代码。。~:o

feelerly 发表于 2007-4-24 14:26

终于传上来鸟~

堕落圣童 发表于 2007-4-24 14:43

编辑好了 - - 详细讲解- heh

→冷 发表于 2007-4-24 14:54

貌似用持续添加事件也可以捕做单位所受伤害.:)

堕落圣童 发表于 2007-4-24 14:58

[quote]原帖由 [i]→冷[/i] 于 2007-4-24 14:54 发表 [url=http://bbs.wow8.org/redirect.php?goto=findpost&pid=278436&ptid=25107][img]http://bbs.wow8.org/images/common/back.gif[/img][/url]
貌似用持续添加事件也可以捕做单位所受伤害.:) [/quote]

这个不行额- 无法释放的 - -

kmcxb 发表于 2007-4-24 16:33

f回帖是一种美德,好帖要大家顶的

sdxdcyy 发表于 2007-4-24 21:09

:lol 哟嚯~~~

foolegg 发表于 2007-4-24 21:50

楼主,我想看下你的

InitGameCache()函数,我觉得可能有问题

foolegg 发表于 2007-4-24 21:56

没事了,仔细看了下,没问题的~

foolegg 发表于 2007-4-24 21:58

不过,这个有泄漏哦

call TriggerClearActions(t)

问题出在这句上:]

这个函数并没有真正删除动作

你需要增加一个I2TriggerAction函数

用缓存保存下triggeraction

call SetInteger(udg_c[color=red]e[/color]che,I2S(H2I(u)),"CF",H2I( [color=royalblue]TriggerAddAction( t, function Trig_t_Actions )[/color] ))

最后用

TriggerRemoveAction()函数删除动作

我的黑暗舞者2里有很多这方面的函数,我也没有加密地图,希望对你有帮助:]

[url=http://bbs.wow8.org/viewthread.php?tid=24421]http://bbs.wow8.org/viewthread.php?tid=24421[/url]

最后...udg_c[color=red]e[/color]che...缓存的英文是cache:]

[[i] 本帖最后由 foolegg 于 2007-4-24 22:07 编辑 [/i]]

堕落圣童 发表于 2007-4-24 22:32

寒 - 原来还没释放完- -残念 - 学习中....

堕落圣童 发表于 2007-4-24 22:42

请问- -

call SetInteger(udg_ceche,I2S(H2I(u)),"CF",H2I( TriggerAddAction( t, function Trig_t_Actions ) ))

写在哪- -

我写在添加动作后边会显示函数错误- -

foolegg 发表于 2007-4-24 22:49

用这行替换call TriggerAddAction( t, function Trig_t_Actions )嘛……

另外请不要直接copy,我直接打得,没有做过任何检查…………

而且"CF"这个也要改掉

Red_Wolf 发表于 2007-4-25 13:22

利用单位死亡释放触发是不可取的

当死亡单位被复活时就会出问题

堕落圣童 发表于 2007-4-25 13:31

[quote]原帖由 [i]Red_Wolf[/i] 于 2007-4-25 13:22 发表 [url=http://bbs.wow8.org/redirect.php?goto=findpost&pid=279224&ptid=25107][img]http://bbs.wow8.org/images/common/back.gif[/img][/url]
利用单位死亡释放触发是不可取的

当死亡单位被复活时就会出问题 [/quote]


-0 - 用单位生命值小于0?

Red_Wolf 发表于 2007-4-25 18:04

如果单位死亡就删除触发的话,那么当单位被复活后就不再有伤害显示绑定了
为了要使其复活后能重新绑定触发就需要为它注册个Life>0触发,显然这是浪费资源.不可取的
所以我一直都是在单位从游戏中移除后才释放触发的

[url]http://bbs.uuu9.com/viewthread.php?tid=606105[/url]
可以参考下

newshou 发表于 2007-4-25 18:25

路过顶起  

彪哥 发表于 2007-4-28 19:19

啊童 你不是说你不会JASS吗 怎么突然闹了这个?????

新新菜鸟 发表于 2007-4-28 21:58

哈哈~~完全看不懂:lol

iihuab 发表于 2007-5-3 20:45

貌似很难懂

foodbig 发表于 2007-9-5 17:16

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

acer01 发表于 2007-11-19 17:04

学习学习:(
好难的说

yxxiaobin 发表于 2007-12-7 20:33

都素强人,看不懂,期待以T为主的,必要时使用自定义JASS语句。
估计这样看懂的人能多点。

yxxiaobin 发表于 2007-12-12 22:00

写注释的不详细,因为我看不懂。

Gary 发表于 2007-12-26 15:58

:rose :rose

sxlrose 发表于 2007-12-27 15:17

好贴是要大家一起顶的!!

华丽而无痕地路过~~

悬崖乐马 发表于 2008-1-26 13:38

又没智利下了额

悬崖乐马 发表于 2008-2-21 14:19

学习下喽

zmllzbh 发表于 2008-7-15 12:22

死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...

kk88827 发表于 2008-8-17 02:07

今天无聊翻帖完.
发现了这个对自己很有帮助的帖.
于是不顾一切的顶了!(葱头:30)

『四裤全输』 发表于 2008-8-17 05:32

现在还不想接触J,害怕付出了却得不到。

HVH 发表于 2008-8-20 12:19

貌似我实验时发现
英雄死亡复活后就没有伤害显示了

huangyiwen20 发表于 2008-8-20 19:56

好像早有了啊

lrj48 发表于 2008-9-7 11:02

好东西。

lrj48 发表于 2008-9-7 11:04

再支持个

页: [1] 2

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.