internal static object[] ConvertArgsToNLua(params object[] args) { List <object> Converted = new List <object>(); foreach (object arg in args) { Type type = arg.GetType(); Type[] interfaces = type.GetInterfaces(); if (type.IsPrimitive || WriteTypes.Contains(type)) { Converted.Add(arg); continue; } else if (interfaces.Contains(typeof(IDictionary))) { IDictionary dict = (IDictionary)arg; Neo.IronLua.LuaTable table = new Neo.IronLua.LuaTable(); foreach (object key in dict.Keys) { Neo.IronLua.LuaTable.insert(table, ConvertArgsToNLua(key)[0], ConvertArgsToNLua(dict[key])[0]); } Converted.Add(table); continue; } else if (interfaces.Contains(typeof(IList))) { IList list = (IList)arg; Neo.IronLua.LuaTable table = new Neo.IronLua.LuaTable(); foreach (object o in list) { Neo.IronLua.LuaTable.insert(table, ConvertArgsToNLua(o)[0]); } Converted.Add(table); continue; } else if (interfaces.Contains(typeof(IEnumerable))) { IEnumerable enumerable = (IEnumerable)arg; Neo.IronLua.LuaTable table = new Neo.IronLua.LuaTable(); foreach (object o in enumerable) { Neo.IronLua.LuaTable.insert(table, ConvertArgsToNLua(o)[0]); } Converted.Add(table); continue; } Converted.Add(arg); } return(Converted.ToArray()); }
internal static object[] ConvertArgsFromNLua(params object[] args) { List <object> Converted = new List <object>(); foreach (object arg in args) { Type type = arg.GetType(); if (type == typeof(Neo.IronLua.LuaTable)) { Neo.IronLua.LuaTable table = (Neo.IronLua.LuaTable)arg; bool dict = false; for (int i = 0; i < table.Values.Keys.Count; i++) { if (table.Values.Keys.ElementAt(i).ToString() != (i + 1).ToString()) { dict = true; break; } } if (!dict) { List <object> tvalues = new List <object>(); foreach (object o in table.Values.Values) { tvalues.Add(ConvertArgsFromNLua(o)[0]); } Converted.Add(tvalues); } else { Dictionary <object, object> tvalues = new Dictionary <object, object>(); foreach (var kv in table.Values) { tvalues.Add(ConvertArgsFromNLua(kv.Key)[0], ConvertArgsFromNLua(kv.Value)[0]); } Converted.Add(tvalues); } continue; } if (type.ToString().StartsWith("Neo.IronLua")) { instance.Print(PrintType.Warning, "Conversation required for " + type + "!"); } Converted.Add(arg); } return(Converted.ToArray()); }
public static void RegisterVPTags(Neo.IronLua.LuaTable table) { SubCommands = new Dictionary <string, Func <Character, IList <string>, Neo.IronLua.LuaResult> >(); foreach (var item in table) { var v = item.Value as Func <Character, IList <string>, Neo.IronLua.LuaResult>; if (v == null) { continue; } SubCommands.Add(item.Key.ToString(), v); } }
public Neo.IronLua.LuaTable maneuvers() { var list = new Neo.IronLua.LuaTable(); foreach (var maneuver in g.Game.GameData.GetManeuvers()) { var mn = (dynamic)(new Neo.IronLua.LuaTable()); mn.action = maneuver.Action; mn.activemodel = "//" + maneuver.ActiveModel; mn.inactivemodel = "//" + maneuver.InactiveModel; mn.infocarda = maneuver.InfocardA; mn.infocardb = maneuver.InfocardB; g.hud.UI.TableInsert(list, mn); } return(list); }
public Neo.IronLua.LuaTable actions() { var list = new Neo.IronLua.LuaTable(); var icons = g.Game.GameData.GetBaseNavbarIcons(); if (string.IsNullOrEmpty(g.virtualRoom) && (g.currentRoom.Nickname.Equals("cityscape", StringComparison.OrdinalIgnoreCase) || g.currentRoom.Nickname.Equals("deck", StringComparison.OrdinalIgnoreCase) || g.currentRoom.Nickname.Equals("planetscape", StringComparison.OrdinalIgnoreCase))) { var mn = (dynamic)(new Neo.IronLua.LuaTable()); mn.action = LAUNCH_ACTION; mn.model = "//" + icons["IDS_HOTSPOT_LAUNCH"]; g.hud.UI.TableInsert(list, mn); } return(list); }
public Neo.IronLua.LuaTable buttons() { var list = new Neo.IronLua.LuaTable(); var icons = g.Game.GameData.GetBaseNavbarIcons(); foreach (var btn in g.tophotspots) { var mn = (dynamic)(new Neo.IronLua.LuaTable()); mn.action = btn.Name; string hack = null; if (!icons.ContainsKey(btn.SetVirtualRoom ?? btn.Room)) { hack = "Cityscape"; //HACK: This probably means FL doesn't determine icons based on room name } var icn = icons[hack ?? btn.SetVirtualRoom ?? btn.Room]; mn.model = "//" + icn; g.hud.UI.TableInsert(list, mn); } return(list); }