LoT_PRC8/_module/nss/inc_gsystem.nss
Jaysyn904 ec287507a1 Initial upload
Initial upload.
2023-09-25 21:32:17 -04:00

1184 lines
46 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name: inc_gsystem
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Include script to handle all PGS-related
functions.
NOTE: Do not modify this script in any way!
The only customizeable script is:
"inc_gsystem_cnfg".
*/
//:://////////////////////////////////////////////
//:: Created By: Samius Maximus
//:: Created On:
//:://////////////////////////////////////////////
#include "inc_gsystem_terr"
#include "inc_gsystem_cnfg"
#include "nw_i0_spells"
//****************************** PGS PLAYER INFO *****************************\\
//------------------------------------------------
//GET & SET functions for player guild number.
//------------------------------------------------
int GetPlayerGuildNumber (object oPlayer);
void SetPlayerGuildNumber (object oPlayer, int iNumber);
//------------------------------------------------
//GET & SET functions for player guild name.
//------------------------------------------------
string GetPlayerGuildName (object oPlayer);
void SetPlayerGuildName (object oPlayer, string sName);
//------------------------------------------------
//GET & SET functions for player guild rank.
//------------------------------------------------
int GetPlayerGuildRank (object oPlayer);
void SetPlayerGuildRank (object oPlayer, int iRank);
//------------------------------------------------
//GET & SET functions for player settings.
//------------------------------------------------
int GetPlayerSettingValue (object oPlayer, string sSetting);
void SetPlayerSettingValue (object oPlayer, string sSetting, int iValue);
//************************** PGS MODULE INFORMATION **************************\\
//------------------------------------------------
//GET & SET functions for module guild member count.
//------------------------------------------------
int GetModuleGuildMemberCount (int iGuild);
void SetModuleGuildMemberCount (int iGuild, int iCount);
//------------------------------------------------
//GET & SET functions for module guild privacy status.
//------------------------------------------------
string GetModuleGuildPrivacyStatus (int iGuild);
void SetModuleGuildPrivacyStatus (int iGuild, string sStatus);
//------------------------------------------------
//GET & SET functions for module guild account value.
//------------------------------------------------
int GetModuleGuildAccountValue (int iGuild);
void SetModuleGuildAccountValue (int iGuild, int iValue);
//------------------------------------------------
//GET & SET functions for module guild name.
//------------------------------------------------
string GetModuleGuildName (int iGuild);
void SetModuleGuildName (int iGuild, string sName);
//------------------------------------------------
//GET & SET functions for module guild description.
//------------------------------------------------
string GetModuleGuildDescription (int iGuild);
void SetModuleGuildDescription (int iGuild, string sDescription);
//------------------------------------------------
//GET & SET functions for module guild leader name.
//------------------------------------------------
string GetModuleGuildLeader (int iGuild);
void SetModuleGuildLeader (int iGuild, string sLeader);
//------------------------------------------------
//GET & SET functions for guild-specific messages.
//------------------------------------------------
string GetModuleGuildTitle (int iGuild, int iPosition);
void SetModuleGuildTitle (int iGuild, int iPosition, string sTitle);
string GetModuleGuildPost (int iGuild, int iPosition);
void SetModuleGuildPost (int iGuild, int iPosition, string sPost);
string GetModuleGuildAuthor (int iGuild, int iPosition);
void SetModuleGuildAuthor (int iGuild, int iPosition, string sName);
string GetModuleGuildReplyTitle (int iGuild, int iPosition, int iReply);
void SetModuleGuildReplyTitle (int iGuild, int iPosition, int iReply, string sTitle);
string GetModuleGuildReplyPost (int iGuild, int iPosition, int iReply);
void SetModuleGuildReplyPost (int iGuild, int iPosition, int iReply, string sPost);
string GetModuleGuildReplyAuthor (int iGuild, int iPosition, int iReply);
void SetModuleGuildReplyAuthor (int iGuild, int iPosition, int iReply, string sAuthor);
//------------------------------------------------
//GET & SET functions for current guild count.
//------------------------------------------------
int GetModuleGuildCount();
void SetModuleGuildCount (int iGuildCount);
//------------------------------------------------
//GET & SET functions for recent guild activity.
//------------------------------------------------
string GetModuleRecentPGSActivity (int iPosition);
void SetModuleRecentPGSActivity (string sEvent);
//------------------------------------------------
//GET & SET functions for individual guild rank names.
//------------------------------------------------
string GetModuleGuildRankName (int iGuild, int iRank);
void SetModuleGuildRankName (int iGuild, int iRank, string sRank);
string GetModuleRankOptions (int iRank);
void ChangeTargetPlayerRank (object oPlayer, object oTarget, int iNewRank);
//------------------------------------------------
//GET & SET functions for awardable experience.
//------------------------------------------------
int GetModuleGuildAwardableXP (int iGuild);
void SetModuleGuildAwardableXP (int iGuild, int iXP);
//------------------------------------------------
//GET & SET functions for guild joining fees.
//------------------------------------------------
int GetModuleGuildJoiningFee (int iGuild);
void SetModuleGuildJoiningFee (int iGuild, int iAmount);
//------------------------------------------------
//GET & SET functions for guild effect colors.
//------------------------------------------------
int GetModuleGuildColor (int iGuild);
void SetModuleGuildColor (int iGuild, int iColor);
//**************************** PGS MAIN FUNCTIONS ****************************\\
//------------------------------------------------
//GET & SET functions for PGS build number.
//------------------------------------------------
string GetModulePGSBuildNumber();
void SetModulePGSBuildNumber (string sBuild);
//------------------------------------------------
//GET & SET functions for PGS build date.
//------------------------------------------------
string GetModulePGSBuildDate();
void SetModulePGSBuildDate (string sDate);
//------------------------------------------------
//Guild information display functions.
//------------------------------------------------
void DisplayGuildInformation (int iGuild);
void DisplayCurrentGuildMessage (int iGuild, int iMessage);
void DisplayCurrentGuildMessageReply (int iGuild, int iMessage, int iReply);
//------------------------------------------------
//Guild string functions for sending messages.
//------------------------------------------------
void SendPGSGuildNotice (int iGuild, string sNotice);
void SendPGSGuildMessage (int iGuild, object oSender, string sMessage);
//------------------------------------------------
//PGS data deletions functions.
//------------------------------------------------
void RemoveGuildDataFromPlayer (object oPlayer);
void PermanentlyRemoveGuild (int iGuild);
//------------------------------------------------
//GET & SET functions for max guild number.
//------------------------------------------------
int GetModuleMaxGuildNumber();
void SetModuleMaxGuildNumber (int iMaxGuild);
//------------------------------------------------
//GET & SET functions for guild factions.
//------------------------------------------------
int GetFactionStatusBetweenGuilds (int iGuild1, int iGuild2);
void SetFactionStatusBetweenGuilds (int iGuild1, int iGuild2, int iFaction);
//------------------------------------------------
//Player faction-related functions.
//------------------------------------------------
void SetPlayerGuildFactionToAll (object oPlayer);
void ComputeGuildPlayerFactions (int iGuild);
//------------------------------------------------
//Get guild leader object based on name.
//------------------------------------------------
object GetPlayerObjectGuildLeader (int iGuild);
//------------------------------------------------
//Change faction functions for guilds.
//------------------------------------------------
void SetGuildFactionToEnemy (int iGuild1, int iGuild2);
void SetGuildFactionToNeutral (int iGuild1, int iGuild2);
void SetGuildFactionToAlly (object oPlayer, object oLeader);
//------------------------------------------------
//DelayCommand function work-around for hostility.
//------------------------------------------------
void SetDelayedHostilityFaction (int iGuild1, int iGuild2);
//------------------------------------------------
//Guild awardable experience (XP) function(s).
//------------------------------------------------
void AwardTargetPlayerWithGuildXP (object oPlayer, object oTarget, int iXP);
// //********************************************************************\\ \\
// ||************************ BEGIN PGS FUNCTIONS ***********************|| \\
// \\********************************************************************// \\
int GetPlayerGuildNumber (object oPlayer)
{
return GetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Number",
oPlayer);
}
void SetPlayerGuildNumber (object oPlayer, int iNumber)
{
SetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Number",
iNumber, oPlayer);
}
string GetPlayerGuildName (object oPlayer)
{
return GetCampaignString (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Name",
oPlayer);
}
void SetPlayerGuildName (object oPlayer, string sName)
{
SetCampaignString (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Name",
sName, oPlayer);
}
int GetPlayerGuildRank (object oPlayer)
{
return GetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Rank",
oPlayer);
}
void SetPlayerGuildRank (object oPlayer, int iRank)
{
SetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Guild_Rank", iRank,
oPlayer);
}
int GetPlayerSettingValue (object oPlayer, string sSetting)
{
//--------------------------------------------
//Player settings value KEY:
// TRUE = Enabled.
// FALSE = Disabled.
//--------------------------------------------
return GetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Setting_" +
sSetting, oPlayer);
}
void SetPlayerSettingValue (object oPlayer, string sSetting, int iValue)
{
//--------------------------------------------
//Player settings value KEY:
// TRUE = Enabled.
// FALSE = Disabled.
//--------------------------------------------
SetCampaignInt (PGS_PLAYER_DATABASE_FILENAME, "Player_Setting_" + sSetting,
iValue, oPlayer);
}
//----------------------------------------------------------------------------\\
int GetModuleGuildMemberCount (int iGuild)
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Member_Count");
}
void SetModuleGuildMemberCount (int iGuild, int iCount)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" + IntToString
(iGuild) + "_Member_Count", iCount);
}
string GetModuleGuildPrivacyStatus (int iGuild)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Privacy_Status");
}
void SetModuleGuildPrivacyStatus (int iGuild, string sStatus)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Privacy_Status", sStatus);
}
int GetModuleGuildAccountValue (int iGuild)
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Account_Value");
}
void SetModuleGuildAccountValue (int iGuild, int iValue)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" + IntToString
(iGuild) + "_Account_Value", iValue);
}
string GetModuleGuildName (int iGuild)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Name");
}
void SetModuleGuildName (int iGuild, string sName)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Name", sName);
}
string GetModuleGuildDescription (int iGuild)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Description");
}
void SetModuleGuildDescription (int iGuild, string sDescription)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Description", sDescription);
}
string GetModuleGuildLeader (int iGuild)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Leader");
}
void SetModuleGuildLeader (int iGuild, string sLeader)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Leader", sLeader);
}
string GetModuleGuildTitle (int iGuild, int iPosition)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Title" + IntToString (iPosition));
}
void SetModuleGuildTitle (int iGuild, int iPosition, string sTitle)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Title" + IntToString (iPosition), sTitle);
}
string GetModuleGuildPost (int iGuild, int iPosition)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Post" + IntToString (iPosition));
}
void SetModuleGuildPost (int iGuild, int iPosition, string sPost)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Post" + IntToString (iPosition), sPost);
}
string GetModuleGuildAuthor (int iGuild, int iPosition)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Author" + IntToString (iPosition));
}
void SetModuleGuildAuthor (int iGuild, int iPosition, string sName)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Author" + IntToString (iPosition), sName);
}
string GetModuleGuildReplyTitle (int iGuild, int iPosition, int iReply)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Message" + IntToString (iPosition) +
"_Reply" + IntToString (iReply));
}
void SetModuleGuildReplyTitle (int iGuild, int iPosition, int iReply, string sTitle)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Message" + IntToString (iPosition) +
"_Reply" + IntToString (iReply), sTitle);
}
string GetModuleGuildReplyPost (int iGuild, int iPosition, int iReply)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Post" + IntToString (iPosition) +
"_Reply" + IntToString (iReply));
}
void SetModuleGuildReplyPost (int iGuild, int iPosition, int iReply, string sPost)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Post" + IntToString (iPosition) +
"_Reply" + IntToString (iReply), sPost);
}
string GetModuleGuildReplyAuthor (int iGuild, int iPosition, int iReply)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Author" + IntToString (iPosition) +
"_Reply" + IntToString (iReply));
}
void SetModuleGuildReplyAuthor (int iGuild, int iPosition, int iReply, string sAuthor)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Author" + IntToString (iPosition) +
"_Reply" + IntToString (iReply), sAuthor);
}
int GetModuleGuildCount()
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild_Count");
}
void SetModuleGuildCount (int iGuildCount)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild_Count", iGuildCount);
}
string GetModuleRecentPGSActivity (int iPosition)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Recent_" +
"Activity" + IntToString (iPosition));
}
void SetModuleRecentPGSActivity (string sEvent)
{
int iCount = 8;
//------------------------------------------------
//Shift all events down one position.
//------------------------------------------------
for (; iCount >= 2; iCount--)
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Recent_Activity" +
IntToString (iCount), GetModuleRecentPGSActivity (iCount - 1));
//------------------------------------------------
//Now place the newest event in the 1st position.
//------------------------------------------------
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Recent_Activity1",
sEvent);
}
string GetModuleGuildRankName (int iGuild, int iRank)
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Rank" + IntToString (iRank));
}
void SetModuleGuildRankName (int iGuild, int iRank, string sRank)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" + IntToString
(iGuild) + "_Rank" + IntToString (iRank), sRank);
}
string GetModuleRankOptions (int iRank)
{
//-------------------------------------------------
//Return the options available to the player.
//-------------------------------------------------
switch (iRank)
{
case 1: return "* Donate to guild account.\n* Reply to guild messages.";
case 2: return "* Donate to guild account.\n* Reply to guild messages.\n* Send guild invitations.";
case 3: return "* Donate to guild account.\n* Reply to guild messages.\n* Send guild invitations.\n* Remove guild members.";
case 4: return "* Donate to guild account.\n* Withdraw from guild account.\n* Reply to guild messages.\n* Send guild invitations.\n* Remove guild members.\n* Update guild information.\n* Change guild faction.";
}
return "Unknown"; /*Only used to compile.*/
}
void ChangeTargetPlayerRank (object oPlayer, object oTarget, int iNewRank)
{
int iPlayerGuild = GetLocalInt (oPlayer, "Player_Guild_Number");
//-------------------------------------------------
//Ensure player and target are both in same guild.
//-------------------------------------------------
if ((GetLocalInt (oTarget, "Player_Guild_Number") != iPlayerGuild) && (!GetIsDM (oPlayer)))
{
SendMessageToPC (oPlayer, "You cannot promote/demote players from " +
"another guild.");
return;
}
int iCurrentTargetRank = GetLocalInt (oTarget, "Player_Guild_Rank");
//-------------------------------------------------
//Ensure target player is not the leader.
//-------------------------------------------------
if (iCurrentTargetRank == 4)
{
SendMessageToPC (oPlayer, "You cannot promote/demote the guild leader.");
return;
}
//-------------------------------------------------
//Same guild - check for valid new rank.
//-------------------------------------------------
if (iCurrentTargetRank == iNewRank)
{
SendMessageToPC (oPlayer, GetName (oTarget) + " is already ranked as " +
" a " + GetModuleGuildRankName (iPlayerGuild, iNewRank) + ".");
return;
}
//-------------------------------------------------
//Inform members of new leadership change.
//-------------------------------------------------
if (iNewRank == 4)
{
object oLeader = GetPlayerObjectGuildLeader (iPlayerGuild);
if (!GetIsObjectValid (oLeader)) /*Current leader online?*/
{
SendMessageToPC (oPlayer, "You cannot promote the targeted player " +
"to guild leader, as the current guild leader is offline.");
return;
}
SendPGSGuildNotice (iPlayerGuild, "Guild leadership has changed." +
" " + GetName (oTarget) + " has been promoted to be the " +
"new guild " + GetModuleGuildRankName (iPlayerGuild, 4) + "!");
SetModuleGuildLeader (iPlayerGuild, GetName (oTarget));
SetPlayerGuildRank (oTarget, 4); /*Save new player rank.*/
//-------------------------------------------------
//Determine which object is the leader.
//DMs (oPlayer) can change rank, but are not leaders
//so we need to ensure we have the correct leader
//to change rank.
//-------------------------------------------------
if (oPlayer == oLeader) /*Use oPlayer for leader.*/
SetPlayerGuildRank (oPlayer, 3);
else /*Use oLeader for leader.*/
SetPlayerGuildRank (oLeader, 3);
}
else
{
SetPlayerGuildRank (oTarget, iNewRank); /*Save new player rank.*/
//-------------------------------------------------
//Check if to display guild notice to guild.
//-------------------------------------------------
if (iCurrentTargetRank > iNewRank) /*Demotion.*/
{
if (PGS_SEND_NOTICE_ON_DEMOTION)
SendPGSGuildNotice (iPlayerGuild, GetName (oTarget) + " has " +
"been demoted to a(n) " + GetModuleGuildRankName
(iPlayerGuild, iNewRank) + ".");
}
else if (PGS_SEND_NOTICE_ON_PROMOTION) /*Promotion.*/
SendPGSGuildNotice (iPlayerGuild, GetName (oTarget) + " has been " +
"promoted to a(n) " + GetModuleGuildRankName (iPlayerGuild,
iNewRank) + "!");
}
SetLocalInt (oTarget, "Player_Guild_Rank", iNewRank);
}
int GetModuleGuildAwardableXP (int iGuild)
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_XPAward");
}
void SetModuleGuildAwardableXP (int iGuild, int iXP)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_XPAward", iXP);
}
int GetModuleGuildJoiningFee (int iGuild)
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Joining_Fee");
}
void SetModuleGuildJoiningFee (int iGuild, int iAmount)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Joining_Fee", iAmount);
}
int GetModuleGuildColor (int iGuild)
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" +
IntToString (iGuild) + "_Color");
}
void SetModuleGuildColor (int iGuild, int iColor)
{
int iMemberCount = GetModuleGuildMemberCount (iGuild);
int iEffect;
//-------------------------------------------------
//Determine size of light effect to store.
//-------------------------------------------------
if (iMemberCount >= PGS_COLOR_LIGHTING_SIZE1)
iEffect = 0;
if (iMemberCount >= PGS_COLOR_LIGHTING_SIZE2)
iEffect = 1;
if (iMemberCount >= PGS_COLOR_LIGHTING_SIZE3)
iEffect = 2;
if (iMemberCount >= PGS_COLOR_LIGHTING_SIZE4)
iEffect = 3;
//-------------------------------------------------
//Calculate effect to store based on size & color.
//-------------------------------------------------
switch (iColor)
{
case 0: iEffect = 0; break; /*No color to assign.*/
case 1: iEffect = iEffect + 153; break; /*Assign blue.*/
case 2: iEffect = iEffect + 157; break; /*Assign yellow.*/
case 3: iEffect = iEffect + 161; break; /*Assign purple.*/
case 4: iEffect = iEffect + 165; break; /*Assign red.*/
case 5: iEffect = iEffect + 169; break; /*Assign orange.*/
//There's a gap between 169 - 177 because white does not function.
case 6: iEffect = iEffect + 177; break; /*Assign green.*/
}
//-------------------------------------------------
//Not store the guild color effect.
//-------------------------------------------------
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Module_Guild" + IntToString
(iGuild) + "_Color", iEffect);
}
//----------------------------------------------------------------------------\\
string GetModulePGSBuildNumber()
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME,
"PGS_Module_Build_Number");
}
void SetModulePGSBuildNumber (string sBuild)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "PGS_Module_Build_Number", sBuild);
}
string GetModulePGSBuildDate()
{
return GetCampaignString (PGS_MODULE_DATABASE_FILENAME,
"PGS_Module_Build_Date");
}
void SetModulePGSBuildDate (string sDate)
{
SetCampaignString (PGS_MODULE_DATABASE_FILENAME, "PGS_Module_Build_Date",
sDate);
}
void DisplayGuildInformation (int iGuild)
{
//------------------------------------------------
//Using custom tokens, display guild data.
//------------------------------------------------
SetCustomToken (3008, GetModuleGuildName (iGuild));
SetCustomToken (3009, GetModuleGuildPrivacyStatus (iGuild));
SetCustomToken (3010, IntToString (GetModuleGuildMemberCount (iGuild)));
SetCustomToken (3011, GetModuleGuildLeader (iGuild));
SetCustomToken (3012, GetModuleGuildDescription (iGuild));
}
void DisplayCurrentGuildMessage (int iGuild, int iMessage)
{
SetCustomToken (3050, GetModuleGuildTitle (iGuild, iMessage));
SetCustomToken (3051, GetModuleGuildAuthor (iGuild, iMessage));
SetCustomToken (3052, GetModuleGuildPost (iGuild, iMessage));
}
void DisplayCurrentGuildMessageReply (int iGuild, int iMessage, int iReply)
{
SetCustomToken (3050, GetModuleGuildReplyTitle (iGuild, iMessage, iReply));
SetCustomToken (3051, GetModuleGuildReplyAuthor (iGuild, iMessage, iReply));
SetCustomToken (3052, GetModuleGuildReplyPost (iGuild, iMessage, iReply));
}
void SendPGSGuildNotice (int iGuild, string sNotice)
{
object oLoop = GetFirstPC();
//-------------------------------------------------
//Loop through all players, sending the notice to
//players of the same guild.
//-------------------------------------------------
while (GetIsObjectValid (oLoop))
{
//-------------------------------------------------
//Check for matching guild number.
//-------------------------------------------------
if (GetLocalInt (oLoop, "Player_Guild_Number") == iGuild)
SendMessageToPC (oLoop, "Guild Notice: " + sNotice);
oLoop = GetNextPC(); /*Increment for loop.*/
}
}
void SendPGSGuildMessage (int iGuild, object oSender, string sMessage)
{
object oLoop = GetFirstPC();
int iLoopGuild;
//-------------------------------------------------
//Loop through players and send message.
//-------------------------------------------------
while (GetIsObjectValid (oLoop))
{
iLoopGuild = GetLocalInt (oLoop, "Player_Guild_Number");
//-------------------------------------------------
//First check for matching guild number.
//-------------------------------------------------
if ((iLoopGuild == iGuild) || (GetFactionStatusBetweenGuilds (iGuild, iLoopGuild) == 1))
//-------------------------------------------------
//Now check to ensure oLoop is accepting messages.
//-------------------------------------------------
if (GetPlayerSettingValue (oLoop, "Guild_Chat") == TRUE)
SendMessageToPC (oLoop, GetName (oSender) + ": " + sMessage);
oLoop = GetNextPC(); /*Increment for loop.*/
}
}
void RemoveGuildDataFromPlayer (object oPlayer)
{
int iGuild = GetLocalInt (oPlayer, "Player_Guild_Number");
int iMemberCount = GetModuleGuildMemberCount (iGuild);
object oLoop = GetFirstPC();
object oGnome = GetLocalObject (oPlayer, "Temp_Vault_Gnome");
//-------------------------------------------------
//Remove any NPC's that may have been created by PC.
//-------------------------------------------------
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect
(VFX_FNF_SUMMON_MONSTER_2), GetLocation (oGnome));
DestroyObject (oGnome);
ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectDisappear(),
GetLocalObject (oPlayer, "Temp_Messenger_Creature"));
//-------------------------------------------------
//Update player & module variables.
//-------------------------------------------------
SetModuleGuildMemberCount (iGuild, GetModuleGuildMemberCount (iGuild) - 1);
SetPlayerGuildNumber (oPlayer, 0);
SetPlayerGuildRank (oPlayer, 0);
SetPlayerGuildName (oPlayer, "");
DeleteLocalInt (oPlayer, "Player_Guild_Number");
DeleteLocalInt (oPlayer, "Player_Guild_Rank");
DeleteLocalObject (oPlayer, "Temp_Vault_Gnome");
DeleteLocalObject (oPlayer, "Temp_Messenger_Creature");
RemoveSpecificEffect (EFFECT_TYPE_VISUALEFFECT, oPlayer);
//--------------------------------------------
//Reset player factions to neutral.
//--------------------------------------------
while (GetIsObjectValid (oLoop))
{
//--------------------------------------------
//Set oPlayer and oLoop to be neutral.
//--------------------------------------------
SetIsTemporaryNeutral (oLoop, oPlayer);
SetIsTemporaryNeutral (oPlayer, oLoop);
oLoop = GetNextPC();
}
//--------------------------------------------
//If using the "pgs_main" convo, freeze it.
//--------------------------------------------
if (GetLocalInt (oPlayer, "Is_In_Conversation"))
{
AssignCommand (oPlayer, ActionPauseConversation());
SendMessageToPC (oPlayer, "PGS conversation has been paused - please " +
"restart.");
}
}
void PermanentlyRemoveGuild (int iGuild)
{
object oLoop = GetFirstPC();
int iMaxGuild = GetModuleMaxGuildNumber();
//--------------------------------------------
//Update recent guild activity list.
//--------------------------------------------
SetModuleRecentPGSActivity ("Guild removed: " + GetModuleGuildName (iGuild));
//--------------------------------------------
//Loop through players and remove from guild.
//--------------------------------------------
while (GetIsObjectValid (oLoop))
{
if (GetLocalInt (oLoop, "Player_Guild_Number") == iGuild)
{
RemoveGuildDataFromPlayer (oLoop);
SendMessageToPC (oLoop, "You have been removed from the guild as " +
"it no longer exists.");
//--------------------------------------------
//Determine if to take GJ from player inventory.
//--------------------------------------------
if ((PGS_GIVE_GUILD_JOURNAL_ON_ENTER == FALSE) && (PGS_KEEP_GUILD_JOURNAL_AFTER_REMOVAL == FALSE))
DestroyObject (GetItemPossessedBy (oLoop, "GuildJournal"));
}
oLoop = GetNextPC(); /*Object loop increment.*/
}
//--------------------------------------------
//Remove module guild information from the DB.
//--------------------------------------------
SetModuleGuildMemberCount (iGuild, 0);
SetModuleGuildPrivacyStatus (iGuild, "");
SetModuleGuildAccountValue (iGuild, 0);
SetModuleGuildName (iGuild, "");
SetModuleGuildDescription (iGuild, "");
SetModuleGuildLeader (iGuild, "");
SetModuleGuildJoiningFee (iGuild, 0);
SetModuleGuildColor (iGuild, 0);
SetModuleGuildCount (GetModuleGuildCount() - 1);
//--------------------------------------------
//Reset all messages and replies made from guild.
//--------------------------------------------
int iCount;
int iMessage = 1;
for (; iMessage <= 8; iMessage++)
{
//--------------------------------------------
//Remove message.
//--------------------------------------------
SetModuleGuildTitle (iGuild, iMessage, "");
SetModuleGuildPost (iGuild, iMessage, "");
SetModuleGuildAuthor (iGuild, iMessage, "");
//--------------------------------------------
//Remove replies associated with message.
//--------------------------------------------
for (iCount = 1; iCount <= 8; iCount++)
{
SetModuleGuildReplyTitle (iGuild, iMessage, iCount, "");
SetModuleGuildReplyPost (iGuild, iMessage, iCount, "");
SetModuleGuildReplyAuthor (iGuild, iMessage, iCount, "");
}
}
//--------------------------------------------
//Update max guild number if necessary.
//--------------------------------------------
if (iGuild == iMaxGuild)
{
int iFound = FALSE;
int iGuildPosition = iGuild;
int iMaxTerritory = GetMaxTerritoryNumber();
//--------------------------------------------
//Check for max. territory number.
//--------------------------------------------
if (iMaxTerritory > iGuild)
iGuild = iMaxTerritory;
//--------------------------------------------
//Loop through guilds and territories.
// - Set new max guild number.
// - Abandon all guild territories.
//--------------------------------------------
while (iGuild != 0)
{
//--------------------------------------------
//Check for new maximum guild number.
//--------------------------------------------
if ((iFound == FALSE) && (GetModuleGuildName (iGuild) != ""))
{
SetModuleMaxGuildNumber (iGuild);
iFound = TRUE;
}
//--------------------------------------------
//Check for any guild territories to abandon.
//--------------------------------------------
if (GetTerritoryGuildNumber (iGuild) == iGuildPosition)
{
SetTerritoryGuildNumber (iGuild, 0);
SetTerritoryName (iGuild, "");
}
//--------------------------------------------
//Reset guild faction with current guild in list.
//--------------------------------------------
SetFactionStatusBetweenGuilds (iGuildPosition, iGuild, 0);
iGuild--; /*Decrement variable.*/
}
if (!iFound) /*Check if new max guild was found.*/
SetModuleMaxGuildNumber (0);
}
}
int GetModuleMaxGuildNumber()
{
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Max_Guild_Number");
}
void SetModuleMaxGuildNumber (int iMaxGuild)
{
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Max_Guild_Number", iMaxGuild);
}
int GetFactionStatusBetweenGuilds (int iGuild1, int iGuild2)
{
//-------------------------------------------------
//Faction status key:
// -1 = Enemies (hostile towards one another).
// 0 = Neutral.
// 1 - Allies (can share guild chat messages,
// transfer gold, etc...).
//
//Note: New guilds begin neutral to everyone.
//-------------------------------------------------
return GetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Guild" + IntToString
(iGuild1) + "_Guild" + IntToString (iGuild2) + "_Faction");
}
void SetFactionStatusBetweenGuilds (int iGuild1, int iGuild2, int iFaction)
{
//-------------------------------------------------
//Faction status key:
// -1 = Enemies (hostile towards one another).
// 0 = Neutral.
// 1 - Allies (can share guild chat messages,
// transfer gold, etc...).
//
//Note: New guilds begin neutral to everyone.
//-------------------------------------------------
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Guild" + IntToString
(iGuild1) + "_Guild" + IntToString (iGuild2) + "_Faction", iFaction);
SetCampaignInt (PGS_MODULE_DATABASE_FILENAME, "Guild" + IntToString
(iGuild2) + "_Guild" + IntToString (iGuild1) + "_Faction", iFaction);
}
void SetPlayerGuildFactionToAll (object oPlayer)
{
object oLoop = GetFirstPC();
int iPlayerGuild = GetLocalInt (oPlayer, "Player_Guild_Number");
int iTargetGuild;
//--------------------------------------------
//Loop through all players online.
//
//Based on guild faction, set to hostile,
//neutral, or ally.
//--------------------------------------------
while (GetIsObjectValid (oLoop))
{
if (oLoop != oPlayer) /*No need to change player faction with self.*/
{
iTargetGuild = GetLocalInt (oLoop, "Player_Guild_Number");
if (iPlayerGuild == iTargetGuild)
SetPCLike (oPlayer, oLoop);
else
{
//----------------------------------------
//Set player faction based on guild faction.
//----------------------------------------
switch (GetFactionStatusBetweenGuilds (iPlayerGuild, iTargetGuild))
{
case -1: SetPCDislike (oPlayer, oLoop); break; /*Enemies.*/
case 0: /*Neutral.*/
SetIsTemporaryNeutral (oLoop, oPlayer);
SetIsTemporaryNeutral (oPlayer, oLoop);
break;
case 1: SetPCLike (oPlayer, oLoop); break; /*Allies.*/
}
}
}
oLoop = GetNextPC();
}
}
void ComputeGuildPlayerFactions (int iGuild)
{
object oLoop = GetFirstPC();
while (GetIsObjectValid (oLoop))
{
if (GetLocalInt (oLoop, "Player_Guild_Number") == iGuild)
SetPlayerGuildFactionToAll (oLoop);
oLoop = GetNextPC();
}
}
object GetPlayerObjectGuildLeader (int iGuild)
{
object oLoop = GetFirstPC();
//--------------------------------------------
//Loop through players looking for a match.
//--------------------------------------------
while (GetIsObjectValid (oLoop))
{
if (GetLocalInt (oLoop, "Player_Guild_Number") == iGuild) /*Match guild number.*/
if (GetName (oLoop) == GetModuleGuildLeader (iGuild)) /*Match name.*/
return oLoop;
oLoop = GetNextPC();
}
return OBJECT_INVALID; /*Leader not found.*/
}
void SetGuildFactionToEnemy (int iGuild1, int iGuild2)
{
float fDelay = PGS_FLOAT_HOSTILITY_DELAY;
string sDelay = "";
SetModuleRecentPGSActivity ("Enemies: " + GetModuleGuildName (iGuild1) +
" - " + GetModuleGuildName (iGuild2));
if (fDelay > 0.0f)
sDelay = " Faction changes will occur in " + FloatToString
(fDelay, 4, 1) + " seconds.";
//--------------------------------------------
//Inform both guilds of the new faction change.
//--------------------------------------------
SendPGSGuildNotice (iGuild1, "Guild faction with the guild '" +
GetModuleGuildName (iGuild2) + "' has changed; they are now " +
"considered enemies." + sDelay);
SendPGSGuildNotice (iGuild2, "Guild faction with the guild '" +
GetModuleGuildName (iGuild1) + "' has changed; they are now " +
"considered enemies." + sDelay);
//--------------------------------------------
//In order to properly perform the necessary
//delay's needed for setting hostility, they
//are done in a seperate function, which is
//then called via the DelayCommand function.
//
//Problems can arise if each process is
//individually given a delay.
//--------------------------------------------
DelayCommand (fDelay, SetDelayedHostilityFaction (iGuild1, iGuild2));
}
void SetGuildFactionToNeutral (int iGuild1, int iGuild2)
{
if (GetFactionStatusBetweenGuilds (iGuild1, iGuild2) == 1)
{
//--------------------------------------------
//Inform both guilds of new faction change.
//--------------------------------------------
SendPGSGuildNotice (iGuild1, "Guild faction with the guild '" +
GetModuleGuildName (iGuild2) + "' has changed; they are now " +
"considered neutral.");
SendPGSGuildNotice (iGuild2, "Guild faction with the guild '" +
GetModuleGuildName (iGuild1) + "' has changed; they are now " +
"considered neutral.");
//--------------------------------------------
//Set new factions, and recompute player faction.
//--------------------------------------------
SetFactionStatusBetweenGuilds (iGuild1, iGuild2, 0);
ComputeGuildPlayerFactions (iGuild1);
SetModuleRecentPGSActivity ("Neutral: " + GetModuleGuildName (iGuild1) +
" - " + GetModuleGuildName (iGuild2));
}
else /*Send faction request (going from neutral to ally).*/
{
object oPlayer = GetPCSpeaker();
object oLeader = GetLocalObject (oPlayer, "Object_Target");
//--------------------------------------------
//Check for errors before sending faction req.
//--------------------------------------------
if (!GetIsObjectValid (oLeader))
SendMessageToPC (oPlayer, "You were unable to locate the guild " +
"leader for the selected guild at this time.");
else if (GetPlayerSettingValue (oLeader, "Faction_Offers") == FALSE)
{
SendMessageToPC (oPlayer, GetName (oLeader) + " is currently not " +
"accepting faction offers.");
SendMessageToPC (oLeader, GetName (oPlayer) + " tried to send you " +
"a faction offer, but you are currently rejecting them.");
}
else if (GetIsInCombat (oLeader))
SendMessageToPC (oPlayer, GetName (oLeader) + " is currently in " +
"combat.");
else
{
//--------------------------------------------
//Inform sender message was successfully sent.
//--------------------------------------------
SendMessageToPC (oPlayer, "Your neutrality offer has been " +
"succesfully sent to the guild leader, " + GetName (oLeader) + ".");
SetModuleRecentPGSActivity ("Neutral: " + GetModuleGuildName
(iGuild1) + " - " + GetModuleGuildName (iGuild2));
//--------------------------------------------
//Save variables, then begin faction convo.
//--------------------------------------------
SetLocalObject (oLeader, "Object_Activator", oPlayer);
SetLocalInt (oLeader, "New_Guild_Faction", 0);
AssignCommand (oLeader, ActionStartConversation (oLeader,
"pgs_faction", TRUE, FALSE));
}
}
}
void SetGuildFactionToAlly (object oPlayer, object oLeader)
{
//--------------------------------------------
//Check for errors before sending faction req.
//--------------------------------------------
if (!GetIsObjectValid (oLeader))
SendMessageToPC (oPlayer, "You were unable to locate the guild " +
"leader. Your faction request could not be sent.");
else if (GetPlayerSettingValue (oLeader, "Faction_Offers") == FALSE)
{
SendMessageToPC (oPlayer, GetName (oLeader) + " is currently not " +
"accepting faction offers.");
SendMessageToPC (oLeader, GetName (oPlayer) + " tried to send you " +
"a faction offer, but you are currently rejecting them.");
}
else if (GetIsInCombat (oLeader))
SendMessageToPC (oPlayer, GetName (oLeader) + " is currently in combat.");
else
{
//--------------------------------------------
//Inform sender message was successfully sent.
//--------------------------------------------
SendMessageToPC (oPlayer, "Your alliance offer has been successfully " +
" sent to the guild leader, " + GetName (oLeader) + ".");
SetModuleRecentPGSActivity ("Allies: " + GetModuleGuildName
(GetLocalInt (oPlayer, "Player_Guild_Number")) + " - " +
GetModuleGuildName (GetLocalInt (oLeader, "Player_Guild_Number")));
//--------------------------------------------
//Begin the faction conversation with the leader.
//--------------------------------------------
SetLocalObject (oLeader, "Object_Activator", oPlayer);
SetLocalInt (oLeader, "New_Guild_Faction", 1);
AssignCommand (oLeader, ActionStartConversation (oLeader, "pgs_faction",
TRUE, FALSE));
}
}
void SetDelayedHostilityFaction (int iGuild1, int iGuild2)
{
SetFactionStatusBetweenGuilds (iGuild1, iGuild2, -1);
SendPGSGuildNotice (iGuild1, "Hostility settings towards " +
GetModuleGuildName (iGuild2) + " have been set.");
SendPGSGuildNotice (iGuild2, "Hostility settings towards " +
GetModuleGuildName (iGuild1) + " have been set.");
ComputeGuildPlayerFactions (iGuild1);
//--------------------------------------------
//Private guilds become public when at war.
//--------------------------------------------
SetModuleGuildPrivacyStatus (iGuild1, "public");
SetModuleGuildPrivacyStatus (iGuild2, "public");
}
void AwardTargetPlayerWithGuildXP (object oPlayer, object oTarget, int iXP)
{
int iPlayerGuild = GetLocalInt (oPlayer, "Player_Guild_Number");
//--------------------------------------------
//Make sure player and target are in same guild.
//--------------------------------------------
if (GetLocalInt (oTarget, "Player_Guild_Number") != iPlayerGuild)
SendMessageToPC (oPlayer, "You cannot award experience to non-guild " +
"members.");
else if (GetModuleGuildAwardableXP (iPlayerGuild) < iXP)
SendMessageToPC (oPlayer, "You're requesting to award more experience " +
"points than there are in your guild pool.");
else if (PGS_XP_AWARD_PER_GUILD_MEMBER == 0)
SendMessageToPC (oPlayer, "This feature is currently disabled by " +
"the module builder.");
else /*Update and award targeted player with guild experience.*/
{
SendMessageToPC (oTarget, "You've been awarded with guild experience.");
GiveXPToCreature (oTarget, iXP);
SetModuleGuildAwardableXP (iPlayerGuild, GetModuleGuildAwardableXP
(iPlayerGuild) - iXP);
}
}
// //********************************************************************\\ \\
// ||************************* END PGS FUNCTIONS ************************|| \\
// \\********************************************************************// \\