private Hooking()
 {
     hookIDs = new List<HookInfo>();
     hookCallbackThread = new Thread(keepAlive)
     ;
     mouseHook = new HookInfo();
     mouseHook.callback = clearMouseLLInjectedFlag;
     mouseHook.hID = Win32.HookingIDs.WH_Mouse_LL;
     keyboardHook = new HookInfo();
     keyboardHook.callback = clearKeyboardLLInjectedFlag;
     keyboardHook.hID = Win32.HookingIDs.WH_Keyboard_LL;
 }
        static bool useHook_patch(InteractableVehicle __instance)
        {
            List <HookInfo> hooked = get_priv_hooked(__instance);

            if (hooked.Count > 0)
            {
                __instance.clearHooked();
                return(false);
            }

            float radius;

            if (!Plugin.TryGetCustomDataFor <float>(__instance.asset.GUID, FieldName, out radius))
            {
                radius = 3f;
            }

            var hook = get_priv_hook(__instance);
            var grab = get_priv_grab();

            int num = Physics.OverlapSphereNonAlloc(hook.position, radius, grab, 67108864);

            for (int i = 0; i < num; i++)
            {
                InteractableVehicle vehicle = DamageTool.getVehicle(grab[i].transform);
                if (!(vehicle == null) && !(vehicle == __instance) && vehicle.isEmpty && !vehicle.isHooked && vehicle.asset.engine != EEngine.TRAIN)
                {
                    HookInfo hookInfo = new HookInfo
                    {
                        target        = vehicle.transform,
                        vehicle       = vehicle,
                        deltaPosition = hook.InverseTransformPoint(vehicle.transform.position),
                        deltaRotation = Quaternion.FromToRotation(hook.forward, vehicle.transform.forward)
                    };
                    hooked.Add(hookInfo);
                    vehicle.isHooked = true;
                    __instance.ignoreCollisionWith(vehicle.vehicleColliders, true);
                }
            }

            set_priv_hooked(hooked, __instance);

            return(false);
        }
