找回密码
 点一下
查看: 2550|回复: 36

关于模拟可叠加类献祭技能

[复制链接]
发表于 2012-8-22 05:54:05 | 显示全部楼层 |阅读模式
请问一下如何模拟可叠加类献祭技能

比如我发动某技能,那么在接下来的持续时间内我每0.01秒就能对范围内的敌人造成伤害

但同一个敌人受到伤害的后会有1秒的间隔才会受到第二次伤害

需要支持多玩家多单位的情况下使用

嗯……无奈,我想来想去可行的方法只有把伤害调整为计时器倍数……

比如0.01秒的循环计时器的话就要把伤害设置为1%,假设每秒造成100点的伤害就需要每0.01秒造成1点

虽然这样感觉很不错,但是会疯狂的触发接受伤害的被动技能,感觉太消耗资源而且那些触发的被动效果会太变态或出现BUG

请问各位有其他的方法模拟么?
 楼主| 发表于 2012-8-22 06:24:32 | 显示全部楼层
还有一个致命的问题就是,开启了显示伤害文字的系统时,那么在持续时间内所有的漂浮文字都会集中在这里

因为漂浮文字的上限原因导致这点很蛋疼
回复

使用道具 举报

发表于 2012-8-22 10:22:24 | 显示全部楼层
像这样?
另外我只有YDWE,我没有用YDWE的功能,不知道你能看不


附件怎么崩了?额,现在这个是个坑人的货,里面有个条件判断好像没用了 献祭.w3x (160 KB, 下载次数: 21)
诶,我为什么还要传呢
回复

使用道具 举报

发表于 2012-8-22 11:18:53 | 显示全部楼层
对敌人造成伤害后,就将敌人加入单位组或者单位数组,一秒后移除
然后每秒选取单位的时候检查单位组就可以避免重复伤害了
回复

使用道具 举报

发表于 2012-8-22 13:00:24 | 显示全部楼层
其实可以用触发器来选取范围内的单位,然后设置单位血量,如果血量低于伤害值的话,就让英雄对其造成伤害……
回复

使用道具 举报

 楼主| 发表于 2012-8-22 19:19:38 | 显示全部楼层

回 美味豆沙包 的帖子

美味豆沙包:对敌人造成伤害后,就将敌人加入单位组或者单位数组,一秒后移除
然后每秒选取单位的时候检查单位组就可以避免重复伤害了 (2012-08-22 11:18)
我最初就是这样做的,但是这样也有个致命的缺点,无法同步先后接近单位

比如我一秒前最Unit A造成了伤害,而这时Unit B才接近,那么B就会卡在这个时间差没有受到伤害

虽然只是小问题,但是很有可能会造成极限逃走极限反杀的情况什么的,我个人也觉得不好。
回复

使用道具 举报

 楼主| 发表于 2012-8-22 19:20:33 | 显示全部楼层

回 lo 的帖子

lo:其实可以用触发器来选取范围内的单位,然后设置单位血量,如果血量低于伤害值的话,就让英雄对其造成伤害…… (2012-08-22 13:00)
首先致命的缺点和楼上一样,其次就是设置单位血量的话无法计算抗性什么的。
回复

使用道具 举报

发表于 2012-8-23 13:31:01 | 显示全部楼层

回 冷漠 的帖子

冷漠:我最初就是这样做的,但是这样也有个致命的缺点,无法同步先后接近单位

比如我一秒前最Unit A造成了伤害,而这时Unit B才接近,那么B就会卡在这个时间差没有受到伤害

.......(2012-08-22 19:19)嬀/color]
你理解错了吧

我是指每0.01秒选取一次单位,然后造成伤害后将单位加入单位组

加入单位组的单位在1秒内无法被再次伤害,一秒后将单位从单位组中移除
回复

使用道具 举报

 楼主| 发表于 2012-8-23 19:24:34 | 显示全部楼层

