找回密码
 点一下
查看: 4972|回复: 10

仇恨系统的简单写法可移植 并且方法简单

[复制链接]
发表于 2010-3-31 19:20:34 | 显示全部楼层 |阅读模式
我是Rex也就是写WOW类型地图的
   仇恨系统其实看起来复杂其实很简单
   对于很多作者来说大家只想做到效果  却忽略了方式。

都是用缓存 或哈西表 高维数组来解决其实可以用最简单方法解决
           包括进入战斗状态 和脱离战斗
  这个东西都可以用判断BUFF有无来做

  论坛说不清 有意者加QQ412464782 细说

方法2楼 自己看
其实   在WAR3中 有一个非常好的东西 并且无BUG。
         先说前言  不然大家肯定会认为这个写法不好  但是我是过来人 各种BUG我都尽力过
大家别不相信  WE地图里jass残余 和物体数据残余造成的BUG 也就是灵异现象绝对存在。 而且我这里有现成的研究以及BUG出现说明。
        大家编辑WE肯定有过这样的感受 就是 被BUG给忽悠
   (不是在废话 因为全局变量 在反复使用后 在某些特殊的情况下会出现覆盖数值 或别的什么BUG)
    研究型的作者 请不要否认我的说法 这个是我写地图3年来的经验 为了避免jass残余和 一些灵异现的未知BUG出现
     有些写法尽量避免。比如一个T里写上128行动作以上并且都有条件判断 这种写法就不要过多的修改这个T特别是大量的修改
     因为你机器的内存都可能有一定的小小的几率丢失内存值更别谈WE  所以 能用WAR3的技能模拟就尽量用WAR3的原始技能做脚本模拟。
    在这里不是为了否认 研究型作者的能力 而是研究型作者自己制作庞大数据的地图 的经验上肯定没我多 BUG的出现往往不在jass上可能是在 物体数据残余里。

  说仇恨写法:
             首先说  进入战斗和脱离战斗  其实WE里有一个东西比较好 就是 减速光环 首先不站技能格子 然后把选项里弄成只对 敌人有效果
(是敌对的任何单位不包括中立)
         然后判断所有单位身上是否有这个BUFF 有这个BUFF肯定是 战斗状态 没有就不是 这个是比较简单的方法范围自己可以定义而且方便。
     仇恨系统
         这个方式虽然是所有BOSS通用 也是所有单位通用 但是有缺点等下说
首先定义一个技能 等级为100  200  300  级  自己定义 根据你自己地图的情况来定 最好是100等级太高小心卡。
                   技能脚本我人为  用球体 或不 附带其他数据的技能 也就是一个马甲技能。


       事件 任意单位接受伤害。

      条件攻击  是BOSS 类单位(你可以用技能 用单位类型 用什么判断你自己决定)
动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            BOSSSHDW 等于 没有单位                BOSSSHDW 这个变量为什么要等于没有单位才运行?
                                                                问的好 这个变量值 你可以在其他触发设置单位比如 治疗仇恨 和 仇恨加成 等等
                                                               用这个变量设置 单位 单后提高仇恨技能等级 切记得不要 清除 呵呵后面的动作有清空
        Then - 动作
            如果所有条件成立则做动作1,否则做动作2
                If - 条件
                         XT仇恨技能  的等级对 (伤害来源) =1
                Then - 动作
                    设置 BOSSSHDW = (伤害来源)
                Else - 动作
                   无动作
        Else - 动作
            无动作
动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            (XT仇恨加成+2  的等级对 BOSSSHDW) 等于 1每次伤害都有1点加成(加多少自己定)
        Then - 动作
            单位 - 提升 XT仇恨技能  等级对 BOSSSHDW
        Else - 动作
            无动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            (XT仇恨远程加成+1  的等级对 BOSSSHDW) 等于 1每次伤害都有1点加成(加多少自己定)
        Then - 动作
            单位 - 提升 XT仇恨技能  等级对 BOSSSHDW              这些就是提高仇恨等级具体怎么做看你自己
        Else - 动作
            无动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            (单位所受伤害) 大于或等于 75.00这个很简单  就是伤害过了这个伤害值就仇恨等级+1(加多少自己定)
        Then - 动作
            单位 - 提升 XT仇恨技能  等级对 BOSSSHDW
        Else - 动作
            无动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            (单位所受伤害) 大于或等于 150.00
        Then - 动作
            单位 - 提升 XT仇恨技能  等级对 BOSSSHDW
        Else - 动作
            无动作

