00003 不思议迷宫.0009.9:命运之链
00003 不思议迷宫.0009.9:命运之链
我不知道别人的怎么样,反正在我的手机们上,仅在该功能刚出来时找到过其他玩家。然后,官方说部分玩家该功能不能用,修复了。可惜的是,自从这个“修复”之后,我就再也没找到过任何其他玩家。你说我在住处没找到也就算了,毕竟在郊区;可是我在上海六院也没找到,你说这到底是啥情况?在家里,Wifi和4G都试过,在六院,用的是iShanghai。我听说别人说,在模拟器中,将定位修改为北京的那个TAM,就能找到人了。我就在模拟器中试了试,果然如此。哈哈,那我就来改改吧,全部、直接定位到TAM。
首先要找找“命运石柱”功能的实现代码。
“命运石柱”在主地图界面src/game/ui/form/main/UIMainMap.luac中。找到函数registerTouchEvent:
function UIMainMap:registerTouchEvent()
……
-- 命运的链
local fateIcon = findChildByName(self.node, "map/fate/fate_icon/icon");
self.fatePanel = findChildByName(self.node, "map/fate");
local function onFateClick(sender, eventType)
if true ~= LocationM.prepare() then
return;
end
require "game/ui/form/fate_chain/UIFateChain"
UIMgr.getCurrentScene():removeFormByName("UIFateChain");
local uiForm = UIFateChain.create();
UIMgr.getCurrentScene():addForm(uiForm);
AudioM.playFx("ui_open1");
end
self:registerEnterClick(self.fatePanel, fateIcon, onFateClick);
self:registerEnterClick(fateIcon, fateIcon, onFateClick);
end
命运之链的具体实现是game/ui/form/fate_chain/UIFateChain。在这个界面中,当玩家点击“放大镜”图表时,便开始搜索附近的玩家。跟进,继续找函数registerTouchEvent:
function UIFateChain:registerTouchEvent()
……
-- 查询
local searchNode = findChildByName(self.node, "bg/search");
local function onSearchClick(sender, eventType)
if eventType == ccui.TouchEventType.ended then
AudioM.playFx("workshop_material");
-- 尝试查询
self:searchEventUpdate();
self:startFateChain();
end
end
searchNode:addTouchEventListener(onSearchClick);
end
回调很简单,主要就两个函数, self:searchEventUpdate()和self:startFateChain(),后者更像:
-- 玩家发起搜索
function UIFateChain:startFateChain()
……
local function updateLocation()
FateChainM.startFateChain();
-- 每隔10s更新定位信息
performWithDelay(self.node, updateLocation, 10);
end
-- 先发起定位
updateLocation();
local function delay()
self.search = true;
if FateChainM.getCurState() == FATE_CHAIN_STATE_FREE then
-- 如果是空闲状态,则尝试搜索
FateChainM.doSearch();
end
-- 每隔5s搜索一次
performWithDelay(self.node, delay, 5);
end
-- 5s后开始搜索
performWithDelay(self.node, delay, 5);
end
函数的前半部分代码的作用就是“每隔10s更新定位信息”,这是注释说的。如果没有这个注释,我TM得看半天,看看那循环递归,欺负我人老了反应迟钝是不是?直接用个shceduler会死啊?
真正的搜索代码在后半部分:FateChainM.doSearch():
function doSearch()
LocationM.getNearbyPlayers(receiveData, SEARCH_LIMIT_NUM);
end
又跑LocationM.getNearbyPlayers这去了:
-- 获取周围其他玩家信息
-- 该接口调用频率不要小于3秒
function getNearbyPlayers(callback, limitNum)
-- 获取周围八个格子的geohash编码
local hashStrList = getGeoHashStr();
if #hashStrList == 0 then
return;
end
-- 从服务器请求这9个格子内的玩家
Operation.cmd_get_nearby_infos(hashStrList, curVersion, limitNum);
-- 设置回调
getNearbyFunc = callback;
end
“获取周围八个格子的geohash编码”、“从服务器请求这9个格子内的玩家”,突然之间不知道怎么理解了,为什么上面是8、下面就是9了?不管了,反正大意明白了,getGeoHashStr中就是我们所要关心的位置信息。
-- 获取9格编码
function getGeoHashStr()
if curGeoHashStr == "" then
return {};
end
local hashStrList = GeoHash.neighbours(curGeoHashStr);
hashStrList = table.values(hashStrList);
table.insert(hashStrList, 1, curGeoHashStr);
return hashStrList;
end
“获取9格编码”,看到这个我大概明白了上面注释的意思,正确的说法应当是“获取周围八个格子的geohash编码、以及玩家当前格子的geohash编码”。
重要的是curGeoHashStr,它是一个local,查找赋值,只有一处:
-- 获取坐标回调
function onSuccess(lat, lon)
-- 生成geohash串,上报到服务器
local fullHashStr = GeoHash.encode(lat, lon);
-- 截取精度位数
curGeoHashStr = string.sub(fullHashStr, 1, curPrecision);
-- 上报给服务器
Operation.cmd_upload_location_data(curGeoHashStr, fullHashStr);
end
简单了,我们只要在这个函数中将fullHashStr修改为我们所要设置的值即可,或者修改lat和lon也行。
用百度地图或者其他什么地图,查一下TAM的经纬度,传给GeoHash.encode,搞定。
如有需要,可进群161355323下载补丁或安装程序。
00003 不思议迷宫.0009.9:命运之链相关推荐
- 00003 不思议迷宫.0009.7:一键采矿(钻石、金蛋等)
00003 不思议迷宫.0009.7:一键采矿(钻石.金蛋等) 矿有很多种,今天要说的是其中的钻石矿这种,也是就神龙许愿"我想要钻石"后进到夹层中,地上显示的那些需要点击99次(初 ...
- 00003 不思议迷宫.0009.6:一键翻开石板捡取物品
00003 不思议迷宫.0009.6:一键翻开石板捡取物品 先上主要代码: local function onMyButton_AutoPickUpAllItems(sender, eventType ...
- 00003 不思议迷宫.0009.10:Bug之二:免称号锻造、升级装备,合成卷轴
00003 不思议迷宫.0009.10:Bug之二:免称号锻造.升级装备,合成卷轴 今天玩德古拉城堡,想击杀100层Boss完成"首领礼包".平时我都是用双大地,但一直听说啥主流套 ...
- 00003 不思议迷宫.0009.2.1:自动换装:简单规划
00003 不思议迷宫.0009.2.1:自动换装:简单规划 我今天白天在思考问题之余,又玩了会游戏,下了个竞技场副本,才第一次注意到竞技场中的观众也是可以杀的.当然,是没办法直接攻击观众的,必 ...
- 00003 不思议迷宫.0009.2.2:自动换装:界面模拟
00003 不思议迷宫.0009.2.2:自动换装:界面模拟 这两天一直在研究游戏的csb解析显示.重用luac之类的问题,中间遇到各种问题,各种痛苦.唉,还是知识储备不足啊,耽搁了不少时间.其 ...
- 00003 不思议迷宫.0009.2.4:自动换装:在事件中实现自动换装
00003 不思议迷宫.0009.2.4:自动换装:在事件中实现自动换装 具体的换装动作如何实现呢?老办法:学原版.在前一章中,我们已经接触过一个叫做"UIEquipsOperatio ...
- 00003 不思议迷宫.0009.2.3:自动换装:回改到真实环境
00003 不思议迷宫.0009.2.3:自动换装:回改到真实环境 在将代码弄到真实环境之前,先将UIAutoEquipingConfig中的类似代码重构一下. local l ...
- 00003 不思议迷宫.0008:分析了半天我们能干什么?
00003 不思议迷宫.0008:分析了半天我们能干什么? 玩家数据不能直接修改,间接的似乎也不行,那我们还能干什么? 能干的有很多. 比如,我先问问,大家是如何在炼金坊捡钱的?除开玩模拟器使用按键精 ...
- 00003 不思议迷宫.0006:客户端的操作如何反应到服务器?
00003 不思议迷宫.0006:客户端的操作如何反应到服务器? 玩家点击手机屏幕,根据点到内容的不同而执行不同的操作,比如切换画面或者场景.播放动画或声音.发送数据等等.我现在所关心的是点到物 ...
最新文章
- [zt]petshop4.0 详解之八(PetShop表示层设计)
- 百度开源,分布式配置中心
- SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
- python中struct_Python的Struct模块,用法以及个人理解
- python给图片添加字符
- 《大道至简》阅读笔记二
- 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
- 算法设计与分析——回溯法——旅行售货员问题
- java 实现中文排序,Java自定义比较器实现中文排序
- Scanner进阶详细讲解
- mysql window下 安装udf_Windows下MySQL下载安装、配置与使用
- ASP.NET中的事件处理
- .NET Framework也可以开发托管了
- hdu1861 游船出租【模拟】
- JQuery中ajax用法
- 初学者python编辑器用geany可以吗_面向初学者的Python编辑器Mu
- 在 boot 操作过程中的 FIRST_BOOT阶段,安装失败,出现错误
- 【电子学会】2022年12月图形化一级 -- 和平使者
- 什么是防抖和节流?区别是什么?
- RuoYi-Vue 分离版 收获与总结
热门文章
- SEO优化与SEM(竞价)区别在哪?
- Photoshop照片一键转换手绘效果图动作
- 微积分手机版与高清电子投影仪是“绝配”
- 努比亚 系统升服务器设置,努比亚Nubia x6官方系统升级教程与方法
- 玩转python(一)——微信远程控制电脑
- 几个招聘网站,智联的最垃圾
- 8.String str=“i“与 String str=new String(“i”)一样吗?
- Android 7.0 新特性
- 不用下载软件也能打开EPUB?详解这款支持网页端的阅读器
- 被“中年危机”榨干的年轻人:如何尽早实现财务自由?