【转】MMO即时战斗:技能实现
转自 http://blog.csdn.net/cyblueboy83/article/details/41628743
一、前言
基本所有MMO游戏无论是回合制、策略类、即时战斗等等类型都需要有相应的技能系统,所以技能系统有一定的通用性和可复用性,但每种类型的游戏也会有自己的特点,不过万变不离其宗,本文结合自己参与开发并在公网运营两年以上的两款游戏,分别为一款SLG策略游戏和一款即时战斗类游戏,阐述下技能系统的实现方法,方法并不是最优的,但已经实现并经过外网运营几年时间的检验,相信会有一定的参考性。重点讲述即时战斗类的技能实现方法,因为即时战斗类的技能实现相对来说更加复杂和需要考虑的地方更多
二、技能基础数据定义
2.1技能分类
技能系统都会有多样性,如果都是一样类型的技能那可玩性必然太低,大体上分类包括、1、立即触发类 2、火球、飞弹类(需要经过一定的飞行距离:火球术、冰箭术)3、触发相应的状态(如:战吼,施放后增加自身的攻击力) 4、回城类 5、骑乘类 6、捕捉宠物 7、采集类等生活技能 8、复活类 9、飞行类(施放成功后传送到指定的地点或者召唤某人到自己身边)等等,其中根据游戏类型有些技能可以合并和再细分,目前先以这个做为讨论
2.2技能基本属性定义
技能虽然需要划分为不同的种类,但同时基本会有一些通用的属性,尽量提取更多的属性进行基础熟悉的定义,例如做技能基础表格的定义。
(1)所属职业(战士、法师)
(2)技能自我否定类型(魔法是否足够、是否冷却中、是否被沉默、是否被致盲….)
(3)技能目标否定类型(施法距离是否合法、宠物否决、公会成员否决、BOSS否决)
(3)关系过滤(0对所有关系都有效,1只对夫妻有效2只对队友有效果…)
(4)技能施放目标(1自己2宠物技能跳向主人3夫妻传送等)
(5)技能种类
(6)打断方式:0移动,1死亡,2普通攻击,3技能攻击,4被攻击,5使用物品
(7)移动锁定
(8)技能主被动类型(0主动攻击技能,1主动辅助(加BUFFER)2攻击时触发的技能3被击时触发的技能4被动辅助5替宠物施放技能)
2.3技能等级属性
技能一般都会有不断学习进化的过程,所以需要定义技能等级学习需要消耗的资源,以及每一等级技能提升的效果
(1)冷却时间
(2)吟唱时间
(3)触发机率
(4)结算公式(下面再详细说明)
三、角色技能施放管理
定义好技能的种类和基础属性以及等级属性之后,自然需要实现技能的施放和施放后带来的各种状态的管理,例如buffer和Debuffer等等的变化
3.1技能施放基础类
定义技能施放基础的属性和方法
基础方法:开始施放,施放过程每次循环触发,施放完成,被打断
基础属性:打断方式、延迟时间,基础属性通过上面的读表获取
所有技能可以承该类进行特化,定义技能特有的逻辑
例如
复活技能:CSkill_Relive:public cSkillBase
施放前触发DoStart()通知目标玩家是否同意被复活;DoFinish复活目标玩家
飞行技能:class CSkill_FlytoOther : public cSkillBase
施放前触发DoStart()检查目标玩家和施放源是否存在;DoFinish根据目标玩家的位置, 传送到目标玩家身边
技能施放流程:
3.2技能状态
基础状态类:状态属性定义
最大个数
状态效果(不能移动1,禁魔不能施法2,隐身3,不能攻击4,无敌5,GM无敌6强行攻击状态的释放者7,变身状态8,次数盾9,伤害盾10,附加伤害11,附加被伤12,13魔法盾,14完全闪避)
是否允许打断
是否需要保存
打断方式
效果类型(一般技能0,DOTHOT状态1,控制状态2,经验4,挂机BUFF5,骑乘BUFF6,变身BUFF7,回血8,回魔9,无敌10,嘲讽11,盾12,法器BUFF13,沉默14;怪物一般技能20,DOTHOT状态21,控制状态22,经验24,挂机BUFF25,骑乘BUFF26,变身BUFF27,回血28,回魔29,无敌30,嘲讽31,盾32,沉默34,隐身35,公会技能)
持续时间
持续次数
间隔时间
结算方式(0下标结算,1公式结算,2间隔释放技能)
属性变化:(状态改变人物的属性)
状态管理(定时轮循)
定时刷新人物身上的状态,根据状态的间隔时间计算触发每次状态的结算,并且根据结算的类型进行相应的计算:每次触发EachTime例如(目标玩家踩到了陷阱则中了陷阱状态,每隔5秒钟扣取5%的血量),状态结束触发DoFinish
3.3技能施放
有了技能的施放和状态属性之后,可以进行技能的施放。
DoSkill基本的检查(例如:职业匹配、读者技能表格基础属性、寻找范围内目标、触发打断其他技能)
检查通过后,加入技能施放管理状态(根据DoSkill搜寻的目标设置状态的目标群、设置状态的表格数据、持续次数等)
之后由3.2的状态管理器定时进行状态的结算
四、技能结算
一般结算公式是数值策划发挥的地方,技能数值是否平衡,关系到整个游戏的可玩性,
使用Xml格式,打造技能公式编辑器,然后为了效率,生成cpp代码,这样可以有编辑性的同时也不牺牲效率
例如战士冲锋结算公式:分别代表
扣取技能释放者指定的魔法值
增加技能释放者xp(大招的能量值)
增加技能承受者xp
【转】MMO即时战斗:技能实现的更多相关文章
- [转] MMO即时战斗:地图角色同步管理和防作弊实现
一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置.以及角色身 ...
- 【转】MMO即时战斗:地图角色同步管理和防作弊实现
---转自CSDN 一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角 ...
- MMO技能系统的同步机制分析
转自:http://www.gameres.com/729629.html 此篇文章基于之前文章介绍的技能系统,主要介绍了如何实现MMO中的技能系统的同步.阅读此文章之前,推荐首先阅读前一篇文章:一个 ...
- 如何平衡MMO游戏
转自:http://blog.sina.com.cn/s/blog_9f56a65f01013eti.html 前言 这是一篇出自国外博客“Elder Game”的一篇文章,笔者觉得里面很多东西说的很 ...
- 知道创宇研发技能表v3.1
by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客 ...
- Android高工必备技能
转载:http://www.jianshu.com/p/d791bbede02c Step 1. 玩转RxJava 使用RxJava处理异步极其方便,各种操作符可以对数据做流水线式操作,再加上与Ret ...
- iOS 即时通讯SDK的集成,快速搭建自己的聊天系统
现在的外包项目需求变态的各种各样,今天要做社交,明天要加电商,后天又要加直播了,这些系统如果要自己开发,除非大公司技术和人力都够,不然短时间是几乎实现不了的.所以学会灵活利用市面上的各种SDK是灰常重 ...
- ARPG游戏技能系统设计
ARPG游戏的技能的前端表现, 主要指的是人物动作和特效表现, 从普遍意义上讲,大致可以分为三个阶段:起手.飞行.碰撞(爆炸). [特效可见性判断] 1.[attacker & victim] ...
- 知道创宇研发技能表v3.0
知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关 ...
随机推荐
- Subclass UICollectionViewFlowLayout,自定义流布局
需求:为实现第一行显示一个,第二行以后显示两个 方案1:用系统自带的流布局,实现的效果是,若第二行只有一个,则系统默认会居中显示,不是左对齐(如下图),不符合项目要求. 方案2:自定义系统的UICol ...
- 初学JavaScript从入门到放弃(一)JavaScript介绍、变量、数据类型
一.JavaScript介绍 1.JavaScript:轻量级的客户端脚本语音 2.目前js已经不仅仅是客户语音,基于NODE可以做服务器端程序,所以Javascript是全栈编程语音 3.js及部分 ...
- pastedeploy
3.1作用 不修改WSGI应用程序的情况下通过配置文件配置WSGI服务. filter:过滤器,滤网. pipline:管道 app:application 应用,在这个语境下我举个例子吧,lavab ...
- Linux phpmailer发送邮件失败的解决方法
(本地windows phpmailer发送ok 放到linux发送失败) 原因:linux 通过465端口进行更安全的SMTPS协议发送邮件 windows 是基于smtp 25端口的 因此 可 ...
- Apache Spark on K8s的安全性和性能优化
前言 Apache Spark是目前最为流行的大数据计算框架,与Hadoop相比,它是替换MapReduce组件的不二选择,越来越多的企业正在从传统的MapReduce作业调度迁移到Spark上来,S ...
- 新系统设置 github 私钥
1.首先我得重新在git设置一下身份的名字和邮箱(因为当初都忘了设置啥了,因为遇到坑了)进入到需要提交的文件夹底下(因为直接打开git Bash,在没有路径的情况下,根本没!法!改!刚使用git时遇到 ...
- 帆软SQL报异常:多表连接的时候出现错误:未明确定义列
我刚开始的代码: select dm_veh_jdcgz_mx.DAY_ID ,--日期 dm_veh_jdcgz_mx.GLBM ,--管理部门ID dm_veh_jdcgz_mx.SFZMHM , ...
- Java学习笔记二十二:Java的方法重写
Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...
- 《TCP/IP详解 卷1:协议》第3章 IP:网际协议
3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输(见图1-4).许多刚开始接触TCP/IP的人对IP提供不可靠.无连接的数据报 ...
- Go编写一个比特币交易自动出价程序
语言环境为>=go1.10 go语言环境不多说 实现目的能与BitMEX api进行交互自动交易,目前虚拟币平台很多,平台API实现也很容易.后续会加上其它平台和自动交易算法策略,具体看平台交易 ...