找回密码
 注册
搜索
查看: 347|回复: 6

有大神能讲解下mush的搜索吗?

[复制链接]
tianyi@tj 该用户已被删除
发表于 2016-11-1 01:30:15 | 显示全部楼层 |阅读模式
function find(l_area,l_room)
    do return search() end
end

function search()

function searchStart()



这些看的头晕啊。。。。没有程序员功底,根本看不懂

有没有大神能讲解一下?
门派:少林派
发表于 2016-11-1 09:58:53 | 显示全部楼层
这个你还是等大昏大神来解答吧         
门派:少林派
发表于 2016-11-1 09:59:11 | 显示全部楼层
大昏大神是码农哦               
门派:桃花岛
发表于 2016-11-5 09:15:43 | 显示全部楼层
这才是精髓啊,坐等              
门派:姑苏慕容
发表于 2016-11-5 10:28:23 | 显示全部楼层
先说searchstart()
  1. function searchStart()

  2.     if flag.find==1 then return end --根据flag.find的标志位判断,这里flag.find==1就是表示找到了,所以这个时候searchstart就不执行了,直接return跳出函数。

  3.     if flag.wait==1 then return end --同上,

  4.     if table.getn(road.rooms)==0 then  --road.rooms代表目的地房间(目的地房间很可能是同名房间,有很多个)的表集合。如果为0(标示目标地点没有),那么进入find_nobosy()这个函数

  5.        return find_nobody()

  6.     end

  7.     local path, length = map:getPath(road.id, road.rooms[1])  --通过map:getPath()函数,获取road.id到目标房间表集合的第一个元素(这里就是第一个同名房间的id)

  8.     road.id = road.rooms[1]  --第一个路径获取之后,把起始点的road.id变成刚才的第一个房间id(言外之意就是重目标地点开始继续出发)

  9.     --messageShow('搜索id【'..road.rooms[1]..'】,房间名【'..map.rooms[road.rooms[1]].name..'】') 这里是我加的一些监控变量,看看就好

  10.     table.remove(road.rooms,1) --在目的地房间的表中去掉刚才已经计算出路径的那个第一个房间。

  11.         

  12.         if type(path)~="string" then  --如果map:getPath计算返回值的类型不是string(字符串类型),那么进入searchWait()函数处理

  13.            --Note(road.id)

  14.            --Note(path)

  15.            return searchWait()

  16.    else               --如果返回值是一个字符串的话,那么吧这个路径字符串path作为参数,传入到searchFunc()这个函数开始处理。

  17.     --messageShow('路径搜索:获取的path值为:'..path)

  18.         end

  19.         return searchFunc(path)

  20.         

  21.         --[[

  22.         if string.find(path,'#') then

  23.        return searchFunc(path)

  24.     else

  25.        exe(path)

  26.        return searchWait()

  27.     end

  28.         --]]

  29. end
复制代码
tianyi@tj 该用户已被删除
 楼主| 发表于 2016-11-5 10:29:00 | 显示全部楼层
大神来了。学习                       
门派:姑苏慕容
发表于 2016-11-5 11:03:20 | 显示全部楼层
再说说searchFunc()
  1. function searchFunc(path)

  2.     if flag.find==1 then return end

  3.     if flag.wait==1 then return end

  4.     road.pathset = road.pathset or {} --定一个road.pathset目的地路径集合

  5.     if path then

  6.        road.pathset=utils.split(path,";")  --把上面传过来的路径alias,都用;号分开,并存入road.pathset这个路径集合表中

  7.            for i=1,table.getn(road.pathset) do

  8.                for p=1, table.getn(road.pathset) do

  9.                        if isNil(road.pathset[p]) or road.pathset[p]=="halt" then

  10.                               table.remove(road.pathset,p)

  11.                                   break

  12.                            end

  13.                    end

  14.            end

  15.         end --上面这一段就是为了去掉 road.pathset表中的空值或者“halt”

  16.         if table.getn(road.pathset)==0 then --如果road.pathset是空,那么久开始运行searchstart()

  17.            return searchStart()

  18.         end

  19.     --for i=1,table.getn(road.pathset) do

  20.         --Note(road.pathset[1])

  21.      if string.find(road.pathset[1],'#') then

  22.                local _,_,func,params = string.find(road.pathset[1],"^#(%a%w*)%s*(.-)$")

  23.                if func then

  24.                   table.remove(road.pathset,1)

  25.                   return _G[func](params)

  26.                else

  27.                   exe(road.pathset[1])

  28.                   table.remove(road.pathset,1)

  29.                           return walk_wait()

  30.                end

  31.            else

  32.               exe(road.pathset[1])

  33.               table.remove(road.pathset,1)

  34.                   return walk_wait()

  35.            end   --这一大段就是为了查找path路径中是否有#这个开头字样的字串,要是用就进入相关函数处理,最常用的例子就是#duCjiang,这个就是渡江的函数处理。

  36.     --end

  37.     --return searchWait()

  38. end
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-21 16:49 , Processed in 0.023874 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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