Files
GTA4RP/scripts/server/clan.js
2020-09-04 15:56:19 -05:00

597 lines
17 KiB
JavaScript

// ===========================================================================
// Asshat Gaming RP
// http://asshatgaming.com
// © 2020 Asshat Gaming
// ---------------------------------------------------------------------------
// 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();
if(dbConnection) {
let dbQuery = dbConnection.query("SELECT * FROM `clan_main` WHERE `clan_server` = " + String(serverId));
if(dbQuery) {
if(dbQuery.numRows > 0) {
while(dbFetchAssoc = dbQuery.fetchAssoc()) {
let tempClanData = getClasses().clanData(dbFetchAssoc);
tempClanData.members = loadClanMembersFromDatabase(tempClanData.databaseId);
tempClanData.ranks = loadClanRanksFromDatabase(tempClanData.databaseId);
tempClans.push(tempClanData);
console.log(`[Asshat.Clan]: Clan '${tempClanData.name}' loaded from database successfully!`);
}
}
dbQuery.free();
}
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 = dbConnection.escapeString(escapedName)
let dbQuery = dbConnection.query("INSERT INTO `clan_main` (`clan_server`, `clan_name`) VALUES (" + String(serverId) + ", '" + escapedName + "')");
disconnectFromDatabase(dbConnection);
let tempClanData = loadClanFromDatabaseById(dbConnection.insertID);
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 = dbConnection.query("DELETE FROM `clan_main` WHERE `clan_id` = " + clanId);
dbQuery.free();
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` = '" + dbConnection.escapeString(clanData.name) + "', `clan_owner` = " + clanData.ownerId;
let dbQuery = dbConnection.query(dbQueryString);
dbQuery.free();
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() {
}
// ---------------------------------------------------------------------------