V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
AAdalao
V2EX  ›  游戏开发

游戏里的那套技能/buff 系统叫什么?有开源库吗?

  •  
  •   AAdalao · 2020-03-23 12:23:24 +08:00 · 9422 次点击
    这是一个创建于 1711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是那个是个游戏就会有的 buff 系统,行话叫什么? git 上有开源的可以参考吗,求大佬带

    44 条回复    2020-06-16 23:16:02 +08:00
    AAdalao
        2
    AAdalao  
    OP
       2020-03-23 15:13:28 +08:00
    @cwjokaka 这个项目就是个通讯系统而已吧
    augustheart
        3
    augustheart  
       2020-03-23 16:52:17 +08:00
    buff 系统?你确定说的是 buff,而不是技能天赋什么的?
    不管是哪个,这东西是没有现成的开源库的。
    它的本质就是贴个图而已……
    VDimos
        4
    VDimos  
       2020-03-23 18:36:19 +08:00 via Android
    [].push({id, name, describe, …})
    iriyave
        5
    iriyave  
       2020-03-23 22:19:27 +08:00
    就是游戏技能系统,buff 只是技能中的一种而已。
    这东西还是挺复杂的,要牵扯到本地-服务端-其他玩家的同步,三端都要跑,为了防作弊一般以服务器跑的逻辑为准,客户端为了保证流畅还要做预测和错误回溯。
    因为不同游戏的玩法差别很大,好像没什么通用的库,不同引擎也不好公用一套,因为技能系统一般是针对引擎深度定制的,要做好配套的技能编辑器。
    不过你可以找一些开源的游戏看下思路,UE4 前一阵子有期中文直播正好讲到技能系统相关的实现,好像是盛趣的人讲的,你可以看看。
    sunny352787
        6
    sunny352787  
       2020-03-23 23:11:21 +08:00   ❤️ 2
    这玩意是游戏的核心,我们叫战斗系统,包括技能 /buff 的结算、显示、记录、验证,其中结算部分是最核心的,我估计你说的就是这部分,貌似没有通用的开源实现,我 N 年前随手写了一个 https://github.com/sunny352/BattleSystem,不过不全面,只是写了个结算部分的思路,不知道你能不能用得上
    sunny352787
        7
    sunny352787  
       2020-03-23 23:12:00 +08:00
    AAdalao
        8
    AAdalao  
    OP
       2020-03-23 23:35:30 +08:00
    @iriyave 技能系统总不可能每个项目都分别写一套吧,总会抽象出一个公用模型的。就比如回合制的技能系统,我感觉上都是相通的
    LokiSharp
        9
    LokiSharp  
       2020-03-24 00:03:10 +08:00 via iPhone
    可以看看 RPGMaker MV 的代码
    MeteorCat
        10
    MeteorCat  
       2020-03-24 00:13:46 +08:00 via Android
    没有通用的,不过换皮武侠 H5 好像有
    Tink
        11
    Tink  
       2020-03-24 00:14:40 +08:00 via iPhone
    技能树?
    lights
        12
    lights  
       2020-03-24 01:12:47 +08:00
    非游戏行业人士,不负责任猜测:
    BUFF 系统本身只负责状态同步、状态的计算和显示,但状态的影响是由游戏的其他逻辑实现的
    (比如加攻击力是战斗系统实现)
    nguoidiqua
        13
    nguoidiqua  
       2020-03-24 01:21:55 +08:00 via Android   ❤️ 1
    @AAdalao

    有几个做游戏的甘心抄别人的设计,哪个不想搞出自己的独特设计,技能系统是个很重要的表现差异的地方,加上和人物属性关联又很大,除非你这些数值体系都一样,不然怎么通用?如果这些都一样了,那还设计个屁,那不就是只剩换下皮了。

    只有那些和设计关联不大的系统才会考虑通用共用,比如充值系统。
    nguoidiqua
        14
    nguoidiqua  
       2020-03-24 01:35:57 +08:00 via Android
    你要只是想研究怎么实现技能系统,那你找开源的游戏看看它们怎么实现就是了。

    你要想直接拿别人的用,那是不现实的,因为那会制约你的游戏设计,一个属性不同都要做出极大改动,隐患多多,最后会发现还不如自己写。
    AAdalao
        15
    AAdalao  
    OP
       2020-03-24 08:18:08 +08:00
    @nguoidiqua 我看过 war3 和 sc2 的编辑器,感觉那套就很牛逼,就是不想自己造轮子了,这玩意一看就知道工程量巨大,一个人怕是要搞几个月
    AAdalao
        16
    AAdalao  
    OP
       2020-03-24 08:39:45 +08:00
    @LokiSharp rpgmaker 居然是开源的?
    LokiSharp
        17
    LokiSharp  
       2020-03-24 08:43:58 +08:00
    @AAdalao #16 编辑器不开源,生成的代码是 JS
    across
        18
    across  
       2020-03-24 09:17:16 +08:00 via iPhone
    unity 插件库里面不少吧,找 rpg 类的模版。
    一般做成支持编辑器配置的。
    rohgeo
        19
    rohgeo  
       2020-03-24 09:36:15 +08:00
    如果有两个游戏用的同一套系统,那就是换皮
    AAdalao
        20
    AAdalao  
    OP
       2020-03-24 09:42:58 +08:00
    @rohgeo 啥啊,哪有你这样扯的,那我用 rpgmaker 做的游戏都是换皮?
    swordne
        21
    swordne  
       2020-03-24 10:05:12 +08:00
    @AAdalao 他说的是游戏系统,比如网易家出的游戏,大多都是换皮,UI,战斗系统,社交系统,玩法,只是贴图和模型有区别,这就叫换皮,而不是开发或者载体,比如你用用同一个引擎,那怎么能叫换皮...人家说的没错
    RadishWind
        22
    RadishWind  
       2020-03-24 10:30:16 +08:00
    之前自己写过回合制的系统,用 OOP 的方式,特别好写 可以手写试试
    AAdalao
        23
    AAdalao  
    OP
       2020-03-24 10:31:15 +08:00
    @swordne 这个我当然知道,你看了这么多楼,也该明白我要表达是个什么系统吧。就算网易的换皮,内部肯定也是有个像 rpgmaker 的编辑器的,里面肯定也会有个抽象出来的技能系统的吧。不然就像我前面楼说的,每个游戏分别做一套哪个游戏公司负担得起
    nguoidiqua
        24
    nguoidiqua  
       2020-03-24 10:33:18 +08:00 via Android
    @AAdalao

    懒得自己做,就拿现成的用呗,虽然这方面受限了,但是还可以在别的方面创新,而且改改数据也能让同一套技能系统玩出不一样的感觉。

    做游戏设计本来就要被实现制约,你用别人的就接受别人的制约就是了,反正大家都不能完全实现自己的创意。
    AAdalao
        25
    AAdalao  
    OP
       2020-03-24 10:36:24 +08:00
    我认为这个"技能系统"不会跟游戏玩法深度绑定的,肯定会抽象出来的吧。难道就真的没有现成的框架实现?
    AAdalao
        26
    AAdalao  
    OP
       2020-03-24 10:38:09 +08:00
    @nguoidiqua 所以我这不是在问有没现成的框架实现吗,至少给个名字吧 _(:з)∠)_
    murmur
        27
    murmur  
       2020-03-24 10:42:50 +08:00
    buff 和技能都要开源,再想什么呢,英雄联盟的核心不就是每个英雄那四个技能么
    murmur
        28
    murmur  
       2020-03-24 10:43:09 +08:00
    哦对了还一个大小龙 buff,完美覆盖你要的东西
    viakiba
        29
    viakiba  
       2020-03-24 10:43:58 +08:00
    这玩意很复杂不通用 技能 buff 都是围绕着战斗搞得
    paoqi2048
        30
    paoqi2048  
       2020-03-24 10:58:17 +08:00
    首先,游戏开发领域在开源方面的建设远不如 Web 领域,所以你多半找不到对应的开源实现,就算有,也可能不符合你的需求。
    虽然不同类型的游戏(卡牌 /RPG/MOBA )的技能设计思路很不一样,但说到底还是填数值。所以 LZ 实际上需要的是导表工具,比如说支持解析这样的数据:
    技能 ID|技能名称|技能伤害|冷却时间|施法距离|...
    这种脚手架 LZ 可以自己做一套。
    LostPrayers
        31
    LostPrayers  
       2020-03-24 12:32:27 +08:00
    你顶多能找到个基础模板或者完整成品,
    中间产品是不存在的,或者说对你想做的最终产品来说是不存在的
    nguoidiqua
        32
    nguoidiqua  
       2020-03-24 12:34:22 +08:00
    @AAdalao

    流行的做法就是自己弄体现自己的创意,真的没听说过有什么流行的通用方案的,也许网上可能一些学习性质项目吧。

    至于换皮公司,人家可以方便自己换皮,它会放出来方便你拿它的游戏换皮吗?这也是不太可能用通用方案的原因之一,你用通用的方案,意味着你很容易被人抄。需求不大的,真的没听说过。

    实际上,做通用的技能编辑器很尴尬的,专业的不会采用,业余的用不了,那不如就做整套了,给什么都不会的业余人士用。比如 RPGMaker,那还有点市场,但是市场也很小的,毕竟这年头很多游戏可以做 MOD 玩了,我也只听说过 RPGMaker,类似的开源项目没听说过。

    不过呢,网上倒是很多游戏源码,有开源的也有泄露的,有些会附带编辑器之类工具,你从这个方向去找,比较容易找到你想要的东西。

    我自己有关注一个用 C# 重写传奇客户端和服务端的项目,还有个用 GO 重写传奇服务端的项目。不知道你是打算做什么类型游戏,前面你提到了回合制什么什么,也许也有仿梦幻西游之类的开源项目,各种热门类型的游戏应该都有开源仿品,可以自己找找。
    iriyave
        33
    iriyave  
       2020-03-24 12:34:52 +08:00
    @AAdalao 都说了游戏玩法不一样,技能系统肯定千差万别,你又不说你想做什么类型的游戏,
    你觉得炉石的技能系统能拿到 lol 里用吗? lol 里的技能系统能拿到 dnf 里用吗?让你针对这 3 种游戏抽象出一个框架,你来试试?这东西跟你的游戏和引擎耦合度非常高,技能牵扯的东西很多,包括通讯,同步,渲染,和你游戏中的角色,怪物等等。想要用现成的,前提是你定好要做什么类型的游戏,用什么引擎,即使有现成的也不一定满足你需求,除非你要做的游戏玩法很普通,跟同类型的游戏没什么区别。这还只是说客户端,服务端还是要你自己撸。
    est
        34
    est  
       2020-03-24 12:48:17 +08:00
    buff 也分很多种吧。有的实现起来简单有的牵扯的东西就多了。
    swordne
        35
    swordne  
       2020-03-24 13:08:04 +08:00   ❤️ 2
    @AAdalao
    这套东西就是和游戏深度绑定的,游戏行业开源的是引擎,技能数值都是根据每个游戏单独定制的,要不然怎么会有所谓的 3A 大作这个说法?同一个公司开发的游戏都有褒贬不一,甚至同一个系列都会有好有坏,你看看贝塞斯达不也弄过辐射 4 这种相当糟糕的游戏么?开发的相当差劲。
    还有,不要用 WEB 开发的思想去琢磨游戏开发,设置端游 /网游 /手游的开发都各有迥异,能够通用的,大抵只有玩法和创意了吧。
    coderEOS
        36
    coderEOS  
       2020-03-24 16:05:49 +08:00
    就 battle skill buff
    chenyu8674
        37
    chenyu8674  
       2020-03-24 17:59:06 +08:00
    做游戏前先在想做的类型里找几个精典的玩明白吧
    看 LZ 这种表达方式感觉游戏都没怎么玩过的样子
    AAdalao
        38
    AAdalao  
    OP
       2020-03-24 18:19:54 +08:00
    唉,我是知道这套东西很复杂且麻烦。
    我就是没写过才来问有没可以参考的库的,怎么感觉莫名其妙就变成批斗大会了
    momocraft
        39
    momocraft  
       2020-03-24 18:26:21 +08:00
    写网页都搞不出统一的库,要游戏设计统一可能期待有点高

    如果你表达不出是正常的,本来就不是几句话讲清楚的东西。也许可以从想清楚 buff 是什么开始。
    across
        40
    across  
       2020-03-24 19:02:53 +08:00
    @AAdalao 都和你说了,你要找的不是类库,而是一个游戏模板。
    GeruzoniAnsasu
        41
    GeruzoniAnsasu  
       2020-03-24 19:31:56 +08:00
    我猜你想要这样的东西

    StatType ss
    ss.append([
    {name:"HP",type:int,default:100},
    {name:"Mana",type:int,default:100},
    {name:"Damage",type:float,default:10},
    ])

    BuffType bs
    bs.append([
    {name:"ForceUpgrade",type:float,variables:[{name:"Level",type:int}],effect:lambda d->d*=(1+0.05)^this.variables["Level"]}
    ])



    上面描述了 3 种属性,血量蓝量伤害
    以及一个 buff 效果,每级提升伤害%5 的叫“ForceUpgrade”的 buff

    想象你要设计一个能描述任意数值系统的类库 /框架,那你可能必须足够灵活到能支持类库使用者使用任意数据结构描述他的系统设计。所以这个类库本身就没法有什么太固定的数据结构,等于说这个类库啥也没做




    你要写新游戏,必然要设计一个全新的角色类,设计全新的技能类,角色类和技能类难到不包括数值字段吗?不包括的话,这游戏是个模拟游戏?数值计算可以脱离交互?为什么能写成这样?这样的话你是在期望一个能帮你做什么的库?包括数值的话,所有的数据结构都要另行定义,那还是这个问题,这种场景下你是在期望库能帮你做什么?
    pwanbul
        42
    pwanbul  
       2020-04-06 01:23:22 +08:00
    一部分数据是策划导表,服务器上还要写一些代码
    Tianqi
        43
    Tianqi  
       2020-05-15 22:13:15 +08:00
    那个叫战斗系统,相应的职位有战斗程序和战斗策划。
    UE4 内置了一个,叫做 GameplayAbilitySystem,堡垒之夜和 Paragon 在用,。
    mattx
        44
    mattx  
       2020-06-16 23:16:02 +08:00
    可以看看 魔兽世界 开源的模拟器,有比较完善的实现 trinitycore
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2553 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 15:56 · PVG 23:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.