Bunch of fixes/changes
* Set client log level to info * Added element prop sync util * Added check to make sure veh upgrade was valid * Fixed incorrect acct settings being saved * Added help tip when using invalid anim * Fixed create biz cmd * Allow biz owners to set biz name * Allow biz owners to give biz to player or clan * Added biz clan rank cmd * Allow those with permission to lock/unlock biz & houses * Fix set biz interior * Allow players with permission to withdraw from biz till * Added utils to check if player has biz permissions for till/lock/lights * Added check if players are in same int/vw on talk/shout/whisper * Follow server civilians cvar when toggling ambience * Renamed some clan cmds to prefix with "clan" * Added vehlivery cmd * Set server log level to debug * Show veh owner info on enter * Sync body parts & props on IV * Add clan help in help cmd * Don't show values for melee weapons * Add IV support for some utils * Sync player ped fight style in SA * Added fightstyle cmd * Fix wrong job owner on vehinfo cmd * Return false on world label support util for IV
This commit is contained in:
@@ -27,7 +27,7 @@ let renderHotBar = true;
|
||||
let renderItemActionDelay = true;
|
||||
let renderInteriorLights = true;
|
||||
|
||||
let logLevel = LOG_ALL;
|
||||
let logLevel = LOG_INFO;
|
||||
|
||||
let weaponDamageEnabled = {};
|
||||
let weaponDamageEvent = {};
|
||||
|
||||
@@ -78,16 +78,13 @@ function addAllNetworkHandlers() {
|
||||
addNetworkHandler("vrr.veh.engine", toggleVehicleEngine);
|
||||
addNetworkHandler("vrr.veh.repair", repairVehicle);
|
||||
|
||||
addNetworkHandler("vrr.veh.sync", syncVehicleProperties);
|
||||
addNetworkHandler("vrr.civ.sync", syncCivilianProperties);
|
||||
addNetworkHandler("vrr.plr.sync", syncPlayerProperties);
|
||||
addNetworkHandler("vrr.obj.sync", syncObjectProperties);
|
||||
|
||||
addNetworkHandler("vrr.pedAnim", makePedPlayAnimation);
|
||||
addNetworkHandler("vrr.hideAllGUI", hideAllGUI);
|
||||
addNetworkHandler("vrr.gameScript", setGameScriptState);
|
||||
addNetworkHandler("vrr.clientInfo", serverRequestedClientInfo);
|
||||
addNetworkHandler("vrr.interiorLights", updateInteriorLightsState);
|
||||
|
||||
addNetworkHandler("vrr.syncElement", forceSyncElementProperties);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -278,4 +275,10 @@ function updateInteriorLightsState(state) {
|
||||
interiorLightsEnabled = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forceSyncElementProperties(elementId) {
|
||||
syncElementProperties(getElementFromId(elementId));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -98,7 +98,9 @@ function syncVehicleProperties(vehicle) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
||||
for(let i in upgrades) {
|
||||
vehicle.addUpgrade(upgrades[i]);
|
||||
if(upgrades[i] != 0) {
|
||||
vehicle.addUpgrade(upgrades[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -548,7 +548,7 @@ function saveAccountToDatabase(accountData) {
|
||||
freeDatabaseQuery(dbQuery);
|
||||
|
||||
let data2 = [
|
||||
["acct_svr_settings", accountData.flags.settings],
|
||||
["acct_svr_settings", accountData.settings],
|
||||
["acct_svr_staff_title", safeStaffTitle],
|
||||
["acct_svr_staff_flags", accountData.flags.admin],
|
||||
["acct_svr_mod_flags", accountData.flags.moderation],
|
||||
@@ -687,7 +687,7 @@ function checkLogin(client, password) {
|
||||
if(isPlayerLoggedIn(client)) {
|
||||
logToConsole(LOG_WARN, `[VRR.Account] ${getPlayerDisplayForConsole(client)} attempted to login but is already logged in`);
|
||||
if(getServerConfig().useGUI && doesPlayerHaveGUIEnabled(client)) {
|
||||
sendPlayerLoginSuccess(client);
|
||||
showPlayerLoginSuccessGUI(client);
|
||||
} else {
|
||||
messagePlayerError(client, "You are already logged in!");
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ function playPlayerAnimationCommand(command, params, client) {
|
||||
|
||||
if(!animationSlot) {
|
||||
messagePlayerError(client, "That animation doesn't exist!");
|
||||
messagePlayerInfo(client, "Use /animlist to see a list of valid animations");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -142,16 +142,16 @@ function loadBusinessGameScriptsFromDatabase(businessId) {
|
||||
|
||||
function createBusinessCommand(command, params, client) {
|
||||
let tempBusinessData = createBusiness(params, getPlayerPosition(client), toVector3(0.0, 0.0, 0.0), getGameConfig().pickupModels[getServerGame()].business, getGameConfig().blipSprites[getServerGame()].business, getPlayerInterior(client), getPlayerDimension(client));
|
||||
getServerData().businesses.push(tempBusinessData);
|
||||
tempBusinessData.needsSaved = true;
|
||||
let businessId = getServerData().businesses.push(tempBusinessData);
|
||||
setAllBusinessIndexes();
|
||||
|
||||
saveAllBusinessesToDatabase();
|
||||
|
||||
createBusinessEntrancePickup(getServerData().businesses.length-1);
|
||||
createBusinessExitPickup(getServerData().businesses.length-1);
|
||||
createBusinessEntranceBlip(getServerData().businesses.length-1);
|
||||
createBusinessExitBlip(getServerData().businesses.length-1);
|
||||
|
||||
saveBusinessToDatabase(getServerData().businesses.length-1);
|
||||
createBusinessEntrancePickup(businessId-1);
|
||||
createBusinessExitPickup(businessId-1);
|
||||
createBusinessEntranceBlip(businessId-1);
|
||||
createBusinessExitBlip(businessId-1);
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created business ${getInlineChatColourByType("businessBlue")}${tempBusinessData.name}`);
|
||||
}
|
||||
@@ -243,6 +243,13 @@ function setBusinessNameCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
messagePlayerError(client, "You don't own this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let oldBusinessName = getBusinessData(businessId).name;
|
||||
getBusinessData(businessId).name = newBusinessName;
|
||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.name", getBusinessData(businessId).name, true);
|
||||
@@ -265,30 +272,95 @@ function setBusinessOwnerCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
messagePlayerError(client, "You don't own this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_PLAYER;
|
||||
getBusinessData(businessId).ownerId = getServerData().clients[newBusinessOwner.index].accountData.databaseId;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}owner to ${getInlineChatColourByName("lightGrey")}${newBusinessOwner.name}`);
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}to ${getInlineChatColourByName("lightGrey")}${newBusinessOwner.name}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setBusinessClanCommand(command, params, client) {
|
||||
let clanId = getClanFromParams(params);
|
||||
let businessId = (isPlayerInAnyBusiness(client)) ? getPlayerBusiness(client) : getClosestBusinessEntrance(getPlayerPosition(client));
|
||||
|
||||
if(!getBusinessData(businessId)) {
|
||||
messagePlayerError(client, "Business not found!");
|
||||
messagePlayerError("Business not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanId = getPlayerClan(params);
|
||||
|
||||
if(!getClanData(clanId)) {
|
||||
messagePlayerError(client, "Clan not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
messagePlayerError(client, "You don't own this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_CLAN;
|
||||
getBusinessData(businessId).ownerId = getClanData(clanId).databaseId;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}owner to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan`);
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan!`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* This is a command handler function.
|
||||
*
|
||||
* @param {string} command - The command name used by the player
|
||||
* @param {string} params - The parameters/args string used with the command by the player
|
||||
* @param {Client} client - The client/player that used the command
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function setBusinessRankCommand(command, params, client) {
|
||||
let businessId = (isPlayerInAnyBusiness(client)) ? getPlayerBusiness(client) : getClosestBusinessEntrance(getPlayerPosition(client));
|
||||
|
||||
if(!getBusinessData(businessId)) {
|
||||
messagePlayerError("House not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanId = getPlayerClan(params);
|
||||
|
||||
if(!getClanData(clanId)) {
|
||||
messagePlayerError(client, "Clan not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanRankId = getClanRankFromParams(clanId, params);
|
||||
|
||||
if(!getClanRankData(clanId, clanRankId)) {
|
||||
messagePlayerError(client, "Clan rank not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageBusinesses"))) {
|
||||
messagePlayerError(client, "You can't set clan house ranks!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getClanRankData(clanId, clanRankId).level > getPlayerCurrentSubAccount(client).clanRank) {
|
||||
messagePlayerError(client, "That rank is above your level!");
|
||||
return false;
|
||||
}
|
||||
|
||||
getBusinessData(businessId).clanRank = getClanRankData(clanId, clanRankId).level;
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name}${getInlineChatColourByName("white")}'s clan rank to ${getInlineChatColourByType("clanOrange")}${getClanRankData(clanId, clanRankId).name} ${getInlineChatColourByName("white")}(level ${getClanRankData(clanId, clanRankId).level}) and above!`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -355,6 +427,13 @@ function lockUnlockBusinessCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(canPlayerLockUnlockBusiness(client, businessId)) {
|
||||
messagePlayerError(client, "You don't have keys to this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).locked = !getBusinessData(businessId).locked;
|
||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.locked", getBusinessData(businessId).locked, true);
|
||||
messagePlayerSuccess(client, `${getLockedUnlockedEmojiFromBool((getBusinessData(businessId).locked))} Business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}${getLockedUnlockedTextFromBool((getBusinessData(businessId).locked))}!`);
|
||||
@@ -379,6 +458,13 @@ function lockUnlockBusinessCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(canPlayerSetBusinessInteriorLights(client, businessId)) {
|
||||
messagePlayerError(client, "You don't have keys to this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).interiorLights = !getBusinessData(businessId).interiorLights;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
@@ -399,6 +485,13 @@ function setBusinessEntranceFeeCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(canPlayerSetBusinessEntranceFee(client, businessId)) {
|
||||
messagePlayerError(client, "You don't have keys to this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).entranceFee = entranceFee;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}entrance fee to [#AAAAAAA]$${entranceFee}`);
|
||||
}
|
||||
@@ -489,50 +582,37 @@ function setBusinessInteriorTypeCommand(command, params, client) {
|
||||
}
|
||||
|
||||
if(isNaN(typeParam)) {
|
||||
if(toLowerCase(typeParam) == "none") {
|
||||
removePlayersFromBusiness(businessId);
|
||||
let tempBusinessLocation = new serverClasses.businessLocationData(false);
|
||||
|
||||
getBusinessData(businessId).exitPosition = toVector3(0.0, 0.0, 0.0);
|
||||
getBusinessData(businessId).exitInterior = 0;
|
||||
if(toLowerCase(typeParam) == "none") {
|
||||
tempBusinessLocation.exitPosition = toVector3(0.0, 0.0, 0.0);
|
||||
tempBusinessLocation.exitDimension = 0;
|
||||
tempBusinessLocation.exitInterior = -1;
|
||||
getBusinessData(businessId).hasInterior = false;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}removed business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}interior`);
|
||||
|
||||
resetBusinessPickups();
|
||||
resetBusinessBlips();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(isNull(getGameConfig().interiorTemplates[getServerGame()][typeParam])) {
|
||||
messagePlayerError(client, "Invalid interior type! Use an interior type name or an existing business database ID");
|
||||
messagePlayerError(client, "Invalid interior type! Use an interior type name");
|
||||
messagePlayerInfo(client, `Interior Types: ${getInlineChatColourByName("lightGrey")}${Object.keys(getGameConfig().interiorTemplates[getServerGame()]).join(", ")}`)
|
||||
return false;
|
||||
}
|
||||
|
||||
removePlayersFromBusiness(businessId);
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}interior type to ${getInlineChatColourByName("lightGrey")}${toLowerCase(typeParam)}`);
|
||||
getBusinessData(businessId).exitPosition = getGameConfig().interiorTemplates[getServerGame()][typeParam].exitPosition;
|
||||
getBusinessData(businessId).exitInterior = getGameConfig().interiorTemplates[getServerGame()][typeParam].exitInterior;
|
||||
getBusinessData(businessId).exitPosition = getGameConfig().interiorTemplates[getServerGame()][typeParam][0];
|
||||
getBusinessData(businessId).exitInterior = getGameConfig().interiorTemplates[getServerGame()][typeParam][1];
|
||||
getBusinessData(businessId).exitDimension = getBusinessData(businessId).databaseId+getGlobalConfig().businessDimensionStart;
|
||||
getBusinessData(businessId).hasInterior = true;
|
||||
|
||||
resetBusinessPickups();
|
||||
resetBusinessBlips();
|
||||
} else {
|
||||
if(!getBusinessData(businessId)) {
|
||||
messagePlayerError(client, "Business ID not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
removePlayersFromBusiness(businessId);
|
||||
getBusinessData(businessId).exitPosition = getBusinessData(businessId).exitPosition;
|
||||
getBusinessData(businessId).exitInterior = getBusinessData(businessId).exitInterior;
|
||||
getBusinessData(businessId).exitDimension = getBusinessData(businessId).databaseId+getGlobalConfig().businessDimensionStart;
|
||||
getBusinessData(businessId).hasInterior = true;
|
||||
|
||||
resetBusinessPickups();
|
||||
resetBusinessBlips();
|
||||
}
|
||||
|
||||
deleteHouseEntrancePickup(businessId);
|
||||
deleteHouseExitPickup(businessId);
|
||||
createHouseEntrancePickup(businessId);
|
||||
createHouseExitPickup(businessId);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}interior type to ${getInlineChatColourByName("lightGrey")}${toLowerCase(typeParam)}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -663,6 +743,13 @@ function withdrawFromBusinessCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
if(canPlayerWithdrawFromBusinessTill(client, businessId)) {
|
||||
messagePlayerError(client, "You don't have keys to this business!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).till < amount) {
|
||||
messagePlayerError(client, `Business ${getInlineChatColourByType("businessBlue")}${tempBusinessData.name} doesn't have that much money! Use /bizbalance.`);
|
||||
return false;
|
||||
@@ -915,6 +1002,18 @@ function getClosestBusinessEntrance(position) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getClosestBusinessExit(position) {
|
||||
let closest = 0;
|
||||
for(let i in getServerData().businesses) {
|
||||
if(getDistance(position, getServerData().businesses[i].exitPosition) <= getDistance(position, getServerData().businesses[closest].exitPosition)) {
|
||||
closest = i;
|
||||
}
|
||||
}
|
||||
return closest;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isPlayerInAnyBusiness(client) {
|
||||
if(doesEntityDataExist(client, "vrr.inBusiness")) {
|
||||
return true;
|
||||
@@ -1672,4 +1771,64 @@ function updateBusinessInteriorLightsForOccupants(businessId) {
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canPlayerWithdrawFromBusinessTill(client, businessId) {
|
||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_CLAN && getBusinessData(businessId).ownerId == getClanData(getPlayerClan(client)).databaseId) {
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canPlayerSetBusinessInteriorLights(client, businessId) {
|
||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_CLAN && getBusinessData(businessId).ownerId == getClanData(getPlayerClan(client)).databaseId) {
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canPlayerLockUnlockBusiness(client, businessId) {
|
||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_PLAYER && getBusinessData(businessId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getBusinessData(businessId).ownerType == VRR_BIZOWNER_CLAN && getBusinessData(businessId).ownerId == getClanData(getPlayerClan(client)).databaseId) {
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageBusinesses"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -130,9 +130,9 @@ function clanChatCommand(command, params, client) {
|
||||
function talkToNearbyPlayers(client, messageText) {
|
||||
let clients = getClientsInRange(getPlayerPosition(client), getGlobalConfig().talkDistance);
|
||||
for(let i in clients) {
|
||||
//if(clients[i] != client) {
|
||||
if(getPlayerInterior(client) == getPlayerInterior(clients[i] && getPlayerDimension(client) == getPlayerDimension(clients[i]))) {
|
||||
messagePlayerTalk(clients[i], client, messageText);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,9 +159,9 @@ function phoneIncomingToNearbyPlayers(client, messageText) {
|
||||
function whisperToNearbyPlayers(client, messageText) {
|
||||
let clients = getClientsInRange(getPlayerPosition(client), getGlobalConfig().talkDistance);
|
||||
for(let i in clients) {
|
||||
//if(clients[i] != client) {
|
||||
if(getPlayerInterior(client) == getPlayerInterior(clients[i] && getPlayerDimension(client) == getPlayerDimension(clients[i]))) {
|
||||
messagePlayerWhisper(clients[i], client, messageText);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,9 +170,9 @@ function whisperToNearbyPlayers(client, messageText) {
|
||||
function shoutToNearbyPlayers(client, messageText) {
|
||||
let clients = getClientsInRange(getPlayerPosition(client), getGlobalConfig().shoutDistance);
|
||||
for(let i in clients) {
|
||||
//if(clients[i].index != client.index) {
|
||||
if(getPlayerInterior(client) == getPlayerInterior(clients[i] && getPlayerDimension(client) == getPlayerDimension(clients[i]))) {
|
||||
messagePlayerShout(clients[i], client, messageText);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,9 +181,9 @@ function shoutToNearbyPlayers(client, messageText) {
|
||||
function doActionToNearbyPlayers(client, messageText) {
|
||||
let clients = getClientsInRange(getPlayerPosition(client), getGlobalConfig().doActionDistance);
|
||||
for(let i in clients) {
|
||||
//if(clients[i].index != client.index) {
|
||||
if(getPlayerInterior(client) == getPlayerInterior(clients[i] && getPlayerDimension(client) == getPlayerDimension(clients[i]))) {
|
||||
messagePlayerDoAction(clients[i], client, messageText);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,9 +192,9 @@ function doActionToNearbyPlayers(client, messageText) {
|
||||
function meActionToNearbyPlayers(client, messageText) {
|
||||
let clients = getClientsInRange(getPlayerPosition(client), getGlobalConfig().meActionDistance);
|
||||
for(let i in clients) {
|
||||
//if(clients[i].index != client.index) {
|
||||
if(getPlayerInterior(client) == getPlayerInterior(clients[i] && getPlayerDimension(client) == getPlayerDimension(clients[i]))) {
|
||||
messagePlayerMeAction(clients[i], client, messageText);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -202,6 +202,8 @@ function initClassTable() {
|
||||
|
||||
this.syncPosition = null;
|
||||
this.syncHeading = null;
|
||||
this.syncVehicle = null;
|
||||
this.syncVehicleSeat = null;
|
||||
|
||||
this.twoFactorAuthenticationState = VRR_2FA_STATE_NONE;
|
||||
this.twoFactorAuthenticationCode = 0;
|
||||
@@ -423,7 +425,6 @@ function initClassTable() {
|
||||
this.account = toInteger(dbAssoc["sacct_acct"]);
|
||||
this.skin = toInteger(dbAssoc["sacct_svr_skin"]);
|
||||
this.cash = toInteger(dbAssoc["sacct_cash"]);
|
||||
console.log(dbAssoc["sacct_pos_x"]);
|
||||
this.spawnPosition = toVector3(toFloat(dbAssoc["sacct_pos_x"]), toFloat(dbAssoc["sacct_pos_y"]), toFloat(dbAssoc["sacct_pos_z"]));
|
||||
this.spawnHeading = toFloat(dbAssoc["sacct_rot_z"]);
|
||||
this.lastLogin = toInteger(dbAssoc["sacct_when_lastlogin"]);
|
||||
|
||||
@@ -140,6 +140,10 @@ function showGameMessage(client, text, colour, duration) {
|
||||
// ===========================================================================
|
||||
|
||||
function enableCityAmbienceForPlayer(client, clearElements = false) {
|
||||
if(server.getCVar("civilians") == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Client] Setting ${getPlayerDisplayForConsole(client)}'s city ambience to ${toUpperCase(getOnOffFromBool(false))}`);
|
||||
triggerNetworkEvent("vrr.ambience", client, true);
|
||||
}
|
||||
@@ -147,6 +151,10 @@ function enableCityAmbienceForPlayer(client, clearElements = false) {
|
||||
// ===========================================================================
|
||||
|
||||
function disableCityAmbienceForPlayer(client, clearElements = false) {
|
||||
if(server.getCVar("civilians") == true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Client] Setting ${getPlayerDisplayForConsole(client)}'s city ambience to ${toUpperCase(getOnOffFromBool(false))}`);
|
||||
triggerNetworkEvent("vrr.ambience", client, false, clearElements);
|
||||
}
|
||||
@@ -966,4 +974,10 @@ function updateInteriorLightsForPlayer(client, state) {
|
||||
triggerNetworkEvent("vrr.interiorLights", client, state);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forcePlayerToSyncElementProperties(client, element) {
|
||||
triggerNetworkEvent("vrr.syncElement", client, element.id);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -97,6 +97,7 @@ function loadCommands() {
|
||||
commandData("bizitemprice", setBusinessItemSellPriceCommand, "<item slot> <sell price>", getStaffFlagValue("none"), true, true, "Sets the purchase price of a business item"),
|
||||
commandData("bizname", setBusinessNameCommand, "<name>", getStaffFlagValue("none"), true, true, "Changes a business name"),
|
||||
commandData("bizowner", setBusinessOwnerCommand, "<player name/id>", getStaffFlagValue("none"), true, true, "Changes the owner of a business"),
|
||||
commandData("bizclan", setBusinessClanCommand, "", getStaffFlagValue("none"), true, true, "Changes the owner of a business"),
|
||||
commandData("bizbuyprice", setBusinessBuyPriceCommand, "<amount>", getStaffFlagValue("none"), true, true, "Changes the owner of a business"),
|
||||
commandData("bizblip", setBusinessBlipCommand, "<type name/model id>", getStaffFlagValue("manageBusinesses"), true, true, "Sets the business blip display"),
|
||||
commandData("bizpickup", setBusinessPickupCommand, "<type name/model id>", getStaffFlagValue("manageBusinesses"), true, true, "Sets the business pickup display"),
|
||||
@@ -132,21 +133,21 @@ function loadCommands() {
|
||||
commandData("addclan", createClanCommand, "<name>", getStaffFlagValue("manageClans"), true, true, "Creates an new empty, unowned clan."),
|
||||
commandData("delclan", deleteClanCommand, "<clan id>", getStaffFlagValue("manageClans"), true, true, "Deletes a clan by ID or name"),
|
||||
|
||||
commandData("addclanrank", createClanRankCommand, "<rank id> <name>", getStaffFlagValue("none"), true, true, "Adds a clan rank"),
|
||||
commandData("delclanrank", deleteClanRankCommand, "<rank name>", getStaffFlagValue("none"), true, true, "Removes a clan rank"),
|
||||
commandData("clanaddrank", createClanRankCommand, "<rank id> <name>", getStaffFlagValue("none"), true, true, "Adds a clan rank"),
|
||||
commandData("clandelrank", deleteClanRankCommand, "<rank name>", getStaffFlagValue("none"), true, true, "Removes a clan rank"),
|
||||
|
||||
commandData("setclanrank", setClanMemberRankCommand, "<player name/id> <rank name>", getStaffFlagValue("none"), true, true, "Sets the rank of a clan member"),
|
||||
commandData("clansetrank", setClanMemberRankCommand, "<player name/id> <rank name>", getStaffFlagValue("none"), true, true, "Sets the rank of a clan member"),
|
||||
|
||||
commandData("clanowner", setClanOwnerCommand, "<clan id> <player name/id>", getStaffFlagValue("none"), true, true, "Gives ownership of the clan to a player"),
|
||||
commandData("clanowner", setClanOwnerCommand, "<player name/id>", getStaffFlagValue("none"), true, true, "Gives ownership of the clan to a player"),
|
||||
commandData("clantag", setClanTagCommand, "<tag>", getStaffFlagValue("none"), true, true, "Sets a clan's main tag"),
|
||||
commandData("clanranktag", setClanRankTagCommand, "<rank id> <tag>", getStaffFlagValue("none"), true, true, "Sets a clan rank's custom tag"),
|
||||
commandData("clanranktag", setClanRankTagCommand, "<rank name/id> <tag>", getStaffFlagValue("none"), true, true, "Sets a clan rank's custom tag"),
|
||||
commandData("clanmembertag", setClanMemberTagCommand, "<player name/id> <tag>", getStaffFlagValue("none"), true, true, "Sets a clan members's custom tag"),
|
||||
commandData("clanranktitle", setClanRankTitleCommand, "<rank id> <title>", getStaffFlagValue("none"), true, true, "Sets a clan rank's title"),
|
||||
commandData("clanrankname", setClanRankTitleCommand, "<rank name/id> <new name>", getStaffFlagValue("none"), true, true, "Sets a clan rank's title"),
|
||||
commandData("clanmembertitle", setClanMemberTitleCommand, "<player name/id> <title>", getStaffFlagValue("none"), true, true, "Sets a clan members's custom title"),
|
||||
commandData("addclanrankflag", addClanRankFlagCommand, "<rank name/id> <flag name>", getStaffFlagValue("none"), true, true, "Gives a clan rank a clan permission."),
|
||||
commandData("delclanrankflag", removeClanRankFlagCommand, "<rank name/id> <flag name>", getStaffFlagValue("none"), true, true, "Takes a clan permission from a clan rank"),
|
||||
commandData("addclanmemberflag", addClanMemberFlagCommand, "<player name/id> <flag name>", getStaffFlagValue("none"), true, true, "Gives a clan member a clan permission"),
|
||||
commandData("delclanmemberflag", removeClanMemberFlagCommand, "<player name/id> <flag name>", getStaffFlagValue("none"), true, true, "Takes a clan permission from a clan member"),
|
||||
commandData("clanaddrankflag", addClanRankFlagCommand, "<rank name/id> <flag name>", getStaffFlagValue("none"), true, true, "Gives a clan rank a clan permission."),
|
||||
commandData("clandelrankflag", removeClanRankFlagCommand, "<rank name/id> <flag name>", getStaffFlagValue("none"), true, true, "Takes a clan permission from a clan rank"),
|
||||
commandData("clanaddmemberflag", addClanMemberFlagCommand, "<player name/id> <flag name>", getStaffFlagValue("none"), true, true, "Gives a clan member a clan permission"),
|
||||
commandData("clandelmemberflag", removeClanMemberFlagCommand, "<player name/id> <flag name>", getStaffFlagValue("none"), true, true, "Takes a clan permission from a clan member"),
|
||||
],
|
||||
class: [],
|
||||
client: [],
|
||||
@@ -206,10 +207,11 @@ function loadCommands() {
|
||||
|
||||
commandData("houseinfo", getHouseInfoCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("housebuy", buyHouseCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("houseclan", setHouseClanCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("housedesc", setHouseDescriptionCommand, "", getStaffFlagValue("manageHouses"), true, false),
|
||||
commandData("houselock", lockUnlockHouseCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("houselights", toggleHouseInteriorLightsCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("houseowner", setHouseOwnerCommand, "", getStaffFlagValue("manageHouses"), true, false),
|
||||
commandData("houseowner", setHouseOwnerCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("housebuyprice", setHouseBuyPriceCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("houserentprice", setHouseRentPriceCommand, "", getStaffFlagValue("none"), true, false),
|
||||
commandData("houseblip", setHouseBlipCommand, "<type name/model id>", getStaffFlagValue("manageHouses"), true, true),
|
||||
@@ -340,6 +342,7 @@ function loadCommands() {
|
||||
commandData("nonrpname", forceCharacterNameChangeCommand, "<player name/id>", getStaffFlagValue("basicModeration"), true, true, "Forces a player to change their current character's name."),
|
||||
commandData("forcename", forceCharacterNameCommand, "<player name/id> <first name> <last name>", getStaffFlagValue("basicModeration"), true, true, "Changes a character's name directly."),
|
||||
commandData("forceskin", forcePlayerSkinCommand, "<player name/id> <skin id/name>", getStaffFlagValue("basicModeration"), true, true, "Changes a character's skin directly."),
|
||||
commandData("forcefightstyle", forceFightStyleCommand, "<player name/id> <fight style name>", getStaffFlagValue("basicModeration"), true, true, "Changes a character's fight style."),
|
||||
commandData("plrinfo", getPlayerInfoCommand, "<player name/id>", getStaffFlagValue("basicModeration"), true, true, "Shows basic info about the specified player"),
|
||||
commandData("getplrhouse", getAllHousesOwnedByPlayerCommand, "<player name/id>", getStaffFlagValue("basicModeration"), true, true, "Shows a list of all houses owned by the player"),
|
||||
commandData("getplrbiz", getAllBusinessesOwnedByPlayerCommand, "<player name/id>", getStaffFlagValue("basicModeration"), true, true, "Shows a list of all businesses owned by the player"),
|
||||
@@ -407,7 +410,8 @@ function loadCommands() {
|
||||
commandData("vehbuyprice", setVehicleBuyPriceCommand, "", getStaffFlagValue("none"), true, true),
|
||||
commandData("stoprent", stopRentingVehicleCommand, "", getStaffFlagValue("none"), true, true),
|
||||
commandData("vehbuy", buyVehicleCommand, "", getStaffFlagValue("none"), true, true),
|
||||
commandData("vehcolour", setVehicleColourCommand, "<colour1> <colour2>", getStaffFlagValue("none"), true, true),
|
||||
commandData("vehcolour", vehicleColourCommand, "<colour1> <colour2>", getStaffFlagValue("none"), true, true),
|
||||
commandData("vehlivery", vehicleLiveryCommand, "<livery id>", getStaffFlagValue("none"), true, true),
|
||||
commandData("vehrepair", vehicleRepairCommand, "", getStaffFlagValue("none"), true, true),
|
||||
commandData("passenger", enterVehicleAsPassengerCommand, "", getStaffFlagValue("none"), true, true),
|
||||
],
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
let scriptVersion = "1.0";
|
||||
let serverStartTime = 0;
|
||||
let logLevel = LOG_ALL;
|
||||
let logLevel = LOG_DEBUG;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
|
||||
@@ -251,6 +251,36 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) {
|
||||
messagePlayerTip(client, `Use /vehrent if you want to rent it.`);
|
||||
resetVehiclePosition(vehicle);
|
||||
} else {
|
||||
let ownerName = "Nobody";
|
||||
let ownerType = "None";
|
||||
ownerType = toLowerCase(getVehicleOwnerTypeText(getVehicleData(vehicle).ownerType));
|
||||
switch(vehicleData.ownerType) {
|
||||
case VRR_VEHOWNER_CLAN:
|
||||
ownerName = getClanData(getVehicleData(vehicle).ownerId).name;
|
||||
ownerType = "clan";
|
||||
break;
|
||||
|
||||
case VRR_VEHOWNER_JOB:
|
||||
ownerName = getJobData(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)).name;
|
||||
ownerType = "job";
|
||||
break;
|
||||
|
||||
case VRR_VEHOWNER_PLAYER:
|
||||
let subAccountData = loadSubAccountFromId(getVehicleData(vehicle).ownerId);
|
||||
ownerName = `${subAccountData.firstName} ${subAccountData.lastName} [${subAccountData.databaseId}]`;
|
||||
ownerType = "player";
|
||||
break;
|
||||
|
||||
case VRR_VEHOWNER_BIZ:
|
||||
ownerName = getBusinessData(getVehicleData(vehicle).ownerId).name;
|
||||
ownerType = "business";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
messagePlayerAlert(client, `This ${getVehicleName(vehicle)} belongs to ${getInlineChatColourByName("lightGrey")}${ownerName} (${ownerType})`);
|
||||
|
||||
if(!getVehicleData(vehicle).engine) {
|
||||
if(doesPlayerHaveVehicleKeys(client, vehicle)) {
|
||||
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "engine")) {
|
||||
@@ -472,8 +502,7 @@ function onPlayerSpawn(client) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`);
|
||||
setEntityData(client.player, "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true);
|
||||
|
||||
let fightStyleId = getPlayerCurrentSubAccount(client).fightStyle;
|
||||
setEntityData(client.player, "vrr.fightStyle", [getGameData().fightStyles[getServerGame()][fightStyleId][1][0], getGameData().fightStyles[getServerGame()][fightStyleId][1][1]], true);
|
||||
setPlayerFightStyle(client, getPlayerCurrentSubAccount(client).fightStyle);
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Updating logo state for ${getPlayerDisplayForConsole(client)}`);
|
||||
@@ -501,6 +530,24 @@ function onPlayerSpawn(client) {
|
||||
sendPlayerEnterPropertyKey(client, keyId.key);
|
||||
}
|
||||
|
||||
if(isGTAIV()) {
|
||||
setEntityData(client.player, "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true);
|
||||
setEntityData(client.player, "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true);
|
||||
|
||||
setEntityData(client.player, "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true);
|
||||
setEntityData(client.player, "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true);
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped state to ready`);
|
||||
getPlayerData(client).pedState = VRR_PEDSTATE_READY;
|
||||
|
||||
@@ -520,6 +567,8 @@ function onPlayerSpawn(client) {
|
||||
if(getPlayerCurrentSubAccount(client).inHouse > 0) {
|
||||
setEntityData(client.player, "vrr.inHouse", getHouseIdFromDatabaseId(getPlayerCurrentSubAccount(client).inHouse), true);
|
||||
}
|
||||
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,12 @@ let randomTips = [
|
||||
`${getInlineChatColourByName("white")}Want to buy a business? Use /bizbuy at one for sale`,
|
||||
`${getInlineChatColourByName("white")}Want to buy a house? Use /housebuy at one for sale`,
|
||||
`${getInlineChatColourByName("white")}Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!`,
|
||||
`${getInlineChatColourByName("white")}Switch to any of your characters with ${getInlineChatColourByName("lightGrey")}/switchchar`,
|
||||
`${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/iplogin ${getInlineChatColourByName("white")}to automatically login when connecting with the same IP`,
|
||||
`${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/houselights or /bizlights ${getInlineChatColourByName("white")}to turn on/off the lights in your house or business`,
|
||||
`${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/radiostation ${getInlineChatColourByName("white")}to play an internet radio station in your car, house, or business`,
|
||||
//`${getInlineChatColourByName("white")}Lower your car windows with /windows ${getInlineChatColourByName("lightGrey")} to play the vehicle's internet radio station ${getInlineChatColourByName("lightGrey")}(/radiostation) ${getInlineChatColourByName("white")}to nearby players`,
|
||||
//`${getInlineChatColourByName("white")}Lower your car windows with /windows ${getInlineChatColourByName("lightGrey")} to play the vehicle's internet radio station ${getInlineChatColourByName("lightGrey")}(/radiostation) ${getInlineChatColourByName("white")}to nearby players`,
|
||||
//`${getInlineChatColourByName("white")}Tax is based on your total wealth. This includes money, vehicles, businesses and more.`,
|
||||
//`${getInlineChatColourByName("white")}Don't go broke because of a hospital bill! Get insured today by visiting an insurance agency!`,
|
||||
//`${getInlineChatColourByName("white")}Don't go broke because your car was destroyed. Visit an insurance agency today!`,
|
||||
@@ -55,6 +61,11 @@ function helpCommand(command, params, client) {
|
||||
break;
|
||||
|
||||
case "vehicle":
|
||||
case "veh":
|
||||
case "vehs":
|
||||
case "vehicles":
|
||||
case "car":
|
||||
case "cars":
|
||||
showVehicleHelpMessage(client);
|
||||
break;
|
||||
|
||||
@@ -87,12 +98,16 @@ function helpCommand(command, params, client) {
|
||||
break;
|
||||
|
||||
case "anim":
|
||||
case "anims":
|
||||
case "animation":
|
||||
case "animations":
|
||||
showAnimationHelpMessage(client);
|
||||
break;
|
||||
|
||||
case "ammunation":
|
||||
case "ammu":
|
||||
case "gun":
|
||||
case "guns":
|
||||
showAmmunationHelpMessage(client);
|
||||
break;
|
||||
|
||||
@@ -119,6 +134,17 @@ function helpCommand(command, params, client) {
|
||||
}
|
||||
break;
|
||||
|
||||
case "clan":
|
||||
case "clans":
|
||||
case "group":
|
||||
case "groups":
|
||||
case "faction":
|
||||
case "factions":
|
||||
case "family":
|
||||
case "families":
|
||||
showClanHelpMessage(client);
|
||||
break;
|
||||
|
||||
default:
|
||||
showMainHelpMessage(client);
|
||||
break;
|
||||
@@ -140,6 +166,7 @@ function helpCommand(command, params, client) {
|
||||
// == Bindable Keys ============================
|
||||
// == Clothes ==================================
|
||||
// == Business =================================
|
||||
// == Clan Help ================================
|
||||
// == Command Info =============================
|
||||
// == Player Vehicles ==========================
|
||||
// == Player Businesses ========================
|
||||
@@ -282,6 +309,17 @@ function showBusinessHelpMessage(client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showClanHelpMessage(client) {
|
||||
messagePlayerInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Clan ${getInlineChatColourByType("clanOrange")}================================`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByType("clanOrange")}• ${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/addclan ${getInlineChatColourByName("white")}to create a clan (Similar to factions/groups/families)`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByType("clanOrange")}• ${getInlineChatColourByName("white")}Clan commands: ${getInlineChatColourByName("lightGrey")}/clan, /clanmotd, /clanname, /clanowner, /clanhouse, /clanbiz, /claninvite, /clanuninvite, /clansetrank`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByType("clanOrange")}• ${getInlineChatColourByName("white")}${getInlineChatColourByName("lightGrey")}/clanflags, /clanaddrank, /clandelrank, /clanaddrankflag, /clandelrankflag, /clanaddmemberflag, /clandelmemberflag`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByType("clanOrange")}• ${getInlineChatColourByName("white")}${getInlineChatColourByName("lightGrey")}/clanranks, /clanaddrank, /clandelrank, /clanrankname, /clanaddrankflag, /clandelrankflag`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByType("clanOrange")}• ${getInlineChatColourByName("white")}${getInlineChatColourByName("lightGrey")}/clanaddmemberflag, /clandelmemberflag`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showCommandHelpMessage(client, commandName) {
|
||||
if(!commandName) {
|
||||
messagePlayerSyntax(client, `${getCommandSyntaxText("help")} command <command name>`);
|
||||
|
||||
@@ -214,11 +214,18 @@ function setHouseOwnerCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageHouses"))) {
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_PLAYER && getHouseData(houseId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
messagePlayerError(client, "You don't own this house!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getHouseData(houseId).needsSaved = true;
|
||||
|
||||
getHouseData(houseId).ownerType = VRR_HOUSEOWNER_PLAYER;
|
||||
getHouseData(houseId).ownerId = getServerData().clients[newHouseOwner.index].accountData.databaseId;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}owner to ${getInlineChatColourByName("lightGrey")}${newHouseOwner.name}`);
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}to ${getInlineChatColourByName("lightGrey")}${newHouseOwner.name}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -235,23 +242,78 @@ function setHouseOwnerCommand(command, params, client) {
|
||||
function setHouseClanCommand(command, params, client) {
|
||||
let houseId = toInteger((isPlayerInAnyHouse(client)) ? getPlayerHouse(client) : getClosestHouseEntrance(getPlayerPosition(client)));
|
||||
|
||||
let clan = getClanFromParams(params);
|
||||
|
||||
if(!clan) {
|
||||
messagePlayerError(client, "That clan is invalid or doesn't exist!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!getHouseData(houseId)) {
|
||||
messagePlayerError("House not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanId = getPlayerClan(params);
|
||||
|
||||
if(!getClanData(clanId)) {
|
||||
messagePlayerError(client, "Clan not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageHouses"))) {
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_PLAYER && getHouseData(houseId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
messagePlayerError(client, "You don't own this house!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getHouseData(houseId).needsSaved = true;
|
||||
|
||||
getHouseData(houseId).ownerType = VRR_HOUSEOWNER_CLAN;
|
||||
getHouseData(houseId).ownerId = getClanData(clanId).databaseId;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}owner to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan!`);
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")} to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan!`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* This is a command handler function.
|
||||
*
|
||||
* @param {string} command - The command name used by the player
|
||||
* @param {string} params - The parameters/args string used with the command by the player
|
||||
* @param {Client} client - The client/player that used the command
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function setHouseRankCommand(command, params, client) {
|
||||
let houseId = toInteger((isPlayerInAnyHouse(client)) ? getPlayerHouse(client) : getClosestHouseEntrance(getPlayerPosition(client)));
|
||||
|
||||
if(!getHouseData(houseId)) {
|
||||
messagePlayerError("House not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanId = getPlayerClan(params);
|
||||
|
||||
if(!getClanData(clanId)) {
|
||||
messagePlayerError(client, "Clan not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let clanRankId = getClanRankFromParams(clanId, params);
|
||||
|
||||
if(!getClanRankData(clanId, clanRankId)) {
|
||||
messagePlayerError(client, "Clan rank not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageHouses"))) {
|
||||
messagePlayerError(client, "You can't set clan house ranks!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getClanRankData(clanId, clanRankId).level > getPlayerCurrentSubAccount(client).clanRank) {
|
||||
messagePlayerError(client, "That rank is above your level!");
|
||||
return false;
|
||||
}
|
||||
|
||||
getHouseData(houseId).clanRank = getClanRankData(clanId, clanRankId).level;
|
||||
getHouseData(houseId).needsSaved = true;
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You set house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description}${getInlineChatColourByName("white")}'s clan rank to ${getInlineChatColourByType("clanOrange")}${getClanRankData(clanId, clanRankId).name} ${getInlineChatColourByName("white")}(level ${getClanRankData(clanId, clanRankId).level}) and above!`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -605,6 +667,19 @@ function getClosestHouseEntrance(position) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getClosestHouseExit(position) {
|
||||
let houses = getServerData().houses;
|
||||
let closest = 0;
|
||||
for(let i in houses) {
|
||||
if(getDistance(houses[i].exitPosition, position) <= getDistance(houses[closest].exitPosition, position)) {
|
||||
closest = i;
|
||||
}
|
||||
}
|
||||
return closest;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerHouse(client) {
|
||||
if(doesEntityDataExist(client, "vrr.inHouse")) {
|
||||
return getEntityData(client, "vrr.inHouse");
|
||||
@@ -1184,4 +1259,44 @@ function updateHouseInteriorLightsForOccupants(houseId) {
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canPlayerSetHouseInteriorLights(client, houseId) {
|
||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageHouses"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_PLAYER && getHouseData(houseId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_CLAN && getHouseData(houseId).ownerId == getClanData(getPlayerClan(client)).databaseId) {
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageHouses"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canPlayerLockUnlockHouse(client, houseId) {
|
||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageHouses"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_PLAYER && getHouseData(houseId).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(getHouseData(houseId).ownerType == VRR_HOUSEOWNER_CLAN && getHouseData(houseId).ownerId == getClanData(getPlayerClan(client)).databaseId) {
|
||||
if(doesPlayerHaveClanPermission(client, getClanFlagValue("manageHouses"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -663,15 +663,18 @@ function playerUseItem(client, hotBarSlot) {
|
||||
|
||||
case VRR_ITEM_USETYPE_WALKIETALKIE:
|
||||
getItemData(itemIndex).enabled = !getItemData(itemIndex).enabled;
|
||||
messagePlayerAlert(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your walkie talkie in slot ${getPlayerData(client).activeHotBarSlot+1} ${getInlineChatColourByName("lightGrey")}(${getItemValueDisplayForItem(itemIndex)})`);
|
||||
//messagePlayerAlert(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your walkie talkie in slot ${getPlayerData(client).activeHotBarSlot+1} ${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(itemIndex)}`);
|
||||
meActionToNearbyPlayers(client, `turns ${toLowerCase(getOnOffFromBool(getItemData(itemIndex).enabled))} their walkie-talkie`);
|
||||
break;
|
||||
|
||||
case VRR_ITEM_USETYPE_PHONE:
|
||||
getItemData(itemIndex).enabled = !getItemData(itemIndex).enabled;
|
||||
if(getItemData(itemIndex).enabled) {
|
||||
messagePlayerAlert(client, `You turned on your phone in slot ${getPlayerData(client).activeHotBarSlot+1} (${getItemValueDisplayForItem(itemIndex)})`);
|
||||
//messagePlayerAlert(client, `You turned on your phone in slot ${getPlayerData(client).activeHotBarSlot+1} ${getItemValueDisplayForItem(itemIndex)}`);
|
||||
meActionToNearbyPlayers(client, `turns on their phone`);
|
||||
} else {
|
||||
messagePlayerAlert(client, `You turned OFF your phone in slot ${getPlayerData(client).activeHotBarSlot+1}`);
|
||||
//messagePlayerAlert(client, `You turned OFF your phone in slot ${getPlayerData(client).activeHotBarSlot+1}`);
|
||||
meActionToNearbyPlayers(client, `turns off their phone`);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1357,9 +1360,14 @@ function playerItemActionDelayComplete(client) {
|
||||
|
||||
function getItemValueDisplayForItem(itemId) {
|
||||
if(!getItemData(itemId)) {
|
||||
return "unknown";
|
||||
return "[unknown]";
|
||||
}
|
||||
return getItemValueDisplay(getItemData(itemId).itemTypeIndex, getItemData(itemId).value);
|
||||
|
||||
if(isMeleeWeapon(getItemTypeData(getItemData(itemId).itemTypeIndex).useId)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return `[${getItemValueDisplay(getItemData(itemId).itemTypeIndex, getItemData(itemId).value)}]`;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1416,7 +1424,7 @@ function toggleItemEnabledCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getItemData(getPlayerActiveItem(client)).enabled = !getItemData(getPlayerActiveItem(client)).enabled;
|
||||
messagePlayerNormal(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your ${getItemName(getPlayerActiveItem(client))} in slot ${getPlayerActiveItemSlot(client)} ${getInlineChatColourByName("lightGrey")}(${getItemValueDisplayForItem(getPlayerActiveItem(client))}`)
|
||||
messagePlayerNormal(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your ${getItemName(getPlayerActiveItem(client))} in slot ${getPlayerActiveItemSlot(client)} ${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getPlayerActiveItem(client))}`)
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1496,8 +1504,8 @@ function showBusinessFloorInventoryToPlayer(client, businessId) {
|
||||
//itemDisplay.push(`${getInlineChatColourByType("jobYellow")}${toInteger(i)+1}${getInlineChatColourByName("lightGrey")}(Empty)`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByName("yellow")}${toInteger(i)+1}${getInlineChatColourByName("lightGrey")}(Empty)`, COLOUR_WHITE);
|
||||
} else {
|
||||
//itemDisplay.push(`${getInlineChatColourByType("jobYellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).floorItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}[${getItemValueDisplayForItem(getBusinessData(businessId).floorItemCache[i])}] - [${(getPlayerCurrentSubAccount(client).cash<getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice) ? rgbToHex(205, 60, 60) : rgbToHex(50, 205, 50)}]$${getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice} [#CCCCCC] - ${getItemData(getBusinessData(businessId).floorItemCache[i]).amount} available`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByName("yellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).floorItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}[${getItemValueDisplayForItem(getBusinessData(businessId).floorItemCache[i])}] - [${(getPlayerCurrentSubAccount(client).cash<getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice) ? rgbToHex(205, 60, 60) : rgbToHex(50, 205, 50)}]$${getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice} [#CCCCCC] - ${getItemData(getBusinessData(businessId).floorItemCache[i]).amount} available`, COLOUR_WHITE);
|
||||
//itemDisplay.push(`${getInlineChatColourByType("jobYellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).floorItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getBusinessData(businessId).floorItemCache[i])} - [${(getPlayerCurrentSubAccount(client).cash<getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice) ? rgbToHex(205, 60, 60) : rgbToHex(50, 205, 50)}]$${getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice} [#CCCCCC] - ${getItemData(getBusinessData(businessId).floorItemCache[i]).amount} available`);
|
||||
messagePlayerNormal(client, `${getInlineChatColourByName("yellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).floorItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getBusinessData(businessId).floorItemCache[i])} - [${(getPlayerCurrentSubAccount(client).cash<getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice) ? rgbToHex(205, 60, 60) : rgbToHex(50, 205, 50)}]$${getItemData(getBusinessData(businessId).floorItemCache[i]).buyPrice} [#CCCCCC] - ${getItemData(getBusinessData(businessId).floorItemCache[i]).amount} available`, COLOUR_WHITE);
|
||||
}
|
||||
|
||||
//messagePlayerNormal(client, splitItemDisplay[i].join("${getInlineChatColourByName("white")}, "), COLOUR_WHITE);
|
||||
@@ -1523,7 +1531,7 @@ function showBusinessStorageInventoryToPlayer(client, businessId) {
|
||||
if(getBusinessData(businessId).storageItemCache == -1) {
|
||||
itemDisplay.push(`${getInlineChatColourByName("yellow")}${toInteger(i)+1}${getInlineChatColourByName("lightGrey")}(Empty)`);
|
||||
} else {
|
||||
itemDisplay.push(`${getInlineChatColourByName("yellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).storageItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}[${getItemValueDisplayForItem(getBusinessData(businessId).storageItemCache[i])}] - [#CCCCCC]${getItemData(getBusinessData(businessId).storageItemCache[i]).amount} available`);
|
||||
itemDisplay.push(`${getInlineChatColourByName("yellow")}${toInteger(i)+1}: ${getInlineChatColourByName("white")}${getItemTypeData(getItemData(getBusinessData(businessId).storageItemCache[i]).itemTypeIndex).name}${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getBusinessData(businessId).storageItemCache[i])} - [#CCCCCC]${getItemData(getBusinessData(businessId).storageItemCache[i]).amount} available`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1548,7 +1556,7 @@ function showItemInventoryToPlayer(client, itemId) {
|
||||
if(getItemData(itemId).itemCache == -1) {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}${getInlineChatColourByName("lightGrey")}(Empty)`);
|
||||
} else {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}${getItemTypeData(getItemData(getItemData(itemId).itemCache[i]).itemTypeIndex).name}[${getItemValueDisplayForItem(getItemData(itemId).itemCache[i])}]`);
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}${getItemTypeData(getItemData(getItemData(itemId).itemCache[i]).itemTypeIndex).name}${getItemValueDisplayForItem(getItemData(itemId).itemCache[i])}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1578,7 +1586,7 @@ function showPlayerInventoryToPlayer(client, targetClient) {
|
||||
if(getPlayerData(targetClient).hotBarItems[i] == -1) {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${colour}(Empty)`);
|
||||
} else {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${colour}${getItemTypeData(getItemData(getPlayerData(targetClient).hotBarItems[i]).itemTypeIndex).name}[${getItemValueDisplayForItem(getPlayerData(targetClient).hotBarItems[i])}]`);
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${colour}${getItemTypeData(getItemData(getPlayerData(targetClient).hotBarItems[i]).itemTypeIndex).name}${getItemValueDisplayForItem(getPlayerData(targetClient).hotBarItems[i])}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1608,7 +1616,7 @@ function showHouseInventoryToPlayer(client, houseId) {
|
||||
if(getHouseData(houseId).itemCache == -1) {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}${getInlineChatColourByName("lightGrey")}(Empty)`);
|
||||
} else {
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}${getItemTypeData(getItemData(getHouseData(houseId).itemCache[i]).itemTypeIndex).name}[${getItemValueDisplayForItem(getBusinessData(houseId).itemCache[i])}]`);
|
||||
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}${getItemTypeData(getItemData(getHouseData(houseId).itemCache[i]).itemTypeIndex).name}${getItemValueDisplayForItem(getBusinessData(houseId).itemCache[i])}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ function unHandCuffPlayer(client) {
|
||||
// ===========================================================================
|
||||
|
||||
function isPlayerSurrendered(client) {
|
||||
return (getPlayerData(client).pedState == VRR_PEDSTATE_TAZED || getPlayerData(client).pedState == VRR_PEDSTATE_HANDSUP);
|
||||
return true; //(getPlayerData(client).pedState == VRR_PEDSTATE_TAZED || getPlayerData(client).pedState == VRR_PEDSTATE_HANDSUP);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -4286,7 +4286,7 @@ function setPlayerInterior(client, interior) {
|
||||
// ===========================================================================
|
||||
|
||||
function isPlayerInAnyVehicle(client) {
|
||||
if(getServerGame() == GAME_GTA_IV) {
|
||||
if(!doesGameHaveServerElements()) {
|
||||
return (getPlayerData().syncVehicle != null);
|
||||
} else {
|
||||
return (client.player.vehicle != null);
|
||||
@@ -4300,11 +4300,15 @@ function getPlayerVehicleSeat(client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for(let i = 0 ; i <= 8 ; i++) {
|
||||
if(getPlayerVehicle(client).getOccupant(i) == client.player) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if(!doesGameHaveServerElements()) {
|
||||
return getPlayerData().syncVehicleSeat;
|
||||
} else {
|
||||
for(let i = 0 ; i <= 8 ; i++) {
|
||||
if(getPlayerVehicle(client).getOccupant(i) == client.player) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -4789,4 +4793,27 @@ function setGameTime(hour, minute, minuteDuration = 1000) {
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayerFightStyle(client, fightStyleId) {
|
||||
if(!isPlayerSpawned(client)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setEntityData(getPlayerElement(client), "vrr.fightStyle", [getGameData().fightStyles[getServerGame()][fightStyleId][1][0], getGameData().fightStyles[getServerGame()][fightStyleId][1][1]]);
|
||||
forcePlayerToSyncElementProperties(null, getPlayerElement(client));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isPlayerAtGym(client) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerElement(client) {
|
||||
return client.player;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -375,10 +375,11 @@ function selectCharacter(client, characterId = -1) {
|
||||
if(!isGTAIV()) {
|
||||
spawnPlayer(client, spawnPosition, spawnHeading, skin, spawnInterior, spawnDimension);
|
||||
} else {
|
||||
setPlayerPosition(client, spawnPosition);
|
||||
setPlayerHeading(client, spawnHeading);
|
||||
setPlayerSkin(client, skin);
|
||||
restorePlayerCamera(client);
|
||||
//setPlayerPosition(client, spawnPosition);
|
||||
//setPlayerHeading(client, spawnHeading);
|
||||
//setPlayerSkin(client, skin);
|
||||
//restorePlayerCamera(client);
|
||||
spawnPlayer(client, spawnPosition, spawnHeading, skin, spawnInterior, spawnDimension);
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.SubAccount] Spawned ${getPlayerDisplayForConsole(client)} as character ID ${getPlayerData(client).currentSubAccount} with skin ${skin} (${spawnPosition.x}, ${spawnPosition.y}, ${spawnPosition.z})`);
|
||||
@@ -544,6 +545,13 @@ function setFightStyleCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isPlayerAtGym(client)) {
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("basicModeration"))) {
|
||||
messagePlayerError(client, `You need to be at a gym!`);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
setPlayerFightStyle(client, fightStyleId);
|
||||
messagePlayerSuccess(client, `Your fight style has been set to ${getGameData().fightStyles[getServerGame()][fightStyleId][0]}`)
|
||||
|
||||
@@ -552,6 +560,53 @@ function setFightStyleCommand(command, params, client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forceFightStyleCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split();
|
||||
let targetClient = getPlayerFromParams(splitParams[0]);
|
||||
let fightStyleId = getFightStyleFromParams(splitParams[1]);
|
||||
|
||||
//if(!targetClient) {
|
||||
// messagePlayerError(client, `Player not found!`);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
//if(!getPlayerData(targetClient)) {
|
||||
// messagePlayerError(client, `Player not found!`);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
//if(!isPlayerSpawned(targetClient)) {
|
||||
// messagePlayerError(client, `That player isn't spawned`);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
if(!fightStyleId) {
|
||||
messagePlayerError(client, `That fight style doesn't exist!`);
|
||||
messagePlayerError(client, `Fight styles: ${getGameData().fightStyles[getServerGame()].map(fs => fs[0]).join(", ")}`);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isPlayerAtGym(client)) {
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("basicModeration"))) {
|
||||
messagePlayerError(client, `You need to be at a gym!`);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
getPlayerCurrentSubAccount(client).fightStyle = fightStyleId;
|
||||
setPlayerFightStyle(client, fightStyleId);
|
||||
messagePlayerSuccess(client, `You set ${getCharacterFullName(targetClient)}'s fight style to ${getGameData().fightStyles[getServerGame()][fightStyleId][0]}`)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createDefaultSubAccountServerData(databaseId, thisServerSkin) {
|
||||
for(let i = 1 ; i <= 4 ; i++) {
|
||||
if(i == getServerId()) {
|
||||
|
||||
@@ -712,6 +712,24 @@ function getWeatherFromParams(params) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getFightStyleFromParams(params) {
|
||||
if(isNaN(params)) {
|
||||
for(let i in getGameData().fightStyles[getServerGame()]) {
|
||||
if(toLowerCase(getGameData().fightStyles[getServerGame()][i][0]).indexOf(toLowerCase(params)) != -1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(typeof getGameData().fightStyles[getServerGame()][params] != "undefined") {
|
||||
return toInteger(params);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getAnimationFromParams(params) {
|
||||
|
||||
@@ -426,7 +426,7 @@ function vehicleSirenCommand(command, params, client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleColourCommand(command, params, client) {
|
||||
function vehicleColourCommand(command, params, client) {
|
||||
if(areParamsEmpty(params) && areThereEnoughParams(params, 2)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
@@ -509,6 +509,49 @@ function vehicleRepairCommand(command, params, client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function vehicleLiveryCommand(command, params, client) {
|
||||
if(!isPlayerInAnyVehicle(client)) {
|
||||
messagePlayerError(client, "You need to be in a vehicle!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let vehicle = getPlayerVehicle(client);
|
||||
|
||||
if(!getVehicleData(vehicle)) {
|
||||
messagePlayerError(client, "This is a random traffic vehicle and commands can't be used for it.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isAtPayAndSpray(getVehiclePosition(vehicle))) {
|
||||
if(!doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageVehicles"))) {
|
||||
messagePlayerError(client, "You need to be at a pay-n-spray!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(getPlayerCurrentSubAccount(client).cash < getGlobalConfig().repairVehicleCost) {
|
||||
messagePlayerError(client, `You don't have enough money to change the vehicle's livery (need $${getGlobalConfig().resprayVehicleCost-getPlayerCurrentSubAccount(client).cash} more!)`);
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let livery = toInteger(params) || 3;
|
||||
|
||||
takePlayerCash(client, getGlobalConfig().resprayVehicleCost);
|
||||
updatePlayerCash(client);
|
||||
getVehicleData(vehicle).livery = livery;
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
|
||||
setEntityData(vehicle, "vrr.livery", livery, true);
|
||||
setTimeout(function() {
|
||||
forcePlayerToSyncElementProperties(null, vehicle);
|
||||
}, 1000);
|
||||
|
||||
meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function buyVehicleCommand(command, params, client) {
|
||||
if(!isPlayerInAnyVehicle(client)) {
|
||||
messagePlayerError(client, "You need to be in a vehicle!");
|
||||
@@ -590,6 +633,14 @@ function rentVehicleCommand(command, params, client) {
|
||||
|
||||
meActionToNearbyPlayers(client, `rents the ${getVehicleName(vehicle)} and receives a set of vehicle keys!`);
|
||||
messagePlayerAlert(client, `You will be charged ${getVehicleData(vehicle).rentPrice} per minute to use this vehicle. To stop renting this vehicle, use /vehrent again.`);
|
||||
|
||||
if(!getVehicleData(vehicle).engine) {
|
||||
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "engine")) {
|
||||
messagePlayerTip(client, `The ${getVehicleName(vehicle)}'s engine is off. Press ${getInlineChatColourByName("lightGrey")}${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "engine").key))} ${getInlineChatColourByName("white")}to start it.`);
|
||||
} else {
|
||||
messagePlayerAlert(client, `The ${getVehicleName(vehicle)}'s engine is off. Use /engine to start it`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -649,7 +700,7 @@ function doesPlayerHaveVehicleKeys(client, vehicle) {
|
||||
}
|
||||
|
||||
if(vehicleData.ownerType == VRR_VEHOWNER_JOB) {
|
||||
if(getJobType(vehicleData.ownerId) == getJobType(getPlayerCurrentSubAccount(client).job)) {
|
||||
if(vehicleData.ownerId == getJobType(getPlayerCurrentSubAccount(client).job)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -924,7 +975,7 @@ function getVehicleInfoCommand(command, params, client) {
|
||||
break;
|
||||
|
||||
case VRR_VEHOWNER_JOB:
|
||||
ownerName = getJobData(vehicleData.ownerId).name;
|
||||
ownerName = getJobData(getJobIdFromDatabaseId(vehicleData.ownerId)).name;
|
||||
ownerType = "job";
|
||||
break;
|
||||
|
||||
@@ -943,7 +994,7 @@ function getVehicleInfoCommand(command, params, client) {
|
||||
break;
|
||||
}
|
||||
|
||||
messagePlayerNormal(client, `🚗 ${getInlineChatColourByType("vehiclePurple")}[Vehicle Info] ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${vehicle.id}, ${getInlineChatColourByName("white")}DatabaseID: ${getInlineChatColourByName("lightGrey")}${vehicleData.databaseId}, ${getInlineChatColourByName("white")}Owner: ${getInlineChatColourByName("lightGrey")}${ownerName}[ID ${vehicleData.ownerId}] (${ownerType}), ${getInlineChatColourByName("white")}Type: ${getInlineChatColourByName("lightGrey")}${getVehicleName(vehicle)}[${vehicle.modelIndex}], ${getInlineChatColourByName("white")}BuyPrice: ${getInlineChatColourByName("lightGrey")}${vehicleData.buyPrice}, ${getInlineChatColourByName("white")}RentPrice: ${getInlineChatColourByName("lightGrey")}${vehicleData.rentPrice}`);
|
||||
messagePlayerNormal(client, `🚗 ${getInlineChatColourByType("vehiclePurple")}[Vehicle Info] ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${getElementId(vehicle)}, ${getInlineChatColourByName("white")}DatabaseID: ${getInlineChatColourByName("lightGrey")}${vehicleData.databaseId}, ${getInlineChatColourByName("white")}Owner: ${getInlineChatColourByName("lightGrey")}${ownerName}[ID ${vehicleData.ownerId}] (${ownerType}), ${getInlineChatColourByName("white")}Type: ${getInlineChatColourByName("lightGrey")}${getVehicleName(vehicle)}[${vehicle.modelIndex}], ${getInlineChatColourByName("white")}BuyPrice: ${getInlineChatColourByName("lightGrey")}${vehicleData.buyPrice}, ${getInlineChatColourByName("white")}RentPrice: ${getInlineChatColourByName("lightGrey")}${vehicleData.rentPrice}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1082,27 +1133,30 @@ function spawnVehicle(vehicleData) {
|
||||
let vehicle = gta.createVehicle(vehicleData.model, vehicleData.spawnPosition, vehicleData.spawnRotation);
|
||||
addToWorld(vehicle);
|
||||
|
||||
if(vehicleData.colour1IsRGBA && vehicleData.colour2IsRGBA) {
|
||||
vehicle.setRGBColours(vehicleData.colour1RGBA, vehicleData.colour2RGBA);
|
||||
} else {
|
||||
vehicle.colour1 = vehicleData.colour1;
|
||||
vehicle.colour2 = vehicleData.colour2;
|
||||
vehicle.colour3 = vehicleData.colour3;
|
||||
vehicle.colour4 = vehicleData.colour4;
|
||||
if(doesGameHaveServerElements()) {
|
||||
if(vehicleData.colour1IsRGBA && vehicleData.colour2IsRGBA) {
|
||||
vehicle.setRGBColours(vehicleData.colour1RGBA, vehicleData.colour2RGBA);
|
||||
} else {
|
||||
vehicle.colour1 = vehicleData.colour1;
|
||||
vehicle.colour2 = vehicleData.colour2;
|
||||
vehicle.colour3 = vehicleData.colour3;
|
||||
vehicle.colour4 = vehicleData.colour4;
|
||||
}
|
||||
|
||||
vehicle.engine = intToBool(vehicleData.engine);
|
||||
//vehicle.lights = intToBool(vehicleData.lights);
|
||||
//vehicle.health = vehicleData.health;
|
||||
|
||||
//vehicle.position = vehicleData.spawnPosition;
|
||||
vehicle.heading = vehicleData.spawnRotation;
|
||||
|
||||
vehicle.locked = intToBool(vehicleData.locked);
|
||||
}
|
||||
|
||||
vehicle.engine = intToBool(vehicleData.engine);
|
||||
//vehicle.lights = intToBool(vehicleData.lights);
|
||||
//vehicle.health = vehicleData.health;
|
||||
|
||||
//vehicle.position = vehicleData.spawnPosition;
|
||||
vehicle.heading = vehicleData.spawnRotation;
|
||||
|
||||
vehicle.locked = intToBool(vehicleData.locked);
|
||||
|
||||
vehicleData.vehicle = vehicle;
|
||||
|
||||
setEntityData(vehicle, "vrr.livery", vehicleData.livery);
|
||||
setEntityData(vehicle, "vrr.upgrades", vehicleData.extras);
|
||||
|
||||
return vehicle;
|
||||
}
|
||||
|
||||
@@ -1072,6 +1072,10 @@ function isCustomCameraSupported() {
|
||||
// ===========================================================================
|
||||
|
||||
function areWorldLabelsSupported() {
|
||||
if(isGTAIV()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user