Author Topic: Re: Trouble in Terrorist Town Commands for ULX  (Read 94259 times)

0 Members and 1 Guest are viewing this topic.

Offline morten7000

  • Newbie
  • *
  • Posts: 39
  • Karma: -1
Re: Trouble in Terrorist Town Commands for ULX
« Reply #30 on: September 20, 2013, 09:37:46 AM »
Hi ulysses,
Im sorry for bringing this dead thread up again, but i thought why not write in the original threat than making a whole new "request help" thread,

Its because: Is there a way to code in the original code so that if a target "slaynr" player leave without the punishment we will be autobanned and added the the ban list of ulx?
Here is the code that i got and its from the workshop on steam.. well i think they are the same :P

Code: [Select]
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)

Thanks for you time and Hopefully help :3

Ps again sorry if i "bumbed" this unnessesary, just tell me and i would leave this thread right away and make a "request some sexy beast coder help" :3

An Error Has Occurred!

array_keys(): Argument #1 ($array) must be of type array, null given