转自 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. 状态效果(不能移动1,禁魔不能施法2,隐身3,不能攻击4,无敌5,GM无敌6强行攻击状态的释放者7,变身状态8,次数盾9,伤害盾10,附加伤害11,附加被伤12,13魔法盾,14完全闪避)

  3. 是否允许打断

  4. 是否需要保存

  5. 打断方式

  6. 效果类型(一般技能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,公会技能)

  7. 持续时间

  8. 持续次数

  9. 间隔时间

  10. 结算方式(0下标结算,1公式结算,2间隔释放技能)

  11. 属性变化:(状态改变人物的属性)

    状态管理(定时轮循)

    定时刷新人物身上的状态,根据状态的间隔时间计算触发每次状态的结算,并且根据结算的类型进行相应的计算:每次触发EachTime例如(目标玩家踩到了陷阱则中了陷阱状态,每隔5秒钟扣取5%的血量),状态结束触发DoFinish

3.3技能施放

有了技能的施放和状态属性之后,可以进行技能的施放。

DoSkill基本的检查(例如:职业匹配、读者技能表格基础属性、寻找范围内目标、触发打断其他技能)

检查通过后,加入技能施放管理状态(根据DoSkill搜寻的目标设置状态的目标群、设置状态的表格数据、持续次数等)

之后由3.2的状态管理器定时进行状态的结算

四、技能结算

一般结算公式是数值策划发挥的地方,技能数值是否平衡,关系到整个游戏的可玩性,

使用Xml格式,打造技能公式编辑器,然后为了效率,生成cpp代码,这样可以有编辑性的同时也不牺牲效率

例如战士冲锋结算公式:分别代表

扣取技能释放者指定的魔法值

增加技能释放者xp(大招的能量值)

增加技能承受者xp

【转】MMO即时战斗:技能实现的更多相关文章

  1. [转] MMO即时战斗:地图角色同步管理和防作弊实现

    一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置.以及角色身 ...

  2. 【转】MMO即时战斗:地图角色同步管理和防作弊实现

    ---转自CSDN 一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角 ...

  3. MMO技能系统的同步机制分析

    转自:http://www.gameres.com/729629.html 此篇文章基于之前文章介绍的技能系统,主要介绍了如何实现MMO中的技能系统的同步.阅读此文章之前,推荐首先阅读前一篇文章:一个 ...

  4. 如何平衡MMO游戏

    转自:http://blog.sina.com.cn/s/blog_9f56a65f01013eti.html 前言 这是一篇出自国外博客“Elder Game”的一篇文章,笔者觉得里面很多东西说的很 ...

  5. 知道创宇研发技能表v3.1

    by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客 ...

  6. Android高工必备技能

    转载:http://www.jianshu.com/p/d791bbede02c Step 1. 玩转RxJava 使用RxJava处理异步极其方便,各种操作符可以对数据做流水线式操作,再加上与Ret ...

  7. iOS 即时通讯SDK的集成,快速搭建自己的聊天系统

    现在的外包项目需求变态的各种各样,今天要做社交,明天要加电商,后天又要加直播了,这些系统如果要自己开发,除非大公司技术和人力都够,不然短时间是几乎实现不了的.所以学会灵活利用市面上的各种SDK是灰常重 ...

  8. ARPG游戏技能系统设计

    ARPG游戏的技能的前端表现, 主要指的是人物动作和特效表现, 从普遍意义上讲,大致可以分为三个阶段:起手.飞行.碰撞(爆炸). [特效可见性判断] 1.[attacker & victim] ...

  9. 知道创宇研发技能表v3.0

    知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关 ...

随机推荐

  1. NSLog的各种打印格式符 和 打印CGRect时用NSStringFromCGRect

    打印CGRect时用NSStringFromCGRect 转载自:http://blog.csdn.net/chenyong05314/article/details/8219270 1. 打印CG开 ...

  2. JAVA并发-线程状态

    一.线程基本状态 新建:线程已创建但start()方法还没执行 就绪(可运行):start()方法已运行,但还没被选择 运行:从就绪线程中选择出某一个线程进行run()操作 阻塞(不可运行):线程正在 ...

  3. iOS小知识点

    1.子视图超出frame的部分不显示  view.clipsToBounds 设置为YES;   UIScrollview的clipsToBounds默认就是YES 2.UIImage 有一个属性叫s ...

  4. Spring Boot在反序列化过程中:jackson.databind.exc.InvalidDefinitionException cannot deserialize from Object value

    错误场景 用Spring boot写了一个简单的RESTful API,在测试POST请求的时候,request body是一个符合对应实体类要求的json串,post的时候报错. 先贴一段error ...

  5. 「PHP」设计模式介绍

    引言   最近再看PHP设计模式相关的一些技术文章,网上有关PHP的设计模式范例很少,这里做一些总结仅供参考,不足之处望提出. 参考资料: <大话设计模式>程杰   什么是设计模式   设 ...

  6. 集合之HashMap、Hashtable

    HashMap 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtabl ...

  7. 流程控制之--if。

    假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样 ...

  8. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  9. 慎用静态类static class

    偶然翻到一篇有趣的帖子: class - When to Use Static Classes in C# - Stack Overflowhttp://stackoverflow.com/quest ...

  10. 【Hutool】Hutool工具类之随机工具——RandomUtil

    commons-lang中对应也有RanddomUtils.RandomStringUtils 直接从类结构开始入手: 基本都是见名知意了,就不一一展开:点开源码可以看到算是比较通俗易懂的对Rando ...