Initial commit
This commit is contained in:
215
gamemodes/darkrp/gamemode/modules/police/sh_init.lua
Normal file
215
gamemodes/darkrp/gamemode/modules/police/sh_init.lua
Normal file
@@ -0,0 +1,215 @@
|
||||
local plyMeta = FindMetaTable("Player")
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Interface functions
|
||||
---------------------------------------------------------------------------]]
|
||||
function plyMeta:isArrested()
|
||||
return self:getDarkRPVar("Arrested")
|
||||
end
|
||||
|
||||
function plyMeta:isWanted()
|
||||
return self:getDarkRPVar("wanted")
|
||||
end
|
||||
|
||||
function plyMeta:getWantedReason()
|
||||
return self:getDarkRPVar("wantedReason")
|
||||
end
|
||||
|
||||
function plyMeta:isCP()
|
||||
return GAMEMODE.CivilProtection and GAMEMODE.CivilProtection[self:Team()] or false
|
||||
end
|
||||
|
||||
plyMeta.isMayor = fn.Compose{fn.Curry(fn.GetValue, 2)("mayor"), plyMeta.getJobTable}
|
||||
plyMeta.isChief = fn.Compose{fn.Curry(fn.GetValue, 2)("chief"), plyMeta.getJobTable}
|
||||
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Hooks
|
||||
---------------------------------------------------------------------------]]
|
||||
|
||||
function DarkRP.hooks:canRequestWarrant(target, actor, reason)
|
||||
if not IsValid(target) then return false, DarkRP.getPhrase("suspect_doesnt_exist") end
|
||||
if not reason or string.len(reason) == 0 then return false, DarkRP.getPhrase("vote_specify_reason") end
|
||||
if string.len(reason) > 200 then return false, DarkRP.getPhrase("too_long") end
|
||||
if not IsValid(actor) then return false, DarkRP.getPhrase("actor_doesnt_exist") end
|
||||
if not actor:Alive() then return false, DarkRP.getPhrase("must_be_alive_to_do_x", DarkRP.getPhrase("get_a_warrant")) end
|
||||
if target.warranted then return false, DarkRP.getPhrase("already_a_warrant") end
|
||||
if not actor:isCP() then return false, DarkRP.getPhrase("incorrect_job", DarkRP.getPhrase("get_a_warrant")) end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function DarkRP.hooks:canRemoveWarrant(target, actor)
|
||||
if not IsValid(target) then return false, DarkRP.getPhrase("suspect_doesnt_exist") end
|
||||
if not IsValid(actor) then return false, DarkRP.getPhrase("actor_doesnt_exist") end
|
||||
if not actor:Alive() then return false, DarkRP.getPhrase("must_be_alive_to_do_x", DarkRP.getPhrase("remove_a_warrant")) end
|
||||
if not target.warranted then return false, DarkRP.getPhrase("not_warranted") end
|
||||
if not actor:isCP() then return false, DarkRP.getPhrase("incorrect_job", DarkRP.getPhrase("remove_a_warrant")) end
|
||||
if actor:isArrested() then return false, DarkRP.getPhrase("unable", DarkRP.getPhrase("remove_a_warrant"), "") end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function DarkRP.hooks:canWanted(target, actor, reason)
|
||||
if not IsValid(target) then return false, DarkRP.getPhrase("suspect_doesnt_exist") end
|
||||
if not reason or string.len(reason) == 0 then return false, DarkRP.getPhrase("vote_specify_reason") end
|
||||
if string.len(reason) > 200 then return false, DarkRP.getPhrase("too_long") end
|
||||
if not IsValid(actor) then return false, DarkRP.getPhrase("actor_doesnt_exist") end
|
||||
if not actor:Alive() then return false, DarkRP.getPhrase("must_be_alive_to_do_x", DarkRP.getPhrase("make_someone_wanted")) end
|
||||
if not actor:isCP() then return false, DarkRP.getPhrase("incorrect_job", DarkRP.getPhrase("make_someone_wanted")) end
|
||||
if target:isWanted() then return false, DarkRP.getPhrase("already_wanted") end
|
||||
if not target:Alive() then return false, DarkRP.getPhrase("suspect_must_be_alive_to_do_x", DarkRP.getPhrase("make_someone_wanted")) end
|
||||
if target:isArrested() then return false, DarkRP.getPhrase("suspect_already_arrested") end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function DarkRP.hooks:canUnwant(target, actor)
|
||||
if not IsValid(target) then return false, DarkRP.getPhrase("suspect_doesnt_exist") end
|
||||
if not IsValid(actor) then return false, DarkRP.getPhrase("actor_doesnt_exist") end
|
||||
if not actor:Alive() then return false, DarkRP.getPhrase("must_be_alive_to_do_x", DarkRP.getPhrase("remove_wanted_status")) end
|
||||
if not actor:isCP() then return false, DarkRP.getPhrase("incorrect_job", DarkRP.getPhrase("remove_wanted_status")) end
|
||||
if not target:isWanted() then return false, DarkRP.getPhrase("not_wanted") end
|
||||
if not target:Alive() then return false, DarkRP.getPhrase("suspect_must_be_alive_to_do_x", DarkRP.getPhrase("remove_wanted_status")) end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Chat commands
|
||||
---------------------------------------------------------------------------]]
|
||||
for _, cmd in ipairs{"cr", "911", "999", "112", "000"} do
|
||||
DarkRP.declareChatCommand{
|
||||
command = cmd,
|
||||
description = "Cry for help, the police will come (hopefully)!",
|
||||
delay = 1.5
|
||||
}
|
||||
end
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "warrant",
|
||||
description = "Get a search warrant for a certain player. With this warrant you can search their house.",
|
||||
delay = 1.5,
|
||||
condition = fn.FAnd{plyMeta.Alive, plyMeta.isCP, fn.Compose{fn.Not, plyMeta.isArrested}},
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "unwarrant",
|
||||
description = "Remove a search warrant for a certain player. With a warrant you can search their house.",
|
||||
delay = 1.5,
|
||||
condition = fn.FAnd{plyMeta.Alive, plyMeta.isCP, fn.Compose{fn.Not, plyMeta.isArrested}},
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "wanted",
|
||||
description = "Make a player wanted. This is needed to get them arrested.",
|
||||
delay = 1.5,
|
||||
condition = fn.FAnd{plyMeta.Alive, plyMeta.isCP, fn.Compose{fn.Not, plyMeta.isArrested}},
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "unwanted",
|
||||
description = "Remove a player's wanted status.",
|
||||
delay = 1.5,
|
||||
condition = fn.FAnd{plyMeta.Alive, plyMeta.isCP, fn.Compose{fn.Not, plyMeta.isArrested}}
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "agenda",
|
||||
description = "Set the agenda.",
|
||||
delay = 1.5,
|
||||
condition = fn.Compose{fn.Not, fn.Curry(fn.Eq, 2)(nil), plyMeta.getAgenda}
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "addagenda",
|
||||
description = "Add a line of text to the agenda.",
|
||||
delay = 1.5,
|
||||
condition = fn.Compose{fn.Not, fn.Curry(fn.Eq, 2)(nil), plyMeta.getAgenda}
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "lottery",
|
||||
description = "Start a lottery.",
|
||||
delay = 1.5,
|
||||
condition = plyMeta.isMayor
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "lockdown",
|
||||
description = "Start a lockdown. Everyone will have to stay inside.",
|
||||
delay = 1.5,
|
||||
condition = plyMeta.isMayor
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "unlockdown",
|
||||
description = "Stop a lockdown.",
|
||||
delay = 1.5,
|
||||
condition = plyMeta.isMayor
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "arrest",
|
||||
description = "Forcefully arrest a player.",
|
||||
delay = 0.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "unarrest",
|
||||
description = "Forcefully unarrest a player.",
|
||||
delay = 0.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
local noMayorExists = fn.Compose{fn.Null, fn.Curry(fn.Filter, 2)(plyMeta.isMayor), player.GetAll}
|
||||
local noChiefExists = fn.Compose{fn.Null, fn.Curry(fn.Filter, 2)(plyMeta.isChief), player.GetAll}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "requestlicense",
|
||||
description = "Request a gun license.",
|
||||
delay = 1.5,
|
||||
condition = fn.FAnd {
|
||||
fn.FOr {
|
||||
fn.Curry(fn.Not, 2)(noMayorExists),
|
||||
fn.Curry(fn.Not, 2)(noChiefExists),
|
||||
fn.Compose{fn.Not, fn.Null, fn.Curry(fn.Filter, 2)(plyMeta.isCP), player.GetAll}
|
||||
},
|
||||
fn.Compose{fn.Not, fn.Curry(fn.Flip(plyMeta.getDarkRPVar), 2)("HasGunlicense")},
|
||||
fn.Compose{fn.Not, fn.Curry(fn.GetValue, 2)("LicenseRequested")}
|
||||
}
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "givelicense",
|
||||
description = "Give someone a gun license",
|
||||
delay = 1.5,
|
||||
condition = fn.FOr{
|
||||
plyMeta.isMayor, -- Mayors can hand out licenses
|
||||
fn.FAnd{plyMeta.isChief, noMayorExists}, -- Chiefs can if there is no mayor
|
||||
fn.FAnd{plyMeta.isCP, noChiefExists, noMayorExists} -- CP's can if there are no chiefs nor mayors
|
||||
}
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "demotelicense",
|
||||
description = "Start a vote to get someone's license revoked.",
|
||||
delay = 1.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "setlicense",
|
||||
description = "Forcefully give a player a license.",
|
||||
delay = 1.5
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "unsetlicense",
|
||||
description = "Forcefully revoke a player's license.",
|
||||
delay = 1.5
|
||||
}
|
||||
Reference in New Issue
Block a user