320 lines
10 KiB
JavaScript
320 lines
10 KiB
JavaScript
// ===========================================================================
|
|
// Asshat Gaming RP
|
|
// http://asshatgaming.com
|
|
// © 2020 Asshat Gaming
|
|
// ---------------------------------------------------------------------------
|
|
// FILE: business.js
|
|
// DESC: Provides business functions and usage
|
|
// TYPE: Server (JavaScript)
|
|
// ===========================================================================
|
|
|
|
function initBusinessScript() {
|
|
console.log("[Asshat.Business]: Initializing business script ...");
|
|
serverData.businesses = loadBusinessesFromDatabase();
|
|
addBusinessCommandHandlers();
|
|
console.log("[Asshat.Business]: Business script initialized successfully!");
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function addBusinessCommandHandlers() {
|
|
console.log("[Asshat.Business]: Adding business commands!");
|
|
let businessCommands = serverCommands.business;
|
|
for(let i in businessCommands) {
|
|
addCommandHandler(businessCommands[i].command, businessCommands[i].handlerFunction);
|
|
}
|
|
console.log("[Asshat.Business]: Business commands added!");
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function loadBusinessesFromDatabase() {
|
|
console.log("[Asshat.Business]: Loading businesses from database ...");
|
|
|
|
let tempBusinesses = [];
|
|
let dbConnection = connectToDatabase();
|
|
let dbQuery = null;
|
|
|
|
if(dbConnection) {
|
|
dbQuery = dbConnection.query("SELECT * FROM `biz_main` WHERE `biz_server` = " + String(serverId));
|
|
if(dbQuery) {
|
|
if(dbQuery.numRows > 0) {
|
|
while(dbFetchAssoc = dbQuery.fetchAssoc()) {
|
|
let tempBusinessData = businessData(dbFetchAssoc);
|
|
tempBusinesses.push(tempBusinessData);
|
|
console.log(`[Asshat.Business]: Business '${tempBusinessData.name}' loaded from database successfully!`);
|
|
}
|
|
}
|
|
dbQuery.free();
|
|
}
|
|
disconnectFromDatabase(dbConnection);
|
|
}
|
|
|
|
console.log("[Asshat.Business]: " + String(tempBusinesses.length) + " businesses loaded from database successfully!");
|
|
return tempBusinesses;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function createBusinessCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isClientLoggedIn(client)) {
|
|
messageClientError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(isClientFromDiscord(client)) {
|
|
if(!isCommandAllowedOnDiscord(command)) {
|
|
messageClientError(client, "That command isn't available on discord!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messageClientError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messageClientSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
if(isClientSpawned(client)) {
|
|
messageClientError("You must be spawned to use this command!");
|
|
return false;
|
|
}
|
|
|
|
createBusiness(params, client.player.position, getClientInterior(client), getClientVirtualWorld(client));
|
|
messageClientSuccess(client, "Business created in " + getAreaName(client.player.position) + " (" + params + ")");
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function createBusiness(name, entrancePosition, interiorId, virtualWorld) {
|
|
let dbConnection = connectToDatabase();
|
|
let escapedName = name;
|
|
|
|
if(dbConnection) {
|
|
escapedName = dbConnection.escapeString(escapedName)
|
|
let dbQuery = dbConnection.query("INSERT INTO `biz_main` (`biz_server`, `biz_name`, `biz_entrance_x`, `biz_entrance_y`, `biz_entrance_z`, `biz_entrance_int`, `biz_entrance_vw`) VALUES (" + String(serverId) + ", '" + escapedName + "', " + String(entrancePosition.x) + ", " + String(entrancePosition.y) + ", " + String(entrancePosition.z) + ", " + String(interiorId) + ", " + String(virtualWorld) + ")");
|
|
disconnectFromDatabase(dbConnection);
|
|
|
|
let tempBusinessData = loadBusinessFromDatabaseById(dbConnection.insertID);
|
|
if(tempBusinessData != false) {
|
|
let tempBusiness = getClasses().businessData(tempBusinessData);
|
|
serverData.business.push(tempBusiness);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function deleteBusinessCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isClientLoggedIn(client)) {
|
|
messageClientError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(isClientFromDiscord(client)) {
|
|
if(!isCommandAllowedOnDiscord(command)) {
|
|
messageClientError(client, "That command isn't available on discord!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messageClientError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messageClientSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
let businessId = Number(params);
|
|
|
|
let tempBusinessData = serverData.businesses.filter(b => b.databaseId == businessId)[0];
|
|
deleteBusiness(businessId);
|
|
messageClientSuccess(client, `Business '${tempBusinessData.name} deleted!`);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function setBusinessNameCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isClientLoggedIn(client)) {
|
|
messageClientError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(isClientFromDiscord(client)) {
|
|
if(!isCommandAllowedOnDiscord(command)) {
|
|
messageClientError(client, "That command isn't available on discord!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messageClientError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messageClientSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split(" ");
|
|
|
|
let newBusinessName = String(splitParams[0]);
|
|
let businessId = Number(splitParams[1]) || (isPlayerInAnyBusiness(client.player)) ? getPlayerBusiness(client.player) : getClosestBusinessEntrance(client.player.position).databaseId;
|
|
|
|
let tempBusinessData = serverData.businesses.filter(b => b.databaseId == businessId)[0];
|
|
|
|
serverData.businesses[businessId].name = newBusinessName;
|
|
messageClientSuccess(client, `Business '${tempBusinessData.name}' renamed to '${newBusinessName}'!`);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function setBusinessOwnerCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isClientLoggedIn(client)) {
|
|
messageClientError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(isClientFromDiscord(client)) {
|
|
if(!isCommandAllowedOnDiscord(command)) {
|
|
messageClientError(client, "That command isn't available on discord!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messageClientError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messageClientSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
if(isClientSpawned(client)) {
|
|
messageClientError("You must be spawned to use this command!");
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split(" ");
|
|
|
|
let newBusinessOwner = getClientFromParams(splitParams[0]);
|
|
let businessId = Number(splitParams[1]) || (isPlayerInAnyBusiness(client.player)) ? getPlayerBusiness(client.player) : getClosestBusinessEntrance(client.player.position).databaseId;
|
|
|
|
if(!newBusinessOwner) {
|
|
messageClientError("Player not found!");
|
|
return false;
|
|
}
|
|
|
|
if(!getBusinessDataFromDatabaseId(businessId)) {
|
|
messageClientError("Business not found!");
|
|
return false;
|
|
}
|
|
|
|
serverData.businesses[businessId].ownerId = serverData.clients[newBusinessOwner.index].accountData.databaseId;
|
|
messageClientSuccess(client, `Business '${serverData.businesses[businessId].name}' owner set to '${newBusinessOwner.name}'!`);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function lockBusinessCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isClientLoggedIn(client)) {
|
|
messageClientError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(isClientFromDiscord(client)) {
|
|
if(!isCommandAllowedOnDiscord(command)) {
|
|
messageClientError(client, "That command isn't available on discord!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messageClientError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messageClientSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
if(isClientSpawned(client)) {
|
|
messageClientError("You must be spawned to use this command!");
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split(" ");
|
|
|
|
let businessId = Number(splitParams[0]) || (isPlayerInAnyBusiness(client.player)) ? getPlayerBusiness(client.player) : getClosestBusinessEntrance(client.player.position).databaseId;
|
|
|
|
serverData.businesses[businessId].locked = !serverData.businesses[businessId].locked;
|
|
messageClientSuccess(client, "Business " + serverData.businesses[businessId].name + " " + (serverData.businesses[businessId].locked) ? "locked" : "unlocked" + "!");
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function getBusinessDataFromDatabaseId(databaseId) {
|
|
let matchingBusinesses = serverData.businesses.filter(b => b.databaseId == businessId)
|
|
if(matchingBusinesses.length == 1) {
|
|
return matchingBusinesses[0];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function getClosestBusinessEntrance(position) {
|
|
return serverData.businesses.reduce((i, j) => ((i.entrancePosition.distance(position) <= j.entrancePosition.distance(position)) ? i : j));
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function isPlayerInAnyBusiness(player) {
|
|
if(player.getData("ag.inBusiness")) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function getPlayerBusiness(player) {
|
|
if(player.getData("ag.inBusiness")) {
|
|
return player.getData("ag.inBusiness");
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function saveAllBusinessesToDatabase() {
|
|
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|