// =========================================================================== // Asshat-Gaming Roleplay // https://github.com/VortrexFTW/gtac_asshat_rp // Copyright (c) 2021 Asshat-Gaming (https://asshatgaming.com) // =========================================================================== // FILE: native.js // DESC: Provides util funcs for native wrapping // TYPE: Shared (JavaScript) // =========================================================================== "use strict"; setErrorMode(RESOURCEERRORMODE_STRICT); // =========================================================================== function and(var1, var2) { return (var1 && var2); } // =========================================================================== function or(var1, var2) { return (var1 || var2); } // =========================================================================== function not(var1) { return !var1; } // =========================================================================== function bitAnd(var1, var2) { return var1 & var2; } // =========================================================================== function bitOr(var1, var2) { return var1 | var2; } // =========================================================================== function bitXor(var1, var2) { return var1 ^ var2; } // =========================================================================== function bitNot(var1) { return ~var1; } // =========================================================================== function bitLeftShift(var1, var2) { return var1 << var2; } // =========================================================================== function bitRightShift(var1, var2) { return var1 >> var2; } // =========================================================================== function greaterThan(var1, var2) { return var1 > var2; } // =========================================================================== function lessThan(var1, var2) { return (var1 < var2); } // =========================================================================== function greaterThanOrEqualTo(var1, var2) { return (var1 >= var2); } // =========================================================================== function lessThanOrEqualTo(var1, var2) { return (var1 <= var2); } // =========================================================================== function equals(var1, var2) { return (var1 == var2); } // =========================================================================== function modulo(var1, var2) { return var1 % var2; } // =========================================================================== function add(...args) { return args.reduce((acc, a) => { return acc + a; }, 0); } // =========================================================================== function subtract(...args) { return args.reduce((acc, a) => { return acc - a; }, 0); } // =========================================================================== function multiply(...args) { return args.reduce((acc, a) => { return acc * a; }, 0); } // =========================================================================== function divide(...args) { return args.reduce((acc, a) => { return acc / a; }, 0); } // =========================================================================== function toArray(...args) { return args; } // =========================================================================== function toInteger(val) { return Number(val); } // =========================================================================== function toFloat(val, fixed = 2) { return parseFloat((val).toFixed(fixed)); } // =========================================================================== function toString(val) { return String(val); } // =========================================================================== function toVector3(x, y, z) { return new Vec3(x, y, z); } // =========================================================================== function toVector2(x, y) { return new Vec2(x, y); } // =========================================================================== function toUpperCase(val) { return String(val).toUpperCase(); } // =========================================================================== function toLowerCase(val) { return String(val).toLowerCase(); } // =========================================================================== function isNull(val) { if(val == null) { return true; } if(typeof val === "undefined") { return true; } return false; } // =========================================================================== function getEntityData(entity, dataName) { if(entity != null) { if(entity.getData != null) { return entity.getData(dataName); } } return null; } // =========================================================================== function setEntityData(entity, dataName, dataValue, syncToClients = true) { if(entity != null) { if(!isNull(server)) { return entity.setData(dataName, dataValue, syncToClients); } else { return entity.setData(dataName, dataValue); } } } // =========================================================================== function removeEntityData(entity, dataName) { if(entity != null) { return entity.removeData(dataName); } return null; } // =========================================================================== function doesEntityDataExist(entity, dataName) { if(entity != null) { return (entity.getData(dataName) != null); } return null; } // =========================================================================== function getDistance(vec1, vec2) { if(isNull(vec1) || isNull(vec2)) { return false; } return vec1.distance(vec2); } // =========================================================================== function isConsole(client) { if(client == null) { return false; } return client.console; } // =========================================================================== function logToConsole(tempLogLevel, text) { if((logLevel & tempLogLevel) || logLevel == LOG_ALL) { if(tempLogLevel == LOG_ERROR) { console.error(text); return true; } else if(tempLogLevel == LOG_WARN) { console.warn(text); return true; } else { console.log(text); return true; } } return false; } // =========================================================================== function isSamePlayer(client1, client2) { return (client1 == client2); } // =========================================================================== function getClientFromIndex(index) { let clients = getClients(); for(let i in clients) { if(clients[i].index == index) { return clients[i]; } } } // =========================================================================== function getConsoleClient() { let clients = getClients(); for(let i in clients) { if(isConsole(clients[i])) { return clients[i]; } } } // =========================================================================== function getPlayerFromParams(params) { let clients = getClients(); if(isNaN(params)) { for(let i in clients) { if(!clients[i].console) { if(toLowerCase(clients[i].name).indexOf(toLowerCase(params)) != -1) { return clients[i]; } if(toLowerCase(getCharacterFullName(clients[i])).indexOf(toLowerCase(params)) != -1) { return clients[i]; } } } } else { if(typeof clients[toInteger(params)] != "undefined") { return clients[toInteger(params)]; } } return false; } // =========================================================================== function getPosToRightOfPos(pos, angle, distance) { let x = (pos.x+((Math.cos((-angle+1.57)+(Math.PI/2)))*distance)); let y = (pos.y+((Math.sin((-angle+1.57)+(Math.PI/2)))*distance)); let rightPos = toVector3(x, y, pos.z); return rightPos; } // =========================================================================== function getPosToLeftOfPos(pos, angle, distance) { let x = (pos.x+((Math.cos((angle+1.57)+(Math.PI/2)))*distance)); let y = (pos.y+((Math.sin((angle+1.57)+(Math.PI/2)))*distance)); let leftPos = toVector3(x, y, pos.z); return leftPos; } // =========================================================================== function getPosInFrontOfPos(pos, angle, distance) { let x = (pos.x+((Math.cos(angle+(Math.PI/2)))*distance)); let y = (pos.y+((Math.sin(angle+(Math.PI/2)))*distance)); let z = pos.z; return toVector3(x, y, z); } // =========================================================================== function getPosBehindPos(pos, angle, distance) { let x = (pos.x+((Math.cos(angle-(Math.PI/2)))*distance)); let y = (pos.y+((Math.sin(angle-(Math.PI/2)))*distance)); let z = pos.z; return toVector3(x,y,z); } // =========================================================================== function getPosAbovePos(pos, distance) { return toVector3(pos.x, pos.y, pos.z+distance); } // =========================================================================== function getPosBelowPos(pos, distance) { return toVector3(pos.x, pos.y, pos.z-distance); } // =========================================================================== function applyOffsetToPos(position, position2) { return toVector3(position.x+position2.x, position.y+position2.y, position.z+position2.z); } // =========================================================================== function getRandom(min, max) { return Math.floor(Math.random() * (toInteger(max) - toInteger(min) + 1)) + toInteger(min) } // =========================================================================== function getArrayOfElementId(elements) { let tempArray = []; for(let i in elements) { tempArray.push(elements[i].id); } return tempArray; } // =========================================================================== function Enum(constantsList) { let tempTable = {}; for(let i in constantsList) { tempTable[constantsList[i]] = i; } return tempTable; } // =========================================================================== function getSyncerFromId(syncerId) { let clients = getClients(); return clients[syncerId]; } // =========================================================================== function getGame() { if(isServerScript()) { return server.game; } else { return gta.game; } } // =========================================================================== function isServerScript() { return (typeof server != "undefined"); } // =========================================================================== function doesGameHaveSnow(gameId) { return (getGame() != GAME_GTA_IV); } // =========================================================================== function isGTAIV() { return (getGame() == GAME_GTA_IV); } // =========================================================================== function arrayBufferToString(arrayBuffer) { return String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)); } // =========================================================================== function vec3ToVec2(pos) { return toVector2(pos[0], pos[1]); } // =========================================================================== function vec2ToVec3(pos, z) { return toVector3(pos[0], pos[1], z); } // =========================================================================== function degToRad(deg) { return deg * Math.PI / 180; } // =========================================================================== function radToDeg(rad) { return rad * 180 / Math.PI; } // =========================================================================== function getHeadingFromPosToPos(pos1, pos2) { let x = pos2.x-pos1.x; let y = pos2.y-pos1.y; let rad = Math.atan2(y, x); let deg = radToDeg(rad); deg -= 90; deg = deg % 360; return degToRad(deg); } // =========================================================================== function getAngleInCircleFromCenter(center, total, current) { let gap = 360 / total; let deg = Math.floor(gap*current); if(deg <= 0) { deg = 1; } else { if(deg >= 360) { deg = 359; } } return degToRad(deg); } // =========================================================================== function areParamsEmpty(params) { if(!params || params == "" || params.length == 0 || typeof params == "undefined") { return true; } return false; } // =========================================================================== function getParamsCount(params, delimiter = " ") { return params.split(delimiter).length; } // =========================================================================== function areThereEnoughParams(params, requiredAmount, delimiter = " ") { return (params.split(delimiter).length >= requiredAmount); } // =========================================================================== function getParams(params, delimiter, index) { return params.split(delimiter)[index]; } // =========================================================================== function packData(...args) { for(let i in args) { switch(args[i].constructor.name) { case "Vec3": let x = args[i].x.toFixed(2); let y = args[i].y.toFixed(2); let z = args[i].z.toFixed(2); x = x * 100; y = z * 100; z = z * 100; let result = combine(x, y, z); break; } } } // =========================================================================== function combine(a, b, c) { return toInteger((a << 20) | (b << 10) | c); } // =========================================================================== function getPercentage(num, per) { return (num/100)*per; } // ===========================================================================