mirror of
https://github.com/iDisaster/GTAConnected.git
synced 2026-03-14 20:31:48 +00:00
Add files via upload
This commit is contained in:
508
Trident/player.js
Normal file
508
Trident/player.js
Normal file
@@ -0,0 +1,508 @@
|
||||
/**
|
||||
* MD TRIDENT - Player Options Module
|
||||
* GTAConnected Port for GTA IV
|
||||
*/
|
||||
|
||||
// ============================================================================
|
||||
// PLAYER OPTIONS STATE
|
||||
// ============================================================================
|
||||
|
||||
let playerOptions = {
|
||||
godmode: false,
|
||||
neverWanted: false,
|
||||
infiniteAmmo: false,
|
||||
superRun: false,
|
||||
superJump: false,
|
||||
superPunch: false,
|
||||
invisible: false,
|
||||
flyMode: false,
|
||||
inferno: false,
|
||||
forceField: false,
|
||||
juggernaut: false,
|
||||
rapidFire: false,
|
||||
autoAim: false,
|
||||
gravity: true,
|
||||
slowMotion: false
|
||||
};
|
||||
|
||||
// Fly mode state
|
||||
let flyModeState = {
|
||||
active: false,
|
||||
camera: null,
|
||||
pitch: 0,
|
||||
speed: 1.0
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// PLAYER MENU ITEMS
|
||||
// ============================================================================
|
||||
|
||||
function getPlayerMenuItems() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
return [
|
||||
createMenuItem("~~ PLAYER PROTECTION ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("God Mode", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.godmode,
|
||||
action: toggleGodMode
|
||||
}),
|
||||
createMenuItem("Juggernaut (Auto Health/Armor)", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.juggernaut,
|
||||
action: toggleJuggernaut
|
||||
}),
|
||||
createMenuItem("Never Wanted", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.neverWanted,
|
||||
action: toggleNeverWanted
|
||||
}),
|
||||
|
||||
createMenuItem("~~ PLAYER ABILITIES ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("Super Run", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.superRun,
|
||||
action: toggleSuperRun
|
||||
}),
|
||||
createMenuItem("Super Jump", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.superJump,
|
||||
action: toggleSuperJump
|
||||
}),
|
||||
createMenuItem("Super Punch", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.superPunch,
|
||||
action: toggleSuperPunch
|
||||
}),
|
||||
createMenuItem("Fly Mode", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.flyMode,
|
||||
action: toggleFlyMode
|
||||
}),
|
||||
|
||||
createMenuItem("~~ PLAYER EFFECTS ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("Invisible", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.invisible,
|
||||
action: toggleInvisible
|
||||
}),
|
||||
createMenuItem("Inferno Mode", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.inferno,
|
||||
action: toggleInferno
|
||||
}),
|
||||
createMenuItem("Force Field", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.forceField,
|
||||
action: toggleForceField
|
||||
}),
|
||||
|
||||
createMenuItem("~~ PLAYER PHYSICS ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("Normal Gravity", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.gravity,
|
||||
action: toggleGravity
|
||||
}),
|
||||
createMenuItem("Slow Motion", ITEM_TYPE.BOOL, {
|
||||
boolState: playerOptions.slowMotion,
|
||||
action: toggleSlowMotion
|
||||
}),
|
||||
|
||||
createMenuItem("~~ PLAYER ACTIONS ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("Give Health", ITEM_TYPE.FUNCTION, { action: giveHealth }),
|
||||
createMenuItem("Give Armor", ITEM_TYPE.FUNCTION, { action: giveArmor }),
|
||||
createMenuItem("Give All Weapons", ITEM_TYPE.FUNCTION, { action: giveAllWeapons }),
|
||||
createMenuItem("Remove All Weapons", ITEM_TYPE.FUNCTION, { action: removeAllWeapons }),
|
||||
createMenuItem("Spawn Money", ITEM_TYPE.FUNCTION, { action: spawnMoney }),
|
||||
createMenuItem("Fix Player", ITEM_TYPE.FUNCTION, { action: fixPlayer }),
|
||||
createMenuItem("Change to Niko", ITEM_TYPE.FUNCTION, { action: changeToNiko }),
|
||||
createMenuItem("Explode Self", ITEM_TYPE.FUNCTION, { action: explodeSelf }),
|
||||
createMenuItem("Resurrect", ITEM_TYPE.FUNCTION, { action: resurrectPlayer }),
|
||||
|
||||
createMenuItem("~~ WANTED LEVEL ~~", ITEM_TYPE.JUMPOVER),
|
||||
createMenuItem("Set Wanted Level", ITEM_TYPE.VALUE_NUM, {
|
||||
value: 0,
|
||||
minValue: 0,
|
||||
maxValue: 6,
|
||||
action: setWantedLevel
|
||||
}),
|
||||
createMenuItem("Clear Wanted Level", ITEM_TYPE.FUNCTION, { action: clearWantedLevel })
|
||||
];
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// TOGGLE FUNCTIONS
|
||||
// ============================================================================
|
||||
|
||||
function toggleGodMode(state) {
|
||||
playerOptions.godmode = state;
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
natives.SET_CHAR_INVINCIBLE(playerPed, state);
|
||||
natives.SET_PLAYER_NEVER_GETS_TIRED(playerId, state);
|
||||
natives.SET_PLAYER_FAST_RELOAD(playerId, state);
|
||||
natives.SET_CHAR_NEVER_TARGETTED(playerPed, state);
|
||||
natives.ENABLE_MAX_AMMO_CAP(!state);
|
||||
|
||||
showNotification(state ? "~g~God Mode ~s~ON" : "~r~God Mode ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleJuggernaut(state) {
|
||||
playerOptions.juggernaut = state;
|
||||
showNotification(state ? "~g~Juggernaut ~s~ON" : "~r~Juggernaut ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleNeverWanted(state) {
|
||||
playerOptions.neverWanted = state;
|
||||
if (state) {
|
||||
natives.CLEAR_WANTED_LEVEL(natives.GET_PLAYER_ID());
|
||||
}
|
||||
showNotification(state ? "~g~Never Wanted ~s~ON" : "~r~Never Wanted ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleSuperRun(state) {
|
||||
playerOptions.superRun = state;
|
||||
showNotification(state ? "~g~Super Run ~s~ON (Hold LB/RB + A)" : "~r~Super Run ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleSuperJump(state) {
|
||||
playerOptions.superJump = state;
|
||||
showNotification(state ? "~g~Super Jump ~s~ON (Hold LB/RB + X)" : "~r~Super Jump ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleSuperPunch(state) {
|
||||
playerOptions.superPunch = state;
|
||||
showNotification(state ? "~g~Super Punch ~s~ON (Hold LB + B)" : "~r~Super Punch ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleFlyMode(state) {
|
||||
playerOptions.flyMode = state;
|
||||
flyModeState.active = state;
|
||||
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
if (state) {
|
||||
// Create fly mode camera
|
||||
flyModeState.camera = natives.CREATE_CAM(14);
|
||||
natives.SET_CAM_ACTIVE(flyModeState.camera, true);
|
||||
natives.SET_CAM_PROPAGATE(flyModeState.camera, true);
|
||||
natives.ACTIVATE_SCRIPTED_CAMS(true, true);
|
||||
natives.ATTACH_CAM_TO_PED(flyModeState.camera, playerPed);
|
||||
natives.POINT_CAM_AT_PED(flyModeState.camera, playerPed);
|
||||
flyModeState.pitch = 0;
|
||||
showNotification("~g~Fly Mode ~s~ON");
|
||||
} else {
|
||||
// Destroy fly mode camera
|
||||
if (flyModeState.camera) {
|
||||
natives.SET_CAM_ACTIVE(flyModeState.camera, false);
|
||||
natives.SET_CAM_PROPAGATE(flyModeState.camera, false);
|
||||
natives.ACTIVATE_SCRIPTED_CAMS(false, false);
|
||||
natives.DESTROY_CAM(flyModeState.camera);
|
||||
flyModeState.camera = null;
|
||||
}
|
||||
natives.FREEZE_CHAR_POSITION(playerPed, false);
|
||||
showNotification("~r~Fly Mode ~s~OFF");
|
||||
}
|
||||
}
|
||||
|
||||
function toggleInvisible(state) {
|
||||
playerOptions.invisible = state;
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
natives.SET_CHAR_VISIBLE(playerPed, !state);
|
||||
showNotification(state ? "~g~Invisible ~s~ON" : "~r~Invisible ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleInferno(state) {
|
||||
playerOptions.inferno = state;
|
||||
showNotification(state ? "~g~Inferno Mode ~s~ON" : "~r~Inferno Mode ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleForceField(state) {
|
||||
playerOptions.forceField = state;
|
||||
if (state && !playerOptions.godmode) {
|
||||
toggleGodMode(true);
|
||||
showNotification("~y~God Mode auto-enabled for Force Field");
|
||||
}
|
||||
showNotification(state ? "~g~Force Field ~s~ON" : "~r~Force Field ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleGravity(state) {
|
||||
playerOptions.gravity = state;
|
||||
natives.SET_GRAVITY_OFF(!state);
|
||||
showNotification(state ? "~g~Gravity ~s~ON" : "~r~Gravity ~s~OFF");
|
||||
}
|
||||
|
||||
function toggleSlowMotion(state) {
|
||||
playerOptions.slowMotion = state;
|
||||
natives.SET_TIME_SCALE(state ? 0.3 : 1.0);
|
||||
showNotification(state ? "~g~Slow Motion ~s~ON" : "~r~Slow Motion ~s~OFF");
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// ACTION FUNCTIONS
|
||||
// ============================================================================
|
||||
|
||||
function giveHealth() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
natives.SET_CHAR_HEALTH(playerPed, 200);
|
||||
showNotification("~g~Health restored!");
|
||||
}
|
||||
|
||||
function giveArmor() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
natives.ADD_ARMOUR_TO_CHAR(playerPed, 100);
|
||||
showNotification("~g~Armor added!");
|
||||
}
|
||||
|
||||
function giveAllWeapons() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
let episode = natives.GET_CURRENT_EPISODE();
|
||||
natives.GIVE_EPISODIC_WEAPONS_TO_CHAR(playerPed, episode);
|
||||
showNotification("~g~All weapons given!");
|
||||
}
|
||||
|
||||
function removeAllWeapons() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
natives.REMOVE_ALL_CHAR_WEAPONS(playerPed);
|
||||
showNotification("~r~All weapons removed!");
|
||||
}
|
||||
|
||||
function spawnMoney() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
for (let i = 0; i < 4; i++) {
|
||||
natives.GIVE_CASH_PICKUP_TO_CHAR(playerPed, 10000);
|
||||
}
|
||||
showNotification("~g~Money spawned around you!");
|
||||
}
|
||||
|
||||
function fixPlayer() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
natives.SET_CHAR_HEALTH(playerPed, 200);
|
||||
natives.ADD_ARMOUR_TO_CHAR(playerPed, 100);
|
||||
natives.CLEAR_CHAR_TASKS(playerPed);
|
||||
natives.CLEAR_CHAR_TASKS_IMMEDIATELY(playerPed);
|
||||
|
||||
showNotification("~g~Player fixed!");
|
||||
}
|
||||
|
||||
function changeToNiko() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
// MODEL_PLAYER is Niko's model hash
|
||||
let nikoModel = natives.GET_HASH_KEY("PLAYER");
|
||||
natives.REQUEST_MODEL(nikoModel);
|
||||
|
||||
let attempts = 0;
|
||||
while (!natives.HAS_MODEL_LOADED(nikoModel) && attempts < 100) {
|
||||
natives.WAIT(10);
|
||||
attempts++;
|
||||
}
|
||||
|
||||
if (natives.HAS_MODEL_LOADED(nikoModel)) {
|
||||
natives.CHANGE_PLAYER_MODEL(playerId, nikoModel);
|
||||
natives.SET_CHAR_HEALTH(playerPed, 200);
|
||||
natives.ADD_ARMOUR_TO_CHAR(playerPed, 100);
|
||||
natives.MARK_MODEL_AS_NO_LONGER_NEEDED(nikoModel);
|
||||
showNotification("~g~Changed to Niko!");
|
||||
} else {
|
||||
showNotification("~r~Failed to load model!");
|
||||
}
|
||||
}
|
||||
|
||||
function explodeSelf() {
|
||||
let playerPed = natives.GET_PLAYER_PED(natives.GET_PLAYER_ID());
|
||||
let pos = natives.GET_CHAR_COORDINATES(playerPed);
|
||||
|
||||
natives.ADD_EXPLOSION(pos[0], pos[1], pos[2], 2, 10.0, true, false, 0.7);
|
||||
showNotification("~r~BOOM!");
|
||||
}
|
||||
|
||||
function resurrectPlayer() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
let pos = natives.GET_CHAR_COORDINATES(playerPed);
|
||||
|
||||
natives.RESURRECT_NETWORK_PLAYER(playerId, pos[0], pos[1], pos[2], 0);
|
||||
natives.SET_CHAR_HEALTH(playerPed, 200);
|
||||
showNotification("~g~Resurrected!");
|
||||
}
|
||||
|
||||
function setWantedLevel(level) {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
natives.ALTER_WANTED_LEVEL(playerId, level);
|
||||
natives.APPLY_WANTED_LEVEL_CHANGE_NOW(playerId);
|
||||
showNotification("~b~Wanted level set to: ~s~" + level);
|
||||
}
|
||||
|
||||
function clearWantedLevel() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
natives.CLEAR_WANTED_LEVEL(playerId);
|
||||
showNotification("~g~Wanted level cleared!");
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// PLAYER OPTIONS LOOP
|
||||
// ============================================================================
|
||||
|
||||
function playerOptionsLoop() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
if (!natives.DOES_CHAR_EXIST(playerPed)) return;
|
||||
|
||||
// God Mode maintenance
|
||||
if (playerOptions.godmode) {
|
||||
natives.SET_CHAR_INVINCIBLE(playerPed, true);
|
||||
}
|
||||
|
||||
// Juggernaut (auto health/armor)
|
||||
if (playerOptions.juggernaut) {
|
||||
let health = natives.GET_CHAR_HEALTH(playerPed);
|
||||
let armor = natives.GET_CHAR_ARMOUR(playerPed);
|
||||
|
||||
if (health < 200) natives.SET_CHAR_HEALTH(playerPed, 200);
|
||||
if (armor < 100) natives.ADD_ARMOUR_TO_CHAR(playerPed, 100 - armor);
|
||||
}
|
||||
|
||||
// Never Wanted
|
||||
if (playerOptions.neverWanted) {
|
||||
natives.CLEAR_WANTED_LEVEL(playerId);
|
||||
}
|
||||
|
||||
// Infinite Ammo
|
||||
if (playerOptions.infiniteAmmo && natives.IS_CHAR_SHOOTING(playerPed)) {
|
||||
let weapon = natives.GET_CURRENT_CHAR_WEAPON(playerPed);
|
||||
if (weapon !== 16 && weapon !== 17) { // Not grenade or molotov
|
||||
let maxAmmo = natives.GET_MAX_AMMO_IN_CLIP(playerPed, weapon);
|
||||
natives.SET_AMMO_IN_CLIP(playerPed, weapon, maxAmmo);
|
||||
}
|
||||
}
|
||||
|
||||
// Super Powers (only when not in vehicle)
|
||||
let inVehicle = natives.IS_CHAR_IN_ANY_CAR(playerPed);
|
||||
if (!inVehicle) {
|
||||
let lbPressed = natives.IS_BUTTON_PRESSED(0, 256); // LB
|
||||
let rbPressed = natives.IS_BUTTON_PRESSED(0, 512); // RB
|
||||
|
||||
// Super Run (LB/RB + A)
|
||||
if (playerOptions.superRun && (lbPressed || rbPressed) && natives.IS_BUTTON_PRESSED(0, 16)) {
|
||||
let force = lbPressed ? 100.0 : 10.0;
|
||||
natives.APPLY_FORCE_TO_PED(playerPed, true, 0.0, force, 0.0, 0.0, 0.0, 0.0, true, true, true, true);
|
||||
}
|
||||
|
||||
// Super Jump (LB/RB + X)
|
||||
if (playerOptions.superJump && (lbPressed || rbPressed) && natives.IS_BUTTON_PRESSED(0, 64)) {
|
||||
let upForce = lbPressed ? 11.0 : 50.0;
|
||||
let fwdForce = lbPressed ? 1.2 : 0.0;
|
||||
natives.APPLY_FORCE_TO_PED(playerPed, true, 0.0, fwdForce, upForce, 0.0, 0.0, 0.0, true, true, true, true);
|
||||
}
|
||||
|
||||
// Super Punch (LB + B with fist)
|
||||
if (playerOptions.superPunch && lbPressed && natives.IS_BUTTON_PRESSED(0, 32)) {
|
||||
let weapon = natives.GET_CURRENT_CHAR_WEAPON(playerPed);
|
||||
if (weapon === 0) { // Unarmed
|
||||
let offset = natives.GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS(playerPed, 0, 2, 0);
|
||||
natives.ADD_EXPLOSION(offset[0], offset[1], offset[2], 2, 10, false, true, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Inferno Mode
|
||||
if (playerOptions.inferno) {
|
||||
let pos = natives.GET_CHAR_COORDINATES(playerPed);
|
||||
natives.ADD_EXPLOSION(pos[0], pos[1], pos[2], 5, 7.5, true, false, 0.0);
|
||||
}
|
||||
|
||||
// Force Field
|
||||
if (playerOptions.forceField) {
|
||||
let pos = natives.GET_CHAR_COORDINATES(playerPed);
|
||||
natives.ADD_EXPLOSION(pos[0], pos[1], pos[2], 2, 10.0, false, true, 0.0);
|
||||
}
|
||||
|
||||
// Fly Mode
|
||||
if (flyModeState.active) {
|
||||
processFlyMode();
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// FLY MODE PROCESSING
|
||||
// ============================================================================
|
||||
|
||||
function processFlyMode() {
|
||||
let playerId = natives.GET_PLAYER_ID();
|
||||
let playerPed = natives.GET_PLAYER_PED(playerId);
|
||||
|
||||
if (!flyModeState.camera) return;
|
||||
|
||||
natives.FREEZE_CHAR_POSITION(playerPed, true);
|
||||
|
||||
let pos = natives.GET_CHAR_COORDINATES(playerPed);
|
||||
let heading = natives.GET_CHAR_HEADING(playerPed);
|
||||
|
||||
// Get analog stick input
|
||||
let sticks = natives.GET_POSITION_OF_ANALOGUE_STICKS(0);
|
||||
let leftX = sticks[0] || 0;
|
||||
let leftY = sticks[1] || 0;
|
||||
let rightX = sticks[2] || 0;
|
||||
let rightY = sticks[3] || 0;
|
||||
|
||||
// Adjust heading with right stick
|
||||
heading = heading - (rightX * 0.035);
|
||||
if (heading > 360) heading -= 360;
|
||||
if (heading < 0) heading += 360;
|
||||
|
||||
// Adjust pitch
|
||||
flyModeState.pitch = flyModeState.pitch - (rightY * 0.035);
|
||||
if (flyModeState.pitch < -70) flyModeState.pitch = -70;
|
||||
if (flyModeState.pitch > 70) flyModeState.pitch = 70;
|
||||
|
||||
// Speed modifiers
|
||||
let moveSpeed = 1.0;
|
||||
if (natives.IS_BUTTON_PRESSED(0, 512)) moveSpeed = 4.0; // RB - Fast
|
||||
if (natives.IS_BUTTON_PRESSED(0, 256)) moveSpeed = 0.25; // LB - Slow
|
||||
|
||||
// Calculate movement
|
||||
let moveTrig = (leftY * 0.0133) * Math.cos(flyModeState.pitch * Math.PI / 180);
|
||||
let newX = pos[0] + (moveSpeed * ((moveTrig * Math.sin(heading * Math.PI / 180)) + (leftX * 0.0133) * Math.cos(heading * Math.PI / 180)));
|
||||
let newY = pos[1] - (moveSpeed * ((moveTrig * Math.cos(heading * Math.PI / 180)) - (leftX * 0.0133) * Math.sin(heading * Math.PI / 180)));
|
||||
let newZ = pos[2] - (moveSpeed * ((leftY * 0.0133) * Math.sin(flyModeState.pitch * Math.PI / 180)));
|
||||
|
||||
// Height adjustment with triggers
|
||||
let lt = natives.GET_CONTROL_VALUE(0, 6); // LT
|
||||
let rt = natives.GET_CONTROL_VALUE(0, 5); // RT
|
||||
newZ = newZ + (moveSpeed * ((rt * 0.0025) - (lt * 0.0025)));
|
||||
|
||||
// Update position
|
||||
natives.SET_CHAR_COORDINATES_NO_OFFSET(playerPed, newX, newY, newZ);
|
||||
natives.SET_CHAR_HEADING(playerPed, heading);
|
||||
|
||||
// Update camera
|
||||
let camDistance = 4.0;
|
||||
let camOffsetTrig = camDistance * Math.cos((flyModeState.pitch - 18) * Math.PI / 180);
|
||||
let camOffsetX = camOffsetTrig * Math.sin(heading * Math.PI / 180);
|
||||
let camOffsetY = -camOffsetTrig * Math.cos(heading * Math.PI / 180);
|
||||
let camOffsetZ = -camDistance * Math.sin((flyModeState.pitch - 18) * Math.PI / 180);
|
||||
|
||||
natives.SET_CAM_ATTACH_OFFSET(flyModeState.camera, camOffsetX, camOffsetY, camOffsetZ);
|
||||
|
||||
// Exit fly mode with all shoulder buttons
|
||||
if (natives.IS_BUTTON_PRESSED(0, 256) && natives.IS_BUTTON_PRESSED(0, 512) &&
|
||||
natives.IS_BUTTON_PRESSED(0, 1024) && natives.IS_BUTTON_PRESSED(0, 2048)) {
|
||||
toggleFlyMode(false);
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// EVENT HANDLERS
|
||||
// ============================================================================
|
||||
|
||||
addEventHandler("OnProcess", function(event) {
|
||||
playerOptionsLoop();
|
||||
});
|
||||
|
||||
// ============================================================================
|
||||
// EXPORTS
|
||||
// ============================================================================
|
||||
|
||||
this.playerOptions = playerOptions;
|
||||
this.getPlayerMenuItems = getPlayerMenuItems;
|
||||
this.toggleGodMode = toggleGodMode;
|
||||
this.toggleNeverWanted = toggleNeverWanted;
|
||||
this.giveHealth = giveHealth;
|
||||
this.giveArmor = giveArmor;
|
||||
Reference in New Issue
Block a user