mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-03-04 13:00:26 +00:00
Initial commit.
This commit is contained in:
commit
f5a6cfce9b
262 changed files with 128936 additions and 0 deletions
236
Scripts/chatMenuHud.cs
Normal file
236
Scripts/chatMenuHud.cs
Normal file
|
|
@ -0,0 +1,236 @@
|
|||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// chatMenuHud.cs
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
if ( isFile( "prefs/customVoiceBinds.cs" ) )
|
||||
$defaultVoiceBinds = false;
|
||||
else
|
||||
$defaultVoiceBinds = true;
|
||||
|
||||
// Load in all of the installed chat items:
|
||||
exec( "scripts/cannedChatItems.cs" );
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Chat menu loading function:
|
||||
new SimSet( ChatMenuList ); // Store all of the chat menu maps here so that we can delete them later:
|
||||
function activateChatMenu( %filename )
|
||||
{
|
||||
if ( isFile( %filename ) || isFile( %filename @ ".dso" ) )
|
||||
{
|
||||
// Clear the old chat menu:
|
||||
ChatMenuList.clear();
|
||||
|
||||
// Create the root of the new menu:
|
||||
$RootChatMenu = new ActionMap();
|
||||
ChatMenuList.add( $RootChatMenu );
|
||||
$CurrentChatMenu = $RootChatMenu;
|
||||
$CurrentChatMenu.optionCount = 0;
|
||||
$CurrentChatMenu.bindCmd(keyboard, escape, "cancelChatMenu();", "");
|
||||
|
||||
// Build the new chat menu:
|
||||
exec( %filename );
|
||||
}
|
||||
else
|
||||
error( "Chat menu file \"" @ %filename @ "\" not found!" );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Chat menu building functions:
|
||||
function startChatMenu(%heading)
|
||||
{
|
||||
%key = firstWord(%heading);
|
||||
%text = restWords(%heading);
|
||||
%menu = new ActionMap();
|
||||
ChatMenuList.add( %menu );
|
||||
%cm = $CurrentChatMenu;
|
||||
%cm.bindCmd(keyboard, %key, "setChatMenu(\"" @ %text @ "\", " @ %menu @ ");", "");
|
||||
%cm.option[%cm.optionCount] = %key @ ": " @ %text;
|
||||
%cm.command[%cm.optionCount] = %menu; // Save this off here for later...
|
||||
%cm.isMenu[%cm.optionCount] = 1;
|
||||
%cm.optionCount++;
|
||||
%menu.parent = %cm;
|
||||
%menu.bindCmd(keyboard, escape, "cancelChatMenu();", "");
|
||||
%menu.optionCount = 0;
|
||||
$CurrentChatMenu = %menu;
|
||||
}
|
||||
|
||||
function endChatMenu()
|
||||
{
|
||||
$CurrentChatMenu = $CurrentChatMenu.parent;
|
||||
}
|
||||
|
||||
function addChat(%keyDesc, %command)
|
||||
{
|
||||
%key = firstWord(%keyDesc);
|
||||
%text = restWords(%keyDesc);
|
||||
%cm = $CurrentChatMenu;
|
||||
%cm.bindCmd(keyboard, %key, "issueChatCmd(" @ %cm @ "," @ %cm.optionCount @ ");", "");
|
||||
%cm.option[%cm.optionCount] = %key @ ": " @ %text;
|
||||
%cm.command[%cm.optionCount] = %command;
|
||||
%cm.isMenu[%cm.optionCount] = 0;
|
||||
%cm.optionCount++;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Chat menu hud functions:
|
||||
$ChatMenuHudLineCount = 0;
|
||||
function activateChatMenuHud( %make )
|
||||
{
|
||||
if(%make && !TaskHudDlg.isVisible())
|
||||
showChatMenuHud();
|
||||
}
|
||||
|
||||
function showChatMenuHud()
|
||||
{
|
||||
Canvas.pushDialog(ChatMenuHudDlg);
|
||||
ChatMenuHudDlg.setVisible(true);
|
||||
setChatMenu(Root, $RootChatMenu);
|
||||
}
|
||||
|
||||
function cancelChatMenu()
|
||||
{
|
||||
$CurrentChatMenu.pop();
|
||||
$CurrentChatMenu = $RootChatMenu;
|
||||
Canvas.popDialog(ChatMenuHudDlg);
|
||||
ChatMenuHudDlg.setVisible(false);
|
||||
}
|
||||
|
||||
function setChatMenu( %name, %menu )
|
||||
{
|
||||
for ( %i = 0; %i < $ChatMenuHudLineCount; %i++ )
|
||||
chatMenuHud.remove( $ChatMenuHudText[%i] );
|
||||
|
||||
$ChatMenuHudLineCount = %menu.optionCount + 1;
|
||||
chatMenuHud.extent = "170" SPC ( $ChatMenuHudLineCount * 15 ) + 8;
|
||||
|
||||
// First add the menu title line:
|
||||
$ChatMenuHudText[0] = new GuiTextCtrl()
|
||||
{
|
||||
profile = "GuiHudVoiceMenuProfile";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
position = "5 3";
|
||||
extent = "165 20";
|
||||
minExtent = "8 8";
|
||||
visible = "1";
|
||||
setFirstResponder = "0";
|
||||
modal = "1";
|
||||
helpTag = "0";
|
||||
text = "\c2" @ %name @ " Menu:";
|
||||
};
|
||||
chatMenuHud.add( $ChatMenuHudText[0] );
|
||||
|
||||
// Now add all of the menu options:
|
||||
for ( %option = 0; %option < %menu.optionCount; %option++ )
|
||||
{
|
||||
%yOffset = ( %option * 15 ) + 18;
|
||||
|
||||
if ( %menu.isMenu[%option] == 1 )
|
||||
{
|
||||
$ChatMenuHudText[%option + 1] = new GuiTextCtrl()
|
||||
{
|
||||
profile = "GuiHudVoiceMenuProfile";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
position = "5 " @ %yOffset;
|
||||
extent = "165 20";
|
||||
minExtent = "8 8";
|
||||
visible = "1";
|
||||
setFirstResponder = "0";
|
||||
modal = "1";
|
||||
helpTag = "0";
|
||||
text = " " @ %menu.option[%option];
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
$ChatMenuHudText[%option + 1] = new GuiTextCtrl()
|
||||
{
|
||||
profile = "GuiHudVoiceCommandProfile";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
position = "5 " @ %yOffset;
|
||||
extent = "165 20";
|
||||
minExtent = "8 8";
|
||||
visible = "1";
|
||||
setFirstResponder = "0";
|
||||
modal = "1";
|
||||
helpTag = "0";
|
||||
text = " " @ %menu.option[%option];
|
||||
};
|
||||
}
|
||||
|
||||
chatMenuHud.add( $ChatMenuHudText[%option + 1] );
|
||||
}
|
||||
|
||||
//bind "anykey" to closing the chat menu, so if you press an invalid entry, you don't accidently
|
||||
//open the commander map or something...
|
||||
%menu.bindCmd(keyboard, "anykey", "cancelChatMenu();", "");
|
||||
|
||||
// Pop the old menu map and push the new menu's map:
|
||||
$CurrentChatMenu.pop();
|
||||
$CurrentChatMenu = %menu;
|
||||
%menu.push();
|
||||
}
|
||||
|
||||
function issueChatCmd( %menu, %index )
|
||||
{
|
||||
processChatItemCallbacks( %menu.command[%index] );
|
||||
commandToServer( 'CannedChat', %menu.command[%index], false );
|
||||
cancelChatMenu();
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Canned chat handler:
|
||||
function serverCmdCannedChat( %client, %command, %fromAI )
|
||||
{
|
||||
if(%client.isSilenced)
|
||||
return;
|
||||
|
||||
%cmdCode = getWord( %command, 0 );
|
||||
%cmdId = getSubStr( %cmdCode, 1, strlen( %command ) - 1 );
|
||||
%cmdString = getWord( %command, 1 );
|
||||
if ( %cmdString $= "" )
|
||||
%cmdString = getTaggedString( %cmdCode );
|
||||
|
||||
if ( !isObject( $ChatTable[%cmdId] ) )
|
||||
{
|
||||
error( %cmdString @ " is not a recognized canned chat command." );
|
||||
return;
|
||||
}
|
||||
|
||||
%chatItem = $ChatTable[%cmdId];
|
||||
|
||||
//if there is text
|
||||
if (%chatItem.text !$= "" || !%chatItem.play3D)
|
||||
{
|
||||
%message = %chatItem.text @ "~w" @ %chatItem.audioFile;
|
||||
|
||||
if ( %chatItem.teamOnly )
|
||||
cannedChatMessageTeam( %client, %client.team, '\c3%1: %2', %client.name, %message, %chatItem.defaultKeys );
|
||||
else
|
||||
cannedChatMessageAll( %client, '\c4%1: %2', %client.name, %message, %chatItem.defaultKeys );
|
||||
}
|
||||
|
||||
//if no text, see if the audio is to be played in 3D...
|
||||
else if ( %chatItem.play3D && %client.player )
|
||||
playTargetAudio(%client.target, addTaggedString(%chatItem.audioFile), AudioClosest3d, true);
|
||||
|
||||
if ( %chatItem.animation !$= "" )
|
||||
serverCmdPlayAnim(%client, %chatItem.animation);
|
||||
|
||||
// Let the AI respond to the canned chat messages (from humans only)
|
||||
if (!%fromAI)
|
||||
CreateVoiceServerTask(%client, %cmdCode);
|
||||
}
|
||||
|
||||
if ( $defaultVoiceBinds )
|
||||
activateChatMenu( "scripts/voiceBinds.cs" );
|
||||
else
|
||||
activateChatMenu( "prefs/customVoiceBinds.cs" );
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue