lua 中 loadstring 应用(用于游戏中解析字符串公式)

原创 2016年06月01日 17:53:51
local  str = '{attrKey}{(operator)num2*skilllevel},持续{buff_time+buff_add_time*skilllevel}秒'




function dealBuffDescript(buffId)
-- body
-- local totalNameTable = CSV:GetTable("total_name")
-- local buffTable = CSV:GetTable("skill_buff")
-- local buffInfoTable = CSV:GetTable("skill_buff_info")


if buffId< 0  then return end
if buffTable[buffId] == nil then return end
local buffTableInfo = buffTable[buffId]
local buffType = buffTableInfo.trigger_type
local info = buffInfoTable[buffType]
if info == nil then return end


local arrtPosId = 0
local function canAddOperator(str )
-- body
local startPos,endPos,resStr = string.find(str,"(operator)")
if startPos ~= nil and resStr == "operator" then
return true,string.sub(str,endPos+2,string.len(str))
end
return false,str
end 
-- 解析lua code
local function loadLuaCode(code)
-- body
local func = loadstring(code)
if func == nil then return nil end
return func()
end 
local function analysisLuaCode(luaCode)
-- body
if luaCode == "attrKey" then
arrtPosId = arrtPosId+1
else
local valuePos = arrtPosId  --属性为多个加成
if arrtPosId <= 0 then
valuePos = 1
end
local addOperate,luaCode = canAddOperator(luaCode)
local num2 = buffTableInfo.num_2[valuePos]
local skilllevel = 10
local buff_time = buffTableInfo.buff_time
local buff_add_time = buffTableInfo.buff_add_time
local num3 = buffTableInfo.num_3[1] 
local num4 = buffTableInfo.num_4[1]
local newLuaCode = "local num2="..num2.."  local skilllevel="..skilllevel.."  buff_time="..buff_time.."  buff_add_time="..buff_add_time.."  num3="..num3.."  num4="..num4.."  return "..luaCode
return loadLuaCode(newLuaCode)
end
end 
local function analysisLuaStr(analyStr)
-- body
local startPos,endPos = string.find(analyStr,"%b{}")
if startPos == nil then return analyStr end
local code = string.sub(analyStr,startPos,endPos)
local startStr = string.sub(analyStr,0,startPos-1)
code = string.sub(code,2,string.len(code)-1)
local value = analysisLuaCode(code) or ""
local newStr = startStr..value..string.sub(analyStr,endPos+1,-1)
return analysisLuaStr(newStr)
end 


local listPos = 1
-- if buffType == ConstantConfig_buff_type.buff_icebound or buffType == ConstantConfig_buff_type.buff_hp or buffType == ConstantConfig_buff_type.buff_mp then
-- listPos = info.num_2[1]
-- end
if buffType >=2 and buffType <= 4 then
listPos = buffTableInfo.num_1[1]
end
if listPos < 0 then return end
local desInfo = totalNameTable[info.info]
local desStr = desInfo.info[listPos]
if desStr == nil then return end
print(desStr)
print(analysisLuaStr(desStr))

end


dealBuffDescript(1)

相关文章推荐

LUA脚本的loadstring的用法

LUA loadstring 类似加载,从给定的字符串得到块。 要加载和运行一个给定的字符串   一般如下用法: assert(loadstring(script))()   f = l...
  • nnsword
  • nnsword
  • 2013年01月30日 16:37
  • 20455

lua之loadstring函数

该函数的返回值是返回一个function,如果load失败,则返回nil 例子代码: i = 32 local i = 0 f = loadstring("i = 1 + i; print(i)"...

Lua的loadfile、dofile、loadstring、require

Lua的loadfile、dofile、loadstring、require loadfile( file ) -- 加载 dofile( file ) -- 编译并执行 require( fi...

Lua中loadstring()的使用

LUA loadstring 类似加载,从给定的字符串得到块。 要加载和运行一个给定的字符串 一般如下用法: assert(loadstring(script))() ...

lua loadstring与loadfile

http://www.cnblogs.com/stephen-liu74/archive/2012/06/22/2414417.html   1. 编译:     Lua中提供了dofil...
  • icyday
  • icyday
  • 2012年10月25日 20:17
  • 8214

lua 中的assert 与loadstring 问题

loadstring 通过加载一个符合lua语言规范的字符串 返回一个luafunction 再加上一层的assert 表示对这个load到的结果进行一个非空判断,如果是正确的lua函数则返回函...

Lua中字符串库的一些操作

在Lua里面程序只能创建字符串常亮、链接字符串及获取字符串的长度。但是呢,它无法作进一步的操作,就是说,它无法提取子串或者检索字符串的内容。在Lua里面真正的字符串操作能力来自于字符串库(String...

MySQL创建数据库时判断是否存在,mysql create database 指定utf-8编码

转载:http://outofmemory.cn/code-snippet/2533/mysql-create-database-specify-utf-8-coding 如下脚本创...
  • huludan
  • huludan
  • 2016年04月21日 15:51
  • 1684

Boost库的字符串处理算法

C++中的字符串类型 说起C++中的字符串类型当仁不让的自然就是std::string。std::string是模板std::basic_string的一个实例化,另外还有三个实例化std::w...

Lua中require,dofile,loadfile,dostring,loadstring,loadlib,load之间的区别

Lua中require,dofile,loadfile,dostring,loadstring,loadlib,load之间的区别 重点掌握 require,dofile,loadfile,...
  • vicdd
  • vicdd
  • 2016年09月28日 11:44
  • 259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua 中 loadstring 应用(用于游戏中解析字符串公式)
举报原因:
原因补充:

(最多只允许输入30个字)