BUFF是很多游戏都在采用的一种临时增益机制。本文讲述如何在基于关系型数据库的网页游戏中实现这一系统;如何扩展该系统;以及如何提高该系统的性能。

引言

BUFF是很多游戏都在采用的一种临时增益机制;与之对应,还有用于减益的DEBUFF;部分游戏还引入了不限制持续时间的永久性BUFF。

对于游戏的开发人员来说,BUFF和DEBUFF的差别只是正数和负数的差别,永久性BUFF也只是持续时间很长(超出游戏寿命)的普通BUFF。所以,用统一的系统来实现所有这些机制是完全可行的。

1. 这个BUFF有什么作用

1.1. BUFF的效果

BUFF的效果是BUFF的本质,也是玩家和开发人员真正关心的内容。所以这里我们先来讨论BUFF的效果,并约定用BUFF_KEY来称呼它。

在demo中,我们只提供一种BUFF效果

BUFF_KEY 描述

ATK

增加指定点数的攻击力

1.2. BUFF的强度

有了BUFF的效果,还需要一个数值来描述BUFF的强度,我们称其为BUFF_VALUE。 通过两者的组合,我们已经可以提供多个BUFF了

BUFF BUFF_KEY BUFF_VALUE 描述

ATK1

ATK

1

增加1点攻击力

ATK2

ATK

2

增加2点攻击力

ATK3

ATK

-1

降低1点攻击力

这里我们提供了ATK1、ATK2、ATK3三个BUFF,ATK1、ATK2分别可以增加1、2点攻击力,ATK3则是一个DEBUFF,可以降低1点攻击力。

2. 赐予我力量吧——给某个单位加BUFF

BUFF只有加在特定的单位上才有意义,我们用UNIT来表示某个单位,用TIME表示BUFF的过期时间(UNIX时间戳)

UNIT BUFF_KEY BUFF_VALUE TIME 描述

U001

ATK

1

1356105599

单位U001拥有增加1点攻击力的BUFF,持续到1356105599

U001

ATK

2

1318774750

单位U001拥有增加2点攻击力的BUFF,持续到1318774750

U001

ATK

-1

1318774760

单位U001拥有降低1点攻击力的DEBUFF,持续到1318774760

如此一来,我们想要知道当前时刻单位U001上ATK类型BUFF的总值,只要找出TIME大于当前时间戳,且BUFF_KEY为ATK的所有记录,并对BUFF_VALUE求和便能得到想要的数值:

SELECT SUM(BUFF_KEY) WHERE UNIT = 'U001' AND TIME > NOW() AND BUFF_KEY = 'ATK'

在时刻1318774745,单位U001有3个有效的ATK类型BUFF,数值为1+2-1=2

在时刻1318774655,单位U001有2个有效的ATK类型BUFF,数值为1-1=0

在时刻1318774765,单位U001有1个有效的ATK类型BUFF,数值为1,事实上,这个BUFF会持续到世界末日。

原文地址:http://blog.csdn.net/costa100/article/details/19546147

Buff系统的实现的更多相关文章

  1. Buff系统框架设计

    Buff的配置文件 BufType: 1: 精神类Buf 2: 物理类Buf 3.元素类Buf 4.其他类Buf 5.被动类BufBufSubType: 1000-1999 精神子类 2000-299 ...

  2. 小妖精的完美游戏教室——buff系统

    作者:小妖精Balous,未经作者允许,任何个人与单位不得将此源代码用于商业化项目 #region buff /// <summary> /// 是否魔法免疫,魔法免疫的生物不会受到除自己 ...

  3. Buff系统

    BUFF状态可以通过游戏道具.使用技能.被攻击技能.NPC.宠物等等实现.BUFF状态,有很多技能在释放后,会对目标产生一定时间的额外影响,这些影响有的是增益的,有的是减免的.比如法师的“熔岩地”,会 ...

  4. Buff系统设计

    我就随便一写,你也就随便一看吧.   什么是BUFF?   或许直接回答这个问题,那么你收获到的答案将是五花八门的.这个问题暂时放下不谈,我们可以去看其他的游戏应该是怎么设计的. 我经常玩的游戏里边B ...

  5. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

  6. 【转】Buff机制及其实际运用

    转自 http://bbs.gameres.com/forum.php?mod=viewthread&tid=215027 首先我想说的是,这是一套机制,并不是单独的一个系统,所谓机制就是一种 ...

  7. Unity——技能系统(三)

    Unity技能系统(三) Unity技能系统(一) Unity技能系统(二) Demo展示 六.Buff系统 buff分为增益和减益buff,应该区分开来: /// <summary> / ...

  8. linux查询健康状态,如何直观的判断你的Linux系统是否健康

    一提到对于查看系统运行的健康状况,可能大多数朋友考虑到的就是查看进程或者打开任务管理器,但是对于应用在真实生产环境中服务器的linux系统来说,以上两种方式都不是***效的查看方式,那么今天就给大家推 ...

  9. linux常用的监控命令

    转自:http://www.cnblogs.com/huangxm/p/6278615.html 1.  top 显示所有正在运行而且处于活动状态的实时进程, 而且会定期更新显示结果:它显示了CPU使 ...

随机推荐

  1. [sh]shell命令缩写

    命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...

  2. MySQL数据库如何去掉数据库中重复记录

    对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法! 方法一:防止表中出现重复数据 当表中 ...

  3. angular学习笔记(十三)

    本篇主要介绍控制器的$scope中的数据是如何被改变的: 以下三种方法,都可以改变$scope中的number值: 1. 表达式: <span ng-click="number=num ...

  4. 安卓开发之Toolbar

    根据官网的教程,发现实现与预期不一致,查看相关资料自己整理了一下(官网开发文档:https://developer.android.com/training/appbar/setting-up.htm ...

  5. navicat如何导入sql文件和导出sql文件

    http://jingyan.baidu.com/article/a65957f4976aad24e67f9b9b.html ************************************* ...

  6. Makefile学习之路——2

    让你的makefile更专业. 在上一个Makefile所在目录下通过touch命令创建一个clean文件,执行make clean,将发现make总是提示clean文件是最新的,而不是按我们期望的那 ...

  7. tomcat架构分析(connector BIO 实现)

    出处:http://gearever.iteye.com 在tomcat架构分析(概览)中已经介绍过,connector组件是service容器中的一部分.它主要是接收,解析http请求,然后调用本s ...

  8. .Net应该学什么怎么学(四)

    八.ASP.Net    ASP.Net是.Net中用来开发动态Web应用程序的技术,ASP.Net主要分ASP.Net WebForm(以后简称WebForm)和ASP.Net MVC两种技术,大部 ...

  9. MongoDB学习之(三)增删查改

    发现一篇Java操作MongoDb不错的文章,记录一下: https://www.cnblogs.com/sa-dan/p/6836055.html 基本功能. import java.util.Ar ...

  10. 【Unity笔记】常用的优化小技巧

    一.当通过GetComponent获取一个组件时,不在Update中每帧进行查找,可在Start中查找一次并用一个私有变量去保存这个组件. public class Test : MonoBehavi ...