(以下是仇恨目标判断)  非常简单 一看就能明白~~~
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            BOSSMBDW 不等于 BOSSSHDW
            (XT仇恨技能  的等级对 BOSSSHDW) 大于 ((XT仇恨技能  的等级对 BOSSMBDW) + 12)  
    这个12意思很简单就是其他单位攻击BOSS  必须仇恨等级高过当前仇恨目标12个等级BOSS才会转移目标具体弄成多少自己设置
        Then - 动作
            设置 BOSSMBDW = 没有单位
            设置 BOSSMBDW = BOSSSHDW
            游戏 - 对 (所有玩家) 发送显示 4.00 秒的文本信息: ((((触发单位) 的名字) + 仇恨目标) + (BOSSMBDW 的名字))
        Else - 动作
            无动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            BOSSMBDW 不等于 BOSSSHDW
            (XT仇恨技能  的等级对 BOSSSHDW) 大于或等于 90
        Then - 动作
            设置 BOSSMBDW = 没有单位
            设置 BOSSMBDW = BOSSSHDW
            游戏 - 对 (所有玩家) 发送显示 4.00 秒的文本信息: (仇恨目标转换 + ((BOSSMBDW 的名字) + 仇恨过高。))
        Else - 动作
            无动作
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            BOSSMBDW 不等于 没有单位
            BOSSMBDW 不等于 BOSSSHDW
        Then - 动作
            单位 - 对 (触发单位) 发布 右键点击 命令到目标: BOSSMBDW
        Else - 动作
            无动作
    设置 BOSSSHDW = 没有单位

这个办法写的仇恨缺点是会BOSS只会优先攻击该值最高的单位。也就是说BOSS死亡后你的仇恨不会直接变0 要等仇恨每秒递减


以下是每秒递减1个等级
时间 - 每1.00 秒触发事件

动作
    设置 WJ_XT_DWZ[0] = ((可用地图区域) 内满足 ((XT仇恨技能  的等级对 (匹配单位)) 大于 1) 的所有单位)
                 这里意思很明确  有仇恨技能单位选取 没有仇恨技能的 不会被选择
    如果所有条件成立则做动作1,否则做动作2
        If - 条件
            (WJ_XT_DWZ[0] 中的单位数量) 不等于 0
        Then - 动作
            单位组 - 选取 WJ_XT_DWZ[0] 内所有单位做动作
                Loop - 动作
                    设置 WJ_JN_DWMB[0] = (选取单位)
                    单位 - 降低 XT仇恨技能  等级对 WJ_JN_DWMB[0]
                    设置 WJ_JN_DWMB[0] = 没有单位
        Else - 动作
            无动作
    单位组 - 清空 WJ_XT_DWZ[0] 内所有单位
    单位组 - 删除 WJ_XT_DWZ[0]

评分

参与人数 1威望 +3 收起 理由
血戮魔动冰 + 3

查看全部评分

发表于 2010-3-31 20:02:49 | 显示全部楼层
嗯~
很简单的仇恨~
提一点小小的建议:
1.
Boss死亡可以参照每秒递减仇恨来直接清空。
2.
这个……使用单位等级的话,再一次战斗中如果要分别计算两个Boss的仇恨貌似就不行了~
当然也只是简单的看了一下~
回复

使用道具 举报

 楼主| 发表于 2010-3-31 21:46:26 | 显示全部楼层
