找回密码
 点一下
查看: 2451|回复: 33

问下做复活J的问题

[复制链接]
发表于 2008-8-31 14:45:08 | 显示全部楼层 |阅读模式
上次我做的那个J有问题的,计时器结束,窗口没删掉,英雄无复活,我的那个图,BOSS放一个技能全部人死了(即英雄同时死亡).
[codes=jass]local unit u =GetTriggerUnit()[/codes]
//这里应该是不能同时2个单位一起记录的吧.我想做1个能够多人复活的J,我的思路是,给每个英雄都创建1个触发,不知这样做好不好,有不创建触发的办法吗?

(错误的演示在20楼.)
发表于 2008-8-31 14:47:05 | 显示全部楼层
英雄死亡触发事件可以看作是并行的,不会冲突的
回复

使用道具 举报

 楼主| 发表于 2008-8-31 14:49:07 | 显示全部楼层
问题就是,我有好多个英雄同时死亡,计时器到期了都不复活.我的思路是,给每个英雄都创建1个触发,不知这样做好不好,有不创建触发的办法吗?
回复

使用道具 举报

发表于 2008-8-31 15:05:27 | 显示全部楼层
动态注册本来就是一个英雄一个触发,死掉创建,复活了删除
回复

使用道具 举报

 楼主| 发表于 2008-8-31 15:19:34 | 显示全部楼层
上次做的那个啊,
事件:单位死亡
条件:单位是英雄
动作:local unit u =GetTriggerUnit()
   .....
我这样写,出现了BUG,我想不出有什么办法解决,就只想到给每个英雄都绑1个触发,我想问的就是能有不用给每个英雄都绑触发的写法吗?我有事一会回来.
回复

使用道具 举报

发表于 2008-8-31 15:49:58 | 显示全部楼层
任意单位死亡
单位是英雄
等10秒
复活英雄
回复

使用道具 举报

 楼主| 发表于 2008-8-31 16:27:13 | 显示全部楼层
即是怎么写?用time应该是比等待好啊.我的意思是,单位死亡,你要写local unit u =GetTriggerUnit()
将他记录,但是2个单位一起死亡呢?要怎么写啊?要用单位组?
回复

使用道具 举报

发表于 2008-8-31 16:34:37 | 显示全部楼层
100个单位死也没问题
回复

使用道具 举报

 楼主| 发表于 2008-8-31 16:39:09 | 显示全部楼层
我就是local unit u =GetTriggerUnit()这样写,不过有BUG啊,我不知哪出问题啦
[codes=jass]function tiaojian takes nothing returns boolean
      if (not(IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO) == true)) then
            return false
      endif
      return true
endfunction

function jishiqi takes nothing returns nothing
      local unit u =I2U(GetStoredInteger(GameCache(),I2S(H2I(GetExpiredTimer())),"TriggerUnit"))
      if (not(IsUnitAlly(u,Player(11)) == true)) then
            call ReviveHeroLoc(u,GetRectCenter(udg_a),false)
      else
            call ReviveHeroLoc(u,GetRectCenter(udg_b),false)
      endif
      call SetUnitManaPercentBJ(u,100)
      set u = null
endfunction

function fh takes nothing returns nothing
      local unit u = GetTriggerUnit()
      local timer t = CreateTimer()
      local timerdialog td = CreateTimerDialog(t)
      call TimerDialogSetTitle(td, GetPlayerName(GetOwningPlayer(GetTriggerUnit())) + "复活时间:" )
      call StoreInteger(GameCache(),I2S(H2I(t)),"TriggerUnit",H2I(u))   
      call StoreInteger(GameCache(),I2S(H2I(u)),"Timer",H2I(t))
      call StoreInteger(GameCache(),I2S(H2I(u)),"TimerDialog",H2I(td))
      call TimerStart(t,180,false,function jishiqi)
      call TimerDialogDisplay(td,true)
      set u = null
      set t = null
      set td = null
endfunction

function Revive takes nothing returns nothing
      local timer t = I2T(GetStoredInteger(GameCache(),I2S(H2I(GetTriggerUnit())),"Timer"))
      local timerdialog td = I2TD(GetStoredInteger(GameCache(),I2S(H2I(GetTriggerUnit())),"TimerDialog"))
      call DestroyTimerDialog(td)
      call PauseTimer(t)
      call DestroyTimer(t)
      call FlushStoredMission(GameCache(), I2S(H2I(GetTriggerUnit())))
      call FlushStoredMission(GameCache(), I2S(H2I(t)))
      set t = null
      set td = null