回 美味豆沙包 的帖子

美味豆沙包:你理解错了吧

我是指每0.01秒选取一次单位,然后造成伤害后将单位加入单位组

....... (2012-08-23 13:31)
这样没办法叠加效果,只有一个有效,不然我就不会那么烦了。
回复

使用道具 举报

发表于 2012-8-23 20:27:10 | 显示全部楼层
谁说那样就不能叠加了?
每个施法者绑一个单独的单位组就可以了
http://bbs.islga.org/read-htm-tid-50175.html
不懂怎么绑的参考这里
回复

使用道具 举报

 楼主| 发表于 2012-8-24 00:54:14 | 显示全部楼层

回 美味豆沙包 的帖子

美味豆沙包:谁说那样就不能叠加了?
每个施法者绑一个单独的单位组就可以了
http://bbs.islga.org/read-htm-tid-50175.html
不懂怎么绑的参考这里 (2012-08-23 20:27)
循环法多人绑定我会,但是多人多单位就没头绪。
回复

使用道具 举报

发表于 2012-8-24 21:14:44 | 显示全部楼层
冷漠:循环法多人绑定我会,但是多人多单位就没头绪。 (2012-08-24 00:54)
LZ还没学会哈希表吗~
回复

使用道具 举报

 楼主| 发表于 2012-8-25 20:53:53 | 显示全部楼层

回 chyj4747 的帖子

chyj4747:

LZ还没学会哈希表吗~
学不会
回复

使用道具 举报

发表于 2012-8-25 21:05:35 | 显示全部楼层
接受伤害事件,伤害来源是X,伤害来源拥有BUFF等于真,触发单位拥有BUFF等于真,伤害值小于或等于1,造成伤害,OK
回复

使用道具 举报

 楼主| 发表于 2012-8-25 23:07:58 | 显示全部楼层

回 lsltdz42 的帖子

