Beispiel #1
0
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var playerEntity = SampEntities.GetPlayerId((int)context.Arguments[0]);

            var objectType = (int)context.Arguments[1];
            var objectId   = (int)context.Arguments[2];

            var objectEntity = objectType == (int)ObjectType.PlayerObject
                ? SampEntities.GetPlayerObjectId(playerEntity, objectId)
                : SampEntities.GetObjectId(objectId);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            // Allow unknown objects to be passed through to the event.

            _context.BaseContext = context;

            _context.Arguments[0] = playerEntity;
            _context.Arguments[1] = objectEntity;
            _context.Arguments[2] = context.Arguments[3];                     // modelId
            _context.Arguments[3] = new Vector3((float)context.Arguments[4], (float)context.Arguments[5],
                                                (float)context.Arguments[6]); // position

            return(_next(_context));
        }
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var inArgs       = context.Arguments;
            var playerEntity = SampEntities.GetPlayerId((int)inArgs[0]);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            _context.BaseContext = context;

            var args = _context.Arguments;

            args[0] = playerEntity;
            args[1] = inArgs[1];                                                            // response
            args[2] = inArgs[2];                                                            // index
            args[3] = inArgs[3];                                                            // modelId
            args[4] = inArgs[4];                                                            // bone
            args[5] = new Vector3((float)inArgs[5], (float)inArgs[6], (float)inArgs[7]);    // offset
            args[6] = new Vector3((float)inArgs[8], (float)inArgs[9], (float)inArgs[10]);   // rotation
            args[7] = new Vector3((float)inArgs[11], (float)inArgs[12], (float)inArgs[13]); // scale

            return(_next(_context));
        }
        private static void InvokeVehicleNatives(IEntityManager entityManager, TestingFastNative fastProxy)
        {
            // Call CreateVehicle native
            var testPosition  = new Vector3(65.13f, 123.123f, 555.555f);
            var fastVehicleId = fastProxy.CreateVehicle((int)VehicleModelType.Landstalker, testPosition.X,
                                                        testPosition.Y, testPosition.Z, 15, -1, -1, -1, 0);

            // Create Vehicle entity to verify vehicle position was set properly through the native
            var entity = SampEntities.GetVehicleId(fastVehicleId);

            entityManager.Create(entity);

            entityManager.AddComponent <NativeVehicle>(entity);
            var fastVehicleComp = entityManager.AddComponent <Vehicle>(entity);

            Console.WriteLine(
                $"Created vehicle {fastVehicleId} position {fastVehicleComp.Position}; matches? {(fastVehicleComp.Position == testPosition)}");

            // Call GetVehiclePos
            Console.WriteLine("GOGO GetVehiclePos");
            var ret = fastProxy.GetVehiclePos(fastVehicleId, out var x, out var y, out var z);

            Console.WriteLine("DONE GetVehiclePos");
            var getPos = new Vector3(x, y, z);

            Console.WriteLine($"get pos ({ret}): {getPos} matches? {(testPosition == getPos)}");
        }
        public object Invoke(EventContext context)
        {
            var inArgs       = context.Arguments;
            var playerEntity = SampEntities.GetPlayerId((int)inArgs[0]);

            var isPlayerObject = (bool)inArgs[1];
            var objectId       = (int)inArgs[2];

            var objectEntity = isPlayerObject
                ? SampEntities.GetPlayerObjectId(playerEntity, objectId)
                : SampEntities.GetObjectId(objectId);

            // Allow unknown objects to be passed through to the event.

            _context.BaseContext = context;

            var args = _context.Arguments;

            args[0] = playerEntity;
            args[1] = objectEntity;
            args[2] = inArgs[3];                                                         // response
            args[3] = new Vector3((float)inArgs[4], (float)inArgs[5], (float)inArgs[6]); // position
            args[4] = new Vector3((float)inArgs[7], (float)inArgs[8], (float)inArgs[9]); // rotation

            return(_next(_context));
        }
