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:命运之链相关推荐

  1. 00003 不思议迷宫.0009.7:一键采矿(钻石、金蛋等)

    00003 不思议迷宫.0009.7:一键采矿(钻石.金蛋等) 矿有很多种,今天要说的是其中的钻石矿这种,也是就神龙许愿"我想要钻石"后进到夹层中,地上显示的那些需要点击99次(初 ...

  2. 00003 不思议迷宫.0009.6:一键翻开石板捡取物品

    00003 不思议迷宫.0009.6:一键翻开石板捡取物品 先上主要代码: local function onMyButton_AutoPickUpAllItems(sender, eventType ...

  3. 00003 不思议迷宫.0009.10:Bug之二:免称号锻造、升级装备,合成卷轴

    00003 不思议迷宫.0009.10:Bug之二:免称号锻造.升级装备,合成卷轴 今天玩德古拉城堡,想击杀100层Boss完成"首领礼包".平时我都是用双大地,但一直听说啥主流套 ...

  4. 00003 不思议迷宫.0009.2.1:自动换装:简单规划

     00003 不思议迷宫.0009.2.1:自动换装:简单规划 我今天白天在思考问题之余,又玩了会游戏,下了个竞技场副本,才第一次注意到竞技场中的观众也是可以杀的.当然,是没办法直接攻击观众的,必 ...

  5. 00003 不思议迷宫.0009.2.2:自动换装:界面模拟

     00003 不思议迷宫.0009.2.2:自动换装:界面模拟 这两天一直在研究游戏的csb解析显示.重用luac之类的问题,中间遇到各种问题,各种痛苦.唉,还是知识储备不足啊,耽搁了不少时间.其 ...

  6. 00003 不思议迷宫.0009.2.4:自动换装:在事件中实现自动换装

     00003 不思议迷宫.0009.2.4:自动换装:在事件中实现自动换装 具体的换装动作如何实现呢?老办法:学原版.在前一章中,我们已经接触过一个叫做"UIEquipsOperatio ...

  7. 00003 不思议迷宫.0009.2.3:自动换装:回改到真实环境

     00003 不思议迷宫.0009.2.3:自动换装:回改到真实环境 在将代码弄到真实环境之前,先将UIAutoEquipingConfig中的类似代码重构一下.          local l ...

  8. 00003 不思议迷宫.0008:分析了半天我们能干什么?

    00003 不思议迷宫.0008:分析了半天我们能干什么? 玩家数据不能直接修改,间接的似乎也不行,那我们还能干什么? 能干的有很多. 比如,我先问问,大家是如何在炼金坊捡钱的?除开玩模拟器使用按键精 ...

  9. 00003 不思议迷宫.0006:客户端的操作如何反应到服务器?

     00003 不思议迷宫.0006:客户端的操作如何反应到服务器? 玩家点击手机屏幕,根据点到内容的不同而执行不同的操作,比如切换画面或者场景.播放动画或声音.发送数据等等.我现在所关心的是点到物 ...

最新文章

  1. [zt]petshop4.0 详解之八(PetShop表示层设计)
  2. 百度开源,分布式配置中心
  3. SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
  4. python中struct_Python的Struct模块,用法以及个人理解
  5. python给图片添加字符
  6. 《大道至简》阅读笔记二
  7. 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
  8. 算法设计与分析——回溯法——旅行售货员问题
  9. java 实现中文排序,Java自定义比较器实现中文排序
  10. Scanner进阶详细讲解
  11. mysql window下 安装udf_Windows下MySQL下载安装、配置与使用
  12. ASP.NET中的事件处理
  13. .NET Framework也可以开发托管了
  14. hdu1861 游船出租【模拟】
  15. JQuery中ajax用法
  16. 初学者python编辑器用geany可以吗_面向初学者的Python编辑器Mu
  17. 在 boot 操作过程中的 FIRST_BOOT阶段,安装失败,出现错误
  18. 【电子学会】2022年12月图形化一级 -- 和平使者
  19. 什么是防抖和节流?区别是什么?
  20. RuoYi-Vue 分离版 收获与总结

热门文章

  1. SEO优化与SEM(竞价)区别在哪?
  2. Photoshop照片一键转换手绘效果图动作
  3. 微积分手机版与高清电子投影仪是“绝配”
  4. 努比亚 系统升服务器设置,努比亚Nubia x6官方系统升级教程与方法
  5. 玩转python(一)——微信远程控制电脑
  6. 几个招聘网站,智联的最垃圾
  7. 8.String str=“i“与 String str=new String(“i”)一样吗?
  8. Android 7.0 新特性
  9. 不用下载软件也能打开EPUB?详解这款支持网页端的阅读器
  10. 被“中年危机”榨干的年轻人:如何尽早实现财务自由?