Add AnimationSync

This commit is contained in:
2021-04-05 23:40:11 +02:00
parent e0d7dabe50
commit 8f225699c6
4 changed files with 196 additions and 62 deletions

View File

@@ -7,14 +7,13 @@
import { IGame } from './game';
import RageGame from './core/rage-mp/game';
var inMenu: boolean = false;
let globalData: IGlobalData = {
InTuning: false,
HideGui: false,
InChat: false,
LoggedIn: false,
LoggedIn: false,
get InMenu(): boolean {
return inMenu;
@@ -224,7 +223,6 @@ refuseCollector();
import PedCreator from './Ped/PedCreator';
PedCreator();
import attachmentManager from './util/attachmentMngr';
attachmentManager(game);
@@ -235,14 +233,12 @@ import bankMenuHandle from './Interaction/bankmenu';
import InputHelper from './inputhelper';
bankMenuHandle(globalData);
import ahelp from './Gui/ahelp';
ahelp(globalData);
import Introduction from './Gui/introduction';
Introduction(globalData);
import userhelp from './Gui/userhelp';
userhelp(globalData);
@@ -252,6 +248,9 @@ drivingschool(globalData);
import gangwarHandle from './util/Gangwar';
gangwarHandle(globalData);
import animationSync from './util/animationSync';
animationSync();
require('./Gui/policedepartment');
require('./Gui/helptext');
@@ -262,6 +261,4 @@ interface VehicleData {
export {
VehicleData
}
}

View File

@@ -0,0 +1,85 @@
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;
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: PlayerMp) {
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: PlayerMp, string) => {
let data = string ? string : "";
animationSync.stopAnim(entity);
let animData = animationSync.animations.find(anim => anim.name == data);
if (!animData)
return;
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)
}
}