public override async Task <TResult> Run <TResult>(Func <Task <TResult> > action)
 {
     if (TaskInvokationVerification())
     {
         return(await TaskInvoker.Invoke(action, _TimeOut, this));
     }
     else
     {
         throw new OpenStateException();
     }
 }
 public override void Run(Action action)
 {
     if (TaskInvokationVerification())
     {
         TaskInvoker.Invoke(action, _TimeOut, this);
     }
     else
     {
         throw new OpenStateException();
     }
 }
 public override async Task Run(Func <Task> action)
 {
     if (TaskInvokationVerification())
     {
         await TaskInvoker.Invoke(action, _TimeOut, this);
     }
     else
     {
         throw new OpenStateException();
     }
 }
        public static Ped GetInstancePed(this TaskInvoker taskInvoker)
        {
            PropertyInfo p = taskInvoker.GetType().GetProperty("Ped", BindingFlags.NonPublic | BindingFlags.Instance);

            if (p != null)
            {
                Ped instancePed = (Ped)p.GetMethod.Invoke(taskInvoker, null);
                return(instancePed);
            }
            return(null);
        }
示例#5
0
        public static Task VehicleEscort(this TaskInvoker taskInvoker, Vehicle vehicle, Vehicle targetVehicle, EscortMode mode, float speed, VehicleDrivingFlags style, float minimumDistance, float noRoadsDistance)
        {
            Ped ped = taskInvoker.GetInstancePed();

            if (ped != null)
            {
                NativeFunction.CallByName <uint>("TASK_VEHICLE_ESCORT", ped, vehicle, targetVehicle, (int)mode, speed, (int)style, minimumDistance, 0, noRoadsDistance);
                return(Task.GetTask(ped, "TASK_VEHICLE_ESCORT"));
            }
            return(null);
        }
示例#6
0
        /// <summary>
        /// Test for the implementation of the command pattern
        /// </summary>
        private static void CommandTest()
        {
            ITaskReceiver taskRepository = new TaskReceiver();
            TaskInvoker   taskManager    = new TaskInvoker();

            ICommand addTaskCommand1 = new AddTaskCommand(taskRepository, "Read Qurran 30min");
            ICommand addTaskCommand2 = new AddTaskCommand(taskRepository, "Read book 30min");
            ICommand addTaskCommand3 = new AddTaskCommand(taskRepository, "Sport 20min");

            ICommand markTaskCompletedCommand = new MarkTaskCompleteCommand(taskRepository, "Read Qurran 30min");
            ICommand displayAllTasks          = new DisplayAllTasksDetailsCommand(taskRepository);

            taskManager.Execute(addTaskCommand1);
            taskManager.Execute(addTaskCommand2);
            taskManager.Execute(addTaskCommand3);
            taskManager.Execute(markTaskCompletedCommand);
            taskManager.Execute(displayAllTasks);
        }
示例#7
0
        private async void toolRun_Click(object sender, EventArgs e)
        {
            if (this.isRun)
            {
                return;
            }
            if (!this.editor.Save())
            {
                return;
            }
            if (this.isRun)
            {
                return;
            }
            this.txtResult.Text      = "";
            this.txtResult.ForeColor = Color.Black;
            this.isRun = true;
            this.SetRunSetting();
            this.stat.Start();
            this.LabStatus.Text = "正在执行...";
            var scriptFile = this.editor.SelectedItem.BindFile.FullName;
            var source     = new TaskSource();

            await new System.Threading.Tasks.TaskFactory().StartNew(() =>
            {
                try
                {
                    using (tasks = new SnailCore.Sync.Parallel(this.runSetting.UserCount))
                    {
                        tasks.ForEach <int>(new int[this.runSetting.UserCount], (item) =>
                        {
                            try
                            {
                                // 启动一个用户客户端
                                using (var invoker = new TaskInvoker(scriptFile))
                                {
                                    invoker.AddHostObj("console", this);
                                    invoker.AddHostObj("log", this);
                                    invoker.AddHostObj("stat", this.stat);
                                    invoker.AddHostObj("source", source);
                                    this.stat.addUser();
                                    var runResult = false;
                                    try
                                    {
                                        runResult = invoker.Run();
                                    }
                                    catch (Exception ex)
                                    {
                                        this.SetResult(false, ex.ToString() + "\r\n", true);
                                        runResult = false;
                                    }
                                    this.stat.addUser(-1);
                                }
                            }
                            catch (Exception ex)
                            {
                                this.SetResult(false, ex.ToString() + "\r\n", true);
                            }
                        });
                    }
                }
                catch (Exception ex)
                {
                    this.SetResult(false, ex.ToString() + "\r\n", true);
                }
                finally
                {
                    this.isRun = false;
                    this.LabStatus.BeginInvoke(new MethodInvoker(() =>
                    {
                        this.LabStatus.Text = "已结束";
                    }));
                    SetRunStatus();
                }
            });
            source.Dispose();
            this.isRun = false;
        }
 public override void Try()
 {
     TaskInvoker.InvokePlanified(
         () => _TryCloseTheGate(),
         _ReTimeOut);
 }
