mirror of
https://github.com/fortressforever/fortressforever-scripts.git
synced 2024-11-22 12:41:17 +00:00
255 lines
8.2 KiB
Lua
255 lines
8.2 KiB
Lua
|
|
-- base.lua
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- This file is loaded automatically whenever a map is loaded.
|
|
-- Do not change this file.
|
|
-----------------------------------------------------------------------------
|
|
|
|
require "util.utils"
|
|
Class = require "util.class"
|
|
Collection = require "util.collection"
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- defines
|
|
-----------------------------------------------------------------------------
|
|
-- Events
|
|
EVENT_ALLOWED = true
|
|
EVENT_DISALLOWED = false
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- set a cvar, but check to make sure it's not already set correctly
|
|
-----------------------------------------------------------------------------
|
|
function set_cvar( cvarname, value )
|
|
if GetConvar( cvarname ) ~= value then
|
|
SetConvar( cvarname, value )
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Output Events
|
|
-----------------------------------------------------------------------------
|
|
function OpenDoor(name) OutputEvent( name, "Open" ) end
|
|
function CloseDoor(name) OutputEvent( name, "Close" ) end
|
|
function ToggleDoor(name) OutputEvent( name, "Toggle" ) end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- baseclass (everything derives from this guy)
|
|
-----------------------------------------------------------------------------
|
|
baseclass = { }
|
|
function baseclass:new (o)
|
|
-- create object if user does not provide one
|
|
o = o or {}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- set up pairs and ipairs for iterating the global entity list
|
|
--
|
|
-- Example usage:
|
|
--
|
|
-- for ent_id, ent in pairs(GlobalEntityList) do
|
|
-- print(ent_id, ent)
|
|
-- end
|
|
--
|
|
-- Note: The order of iteration is always arbitrary
|
|
-----------------------------------------------------------------------------
|
|
local GlobalEntityListIterator = function()
|
|
local entity = GlobalEntityList:FirstEntity()
|
|
return function()
|
|
local cur_ent = entity
|
|
entity = GlobalEntityList:NextEntity(cur_ent)
|
|
if cur_ent then
|
|
return cur_ent:GetId(), cur_ent
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
|
|
local ipairs_base = ipairs
|
|
ipairs = function(t)
|
|
if t == GlobalEntityList then
|
|
return GlobalEntityListIterator()
|
|
end
|
|
return ipairs_base(t)
|
|
end
|
|
|
|
local pairs_base = pairs
|
|
pairs = function(t)
|
|
if t == GlobalEntityList then
|
|
return GlobalEntityListIterator()
|
|
end
|
|
return pairs_base(t)
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- make luabind's class_info function safer
|
|
-- (don't crash if class_info() is called on non-luabind objects)
|
|
-----------------------------------------------------------------------------
|
|
local class_info_base = class_info
|
|
class_info = function(obj)
|
|
local obj_type = type(obj)
|
|
if obj_type == "userdata" and getmetatable(obj).__luabind_class then
|
|
return class_info_base(obj)
|
|
end
|
|
return {}
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- reset everything
|
|
-----------------------------------------------------------------------------
|
|
function RespawnAllPlayers()
|
|
ApplyToAll({ AT.kRemovePacks, AT.kRemoveProjectiles, AT.kRespawnPlayers, AT.kRemoveBuildables, AT.kRemoveRagdolls, AT.kStopPrimedGrens, AT.kReloadClips, AT.kAllowRespawn, AT.kReturnDroppedItems })
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- lowercase c "Broadcast" functions, because uppercase C "BroadCast" functions are lame
|
|
-----------------------------------------------------------------------------
|
|
function BroadcastMessage( message )
|
|
BroadCastMessage( message )
|
|
end
|
|
|
|
function BroadcastMessageToPlayer( player, message )
|
|
BroadCastMessageToPlayer( player, message )
|
|
end
|
|
|
|
function BroadcastSound( soundname )
|
|
BroadCastSound( soundname )
|
|
end
|
|
|
|
function BroadcastSoundToPlayer( player, soundname )
|
|
BroadCastSoundToPlayer( player, soundname )
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- trigger_ff_script
|
|
-----------------------------------------------------------------------------
|
|
trigger_ff_script = baseclass:new({})
|
|
function trigger_ff_script:allowed() return EVENT_ALLOWED end
|
|
function trigger_ff_script:ontouch() end
|
|
function trigger_ff_script:ontrigger() end
|
|
function trigger_ff_script:onendtouch() end
|
|
function trigger_ff_script:onfailtouch() end
|
|
function trigger_ff_script:onexplode() return EVENT_ALLOWED end
|
|
function trigger_ff_script:onbuild() return EVENT_ALLOWED end
|
|
function trigger_ff_script:onfailuse() end
|
|
function trigger_ff_script:onuse() end
|
|
function trigger_ff_script:onactive() end
|
|
function trigger_ff_script:oninactive() end
|
|
function trigger_ff_script:onremoved() end
|
|
function trigger_ff_script:onrestored() end
|
|
|
|
function trigger_ff_script:spawn()
|
|
|
|
-- notify the bot if this is a goal type
|
|
local info = CastToTriggerScript(entity)
|
|
if(info ~= nil) then
|
|
if self.botgoaltype and self.team then
|
|
info:SetBotGoalInfo(self.botgoaltype, self.team)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- trigger_ff_clip
|
|
-----------------------------------------------------------------------------
|
|
trigger_ff_clip = baseclass:new({})
|
|
function trigger_ff_clip:spawn()
|
|
local clip = CastToTriggerClip(entity)
|
|
if (clip ~= nil) then
|
|
if self.clipflags then
|
|
clip:SetClipFlags(self.clipflags)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- func_button
|
|
-----------------------------------------------------------------------------
|
|
func_button = baseclass:new({})
|
|
function func_button:allowed() return true end
|
|
function func_button:ondamage() end
|
|
function func_button:ontouch() end
|
|
function func_button:onuse() end
|
|
function func_button:onfailuse() end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- info_ff_script
|
|
-----------------------------------------------------------------------------
|
|
info_ff_script = baseclass:new({ model = "models/items/healthkit.mdl" })
|
|
function info_ff_script:onreturn() end
|
|
function info_ff_script:ondrop() end
|
|
function info_ff_script:onownerdie() end
|
|
function info_ff_script:onownerforcerespawn() end
|
|
function info_ff_script:onownerfeign() end
|
|
function info_ff_script:onactive() end
|
|
function info_ff_script:oninactive() end
|
|
function info_ff_script:onremoved() end
|
|
function info_ff_script:onrestored() end
|
|
function info_ff_script:onexplode() end
|
|
function info_ff_script:dropatspawn() return false end
|
|
function info_ff_script:usephysics() return false end
|
|
function info_ff_script:hasshadow() return true end
|
|
|
|
-- anims must be named certain things...
|
|
function info_ff_script:hasanimation() return false end
|
|
|
|
-- For when this object is carried, these offsets are used to place
|
|
-- the info_ff_script relative to the objects GetAbsOrigin()
|
|
function info_ff_script:attachoffset()
|
|
local offset = Vector( 0, 0, 0 )
|
|
return offset
|
|
end
|
|
|
|
function info_ff_script:precache()
|
|
PrecacheModel(self.model)
|
|
end
|
|
|
|
function info_ff_script:spawn()
|
|
-- set model and skin
|
|
local info = CastToInfoScript( entity )
|
|
info:SetModel(self.model)
|
|
if self.modelskin then
|
|
info:SetSkin(self.modelskin)
|
|
end
|
|
|
|
-- setup touch flags
|
|
if self.touchflags ~= nil then info:SetTouchFlags(self.touchflags) end
|
|
if self.disallowtouchflags ~= nil then info:SetDisallowTouchFlags(self.disallowtouchflags) end
|
|
|
|
-- notify the bot if this is a goal type
|
|
if(info ~= nil) then
|
|
if self.botgoaltype then
|
|
info:SetBotGoalInfo(self.botgoaltype)
|
|
end
|
|
end
|
|
|
|
if self.renderfx ~= nil then
|
|
info:SetRenderFx(self.renderfx)
|
|
end
|
|
end
|
|
function info_ff_script:gettouchsize( mins, maxs ) end
|
|
function info_ff_script:getphysicssize( mins, maxs ) end
|
|
function info_ff_script:getbloatsize() return 12 end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- info_ff_teamspawn
|
|
-----------------------------------------------------------------------------
|
|
info_ff_teamspawn = baseclass:new({})
|
|
function info_ff_teamspawn:validspawn() return true end
|