找回密码
 点一下
查看: 2797|回复: 29

关于施法时间加速的效果

[复制链接]
发表于 2009-9-20 09:12:50 | 显示全部楼层 |阅读模式
打个比方吧:

一个施放时间3秒的法术,施法者拥有26%的施法加速提升效果。
那么这个法术的最终施放时间:3/(1+0.26)=2.38秒。

其实就是WOW里的施法加速系统了,大家给我支个招?
发表于 2009-9-20 09:48:24 | 显示全部楼层
工程升级
替换技能

或者是设置英雄的魔发释放点
然后替换英雄
回复

使用道具 举报

 楼主| 发表于 2009-9-20 10:04:03 | 显示全部楼层
引用第1楼light于2009-09-20 09:48发表的  :
工程升级
替换技能

或者是设置英雄的魔发释放点
然后替换英雄
我需要的是动态的效果,也就是人物的施法加速效果会随着装备,BUFF,DEBUFF以及技能的影响而变化。
回复

使用道具 举报

发表于 2009-9-20 16:09:57 | 显示全部楼层
方法1:通过 马甲单位的“闪电之球”技能来释放技能(命令马甲单位攻击) 通过攻速影响技能释放
方法2:开计时器+马甲释放 简单吧
回复

使用道具 举报

发表于 2009-9-20 17:05:44 | 显示全部楼层
………………还有一个方法:
单位开始施法,暂停单位。(此时单位会播放一次施法动作)
等到施法时间结束,恢复单位…………
这个方法极端不好。
回复

使用道具 举报

发表于 2009-9-20 17:25:38 | 显示全部楼层
模拟万岁……话说有一个用多面板做的施法条……
回复

使用道具 举报

发表于 2009-9-20 19:03:24 | 显示全部楼层
一个设想...
所有技能都采用需要持续释放的模版.
每个英雄对应一个全局实数,记录当前咏唱削减时间系数
扑捉准备释放技能的英雄,改变其所属,等待(技能原咏唱秒数)X(削减系数)后,对其发布停止命令.
然后技能效果发生事件为"单位停止释放技能"条件"技能等于XX"AND"单位处于暂停状态=FALSE"
在效果动作完成以后归还释放单位.
改变所属是防止玩家主动停止释放
条件里单位不在暂停状态,是为了让技能变的可打断.
应该可以实现.
回复

使用道具 举报

发表于 2009-9-20 19:06:31 | 显示全部楼层
扑捉准备释放技能的英雄,改变其所属,等待(技能原咏唱秒数)X(削减系数)后,对其发布停止命令.

这个东西和暂停单位的法子比起来要好一点…………不过涉及到切换所属……这就有点麻烦了。
回复

使用道具 举报

发表于 2009-9-20 19:08:55 | 显示全部楼层
恩...切换所属..涉及到被打断了以后..如果要及时切换回来还需要多写一个T...
哦.可以在准备释放里加,开启停止释放启动技能T,再开启一个预设事件,单位被暂停,就立刻切换回所属.并且关闭停止释放启动技能T...
回复

使用道具 举报

发表于 2009-9-20 20:05:27 | 显示全部楼层
触发A
事件:任意单位开始释放技能
条件:技能=技能XXX
动作:开启计时器T 设置时间为(技能原咏唱秒数)X(削减系数)
开启触发B
开启触发C
设置释放单位为U

触发B(初始关闭)
事件:计时器到期
条件:到期计时器=计时器T
动作:对单位U发布停止命令
技能动作XXXXX

触发C(初始关闭)
事件任意单位停止释放技能
条件:技能=技能XXX
AND单位= U
动作:关闭计时器T
关闭触发B
关闭触发C

这样就不用涉及到转换所属了...
有TIMER DATA SYSTEM会方便点...
回复

使用道具 举报

发表于 2009-9-20 20:17:56 | 显示全部楼层
其实方法不需要那么复杂
为所有非顺发技能做一个持续性施法的马甲技能(比如暴风雪,持续时间要很长)
当英雄释放技能时,释放这个马甲技能同时开启一个timer,时间为施法的时间
将timer,施法单位,以及一个布尔值(初始为F)绑定在一起
然后注册动态事件,事件为停止释放技能,动作为设置布尔值为T
timer到期后
判断对应的布尔值是否为F,为F对施法单位发布stop命令并执行技能的效果函数
如果为T则什么也不做


