Buff系统设计

  1. 什么是BUFF?

或许直接回答这个问题,那么你收获到的答案将是五花八门的。这个问题暂时放下不谈,我们可以去看其他的游戏应该是怎么设计的。

我经常玩的游戏里边BUFF提现的比较明显的,可能只有英雄联盟了,如果你不熟悉这个游戏,我也会对于每一个状态做出解释,所以我想我们还是可以讨论到一块去的。

先整理一下,游戏里边可能会被认为是做Buff或者你也觉得那个可能并不是个BUFF的东西全都收集起来,然后逐个来分析。

蓝Buff(提高回蓝速度,减少CD):我想首先应该拿出来说的就是这个了。当你身上持有这个Buff的时候,你将会持续的加快回蓝速度,并且,你的技能的CD时间会变短。从这个地方我们不难看出BUFF的基本作用就是#提高回蓝量,减少CD时间#。

红Buff(攻击别人时,别人会持续掉血):这个还相对特殊一些,因为这个BUFF是提高伤害的,他时怎么提高伤害的呢?如果你携带这个BUFF普通攻击或者使用某些可以出发特效的攻击,就可以给对方添加一个持续伤害的BUFF(隔一段时间掉血的),从而提高伤害输出。BUFF可以#响应普通攻击#。

女妖面纱(阻挡下一个技能):这个你可能觉得并不算是一个BUFF,他属于一个技能的特效。这个我们可能真的比较难定义,毕竟都可以实现。逻辑上呢,也都可以说的过去。那么我们就看一下究竟怎么来处理比较方便。就算不是,我们也可以看一下BUFF系统有没有类似的需求。BUFF可以#响应技能触发#

莫甘娜的E(免疫所有的魔法效果):收到魔法伤害时,护盾值可以替换血量消耗。可以让所有的魔法效果失效。BUFF可以#响应血量消耗# #响应技能触发,并使之失效#

引燃(持续伤害):接受这个BUFF的时候,你的血量就会在一段时间内,持续掉血,一秒掉个N多滴。并且,会添加一层重伤效果。BUFF可以#修改自身血量#。

重伤(回血效果减半):接受这个效果的时候,再调用回血的逻辑时,回血的数量将减少一半。BUFF可以#可以响应加血逻辑#

禁锢(没有办法移动):接受这个效果之后,你将不可以移动,只能呆在原地。BUFF可以#禁止本身的某一段逻辑运行#

眩晕(没有办法移动,并且自己也没有办法主动普通和大部分其他效果):接受这个效果时,你将不可以移动,并且大部分普工和技能没有办法触发,当然也有例外,比如说蛮王的R可以在眩晕的时候主动开启。BUFF可以#禁止普攻,禁止技能释放#

减速(没啥好说的):就是减速。BUFF可以#降低自身移动速度#

减伤(自己的输出会降低):就是,物理输出或者魔法输出会得到对应的降低#可以参与到输出的逻辑#

净化(解除恶意效果):禁锢、减速(这个记不清有没有,姑且这么写吧)、中毒、重伤、持续掉血等等。那么这个属于BUFF吗?我个人认为不是的,但是这个肯定跟BUFF有关系,姑且列上来。BUFF系统可以#根据类型消除恶意的BUFF#

水银饰带(解除眩晕):可以根据消除某一个固定类型的BUFF。BUFF系统可以根据#消除禁锢类型的BUFF#

……

其实可以分析还有很多。姑且先说这么几个吧,然后总结一下BUFF究竟是什么。

除了女妖面纱是永久存在的以外(净化和水银饰带属于技能),其他都是在几秒或者几十秒之后就会恢复正常。那么我想BUFF可以这么定义:持续一定时间(永久也是一定的时间),并且可以修改自身属性和相应自身的某些时间的状态集合(一个BUFF可能携带多个效果)的,叫做BUFF。

BUFF逻辑有以下部分:有一定的时间(永久或者某一段时间)、修改自身属性(加速、减速、回血速度、减少CD时间等等)、参与部分逻辑的运算(重伤、眩晕、减速、不受技能效果等等)

