export default function animationSync() { mp.events.add("SERVER:LoadAnimations", () => { animationSync.register("Cuffed", "mp_arresting", "idle", true, true, 0); animationSync.register("ArrestCop", "mp_arrest_paired", "cop_p2_back_right", false, false, 0); animationSync.register("ArrestCrook", "mp_arrest_paired", "crook_p2_back_right", false, false, 0); }); const animationSync = { animations: [], playAnim: function (entity, _id) { if (this.animations.hasOwnProperty(_id)) { let currentAnim = this.animations[_id]; let { id, name, animDict, animName, playOnStream, loop, flag } = currentAnim; mp.gui.chat.push("load anim dict"); mp.game.wait(100); loadAnimDict(animDict, function () { mp.players.exists(entity) && 0 !== entity.handle && entity.taskPlayAnim(animDict, animName, 1, 0, -1, parseInt(flag), 1, !1, !1, !1) }); entity.animationData = { name: name, playOnStream: playOnStream }; } }, stopAnim: function (entity) { mp.gui.chat.push("in StopAnim"); mp.game.wait(100); if (!entity.animationData) return; var currAnim = this.animations.find(anim => anim.name == entity.animationData.name); if (currAnim) { let { id, name, animDict, animName, playOnStream, loop, flag } = currAnim; entity.stopAnimTask(animDict, animName, 3); entity.animationData = null; } }, register: function (name, animDict, animName, playOnStream, loop, flag) { let id = mp.game.joaat(name); if (!this.animations.hasOwnProperty(id)) { this.animations[id] = { id: id, name: name, animDict: animDict, animName: animName, playOnStream: playOnStream, loop: loop, flag: flag }; } else { mp.game.graphics.notify("Animation Sync Error: ~r~Duplicate Entry"); } } }; mp.events.add("entityStreamIn", (entity) => { if (entity.type === "player" && entity.animationData) { if (!entity.animationData.playOnStream) return; animationSync.playAnim(entity, entity.animationData.name); } }); mp.events.addDataHandler("AnimationData", (entity, string) => { mp.gui.chat.push("inData Handler"); mp.game.wait(100); animationSync.stopAnim(entity); mp.gui.chat.push("stopAnim done"); mp.game.wait(100); let animData = animationSync.animations.find(anim => anim.name == string); if (!animData) return; mp.gui.chat.push("anim Data found"); mp.game.wait(100); let { id, name, animDict, animName, playOnStream, loop, flag } = animData; entity.animationData = { name: name, playOnStream: playOnStream }; animationSync.playAnim(entity, id) }); function loadAnimDict(animDict, callback) { if (mp.game.streaming.hasAnimDictLoaded(animDict)) return void callback(); mp.game.streaming.requestAnimDict(animDict); let c = setInterval(function () { mp.game.streaming.hasAnimDictLoaded(animDict) && (clearInterval(c), callback()) }, 100) } }