Beispiel #5
0
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var inArgs       = context.Arguments;
            var playerEntity = SampEntities.GetPlayerId((int)inArgs[0]);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            var hitType = (int)context.Arguments[2];
            var hitId   = (int)context.Arguments[3];

            EntityId hit;

            switch ((BulletHitType)hitType)
            {
            case BulletHitType.Vehicle:
                hit = SampEntities.GetVehicleId(hitId);
                break;

            case BulletHitType.Object:
                hit = SampEntities.GetObjectId(hitId);
                break;

            case BulletHitType.Player:
                hit = SampEntities.GetPlayerId(hitId);
                break;

            case BulletHitType.PlayerObject:
                hit = SampEntities.GetPlayerObjectId(playerEntity, hitId);
                break;

            default:
                hit = default;
                break;
            }

            // It could be the hit entity does not exist, for instance if it is a player object created by
            // the streamer plugin. We can't however dismiss this event or else the user will not be able
            // to handle the event in some other way.

            _context.BaseContext = context;

            var args = _context.Arguments;

            args[0] = playerEntity;
            args[1] = inArgs[1];                                                         // weapon
            args[2] = hit;
            args[3] = new Vector3((float)inArgs[4], (float)inArgs[5], (float)inArgs[6]); // position

            return(_next(_context));
        }
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            // TODO: Parenting to connection
            var entity = SampEntities.GetPlayerId((int)context.Arguments[0]);

            entityManager.Create(entity);
            entityManager.AddComponent <NativePlayer>(entity);
            entityManager.AddComponent <Player>(entity);

            context.Arguments[0] = entity;

            return(_next(context));
        }
Beispiel #7
0
        /// <inheritdoc />
        public bool TryParse(IServiceProvider services, ref string inputText, out object result)
        {
            if (!_wordParser.TryParse(services, ref inputText, out var subResult) ||
                !(subResult is string word))
            {
                result = null;
                return(false);
            }

            var entityManager = services.GetRequiredService <IEntityManager>();

            if (int.TryParse(word, out var intWord))
            {
                var entity = SampEntities.GetPlayerId(intWord);

                if (entityManager.Exists(entity))
                {
                    result = entity;
                    return(true);
                }
            }

            var      players       = entityManager.GetComponents <Player>();
            EntityId bestCandidate = null;

            foreach (Player player in players)
            {
                if (player.Name.Equals(word, StringComparison.OrdinalIgnoreCase))
                {
                    result = player.Entity;
                    return(true);
                }

                if (player.Name.ToLower().StartsWith(word.ToLower()))
                {
                    if (bestCandidate == null)
                    {
                        bestCandidate = player.Entity;
                    }
                    else if (player.Entity.Handle < bestCandidate.Handle)
                    {
                        bestCandidate = player.Entity;
                    }
                }
            }

            result = bestCandidate;
            return(bestCandidate != null);
        }
Beispiel #8
0
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var playerEntity = SampEntities.GetPlayerId((int)context.Arguments[0]);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            _context.BaseContext  = context;
            _context.Arguments[0] = playerEntity;
            _context.Arguments[1] = new Vector3((float)context.Arguments[1], (float)context.Arguments[2], (float)context.Arguments[3]); // position

            return(_next(_context));
        }
Beispiel #9
0
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var playerEntity = SampEntities.GetPlayerId((int)context.Arguments[0]);
            var objectEntity = SampEntities.GetPlayerObjectId(playerEntity, (int)context.Arguments[1]);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            // Allow unknown objects to be passed through to the event.

            context.Arguments[0] = playerEntity;
            context.Arguments[1] = objectEntity;

            return(_next(context));
        }
Beispiel #10
0
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var entity = SampEntities.GetPlayerId((int)context.Arguments[0]);

            if (!entityManager.Exists(entity))
            {
                return(null);
            }

            context.Arguments[0] = entity;

            var result = _next(context);

            entityManager.Destroy(entity);

            return(result);
        }
        public object Invoke(EventContext context, IEventService eventService, IEntityManager entityManager)
        {
            var playerEntity   = SampEntities.GetPlayerId((int)context.Arguments[0]);
            var textDrawEntity = SampEntities.GetTextDrawId((int)context.Arguments[1]);

            if (!entityManager.Exists(playerEntity))
            {
                return(null);
            }

            // Allow unknown text draws to be passed through to the event.

            // Forward to OnPlayerCancelTextDraw and cancel continuation OnPlayerClickTextDraw event.
            if (textDrawEntity == NativeTextDraw.InvalidId)
            {
                return(eventService.Invoke("OnPlayerCancelTextDraw", playerEntity));
            }

            context.Arguments[0] = playerEntity;
            context.Arguments[1] = textDrawEntity;

            return(_next(context));
        }
        public object Invoke(EventContext context, IEntityManager entityManager)
        {
            var inArgs        = context.Arguments;
            var vehicleEntity = SampEntities.GetVehicleId((int)inArgs[0]);
            var playerEntity  = SampEntities.GetPlayerId((int)inArgs[1]);

            if (!entityManager.Exists(playerEntity) || !entityManager.Exists(vehicleEntity))
            {
                return(null);
            }

            _context.BaseContext = context;

            var args = _context.Arguments;

            args[0] = vehicleEntity;
            args[1] = playerEntity;
            args[2] = inArgs[2];                                                         // passengerSeat
            args[3] = new Vector3((float)inArgs[3], (float)inArgs[4], (float)inArgs[5]); // newPosition
            args[4] = new Vector3((float)inArgs[6], (float)inArgs[7], (float)inArgs[8]); // velocity

            return(_next(_context));
        }
