Botpack
Class ChallengeVoicePack

source: e:\games\UnrealTournament\Botpack\Classes\ChallengeVoicePack.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Info
         |
         +--Engine.VoicePack
            |
            +--Botpack.ChallengeVoicePack
Direct Known Subclasses:VoiceBoss, VoiceFemale, VoiceMale

class ChallengeVoicePack
extends Engine.VoicePack

//============================================================================= // ChallengeVoicePack. //=============================================================================
Variables
 string AckAbbrev[16]
           acknowledgement sounds
 Sound AckSound[16]
           acknowledgement sounds
 string AckString[16]
           acknowledgement sounds
 float AckTime[16]
           acknowledgement sounds
 string CommaText
           acknowledgement sounds
 string DelayedResponse
           acknowledgement sounds
 PlayerReplicationInfo DelayedSender
           acknowledgement sounds
 string FFireAbbrev[16]
           acknowledgement sounds
 Sound FFireSound[16]
           acknowledgement sounds
 string FFireString[16]
           acknowledgement sounds
 String LeaderSign[4]
           acknowledgement sounds
 byte MatureTaunt[32]
           acknowledgement sounds
 Sound NameSound[4]
           leader names
 float NameTime[4]
           leader names
 string OrderAbbrev[16]
           acknowledgement sounds
 Sound OrderSound[16]
           acknowledgement sounds
 string OrderString[16]
           acknowledgement sounds
 string OtherAbbrev[32]
           acknowledgement sounds
 Sound OtherSound[32]
           acknowledgement sounds
 string OtherString[32]
           acknowledgement sounds
 int PhraseNum
           acknowledgement sounds
 float PhraseTime[8]
           acknowledgement sounds
 Sound Phrase[8]
           acknowledgement sounds
 name SendType[5]
           acknowledgement sounds
 string TauntAbbrev[32]
           acknowledgement sounds
 Sound TauntSound[32]
           acknowledgement sounds
 string TauntString[32]
           acknowledgement sounds
 bool bDelayedResponse
           acknowledgement sounds
 int numAcks
           acknowledgement sounds
 int numFFires
           acknowledgement sounds
 int numTaunts
           acknowledgement sounds


Function Summary
 void BotInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex)
 void ClientInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex)
 string GetAckString(int i)
 string GetCallSign(PlayerReplicationInfo P)
 string GetFFireString(int i)
 string GetOrderString(int i, string GameType)
     
// for Voice message popup menu - since order names may be replaced for some game types
 string GetOtherString(int i)
 string GetTauntString(int i)
 void PlayerSpeech(int Type, int Index, int Callsign)
 void SetAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetClientAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetClientFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetClientOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetClientOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetClientTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void SetTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound, out Float)
 void Timer()



Source Code


