找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 24|回复: 2

[教程] 基于北斗GMS083,组队伤害分摊的一种简单实现[抛砖引玉]

[复制链接]

2

主题

3

回帖

12

积分

新手上路

积分
12
发表于 昨天 20:52 | 显示全部楼层 |阅读模式
本帖最后由 江奈Mizuki 于 2025-9-25 21:20 编辑

写在前面

一直觉得大巨变前的冒险岛血量和伤害设计有问题,洗血又会让一些职业失去特色。从其它MMORPG里借鉴来了“组队的时候有的队友担当着肉盾”的设计。


这个帖子记录的是刚入坑的时候使用玩家指令(@***)实现的一个组队伤害分摊的方案。我在近期学完新的知识之后有做得更简单轻便的打算,其实算不上什么教程,更多地是想和各位大佬交流想法,如果大佬能为我提供一些把这个功能实现得更简单轻便的思路,我会感到很幸福。


思路方面的介绍不会进行隐藏,隐藏内容是后续打算改进的思路,以及当时我在尝试实现这个功能时的踩坑笔记。


实现的思路

最终效果

这个功能的效果,简单来说是,在同一个队伍下,每名组员可以选择自己是“盾姿态”(承受队友伤害)还是“剑姿态”(将伤害分摊给队友),改变自己受到的伤害。


核心思路与主要函数

我的基本思路是使用北斗项目的“角色扩展表”功能,让每个角色有一个剑盾姿态的标记。例子:


  1. player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","shield"); //角色被设置成了盾姿态
  2. player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","sword"); //角色被设置成了剑姿态
  3. player.getAbstractPlayerInteraction().saveOrUpdateCharacterExtendValue("剑盾姿态","solo"); //角色受到的伤害不受队友影响
  4. style = player.getAbstractPlayerInteraction().getCharacterExtendValue("剑盾姿态"); //获取角色目前的姿态
复制代码

然后在处理伤害的源码(TakeDamageHandle.java)里引入对这个标记的判断,影响角色受到的伤害。p.s.在本帖隐藏的源码里,我想要一些仪式感,让一些减伤技能对“队友传递过来的伤害”重复计算一次,但由于没弄清发包怎么做,用了比较笨的办法,把相关减伤技能执行的代码抄了一遍....


涉及到对组队状态、队友是否有盾姿态的检测,用了for循环遍历:


  1. for (PartyCharacter chrser : chrparty.getMembers()){

  2. }
复制代码

面向初次接触玩家指令编辑的提示

如果像我一样新增玩家命令的话,需要在数据库command_info里加对应的信息。


目前待改进的地方

游客,如果您要查看本帖隐藏内容请回复

成品源码参考



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1蘑菇币 +20 收起 理由
leevccc + 20 鼓励原创

查看全部评分

40

主题

26

回帖

343

积分

管理员

积分
343
发表于 昨天 21:05 | 显示全部楼层
你这代码里是不是少了判断:同地图的队友?在线状态?

思路是挺好的,我当初有想过给圣骑士加个这样的技能,让圣骑士做一个肉盾分摊队友伤害,提高这个职业的作用。
有问题欢迎跟帖提问。

0

主题

11

回帖

87

积分

注册会员

积分
87
发表于 5 小时前 | 显示全部楼层
减伤功能加在特定职业上发挥他的辅助作用,类似魔兽中白牛的灵魂锁链
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|蘑菇物语

GMT+8, 2025-9-26 13:26 , Processed in 0.057088 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表