Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if not HEADER then http.Get("http://oohh.googlecode.com/svn/trunk/source/oohh/game_sdk/CryEngine/CryAction/IEffectSystem.h", "", function(str) HEADER = str end) end
- local trans =
- {
- ["CWeapon"] = "ToEntity<CWeapon>",
- ["bool"] = "ToBool",
- ["const char*"] = "ToString",
- ["float"] = "ToNumber<float>",
- ["int"] = "ToNumber<int>",
- }
- function translate(type)
- return trans[type] or (type:find("*", nil, true) and ("ToEntity<" .. type:gsub("*","") .. ">"))
- end
- function DefineToBind(type, content)
- local defines = {}
- for key, value in pairs(content:Split(";")) do
- if #value > 5 and value:find("%a+%(.+%)") and not value:find("{", nil, true) and not value:find("//", nil, true) then
- table.insert(defines, value:Trim())
- end
- end
- local funcs = {}
- for key, line in pairs(defines) do
- local retrn, func, args = line:match("virtual%s*([%a_]-*?)%s+(.-)%((.+)%)")
- if retrn and func and args then
- args = args:Split(",")
- for k,v in pairs(args) do
- args[k] = v:match("(.-)%a+$"):Trim():gsub("%s?%*%s?", "*")
- end
- funcs[func] = {retrn = retrn, args = args}
- end
- end
- local cpp = ""
- for func, data in pairs(funcs) do
- local str = ""
- str = str .. "LUAMTA_FUNCTION(" .. type .. ", " .. func .. ")\n"
- str = str .. "{\n"
- str = str .. "\toh->"
- if data.retrn == "void" then
- local trans = translate(type)
- if not trans then continue end
- str = str .. trans .. "(1)("
- else
- local trans = translate(type)
- if not trans then continue end
- str = str .. "Push(" .. "oh->" .. trans .. "(1)("
- end
- local failed = false
- for index, arg_type in pairs(data.args) do
- index = index + 1
- local trans = translate(arg_type)
- if not trans then failed = true break end
- str = str .. "oh->" .. trans .. "(" .. index .. ")"
- if index-1 ~= #data.args then
- str = str .. ", "
- end
- end
- if failed then continue end
- str = str .. ");\n\n"
- if data.retrn == "void" then
- str = str .. "\treturn 0;\n"
- else
- str = str .. "\treturn 1;\n"
- end
- str = str .. "}\n\n"
- cpp = cpp .. str
- end
- PrintTable(defines)
- print(cpp)
- end
- DefineToBind("CWeapon", HEADER)
- --[[local type = "CWeapon"
- local line = "virtual const char *GetDamageType(int fmId, Vec3 whathe) const;"
- local retrn, func, args = line:match("virtual (.+*%s*)([_%a]+)%((.*)%)")
- args = args:Split(",")
- local str = ""
- str = str .. "LUAMTA_FUNCTION(" .. type .. ", " .. func .. ")"
- str = str .. "{"
- str = str .. "\toh->Push(oh->ToEntity<" .. type .. ">(1)->"]]
Advertisement
Add Comment
Please, Sign In to add comment