找回密码
 点一下
查看: 2993|回复: 21

请问如何用T触发做出“任意单位接收伤害事件?”

[复制链接]
发表于 2009-11-19 12:23:49 | 显示全部楼层 |阅读模式
请问如何用T触发做出“任意单位接收伤害事件?”
[trigger]
s s 1
    事件
        单位 - 单位进入 (可用地图区域)
    条件
    动作
        设置 jssh = ((可用地图区域) 内的所有单位)
        单位组 - 选取 jssh 内所有单位做动作
            Loop - 动作
                触发器 - 为 s s 2 <预设> 添加事件: (单位 - (选取单位) 接受伤害)
        单位组 - 删除 jssh
[/trigger]
我试图这样做的时候。发现ss2触发器被添加了n多个事件,以至于卡死,请问怎样能删除事件?
发表于 2009-11-19 12:47:06 | 显示全部楼层
触发器 - 为 s s 2 <预设> 添加事件: (单位 - (选取单位) 接受伤害)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我觉得这句有问题,画蛇添足了
回复

使用道具 举报

发表于 2009-11-19 12:59:41 | 显示全部楼层
你这样弄的话就会导致单位被重复添加。
应该分成3个触发,第一个是地图初始化,动作就是选取全图单位添加事件。第二个就是任意单位进入地图,添加事件是触发单位受到伤害。这样第三个触发才不会悲剧。
回复

使用道具 举报

 楼主| 发表于 2009-11-19 13:02:51 | 显示全部楼层
事实上,就是因为只有选取单位接受伤害的事件选项,没有任意单位接受伤害的事件选项...
回复

使用道具 举报

 楼主| 发表于 2009-11-19 14:01:18 | 显示全部楼层
2楼说的有道理,原来如此...
啊,还是不对,反正只要有单位进入地图就会添加一次事件,如果一个单位死了以后再次进入地图就会引发两次事件...
头痛ing...
回复

使用道具 举报

发表于 2009-11-19 15:13:24 | 显示全部楼层
引用第4楼168350026于2009-11-19 14:01发表的  :
2楼说的有道理,原来如此...
啊,还是不对,反正只要有单位进入地图就会添加一次事件,如果一个单位死了以后再次进入地图就会引发两次事件...
头痛ing...
以前自己测试了一个触发器有10万个事件也不觉得对游戏任何影响
如小A所说,地图开始选取下所有单位注册进去
然后中途有新单位也捕捉了注册进去
回复

使用道具 举报

发表于 2009-11-19 19:56:29 | 显示全部楼层
需要2个注册用触发a、b和1个实际效果触发c
触发a是地图初始化时选取所有单位为触发c注册选取单位受伤害事件
触发b是单位进入地图区域时为触发c注册触发单位接收伤害事件
回复

使用道具 举报

发表于 2009-11-19 21:31:29 | 显示全部楼层
任意单位进入地图区域

判断单位类型 随意

为触发器2添加触发单位接受伤害
回复

使用道具 举报

发表于 2009-11-20 14:48:20 | 显示全部楼层
多去翻演示。
然后理解消化后加以应用。
PS:动态注册用J罢,别指望T了。
回复

使用道具 举报

发表于 2009-11-20 15:20:09 | 显示全部楼层
动态注册单位受伤事件是有一定几率注册失败的
回复

使用道具 举报

发表于 2009-11-20 15:25:57 | 显示全部楼层
第一嘛,动态注册用触发器做完全可行。

第二嘛,地下室楼的考量其实不无道理。

到目前为止头目教给大家的动态注册伤害方案其实都是十分草率的。一个是注册所有预置单位,一个是给中途加入地图的单位注册事件。


问题在于呢,如果同一个单位两次进入地图,确实会有2个事件。这个并不是没问题的。如果一个触发器有2个相同事件,意味着当事件触发的时候它将执行2次。


所以,如果严谨地考虑问题,那么就需要用以下2种手段之一来规避单位受伤事件被多次触发。

方案1,用hashtable或者数组记录下当前在案的所有单位ID。每次动态注册新的单位受伤事件时都先在表中进行查询。以免出现多次注册同一单位的问题。

方案2,不处理多次注册的问题,而是在执行时规避,当事件触发时临时关闭触发器(只关闭极小一段时间),以免重复触发。
回复

使用道具 举报

发表于 2009-11-20 15:35:41 | 显示全部楼层
如果是124之前版本就用handle值判断罢……
回复

使用道具 举报

发表于 2009-11-20 15:40:07 | 显示全部楼层
将所有单位纳入单位组中,然后判断新进入地图的单位是否在单位组中也是个方法。


或者利用下单位自定义值。
回复

使用道具 举报

发表于 2009-11-20 15:47:06 | 显示全部楼层
还是单位组简单实用……
只是随便提提而且没有任何了解,用GC应该也是可以的罢……?
回复

使用道具 举报

发表于 2009-11-20 15:50:50 | 显示全部楼层
我想不出gamecache这种东西在多人模式下有任何存在的意义。

慢么又慢,又会导致handle错乱。又导致地图互通漏洞什么的。

这东西就该只拿来做单人战役的存储功能。
回复

使用道具 举报

发表于 2009-11-28 16:32:19 | 显示全部楼层
原版we不是有
A unit 受到傷害嗎?
回复

使用道具 举报

发表于 2009-11-28 18:04:45 | 显示全部楼层
那只是单个单位受到伤害而已,无论原版还是什么都不可能有任意单位受伤害这样的事件,玻璃渣根本没提供这玩艺
回复

使用道具 举报

发表于 2009-11-28 20:26:12 | 显示全部楼层
但是那個A unit受到傷害
那個A unit不用選擇為某部隊
而且也不能選擇
我用那個能做到任意單位受到傷害...
不是太明白
回复

使用道具 举报

发表于 2009-11-28 21:13:26 | 显示全部楼层
学动态注册去。
回复

使用道具 举报

发表于 2009-11-28 22:12:04 | 显示全部楼层
引用第17楼bnb2005于2009-11-28 20:26发表的  :
但是那個A unit受到傷害
那個A unit不用選擇為某部隊
而且也不能選擇
我用那個能做到任意單位受到傷害...
不是太明白


某个翻译得超垃圾的版本里有这个东西,不过它只是翻译错误的产物而已。

你真能用这个实现任意单位受伤就怪了。

其实那个事件的原文是Decays.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 23:14 , Processed in 0.159930 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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