lsltdz42:接受伤害事件,伤害来源是X,伤害来源拥有BUFF等于真,触发单位拥有BUFF等于真,伤害值小于或等于1,造成伤害,OK (2012-08-25 21:05)
哇~~~好厉害(求吐槽


回复

使用道具 举报

 楼主| 发表于 2012-8-26 20:25:03 | 显示全部楼层
[trigger]
Set
    事件
        单位 - 任意单位 发动技能效果
    条件
    动作
        设置 Count_01 = (Count_01 + 1)
        设置 Count_03 = (Count_03 + 1)
        设置 Hero[Count_01] = (触发单位)
        如果 ((Damage <预设> 处于开启状态) 不等于 TRUE) 成立则 (触发器 - 开启 Damage <预设>) 否则 (--------   --------)
[/trigger]
[trigger]
Damage
    事件
        时间 - 每 0.01 秒触发事件
    条件
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                Count_01 不等于 0
            Then - 动作
                For Index_01 从 1 到 Count_01, 做动作
                    Loop - 动作
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                (Hero[Index_01] 拥有 神圣护甲) 等于 TRUE
                            Then - 动作
                                设置 Location[0] = (Hero[Index_01] 的位置)
                                设置 Group[Index_01] = (半径为 500.00 圆心为 Location[0] 且满足 ((((匹配单位) 是存活的) 等于 TRUE) and (((匹配单位) 是 (Hero[Index_01] 的所有者) 的敌对单位) 等于 TRUE)) 的所有单位)
                                单位组 - 选取 Group[Index_01] 内所有单位做动作
                                    Loop - 动作
                                        For Index_02 从 1 到 Count_02[Index_01], 做动作
                                            Loop - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        (选取单位) 等于 Unit[Index_02]
                                                    Then - 动作
                                                        设置 Boolean[0] = TRUE
                                                    Else - 动作
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                Boolean[0] 不等于 TRUE
                                            Then - 动作
                                                设置 Count_02[Index_01] = (Count_02[Index_01] + 1)
                                                设置 Unit[Count_02[Index_01]] = (选取单位)
                                                单位 - 命令 Hero[Index_01] 对 Unit[Count_02[Index_01]] 造成 30.00 点伤害,攻击类型: 法术 伤害类型: 魔法
                                                设置 Integer[Count_02[Index_01]] = 99
                                                如果 ((Damage Cd <预设> 处于开启状态) 不等于 TRUE) 成立则 (触发器 - 开启 Damage Cd <预设>) 否则 (--------   --------)
                                            Else - 动作
                                        设置 Boolean[0] = FALSE
                                单位组 - 删除 Group[Index_01]
                                点 - 清除 Location[0]
                            Else - 动作
                                设置 Hero[Index_01] = Hero[Count_01]
                                设置 Hero[Count_01] = 没有单位
                                设置 Index_01 = (Index_01 - 1)
                                设置 Count_01 = (Count_01 - 1)
            Else - 动作
                触发器 - 关闭 (当前触发)
                游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 关闭持续时间...
[/trigger]
[trigger]
Damage Cd
    事件
        时间 - 每 0.01 秒触发事件
    条件
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                Count_03 不等于 0
            Then - 动作
                For Index_03[Count_03] 从 1 到 Count_02[Count_03], 做动作
                    Loop - 动作
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                Integer[Index_03[Count_03]] 不等于 0
                            Then - 动作
                                设置 Integer[Index_03[Count_03]] = (Integer[Index_03[Count_03]] - 1)
                            Else - 动作
                                设置 Unit[Index_03[Count_03]] = Unit[Count_02[Count_03]]
                                设置 Unit[Count_02[Count_03]] = 没有单位
                                设置 Integer[Index_03[Count_03]] = Integer[Count_02[Count_03]]
                                设置 Integer[Count_02[Count_03]] = 0
                                设置 Index_03[Count_03] = (Index_03[Count_03] - 1)
                                设置 Count_02[Count_03] = (Count_02[Count_03] - 1)
            Else - 动作
                触发器 - 关闭 (当前触发)
                游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 关闭伤害间隔...
[/trigger]


基本触发写成了这样,但是在伤害CD那里不知道怎么减少Counet_03的数值,求解
回复

使用道具 举报

 楼主| 发表于 2012-8-26 20:33:12 | 显示全部楼层
帮忙看看
回复

使用道具 举报

发表于 2012-8-26 21:30:14 | 显示全部楼层
额。。。刚才用纯T试了下……即便用哈希也好难写,并且因为要每0.01秒注册N个计时器事件所以效率会很低
但是如果是J的话不管写起来还是效率都会很快。。

而且LZ那索引套索引的写法小心以后分不清。。。
回复

使用道具 举报

 楼主| 发表于 2012-8-27 00:58:01 | 显示全部楼层
chyj4747:
额。。。刚才用纯T试了下……即便用哈希也好难写,并且因为要每0.01秒注册N个计时器事件所以效率会很低
但是如果是J的话不管写起来还是效率都会很快。。

而且LZ那索引套索引的写法小心以后分不清。。。
已经有点分不清了……

我脑子里虽然有逻辑关系,但是就是弄不明白该怎么写才对

或许说目前的情况属于可以造成伤害,可以计算间隔

但是没有做到正确的排泄,因此无法正确
回复

使用道具 举报

 楼主| 发表于 2012-8-27 00:59:06 | 显示全部楼层

回 chyj4747 的帖子

chyj4747:额。。。刚才用纯T试了下……即便用哈希也好难写,并且因为要每0.01秒注册N个计时器事件所以效率会很低
但是如果是J的话不管写起来还是效率都会很快。。

而且LZ那索引套索引的写法小心以后分不清。。。
(2012-08-26 21:30)
计时器是肯定不能用的,N个释放者*N个受伤者的计时器,想想都可怕
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 08:25 , Processed in 0.137986 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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