好了,下面进入正题,怎么来设计BUFF系统。

先提出几个问题:

  1. 同一个BUFF,可以重叠吗?(比如减速跟减速、引燃跟引燃)
  2. 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
  3. 不同的技能可以打出同一个BUFF吗?(比如持续伤害跟持续伤害)
  4. BUFF需要怎么跟其他的BUFF交互(比如说:存在引燃的时候加血、存在重伤的时候加血、存在引燃的时候引燃)
  5. 不同的BUFF是怎么重叠的?(比如、减速跟减速、加速跟减速、引燃与引燃)
  6. BUFF之间存在优先级吗?(比如女妖面纱和轮子妈的E同时存在时,先触发哪个效果)

然后,我来说一下我对应英雄联盟处理的理解,顺便回答一些这个问题,并且附带部分实例以及我对于这些实物的理解。

  1. 同一个BUFF可以重叠吗?答案是逻辑上肯定是允许的,但是有些在业务上是不被允许的。

    1. 先说一个相对容易理解的,减速效果基本上可以跟其他的任何效果重叠,包括其他的减速效果。比如,英雄A给你一个减速效果(比如说炼金术师的那个黏黏的技能),这个时候英雄B给你一个减速的效果(比如说蛮王的嘲讽)。这个时候你肯定是被双重减速的。如果英雄B的技能比英雄A更加弱,不论是替换也好,还是没有效果也好,都不能达到很好的游戏效果,所以这个地方肯定是并存的,减速效果。
    2. 引燃跟引燃是替换式的(就是后一个会替换前一个的)。这个为什么是替换式的效果,你能想象一下,如果对面五个人一级的时候。抓人会有多容易吗?五个点燃,一人A一下,此人必挂。为了可玩性这种技能只能做成替换性。
    3. 持续伤害上有没有并存式的?也有,比如说中毒效果。就应该是并存式,不可能因为后边中了其他类型的毒就会顶替掉前边的中毒效果
    4. 总结:BUFF系统上再设计的时候是肯定允许同一个BUFF同时存在的,至于业务上就看具体的业务室怎么回事了
  2. 如果两个同样的BUFF并存,那么数据上应该怎么计算?UI上怎么表现?
    1. 两个BUFF并存的时候,在数值的计算上应该是以某种方式进行叠加的,比如说减速效果的叠加。UI上则需要根据对应的业务来进行相应的处理,如果需要重点表现出这个BUFF的来源,或者对应的倒计时的这种情况下,则应该分成两个不同的UI来表现,如果仅仅表示自己是存在这个BUFF的情况下,则应该将两个BUFF合并起来表现
    2. 并且,一个BUFF的一部分效果被取消时,BUFF还应该是存在的,直到这个BUFF的所有效果完全消失时,才算整个BUFF消失掉
  3. 不同的技能可以打出同一个BUFF吗?
    1. 这个需要看具体的业务需求,如果是业务需求是同一个BUFF那么就是同一个BUFF。
    2. 其实这个问题更多的时候问的是一种状态,比如说,中毒跟引燃是不是共同引用了同一个状态?毕竟他们除了UI以外,其他的效果基本上可以说是一模一样,所以在BUFF上他们属于不同的BUFF但是实现的业务逻辑上他们可以使用同一个持续伤害的状态实现。
  4. BUFF需要怎么跟其他的BUFF交互
    1. 应该先定义下一下BUFF的交互都包含哪些:BUFF相互的影响(存在重伤效果时,治疗效果减半;存在免疫魔法效果时,魔法没有效果只有伤害;存在格挡时,下一次受得普攻无效;减速效果的叠加)、BUFF的替换(引燃之间的相互替换、中毒效果的层数叠加)、BUFF的消除(技能消除BUFF、BUFF之间的抵消)
    2. BUFF相互影响:这个可以通过修改自身数据来修改,比如说,治疗时候的治疗系数(治疗的时候可以通过这个系数来控制质量血量)、魔法/物理的格挡次数(魔法或者物理伤害的时候,扣除这个数据)、自己本身速度值的控制
    3. BUFF的替换:这个数据相对较小,可以在BUFF添加的时候,自己处理,比如说,引燃。在添加引燃效果时,可以代码检查一下是不是存在引燃,如果存在,直接删掉原来的。添加新的就OK了。
    4. BUFF的相互抵消:同替换就OK,添加的时候,判断是否可以抵消掉自身的BUFF存在就OK,如果存在,则不添加就OK。
    5. 技能消除BUFF:可以根据BUFF的类别(减速、禁锢、重伤、持续伤害等等)或者BUFF ID(对应BUFF名字的ID比如:引燃、莫甘娜的E等等)来消除BUFF
  5. 不同的BUFF是怎么重叠的?
    1. 可以重叠的通过修改自身属性来实现数据上的重叠
    2. 不可以重叠的,在BUFF内部的某个回调、添加BUFF时的检查、或者配表区别来实现兼容性都是可取的。视具体情况而定
  6. BUFF之间存在优先级吗?
    1. 这个是必然的,不过,我觉得很有必要统一一下这个优先级的定义:是指不同的BUFF之间的先后调用(女妖面纱和轮子妈的E同时存在谁先触发?),或者修改部分具体属性的优先级(加速与减速同时存在的时候,先算减速?还是先算加速?算法不统一的话,可能会造成,因为BUFF添加的先后顺序或者储存BUFF状态的顺序而发生的不确定因素。这个是需要尽力避免的)。
    2. 推荐的优先级:容易获得的状态先被触发。加速减速的话。确定下来就好,不过推荐先加后减。