Beispiel #13
0
        public void OnGameModeInit(IWorldService worldService, IEntityManager entityManager, INativeObjectProxyFactory proxyFactory, ITimerService timerService)
        {
            // Only test FastNative performance if FastNative is not activated
            if (proxyFactory is FastNativeBasedNativeObjectProxyFactory)
            {
                return;
            }

            //timerService.Start(_ => BenchmarkRunTimer(), TimeSpan.FromSeconds(2));
            timerService.Start(_ => BenchmarkRunTimerProxy(), TimeSpan.FromSeconds(2));

            _nativeGetVehicleParamsEx = Interop.FastNativeFind("GetVehicleParamsEx");
            _testVehicleId            = worldService.CreateVehicle(VehicleModelType.BMX, Vector3.One, 0, 0, 0).Entity.Handle;

            var fastFactory = new FastNativeBasedNativeObjectProxyFactory(_client);
            var handleProxy = NativeObjectProxyFactory.CreateInstance <TestingFastNative>();
            var fastProxy   = (TestingFastNative)fastFactory.CreateInstance(typeof(TestingFastNative));

            _fastProxy = fastProxy;

            // Call IsPlayerConnected
            timerService.Start(_ =>
            {
                Console.WriteLine("RequiresInvoke: " + ((ISynchronizationProvider)_client).InvokeRequired);
                Console.WriteLine("IsPlayerConnected fast: " + fastProxy.IsPlayerConnected(0));
                Console.WriteLine("IsPlayerConnected handle: " + handleProxy.IsPlayerConnected(0));

                Task.Run(() =>
                {
                    Console.WriteLine("TASK.RequiresInvoke: " + ((ISynchronizationProvider)_client).InvokeRequired);
                    Console.WriteLine("TASK.IsPlayerConnected fast: " + fastProxy.IsPlayerConnected(0));
                    Console.WriteLine("TASK.IsPlayerConnected handle: " + handleProxy.IsPlayerConnected(0));
                });
            }, TimeSpan.FromSeconds(1));


            // Call CreateVehicle native
            var testPosition  = new Vector3(65.13f, 123.123f, 555.555f);
            var fastVehicleId = fastProxy.CreateVehicle((int)VehicleModelType.Landstalker, testPosition.X,
                                                        testPosition.Y, testPosition.Z, 15, -1, -1, -1, 0);

            // Create Vehicle entity to verify vehicle position was set properly through the native
            var entity = SampEntities.GetVehicleId(fastVehicleId);

            entityManager.Create(entity);

            entityManager.AddComponent <NativeVehicle>(entity);
            var fastVehicleComp = entityManager.AddComponent <Vehicle>(entity);

            Console.WriteLine($"Created vehicle {fastVehicleId} position {fastVehicleComp.Position}; matches? {(fastVehicleComp.Position == testPosition)}");

            // Call GetVehiclePos
            var ret    = fastProxy.GetVehiclePos(fastVehicleId, out var x, out var y, out var z);
            var getPos = new Vector3(x, y, z);

            Console.WriteLine($"get pos ({ret}): {getPos} matches? {(testPosition == getPos)}");

            // Test immediate call to SetGameModeText
            // var nativeSetGameModeText = Interop.FastNativeFind("SetGameModeText");
            // SetGameModeTextCall(nativeSetGameModeText, "TestValue");

            // Test via proxy
            fastProxy.SetGameModeText("TestValueViaProxy");
        }