钩钩的小可爱吧 关注:36贴子:2,340

我是萌萌滴新人

只看楼主收藏回复

前来报道啦


IP属地:上海来自Android客户端1楼2014-08-27 01:06回复
    先来暖床


    来自Android客户端2楼2014-08-27 09:11
    收起回复
      小幻幻,想看看你触发有多厉害了出两道题:如何用逆天做一个单体对敌技能,目标15秒内施法就扣血;如何用逆天做一个回复技能,目标5秒内每0.1秒回血,但是目标500码内有敌人施法治疗间隔变成1秒?存在不费蓝技能不可以记录魔法值哦~这个吧其它伙伴不会的话也可以来看看哦~如果可能的话,写在一个触发里面哦~


      IP属地:湖北来自Android客户端3楼2014-08-27 10:01
      收起回复
        未命名触发器 001
        事件
        单位 - 任意单位 发动技能效果
        条件
        动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (施放技能) 等于 施法扣血
        Then - 动作
        逆天<YDWE> - 设置 [单位] loc_a = (技能施放目标)
        逆天<YDWE> - 设置 [单位] loc_b = (触发单位)
        逆天<YDWE> - 设置 [单位] (loc_a) 的 施法扣血持续时间 为 [整数]0
        特殊效果 - 创建并绑定特效到 overhead 对 (loc_a) ,使用模型: Abilities\Spells\Other\SoulBurn\SoulBurnbuff.mdl
        特殊效果 - 在 15.00 秒后删除 最后创建的特效 <New>
        逆天<YDWE> - 立即运行 (新建的计时器) 时间设置: 1.00 秒,是否循环: 循环
        参数
        逆天<YDWE> - 设置 [单位] loc_a = (loc_a)
        动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (获取 [单位] (loc_a) 的 施法扣血持续时间) 等于 15
        Then - 动作
        逆天<YDWE> - 清除当前逆天计时器
        Else - 动作
        逆天<YDWE> - 设置 [单位] (loc_a) 的 施法扣血持续时间 为 [整数]((获取 [单位] (loc_a) 的 施法扣血持续时间) + 1)
        逆天<YDWE> - 注册 (新建触发)
        事件
        单位 - (loc_a) 发动技能效果
        参数
        逆天<YDWE> - 设置 [单位] loc_a = (loc_a)
        逆天<YDWE> - 设置 [单位] loc_b = (loc_b)
        动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (获取 [单位] (loc_a) 的 施法扣血持续时间) 小于 15
        Then - 动作
        单位 - 命令 (loc_b) 对 (loc_a) 造成 100.00 点伤害,攻击类型: 法术 伤害类型: 普通
        Else - 动作
        逆天<YDWE> - 清除当前逆天触发器
        跳过剩余动作
        Else - 动作
        不做任何动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (施放技能) 等于 回血
        Then - 动作
        逆天<YDWE> - 设置 [单位] loc_a = (技能施放目标)
        逆天<YDWE> - 设置 [单位] loc_b = (触发单位)
        逆天<YDWE> - 设置 [单位] (loc_a) 的 回血释放技能 为 [整数]0
        逆天<YDWE> - 设置 [单位] (loc_a) 的 回血持续时间 为 [实数]0.00
        特殊效果 - 创建并绑定特效到 overhead 对 (loc_a) ,使用模型: Abilities\Spells\NightElf\Rejuvenation\RejuvenationTarget.mdl
        特殊效果 - 在 5.00 秒后删除 最后创建的特效 <New>
        逆天<YDWE> - 立即运行 (新建的计时器) 时间设置: 0.10 秒,是否循环: 循环
        参数
        逆天<YDWE> - 设置 [单位] loc_a = (loc_a)
        动作
        逆天<YDWE> - 设置 [单位] (loc_a) 的 回血持续时间 为 [实数]((获取 [单位] (loc_a) 的 回血持续时间) + 0.10)
        逆天<YDWE> - 设置 [实数] loc_i = (获取 [单位] (loc_a) 的 回血持续时间)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        And - 所有条件成立
        条件
        (loc_i) 小于 5.00
        Then - 动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (获取 [单位] (loc_a) 的 回血释放技能) 等于 0
        Then - 动作
        单位 - 设置 (loc_a) 的生命值为 ((生命值 对于 (loc_a)) + 1.00)
        Else - 动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        ((转换 ((loc_i) x 10.00) 为整数) mod ((获取 [单位] (loc_a) 的 回血释放技能) x 10)) 等于 0
        Then - 动作
        单位 - 设置 (loc_a) 的生命值为 ((生命值 对于 (loc_a)) + 1.00)
        Else - 动作
        不做任何动作
        Else - 动作
        逆天<YDWE> - 清除当前逆天计时器
        逆天<YDWE> - 注册 (新建触发)
        事件
        单位 - 任意单位 发动技能效果
        参数
        逆天<YDWE> - 设置 [单位] loc_a = (loc_a)
        动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        (获取 [单位] (loc_a) 的 回血持续时间) 大于 5
        Then - 动作
        逆天<YDWE> - 清除当前逆天触发器
        Else - 动作
        逆天<YDWE> - 设置 [点] loc_p = ((loc_a) 的位置)
        逆天<YDWE> - 设置 [点] loc_p2 = ((触发单位) 的位置)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
        If - 条件
        And - 所有条件成立
        条件
        ((触发单位) 是 ((loc_a) 的所有者) 的敌对单位) 等于 TRUE
        ((loc_p) 和 (loc_p2) 之间的距离) 小于或等于 500.00
        Then - 动作
        逆天<YDWE> - 设置 [单位] (loc_a) 的 回血释放技能 为 [整数]1
        Else - 动作
        不做任何动作
        点 - 清除 (loc_p)
        点 - 清除 (loc_p2)
        跳过剩余动作
        Else - 动作
        不做任何动作


        IP属地:上海4楼2014-08-27 15:05
        收起回复
          我在电脑上看了,两个技能都写得不错只是有一点小细节可以注意一下:特效可以在删除这句话里面新建特效——特殊效果 - 在 5.00 秒后删除 (新建特效并绑定到 (触发单位) 的 overhead 附加点上)。另一个小细节就是两个单位间的距离ydwe有函数——(从(触发单位)到(最后创建的单位)的距离 ) 小于或等于 500.00。
          其实这个测试只是抛砖引玉,更想专门聊一聊“逆天之外”这个话题。从小幻幻的技能做法中我们不难总结出要想在逆天计时器触发器之外干预它们的运行或关闭它们,可以在逆天之中增加逆天自定义值、buff有关的判断,在逆天之外操作自定义值或添删buff就可以干预逆天的运行。但是,如果我们再想一想,第一个技能敌人如果在15秒后施放技能是不是运行了多余的触发呢?如何准确地在第15秒关掉或删掉注册的逆天呢?
          那么我会这样写:
          如果我们把逆天计时器转换成jass,会发现清除逆天计时器变成了两段:call YDTriggerClearTable(YDTriggerH2I(GetExpiredTimer()))和callDestroyTimer(GetExpiredTimer())。这两句话的意思分别是清理哈希表YDHT[计时器整数地址][]的值和摧毁计时器。(简单地把哈希表理解成二维数组吧)这和前面我的写法是不是有相似之处——在1.24的地图里,yd的存储系统和逆天都使用一个叫YDHT的哈希表,如果理解逆天和存储的本质的话就好理解了——要想清理一个逆天计时器触发器,需要清理哈希表和删除计时器触发器两步。
          怎么样,是不是有点意思呢?这里我想灌输的一种思维方式就是,解决问题的方法多种多样,没有适应所有局面的方法,要结合实际尝试各种可能~


          IP属地:湖北5楼2014-08-27 19:51
          收起回复
            明天的挑战来辣,如何用隐藏单位和触发做一种神奇口袋(模型随意辣):
            1、被装到口袋里的口袋会被隐藏,不能主动取出来(或装到另一个口袋)。
            2、口袋被装起来后经过某固定时间就会自己出来。
            3、不能把口袋装到隐藏的口袋里
            4、口袋中的口袋数包括口袋里的口袋里的口袋里的。。。口袋
            >_<要求:口袋用一个技能把自己装到别的口袋里,实时显示任一未隐藏的口袋里的口袋数。


            IP属地:湖北6楼2014-08-27 20:00
            收起回复
              因为我见过成年人玩几个月we到不了你的水平,就算是我,到你的水平也经历了一个多月。然后如果你读上了好大学会遇见各种聪明人,当然心中有数了~


              IP属地:湖北7楼2014-08-27 22:02
              收起回复
                神奇口袋做完拉!!!目测应该没问题!
                ht@tp://p@an.bai@du.co@m/s/1c@0rgZGc


                IP属地:上海8楼2014-08-27 23:39
                收起回复
                  可能的方案:每次把口袋A放进口袋B时,为A绑定“容器”自定义值指向B,为B更新口袋总数(+A口袋总数);每当有口袋A自动从B中出来时,从B开始依次寻找每一个"容器"更新口袋总数
                  哔——下次用精灵球打比方


                  IP属地:湖北来自Android客户端9楼2014-08-28 10:32
                  收起回复
                    小幻真是厉害,漂亮地解决了“神奇口袋”谜题,恩,于是又到了总结时间。
                    让我们先回顾一下谜题的条件:
                    1、被装到口袋里的口袋会被隐藏,不能主动取出来(或装到另一个口袋)。
                    2、口袋被装起来后经过某固定时间就会自己出来。
                    3、不能把口袋装到隐藏的口袋里
                    4、(略)
                    然后是目前出现的两种解法(省略口袋位置修正部分):
                    呆头鬼——每次把口袋A放进口袋B时,为A绑定“容器”自定义值指向B,为B更新口袋总数(+A口袋总数);每当有口袋A自动从B中出来时,从B开始依次寻找每一个"容器"更新口袋总数。
                    睿智幻——每次把口袋A放进口袋B时,为B的自定义值单位组添加A的自定义值单位组中的全部单位,并清空A的自定义单位组,计时器到期从自定义单位组中取出A。
                    1和2两条规则十分关键,它们导致神奇口袋具有这样的性质:无论怎么改变装口袋的顺序,如果A一开始被放入B中,最后A一定比B先被放出来。第3条规则在1、2规则的基础上作了进一步的限定,无论怎么调整装口袋的顺序,每次吐出的口袋都不可能装有其它口袋
                    概括起来,神奇口袋的世界中只有两种事件:把一个口袋放入另一个口袋和某个口袋被吐出来。把一个口袋放入另一个口袋时,容器方的口袋数会增加放入方的口袋数;某口袋被吐出来时,所有口袋(装着某口袋)的口袋数减一。
                    注意到,神奇口袋世界只存在装与被装的关系:如果A口袋放入B口袋,A口袋只有一个容器,而B口袋可能放有任意数量的口袋,是一种一对多的关系(就像你只有一个亲生父亲,亲生父亲却可能有很多孩子一样)。恩,看起来复杂的神奇口袋实际上就包含这两种运算,一种关系。
                    呆头鬼的方法基于这种一对多的关系,通过整数自定义值改变容器的口袋数,通过”单位自定义值”把一个个容器连接起来(A(自定义值B)—B(自定义值C)—C…)。睿智幻的方法抓住两种运算的实质,通过单位组全部加入单位组以及单位从单位组中取出实现了神奇口袋世界。


                    IP属地:湖北本楼含有高级字体10楼2014-08-28 20:41
                    收起回复
                      从效率上考虑:小幻的方法使用了单位组,牺牲了一部分效率;而呆头鬼的方法尽管没有使用单位组,算法却比较复杂,为了遍历容器需要进行次数不定的循环,效率会随着神奇口袋数量的增多越来越低。
                      从适用性上考虑,小幻的方法和本次谜题非常贴合,充分利用了神奇口袋的各种性质。而呆头鬼的方法从关系上考虑,实际上可以适应口袋不定时吐出,口袋次品突发死亡等其它情况。
                      这次谜题,往难了了说,是在搞编程的数据结构;往简单说,就是高一的集合论。关系有几种:一对一,一对多,多对多。分析复杂情景中个体间的关系,可以让问题变得清晰而得到解决。


                      IP属地:湖北11楼2014-08-28 20:52
                      回复
                        那么这个谜题有没有作图的实际价值呢,这个谜题的模型是我在图中用过的哦——一个生命力超强的外星种族,可以在卵和成体间自由变换——这个族群没有高速的飞船或跨时空的星门,它们通过把自己隐藏在同胞身体中大部队快速的机动。你可以想象一大群虫子用这样的方式在狭小地形飞奔而过吗?


                        IP属地:湖北12楼2014-08-28 20:57
                        收起回复
                          好辣,希望掌握了分析关系这种方法的家伙,能轻松解决这个谜题:
                          黑白熊在森林里容易迷路,但是它有一袋无穷多的豌豆。黑白熊任意走动。熊离开前一豌豆500米放下一个新豌豆,豌豆只能存在3分钟。森林里有飞禽吃豌豆,有走兽踩坏豌豆。要求黑白熊总能找到最近放下的豌豆这样它就能瞬间回到那个豌豆处。
                          估计要开学辣,这个谜题不难而且无耻,不强求辣~


                          IP属地:湖北13楼2014-08-28 21:02
                          收起回复
                            htt@p://pa@n.bai@du.co@m/s/1q@Wry4ry
                            @1991WEIGUI


                            IP属地:上海14楼2014-08-29 00:15
                            收起回复
                              旁观


                              IP属地:浙江来自iPhone客户端15楼2014-08-29 08:31
                              回复