总结:

  1. BUFF系统需要两个列表UI层面列表和状态层面列表
  2. 添加BUFF的时候,需要添加一个UI层面列表和对应的BUFF的状态层面列表,并且将UI层面列表中的数据与BUFF层面列表的状态绑定(当状态被移除的时候需要判定对应的BUFF列表是不是也需要被移除)
  3. 在人物自身中添加对应的相关属性值(女妖面纱、轮子妈的E可以格挡两次魔法伤害,在他们同事存在时,格挡了伤害,需要减少对应人物的格挡值,并且,触发提供格挡效果的BUFF对应回调)
  4. BUFF的回调,主要依靠于注入的方式进行回调
  5. BUFF的替换,可以使用BUFF自身控制或者关系表的方式来进行处理
  6. 原文地址:http://www.cnblogs.com/anxin1225/p/4750025.html?utm_source=tuicool&utm_medium=referral
时间: 2024-08-09 23:50:08

Buff系统设计的相关文章

系统设计原则

以技术先进.系统实用.结构合理.产品主流.低成本.低维护量作为基本建设原则,规划系统的整体构架. 先进性: 在产品设计上,整个系统软硬件设备的设计符合高新技术的潮流,媒体数字化.压缩.解压.传输等关键设备均处于国际领先的技术水平.在满足现期功能的前提下,系统设计具有前瞻性,在今后较长时间内保持一定的技术先进性. 安全性: 系统采取全面的安全保护措施,具有防病毒感染.防黑客攻击措施,同时在防雷击.过载.断电和人为破坏方面进行加强,具有高度的安全性和保密性.对接入系统的设备和用户,进行严格的接入认证

Buff系统的实现

BUFF是很多游戏都在采用的一种临时增益机制.本文讲述如何在基于关系型数据库的网页游戏中实现这一系统:如何扩展该系统:以及如何提高该系统的性能. 引言 BUFF是很多游戏都在采用的一种临时增益机制:与之对应,还有用于减益的DEBUFF:部分游戏还引入了不限制持续时间的永久性BUFF. 对于游戏的开发人员来说,BUFF和DEBUFF的差别只是正数和负数的差别,永久性BUFF也只是持续时间很长(超出游戏寿命)的普通BUFF.所以,用统一的系统来实现所有这些机制是完全可行的. 1. 这个BUFF有什么

