找回密码
 注册
搜索
查看: 1004|回复: 8

id动态导入对应id变量的一种实现方式(mush版)

[复制链接]
门派:姑苏慕容
发表于 2018-7-19 09:17:24 | 显示全部楼层 |阅读模式
本帖最后由 faint@tj 于 2018-7-19 09:21 编辑

最初的需求是为了一套脚本能给多个id使用,但是因为每个id的门派功夫不同等原因,必须区别对待,因此有了以下的想法:
设置一个配置文件,然后对应的id通过使用这个配置文件中特定的变量值,同时随时可以导入修改,不需要重载重新运行机器人。
  1. function file_exists(path)  --判断是否存在该文件
  2.         local file = io.open(path, "rb")
  3.         if file then
  4.                 file:close()
  5.         end
  6.         return file ~= nil
  7. end

  8. function un_ser(str)  --反向序列化字串
  9.         str = "return " .. str
  10.         local fun = loadstring(str)
  11.         return fun()
  12. end
  13. --[[smy_huaxue = {  ["玄阴剑法"] = true,["灵蛇杖法"]= true,["灵蛇拳法"]= true,["打狗棒法"] = true,["金刚降伏轮"] = true}]]  --例子,id变量表,这个是当前id如果进入颂摩崖战斗碰到以上功夫用化学攻击
  14. --
  15. function import()
  16.         local path=".\\config\"..score.id.."_config.txt"
  17.         if file_exists(path) then
  18.                 for line in io.lines(path) do
  19.                         local tab_name,tab_value=string.match(line,"(%S*)%s*%=%s*%{(.*)%}")
  20.                                 --print (tab_name)
  21.                                 --print (tab_value)
  22.                                 --print(un_ser(tab_name))
  23.                                 if tab_name~=nil then  --清理空格,增强兼容性
  24.                                         tab_name=Trim(tab_name)
  25.                                 end
  26.                                 if tab_value~=nil then  --清理空格,增强兼容性
  27.                                         tab_value=Trim(tab_value)
  28.                                 end
  29.                         if table.getn(un_ser(tab_name)) then
  30.                                 print("控制变量【"..tab_name.."】存在,开始导入自定义控制!")
  31.                                 local insert_val={}
  32.                                
  33.                                 insert_val=utils.split(tab_value,',')
  34.                                 for k,v in pairs(insert_val) do
  35.                                         if v~='' then
  36.                                                 --print("k="..k..",v="..v)
  37.                                                 local mini_tab,mini_val=string.match(v,"%s*(%S*)%s*%=%s*(%S*)%s*")
  38.                                                 if mini_tab~=nil then  --清理空格,[" "]增强兼容性
  39.                                                         mini_tab=Trim(string.gsub(mini_tab,'%[%"',""))
  40.                                                         mini_tab=string.gsub(mini_tab,'%"%]',"")
  41.                                                 end
  42.                                                 if mini_val~=nil then  --清理空格,增强兼容性
  43.                                                         mini_val=Trim(mini_val)
  44.                                                 end
  45.                                                 if mini_tab==nil then  --没有 九阴银龙鞭=38 这种格式,那么直接插入
  46.                                                         un_ser(tab_name)[v]=true
  47.                                                 else  -- ["九阴银龙鞭"] = 38 带有key,value模式,那么继续细分 这种 ["变量"]=数值   的模式可以认为是一种优先级
  48.                                                         --type返回类型 "number", "string", "boolean", "table", "function", "thread", "userdata"
  49.                                                         --print("mini_tab:"..mini_tab)
  50.                                                         --print("mini_val:"..mini_val)
  51.                                                         if type(mini_val)=='string' then
  52.                                                                 if tonumber(mini_val)~=nil then
  53.                                                                         --print("判断为数值类型:"..mini_val)
  54.                                                                         un_ser(tab_name)[mini_tab]=tonumber(mini_val)
  55.                                                                 elseif mini_val=="true" then
  56.                                                                         un_ser(tab_name)[mini_tab]=true
  57.                                                                 else
  58.                                                                         un_ser(tab_name)[mini_tab]=mini_val
  59.                                                                 end

  60.                                                         end
  61.                                                        
  62.                                                 end
  63.                                         end
  64.                                 end
  65.                                 print("控制变量【"..tab_name.."】自定义导入完成!")
  66.                         else
  67.                                 print("控制变量【"..tab_name.."】不存在,请先检查变量拼写是否正确!")
  68.                         end
  69.                
  70.                 end
  71.         else
  72.                 print ("id配置文件"..path.."不存在!")
  73.                 print ("配置文件应该保存在如下路径:"..GetInfo(64).."config\\score.id_config.txt")
  74.         end
  75. end
复制代码


抛砖引玉,欢迎大家相互探讨。


  1. var1 = {  ["太极剑法"] = true}
  2. var2 = {     天山杖法 = true,        玄阴剑法 = true}
  3. var3 = {  ["玄阴剑法"] = true,["灵蛇杖法"]= true,["灵蛇拳法"]= true,["打狗棒法"] = true,["金刚降伏轮"] = true,}
  4. var4 = {弹指神通}
  5. var5 = {["太极拳"] = -10,["灵蛇杖法"]= 99,["打狗棒法"] = 95,["慕容剑法"] = 87,}
复制代码

评分

2

查看全部评分

门派:铁掌帮
发表于 2018-7-19 11:19:39 | 显示全部楼层
这下厉害了,以后mud就是M和玩家的编程竞赛,就剩下代码玩代码了
门派:星宿派
发表于 2018-7-19 10:42:31 | 显示全部楼层
好吧

我看不懂,不过帮你顶,我觉得应该置顶的
门派:古墓派
发表于 2018-7-19 10:54:20 | 显示全部楼层
加上  克制设置的文件,例如 门派是古墓就加载  gm.xx 文件 .     以后完善了就是完全傻瓜型robot了。支持大昏神
门派:天龙寺
发表于 2018-7-19 18:53:59 | 显示全部楼层
牛逼,大神这算是回归了?
门派:姑苏慕容
 楼主| 发表于 2018-7-19 19:04:28 | 显示全部楼层
wudi@tj 发表于 2018-7-19 18:53
牛逼,大神这算是回归了?

前段时间写的代码,我目前还没有回归
门派:姑苏慕容
发表于 2018-7-20 11:44:56 | 显示全部楼层
大昏居然又出现了...                  
门派:武当派
发表于 2018-7-21 11:33:05 | 显示全部楼层
真是高深啊,研究这个得时间了。。
门派:天龙寺
发表于 2018-7-22 17:39:14 | 显示全部楼层
看不懂。这些代码搞懂脑细胞要死一大堆
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-9 21:36 , Processed in 0.027337 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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