Exemplo n.º 1
0
        public void Game_Start(ModGameAPI dediAPI)
        {
            mDllNamesFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(GetType()).Location), "DllNames.txt");
            mGameAPI          = dediAPI;
            try
            {
                Interlocked.Increment(ref inst);
                mGameAPI.Console_Write($"LoadMod(start)[{inst}]: {mDllNamesFileName}");

                mAssemblyFileNames = File.ReadAllLines(mDllNamesFileName)
                                     .Select(L => L.Trim())
                                     .Where(L => !string.IsNullOrEmpty(L) && !L.StartsWith("#"))
                                     .ToArray();

                Array.ForEach(mAssemblyFileNames, LoadAssembly);

                if (ModInterfaces.Count == 1)
                {
                    mSingleModInterfaceInstance = ModInterfaces.First();
                }
                if (IMods.Count == 1)
                {
                    mSingleIModInstance = IMods.First();
                }

                mGameAPI.Console_Write($"LoadMod(finish:{ModInterfaces.Count}): {mDllNamesFileName}");
            }
            catch (Exception Error)
            {
                mGameAPI.Console_Write($"LoadMod: {mDllNamesFileName} -> {Error}");
            }
        }
Exemplo n.º 2
0
        private void LoadAssembly(string dllFileName)
        {
            var currentDir = Directory.GetCurrentDirectory();

            try
            {
                var dllName = dllFileName;
                if (dllName.StartsWith("-"))
                {
                    dllName = dllName.Substring(1);
                    Directory.SetCurrentDirectory(Path.GetDirectoryName(Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(GetType()).Location), dllName)));
                }

                var Mod     = Assembly.LoadFrom(Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(GetType()).Location), dllName));
                var ModType = Mod.GetTypes().Where(T => T.GetInterfaces().Contains(typeof(ModInterface))).FirstOrDefault();
                if (ModType == null)
                {
                    ModType = Mod.GetTypes().Where(T => T.GetInterfaces().Contains(typeof(IMod))).FirstOrDefault();
                }

                if (ModType != null)
                {
                    var instance = Activator.CreateInstance(ModType);

                    if (instance is ModInterface ModInterfaceInstance)
                    {
                        ModInterfaceInstance.Game_Start(mGameAPI);
                        ModInterfaces.Add(ModInterfaceInstance);
                    }

                    if (instance is IMod ModInstance)
                    {
                        IMods.Add(ModInstance);
                    }
                }
            }
            catch (Exception Error)
            {
                mGameAPI.Console_Write($"LoadMod: {dllFileName} CurrentDir:{Directory.GetCurrentDirectory()} -> {Error}");
            }
            finally
            {
                Directory.SetCurrentDirectory(currentDir);
            }
        }
Exemplo n.º 3
0
 public void Game_Exit()
 {
     try
     {
         if (mSingleModInterfaceInstance != null)
         {
             mSingleModInterfaceInstance.Game_Exit();
         }
         else
         {
             ModInterfaces.ForEach(M => ThreadPool.QueueUserWorkItem(SubM => { ((ModInterface)SubM).Game_Exit(); }));
         }
     }
     catch (Exception Error)
     {
         mGameAPI.Console_Write($"Game_Exit(Error): {Error}");
     }
 }
Exemplo n.º 4
0
 public void Game_Event(CmdId eventId, ushort seqNr, object data)
 {
     try
     {
         if (mSingleModInterfaceInstance != null)
         {
             mSingleModInterfaceInstance.Game_Event(eventId, seqNr, data);
         }
         else
         {
             ModInterfaces.ForEach(M => ThreadPool.QueueUserWorkItem(SubM => { ((ModInterface)SubM).Game_Event(eventId, seqNr, data); }));
         }
     }
     catch (Exception Error)
     {
         mGameAPI.Console_Write($"Game_Event(Error): {Error}");
     }
 }