1643 lines
49 KiB
Plaintext
1643 lines
49 KiB
Plaintext
|
//////////////////////////////////////////////////////////////
|
||
|
// inc_module :: Default Include file for the module
|
||
|
// containes area-wide access functions.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "inc_validate"
|
||
|
|
||
|
// User Defined Event Constants
|
||
|
|
||
|
// Note that this value will be incremented
|
||
|
// by the team index when sent. So no other
|
||
|
// user defined event should fall within the
|
||
|
// range of EVENT_ADD_PLAYER_TO_TEAM + MaxNumTeams.
|
||
|
int EVENT_ADD_PLAYER_TO_TEAM = 200;
|
||
|
|
||
|
// Note that this value will be incremented
|
||
|
// by the team index when sent. So no other
|
||
|
// user defined event should fall within the
|
||
|
// range of EVENT_REMOVE_PLAYER_FROM_TEAM + MaxNumTeams.
|
||
|
int EVENT_REMOVE_PLAYER_FROM_TEAM = 210;
|
||
|
|
||
|
// Note that we use this number + 10, the
|
||
|
// 10 being data that we use to identify
|
||
|
// what count we're at in the countdown
|
||
|
// to start the game.
|
||
|
int EVENT_START_GAME = 220;
|
||
|
int DEFAULT_COUNTDOWN_TIME = 11;
|
||
|
|
||
|
int EVENT_UNLOCK_LEVER = 300;
|
||
|
int EVENT_ACTIVATE_GAME = 301;
|
||
|
int EVENT_DEACTIVATE_GAME = 302;
|
||
|
|
||
|
// Game Initialization Functions
|
||
|
void RemoveAllPlotItems( object oPlayer );
|
||
|
int IncrementNumPlayers();
|
||
|
int DecrementNumPlayers();
|
||
|
void IncrementNumLockedTeams();
|
||
|
void DecrementNumLockedTeams();
|
||
|
void StartCountDown();
|
||
|
void CancelCountDown();
|
||
|
void RestartModule();
|
||
|
void InitializeModule();
|
||
|
void IntializePlayerForGame( object oPlayer );
|
||
|
void MoveMeToLocation( location lLoc );
|
||
|
void MovePlayerToStartLocation( object oPlayer );
|
||
|
|
||
|
// Map/Level Functionality
|
||
|
void SetNumMaps( int nNumMaps );
|
||
|
int GetNumMaps();
|
||
|
void InitializeMapList();
|
||
|
void SetActiveBattleMap( int nMapIndex );
|
||
|
int GetActiveBattleMap();
|
||
|
|
||
|
// Battlemaster Functions
|
||
|
void SetBattleMaster( object oPlayer );
|
||
|
object GetBattleMaster();
|
||
|
void GetNewBattleMaster();
|
||
|
|
||
|
// Rule Constants
|
||
|
int RULE_ALLOWED_COST = 0;
|
||
|
int RULE_ALLOWED_LEVEL = 1;
|
||
|
int RULE_NUM_TEAMS = 2;
|
||
|
int RULE_NUM_GAMES = 3;
|
||
|
void BroadcastRuleChange( int nRule, int nChange );
|
||
|
|
||
|
// Game Specific Functionality
|
||
|
void CheckAllPlayersOut();
|
||
|
void CheckPlayerOut( object oPlayer );
|
||
|
int CheckPlayerIn( object oPlayer );
|
||
|
int GetPlayerCheckedIn( object oPlayer );
|
||
|
void ApplyFlagEffect( object oPlayer );
|
||
|
void RemoveAllEffects( object oPlayer );
|
||
|
void RemoveAllGoldFromPlayer( object oPlayer );
|
||
|
location GetGameStartLocation( int nMapIndex, object oPlayer );
|
||
|
void MovePlayerToGameStartLocation( int nMapIndex, object oPlayer );
|
||
|
|
||
|
// Game State Functionality
|
||
|
void SetGameStarted( int bGameStarted );
|
||
|
int GetGameStarted();
|
||
|
void StartGame();
|
||
|
void EndTheGame();
|
||
|
void IncrementNumGamesPlayed();
|
||
|
void RewardWinningTeam(int nTeam);
|
||
|
|
||
|
// Module Options
|
||
|
int OPTION_ALLOWED_ITEM_COST = 0;
|
||
|
int OPTION_ALLOWED_LEVEL = 1;
|
||
|
int OPTION_RANDOM_START_LOC = 2;
|
||
|
int OPTION_NUM_TEAMS = 3;
|
||
|
int OPTION_NUM_GAMES = 4;
|
||
|
void SetGameOption( int nOption, int nData );
|
||
|
int GetGameOption( int nOption );
|
||
|
|
||
|
// Team Specific Functionality
|
||
|
|
||
|
// Team Constants
|
||
|
int TEAM_BLUE = 0; // Blue
|
||
|
int TEAM_RED = 1; // Red
|
||
|
int TEAM_GOLD = 2; // Gold
|
||
|
int TEAM_PURPLE = 3; // Purple
|
||
|
|
||
|
// Team Functions
|
||
|
int GetNumTeams();
|
||
|
int GetMaxTeams();
|
||
|
void SelectTeam( object oPlayer );
|
||
|
void RandomizeTeamStartLocations();
|
||
|
location GetTeamStartLocation( object oPlayer );
|
||
|
int AddPlayerToTeam( int nTeam, object oPlayer );
|
||
|
int RemovePlayerFromTeam( int nTeam, object oPlayer );
|
||
|
int GetPlayerTeam( object oPlayer );
|
||
|
void UnlockAllTeams();
|
||
|
void SetTeamLocked( int nTeam, int bLocked );
|
||
|
int GetTeamLocked( int nTeam );
|
||
|
void BroadcastTeamLockedState( int nTeam, int bLocked );
|
||
|
void ApplyLockedEffect( object oLever );
|
||
|
void RemoveLockedEffect( object oLever );
|
||
|
string GetTeamName(int nTeam);
|
||
|
|
||
|
// Team Data Constants
|
||
|
int TEAM_NUM_PLAYERS = 0;
|
||
|
int TEAM_LOCKED_STATE = 1;
|
||
|
int TEAM_START_LOC_INDEX = 2;
|
||
|
int SetTeamData( int nTeam, int nDataType, int nData );
|
||
|
int GetTeamData( int nTeam, int nDataType );
|
||
|
|
||
|
// Observer Mode Constants
|
||
|
string OBSERVER_MODE = "Observer";
|
||
|
|
||
|
// Observer Mode Functions
|
||
|
void ApplyObserverModeEffects(object oPlayer);
|
||
|
int GetIsObserver(object oPlayer);
|
||
|
void SetObserver(object oPlayer, int nStatus);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RemoveAllPlotItems()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/14/02
|
||
|
// Description: Removes all plot items from a creature.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RemoveAllPlotItems( object oPlayer )
|
||
|
{
|
||
|
object oItem;
|
||
|
int nCount;
|
||
|
|
||
|
oItem = GetFirstItemInInventory(oPlayer);
|
||
|
while ( GetIsObjectValid(oItem) == TRUE )
|
||
|
{
|
||
|
if ( GetPlotFlag(oItem) == TRUE )
|
||
|
{
|
||
|
DestroyObject(oItem);
|
||
|
}
|
||
|
|
||
|
oItem = GetNextItemInInventory(oPlayer);
|
||
|
}
|
||
|
|
||
|
// Now iterate through each inventory slot and compute
|
||
|
// the cost of the item (if one exists in that slot)
|
||
|
// - BKH - Jun/17/02
|
||
|
for ( nCount = 0; nCount < NUM_INVENTORY_SLOTS; nCount++ )
|
||
|
{
|
||
|
oItem = GetItemInSlot(nCount,oPlayer);
|
||
|
if ( GetPlotFlag(oItem) == TRUE )
|
||
|
{
|
||
|
DestroyObject(oItem);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IncrementNumPlayers()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Increments the number of players in the module.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int IncrementNumPlayers()
|
||
|
{
|
||
|
int nNumPlayers;
|
||
|
nNumPlayers = GetLocalInt(GetModule(),"m_nNumPlayers");
|
||
|
++nNumPlayers;
|
||
|
|
||
|
SetLocalInt(GetModule(),"m_nNumPlayers",nNumPlayers);
|
||
|
|
||
|
return nNumPlayers;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// DecrementNumPlayers()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Decrements the number of players in the module.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int DecrementNumPlayers()
|
||
|
{
|
||
|
int nNumPlayers;
|
||
|
nNumPlayers = GetLocalInt(GetModule(),"m_nNumPlayers");
|
||
|
--nNumPlayers;
|
||
|
|
||
|
SetLocalInt(GetModule(),"m_nNumPlayers",nNumPlayers);
|
||
|
|
||
|
return nNumPlayers;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IncrementNumLockedTeams()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Increments the number of locked teams.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void IncrementNumLockedTeams()
|
||
|
{
|
||
|
int nNumLockedTeams;
|
||
|
|
||
|
nNumLockedTeams = GetLocalInt(GetModule(),"m_nNumLockedTeams");
|
||
|
++nNumLockedTeams;
|
||
|
|
||
|
SetLocalInt(GetModule(),"m_nNumLockedTeams",nNumLockedTeams);
|
||
|
|
||
|
if ( nNumLockedTeams == GetNumTeams() )
|
||
|
{
|
||
|
PrintString("The number of locked teams is equal to the total number of teams.");
|
||
|
PrintString("Starting Countdown.");
|
||
|
StartCountDown();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// DecrementNumLockedTeams()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Decrements the number of locked teams.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void DecrementNumLockedTeams()
|
||
|
{
|
||
|
int nNumLockedTeams;
|
||
|
int bGamePending;
|
||
|
|
||
|
bGamePending = GetLocalInt(GetModule(),"m_bGamePending");
|
||
|
|
||
|
nNumLockedTeams = GetLocalInt(GetModule(),"m_nNumLockedTeams");
|
||
|
if ( nNumLockedTeams == GetNumTeams() &&
|
||
|
bGamePending == TRUE )
|
||
|
{
|
||
|
CancelCountDown();
|
||
|
}
|
||
|
|
||
|
--nNumLockedTeams;
|
||
|
SetLocalInt(GetModule(),"m_nNumLockedTeams",nNumLockedTeams);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// StartCountDown()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Starts the countdown.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void StartCountDown()
|
||
|
{
|
||
|
event evUserDefined;
|
||
|
|
||
|
SetLocalInt(GetModule(),"m_bGamePending",TRUE);
|
||
|
|
||
|
evUserDefined = EventUserDefined(EVENT_START_GAME + DEFAULT_COUNTDOWN_TIME);
|
||
|
SignalEvent(GetModule(),evUserDefined);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// CancelCountDown()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Cancels the countdown.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void CancelCountDown()
|
||
|
{
|
||
|
SetLocalInt(GetModule(),"m_bCancelCountDown",TRUE);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// BroadcastCancelCountDown()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Broadcasts out the cancel message for the
|
||
|
// countdown.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void BroadcastCancelCountDown()
|
||
|
{
|
||
|
object oPlayer;
|
||
|
string sCancelMessage;
|
||
|
|
||
|
sCancelMessage = "Countdown to game start cancelled.";
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
SendMessageToPC(oPlayer,sCancelMessage);
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// BroadcastCountDownTime()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Broadcasts out the countdown time remaining.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void BroadcastCountDownTime( int nTimeRemaining )
|
||
|
{
|
||
|
object oPlayer;
|
||
|
string sTimeMessage;
|
||
|
|
||
|
if ( nTimeRemaining > 0 )
|
||
|
{
|
||
|
sTimeMessage = IntToString(nTimeRemaining) + " second(s) until Game Start...";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sTimeMessage = "Game Starting...";
|
||
|
}
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
SendMessageToPC(oPlayer,sTimeMessage);
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RestartModule()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Resets the entire module state, pulling all
|
||
|
// players back to the main spawn area and removing
|
||
|
// all effects on those players.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RestartModule()
|
||
|
{
|
||
|
object oPlayer, oArea;
|
||
|
object oStartArea, oStartWaypoint;
|
||
|
int nTeam;
|
||
|
|
||
|
oStartWaypoint = GetObjectByTag("irestrict_start");
|
||
|
oStartArea = GetArea(oStartWaypoint);
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
if ( GetArea(oPlayer) != oStartArea )
|
||
|
{
|
||
|
CheckPlayerOut(oPlayer);
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
|
||
|
RemovePlayerFromTeam(nTeam,oPlayer);
|
||
|
AssignCommand(oPlayer,MoveMeToLocation(GetLocation(oStartWaypoint)));
|
||
|
}
|
||
|
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// InitializeModule()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Initializes the module with some default
|
||
|
// values.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void InitializeModule()
|
||
|
{
|
||
|
InitializeMapList();
|
||
|
SetActiveBattleMap(0);
|
||
|
|
||
|
SetGameOption(OPTION_NUM_TEAMS,2);
|
||
|
SetGameOption(OPTION_NUM_GAMES,5);
|
||
|
SetGameOption(OPTION_ALLOWED_ITEM_COST,DEFAULT_ITEM_COST_RESTRICTION);
|
||
|
SetGameOption(OPTION_ALLOWED_LEVEL,DEFAULT_LEVEL_RESTRICTION);
|
||
|
RandomizeTeamStartLocations();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetNumMaps()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Sets the number of maps in the game.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetNumMaps( int nNumMaps )
|
||
|
{
|
||
|
SetLocalInt(GetModule(),"m_nNumMaps",nNumMaps);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetNumMaps()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Returns the number of maps.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetNumMaps()
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nNumMaps");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// InitializeModule()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Initializes the module with some default
|
||
|
// values.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void InitializeMapList()
|
||
|
{
|
||
|
string sVarName;
|
||
|
object oArea;
|
||
|
int nCount, nNumLevels;
|
||
|
|
||
|
nNumLevels = 2;
|
||
|
SetNumMaps(nNumLevels);
|
||
|
|
||
|
// Hardcoded Map List
|
||
|
for ( nCount = 0; nCount < nNumLevels; nCount++ )
|
||
|
{
|
||
|
sVarName = "Level" + IntToString(nCount);
|
||
|
|
||
|
oArea = GetObjectByTag(sVarName);
|
||
|
SetLocalObject(GetModule(),sVarName,oArea);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetMapByIndex()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Returns the object of the currently active
|
||
|
// area.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
object GetMapByIndex( int nMapIndex )
|
||
|
{
|
||
|
string sVarName;
|
||
|
|
||
|
if ( nMapIndex > GetNumMaps() - 1 )
|
||
|
{
|
||
|
return OBJECT_INVALID;
|
||
|
}
|
||
|
|
||
|
sVarName = "Level" + IntToString(nMapIndex);
|
||
|
|
||
|
return GetLocalObject(GetModule(),sVarName);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetActiveBattleMap()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Sets the index for the active battle map.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetActiveBattleMap( int nMapIndex )
|
||
|
{
|
||
|
SetLocalInt(GetModule(),"m_nActiveMap",nMapIndex);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetActiveBattleMap()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Gets the index for the active battle map.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetActiveBattleMap()
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nActiveMap");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetBattleMaster()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Sets up the battlemaster and signals a message
|
||
|
// to that player. These functions should only
|
||
|
// ever be run on the module. ie: module scripts.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetBattleMaster( object oPlayer )
|
||
|
{
|
||
|
SetLocalObject(GetModule(),"m_oBattleMaster",oPlayer);
|
||
|
AssignCommand(oPlayer,SendMessageToPC(oPlayer,"You are now the Battle Master and may change the game options."));
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetBattleMaster()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Gets the battlemaster.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
object GetBattleMaster()
|
||
|
{
|
||
|
return GetLocalObject(GetModule(),"m_oBattleMaster");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetNewBattleMaster()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Gets a new battle master.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void GetNewBattleMaster()
|
||
|
{
|
||
|
object oPlayer;
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
SetLocalObject(GetModule(),"m_oBattleMaster",oPlayer);
|
||
|
AssignCommand(oPlayer,SendMessageToPC(oPlayer,"You are now the Battle Master and may change the game options."));
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// InitializePlayerForGame()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Initializes the player with a team and sets
|
||
|
// up the base statistics values for that player.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void InitializePlayerForGame( object oPlayer )
|
||
|
{
|
||
|
PrintString("Selecting a team for player: " + GetName(oPlayer));
|
||
|
SelectTeam(oPlayer);
|
||
|
|
||
|
// Add stat tracking later
|
||
|
// InitializeStats(oPlayer);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// MoveMeToLocation()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/14/02
|
||
|
// Description: Moves this creature to their designated start
|
||
|
// location.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void MoveMeToLocation( location lLoc )
|
||
|
{
|
||
|
ClearAllActions();
|
||
|
JumpToLocation(lLoc);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// MovePlayerToStartLocation()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Moves a player to their designated start
|
||
|
// location.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void MovePlayerToStartLocation( object oPlayer )
|
||
|
{
|
||
|
location lStartLoc;
|
||
|
|
||
|
lStartLoc = GetTeamStartLocation(oPlayer);
|
||
|
AssignCommand(oPlayer,MoveMeToLocation(lStartLoc));
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// BroadcastRuleChange()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Broadcasts out a message to all players that
|
||
|
// there has been a rule change.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void BroadcastRuleChange( int nRule, int nChange )
|
||
|
{
|
||
|
object oPlayer;
|
||
|
string sRuleChange;
|
||
|
|
||
|
if ( nRule == RULE_ALLOWED_COST )
|
||
|
{
|
||
|
if ( nChange == ITEM_COST_UNLIMITED )
|
||
|
{
|
||
|
sRuleChange = "The Allowed Item Cost has been changed to: Unlimited";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sRuleChange = "The Allowed Item Cost has been changed to: " + IntToString(nChange);
|
||
|
}
|
||
|
}
|
||
|
else if ( nRule == RULE_ALLOWED_LEVEL )
|
||
|
{
|
||
|
if ( nChange == LEVEL_LIMIT_NONE )
|
||
|
{
|
||
|
sRuleChange = "The Allowed Level has been changed to: Unlimited";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sRuleChange = "The Allowed Level has been changed to: " + IntToString(nChange);
|
||
|
}
|
||
|
}
|
||
|
else if ( nRule == RULE_NUM_TEAMS )
|
||
|
{
|
||
|
sRuleChange = "There are now: " + IntToString(nChange) + " teams available";
|
||
|
}
|
||
|
else if ( nRule == RULE_NUM_GAMES )
|
||
|
{
|
||
|
sRuleChange = "The game will now go to: " + IntToString(nChange) + " before switching maps";
|
||
|
}
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
SendMessageToPC(oPlayer,sRuleChange);
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// CheckAllPlayersOut()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/13/02
|
||
|
// Description: Checks all players out.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void CheckAllPlayersOut()
|
||
|
{
|
||
|
object oPlayer;
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
CheckPlayerOut(oPlayer);
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// CheckPlayerOut()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Checks a player out.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void CheckPlayerOut( object oPlayer )
|
||
|
{
|
||
|
PrintString("Player: " + GetName(oPlayer) + " Checked out.");
|
||
|
SetLocalInt(oPlayer,"m_bCheckedIn",FALSE);
|
||
|
RemoveAllEffects(oPlayer);
|
||
|
|
||
|
SetCommandable(TRUE, oPlayer);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// CheckPlayerIn()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Checks a player in.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int CheckPlayerIn( object oPlayer )
|
||
|
{
|
||
|
int nTeam;
|
||
|
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
|
||
|
if ( GetTeamLocked(nTeam) == FALSE )
|
||
|
{
|
||
|
PrintString("Player: " + GetName(oPlayer) + " Checked in.");
|
||
|
SetLocalInt(oPlayer,"m_bCheckedIn",TRUE);
|
||
|
ApplyFlagEffect(oPlayer);
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
PrintString("The Team Is Locked. Cannot Check Player In.");
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetPlayerCheckedIn()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Returns whether the player is checked in or
|
||
|
// not.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetPlayerCheckedIn( object oPlayer )
|
||
|
{
|
||
|
return GetLocalInt(oPlayer,"m_bCheckedIn");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// ApplyFlagEffect()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Applies the team specific flag effect to the
|
||
|
// player.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void ApplyFlagEffect( object oPlayer )
|
||
|
{
|
||
|
int nTeam, nVisEffect;
|
||
|
effect eFlagEffect;
|
||
|
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
if ( nTeam == TEAM_BLUE )
|
||
|
{
|
||
|
nVisEffect = VFX_DUR_FLAG_BLUE;
|
||
|
}
|
||
|
else if ( nTeam == TEAM_RED )
|
||
|
{
|
||
|
nVisEffect = VFX_DUR_FLAG_RED;
|
||
|
}
|
||
|
else if ( nTeam == TEAM_GOLD )
|
||
|
{
|
||
|
nVisEffect = VFX_DUR_FLAG_PURPLE;
|
||
|
}
|
||
|
else if ( nTeam == TEAM_PURPLE )
|
||
|
{
|
||
|
nVisEffect = VFX_DUR_FLAG_GOLD;
|
||
|
}
|
||
|
|
||
|
eFlagEffect = EffectVisualEffect(nVisEffect);
|
||
|
eFlagEffect = SupernaturalEffect(eFlagEffect);
|
||
|
|
||
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eFlagEffect,oPlayer);
|
||
|
PlaySound("as_mg_telepout1");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RemoveAllEffects()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Removes all non-permanent/innate/equipped
|
||
|
// effects from the specified player.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RemoveAllEffects( object oPlayer )
|
||
|
{
|
||
|
effect eEffect;
|
||
|
eEffect = GetFirstEffect(oPlayer);
|
||
|
|
||
|
while ( GetIsEffectValid(eEffect) == TRUE )
|
||
|
{
|
||
|
if ( GetEffectDurationType(eEffect) == DURATION_TYPE_TEMPORARY ||
|
||
|
GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT )
|
||
|
{
|
||
|
RemoveEffect(oPlayer,eEffect);
|
||
|
}
|
||
|
|
||
|
eEffect = GetNextEffect(oPlayer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RemoveAllGoldFromPlayer()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Removes all gold from the specified player.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RemoveAllGoldFromPlayer( object oPlayer )
|
||
|
{
|
||
|
TakeGoldFromCreature(GetGold(oPlayer),oPlayer,TRUE);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetGameStarted()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Sets the game state as started.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetGameStarted( int bGameStarted )
|
||
|
{
|
||
|
SetLocalInt(GetModule(),"m_bGameStarted",bGameStarted);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetGameStarted()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Returns TRUE if the game has started already.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetGameStarted()
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_bGameStarted");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// StartGame()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Starts the game.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void StartGame()
|
||
|
{
|
||
|
object oPlayer;
|
||
|
int nMapIndex;
|
||
|
event evStartGame;
|
||
|
|
||
|
if ( GetGameOption(OPTION_RANDOM_START_LOC) == TRUE )
|
||
|
{
|
||
|
RandomizeTeamStartLocations();
|
||
|
}
|
||
|
|
||
|
// Turn off the game pending flag
|
||
|
SetLocalInt(GetModule(),"m_bGamePending",FALSE);
|
||
|
|
||
|
nMapIndex = GetActiveBattleMap();
|
||
|
|
||
|
// Start checking to see if the players have
|
||
|
// all entered the arena.
|
||
|
evStartGame = EventUserDefined(EVENT_ACTIVATE_GAME);
|
||
|
SignalEvent(GetModule(),evStartGame);
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
if ( GetPlayerCheckedIn(oPlayer) == TRUE )
|
||
|
{
|
||
|
MovePlayerToGameStartLocation(nMapIndex,oPlayer);
|
||
|
}
|
||
|
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// EndTheGame()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/12/02
|
||
|
// Description: Ends the game and resets the levers locking
|
||
|
// the teams.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void EndTheGame()
|
||
|
{
|
||
|
int nCount;
|
||
|
string sAreaTag;
|
||
|
object oArea;
|
||
|
|
||
|
PrintString("Game Ended.");
|
||
|
|
||
|
SetGameStarted(FALSE);
|
||
|
|
||
|
// Signal an event to each team's HQ to unlock the
|
||
|
// levers.
|
||
|
for ( nCount = 0; nCount < GetMaxTeams(); nCount++ )
|
||
|
{
|
||
|
sAreaTag = "Team_" + IntToString(nCount) + "_HQ";
|
||
|
oArea = GetObjectByTag(sAreaTag);
|
||
|
|
||
|
if ( GetIsObjectValid(oArea) == TRUE )
|
||
|
{
|
||
|
SignalEvent(oArea,EventUserDefined(EVENT_UNLOCK_LEVER));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
UnlockAllTeams();
|
||
|
CheckAllPlayersOut();
|
||
|
|
||
|
IncrementNumGamesPlayed();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// IncrementNumGamesPlayed()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/14/02
|
||
|
// Description: Increments the number of games played and
|
||
|
// increments the active map if the number of
|
||
|
// games played exceeds the specified amount.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void IncrementNumGamesPlayed()
|
||
|
{
|
||
|
int nNumGamesPlayed;
|
||
|
|
||
|
nNumGamesPlayed = GetLocalInt(GetModule(),"m_nNumGamesPlayed");
|
||
|
++nNumGamesPlayed;
|
||
|
|
||
|
if ( nNumGamesPlayed >= GetGameOption(OPTION_NUM_GAMES) )
|
||
|
{
|
||
|
if ( (GetActiveBattleMap() + 1) < GetNumMaps() )
|
||
|
{
|
||
|
SetActiveBattleMap(GetActiveBattleMap() + 1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetActiveBattleMap(0);
|
||
|
}
|
||
|
|
||
|
nNumGamesPlayed = 0;
|
||
|
}
|
||
|
|
||
|
SetLocalInt(GetModule(),"m_nNumGamesPlayed",nNumGamesPlayed);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RewardWinningTeam()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Noel Borstad
|
||
|
// Created On: June 13 2002
|
||
|
// Description:
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RewardWinningTeam(int nTeam)
|
||
|
{
|
||
|
string sMessage = GetTeamName(nTeam) + " Team Wins!";
|
||
|
PlaySound("as_cv_ta-da1");
|
||
|
|
||
|
object oPC = GetFirstPC();
|
||
|
while (GetIsObjectValid(oPC))
|
||
|
{
|
||
|
SendMessageToPC(oPC, sMessage);
|
||
|
if ( GetPlayerTeam(oPC) == nTeam )
|
||
|
{
|
||
|
GiveGoldToCreature(oPC, 50 * GetHitDice(oPC) );
|
||
|
AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_CHEER) );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GiveGoldToCreature(oPC, 25 * GetHitDice(oPC) );
|
||
|
AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_CUSS) );
|
||
|
}
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetGameOption()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Starts the game.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetGameOption( int nOption )
|
||
|
{
|
||
|
if ( nOption == OPTION_ALLOWED_ITEM_COST )
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nAllowedItemCost");
|
||
|
}
|
||
|
else if ( nOption == OPTION_ALLOWED_LEVEL )
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nAllowedLevel");
|
||
|
}
|
||
|
else if ( nOption == OPTION_RANDOM_START_LOC )
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_bRandomStartLoc");
|
||
|
}
|
||
|
else if ( nOption == OPTION_NUM_TEAMS )
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nNumTeams");
|
||
|
}
|
||
|
else if ( nOption == OPTION_NUM_GAMES )
|
||
|
{
|
||
|
return GetLocalInt(GetModule(),"m_nNumGames");
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetGameOption()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Sets the game option.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetGameOption( int nOption, int nOptionType )
|
||
|
{
|
||
|
if ( nOption == OPTION_ALLOWED_ITEM_COST )
|
||
|
{
|
||
|
PrintString("Setting Game Option Allowed Cost To: " + IntToString(nOptionType));
|
||
|
SetLocalInt(GetModule(),"m_nAllowedItemCost",nOptionType);
|
||
|
BroadcastRuleChange(RULE_ALLOWED_COST,nOptionType);
|
||
|
}
|
||
|
else if ( nOption == OPTION_ALLOWED_LEVEL )
|
||
|
{
|
||
|
PrintString("Setting Game Option Allowed Level To: " + IntToString(nOptionType));
|
||
|
SetLocalInt(GetModule(),"m_nAllowedLevel",nOptionType);
|
||
|
BroadcastRuleChange(RULE_ALLOWED_LEVEL,nOptionType);
|
||
|
}
|
||
|
else if ( nOption == OPTION_RANDOM_START_LOC )
|
||
|
{
|
||
|
PrintString("Setting Game Option Randomized Start Locations To: " + IntToString(nOptionType));
|
||
|
SetLocalInt(GetModule(),"m_bRandomStartLoc",nOptionType);
|
||
|
}
|
||
|
else if ( nOption == OPTION_NUM_TEAMS )
|
||
|
{
|
||
|
PrintString("Setting Game Option Num Teams To: " + IntToString(nOptionType));
|
||
|
SetLocalInt(GetModule(),"m_nNumTeams",nOptionType);
|
||
|
BroadcastRuleChange(RULE_NUM_TEAMS,nOptionType);
|
||
|
}
|
||
|
else if ( nOption == OPTION_NUM_GAMES )
|
||
|
{
|
||
|
PrintString("Setting Game Option Num Games To: " + IntToString(nOptionType));
|
||
|
SetLocalInt(GetModule(),"m_nNumGames",nOptionType);
|
||
|
BroadcastRuleChange(RULE_NUM_GAMES,nOptionType);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetGameStartLocation()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Moves the player to the start location of the
|
||
|
// currently active battlemap.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
location GetGameStartLocation( int nMapIndex, object oPlayer )
|
||
|
{
|
||
|
object oArea, oWaypoint;
|
||
|
string sSpawnTag;
|
||
|
int nTeam;
|
||
|
int nTeamSpawnIndex;
|
||
|
location lStartLoc;
|
||
|
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
nTeamSpawnIndex = GetTeamData(nTeam,TEAM_START_LOC_INDEX);
|
||
|
sSpawnTag = "Spawn" + IntToString(nTeamSpawnIndex);
|
||
|
|
||
|
oArea = GetMapByIndex(nMapIndex);
|
||
|
|
||
|
if ( GetIsObjectValid(oArea) == TRUE )
|
||
|
{
|
||
|
oWaypoint = GetFirstObjectInArea(oArea);
|
||
|
while ( GetIsObjectValid(oWaypoint) == TRUE )
|
||
|
{
|
||
|
if ( GetObjectType(oWaypoint) == OBJECT_TYPE_WAYPOINT &&
|
||
|
GetTag(oWaypoint) == sSpawnTag )
|
||
|
{
|
||
|
lStartLoc = GetLocation(oWaypoint);
|
||
|
return lStartLoc;
|
||
|
}
|
||
|
|
||
|
oWaypoint = GetNextObjectInArea(oArea);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return lStartLoc;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// MovePlayerToGameStartLocation()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Moves the player to the start location of the
|
||
|
// currently active battlemap.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void MovePlayerToGameStartLocation( int nMapIndex, object oPlayer )
|
||
|
{
|
||
|
location lStartLoc;
|
||
|
object oPC;
|
||
|
int nTeam;
|
||
|
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
oPC = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPC) == TRUE )
|
||
|
{
|
||
|
if ( GetPlayerTeam(oPC) == nTeam )
|
||
|
{
|
||
|
SetPCLike(oPlayer,oPC);
|
||
|
SetPCLike(oPC,oPlayer);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetPCDislike(oPlayer,oPC);
|
||
|
SetPCDislike(oPC,oPlayer);
|
||
|
}
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
|
||
|
lStartLoc = GetGameStartLocation(nMapIndex,oPlayer);
|
||
|
AssignCommand(oPlayer,MoveMeToLocation(lStartLoc));
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetNumTeams()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Gets the number of teams in the game.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetNumTeams()
|
||
|
{
|
||
|
return GetGameOption(OPTION_NUM_TEAMS);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetMaxTeams()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Gets the maximum number of teams.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetMaxTeams()
|
||
|
{
|
||
|
return DEFAULT_MAX_TEAMS;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SelectTeam()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Selects a team for the player based on the
|
||
|
// number of players on each team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SelectTeam( object oPlayer )
|
||
|
{
|
||
|
int nCount, nNumTeams, nMinTeam;
|
||
|
int nNumPlayers, nMinPlayers;
|
||
|
|
||
|
nMinTeam = -1;
|
||
|
nMinPlayers = 100;
|
||
|
|
||
|
nNumTeams = GetNumTeams();
|
||
|
|
||
|
for ( nCount = 0; nCount < nNumTeams; nCount++ )
|
||
|
{
|
||
|
nNumPlayers = GetTeamData(nCount,TEAM_NUM_PLAYERS);
|
||
|
|
||
|
if ( nNumPlayers < nMinPlayers )
|
||
|
{
|
||
|
nMinPlayers = nNumPlayers;
|
||
|
nMinTeam = nCount;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
AddPlayerToTeam(nMinTeam,oPlayer);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RandomizeTeamStartLocations()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/11/02
|
||
|
// Description: Randomizes all the team start locations.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RandomizeTeamStartLocations()
|
||
|
{
|
||
|
int nCount, nTeamIndex;
|
||
|
int bIndexUsed;
|
||
|
int nStartIndex;
|
||
|
|
||
|
for ( nCount = 0; nCount < GetMaxTeams(); nCount++ )
|
||
|
{
|
||
|
SetTeamData(nCount,TEAM_START_LOC_INDEX,-1);
|
||
|
}
|
||
|
|
||
|
nCount = 0;
|
||
|
while ( nCount < GetMaxTeams() )
|
||
|
{
|
||
|
nStartIndex = Random(GetMaxTeams());
|
||
|
|
||
|
bIndexUsed = FALSE;
|
||
|
for ( nTeamIndex = 0; nTeamIndex < GetMaxTeams(); nTeamIndex++ )
|
||
|
{
|
||
|
if ( GetTeamData(nTeamIndex,TEAM_START_LOC_INDEX) == nStartIndex )
|
||
|
{
|
||
|
bIndexUsed = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( bIndexUsed == FALSE )
|
||
|
{
|
||
|
SetTeamData(nCount,TEAM_START_LOC_INDEX,nStartIndex);
|
||
|
nCount++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetTeamStartLocation()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Returns the location of the starting waypoint
|
||
|
// in pre-arena area.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
location GetTeamStartLocation( object oPlayer )
|
||
|
{
|
||
|
int nTeam;
|
||
|
string sWaypointTag;
|
||
|
object oWaypoint;
|
||
|
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
|
||
|
sWaypointTag = "WP_" + IntToString(nTeam) + "_Start";
|
||
|
|
||
|
oWaypoint = GetObjectByTag( sWaypointTag );
|
||
|
return GetLocation(oWaypoint);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// AddPlayerToTeam()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Adds a player to the specified team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void AddPlayerToTeam( int nTeam, object oPlayer )
|
||
|
{
|
||
|
int nNumPlayers, nCount;
|
||
|
string sAreaTag;
|
||
|
object oArea;
|
||
|
|
||
|
nNumPlayers = GetTeamData(nTeam,TEAM_NUM_PLAYERS);
|
||
|
|
||
|
SetLocalInt(oPlayer,"m_nTeam",nTeam);
|
||
|
|
||
|
SetTeamData(nTeam,TEAM_NUM_PLAYERS,nNumPlayers + 1);
|
||
|
|
||
|
// Signal an event to each team's HQ to add a counter
|
||
|
// for the number of players on a team.
|
||
|
for ( nCount = 0; nCount < GetMaxTeams(); nCount++ )
|
||
|
{
|
||
|
sAreaTag = "Team_" + IntToString(nCount) + "_HQ";
|
||
|
oArea = GetObjectByTag(sAreaTag);
|
||
|
|
||
|
if ( GetIsObjectValid(oArea) == TRUE )
|
||
|
{
|
||
|
SignalEvent(oArea,EventUserDefined(EVENT_ADD_PLAYER_TO_TEAM + nTeam));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Loop through all other players in the game
|
||
|
// and set up the likes/dislikes appropriately.
|
||
|
object oPC;
|
||
|
|
||
|
oPC = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPC) == TRUE )
|
||
|
{
|
||
|
if ( oPC != oPlayer )
|
||
|
{
|
||
|
if ( GetPlayerTeam(oPC) == nTeam )
|
||
|
{
|
||
|
SetPCLike(oPlayer,oPC);
|
||
|
SetPCLike(oPC,oPlayer);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetPCDislike(oPlayer,oPC);
|
||
|
SetPCDislike(oPC,oPlayer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RemovePlayerFromTeam()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Removes a player to the specified team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RemovePlayerFromTeam( int nTeam, object oPlayer )
|
||
|
{
|
||
|
int nNumPlayers, nCount;
|
||
|
string sAreaTag;
|
||
|
object oArea;
|
||
|
|
||
|
SetLocalInt(oPlayer,"m_nTeam",-1);
|
||
|
|
||
|
nNumPlayers = GetTeamData(nTeam,TEAM_NUM_PLAYERS);
|
||
|
SetTeamData(nTeam,TEAM_NUM_PLAYERS,nNumPlayers - 1);
|
||
|
|
||
|
// Signal an event to each team's HQ to remove a counter
|
||
|
// for the number of players on a team.
|
||
|
for ( nCount = 0; nCount < GetMaxTeams(); nCount++ )
|
||
|
{
|
||
|
sAreaTag = "Team_" + IntToString(nCount) + "_HQ";
|
||
|
oArea = GetObjectByTag(sAreaTag);
|
||
|
|
||
|
if ( GetIsObjectValid(oArea) == TRUE )
|
||
|
{
|
||
|
SignalEvent(oArea,EventUserDefined(EVENT_REMOVE_PLAYER_FROM_TEAM + nTeam));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetPlayerTeam()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Returns the team of the specified player.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetPlayerTeam( object oPlayer )
|
||
|
{
|
||
|
return GetLocalInt(oPlayer,"m_nTeam");
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// UnlockAllTeams()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/13/02
|
||
|
// Descriptin: Unlocks all the teams.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void UnlockAllTeams()
|
||
|
{
|
||
|
int nCount;
|
||
|
|
||
|
for ( nCount = 0; nCount < GetNumTeams(); nCount++ )
|
||
|
{
|
||
|
SetTeamLocked(nCount,FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetTeamLocked()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Locks the specified team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetTeamLocked( int nTeam, int bLocked )
|
||
|
{
|
||
|
SetTeamData(nTeam,TEAM_LOCKED_STATE,bLocked);
|
||
|
BroadcastTeamLockedState(nTeam,bLocked);
|
||
|
|
||
|
if ( bLocked == TRUE )
|
||
|
{
|
||
|
PrintString("Team: " + GetTeamName(nTeam) + " is now locked.");
|
||
|
IncrementNumLockedTeams();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
PrintString("Team: " + GetTeamName(nTeam) + " is now unlocked.");
|
||
|
DecrementNumLockedTeams();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetTeamLocked()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Locks the specified team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetTeamLocked( int nTeam )
|
||
|
{
|
||
|
return GetTeamData(nTeam,TEAM_LOCKED_STATE);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// BroadcastTeamLockedState()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Broadcasts a message to all players on a
|
||
|
// specific team that the team has been set to
|
||
|
// the specified lock state.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void BroadcastTeamLockedState( int nTeam, int bLocked )
|
||
|
{
|
||
|
object oPlayer;
|
||
|
string sLockedMessage;
|
||
|
|
||
|
if ( bLocked == TRUE )
|
||
|
{
|
||
|
sLockedMessage = "Your team has been locked. It is no longer possible to check in.";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sLockedMessage = "Your team has been un-locked. It is once again possible to check in.";
|
||
|
}
|
||
|
|
||
|
oPlayer = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPlayer) == TRUE )
|
||
|
{
|
||
|
if ( GetPlayerTeam(oPlayer) == nTeam )
|
||
|
{
|
||
|
SendMessageToPC(oPlayer,sLockedMessage);
|
||
|
}
|
||
|
|
||
|
oPlayer = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// ApplyLockedEffect()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Applies the locked visual effect to the
|
||
|
// lever position.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void ApplyLockedEffect( object oLever )
|
||
|
{
|
||
|
string sEffectTemplate;
|
||
|
sEffectTemplate = "coc_locked";
|
||
|
|
||
|
CreateObject(OBJECT_TYPE_PLACEABLE,sEffectTemplate,GetLocation(oLever));
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// RemoveLockedEffect()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/10/02
|
||
|
// Description: Removes the locked visual effect at the
|
||
|
// lever position.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void RemoveLockedEffect( object oLever )
|
||
|
{
|
||
|
object oLockedEffect;
|
||
|
string sEffectTagName;
|
||
|
sEffectTagName = "coc_locked";
|
||
|
|
||
|
oLockedEffect = GetNearestObjectByTag(sEffectTagName,oLever);
|
||
|
DestroyObject(oLockedEffect);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetTeamData()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Sets a particular type of data in the team
|
||
|
// data data structure.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetTeamData( int nTeam, int nDataType, int nData )
|
||
|
{
|
||
|
string sTeamVarName;
|
||
|
|
||
|
sTeamVarName = "m_nTeam" + IntToString(nTeam);
|
||
|
|
||
|
if ( nDataType == TEAM_NUM_PLAYERS )
|
||
|
{
|
||
|
sTeamVarName += "NumPlayers";
|
||
|
SetLocalInt(GetModule(),sTeamVarName,nData);
|
||
|
}
|
||
|
else if ( nDataType == TEAM_LOCKED_STATE )
|
||
|
{
|
||
|
sTeamVarName += "Locked";
|
||
|
SetLocalInt(GetModule(),sTeamVarName,nData);
|
||
|
}
|
||
|
else if ( nDataType == TEAM_START_LOC_INDEX )
|
||
|
{
|
||
|
sTeamVarName += "StartIndex";
|
||
|
SetLocalInt(GetModule(),sTeamVarName,nData);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetTeamData()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Brenon Holmes
|
||
|
// Created On: Jun/09/02
|
||
|
// Description: Selects a team for the player based on the
|
||
|
// number of players on each team.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetTeamData( int nTeam, int nDataType )
|
||
|
{
|
||
|
string sTeamVarName;
|
||
|
|
||
|
sTeamVarName = "m_nTeam" + IntToString(nTeam);
|
||
|
|
||
|
if ( nDataType == TEAM_NUM_PLAYERS )
|
||
|
{
|
||
|
sTeamVarName += "NumPlayers";
|
||
|
return GetLocalInt(GetModule(),sTeamVarName);
|
||
|
}
|
||
|
else if ( nDataType == TEAM_LOCKED_STATE )
|
||
|
{
|
||
|
sTeamVarName += "Locked";
|
||
|
return GetLocalInt(GetModule(),sTeamVarName);
|
||
|
}
|
||
|
else if ( nDataType == TEAM_START_LOC_INDEX )
|
||
|
{
|
||
|
sTeamVarName += "StartIndex";
|
||
|
return GetLocalInt(GetModule(),sTeamVarName);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// ApplyObserverModeEffects()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Noel Borstad
|
||
|
// Created On: June 12, 2002
|
||
|
// Description: Applies the effects needed to place this player
|
||
|
// in observer mode.
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void ApplyObserverModeEffects(object oPlayer)
|
||
|
{
|
||
|
if ( GetGameStarted() == TRUE )
|
||
|
{
|
||
|
SetObserver(oPlayer, TRUE);
|
||
|
|
||
|
effect ePoly = EffectPolymorph(POLYMORPH_TYPE_PIXIE);
|
||
|
|
||
|
effect eVis = EffectVisualEffect(VFX_DUR_INVISIBILITY);
|
||
|
effect eHaste = EffectMovementSpeedIncrease(200);
|
||
|
effect eAoe = EffectAreaOfEffect(AOE_PER_INVIS_SPHERE, "", "", "coc_end_observer");
|
||
|
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL);
|
||
|
|
||
|
effect eLink = EffectLinkEffects(eVis, eHaste);
|
||
|
eLink = EffectLinkEffects(eLink, eAoe);
|
||
|
eLink = EffectLinkEffects(eLink, eInvis);
|
||
|
|
||
|
eLink = EffectLinkEffects(eLink, ePoly);
|
||
|
|
||
|
int nStr = GetAbilityScore( oPlayer, ABILITY_STRENGTH);
|
||
|
if (nStr > 10)
|
||
|
{
|
||
|
effect eStr = EffectAbilityDecrease(ABILITY_STRENGTH, nStr-10);
|
||
|
eLink = EffectLinkEffects(eLink, eStr);
|
||
|
}
|
||
|
|
||
|
effect eAttack = EffectAttackDecrease(10);
|
||
|
eLink = EffectLinkEffects(eLink, eAttack);
|
||
|
|
||
|
eLink = ExtraordinaryEffect(eLink);
|
||
|
|
||
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPlayer);
|
||
|
|
||
|
object oPC;
|
||
|
|
||
|
oPC = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPC) == TRUE )
|
||
|
{
|
||
|
SetPCLike(oPC,oPlayer);
|
||
|
SetPCLike(oPlayer,oPC);
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetIsObserver()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Noel Borstad
|
||
|
// Created On: June 12, 2002
|
||
|
// Description: Is this player an observer?
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
int GetIsObserver(object oPlayer)
|
||
|
{
|
||
|
return GetLocalInt(oPlayer, OBSERVER_MODE);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// SetObserver()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Noel Borstad
|
||
|
// Created On: June 12, 2002
|
||
|
// Description: Set this player's observer state
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
void SetObserver(object oPlayer, int nStatus)
|
||
|
{
|
||
|
object oPC;
|
||
|
int nTeam;
|
||
|
|
||
|
SetLocalInt(oPlayer, OBSERVER_MODE, nStatus);
|
||
|
|
||
|
if ( nStatus == TRUE )
|
||
|
{
|
||
|
oPC = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPC) == TRUE )
|
||
|
{
|
||
|
SetPCLike(oPC,oPlayer);
|
||
|
SetPCLike(oPlayer,oPC);
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
nTeam = GetPlayerTeam(oPlayer);
|
||
|
oPC = GetFirstPC();
|
||
|
while ( GetIsObjectValid(oPC) == TRUE )
|
||
|
{
|
||
|
if ( GetPlayerTeam(oPC) == nTeam )
|
||
|
{
|
||
|
SetPCLike(oPC,oPlayer);
|
||
|
SetPCLike(oPlayer,oPC);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetPCDislike(oPC,oPlayer);
|
||
|
SetPCDislike(oPlayer,oPC);
|
||
|
}
|
||
|
|
||
|
oPC = GetNextPC();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// GetTeamName()
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
// Created By: Noel Borstad
|
||
|
// Created On: June 13, 2002
|
||
|
// Description: Returns a string containing the team's name
|
||
|
//////////////////////////////////////////////////////////////
|
||
|
string GetTeamName(int nTeam)
|
||
|
{
|
||
|
if (nTeam == TEAM_BLUE)
|
||
|
{
|
||
|
return "Blue";
|
||
|
}
|
||
|
if (nTeam == TEAM_RED)
|
||
|
{
|
||
|
return "Red";
|
||
|
}
|
||
|
if (nTeam == TEAM_GOLD)
|
||
|
{
|
||
|
return "Gold";
|
||
|
}
|
||
|
if (nTeam == TEAM_PURPLE)
|
||
|
{
|
||
|
return "Purple";
|
||
|
}
|
||
|
return "";
|
||
|
}
|