예제 #1
0
파일: Ropes.cs 프로젝트: razzie/PocceMod
        private static async Task NetAddRope(string player, int id, int netEntity1, int netEntity2, Vector3 offset1, Vector3 offset2, float length)
        {
            var rope = await RopeWrapper.Create(player, id, netEntity1, netEntity2, offset1, offset2, length);

            if (player == Common.PlayerID.ToString())
            {
                rope.OnDespawn += _ => TriggerServerEvent("PocceMod:RemoveRope", id);
            }

            _ropes.AddRope(rope);

            if (!API.RopeAreTexturesLoaded())
            {
                API.RopeLoadTextures();
            }
        }
예제 #2
0
파일: Ropes.cs 프로젝트: 0xt0b3r/PocceMod
        private static async Task AddRope(int player, int entity1, int entity2, Vector3 offset1, Vector3 offset2, int mode)
        {
            if (entity1 == entity2 && entity1 > 0)
            {
                return;
            }

            if (RootObject == 0)
            {
                var model = (uint)API.GetHashKey("prop_devin_rope_01");
                await Common.RequestModel(model);

                RootObject = API.CreateObject((int)model, 0f, 0f, 0f, false, false, false);
                API.SetModelAsNoLongerNeeded(model);
                API.FreezeEntityPosition(RootObject, true);
            }

            entity1 = await Common.WaitForNetEntity(entity1);

            entity2 = await Common.WaitForNetEntity(entity2);

            if (entity1 == 0)
            {
                entity1 = RootObject;
            }

            if (entity2 == 0)
            {
                entity2 = RootObject;
            }

            if (!API.DoesEntityExist(entity1) || !API.DoesEntityExist(entity2))
            {
                return;
            }

            var rope = new RopeWrapper(new Player(player), entity1, entity2, offset1, offset2, (ModeFlag)mode);

            _ropes.AddRope(rope);

            if (!API.RopeAreTexturesLoaded())
            {
                API.RopeLoadTextures();
            }
        }
예제 #3
0
        public override void Update()
        {
            if (_rope != null)
            {
                _rope.Update();
                return;
            }

            if (_retry != null && DateTime.Now > _retry)
            {
                if (_tryResolve1)
                {
                    Entity1 = API.NetToEnt(_netEntity1);

                    if (!API.DoesEntityExist(Entity1))
                    {
                        Retry();
                        return;
                    }

                    _tryResolve1 = false;
                }

                if (_tryResolve2)
                {
                    Entity2 = API.NetToEnt(_netEntity2);

                    if (!API.DoesEntityExist(Entity2))
                    {
                        Retry();
                        return;
                    }

                    _tryResolve2 = false;
                }

                _rope         = new RopeWrapper(Player.Handle, Entity1, Entity2, Offset1, Offset2, Mode);
                _rope.Timeout = Timeout;
            }

            if (Timeout != null && Timeout < DateTime.Now)
            {
                _retry = null;
            }
        }