以上为J的方案
如果用T,那么需要使用单位的自定义值,或者为所有可能存在的英雄创建一个布尔值变量,
类似J的方法
同为所有非顺发技能做一个持续性施法的马甲技能(比如暴风雪,持续时间要很长)
当英雄释放技能时,释放这个马甲技能同时开启一个timer,时间为施法的时间,
这个timer有事件为对应timer到期事件的触发,内容为技能效果
然后用添加事件的方法将施法单位停止施法的事件写入内容为设置单位的之定义值或者布尔值(自定义值可以设为某个固定的常数布尔值如J)的触发
当timer到期后,判断自定义值的变化或布尔值变化来决定是否运行效果

注意每次施法前摇重置布尔值
这样通过timer的时间就可以实现施法延时了
同样的,我们也很容易的实现如wow那样被攻击增加施法前摇,或者家少引导时间的效果
回复

使用道具 举报

发表于 2009-9-20 20:22:52 | 显示全部楼层
本来也不算很复杂啊=    =...你要做的时候自然也要用到计时器...实际上写出来也差不多那么长...
前面的帖的前提就是用类BLZ持续释放模版...触发AC..更像是一种对B的补充吧...恩..实际上要做的话应该也有把这个简化成系统的办法的..
回复

使用道具 举报

发表于 2009-9-20 21:07:02 | 显示全部楼层
引用第11楼一个悲剧于2009-09-20 20:22发表的  :
本来也不算很复杂啊=    =...你要做的时候自然也要用到计时器...实际上写出来也差不多那么长...
前面的帖的前提就是用类BLZ持续释放模版...触发AC..更像是一种对B的补充吧...恩..实际上要做的话应该也有把这个简化成系统的办法的..
如果仅仅是单人当然不是很复杂
主要在于多人的局域化……
特别是限定于T的条件下

如果用J就没什么好说的了
反正存储系统什么都可以绑定……
回复

使用道具 举报

发表于 2009-9-21 05:31:48 | 显示全部楼层
………………其实这样吧:
单位设置成瞬发技能设置。
释放任何技能需要首先释放持续XXXXXXX秒的马甲技能
在开始释放之后,等待技能施放时间*系数。
让单位stop,发布技能命令。

唯一一点不好的是,所有技能的前摇就需要绑定了。

应该算是疯人的补充了~

另:
关于施法期间的判断。
如果用设置单位自定义值再在timer到期之后读取,是可能会有Bug的。
(Bug触发条件自己想去)
其实Timer被创建的时候,直接
[jass]call SetUnitUserData( unit, H2I( timer ) )[/jass]
单位中途被打断:
[jass]call RemoveTimer( I2Ti( GetUnitUserData( unit ) ) )[/jass]
这样不就好了?

做到这两点,所有技能应该都可以很好的套进这个系统而且没有Bug~~
回复

使用道具 举报

发表于 2009-9-21 10:54:05 | 显示全部楼层
考虑到不会J的情况……
确实不需要一个布尔值……
用J直接干掉timer就行
回复

使用道具 举报

发表于 2009-9-21 11:58:51 | 显示全部楼层
用到userdata的话要考虑到有没有其它用途唉……
毕竟如果是演示或是什么,不必要考虑自定义值会用到其它地方去,但如果用在地图里,如果什么都用到自定义值,那会冲突死的……
回复

使用道具 举报

发表于 2009-9-21 12:44:32 | 显示全部楼层
……是啊………………
可是如果用HashTable的话…………
回复

使用道具 举报

发表于 2009-9-21 13:34:13 | 显示全部楼层
用好数组也行……
不过对于新手要求比较高
回复

使用道具 举报

发表于 2009-9-21 13:41:14 | 显示全部楼层
个人认为数组的操作繁琐度要远高于hashtable……
回复

使用道具 举报

发表于 2009-9-21 17:18:49 | 显示全部楼层
确实……
有些时候……
某个谋划中的系统
需要用8100个整数的数组
每个整数需要用二进制判断到16位……
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-22 04:25 , Processed in 0.036286 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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