本帖最后由 江奈Mizuki 于 2025-9-25 21:20 编辑
写在前面
一直觉得大巨变前的冒险岛血量和伤害设计有问题,洗血又会让一些职业失去特色。从其它MMORPG里借鉴来了“组队的时候有的队友担当着肉盾”的设计。
这个帖子记录的是刚入坑的时候使用玩家指令(@***)实现的一个组队伤害分摊的方案。我在近期学完新的知识之后有做得更简单轻便的打算,其实算不上什么教程,更多地是想和各位大佬交流想法,如果大佬能为我提供一些把这个功能实现得更简单轻便的思路,我会感到很幸福。
思路方面的介绍不会进行隐藏,隐藏内容是后续打算改进的思路,以及当时我在尝试实现这个功能时的踩坑笔记。
实现的思路
最终效果
这个功能的效果,简单来说是,在同一个队伍下,每名组员可以选择自己是“盾姿态”(承受队友伤害)还是“剑姿态”(将伤害分摊给队友),改变自己受到的伤害。
核心思路与主要函数
我的基本思路是使用北斗项目的“角色扩展表”功能,让每个角色有一个剑盾姿态的标记。例子:
- player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","shield"); //角色被设置成了盾姿态
- player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","sword"); //角色被设置成了剑姿态
- player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","solo"); //角色受到的伤害不受队友影响
- style = player.getAbstractPlayerInteraction().getCharacterExtendValue("剑盾姿态"); //获取角色目前的姿态
复制代码
然后在处理伤害的源码(TakeDamageHandle.java)里引入对这个标记的判断,影响角色受到的伤害。p.s.在本帖隐藏的源码里,我想要一些仪式感,让一些减伤技能对“队友传递过来的伤害”重复计算一次,但由于没弄清发包怎么做,用了比较笨的办法,把相关减伤技能执行的代码抄了一遍....
涉及到对组队状态、队友是否有盾姿态的检测,用了for循环遍历:
- for (PartyCharacter chrser : chrparty.getMembers()){
- }
复制代码
面向初次接触玩家指令编辑的提示
如果像我一样新增玩家命令的话,需要在数据库command_info里加对应的信息。
目前待改进的地方
成品源码参考
|