-
Notifications
You must be signed in to change notification settings - Fork 30
[experiment] 跨服功能 #607
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
[experiment] 跨服功能 #607
Conversation
- bug 虚假实体残留(没有意义的分身bug) - update 名字获取,名字前缀等 - 进度 25%
- update 死亡&复活的正确对应
- fix 角色1对其他使用单体技能 - fix 角色对自身使用技能
- update 跨服移动前,对应map-serv掉线后正确清理中立服的记录,防直接断线 - update 阻挡跨服ID好友
- ↑ 但尚未解决读取问题
- fix 中立服务器 未正确存储的问题 - bug 从中立服务器 回去 源服务器时,party无法正确刷新的问题,需要重新上线获取.
- deprecated 自定义缓存 mmo_status_cache 不需要了 - fixme 组队时,有概率会使得新队员看自己像队长(新队员重登后正常) - fixme 组队时,get_real_name函数在面对未前缀化的名字可能会异常
- fix get_real_name不正确的问题
- fix 伤害指令没有显示的问题 - fix 技能释放时没有正确显示的问题 - fix 组队、公会的大部分问题
This reverts commit 07831b6.
- update clan的跨服支持(待完整测试)
- update 新增"跨服失败时标准事件" OnPCCSFailedEvent
- 移动base.conf的选项至conf/battle/crosseserver.conf - 修正server.conf.default的内容
- update Quest,Achievement的正确存储 - update 删除部分非必要选项
- update Rodex Mail的对应(仍需完善) - update 换服时检查到对应map掉线的处置
- update 源服map-serv退出时,将会使中立服对应的角色也正确退出(ctrl+c,@mapexit等指令)
- update 正确统计在线人数 - update 正确删除pet、homunculus、memr
- update 邮件正常发送 - update 交易名字正常发送 - update 私聊正常交互 - update fake name完善
- update 实现group_id继承规则 - fix 移动地图后特殊情况下死亡的bug
- update 优化逻辑
- fix skillcooldown独立 - fix refresh mailbox
…s_server_feature
|
Ubuntu 18.04.6 LTS 編譯報錯如下: /home/ubuntu/Pandas/src/common/socket.cpp: In function ‘int WFIFOSET(int, size_t)’:** 嘗試#undef Pandas_Fake_Id_Check_Debug、#undef Pandas_Print_Trace_Packet報錯如下: [ 76%] Linking CXX executable ../../../login-server |
- fix 中立服last_map不应该是非中立服的地图
- update 实现露天商店的控制
- fix 在map_addiddb(&sd->bl)前调用pc_setoption有可能因为status_calc_pc导致崩溃 - fix 位移技能正确显示
- update 优化刷新客户端残留内容的时机
f16b61e to
58ca2ea
Compare
测试的PACKETVER : 20200304 推荐至少2018以上
测试的版本:RE(复兴后)
多个服务器玩家的跨服功能
日本官方已有先例,但实现方式略有不同,而且按照官方的实现有庞大的工作量。
因此,试着实现一个真正意义的跨服交互。
Ra架构简析
首先简析Ra目前多Map的架构
Login - Char - Map1(prt_fild08以外的地图) - Map2(prt_fild08)的地图
当玩家尝试进入prt_fild08的地图时,会按照以下流程
基于此架构下的新增功能
当加载此跨服功能后,除保留以上原架构外,利用Map与Char之间已经构建好的特性,实现了一个Map链接多个Char,
即A服与B服通过中立服,制造出一个交汇点,使得两个或多个服的玩家可以在其中,通过中立服的Map运算,达到多源服务器数据交互这一跨服行为。
※A服玩家是不可能到B服的,同理B服玩家也是。
测试场景
名词指代:
跨服 - 一般指A服<->中立服,B服<->中立服的行为。
源服 - 指在进行跨服前,来自哪个服务器(A,B,中立都有可能)
准备工作
测试时、请使用3份同样的源码以及DB
运行测试
※注意: 单机测试时A服、B服、中立服的各3个端口5121,6121,6900都必须不同
※注意: 更多可选的配置位于conf/battle/crossserver.conf中
预期结果: 玩家1(来源A服),玩家2(来源B服)于中立服中的prt_fild08见面,并且可以进行各种交互。
架构细节
※1 客户端获得AID的时机,是从输入账号校验登陆后获得。此时无法区分将要登陆的是A服还是中立服,因此无法把伪装后的AID发给客户端
※2 细节上的一个例子,涉及客户端动画效果播放。
假设存在玩家A,怪物B,玩家C,其中A与B发生交互,C在观察。
服务端传来这样一段伤害的封包: A对B进行攻击并造成了伤害
因为按照RA的架构下,跨服架构下的各方ID如下所示
因此,要对参与互动的玩家对象,都得额外补发一个真实ID的封包,才能正确显示。
以表格为例,需要对玩家A补发一个 AID:200 对 GID:1 进行攻击的 封包。
以此得知,玩家A,玩家C交互时,需要对双方补发一个双方真实ID的封包。
由此会带来少量的宽带占用问题,但现在的网络环境来说是完全可以接受的。
※3
原架构如下
跨服架构后
Guild Clan方面也是相应的改动
ToDo:
本功能已经可以正常测试使用