【转】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 说明 关 ...
随机推荐
- SimpleProfile_GetParameter && SimpleProfile_SetParameter
/********************************************************************* * @fn SimpleProfile_GetParame ...
- JQuery手写一个简单的分页
效果图: 大概思路:使用ul进行初始布局,每一次点击事件改变li里的值.完整的代码在gitup上:https://github.com/anxizhihai/Paging.gitcss部分: html ...
- 查询sqlserver 表结构呀
SQL Server里查询表结构命令 对于SQL Server数据库有两种方法查询表结构 第一种方法 sp_help Accounts_Users 其中Accounts_Users 表示表名 ...
- Spring知识点小结汇总
Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...
- PHP 中根据 IP 获取地址
这里使用的是淘宝 IP 地址库提供的 API 接口. 淘宝 IP 地址库:http://ip.taobao.com/instructions.html API 文档说明: 使用事例: /** * 调 ...
- JavaScript---通过正则表达式验证表单输入
验证输入的name只能是数字或字母或下划线 js <script type="text/javascript"> function submitOn(){ var f ...
- MySql慢查询日志——开启/查看/删除
1,开启慢查询日志 修改mysql.ini文件,加入如下配置: [mysqld] log-slow-queries=H:\mysql_log\slow_query.log long-query-tim ...
- 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9472 Solved: 4344 Desc ...
- 9、Java ConcurrentModificationException异常原因和解决方法
Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...
- spring-boot日志操作
SpringBoot Logback日志配置 Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要 ...