--[[
© 2011 CloudSixteen.com do not share, re-distribute or modify
without permission of its author (kurozael@gmail.com).
--]]
openAura.schema.stunEffects = {};
openAura.schema.combineOverlay = Material("effects/combine_binocoverlay");
openAura.schema.randomDisplayLines = {
"Transmitting physical transition vector...",
"Modulating external temperature levels...",
"Parsing view ports and data arrays...",
"Translating Union practicalities...",
"Updating biosignal co-ordinates...",
"Parsing OpenAura protocol messages...",
"Downloading recent dictionaries...",
"Pinging connection to network...",
"Updating mainframe connection...",
"Synchronizing locational data...",
"Translating radio messages...",
"Emptying outgoing pipes...",
"Sensoring proximity...",
"Pinging loopback...",
"Idle connection..."
};
openAura:IncludePrefixed("sh_auto.lua");
openAura.directory:AddCategory("Combine Dispatcher", "Commands");
openAura.directory:AddCategory("Civil Protection", "Commands");
openAura.config:AddAuraWatch("server_whitelist_identity", "The identity used for the server whitelist.\nLeave blank for no identity.");
openAura.config:AddAuraWatch("combine_lock_overrides", "Whether or not Combine locks override the door lock.");
openAura.config:AddAuraWatch("intro_text_small", "The small text displayed for the introduction.");
openAura.config:AddAuraWatch("intro_text_big", "The big text displayed for the introduction.");
openAura.config:AddAuraWatch("knockout_time", "The time that a player gets knocked out for (seconds).", 0, 7200);
openAura.config:AddAuraWatch("business_cost", "The amount that it costs to start a business.");
openAura.config:AddAuraWatch("cwu_props", "Whether or not to use Civil Worker's Union props.");
openAura.config:AddAuraWatch("permits", "Whether or not permits are enabled.");
table.sort(openAura.schema.voices, function(a, b) return a.command < b.command; end);
table.sort(openAura.schema.dispatchVoices, function(a, b) return a.command < b.command; end);
for k, v in pairs(openAura.schema.dispatchVoices) do
openAura.directory:AddCode("Combine Dispatcher", [[
]]..string.upper(v.command)..[[
]]..v.phrase..[[
]], true);
end;
for k, v in pairs(openAura.schema.voices) do
openAura.directory:AddCode("Civil Protection", [[
]]..string.upper(v.command)..[[
]]..v.phrase..[[
]], true);
end;
openAura:HookDataStream("RebuildBusiness", function(data)
if ( openAura.menu:GetOpen() and IsValid(openAura.schema.businessPanel) ) then
if (openAura.menu:GetActivePanel() == openAura.schema.businessPanel) then
openAura.schema.businessPanel:Rebuild();
end;
end;
end);
usermessage.Hook("aura_ObjectPhysDesc", function(msg)
local entity = msg:ReadEntity();
if ( IsValid(entity) ) then
Derma_StringRequest("Description", "What is the physical description of this object?", nil, function(text)
openAura:StartDataStream( "ObjectPhysDesc", {text, entity} );
end);
end;
end);
usermessage.Hook("aura_Frequency", function(msg)
Derma_StringRequest("Frequency", "What would you like to set the frequency to?", msg:ReadString(), function(text)
openAura:RunCommand("SetFreq", text);
if ( !openAura.menu:GetOpen() ) then
gui.EnableScreenClicker(false);
end;
end);
if ( !openAura.menu:GetOpen() ) then
gui.EnableScreenClicker(true);
end;
end);
openAura:HookDataStream("EditObjectives", function(data)
if ( openAura.schema.objectivesPanel and openAura.schema.objectivesPanel:IsValid() ) then
openAura.schema.objectivesPanel:Close();
openAura.schema.objectivesPanel:Remove();
end;
openAura.schema.objectivesPanel = vgui.Create("aura_Objectives");
openAura.schema.objectivesPanel:Populate(data or "");
openAura.schema.objectivesPanel:MakePopup();
gui.EnableScreenClicker(true);
end);
openAura:HookDataStream("EditData", function(data)
if ( IsValid( data[1] ) ) then
if ( openAura.schema.dataPanel and openAura.schema.dataPanel:IsValid() ) then
openAura.schema.dataPanel:Close();
openAura.schema.dataPanel:Remove();
end;
openAura.schema.dataPanel = vgui.Create("aura_Data");
openAura.schema.dataPanel:Populate(data[1], data[2] or "");
openAura.schema.dataPanel:MakePopup();
gui.EnableScreenClicker(true);
end;
end);
usermessage.Hook("aura_Stunned", function(msg)
openAura.schema:AddStunEffect( msg:ReadFloat() );
end);
usermessage.Hook("aura_Flashed", function(msg)
openAura.schema:AddFlashEffect();
end);
-- A function to add a flash effect.
function openAura.schema:AddFlashEffect()
local curTime = CurTime();
self.stunEffects[#self.stunEffects + 1] = {curTime + 10, 10};
self.flashEffect = {curTime + 20, 20};
surface.PlaySound("hl1/fvox/flatline.wav");
end;
-- A function to add a stun effect.
function openAura.schema:AddStunEffect(duration)
local curTime = CurTime();
if (!duration or duration == 0) then
duration = 1;
end;
self.stunEffects[#self.stunEffects + 1] = {curTime + duration, duration};
self.flashEffect = {curTime + (duration * 2), duration * 2, true};
end;
usermessage.Hook("aura_ClearEffects", function(msg)
openAura.schema.stunEffects = {};
openAura.schema.flashEffect = nil;
end);
openAura:HookDataStream("CombineDisplayLine", function(data)
openAura.schema:AddCombineDisplayLine( data[1], data[2] );
end);
openAura.chatBox:RegisterClass("request_eavesdrop", "ic", function(info)
if (info.shouldHear) then
openAura.chatBox:Add(info.filtered, nil, Color(255, 255, 150, 255), info.name.." requests \""..info.text.."\"");
end;
end);
openAura.chatBox:RegisterClass("broadcast", "ic", function(info)
openAura.chatBox:Add(info.filtered, nil, Color(150, 125, 175, 255), info.name.." broadcasts \""..info.text.."\"");
end);
openAura.chatBox:RegisterClass("dispatch", "ic", function(info)
openAura.chatBox:Add(info.filtered, nil, Color(150, 100, 100, 255), "Dispatch broadcasts \""..info.text.."\"");
end);
openAura.chatBox:RegisterClass("request", "ic", function(info)
openAura.chatBox:Add(info.filtered, nil, Color(175, 125, 100, 255), info.name.." requests \""..info.text.."\"");
end);
-- A function to get a player's scanner entity.
function openAura.schema:GetScannerEntity(player)
local scannerEntity = player:GetSharedVar("scanner");
if ( IsValid(scannerEntity) ) then
return scannerEntity;
end;
end;
-- A function to get whether a text entry is being used.
function openAura.schema:IsTextEntryBeingUsed()
if (self.textEntryFocused) then
if ( self.textEntryFocused:IsValid() and self.textEntryFocused:IsVisible() ) then
return true;
end;
end;
end;
-- A function to add a Combine display line.
function openAura.schema:AddCombineDisplayLine(text, color)
if ( self:PlayerIsCombine(openAura.Client) ) then
if (!self.combineDisplayLines) then
self.combineDisplayLines = {};
end;
table.insert( self.combineDisplayLines, {"<:: "..text, CurTime() + 8, 5, color} );
end;
end;
-- A function to get whether a player is Combine.
function openAura.schema:PlayerIsCombine(player, bHuman)
local faction = openAura.player:GetFaction(player);
if ( self:IsCombineFaction(faction) ) then
if (bHuman) then
if (faction == FACTION_MPF) then
return true;
end;
elseif (bHuman == false) then
if (faction == FACTION_MPF) then
return false;
else
return true;
end;
else
return true;
end;
end;
end;