示例#9
0
 public override async Task <TResult> Run <TResult>(Func <Task <TResult> > action)
 {
     return(await TaskInvoker.InvokeAsync <TResult>(action, _TimeOut, this));
 }
示例#10
0
 public override async Task Run(Func <Task> action)
 {
     await TaskInvoker.InvokeAsync(action, _TimeOut, this);
 }
示例#11
0
 public override TResult Run <TResult>(Func <TResult> action)
 {
     return(TaskInvoker.Invoke <TResult>(action, _TimeOut, this));
 }
示例#12
0
 public override void Run(Action action)
 {
     TaskInvoker.Invoke(action, _TimeOut, this);
 }
示例#13
0
        private void UpdateVehicleMountedWeapon()
        {
            if (WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)VehicleHash, VehicleSeat))
            {
                var delay = 30;
                //if ((VehicleHash) VehicleHash == GTA.Native.VehicleHash.Rhino) delay = 300;

                if (Game.GameTime - _lastVehicleAimUpdate > delay)
                {
                    Function.Call(Hash.TASK_VEHICLE_AIM_AT_COORD, Character, AimCoords.X, AimCoords.Y,
                                  AimCoords.Z);
                    _lastVehicleAimUpdate = Game.GameTime;
                }

                if (IsShooting)
                {
                    if (((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino &&
                         DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 1000) ||
                        ((VehicleHash)VehicleHash != GTA.VehicleHash.Rhino))
                    {
                        _lastRocketshot = DateTime.Now;

                        var baseTurretPos =
                            MainVehicle.GetOffsetInWorldCoords(
                                WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, false));
                        var doesBaseTurretDiffer =
                            WeaponDataProvider.DoesVehiclesMuzzleDifferFromVehicleGunPos(
                                (VehicleHash)VehicleHash);
                        var barrellLength = WeaponDataProvider.GetVehicleTurretLength((VehicleHash)VehicleHash);

                        var speed = 0xbf800000;
                        var hash  = WeaponHash.CombatPDW;
                        if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino)
                        {
                            hash = (WeaponHash)1945616459;
                        }

                        Vector3 tPos = baseTurretPos;
                        if (
                            WeaponDataProvider.DoesVehicleHaveParallelWeapon((VehicleHash)VehicleHash, false) &&
                            VehicleSeat == 1)
                        {
                            var muzzle = WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash,
                                                                                   false);
                            tPos =
                                MainVehicle.GetOffsetInWorldCoords(new Vector3(muzzle.X * -1f, muzzle.Y, muzzle.Z));
                        }

                        if (doesBaseTurretDiffer)
                        {
                            var kekDir = (AimCoords - tPos);
                            kekDir.Normalize();
                            var rot    = Main.DirectionToRotation(kekDir);
                            var newDir = Main.RotationToDirection(new Vector3(0, 0, rot.Z));
                            newDir.Normalize();
                            tPos = tPos +
                                   newDir *
                                   WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, true)
                                   .Length();
                        }


                        var turretDir = (AimCoords - tPos);
                        turretDir.Normalize();
                        var start = tPos + turretDir * barrellLength;
                        var end   = start + turretDir * 100f;

                        _lastStart = start;
                        _lastEnd   = end;

                        var damage = WeaponDataProvider.GetWeaponDamage(WeaponHash.Minigun);
                        if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino)
                        {
                            damage = 210;
                        }

                        if (IsFriend())
                        {
                            damage = 0;
                        }

                        Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X,
                                      end.Y, end.Z, damage, true, (int)hash, Character, true, false, speed);
                    }
                }
            }
            else if (!WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)VehicleHash) || VehicleSeat != -1)
            {
                if (Character.Weapons.Current.Hash != (WeaponHash)CurrentWeapon)
                {
                    //Function.Call(Hash.GIVE_WEAPON_TO_PED, Character, CurrentWeapon, 999, true, true);
                    //Function.Call(Hash.SET_CURRENT_PED_WEAPON, Character, CurrentWeapon, true);
                    //Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true);
                    //Character.Weapons.Select((WeaponHash) CurrentWeapon);
                    Character.Weapons.RemoveAll();
                    Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true);
                }

                if (IsShooting || IsAiming)
                {
                    if (!_lastDrivebyShooting)
                    {
                        Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, false, false, false, false);

                        Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z,
                                      0, 0, 0, unchecked ((int)FiringPattern.SingleShot));
                    }
                    else
                    {
                        Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, true, false, false, false);

                        Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z);
                    }

                    var rightSide = (VehicleSeat + 2) % 2 == 0;

                    if (WeaponDataProvider.NeedsFakeBullets(CurrentWeapon))
                    {
                        const string rightDict = "veh@driveby@first_person@passenger_right_handed@throw";
                        const string leftDict  = "veh@driveby@first_person@driver@throw";

                        string drivebyDict = rightSide ? rightDict : leftDict;

                        Function.Call(Hash.TASK_PLAY_ANIM_ADVANCED, Character, Util.Util.LoadDict(drivebyDict),
                                      "sweep_low", Character.Position.X, Character.Position.Y, Character.Position.Z, Character.Rotation.X,
                                      Character.Rotation.Y, Character.Rotation.Z, -8f, -8f, -1, 0, rightSide ? 0.6f : 0.3f, 0, 0);
                    }

                    if (IsShooting)
                    {
                        Function.Call(Hash.SET_PED_INFINITE_AMMO_CLIP, Character, true);
                        Function.Call(Hash.SET_PED_AMMO, Character, CurrentWeapon, 10);


                        if (AimPlayer != null && AimPlayer.Position != null)
                        {
                            AimCoords = AimPlayer.Position;
                            AimPlayer = null;
                        }

                        if (!WeaponDataProvider.NeedsFakeBullets(CurrentWeapon))
                        {
                            Function.Call(Hash.SET_PED_SHOOTS_AT_COORD, Character, AimCoords.X, AimCoords.Y, AimCoords.Z,
                                          true);
                        }
                        else if (DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 500)
                        {
                            _lastRocketshot = DateTime.Now;

                            var damage  = WeaponDataProvider.GetWeaponDamage((WeaponHash)CurrentWeapon);
                            var speed   = 0xbf800000;
                            var weaponH = (WeaponHash)CurrentWeapon;

                            if (IsFriend())
                            {
                                damage = 0;
                            }

                            var start = Character.GetBoneCoord(rightSide ? Bone.SKEL_R_Hand : Bone.SKEL_L_Hand);
                            var end   = AimCoords;

                            Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z,
                                          end.X,
                                          end.Y, end.Z, damage, true, (int)weaponH, Character, false, true, speed);
                        }
                    }

                    _lastVehicleAimUpdate = Game.GameTime;
                    _lastDrivebyShooting  = IsShooting || IsAiming;
                    Ped PlayerChar = Game.Player.Character;
                    if (Function.Call <bool>(Hash.HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY, PlayerChar, Character, true))
                    {
                        int boneHit    = -1;
                        var boneHitArg = new OutputArgument();

                        if (Function.Call <bool>(Hash.GET_PED_LAST_DAMAGE_BONE, PlayerChar, boneHitArg))
                        {
                            boneHit = boneHitArg.GetResult <int>();
                        }

                        LocalHandle them = new LocalHandle(Character.Handle, HandleType.GameHandle);
                        JavascriptHook.InvokeCustomEvent(api =>
                                                         api.invokeonLocalPlayerDamaged(them, CurrentWeapon, boneHit /*, playerHealth, playerArmor*/));
                    }

                    Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, Character);
                    Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, PlayerChar);
                }

                if (!IsShooting && !IsAiming && _lastDrivebyShooting && Game.GameTime - _lastVehicleAimUpdate > 200)
                {
                    TaskInvoker task = Character.Task;
                    task.ClearAll();
                    task.ClearSecondary();
                    Function.Call(Hash.CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK, Character);
                    //Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                    //Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, 0, 0, 0);
                    task.ClearLookAt();
                    //GTA.UI.Screen.ShowNotification("Done shooting");
                    //GTA.UI.Screen.ShowSubtitle("Done Shooting1", 300);
                    _lastDrivebyShooting = false;
                }
            }
        }
示例#14
0
 public override void Try(CircuitBreaker circuitBreaker)
 {
     TaskInvoker.InvokePlanified(
         () => StateToggle.TryClose(this),
         _TimeOut);
 }