• ULX Timer?
    7 replies, posted
OK. So I have my Garry's Mod server and it runs TTT, so in one of the donator items, you can force yourself to be traitor next round, and geez, so many people use it too many times. I bet you can see where i'm going with this. So I was wondering if there was a simple code I could add into it so that people could only do it every like three rounds, or is there an access tag for that? Thanks! :D
lol okay you made it so donators can force themselves to be a traitor.
Prrrroooooobbbblllleeeemmmm? We all have different lifestyles.
make a variable on the player called v.TraitorForced = v.TraitorForced + 1 every time they force it, on the hook TTTRoundEnd or whatever it's called, do v.TraitorForced = v.TraitorForced -1 if they were forced that round. if they pass a threshold, disallow them from buying it.
[QUOTE=zerothefallen;42506802]make a variable on the player called v.TraitorForced = v.TraitorForced + 1 every time they force it, on the hook TTTRoundEnd or whatever it's called, do v.TraitorForced = v.TraitorForced -1 if they were forced that round. if they pass a threshold, disallow them from buying it.[/QUOTE] Ermm, Im not so good at this.. Could you help me out a little?... heres my code. [CODE] local CATEGORY_NAME = "TTT Admin" local gamemode_error = "The current gamemode is not trouble in terrorest town" --[Ulx Completes]------------------------------------------------------------------------------ ulx.target_role = {} function updateRoles() table.Empty( ulx.target_role ) table.insert(ulx.target_role,"traitor") table.insert(ulx.target_role,"detective") table.insert(ulx.target_role,"innocent") end hook.Add( ULib.HOOK_UCLCHANGED, "ULXRoleNamesUpdate", updateRoles ) updateRoles() --[End]---------------------------------------------------------------------------------------- --[Global Helper Functions][Used by more than one command.]------------------------------------ --[[send_messages][Sends messages to player(s)] @param {[PlayerObject]} v [The player(s) to send the message to.] @param {[String]} message [The message that will be sent.] --]] function send_messages(v, message) if type(v) == "Players" then v:ChatPrint(message) elseif type(v) == "table" then for i=1, #v do v[i]:ChatPrint(message) end end end --[[corpse_find][Finds the corpse of a given player.] @param {[PlayerObject]} v [The player that to find the corpse for.] --]] function corpse_find(v) for _, ent in pairs( ents.FindByClass( "prop_ragdoll" )) do if ent.uqid == v:UniqueID() and IsValid(ent) then return ent or false end end end --[[corpse_remove][removes the corpse given.] @param {[Ragdoll]} corpse [The corpse to be removed.] --]] function corpse_remove(corpse) CORPSE.SetFound(corpse, false) if string.find(corpse:GetModel(), "zm_", 6, true) then corpse:Remove() elseif corpse.player_ragdoll then corpse:Remove() end end --[[corpse_identify][identifies the given corpse.] @param {[Ragdoll]} corpse [The corpse to be identified.] --]] function corpse_identify(corpse) if corpse then local ply = player.GetByUniqueID(corpse.uqid) ply:SetNWBool("body_found", true) CORPSE.SetFound(corpse, true) end end --[End]---------------------------------------------------------------------------------------- --[Force role]--------------------------------------------------------------------------------- --[[ulx.force][Forces <target(s)> to become a specified role.] @param {[PlayerObject]} calling_ply [The player who used the command.] @param {[PlayerObject]} target_plys [The player(s) who will have the effects of the command applied to them.] @param {[Number]} target_role [The role that target player(s) will have there role set to.] @param {[Boolean]} should_silent [Hidden, determines weather the output will be silent or not.] --]] function ulx.slaynr( calling_ply, target_ply, num_slay, should_slaynr ) if not GetConVarString("gamemode") == "terrortown" then ULib.tsayError( calling_ply, gamemode_error, true ) else local affected_plys = {} local slays_left = tonumber(target_ply:GetPData("slaynr_slays")) or 0 local current_slay local new_slay if ulx.getExclusive( target_ply, calling_ply ) then ULib.tsayError( calling_ply, ulx.getExclusive( target_ply, calling_ply ), true ) elseif num_slay < 0 then ULib.tsayError( calling_ply, "Invalid integer:\"" .. num_slay .. "\" specified.", true ) else current_slay = tonumber(target_ply:GetPData("slaynr_slays")) or 0 if not should_slaynr then new_slay = current_slay + num_slay else new_slay = current_slay - num_slay end --local slay_reason = reason --if slay_reason == "reason" then -- slay_reason = false --end if new_slay > 0 then target_ply:SetPData("slaynr_slays", new_slay) --target_ply:SetPData("slaynr_reason", slay_reason) else target_ply:RemovePData("slaynr_slays") --target_ply:RemovePData("slaynr_reason") end local slays_left = tonumber(target_ply:GetPData("slaynr_slays")) or 0 local slays_removed = ( current_slay - slays_left ) or 0 if slays_removed==0 then chat_message = ("#T will not be slain next round.") elseif slays_removed > 0 then chat_message = ("#A removed ".. slays_removed .." round(s) of slaying from #T.") elseif slays_left == 1 then chat_message = ("#A will slay #T next round.") elseif slays_left > 1 then chat_message = ("#A will slay #T for the next ".. tostring(slays_left) .." rounds.") end ulx.fancyLogAdmin( calling_ply, chat_message, target_ply, reason ) end end end local slaynr = ulx.command( CATEGORY_NAME, "ulx slaynr", ulx.slaynr, "!slaynr" ) slaynr:addParam{ type=ULib.cmds.PlayerArg } slaynr:addParam{ type=ULib.cmds.NumArg, default=1, hint="rounds", ULib.cmds.optional, ULib.cmds.round } --slaynr:addParam{ type=ULib.cmds.StringArg, hint="reason", ULib.cmds.optional} slaynr:addParam{ type=ULib.cmds.BoolArg, invisible=true } slaynr:defaultAccess( ULib.ACCESS_ADMIN ) slaynr:help( "Slays target(s) for a number of rounds" ) slaynr:setOpposite( "ulx rslaynr", {_, _, _, true}, "!rslaynr" ) --[Helper Functions]--------------------------------------------------------------------------- hook.Add("TTTBeginRound", "SlayPlayersNextRound", function() local affected_plys = {} for _,v in pairs(player.GetAll()) do local slays_left = tonumber(v:GetPData("slaynr_slays")) or 0 if v:Alive() and slays_left > 0 then local slays_left=slays_left -1 if slays_left == 0 then v:RemovePData("slaynr_slays") v:RemovePData("slaynr_reason") else v:SetPData("slaynr_slays", slays_left) end v:Kill() table.insert( affected_plys, v ) local corpse = corpse_find(v) if corpse then corpse_identify(corpse) corpse_remove(corpse) end end end local slay_message for i=1, #affected_plys do local v = affected_plys[ i ] local string_inbetween if i > 1 and #affected_plys == i then string_inbetween=" and " elseif i > 1 then string_inbetween=", " end string_inbetween = string_inbetween or "" slay_message = ( ( slay_message or "") .. string_inbetween ) slay_message = ( ( slay_message or "") .. v:Nick() ) end local slay_message_context if #affected_plys == 1 then slay_message_context ="was" else slay_message_context ="were" end if #affected_plys ~= 0 then ULib.tsay(_, slay_message .. " ".. slay_message_context .." slain.") end end) hook.Add("PlayerSpawn", "Inform" , function(ply) local slays_left = tonumber(ply:GetPData("slaynr_slays")) or 0 local slay_reason = false if ply:Alive() and slays_left > 0 then local chat_message = "" if slays_left > 0 then chat_message = (chat_message .. "You will be slain this round") end if slays_left > 1 then chat_message = (chat_message .. " and ".. (slays_left - 1) .." round(s) after the current round") end if slay_reason then chat_message = (chat_message .. " for \"".. slays_reason .."\".") else chat_message = (chat_message .. ".") end ply:ChatPrint(chat_message) end end) --[End]---------------------------------------------------------------------------------------- --[Force role]--------------------------------------------------------------------------------- --[[ulx.force][Forces <target(s)> to become a specified role.] @param {[PlayerObject]} calling_ply [The player who used the command.] @param {[PlayerObject]} target_plys [The player(s) who will have the effects of the command applied to them.] @param {[Number]} target_ro
[lua]local CATEGORY_NAME = "TTT Admin" local gamemode_error = "The current gamemode is not trouble in terrorest town" --[Ulx Completes]------------------------------------------------------------------------------ ulx.target_role = {} function updateRoles() table.Empty( ulx.target_role ) table.insert(ulx.target_role,"traitor") table.insert(ulx.target_role,"detective") table.insert(ulx.target_role,"innocent") end hook.Add( ULib.HOOK_UCLCHANGED, "ULXRoleNamesUpdate", updateRoles ) updateRoles() --[End]---------------------------------------------------------------------------------------- --[Global Helper Functions][Used by more than one command.]------------------------------------ --[[send_messages][Sends messages to player(s)] @param {[PlayerObject]} v [The player(s) to send the message to.] @param {[String]} message [The message that will be sent.] --]] function send_messages(v, message) if type(v) == "Players" then v:ChatPrint(message) elseif type(v) == "table" then for i=1, #v do v[i]:ChatPrint(message) end end end --[[corpse_find][Finds the corpse of a given player.] @param {[PlayerObject]} v [The player that to find the corpse for.] --]] function corpse_find(v) for _, ent in pairs( ents.FindByClass( "prop_ragdoll" )) do if ent.uqid == v:UniqueID() and IsValid(ent) then return ent or false end end end --[[corpse_remove][removes the corpse given.] @param {[Ragdoll]} corpse [The corpse to be removed.] --]] function corpse_remove(corpse) CORPSE.SetFound(corpse, false) if string.find(corpse:GetModel(), "zm_", 6, true) then corpse:Remove() elseif corpse.player_ragdoll then corpse:Remove() end end --[[corpse_identify][identifies the given corpse.] @param {[Ragdoll]} corpse [The corpse to be identified.] --]] function corpse_identify(corpse) if corpse then local ply = player.GetByUniqueID(corpse.uqid) ply:SetNWBool("body_found", true) CORPSE.SetFound(corpse, true) end end --[End]---------------------------------------------------------------------------------------- --[Force role]--------------------------------------------------------------------------------- --[[ulx.force][Forces <target(s)> to become a specified role.] @param {[PlayerObject]} calling_ply [The player who used the command.] @param {[PlayerObject]} target_plys [The player(s) who will have the effects of the command applied to them.] @param {[Number]} target_role [The role that target player(s) will have there role set to.] @param {[Boolean]} should_silent [Hidden, determines weather the output will be silent or not.] --]] function ulx.slaynr( calling_ply, target_ply, num_slay, should_slaynr ) if not GetConVarString("gamemode") == "terrortown" then ULib.tsayError( calling_ply, gamemode_error, true ) else local affected_plys = {} local slays_left = tonumber(target_ply:GetPData("slaynr_slays")) or 0 local current_slay local new_slay if ulx.getExclusive( target_ply, calling_ply ) then ULib.tsayError( calling_ply, ulx.getExclusive( target_ply, calling_ply ), true ) elseif num_slay < 0 then ULib.tsayError( calling_ply, "Invalid integer:\"" .. num_slay .. "\" specified.", true ) else current_slay = tonumber(target_ply:GetPData("slaynr_slays")) or 0 if not should_slaynr then new_slay = current_slay + num_slay else new_slay = current_slay - num_slay end --local slay_reason = reason --if slay_reason == "reason" then -- slay_reason = false --end if new_slay > 0 then target_ply:SetPData("slaynr_slays", new_slay) --target_ply:SetPData("slaynr_reason", slay_reason) else target_ply:RemovePData("slaynr_slays") --target_ply:RemovePData("slaynr_reason") end local slays_left = tonumber(target_ply:GetPData("slaynr_slays")) or 0 local slays_removed = ( current_slay - slays_left ) or 0 if slays_removed==0 then chat_message = ("#T will not be slain next round.") elseif slays_removed > 0 then chat_message = ("#A removed ".. slays_removed .." round(s) of slaying from #T.") elseif slays_left == 1 then chat_message = ("#A will slay #T next round.") elseif slays_left > 1 then chat_message = ("#A will slay #T for the next ".. tostring(slays_left) .." rounds.") end ulx.fancyLogAdmin( calling_ply, chat_message, target_ply, reason ) end end end local slaynr = ulx.command( CATEGORY_NAME, "ulx slaynr", ulx.slaynr, "!slaynr" ) slaynr:addParam{ type=ULib.cmds.PlayerArg } slaynr:addParam{ type=ULib.cmds.NumArg, default=1, hint="rounds", ULib.cmds.optional, ULib.cmds.round } --slaynr:addParam{ type=ULib.cmds.StringArg, hint="reason", ULib.cmds.optional} slaynr:addParam{ type=ULib.cmds.BoolArg, invisible=true } slaynr:defaultAccess( ULib.ACCESS_ADMIN ) slaynr:help( "Slays target(s) for a number of rounds" ) slaynr:setOpposite( "ulx rslaynr", {_, _, _, true}, "!rslaynr" ) --[Helper Functions]--------------------------------------------------------------------------- hook.Add("TTTBeginRound", "SlayPlayersNextRound", function() local affected_plys = {} for _,v in pairs(player.GetAll()) do local slays_left = tonumber(v:GetPData("slaynr_slays")) or 0 if v:Alive() and slays_left > 0 then local slays_left=slays_left -1 if slays_left == 0 then v:RemovePData("slaynr_slays") v:RemovePData("slaynr_reason") else v:SetPData("slaynr_slays", slays_left) end v:Kill() table.insert( affected_plys, v ) local corpse = corpse_find(v) if corpse then corpse_identify(corpse) corpse_remove(corpse) end end end local slay_message for i=1, #affected_plys do local v = affected_plys[ i ] local string_inbetween if i > 1 and #affected_plys == i then string_inbetween=" and " elseif i > 1 then string_inbetween=", " end string_inbetween = string_inbetween or "" slay_message = ( ( slay_message or "") .. string_inbetween ) slay_message = ( ( slay_message or "") .. v:Nick() ) end local slay_message_context if #affected_plys == 1 then slay_message_context ="was" else slay_message_context ="were" end if #affected_plys ~= 0 then ULib.tsay(_, slay_message .. " ".. slay_message_context .." slain.") end end) hook.Add("PlayerSpawn", "Inform" , function(ply) local slays_left = tonumber(ply:GetPData("slaynr_slays")) or 0 local slay_reason = false if ply:Alive() and slays_left > 0 then local chat_message = "" if slays_left > 0 then chat_message = (chat_message .. "You will be slain this round") end if slays_left > 1 then chat_message = (chat_message .. " and ".. (slays_left - 1) .." round(s) after the current round") end if slay_reason then chat_message = (chat_message .. " for \"".. slays_reason .."\".") else chat_message = (chat_message .. ".") end ply:ChatPrint(chat_message) end end) --[End]---------------------------------------------------------------------------------------- --[Force role]--------------------------------------------------------------------------------- --[[ulx.force][Forces <target(s)> to become a specified role.] @param {[PlayerObject]} calling_ply [The player who used the command.] @param {[PlayerObject]} target_plys [The player(s) who will have the effects of the command applied to them.] @param {[Number]} target_role [The role that target player(s) will have there role set to.] @param {[Boolean]} should_silent [Hidden, determines weather the output will be silent or not.] --]] function ulx.force( calling_ply, target_plys, target_role, should_silent ) if not GetConVarString("gamemode") == "terrortown" then ULib.tsayError( calling_ply, gamemode_error, true ) else local affected_plys = {} local star
[QUOTE]in there, this should work. go 2 line like 573 to edit the settings of the max rounds they can use[/QUOTE] When I did it, it didnt make me traitor, it only told me I was marked for the next round every round
[url]http://puu.sh/4OSf2.lua[/url] should work now, made some errors
Sorry, you need to Log In to post a reply to this thread.