Пример #1
0
        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());
        }
Пример #2
0
        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());
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
            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);
            }
Пример #5
0
            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);
            }
Пример #6
0
            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);
            }