endfunction

function InitTrig_rh takes nothing returns nothing
      local trigger tri0 = CreateTrigger()
      local trigger tri1 = CreateTrigger()
      call TriggerRegisterAnyUnitEventBJ(tri0,EVENT_PLAYER_UNIT_DEATH)
      call TriggerAddCondition(tri0,Condition(function tiaojian))
      call TriggerAddAction(tri0,function fh)
      call TriggerRegisterAnyUnitEventBJ(tri1,EVENT_PLAYER_HERO_REVIVE_FINISH)
      call TriggerAddCondition(tri1,Condition(function tiaojian))
      call TriggerAddAction(tri1,function Revive)
      set tri0 = null
      set tri1 = null
endfunction[/codes]
回复

使用道具 举报

发表于 2008-8-31 18:10:37 | 显示全部楼层
测试了下
ls的代码没问题啊

111.w3x

19 KB, 下载次数: 12

回复

使用道具 举报

 楼主| 发表于 2008-8-31 18:45:38 | 显示全部楼层
真的?但是我自己试就出问题了,,一群英雄被杀就会出BUG了,单个英雄就没事.
回复

使用道具 举报

发表于 2008-8-31 23:11:39 | 显示全部楼层
提醒下LZ,既然是动态注册了,,就不要注册的是玩家单位死亡啊,,,直接注册触发单位的死亡事件不好么?
还有我觉得第二个触发器tri1没必要吧?在复活英雄的时候就可以把计时器的窗口和计时器干掉了吧?

local unit u =GetTriggerUnit() 是可以同时记录的,没关系的

说得不好不要见怪
回复

使用道具 举报

 楼主| 发表于 2008-8-31 23:19:28 | 显示全部楼层
引用第11楼laomang11于2008-08-31 23:11发表的  :
提醒下LZ,既然是动态注册了,,就不要注册的是玩家单位死亡啊,,,直接注册触发单位的死亡事件不好么?
还有我觉得第二个触发器tri1没必要吧?在复活英雄的时候就可以把计时器的窗口和计时器干掉了吧?

local unit u =GetTriggerUnit() 是可以同时记录的,没关系的

.......


既然local unit u =GetTriggerUnit() 可以同时记录,那么是哪错了了,
动态?怎么改啊?11楼的意思是什么?tri1这个,我自己认为这样写没有什么不对啊.
回复

使用道具 举报

发表于 2008-8-31 23:24:59 | 显示全部楼层
不是不对,我是觉得没这个必要...你写在 jishiqi 这个里面就可以了..复活单位的同时,可以把计时器窗口和计时器都干掉,不用多2个function
回复

使用道具 举报

发表于 2008-8-31 23:48:40 | 显示全部楼层
lz这个其实也算不上是动态的………………

代码没看出问题,刚才测试了也没问题,不知道lz的问题哪来的了………………

附测试地图

test.w3x (22 KB, 下载次数: 12)
回复

使用道具 举报

 楼主| 发表于 2008-8-31 23:49:26 | 显示全部楼层
哦.但是英雄在计时器没到期就复活的话,这样就有必要写了吧.

提醒下LZ,既然是动态注册了,,就不要注册的是玩家单位死亡啊,,,直接注册触发单位的死亡事件不好么?
这句话指什么?唉,我说得太不清楚了,我的意思是,我的地图里用了这个代码,但是1个BOSS把几个英雄一起杀掉,BUG就出现了.
回复

使用道具 举报

发表于 2008-8-31 23:57:11 | 显示全部楼层
引用第13楼laomang11于2008-08-31 23:24发表的  :
不是不对,我是觉得没这个必要...你写在 jishiqi 这个里面就可以了..复活单位的同时,可以把计时器窗口和计时器都干掉,不用多2个function

为lz解释一下,那个复活的触发是为了酒馆复活准备的
回复

使用道具 举报

 楼主| 发表于 2008-9-1 00:01:43 | 显示全部楼层
问下猪头大人,这J应该怎么解决?
回复

使用道具 举报

发表于 2008-9-1 00:04:13 | 显示全部楼层
你看下14楼的演示,你的代码一点也没动,只加上了return bug和缓存初始化的代码,完全正常,没有异常出现呢………………
回复

使用道具 举报

发表于 2008-9-1 00:15:33 | 显示全部楼层
原来如此呢,,谢谢猪头..
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 22:42 , Processed in 0.058039 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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