呵呵其实缺点就是在这里
           BOSS通用1个仇恨值`
    优点是移植简单所有单位都有仇恨计算。
回复

使用道具 举报

发表于 2010-3-31 22:43:40 | 显示全部楼层
不说怎么实现,怎么简单,光是那个100的技能等级我就没兴趣看下去了
回复

使用道具 举报

 楼主| 发表于 2010-3-31 23:42:01 | 显示全部楼层
技能有技能的优点
      100级技能的确是存在问题比如临时添加 这技能会卡
   但是技能可以所有单位都有这个只是为了方便新手
回复

使用道具 举报

发表于 2010-4-2 10:28:34 | 显示全部楼层
何必呢。。。既然是RPG肯定 就只有有限个玩家控制单位   
随便几个数组就很好解决了
回复

使用道具 举报

 楼主| 发表于 2010-5-29 13:31:59 | 显示全部楼层
不知道大家看明白没。。。
  只能给新手方便移植
回复

使用道具 举报

发表于 2010-6-14 14:11:11 | 显示全部楼层
没有我的方法简单。。。2条触发搞定。。。
回复

使用道具 举报

 楼主| 发表于 2010-6-27 12:04:11 | 显示全部楼层
仇恨系统说来说去无非都是围绕着1个值 和一个单位绑定。

新手不会的就是如何把该值绑在单位上如何捕捉该值。

这个办法看起来闹残但是 对于实际的利用价值和可发展性来说。以及移植的方面上这个系统方案是最简单的。你说比这更简单 是的有 但是新手看不懂。
回复

使用道具 举报

发表于 2010-10-16 02:54:12 | 显示全部楼层
参考一下子嘛················
回复

使用道具 举报

发表于 2011-9-14 20:47:48 | 显示全部楼层

两个月的奇迹

  那天忽然有人非常惊讶的说道“某某医生,得了不治之症———肝癌,已经没有几天了。”诧异的我,马上就是一片的空白,我怎么不知道呢?难道这会是真,说的某某医生是我很好的朋友,不可思议的恐慌,让我也忘记了一切,像一声的炸雷,震得心烦意乱。“不会吧!”我在努力的告诉自己,我们刚见面不久的,那天在一起,还只是说道:“我们也人到中年,还是少喝酒,注意保重身体”。万万没有想到,就查出了这样的病,费解啊!我怎么求证他病得事实呢?犯了难。好在我医院的朋友还算不少,亲自打了电话,病是真的,却不一定如人们传说中的那么邪乎。但是也确实到晚期,已经非常的严重。也许人们说的就是严重的程度,可他是医生,更清楚病的危险,确实依照所见过的病历,到了他这样的程度,不论采取怎样的治疗,能活过两个月的不多见,从他的行医以来就是接触这样的病人,他比别人比清楚自己的病情。
  我必须去看看,给他一些安慰,也让他得到我们的关怀和温暖,在我的想象中应该是他在愁眉不展,照顾他的人也会有着抑郁的情绪,我也几次的暗暗叮咛自己,不要和他提及病情,可是病房里,没有我想象中的压抑,更没有我预计那样糟糕,而是充满了信念的那种谈定,是那种亦如一般的病痛一样的治疗,好像提前准备的安慰之词没有说出的必要,nike air jordan。亦如生命的丝线在他的身上很长很长。他的话更是让我为他的心态而高兴“病来了,我们已经抓紧治疗了,上天如果还可以给我两个月,我就好好的活两个月,我要在这有限的时间里活的更开心更快乐,我会笑着面对一切,我也不再惋惜,短短的时间里,我不想让任何牵挂我的人看到我的痛苦,也不要为我而痛苦,这是上天赐予我的时间,我会做我该做的。”他如此的心境让我也为之一震,没有吓到他,反而让他坚强了。
  他的妻子送我,顺便的里了解了一些,刚刚查处时,极度的恐慌一样打击了他,当时的他,脸色蜡黄,紧紧的合着双眼,几道皱纹紧紧的缩在了一起,四肢好似不在会活动,谁说话也不会理,简直把所有的人都吓坏了,说一夜白了头,一点不假,乌黑的头发,却有了白发,急坏了所有的看护他的人,就这么不吃不喝了三天,眼睛也闭了三天。当第三天的傍晚,好像忽然的成了一个饥饿的人,彻底的换了一个人,让所有的人都让他的突如其来下坏了,惊讶,惶恐,甚至阻止他的行动。他却很坦然的说了,我想通了,何必为这些担心呢?人总有一死,也许我只是比别人提前知道了自己生命的期限,我更值得骄傲,是上天告诉了我,还可以活很久的。谁也不要害怕,我要把这几天没有喂饱的肚子喂饱了才会有机会和病毒抗争,我不要让生命留给我的机会浪费,他的改变让所有人为之兴奋。
  很快治疗的结束,他还是请求领导,他需要工作,他一如正常人一样的工作,也许知道了自己生命的短暂,他早早的上班,总是接待第一问诊的人,最后一个离开,送走最后一个患者。每一个病人都好像见到了亲人一样,也许是想把生命的延续送给每一位病人。
  下班后从不在像从前一样的等待妻子做好的饭菜,他会做好了饭菜等待妻子,再也不会把脏衣服扔下,等待妻子的洗涤,而是承包了所有人的衣服的清洗。再也不会如前一样的睡到老婆喊了几次才懒懒的起床,而是早早的起来,打扫着屋里屋外,准备着早餐。
  不爱回家的他,那时候总认为父母还很年轻,还没有老到非得自己照顾的份上,回家的目的也就是走一走形式,别让别人说出什么来,而病后的他,回家看父母成了一门课程,晚饭过后,就一定打扮的整整齐齐,来到父母的身边,问候着一天的饮食,温柔的抚摸一下父母的额头,还会拿起父母的双手,体会着父母的脉搏。不仅是自己的父母,还有岳父母,自己至亲的叔叔婶婶,更有他的朋友,时刻不停的对自己周围的亲朋好友嘘寒问暖,都像是他的病人,又都像是他的多年不见的故人,亲切的让他感到了幸福,让别人体会的牵挂。
  他的孩子更是奇怪了,怎么原来如此的骄横跋扈,现在变得这样的体贴,孩子有点受宠若惊,不敢相信这还是自己的父亲。
  他的举动让所有的人都吃惊,天天的笑脸相迎,天天的不知疲倦,仿佛脸色更红润了,步履更坚定了,身体更强壮了。谁都不会认为他是病入膏肓的人,谁不会再想他有着不治之症。很快的两个月过去了,他依旧的笑脸和铿锵。他的同事和家人再一次的陪同他检查,却令所有在场的医护人员振奋,不仅没有扩散的迹象,还在减少,身体的其他指标更加的正常了。这也许只是一个奇迹,两个月创下的奇迹。
  我相信谁也有可能创造一个奇迹,心中有一个信念,有一种坚韧和执着,没有不可战胜的困难,没有不可实现的目标,只要敢于面对眼前的一切,正视困难的暂时性,就会超越自己的能力,会有意想不到的收获。
  今天距离高三的孩子高考已经不到两个月了,我更相信,她们会创造自己的奇迹的,她们会在自己的内心驱动中,超越梦想的。我相信孩子们,也相信我的推论。 上一篇:生如山歌     下一篇:相约,2011。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:33 , Processed in 0.079477 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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