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(); } }
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(); } }
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; } }