// FlagHud by RockeyRex
// TODO:
// Find a way to get flag status when joining the game.
// Cleans the values. For means or another
function FlagHud_Reset(%this)
{
$FlagHud_Team1D = "...";
$FlagHud_Team2D = "...";
if(%this == 1)
{
HudOverlay.setHudElementText($HudOverlay::FlagHudText, "..." NL "...");
}
else if(%this == 2)
{
$FlagHud_Team1D = "Home";
$FlagHud_Team2D = "Home";
}
}
// Let's see what we do with our gathered info.
function FlagHud(%team, %player, %flagevent)
{
if(stripColorCodes(%team) $= "Alpha")
{
if(%flagevent == 0)
{
$FlagHud_Team1D = "Dropped";
$FlagHud_Team1T = getSimTime();
}
else if(%flagevent == 1)
{
$FlagHud_Team1D = getSubStr(stripColorCodes(%player), 0 , 10);
}
else if(%flagevent == 2)
{
$FlagHud_Team1D = "Home";
}
}
else if(stripColorCodes(%team) $= "Beta")
{
if(%flagevent == 0)
{
$FlagHud_Team2D = "Dropped";
$FlagHud_Team2T = getSimTime();
}
else if(%flagevent == 1)
{
$FlagHud_Team2D = getSubStr(stripColorCodes(%player), 0 , 10);
}
else if(%flagevent == 2)
{
$FlagHud_Team2D = "Home";
}
}
FlagHud_Refresh();
}
// This function handles updating of the hud elements as well as the dropped timer.
// Todo: Align the fookin flag status.... =(
function FlagHud_Refresh()
{
%tabs = "<tab:10, 200>";
if($FlagHud_Team1D $= "Dropped")
{
%team1d = $FlagHud_Team1D SPC mFloor(30 - (getSimTime() - $FlagHud_Team1T) / 1000);
}
else
{
%team1d = $FlagHud_Team1D;
}
if($FlagHud_Team2D $= "Dropped")
{
%team2d = $FlagHud_Team2D SPC mFloor(30 - (getSimTime() - $FlagHud_Team2T) / 1000);
}
else
{
%team2d = $FlagHud_Team2D;
}
HudOverlay.setHudElementText($HudOverlay::FlagHudDText, %team1d NL %team2d);
if($FlagHud_Active && !isEventPending($FlagHud_Schedule))
{
$FlagHud_Schedule = schedule(1000, 0, FlagHud_Refresh);
}
}
addMessageCallback("MsgJoinWelcome", FlagHudCatch);
addMessageCallback("MsgRespawned", FlagHudCatch);
addMessageCallback("MsgPracticeEnd", FlagHudCatch);
addMessageCallback("MsgCtfLlamaGrab", FlagHudCatch);
addMessageCallback("MsgCtfOdGrab", FlagHudCatch);
addMessageCallback("MsgCtfFlagGrab", FlagHudCatch);
addMessageCallback("MsgCtfFlagCatch", FlagHudCatch);
addMessageCallback("MsgCtfFlagPickup", FlagHudCatch);
addMessageCallback("MsgCtfFlagThrow", FlagHudCatch);
addMessageCallback("MsgCtfFlagDrop", FlagHudCatch);
addMessageCallback("MsgCtfFlagCap", FlagHudCatch);
addMessageCallback("MsgCtfFlagReturn", FlagHudCatch);
function FlagHudCatch(%msg, %a0, %a1, %a2, %a3)
{
%msg = detag(%msg);
%a1 = detag(%a1);
%a2 = detag(%a2);
%a1 = replaceTeamStrings(%a1);
%a2 = replaceTeamStrings(%a2);
switch$(%msg)
{
case "MsgJoinWelcome":
commandToServer('ShowScoreHud');
case "MsgRespawned":
commandToServer('ShowScoreHud');
case "MsgCtfLlamaGrab":
FlagHud(%a1, %a2, 1);
case "MsgCtfOdGrab":
FlagHud(%a1, %a2, 1);
case "MsgCtfFlagGrab":
FlagHud(%a1, %a2, 1);
case "MsgCtfFlagCatch":
FlagHud(%a1, %a2, 1);
case "MsgCtfFlagPickup":
FlagHud(%a1, %a2, 1);
case "MsgCtfFlagThrow":
FlagHud(%a1, %a2, 0);
case "MsgCtfFlagDrop":
FlagHud(%a1, %a2, 0);
case "MsgCtfFlagCap":
commandToServer('ShowScoreHud');
FlagHud(%a1, %a2, 2);
case "MsgCtfFlagReturn":
FlagHud(%a1, %a2, 2);
case "MsgPracticeEnd":
schedule(100, 0, FlagHud_Reset, 2);
}
}
package FlagHudPack
{
// This is what we use to fetch our scores and team names.
function handleSetScoreHudHeader(%a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9 , %a10)
{
parent::handleSetScoreHudHeader(%a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9 , %a10);
%a4 = replaceTeamStrings("\\t0" @ %a4 @ "");
%a8 = replaceTeamStrings("\\t1" @ %a8 @ "");
%team1 = %a6 SPC %a4;
%team2 = %a10 SPC %a8;
HudOverlay.setHudElementText($HudOverlay::FlagHudText, %team1 NL %team2);
}
// Let's create our hud elements.
function HudOverlay::AddHudElements(%this)
{
parent::AddHudElements(%this);
// FlagHud Container
%index = %this.addHudElement();
%this.setHudElementPosition(%index, 10, 10);
%this.setHudElementBaseTextureSize(%index, 170, 40);
%this.setHudElementParent(%index, $HudElement::BaseContainer);
%this.setHudElementPositionAnchor(%index, "Left", "Top");
%this.setHudElementRenderWhenFollowing(%index, true);
%this.setHudElementRenderWhenDead(%index, true);
$HudElement::FlagHudC = %index;
%index = %this.AddHudElement();
%this.setHudElementTexture(%index, "client/gui/images/hud/FlagHud");
%this.setHudElementPosition(%index, 85, 20);
%this.setHudElementPositionAnchor(%index, "HCenter", "VCenter");
%this.setHudElementParent(%index, $HudElement::FlagHudC);
%this.setHudElementRenderWhenDead(%index, true);
$HudOverlay::FlagHud = %index;
%index = %this.AddHudElement();
%this.setHudElementPosition(%index, 5, 20);
%this.setHudElementParent(%index, $HudElement::FlagHudC);
%this.setHudElementPositionAnchor(%index, "Left", "VCenter");
%this.setHudElementRenderWhenDead(%index, true);
$HudOverlay::FlagHudText = %index;
%index = %this.AddHudElement();
%this.setHudElementPosition(%index, 62, 20);
%this.setHudElementParent(%index, $HudElement::FlagHudC);
%this.setHudElementPositionAnchor(%index, "Left", "VCenter");
%this.setHudElementRenderWhenDead(%index, true);
$HudOverlay::FlagHudDText = %index;
}
// When the basic HUD gets activated, we wish to reset our values and make the hud active.
function HudOverlay::OnWake(%this)
{
parent::OnWake(%this);
FlagHud_Reset(1);
$FlagHud_Active = 1;
FlagHud_Refresh();
}
// And when the basic hud gets inactive, we will also go to sleep.
function HudOverlay::OnSleep(%this)
{
parent::OnSleep(%this);
}
};
activatepackage(FlagHudPack);