diff --git a/ReallifeGamemode.Client/core/rage-mp/entities.ts b/ReallifeGamemode.Client/core/rage-mp/entities.ts index b3409977..69cd3e1a 100644 --- a/ReallifeGamemode.Client/core/rage-mp/entities.ts +++ b/ReallifeGamemode.Client/core/rage-mp/entities.ts @@ -15,6 +15,13 @@ class RageEntity implements IEntity { return this.entity.id; } + get attachments(): number { + var color = this.entity.getVariable("nametagColor"); + if (!color) + return 0; + return color; + } + get handle() { return this.entity.handle; } diff --git a/ReallifeGamemode.Client/util/attachmentMngr.ts b/ReallifeGamemode.Client/util/attachmentMngr.ts index 7cb9c80a..2da23324 100644 --- a/ReallifeGamemode.Client/util/attachmentMngr.ts +++ b/ReallifeGamemode.Client/util/attachmentMngr.ts @@ -12,125 +12,56 @@ export default function attachmentManager(game: IGame) { attachmentMngr.register("weapondeal2", "w_sg_pumpshotgun", "weapondeal2w_sg_pumpshotgun", new mp.Vector3(0.4, 1.6, 0.62), new mp.Vector3(90, 0, 180)); }); - const attachmentMngr = + const attachmentMngr = { attachments: {}, - addFor: function (entityRage, id) { - - if (!entityRage) { - return; - } - - - let entity: IEntity; - if (entityRage.type === "player") { - var player = game.players.at(entityRage.remoteId); - entity = player; - - } else if (entityRage.type === "vehicle") { - var vehicle = game.vehicles.at(entityRage.remoteId); - entity = vehicle; - var realName = mp.game.ui.getLabelText(mp.game.vehicle.getDisplayNameFromVehicleModel(entityRage.model)); - } else if (entityRage.type === "object") { - return; - } - - - - - - let e = game.attachments.get(entity); - + addFor: async function (entity, id) { if (this.attachments.hasOwnProperty(id)) { - - - if (!e.__attachmentObjects) { e.__attachmentObjects = []; } - - - if (!e.__attachmentObjects.hasOwnProperty(id)) { - - + if (!entity.__attachmentObjects.hasOwnProperty(id)) { let attInfo = this.attachments[id]; - let rageObject = mp.objects.new(attInfo.model, entityRage.position); - - var bone = (typeof (attInfo.boneName) === 'string') ? entityRage.getBoneIndexByName(attInfo.boneName) : entityRage.getBoneIndex(attInfo.boneName) + let object = mp.objects.new(attInfo.model, entity.position); + while (object.handle === 0) { + await mp.game.waitAsync(0); + } - let attachmentData = { - targetEntity: entity.id, - bone: bone, + object.__attMgrData = { + targetEntity: entity.handle, + bone: (typeof (attInfo.boneName) === 'string') ? entity.getBoneIndexByName(attInfo.boneName) : entity.getBoneIndex(attInfo.boneName), offset: attInfo.offset, rotation: attInfo.rotation }; - game.objects.setData(rageObject, attachmentData); // hier hakt es mein freund - - let object = game.objects.at(rageObject.remoteId); - - //DEBUG MSG - mp.gui.chat.push(`ATTACH: ${attachId} - bone = ${bone}`) - - //rageObject.notifyStreaming = true; - mp.gui.chat.push("Notified Stream."); - game.wait(200); - - //DEBUG MSG - mp.gui.chat.push(`ATTACH: ${attachId} - Attaching ${JSON.stringify(attInfo)}`); - e.__attachmentObjects[id] = rageObject;; + object.notifyStreaming = true; + entity.__attachmentObjects[id] = object; } } - /* else { - mp.game.graphics.notify(`Static Attachments Error: ~r~Unknown Attachment Used: ~w~0x${id.toString(16)}`); - } */ - }, - - removeFor: function (entityRage, id) { - let entity; - if (entityRage.type === "player") { - entity = game.players.at(entityRage.remoteId); - } else if (entityRage.type === "vehicle") { - entity = game.vehicles.at(entityRage.remoteId); - } - let e = game.attachments.get(entity); - - if (e.__attachmentObjects.hasOwnProperty(id)) { - let obj = e.__attachmentObjects[id]; - - obj.destroy(); - delete e.__attachmentObjects[id]; + else { + mp.game.graphics.notify(`Static Attachments Error: ~r~Unknown Attachment Used: ~w~0x${id.toString(16)}`); } }, - initFor: function (entityRage) { - let entity; - if (entityRage.type === "player") { - entity = game.players.at(entityRage.remoteId); - } else if (entityRage.type === "vehicle") { - entity = game.vehicles.at(entityRage.remoteId); - } + removeFor: function (entity, id) { + if (entity.__attachmentObjects.hasOwnProperty(id)) { + let obj = entity.__attachmentObjects[id]; + delete entity.__attachmentObjects[id]; - let e = game.attachments.get(entity); - if (e != null) { - for (let attachment of e.__attachments) { - attachmentMngr.addFor(entityRage, attachment); + if (mp.objects.exists(obj)) { + obj.destroy(); } } }, - shutdownFor: function (entityRage) { - let entity; - if (entityRage.type === "player") { - entity = game.players.at(entityRage.remoteId); - } else if (entityRage.type === "vehicle") { - entity = game.vehicles.at(entityRage.remoteId); + initFor: function (entity) { + for (let attachment of entity.__attachments) { + attachmentMngr.addFor(entity, attachment); } + }, - let e = game.attachments.get(entity); - if (e != null) { - for (let attachment of e.__attachments) { - attachmentMngr.removeFor(entityRage, attachment); - } + shutdownFor: function (entity) { + for (let attachment in entity.__attachmentObjects) { + attachmentMngr.removeFor(entity, attachment); } }, @@ -146,7 +77,6 @@ export default function attachmentManager(game: IGame) { if (!this.attachments.hasOwnProperty(id)) { if (mp.game.streaming.isModelInCdimage(model)) { this.attachments[id] = - { id: id, model: model, @@ -156,7 +86,7 @@ export default function attachmentManager(game: IGame) { }; } else { - mp.game.graphics.notify(`Static Attachments Error: ~r~Invalid Model(0x${model.toString(16)})`); + mp.game.graphics.notify(`Static Attachments Error: ~r~Invalid Model (0x${model.toString(16)})`); } } else { @@ -179,10 +109,9 @@ export default function attachmentManager(game: IGame) { attachmentName = mp.game.joaat(attachmentName); } - let entity = game.players.local; - let e = game.attachments.get(entity); + let entity = mp.players.local; - if (!e.__attachments || e.__attachments.indexOf(attachmentName) === -1) { + if (!entity.__attachments || entity.__attachments.indexOf(attachmentName) === -1) { mp.events.callRemote("staticAttachments.Add", attachmentName.toString(36)); } }, @@ -192,10 +121,9 @@ export default function attachmentManager(game: IGame) { attachmentName = mp.game.joaat(attachmentName); } - let entity = game.players.local; - let e = game.attachments.get(entity); + let entity = mp.players.local; - if (e.__attachments && e.__attachments.indexOf(attachmentName) !== -1) { + if (entity.__attachments && entity.__attachments.indexOf(attachmentName) !== -1) { mp.events.callRemote("staticAttachments.Remove", attachmentName.toString(36)); } }, @@ -205,160 +133,71 @@ export default function attachmentManager(game: IGame) { } }; - mp.events.add("entityStreamIn", (entityRage) => { - if (entityRage.type === "player" || entityRage.type === "vehicle") { - let entity; + mp.events.add("entityStreamIn", (entity) => { + if (entity.__attMgrData) { + const { targetEntity, bone, offset, rotation } = entity.__attMgrData; - if (entityRage.type === "player") { - entity = game.players.at(entityRage.remoteId); - } else if (entityRage.type === "vehicle") { - entity = game.vehicles.at(entityRage.remoteId); - } + entity.attachTo( + targetEntity, bone, + offset.x, offset.y, offset.z, + rotation.x, rotation.y, rotation.z, + false, false, false, false, 2, true + ); + } - if (entityRage.tye === "object") { //if is object - game.wait(200); - - mp.gui.chat.push("object streamed"); - entity = game.objects.at(entityRage.remoteId); - - game.wait(200); - mp.gui.chat.push("object try get data"); - game.wait(200); - - - const { targetEntity, bone, offset, rotation } = entity.__attachmentData; - game.wait(200); - -+ - mp.gui.chat.push(targetEntity + "," + bone + "," + offset + "," + rotation); - game.wait(200); - - - entity.attachTo( - targetEntity, bone, - offset.x, offset.y, offset.z, - rotation.x, rotation.y, rotation.z, - false, false, false, false, 2, true - ); - - - return; - } - - let e = game.attachments.get(entity); //if player or vehicle - if (e != null) { - if (e.__attachments) { - attachmentMngr.initFor(entityRage); - } - } + if (entity.__attachments) { + attachmentMngr.initFor(entity); } }); - mp.events.add("entityStreamOut", (entityRage) => { - if (entityRage == mp.players.local.vehicle) { - return; - } - if (entityRage.type === "player" || entityRage.type === "vehicle") { - let e = game.attachments.at(entityRage.remoteId); - - if (e != null) { - if (e.__attachmentObjects) { - //game.wait(2500); - attachmentMngr.shutdownFor(entityRage); - } - } + mp.events.add("entityStreamOut", (entity) => { + if (entity.__attachmentObjects) { + attachmentMngr.shutdownFor(entity); } }); - mp.events.addDataHandler("attachmentsData", (entityRage, data) => { - let newAttachments = (data != null) ? data.split('|').map(att => parseInt(att, 36)) : []; + mp.events.addDataHandler("attachmentsData", (entity, data) => { + let newAttachments = (data.length > 0) ? data.split('|').map(att => parseInt(att, 36)) : []; - if (entityRage.handle !== 0) { - let entity; - if (entityRage.type === "player") { - entity = game.players.at(entityRage.remoteId); - } else if (entityRage.type === "vehicle") { - entity = game.vehicles.at(entityRage.remoteId); - } - let e = game.attachments.get(entity); - if (e == null) { - let __attachments = []; - let __attachmentObjects = []; - e = game.attachments.set(entity, __attachments, __attachmentObjects); - } - - let oldAttachments = e.__attachments; + if (entity.handle !== 0) { + let oldAttachments = entity.__attachments; if (!oldAttachments) { oldAttachments = []; - e.__attachmentObjects = []; + entity.__attachmentObjects = {}; } // process outdated first - for (let attachment of oldAttachments.keys()) { - var obj = oldAttachments[attachment]; - if (newAttachments.indexOf(obj) === -1) { - attachmentMngr.removeFor(entityRage, obj); + for (let attachment of oldAttachments) { + if (newAttachments.indexOf(attachment) === -1) { + attachmentMngr.removeFor(entity, attachment); } } // then new attachments for (let attachment of newAttachments) { if (oldAttachments.indexOf(attachment) === -1) { - attachmentMngr.addFor(entityRage, attachment); + attachmentMngr.addFor(entity, attachment); } } - e.__attachments = newAttachments; } + + entity.__attachments = newAttachments; }); function InitAttachmentsOnJoin() { - game.players.forEach(_player => { - let player = mp.players.at(_player.remoteId); - - if (!player) { - return; - } - - let e = game.attachments.get(_player); - if (e == null) { - let __attachments = []; - let __attachmentObjects = []; - e = game.attachments.set(_player, __attachments, __attachmentObjects); - } - let data = player.getVariable("attachmentsData"); + mp.players.forEach(_player => { + let data = _player.getVariable("attachmentsData"); if (data && data.length > 0) { let atts = data.split('|').map(att => parseInt(att, 36)); - e.__attachments = atts; - e.__attachmentObjects = []; + _player.__attachments = atts; + _player.__attachmentObjects = {}; } }); - /* - game.vehicles.forEach(_veh => { - let vehicle = mp.vehicles.at(_veh.remoteId); - - if (!vehicle) { - return; - } - - let e = game.attachments.get(_veh); - if (e == null) { - let __attachments = []; - let __attachmentObjects = []; - e = game.attachments.set(_veh, __attachments, __attachmentObjects); - } - let data = vehicle.getVariable("attachmentsData"); - - if (data && data.length > 0) { - let atts = data.split('|').map(att => parseInt(att, 36)); - e.__attachments = atts; - e.__attachmentObjects = []; - } - }); - */ } - mp.events.add("playerReady", () => { //player finished doenloading assets from server. + + mp.events.add("playerReady", () => { InitAttachmentsOnJoin(); }); } \ No newline at end of file