类魔兽世界 技能 天赋 成就 log 系统设计
狭义来讲,技能就是几个人作战时,可以对他人使用产生一定效果的操作。魔兽世界对技能定义进行了扩展,即在魔兽世界中,产生一定效果的任何操作都是技能。例如 吃面包,使用物品,采矿,训练商业技能 等等。
魔兽世界中技能可以产生一个立即的效果(例如 扣血,扣篮,挖到一个矿),或者是一个持续的状态(buff),或者两者兼而有之。立即效果处理起来比较简单这里就不细说了,这里主要说说程序中buff怎样处理。
魔兽世界中buff简直是千变万化,估计没有人能完全的了解所有的buff的效果。这其中有很多种分类,例如
类型 |
例子 |
影响数值型 |
奥术智慧,邪甲术 |
控制型 |
变羊术 恐惧 |
持续伤害型 |
腐蚀术 |
被动触发型 |
荆棘术 |
加强效果型 |
法师的冲击天赋 |
...... |
...... |
很显然,暴雪的开发人员不可能一个一个技能去编写。那不仅难以控制代码,策划也无法脱离程序员去实现技能。其实我们根据破解魔兽世界的客户端,可以看到,魔兽的技能是一个一个配置出来的!程序员只需要做好基本的效果,之后技能就交给策划去配置了。
咋一看,buff种类太多,看上去让人头大。其实可以分解出一个共有的特点:buff是由三个部分组成的: 1. 时间 2. 条件 3. 动作。
我们分析一下上面5种类型的buff这三个特点:
技能 |
时间 |
条件 |
动作 |
奥术智慧 |
加减buff时 |
本次加的buff |
加减智力数值 |
变羊术 |
加减buff时 |
本次加的buff |
变形,减buff 还原 |
腐蚀术 |
该buff时间间隔到的时候 |
扣血 |
|
荆棘术 |
被打时 |
1.近战攻击 2.命中 |
对攻击敌人释放攻击技能 |
法师的冲击天赋 |
打中时 |
1.火焰魔法 2.命中 3. %2 几率roll成功 |
对目标释放一个晕技能 |
一个动作可以是具体效果,也可以是释放一个技能
上面几个技能触发时机如下图所示:
我们可以发现,在整个技能流程中buff作用效果可以穿插在一些时间点。所以我们可以这样设计配置文件:
技能id |
时间点 |
条件 |
动作 |
奥术智慧id |
1,2 |
5 |
1,2 |
变羊id |
1,2 |
5 |
3,4 |
腐蚀术id |
3 |
5 |
|
荆棘术id |
4 |
1 and 2 |
6 |
冲击id |
5 |
3 and 2 and 4 |
6 |
这里给出具体含义:
时间点:
1 加buff时
2 减buff时
3 buff tick到时
4 被打时
5 打人时
条件:
1 技能是近战
2 技能命中
3 技能是火焰魔法
4 几率roll成功
5 本次技能施放的buff
动作
1 加智力
2 减智力
3 变形
4 变形还原
5 扣血
6 释放一个技能
时间点的使用
服务器端怎么使用这些配置呢?很简单,服务器上提供一个钩子列表即可,配置文件中,时间点就是钩子的挂载点
vector<boost::signals2::signal>
比如荆棘术buff加上时,根据配置注册到事件的vector相应位置,下标就是时间点
一旦有人被攻击,就会执行下标为4 的所有事件
一旦攻击 就会执行,下标为5的所有事件
条件的扩展
魔兽世界中,buff触发的条件是极其复杂的。例如上面冲击天赋触发条件涉及到三个小条件。这还是比较简单,条件与条件之间只有and关系。如果有or关系怎么办?我们可以用一棵行为树解决这个问题,行为树可以实现and和or的关系。所以完全可以让程序员开发策划需要的condition节点,策划使用编辑器编辑行为树即可。行为树在此就不细说了,大家可以找google看看
再说天赋成就和LOG系统
看到这里,大家也明白了成就系统无非也是三点1. 时间 2. 条件 3. 动作
比如坐骑成就:
成就id |
时间点 |
条件 |
动作 |
收集50个坐骑 |
收到一个坐骑时 |
有50个坐骑 |
增加一个坐骑大师的称号 |
LOG也是一样:
Log |
时间点 |
条件 |
动作 |
记录一次转移金币大于1000G的LOG |
扣钱 |
数量> 1000 |
记录log |
魔兽世界天赋就是一些隐藏的永久buff
顺便给出一个简单实现:
https://github.com/egametang/Egametang/tree/master/Cpp/Game/BehaviorTree
转载于:https://www.cnblogs.com/egametang/archive/2012/03/28/2421441.html
类魔兽世界 技能 天赋 成就 log 系统设计相关推荐
- 魔兽世界任务分类及游戏任务系统设计启示
魔兽世界任务分类及游戏任务系统设计启示 魔兽的任务号称有1500多个,这么多任务,难免有些水分在里面,不过把这些浩瀚如星海的任务分类一下,倒也可以借鉴不少.(由于我练的是部落,所以选部落方向的比较经典 ...
- [转] 评 WOW技能天赋设计
本文转至:http://bbs.chinaunix.net/thread-1692302-8-1.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) 再比如,传说中的面向对象本该大显神 ...
- 清华大学出版社计算机绘谱,清华大学出版社-图书详情-《土木与建筑类CAD技能一级(二维计算机绘图)AutoCAD培训教程》...
计算机辅助设计(computer aided design,CAD)已经成为现代土木建筑工程设计的高效率表达工具,并广泛应用于科学技术的各个领域,形成了独具特色的计算机绘图技术和三维数字建模技术.熟练 ...
- 滁州职业学院计算机,2020年滁州职业技术学院分类职业技能(系统根据考生所填第一志愿发布试卷进行测试)1、机电类专业技能(满分80分)...
(二)职业技能(系统根据考生所填第一志愿发布试卷进行测试)1.机电类专业技能(满分80分) 考点:(1)万用表判断二极管.三极管的好坏. 认识常用低压电器. 加工零件图纸的识图. 根据零件图纸能正确选 ...
- 邵阳市计算机学校某灿,邵阳市计算机中等专业学校在邵阳市财经商贸类专业技能大赛中喜获佳绩...
原标题:邵阳市计算机中等专业学校在邵阳市财经商贸类专业技能大赛中喜获佳绩 邵阳新闻在线讯(谢泽良 刘欣)11月15日,由邵阳市教育局主办的2018年邵阳市中职学校技能竞赛财经商贸类Ⅱ项目的比赛在邵阳市 ...
- 2018年云南省三校生计算机考试大纲,云南省2018年三校生高考铁道运输类专业技能考核大纲...
云南省2018年三校生高考铁道运输类专业技能考核大纲 一.制定依据 为做好我省2018年高职院校招收普通中专.职业高中(含职业中专).技工学校毕业生(以下简称三校生)招生考试工作,为落实<中华人 ...
- 计算机网络技术可以纹身吗,不思议迷宫纹身师冈布奥角色介绍 纹身师技能天赋...
不思议迷宫纹身师冈布奥怎么样?不思议迷宫最近推出了数个全新角色,游戏中的角色都是以自己的职业或者特性命名,这次新出的纹身师冈布奥也不例外,玩家们看到纹身应该能想到BUFF吧,这也是一位给自己加BUFF ...
- 技能高考模拟试题三计算机类,计算机技能高考2016模拟试卷3
计算机技能高考模拟试卷 计算机类专业阶段综合测试卷(三) 一.单项选择题(每道考题下面有A.B.C.D四个备选答案,请从中选择一个最佳答案,每小题3分,共计150分) 1. 世界上公认的第一台电子计算 ...
- 【前端重构技能天赋】(一)——内容篇
少叙闲言 专业的页面重构师手下出产的页面应该是标准.合理.高效,易扩展,易维护的.为尽早奔向这一NB的方向,吾等前赴后继的前端码农们,升级所需的必要天赋之一:载入更快,更省带宽! 结合网上大量关于Ya ...
最新文章
- [转]C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- iOS.访问通讯录.02.写入联系人
- sql数据库JDBCTemplate和JPA使用
- Linux centos 主机名颜色设置 和 别名设置
- java数据段 静态区_linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
- next和hasnext_使用Java中的next()和hasNext()方法遍历List元素
- [bbk2228] 第41集 - Chapter 11-SQL Statement Tuning(00)
- Java8 本地DateTime API
- magento2 后台Grid点击column进行排序时会出现单个重复record
- 数据库安全之Mysql数据库安全加固
- 国内国外最好的java开发论坛及站点 [转]
- Python一个很好玩的特性decorator
- 【已解决】戴尔笔记本电脑的卡顿问题.
- MATLAB绘制柱状图带标准误差线
- 1人民币试用世纪互联azure虚拟机,跑CNN训练
- OpenCV-PS羽化操作
- eclipse官网下载安装教程
- assembly 输出ab中所有数_BGA、TAB、零件、封装及Bonding制程术语解析
- dp专题-cf 711c
- 【实现选定单选框出现对应的选择框或输入框】
热门文章
- Fastjson靶场
- html外边距有哪些,css外边距是什么?css外边距属性的介绍
- Eclipse 安装了 Groovy 开发插件之后,双击打不开 .java 文件了
- Motion Matching
- 申请国外免费空间必备的免费电话:短信、语音验证不再是难题
- 空指针异常 java.lang.NullPointerException:Cannot invoke “XXX“ because “XXX“ is null
- 汤姆猫服务器war作用,汤姆猫大冒险新手问答 游戏问题答案详解
- 微信小程序之export和import
- 判断浏览器是否为IE6的两种方式
- PHP语言设计模式之工厂模式