A simple (I hope) modification to Trouble in Terrorist Town
3 replies, posted
Hi. I've been renting a gmod server for about a week now, and at this point I'm running Trouble In Terrorist Town on it. I'm looking for a way to reward donors. I don't believe in selling administrative powers, and something as simple as an edited name color seems too little a reward. So I was thinking. One of the most frustrating parts of the game is sitting around while dead. In Terrorist town, you're able to possess objects after death. Unfortunately, you can't move them much due to a small and slow-to-fill "Punch-o-meter" that dictates how much you can move an object.
The idea came to me that perhaps I could give donors an infinite, or at least massively increased, punch-o-meter. After all, if they somehow use the props to kill people, I can always demote them from donor status. Unfortunately, I'm not much of a coder. I managed to find the lua file that controls all the punch-o-meter stuff, but I don't really know what to do from here.
What I was hoping someone could do for me is edit it so that I could put in steam IDs to give those people increased punch-o-meters. The file is propspec.lua. Here is a download link to that file alone. In the terrorist town gamemode, it is under gamemodes/terrortown/gamemode/propspec.lua
[code]---- Spectator prop meddling
local string = string
local math = math
PROPSPEC = {}
local propspec_toggle = CreateConVar("ttt_spec_prop_control", "1")
local propspec_base = CreateConVar("ttt_spec_prop_base", "8")
local propspec_min = CreateConVar("ttt_spec_prop_maxpenalty", "-6")
local propspec_max = CreateConVar("ttt_spec_prop_maxbonus", "16")
function PROPSPEC.Start(ply, ent)
ply:Spectate(OBS_MODE_CHASE)
ply:SpectateEntity(ent)
local bonus = math.Clamp(math.ceil(ply:Frags() / 2), propspec_min:GetInt(), propspec_max:GetInt())
ply.propspec = {ent=ent, t=0, retime=0, punches=0, max=propspec_base:GetInt() + bonus}
ent:SetNWEntity("spec_owner", ply)
ply:SetNWInt("bonuspunches", bonus)
end
local function IsBlacklistedClass(cls)
return cls == "prop_ragdoll" or
string.match(cls, "ttt_*") or
string.match(cls, "weapon_*") or
string.match(cls, "item_*") or
string.match(cls, "prop_vehicle*") or
string.match(cls, "prop_door*") or
string.match(cls, "func_button*")
end
function PROPSPEC.Target(ply, ent)
if not propspec_toggle:GetBool() then return end
if not IsValid(ply) or not ply:IsSpec() or not IsValid(ent) then return end
if IsValid(ent:GetNWEntity("spec_owner", nil)) then return end
local phys = ent:GetPhysicsObject()
if ent:GetName() != "" and not GAMEMODE.propspec_allow_named then return end
if not ValidEntity(phys) or not phys:IsMoveable() then return end
if IsBlacklistedClass(ent:GetClass()) then return end
PROPSPEC.Start(ply, ent)
end
function PROPSPEC.End(ply)
local ent = ply.propspec.ent or ply:GetObserverTarget()
if IsValid(ent) then
ent:SetNWEntity("spec_owner", nil)
end
ply.propspec = nil
ply:SpectateEntity(nil)
ply:Spectate(OBS_MODE_ROAMING)
ply:ResetViewRoll()
timer.Simple(0.1, function()
if IsValid(ply) then ply:ResetViewRoll() end
end)
end
local propspec_force = CreateConVar("ttt_spec_prop_force", "100")
function PROPSPEC.Key(ply, key)
local ent = ply.propspec.ent
local phys = IsValid(ent) and ent:GetPhysicsObject()
if not IsValid(ent) or not IsValid(phys) then
PROPSPEC.End(ply)
return false
end
if not phys:IsMoveable() then
PROPSPEC.End(ply)
return true
elseif phys:HasGameFlag(FVPHYSICS_PLAYER_HELD) then
-- we can stay with the prop while it's held, but not affect it
if key == IN_DUCK then
PROPSPEC.End(ply)
end
return true
end
local pr = ply.propspec
if pr.t > CurTime() then return true end
if pr.punches < 1 then return true end
local m = math.min(150, phys:GetMass())
local force = propspec_force:GetInt()
local aim = ply:GetAimVector()
local mf = m * force
pr.t = CurTime() + 0.15
if key == IN_JUMP then
-- upwards bump
phys:ApplyForceCenter(Vector(0,0, mf))
pr.t = CurTime() + 0.05
elseif key == IN_FORWARD then
-- bump away from player
phys:ApplyForceCenter(aim * mf)
elseif key == IN_BACK then
phys:ApplyForceCenter(aim * (mf * -1))
elseif key == IN_MOVELEFT then
phys:AddAngleVelocity(Angle(0, 0, 120))
phys:ApplyForceCenter(Vector(0,0, mf / 3))
elseif key == IN_MOVERIGHT then
phys:AddAngleVelocity(Angle(0, 0, -120))
phys:ApplyForceCenter(Vector(0,0, mf / 3))
elseif key == IN_DUCK then
PROPSPEC.End(ply)
return true
else
return true -- eat other keys, and do not decrement punches
end
pr.punches = math.max(pr.punches - 1, 0)
ply:SetNWFloat("specpunches", pr.punches / pr.max)
return true
end
local propspec_retime = CreateConVar("ttt_spec_prop_rechargetime", "1.6")
function PROPSPEC.Recharge(ply)
local pr = ply.propspec
if pr.retime < CurTime() then
pr.punches = math.min(pr.punches + 1, pr.max)
ply:SetNWFloat("specpunches", pr.punches / pr.max)
pr.retime = CurTime() + propspec_retime:GetFloat()
end
end
[/code]
Hm. Well, people have looked at it. If you're stopping by and don't mind answering a question, do you think this is too difficult a thing to ask, or just something boring that nobody wants to help with?
I think that most people just can't be bothered to look at it. But give it a bit more time and maybe someone will.
Edit - Also the link doesn't work.
Alright. Now that I know there's a code format available, I used that.
Sorry, you need to Log In to post a reply to this thread.