Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function ulx.slaynr( calling_ply, target_ply, num_slay, should_slaynr )
- if not GetConVarString("gamemode") == "jailbreak" 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( "Jailbreak", "ulx slaynr", ulx.slaynr, "!slaynr" )
- slaynr:addParam{ type=ULib.cmds.PlayerArg }
- slaynr:addParam{ type=ULib.cmds.NumArg, max=100, 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("JailBreakRoundStart", "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:StripWeapons()
- table.insert( affected_plys, v )
- timer.Create("check" .. v:SteamID(), 0.1, 0, function() --workaround for issue with tommys damage log
- v:Kill()
- GAMEMODE:PlayerSilentDeath(v)
- local corpse = corpse_find(v)
- if corpse then
- v:SetNWBool("body_found", true)
- SendFullStateUpdate()
- if string.find(corpse:GetModel(), "zm_", 6, true) then
- corpse:Remove()
- elseif corpse.player_ragdoll then
- corpse:Remove()
- end
- end
- v:SetTeam(TEAM_SPEC)
- if v:IsSpec() then timer.Destroy("check" .. v:SteamID()) return end
- end)
- timer.Create("traitorcheck" .. v:SteamID(), 1, 0, function() --have to wait for gamemode before doing this
- if v:GetRole() == ROLE_TRAITOR then
- SendConfirmedTraitors( GetInnocentFilter( false ) ) -- Update innocent's list of traitors.
- SCORE:HandleBodyFound( v, v )
- end
- 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]----------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement