Files
GTA4RP/scripts/server/clan.js
2020-12-07 10:30:16 -06:00

598 lines
17 KiB
JavaScript

// ===========================================================================
// Asshat-Gaming Roleplay
// https://github.com/VortrexFTW/gtac_asshat_rp
// Copyright (c) 2020 Asshat-Gaming (https://asshatgaming.com)
// ---------------------------------------------------------------------------
// FILE: clan.js
// DESC: Provides clan functions and usage
// TYPE: Server (JavaScript)
// ===========================================================================
function initClanScript() {
console.log("[Asshat.Clan]: Initializing clans script ...");
serverData.clans = loadClansFromDatabase();
addClanCommandHandlers();
console.log("[Asshat.Clan]: Clan script initialized successfully!");
return true;
}
// ---------------------------------------------------------------------------
function addClanCommandHandlers() {
console.log("[Asshat.Clan]: Adding clan command handlers ...");
let clanCommands = serverCommands.clan;
for(let i in clanCommands) {
addCommandHandler(clanCommands[i].command, clanCommands[i].handlerFunction);
}
console.log("[Asshat.Clan]: Clan command handlers added successfully!");
return true;
}
// ---------------------------------------------------------------------------
function loadClansFromDatabase() {
console.log("[Asshat.Clan]: Loading clans from database ...");
let tempClans = [];
let dbConnection = connectToDatabase();
let dbAssoc;
if(dbConnection) {
let dbQuery = queryDatabase(dbConnection, "SELECT * FROM `clan_main` WHERE `clan_deleted` = 0 AND `clan_server` = " + String(serverId));
if(dbQuery) {
if(dbQuery.numRows > 0) {
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
let tempClanData = getClasses().clanData(dbAssoc);
tempClanData.members = loadClanMembersFromDatabase(tempClanData.databaseId);
tempClanData.ranks = loadClanRanksFromDatabase(tempClanData.databaseId);
tempClans.push(tempClanData);
console.log(`[Asshat.Clan]: Clan '${tempClanData.name}' loaded from database successfully!`);
}
}
freeDatabaseQuery(dbQuery);
}
disconnectFromDatabase(dbConnection);
}
console.log("[Asshat.Clan]: " + String(tempClans.length) + " clans loaded from database successfully!");
return tempClans;
}
// ----------------------------------------------------------------------------
function createClanCommand(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(doesClanNameExist(params)) {
messageClientError(client, "A clan with that name already exists!");
return false;
}
// Create clan without owner. Can set owner with /clanowner afterward
createClan(params);
messageClientSuccess(client, "The '" + params + "' clan has been created!");
}
// ----------------------------------------------------------------------------
function deleteClanCommand(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(isNaN(params)) {
messageClientError(client, "The clan ID must be a number!");
return false;
}
if(!doesClanIDExist(Number(params))) {
messageClientError(client, "That clan ID does not exist!");
return false;
}
messageClientSuccess(client, "The '" + getClanData(Number(params)).name + "' clan has been deleted!");
deleteClan(Number(params));
}
// ----------------------------------------------------------------------------
function setClanOwnerCommand(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(!doesClientHaveClanPermission(client, "owner")) {
messageClientError(client, "You must be the clan owner to use this command!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanTagCommand(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(!doesClientHaveClanPermission(client, "clanTag")) {
messageClientError(client, "You can not change the clan tag!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanNameCommand(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(!doesClientHaveClanPermission(client, "clanName")) {
messageClientError(client, "You can not change the clan name!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanMemberTagCommand(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(!doesClientHaveClanPermission(client, "memberTag")) {
messageClientError(client, "You can not change a clan member's tag!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanRankTagCommand(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(!doesClientHaveClanPermission(client, "rankTag")) {
messageClientError(client, "You can not change a clan ranks's tag!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanMemberFlagsCommand(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(!doesClientHaveClanPermission(client, "memberFlags")) {
messageClientError(client, "You can not change a clan member's permissions!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanRankFlagsCommand(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(!doesClientHaveClanPermission(client, "rankFlags")) {
messageClientError(client, "You can not change a clan ranks's permissions!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanMemberTitleCommand(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(!doesClientHaveClanPermission(client, "memberFlags")) {
messageClientError(client, "You can not change a clan member's title!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function setClanRankTitleCommand(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(!doesClientHaveClanPermission(client, "rankTitle")) {
messageClientError(client, "You can not change a clan ranks's title!");
return false;
}
if(areParamsEmpty(params)) {
messageClientSyntax(client, getCommandSyntaxText(command));
return false;
}
}
// ----------------------------------------------------------------------------
function createClan(name) {
let dbConnection = connectToDatabase();
let serverId = getServerId();
let escapedName = name;
if(dbConnection) {
escapedName = escapeDatabaseString(dbConnection, escapedName)
let dbQuery = queryDatabase(dbConnection, `INSERT INTO clan_main (clan_server, clan_name) VALUES (${serverId}, '${escapedName}')`);
disconnectFromDatabase(dbConnection);
let tempClanData = loadClanFromDatabaseById(getDatabaseInsertId(dbConnection));
if(tempClanData != false) {
let tempClan = serverClasses.clanData(tempClanData);
serverData.clans.push(tempClan);
}
}
return true;
}
// ----------------------------------------------------------------------------
function deleteClan(clanId) {
saveClansToDatabase();
let dbConnection = connectToDatabase();
if(dbConnection) {
let dbQuery = queryDatabase(dbConnection, `UPDATE clan_main SET clan_deleted = 1 WHERE clan_id = ${clanId}`);
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
reloadAllClans();
return true;
}
return false;
}
// ----------------------------------------------------------------------------
function getClanData(clanId) {
let clans = getServerData().clans;
for(let i in clans) {
if(clans[i].databaseId == clanId) {
return clans[i];
}
}
return false;
}
// ----------------------------------------------------------------------------
function doesClanNameExist(name) {
let clans = getServerData().clans;
for(let i in clans) {
if(clans[i].name == name) {
return true;
}
}
return false;
}
// ----------------------------------------------------------------------------
function doesClanIdExist(clanId) {
let clans = getServerData().clans;
for(let i in clans) {
if(clans[i].databaseId == clanId) {
return true;
}
}
return false;
}
// ----------------------------------------------------------------------------
function reloadAllClans() {
getServerData().clans = loadClansFromDatabase();
}
// ----------------------------------------------------------------------------
function saveClansToDatabase() {
let clans = getServerData().clans;
for(let i in clans) {
saveClanToDatabase(clans[i]);
}
}
// ----------------------------------------------------------------------------
function saveClanToDatabase(clanData) {
let dbConnection = connectToDatabase();
if(dbConnection) {
let dbQueryString = `UPDATE clan_main SET clan_name = '${escapeDatabaseString(dbConnection, clanData.name)}', clan_owner = ${clanData.ownerId}`;
let dbQuery = queryDatabase(dbConnection, dbQueryString);
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
return true;
}
return false;
}
// ----------------------------------------------------------------------------
function setClanTag(clanId, tag) {
getClanData(clanId).tag = tag;
}
// ----------------------------------------------------------------------------
function setClanOwner(clanId, ownerId) {
getClanData(clanId).ownerId = ownerId;
}
// ----------------------------------------------------------------------------
function setClanMemberTag(memberId, tag) {
// finish this later, need to query db
}
// ----------------------------------------------------------------------------
function setClanMemberFlags(memberId, flags) {
// finish this later, need to query db
}
// ----------------------------------------------------------------------------
function setClanMemberTitle(memberId, title) {
// finish this later, need to query db
}
// ----------------------------------------------------------------------------
function setClanRankTag(clanId, rankId, tag) {
getClanRankData(clanId, rankId).tag = tag;
}
// ----------------------------------------------------------------------------
function setClanRankFlags(clanId, rankId, flags) {
getClanRankData(clanId, rankId).flags = flags;
}
// ----------------------------------------------------------------------------
function setClanRankTitle(clanId, rankId, title) {
getClanRankData(clanId, rankId).title = title;
}
// ----------------------------------------------------------------------------
function saveAllClansToDatabase() {
}
// ---------------------------------------------------------------------------