Esempio n. 3
0
        /// <summary>
        /// Process the given macro input and return a script.
        /// </summary>
        /// <param name="input">Input to process.</param>
        /// <returns>A runnable script.</returns>
        public string Process(string input)
        {
            var lines = input.Split(new[] { '\r', '\n' });

            var ctx = ParseContext.None;

            var setupBody   = string.Empty;
            var noneBody    = string.Empty;
            var initBody    = string.Empty;
            var disposeBody = string.Empty;
            var drawBody    = string.Empty;
            var tHook       = new HookInfo();

            var hooks = new List <HookInfo>();

            for (var i = 0; i < lines.Length; i++)
            {
                var line = lines[i];

                if (line.StartsWith("INITIALIZE:"))
                {
                    ctx = ParseContext.Init;
                    continue;
                }

                if (line.StartsWith("DRAW:"))
                {
                    ctx = ParseContext.Draw;
                    continue;
                }

                if (line.StartsWith("DISPOSE:"))
                {
                    ctx = ParseContext.Dispose;
                    continue;
                }

                if (line.StartsWith("HOOK("))
                {
                    ctx = ParseContext.Hook;

                    var args = Regex.Match(line, "HOOK\\((.+)+\\):").Groups[0].Captures[0].Value
                               .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(x => x[0] == ' ' ? x[1..] : x).ToArray();
Esempio n. 4
0
            private static void Callback(ScriptState luaState, HookInfo info)
            {
                var hookMgr = GetManager(luaState);

                if (hookMgr == null)
                {
                    return;
                }

                if (hookMgr.Disposed)
                {
                    return;
                }
                try
                {
                    hookMgr.TriggerHook(new HookEventArgs(luaState, info));
                }
                catch (Exception ex)
                {
                    hookMgr.TriggerError(new ErrorEventArgs(ex));
                }
            }
Esempio n. 5
0
        bool InstallHook(int threadId, HookInfo hookInfo)
        {
            if (hookInfo != null)
            {
                bool isOk = false;
                hookInfo.CbtHookHandle    = IntPtr.Zero;
                hookInfo.GetMsgHookHandle = IntPtr.Zero;
                if (hookInfo.GetMsgHookHandle == IntPtr.Zero)
                {
                    const int WH_GETMESSAGE = 3;
                    hookInfo.GetMsgHookHandle = Win32.SetWindowsHookEx(WH_GETMESSAGE, procGetMsg, IntPtr.Zero, threadId);
                    isOk = isOk || (hookInfo.GetMsgHookHandle != IntPtr.Zero);
                }
                if (hookInfo.CbtHookHandle == IntPtr.Zero)
                {
                    const int WH_CBT = 5;
                    hookInfo.CbtHookHandle = Win32.SetWindowsHookEx(WH_CBT, procCbt, IntPtr.Zero, threadId);
                    isOk = isOk || (hookInfo.CbtHookHandle != IntPtr.Zero);
                }
                //if (hookInfo.MouseHandle == IntPtr.Zero) {
                //    const int WH_MOUSE = 7;
                //    hookInfo.MouseHandle = Win32.SetWindowsHookEx(WH_MOUSE, MouseProc, 0, threadId);
                //    isOk = isOk || (hookInfo.MouseHandle != IntPtr.Zero);
                //}
                //if (hookInfo.KeyboardHandle == IntPtr.Zero) {
                //    const int WH_KEYBOARD = 2;
                //    hookInfo.KeyboardHandle = Win32.SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, 0, threadId);
                //    isOk = isOk || (hookInfo.KeyboardHandle != IntPtr.Zero);
                //}
                //if (hookInfo.MsgFilterHandle == IntPtr.Zero) {
                //    const int WH_MSGFILTER = -1;
                //    hookInfo.MsgFilterHandle = Win32.SetWindowsHookEx(WH_MSGFILTER, MsgFilterProc, 0, threadId);
                //    isOk = isOk || (hookInfo.MsgFilterHandle != IntPtr.Zero);
                //}

                return(isOk);
            }
            return(false);
        }
 internal IntPtr addHook(Win32.HookingIDs hID, WinAPI.LowLevelMouseProc callback)
 {
     if (ModuleHandle == IntPtr.Zero) {
         using (var curProcess = Process.GetCurrentProcess())
         using (var curModule = curProcess.MainModule) {
             IntPtr ret = WinAPI.SetWindowsHookEx((int)hID, callback, WinAPI.GetModuleHandle(curModule.ModuleName), 0);
             HookInfo info = new HookInfo();
             info.hookID = ret;
             info.callback = callback;
             info.hID = hID;
             hookIDs.Add(info);
             return ret;
         }
     } else {
         IntPtr ret = WinAPI.SetWindowsHookEx((int)hID, callback, ModuleHandle, 0);
         HookInfo info = new HookInfo();
         info.hookID = ret;
         info.callback = callback;
         info.hID = hID;
         hookIDs.Add(info);
         hookIDs.Add(info);
         return ret;
     }
 }
Esempio n. 7
0
 public WriteBytesHookTransferStation(HookInfo info) : base(info)
 {
 }
Esempio n. 8
0
 public AresHookTransferStation(HookInfo info) : base(info)
 {
 }
Esempio n. 9
0
 public BuildTriggerRequest(HookInfo hookInfo, BuildParams buildParams)
 {
     hook_info    = hookInfo;
     build_params = buildParams;
 }
Esempio n. 10
0
 public HookInfo enable(IntPtr Handle, Modifiers Mod, Keys Key)
 {
     HookInfo item = new HookInfo(Handle, this.freeID++);
     this.hookedKeys.Add(item);
     RegisterHotKey(Handle, item.ID, (int)Mod, (int)Key);
     return item;
 }
Esempio n. 11
0
        //1. get hook gameObject
        //2. add component
        //3. activate
        //4. Init
        //5. OnEnter
        //6. Add it into Map
        public void NewEnter(Message msg)
        {
            MessageSycHook allhookInfo = JsonReader.Deserialize <MessageSycHook>(msg.rawString);
            int            iCount      = allhookInfo.playerList.Count;

            if (iCount == 1)
            {
                HookInfo info = allhookInfo.playerList[0];
                this.PassTime = info.enterTime;
                HookPos        hookPos  = (HookPos)Enum.Parse(typeof(HookPos), info.chairId);
                AllStuffNeeded allStuff = SceneMgr.Instance.hookPosAllStuffMap[hookPos];
                hook = allStuff.gmObjRealPoleEnd.AddComponent <Hook>();

                allStuff.gmObjBoat.SetActive(true);
                FloatEffect floatEffect = allStuff.gmObjBoat.AddComponent <FloatEffect>();
                floatEffect.Init();
                floatEffect.StartEffect();

                hook.gameObject.SetActive(true);
                hook.Init(hookPos);
                hook.OnEnter(info.enterTime, _player, allStuff);
                uIDHookMap.Add(info.uid, hook);

                _raisePlayerInitCompleteEvent(hook.hookPos);
                _raisePlayerChangeEvent(hook.hookPos, true);
                _raiseScoreChangeEvent(hook.hookPos, _player.Score);
                raiseLotteryChangeEvent(hook.hookPos, _player.Lottery);
                raiseHookPowerEvent(1);
            }
            else if (iCount == 2)
            {
                this.PassTime = Mathf.Max(allhookInfo.playerList[0].enterTime, allhookInfo.playerList[1].enterTime);
                for (int i = 0; i < iCount; i++)
                {
                    HookInfo info = allhookInfo.playerList[i];
                    if (info.uid == Game.Instance.player.UID)
                    {
                        if (hook == null)
                        {
                            this.PassTime = info.enterTime;
                            HookPos        hookPos  = (HookPos)Enum.Parse(typeof(HookPos), info.chairId);
                            AllStuffNeeded allStuff = SceneMgr.Instance.hookPosAllStuffMap[hookPos];
                            hook = allStuff.gmObjRealPoleEnd.AddComponent <Hook>();

                            allStuff.gmObjBoat.SetActive(true);
                            FloatEffect floatEffect = allStuff.gmObjBoat.AddComponent <FloatEffect>();
                            floatEffect.Init();
                            floatEffect.StartEffect();

                            hook.gameObject.SetActive(true);
                            hook.Init(hookPos);
                            hook.OnEnter(info.enterTime, _player, allStuff);
                            uIDHookMap.Add(info.uid, hook);

                            _raisePlayerInitCompleteEvent(hook.hookPos);
                            _raisePlayerChangeEvent(hook.hookPos, true);
                            _raiseScoreChangeEvent(hook.hookPos, _player.Score);
                            raiseLotteryChangeEvent(hook.hookPos, _player.Lottery);
                            raiseHookPowerEvent(1);
                        }
                    }
                    else if (info.uid != Game.Instance.player.UID)
                    {
                        HookPos        hookPos  = (HookPos)Enum.Parse(typeof(HookPos), info.chairId);
                        AllStuffNeeded allStuff = SceneMgr.Instance.hookPosAllStuffMap[hookPos];
                        if (oHook == null)
                        {
                            oHook = allStuff.gmObjRealPoleEnd.AddComponent <OHook>();
                            //Assume that player can't change position in level
                            oHook.Init(hookPos);

                            FloatEffect floatEffect = allStuff.gmObjBoat.AddComponent <FloatEffect>();
                            floatEffect.Init();
                            floatEffect.StartEffect();
                        }
                        allStuff.gmObjBoat.SetActive(true);
                        oHook.gameObject.SetActive(true);
                        uIDHookMap.Add(info.uid, oHook);

                        //Init oPlayer(no definition, just intialize it)
                        _oPlayer.UID     = info.uid;
                        _oPlayer.Score   = info.score;
                        _oPlayer.Lottery = info.lottery;
                        uIDPlayerMap.Add(info.uid, _oPlayer);

                        oHook.OnEnter(info.enterTime, _oPlayer, allStuff);


                        oHook.ChangeHooks(info.hook);
                        _raisePlayerChangeEvent(oHook.hookPos, true);
                        _raiseScoreChangeEvent(oHook.hookPos, _oPlayer.Score);
                        raiseLotteryChangeEvent(oHook.hookPos, _oPlayer.Lottery);
                    }
                }
            }
            else
            {
                DebugLogger.LogWarning(eLogType.LT_LOGIC, iCount + " hooks, out of bound!");
            }
        }
		bool GenerateHook (HookType hookType, HookDir dir, Type type, string member)
		{
			GenerateHooks (hookType, dir, type, null, HookAction.InsertBefore);
			if (GenerateHooks (hookType, dir, type, null, HookAction.Replace))
			{
				GenerateHooks (hookType, dir, type, null, HookAction.InsertAfter);
				return true;
			}
			else
			{
				HookInfo hi = new HookInfo ();
				hi.HookType = hookType;
				hi.Type = type;
				hi.Member = member;
				hi.Direction = dir;
				_hookOpenHooks.Push (hi);
				return false;
			}
		}
Esempio n. 13
0
 public void disable(HookInfo i)
 {
     this.RemoveHook(i);
     UnregisterHotKey(i.hWnd, i.ID);
 }
Esempio n. 14
0
 /// <summary>
 /// removes a HookInfo from the list of hooked keys
 /// </summary>
 /// <param name="hInfo">HookInfo of a registered key</param>
 private void RemoveHook(HookInfo hInfo)
 {
     for (int i = 0; i < hookedKeys.Count; i++)
     {
         if (hookedKeys[i].hWnd == hInfo.hWnd && hookedKeys[i].ID == hInfo.ID)
         {
             hookedKeys.RemoveAt(i--);
         }
     }
 }
Esempio n. 15
0
 /// <summary>
 /// Enables a global hotkey hook
 /// </summary>
 /// <param name="Handle">Handle to a form or application message processing class that can receive messages. Easiest: a form with overridden WndProc method</param>
 /// <param name="Mod">Modifiers (Alt, Shift, ...)</param>
 /// <param name="Key">Key to record</param>
 /// <returns>Hook information, required for disabling. Can also be obtained with HookedKeys property</returns>
 public HookInfo enable(IntPtr Handle,Modifiers Mod, Keys Key)
 {
     HookInfo i=new HookInfo(Handle,freeID++);
     hookedKeys.Add(i);
     RegisterHotKey(Handle, i.ID, (int)Mod, (int)Key);
     return i;
 }
Esempio n. 16
0
 public JumpHookTransferStation(HookInfo info) : base(info)
 {
 }
Esempio n. 17
0
 public void Disable(HookInfo hInfo)
 {
     RemoveHook(hInfo);
     UnregisterHotKey(hInfo.Hwnd, hInfo.Id);
 }
Esempio n. 18
0
 public static extern int GetHookInfo(IntPtr luaState, ref HookInfo info);
Esempio n. 19
0
 public HookEventArgs(ScriptState luaState, HookInfo info)
 {
     _luaState = luaState;
     _info     = info;
 }
Esempio n. 20
0
 public static extern int GetStack(IntPtr luaState, int level, ref HookInfo info);
Esempio n. 21
0
 public void disable(HookInfo i)
 {
     this.RemoveHook(i);
     UnregisterHotKey(i.hWnd, i.ID);
 }
Esempio n. 22
0
 public static extern void FreeDebug(HookInfo info);
Esempio n. 23
0
 private void RemoveHook(HookInfo hInfo)
 {
     for (int i = 0; i < this.hookedKeys.Count; i++)
     {
         if ((this.hookedKeys[i].hWnd == hInfo.hWnd) && (this.hookedKeys[i].ID == hInfo.ID))
         {
             this.hookedKeys.RemoveAt(i--);
         }
     }
 }
Esempio n. 24
0
 public static void FreeDebug(HookInfo info)
 {
     ScriptApi.FreeDebug(info);
 }