waiwai 发表于 2018-1-22 12:43:27

请教个随机逃跑的问题。哪位有空的大侠帮忙看下

本帖最后由 waiwai 于 2018-1-22 06:45 AM 编辑

在MUSH里 我想做个 抓出口然后随机逃跑的 触发 逃跑的时候不回到 刚才来过的房间   请问怎么能实现

找到个zmud 的例子 但是看不懂 不知道怎么转换到 mush 里   哪位大侠能麻烦帮忙下 非常感谢

例子如下

#va inter 0

#trigger {这里明显的出口是 (*)。}{#tz;chukou=%1;chukou=%replace(@chukou,"、","
");
chukou=%replace(@chukou," 和",'');num=%numwords(@chukou);
goto=%random(1,@num);fx=%word(@chukou,@goto);#wa @inter;@fx}

#trigger {这里唯一的出口是 (*)。}{chukou=%1;num=1;#wa @inter;%1}
例子能看懂了先获取出口 然后去掉出口里的 、 和    然后放到一个表里   在随机抽取表里的一个方向 执行


哎 怎么转换到MUSH 里啊 不会写啊 hzl      求指导hzn

北大侠客行MUD,中国最好的MUD

creat 发表于 2018-1-22 17:55:33

本帖最后由 creat 于 2018-1-22 09:54 AM 编辑


处理过程看不懂
获取出口大致过程如此:function Find_Exit(l)
l=string.gsub (l,"%W","!")        --替换掉非数字和字母
local s,e,n,key,_=0,#l,1        --定义局部变量
local t={}                                        --初始化局部变量t为一个表
while s<e                                        
do _,s,key=string.find (l,"(%w+)!!",s)        --以s为起点查找数字或字母并赋值给key
if key then t=key n=n+1 end                        --如果找到key的情况下把key写进表t
end       
return t                                        --返回t
end用法:假设你不知道怎么用l="    这里明显的方向有 west、east、down、south、north 和 up。"
t=Find_Exit(l)
for i,v in pairs(t)                --遍历t并打印它的内容
do print (i,v )end不回到刚才来的方向需要提前记录之前的动作,并且对相应的出口进行标记。大致如此

waiwai 发表于 2018-1-22 18:08:28

回复 2# creat

十分感谢 教主hze 今天晚上就研究它了hz6

waiwai 发表于 2018-1-22 20:29:14

回复 2# creat

初步完成随机瞎跑触发试了下一眨眼 就知道跑到哪里去了 呵呵   还要完善下

再次感谢

local ck="%1"
ck1=string.gsub (ck,"%W","!")         
local s,e,n,key,_=0,#ck1,1      
local t={}                                 
while s<e                                       
do _,s,key=string.find (ck1,"(%w+)!!",s)
if key then t=key n=n+1 end   
end   
tp=t

Send(tp)

jesyao 发表于 2018-1-22 23:10:22

本帖最后由 jesyao 于 2018-1-22 03:13 PM 编辑

你要加上如果有堵路的方向,要二次逃跑的代码,不然很容易出事故~ 嗝屁
这个要是一个完整的定位出口处理:
1:定位你的当前房间
2:逃跑后确认不在那个房间
3:如果在,还要逃跑一次
4:逃跑成功,记录逃跑方向,方便自动回去接着肝

suineg 发表于 2018-1-22 23:29:08

Battle.Exits = function(strParam)
        if strParam ~= "" then
                strParam = Way.ExitFix(strParam);
                Battle.strExit = utils.split(strParam, ";");
        else
                Battle.strExit = "";
        end
        --Note("逃离:" .. Battle.strExit);
endWay.ExitFix是对出口的修正并用";"分隔,
出口修正可以自己写也可以去找nrm的分享,

至于逃跑,
用我之前写的单例事件方法即可,Battle.EscapeTry = function()
        if Battle.bEscape and Battle.strExit ~= "" then
                Common.InstanceRun(Battle.EscapeAction, 0.5);
        end
end

waiwai 发表于 2018-1-23 11:03:01

回复 5# jesyao
多谢提醒

还真忘了有堵门的情况了

waiwai 发表于 2018-1-23 11:21:59

回复 6# suineg

谢谢指导

但是对于 我这个脚本小白,基本等于天书hzl,一点都看不懂,也不知道怎么用

我只会用可以触发运行的例子,改成自己能用的。

你的这些例子我都不知道怎么下手hz9

sarsmark 发表于 2018-1-23 12:33:02

建议各位老大直接弄成一个插件就方便我等小白了

waiwai 发表于 2018-1-23 13:11:17

回复 2# creat

继续追问hzn就打算缠着你不放了hzk

如果我 设置一个全局变量 a   

当这个变量取值为空的时候   触发一个 动作 应该怎么写

GetVariable("a")
if a=nil then Send ("kick") end    ???? 试过了不对hze
页: [1] 2
查看完整版本: 请教个随机逃跑的问题。哪位有空的大侠帮忙看下