00001	//=============================================================================
00002	// ChallengeVoicePack.
00003	//=============================================================================
00004	class ChallengeVoicePack extends VoicePack
00005		abstract;
00006	
00007	var() Sound NameSound[4]; // leader names
00008	var() localized float NameTime[4];
00009	
00010	var() Sound AckSound[16]; // acknowledgement sounds
00011	var() localized string AckString[16];
00012	var() localized string AckAbbrev[16];
00013	var() localized float AckTime[16];
00014	var() int numAcks;
00015	
00016	var() Sound FFireSound[16];
00017	var() localized string FFireString[16];
00018	var() localized string FFireAbbrev[16];
00019	var() int numFFires;
00020	
00021	var() Sound TauntSound[32];
00022	var() localized string TauntString[32];
00023	var() localized string TauntAbbrev[32];
00024	var() int numTaunts;
00025	var() byte MatureTaunt[32];
00026	var   name SendType[5];
00027	
00028	var localized String LeaderSign[4];
00029	
00030	/* Orders (in same order as in Orders Menu 
00031		0 = Defend, 
00032		1 = Hold, 
00033		2 = Attack, 
00034		3 = Follow, 
00035		4 = FreeLance
00036	*/
00037	var() Sound OrderSound[16];
00038	var() localized string OrderString[16];
00039	var() localized string OrderAbbrev[16];
00040	
00041	var localized string CommaText;
00042	
00043	/* Other messages - use passed messageIndex
00044		0 = Base Undefended
00045		1 = Get Flag
00046		2 = Got Flag
00047		3 = Back up
00048		4 = Im Hit
00049		5 = Under Attack
00050		6 = Man Down
00051	*/
00052	var() Sound OtherSound[32];
00053	var() localized string OtherString[32];
00054	var() localized string OtherAbbrev[32];
00055	
00056	var Sound Phrase[8];
00057	var float PhraseTime[8];
00058	var int PhraseNum;
00059	var string DelayedResponse;
00060	var bool bDelayedResponse;
00061	var PlayerReplicationInfo DelayedSender;
00062	
00063	function string GetCallSign( PlayerReplicationInfo P )
00064	{
00065		if ( P == None )
00066			return "";
00067		if ( (Level.NetMode == NM_Standalone) && (P.TeamID == 0) )
00068			return LeaderSign[P.Team];
00069		else
00070			return P.PlayerName;
00071	}
00072	
00073	function BotInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex)
00074	{
00075		local int m;
00076		local Sound MessageSound;
00077		local float MessageTime;
00078	
00079		if ( messagetype == 'ACK' )
00080			SetAckMessage(messageIndex, Recipient, MessageSound, MessageTime);
00081		else
00082		{
00083			SetTimer(0.1, false);
00084			if ( recipient != None )
00085			{
00086				if ( (Level.NetMode == NM_Standalone) && (recipient.TeamID == 0) )
00087				{
00088					Phrase[0] = NameSound[recipient.Team];
00089					PhraseTime[0] = NameTime[recipient.Team];
00090					m = 1;
00091				}
00092				DelayedResponse = GetCallSign(Recipient)$CommaText;
00093			}	
00094			else
00095				m = 0;
00096			if ( messagetype == 'FRIENDLYFIRE' )
00097				SetFFireMessage(messageIndex, Recipient, MessageSound, MessageTime);
00098			else if ( messagetype == 'AUTOTAUNT' ) 
00099			{
00100				SetTauntMessage(messageIndex, Recipient, MessageSound, MessageTime);
00101				if ( Level.NetMode != NM_Standalone )
00102					DelayedResponse = "";
00103			}
00104			else if ( messagetype == 'TAUNT' )
00105				SetTauntMessage(messageIndex, Recipient, MessageSound, MessageTime);
00106			else if ( messagetype == 'ORDER' )
00107				SetOrderMessage(messageIndex, Recipient, MessageSound, MessageTime);
00108			else // messagetype == Other
00109				SetOtherMessage(messageIndex, Recipient, MessageSound, MessageTime);
00110	
00111			Phrase[m] = MessageSound;
00112			PhraseTime[m] = MessageTime;
00113		}
00114	}
00115	
00116	function ClientInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex)
00117	{
00118		local int m;
00119		local Sound MessageSound;
00120		local float MessageTime;
00121	
00122		DelayedSender = Sender;
00123		bDelayedResponse = true;
00124	
00125		if ( Sender.bIsABot )
00126		{
00127			BotInitialize(Sender, Recipient, messagetype, messageIndex);
00128			return;
00129		}
00130	
00131		SetTimer(0.1, false);
00132	
00133		if ( messagetype == 'ACK' )
00134			SetClientAckMessage(messageIndex, Recipient, MessageSound, MessageTime);
00135		else
00136		{
00137			if ( recipient != None )
00138			{
00139				if ( (Level.NetMode == NM_Standalone) && (recipient.TeamID == 0) )
00140				{
00141					Phrase[0] = NameSound[recipient.Team];
00142					PhraseTime[0] = NameTime[recipient.Team];
00143					m = 1;
00144				}
00145				DelayedResponse = GetCallSign(Recipient)$CommaText;
00146			}
00147			else if ( (messageType == 'OTHER') && (messageIndex == 9) )
00148			{
00149				Phrase[0] = NameSound[Sender.Team];
00150				PhraseTime[0] = NameTime[Sender.Team];
00151				m = 1;
00152			}
00153			else
00154				m = 0;
00155			if ( messagetype == 'FRIENDLYFIRE' )
00156				SetClientFFireMessage(messageIndex, Recipient, MessageSound, MessageTime);
00157			else if ( messagetype == 'TAUNT' )
00158				SetClientTauntMessage(messageIndex, Recipient, MessageSound, MessageTime);
00159			else if ( messagetype == 'AUTOTAUNT' )
00160			{
00161				SetClientTauntMessage(messageIndex, Recipient, MessageSound, MessageTime);
00162				SetTimer(0.8, false);
00163				if ( Level.NetMode != NM_Standalone )
00164					DelayedResponse = "";
00165			}
00166			else if ( messagetype == 'ORDER' )
00167				SetClientOrderMessage(messageIndex, Recipient, MessageSound, MessageTime);
00168			else // messagetype == Other
00169				SetClientOtherMessage(messageIndex, Recipient, MessageSound, MessageTime);
00170		}
00171		Phrase[m] = MessageSound;
00172		PhraseTime[m] = MessageTime;
00173	}
00174	
00175	function SetClientAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00176	{
00177		messageIndex = Clamp(messageIndex, 0, numAcks-1);
00178	
00179		if (Recipient != None)
00180			DelayedResponse = AckString[messageIndex]$CommaText$GetCallsign(Recipient);
00181		else
00182			DelayedResponse = AckString[messageIndex];
00183	
00184		MessageSound = AckSound[messageIndex];
00185		MessageTime = AckTime[messageIndex];
00186	
00187		if ( (Recipient != None) && (Level.NetMode == NM_Standalone) 
00188			&& (recipient.TeamID == 0) && PlayerPawn(Owner).GameReplicationInfo.bTeamGame )
00189		{
00190			Phrase[1] = NameSound[Recipient.Team];
00191			PhraseTime[1] = NameTime[Recipient.Team];
00192		}
00193	}
00194	
00195	function SetAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00196	{
00197		DelayedResponse = AckString[messageIndex]$CommaText$GetCallSign(recipient);
00198		SetTimer(3 + FRand(), false); // wait for initial order to be spoken
00199		Phrase[0] = AckSound[messageIndex];
00200		PhraseTime[0] = AckTime[messageIndex];
00201		if ( (Level.NetMode == NM_Standalone) && (recipient.TeamID == 0) && PlayerPawn(Owner).GameReplicationInfo.bTeamGame )
00202		{
00203			Phrase[1] = NameSound[recipient.Team];
00204			PhraseTime[1] = NameTime[recipient.Team];
00205		}
00206	}
00207	
00208	function SetClientFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00209	{
00210		messageIndex = Clamp(messageIndex, 0, numFFires-1);
00211	
00212		DelayedResponse = DelayedResponse$FFireString[messageIndex];
00213		MessageSound = FFireSound[messageIndex];
00214	}
00215	
00216	function SetFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00217	{
00218		DelayedResponse = DelayedResponse$FFireString[messageIndex];
00219		MessageSound = FFireSound[messageIndex];
00220	}
00221	
00222	function SetClientTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00223	{
00224		messageIndex = Clamp(messageIndex, 0, numTaunts-1);
00225	
00226		// check if need to avoid a mature taunt
00227		if ( class'TournamentPlayer'.Default.bNoMatureLanguage || class'DeathMatchPlus'.Default.bLowGore )
00228		{
00229			while ( MatureTaunt[messageIndex] > 0 )
00230				messageIndex--;
00231	
00232			if ( messageIndex < 0 )
00233			{
00234				SetTimer(0.0, false);
00235				Destroy();
00236				return;
00237			}
00238		}
00239		DelayedResponse = DelayedResponse$TauntString[messageIndex];
00240		MessageSound = TauntSound[messageIndex];
00241	}
00242	
00243	function SetTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00244	{
00245		// check if need to avoid a mature taunt
00246		if ( class'TournamentPlayer'.Default.bNoMatureLanguage || class'DeathMatchPlus'.Default.bLowGore )
00247		{
00248			while ( MatureTaunt[messageIndex] > 0 )
00249				messageIndex--;
00250	
00251			if ( messageIndex < 0 )
00252			{
00253				SetTimer(0.0, false);
00254				Destroy();
00255				return;
00256			}
00257		}
00258		DelayedResponse = DelayedResponse$TauntString[messageIndex];
00259		MessageSound = TauntSound[messageIndex];
00260		SetTimer(1.0, false);
00261	}
00262	
00263	function SetClientOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00264	{
00265		DelayedResponse = DelayedResponse$OrderString[messageIndex];
00266		MessageSound = OrderSound[messageIndex];
00267	}
00268	
00269	function SetOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00270	{
00271		if ( messageIndex == 2 )
00272		{
00273			if ( Level.Game.IsA('CTFGame') )
00274				messageIndex = 10;
00275		}
00276		else if ( messageIndex == 4 )
00277		{
00278			if ( FRand() < 0.4 )
00279				messageIndex = 11;
00280		}
00281		DelayedResponse = DelayedResponse$OrderString[messageIndex];
00282		MessageSound = OrderSound[messageIndex];
00283	}
00284	
00285	// for Voice message popup menu - since order names may be replaced for some game types
00286	static function string GetOrderString(int i, string GameType )
00287	{
00288		if ( i > 9 )
00289			return ""; //high index order strings are alternates to the base orders 
00290		if (i == 2)
00291		{
00292			if (GameType == "Capture the Flag")
00293			{
00294				if ( Default.OrderAbbrev[10] != "" )
00295					return Default.OrderAbbrev[10];
00296				else
00297					return Default.OrderString[10];
00298			} else if (GameType == "Domination") {
00299				if ( Default.OrderAbbrev[11] != "" )
00300					return Default.OrderAbbrev[11];
00301				else
00302					return Default.OrderString[11];
00303			}
00304		}
00305	
00306		if ( Default.OrderAbbrev[i] != "" )
00307			return Default.OrderAbbrev[i];
00308	
00309		return Default.OrderString[i];
00310	}
00311	
00312	function SetClientOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00313	{
00314		DelayedResponse = DelayedResponse$OtherString[messageIndex];
00315		MessageSound = OtherSound[messageIndex];
00316	}
00317	
00318	function SetOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound, out Float MessageTime)
00319	{
00320		DelayedResponse = DelayedResponse$OtherString[messageIndex];
00321		MessageSound = OtherSound[messageIndex];
00322	}
00323	
00324	function Timer()
00325	{
00326		local name MessageType;
00327	
00328		if ( bDelayedResponse )
00329		{
00330			bDelayedResponse = false;
00331			if ( Owner.IsA('PlayerPawn') )
00332			{
00333				if ( PlayerPawn(Owner).GameReplicationInfo.bTeamGame 
00334					 && (PlayerPawn(Owner).PlayerReplicationInfo.Team == DelayedSender.Team) )
00335					MessageType = 'TeamSay';
00336				else
00337					MessageType = 'Say';
00338				PlayerPawn(Owner).TeamMessage(DelayedSender, DelayedResponse, MessageType, false);
00339			}
00340		}
00341		if ( Phrase[PhraseNum] != None )
00342		{
00343			if ( Owner.IsA('PlayerPawn') && !PlayerPawn(Owner).bNoVoices 
00344				&& (Level.TimeSeconds - PlayerPawn(Owner).LastPlaySound > 2)  ) 
00345			{
00346				if ( (PlayerPawn(Owner).ViewTarget != None) && !PlayerPawn(Owner).ViewTarget.IsA('Carcass') )
00347				{
00348					PlayerPawn(Owner).ViewTarget.PlaySound(Phrase[PhraseNum], SLOT_Interface, 16.0);
00349					PlayerPawn(Owner).ViewTarget.PlaySound(Phrase[PhraseNum], SLOT_Misc, 16.0);
00350				}
00351				else
00352				{
00353					PlayerPawn(Owner).PlaySound(Phrase[PhraseNum], SLOT_Interface, 16.0);
00354					PlayerPawn(Owner).PlaySound(Phrase[PhraseNum], SLOT_Misc, 16.0);
00355				}
00356			}
00357			if ( PhraseTime[PhraseNum] == 0 )
00358				Destroy();
00359			else
00360			{
00361				SetTimer(PhraseTime[PhraseNum], false);
00362				PhraseNum++;
00363			}
00364		}
00365		else 
00366			Destroy();
00367	}
00368	
00369	function PlayerSpeech( int Type, int Index, int Callsign )
00370	{
00371		local name SendMode;
00372		local PlayerReplicationInfo Recipient;
00373		local Pawn P;
00374	
00375		switch (Type)
00376		{
00377			case 0:			// Acknowledgements
00378				SendMode = 'TEAM';		// Only send to team.
00379				Recipient = None;		// Send to everyone.
00380				break;
00381			case 1:			// Friendly Fire
00382				SendMode = 'TEAM';		// Only send to team.
00383				Recipient = None;		// Send to everyone.
00384				break;
00385			case 2:			// Orders
00386				SendMode = 'TEAM';		// Only send to team.
00387				if (Index == 2)
00388				{
00389					if (Level.Game.IsA('CTFGame'))
00390						Index = 10;
00391					if (Level.Game.IsA('Domination'))
00392						Index = 11;
00393				}
00394				if ( PlayerPawn(Owner).GameReplicationInfo.bTeamGame )
00395				{
00396					if ( Callsign == -1 )
00397						Recipient = None;
00398					else {
00399						for ( P=Level.PawnList; P!=None; P=P.NextPawn )
00400							//if ( P.bIsPlayer && (P.PlayerReplicationInfo.TeamId == Callsign)
00401							if ( (P.PlayerReplicationInfo.TeamId == Callsign)
00402								&& (P.PlayerReplicationInfo.Team == PlayerPawn(Owner).PlayerReplicationInfo.Team) )
00403							{
00404								Recipient = P.PlayerReplicationInfo;
00405								break;
00406							}
00407					}
00408				}
00409				break;
00410			case 3:			// Taunts
00411				SendMode = 'GLOBAL';	// Send to all teams.
00412				Recipient = None;		// Send to everyone.
00413				break;
00414			case 4:			// Other
00415				SendMode = 'TEAM';		// Only send to team.
00416				Recipient = None;		// Send to everyone.
00417				break;
00418		}
00419		if (!PlayerPawn(Owner).GameReplicationInfo.bTeamGame)
00420			SendMode = 'GLOBAL';  // Not a team game? Send to everyone.
00421	
00422		Pawn(Owner).SendVoiceMessage( Pawn(Owner).PlayerReplicationInfo, Recipient, SendType[Type], Index, SendMode );
00423	}
00424	
00425	static function string GetAckString(int i)
00426	{
00427		if ( Default.AckAbbrev[i] != "" )
00428			return Default.AckAbbrev[i];
00429	
00430		return default.AckString[i];
00431	}
00432	
00433	static function string GetFFireString(int i)
00434	{
00435		if ( default.FFireAbbrev[i] != "" )
00436			return default.FFireAbbrev[i];
00437	
00438		return default.FFireString[i];
00439	}
00440	
00441	static function string GetTauntString(int i)
00442	{
00443		if ( default.TauntAbbrev[i] != "" )
00444			return default.TauntAbbrev[i];
00445		
00446		return default.TauntString[i];
00447	}
00448	
00449	static function string GetOtherString(int i)
00450	{
00451		if ( Default.OtherAbbrev[i] != "" )
00452			return default.OtherAbbrev[i];
00453		
00454		return default.OtherString[i];
00455	}
00456	
00457	defaultproperties
00458	{
00459	     SendType(0)=ACK
00460	     SendType(1)=FRIENDLYFIRE
00461	     SendType(2)=ORDER
00462	     SendType(3)=Taunt
00463	     SendType(4)=Other
00464	     LeaderSign(0)="Red Leader"
00465	     LeaderSign(1)="Blue Leader"
00466	     LeaderSign(2)="Green Leader"
00467	     LeaderSign(3)="Gold Leader"
00468	     CommaText=", "
00469	}

End Source Code