面向数据可靠性存储系统设计思想探讨

存储系统的设计门槛是比较高的,和计算系统存在的最大区别在于存储系统所承载的是数据,一旦系统出现故障,不仅业务的连续性得不到保障,更为重要的是用户数据将会造成丢失.计算节点发生故障,最多造成业务连续性中断,这是与存储系统相比在可靠性要求方面最大的区别. 十几年前刚刚接触存储系统的研发,当时没有觉得存储有多复杂,不就是把数据按照一定规则存放在磁盘中,并且实现一定的功能,例如数据保护RAID.数据复制Replication.数据快照Snapshot以及文件系统嘛.感觉存储系统中最复杂的是各种功能,设计

【FL2416学习笔记】LCD开发之双buff的使用

从芯片手册可以看出,在win0的情况下可以使用双buff来显示. buff的选择WINCON0这个寄存器上的第23位来控制 ,所以相关的代码为: 1 void Win_Buff_select(u8 cur) 2 { 3 if ( win0_buff_0 == cur ) 4 { 5 WINCON0 = (WINCON0 & 0x3FFFFF) ; 6 } 7 else if ( win0_buff_1 == cur ) 8 { 9 WINCON0 = ( 1 << 23) | WINC

系统设计的三员管理

一.“三员”职责 系统管理员:主要负责系统的日常运行维护工作.包括网络设备.安全保密产品.服务器和用户终端.操作系统数据库.涉密业务系统的安装.配置.升级.维护.运行管理:网络和系统的用户增加或删除:网络和系统的数据备份.运行日志审查和运行情况监控:应急条件下的安全恢复. 安全保密管理员:主要负责系统的日常安全保密管理工作.包括网络和系统用户权限的授予与撤销:用户操作行为的安全设计:安全保密设备管理:系统安全事件的审计.分析和处理:应急条件下的安全恢复. 安全审计员:主要负责对系统管理员和安全保

Buff系统

BUFF状态可以通过游戏道具.使用技能.被攻击技能.NPC.宠物等等实现.BUFF状态,有很多技能在释放后,会对目标产生一定时间的额外影响,这些影响有的是增益的,有的是减免的.比如法师的"熔岩地",会对目标产生烧灼buff,即命中后,目标除了扣除"熔岩地"的伤害外,还在接下来的一段时间内持续受到烧灼的伤害.这时除了相应的解除技能等办法才可以解决.下面有介绍到几种方法. 一. buff介绍  1)在一定时间内的状态属性变化,变化对自身有利则可称为"增益&qu

SoC嵌入式软件架构设计之七:嵌入式系统固件的系统区文件系统设计

嵌入式固件的系统区(system disk,SD)包括操作系统.驱动.中间件.应用和字库.UI资源等文件,本文讲述SD区的文件系统设计.文件系统最主要的目标是为了实现单个文件的定位和读写.因为一般代码都是不可自修改的,即量产之后不会有写操作,嵌入式系统的SD文件系统就是为了能够简单.高效地定位某个文件和读取文件中的数据.设计原则和要点有以下几方面: 1. 逻辑连续存储单个文件,以扇区对齐. SD区的单个代码和资源文件一般都不大,所以不必要像fat32文件系统那样用fat表把文件簇串起来,直接逻辑

分布式系统设计系列 -- 基本原理及高可用策略

转自:http://blog.csdn.net/gugemichael/article/details/36688043 ==> 分布式系统中的概念==> 分布式系统与单节点的不同==> 分布式系统特性==> 分布式系统设计策略==> 分布式系统设计实践 [分布式系统中的概念] 三元组 其实,分布式系统说白了,就是很多机器组成的集群,靠彼此之间的网络通信,担当的角色可能不同,共同完成同一个事情的系统.如果按"实体"来划分的话,就是如下这几种:       

基于C/S架构的3D对战网络游戏C++框架 _02系统设计(总体设计、概要设计)

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.