mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-15 21:03:46 +03:00
215 lines
7.9 KiB
Lua
215 lines
7.9 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
if SERVER then
|
|
AddCSLuaFile()
|
|
AddCSLuaFile( "chess/sh_player_ext.lua" )
|
|
AddCSLuaFile( "chess/cl_top.lua" )
|
|
AddCSLuaFile( "chess/cl_dermaboard.lua" )
|
|
|
|
include( "chess/sh_player_ext.lua" )
|
|
include( "chess/sv_sql.lua" )
|
|
else
|
|
include( "chess/sh_player_ext.lua" )
|
|
include( "chess/cl_top.lua" )
|
|
include( "chess/cl_dermaboard.lua" )
|
|
end
|
|
|
|
if SERVER then
|
|
function ChessBoard_DoOverrides()
|
|
if GAMEMODE.Name=="Cinema" then --Cinema overrides
|
|
hook.Add("CanPlayerEnterVehicle", "EnterSeat", function(ply, vehicle) --Overrides default func
|
|
if vehicle:GetClass() != "prop_vehicle_prisoner_pod" then return end
|
|
|
|
if vehicle.Removing then return false end
|
|
return (vehicle:GetOwner() == ply) or vehicle:GetNWBool( "IsChessSeat", false )
|
|
end)
|
|
end
|
|
end
|
|
hook.Add( "Initialize", "ChessBoardOverrides", ChessBoard_DoOverrides )
|
|
|
|
CreateConVar( "chess_wagers", 1, FCVAR_ARCHIVE, "Set whether players can wager on their chess games." )
|
|
CreateConVar( "chess_darkrp_wager", 1, FCVAR_ARCHIVE, "[DarkRP only] Wagers should use DarkRP wallet." )
|
|
|
|
CreateConVar( "chess_debug", 0, FCVAR_ARCHIVE, "Debug mode." )
|
|
CreateConVar( "chess_limitmoves", 1, FCVAR_ARCHIVE, "Enable 50 move rule." )
|
|
else -- CLIENT
|
|
CreateConVar( "chess_gridletters", 1, FCVAR_ARCHIVE, "Show grid letters." )
|
|
end
|
|
|
|
-- DarkRP --
|
|
------------
|
|
hook.Add("canArrest", "Chess PreventArrest", function( cop, target )
|
|
if not (IsValid(target) and target:GetNWBool("IsInChess", false)) then return end
|
|
|
|
local board = target:GetNWEntity( "ActiveChessBoard", nil )
|
|
if not (IsValid(board) and board:GetPlaying()) then return end
|
|
if target~=board:GetWhitePlayer() and target~=board:GetBlackPlayer() then return end
|
|
|
|
return false,"Cannot arrest players during a game in progress" -- Prevent arrest during Chess
|
|
end)
|
|
|
|
-- Admin Commands --
|
|
--------------------
|
|
local function SetupCommands()
|
|
if serverguard then
|
|
/////////////////
|
|
// Serverguard //
|
|
/////////////////
|
|
serverguard.permission:Add("Set Chess Elo")
|
|
|
|
if SERVER then
|
|
// Update function
|
|
local function SGUpdate(player, target, newElo, isDraughts)
|
|
if type(target)=="Player" and IsValid(target) then
|
|
if isDraughts then
|
|
target:SetDraughtsElo( newElo )
|
|
else
|
|
target:SetChessElo( newElo )
|
|
end
|
|
Chess_UpdateElo( target )
|
|
|
|
serverguard.Notify(nil,
|
|
SERVERGUARD.NOTIFY.GREEN, serverguard.player:GetName(player),
|
|
SERVERGUARD.NOTIFY.WHITE, isDraughts and " has set the Checkers Elo rating of " or " has set the Chess Elo rating of ",
|
|
SERVERGUARD.NOTIFY.RED, serverguard.player:GetName(target),
|
|
SERVERGUARD.NOTIFY.WHITE, " to ",
|
|
SERVERGUARD.NOTIFY.RED, tostring(newElo),
|
|
SERVERGUARD.NOTIFY.WHITE, "."
|
|
)
|
|
elseif (string.SteamID(target)) then
|
|
local success,reason = Chess_SetElo( target, newElo, isDraughts )
|
|
|
|
local queryObj = serverguard.mysql:Select("serverguard_users");
|
|
queryObj:Where("steam_id", target)
|
|
queryObj:Limit(1)
|
|
queryObj:Callback(function(result, status, lastID)
|
|
local name = target
|
|
if (type(result) == "table" and #result > 0) then
|
|
name = result[1].name or name
|
|
end
|
|
|
|
if success then
|
|
serverguard.Notify(nil,
|
|
SERVERGUARD.NOTIFY.GREEN, serverguard.player:GetName(player),
|
|
SERVERGUARD.NOTIFY.WHITE, isDraughts and " has set the Checkers Elo rating of " or " has set the Chess Elo rating of ",
|
|
SERVERGUARD.NOTIFY.RED, name,
|
|
SERVERGUARD.NOTIFY.WHITE, " to ",
|
|
SERVERGUARD.NOTIFY.RED, tostring(newElo),
|
|
SERVERGUARD.NOTIFY.WHITE, "."
|
|
)
|
|
else
|
|
serverguard.Notify(player, SERVERGUARD.NOTIFY.RED, ("Could not set elo. (%s)"):format(tostring(reason)) )
|
|
end
|
|
end)
|
|
queryObj:Execute()
|
|
else
|
|
serverguard.Notify(player, SGPF("cant_find_player_with_identifier"))
|
|
end
|
|
end
|
|
|
|
// Chess command
|
|
local command = {}
|
|
|
|
command.help = "Set a player's Chess Elo rating."
|
|
command.command = "setelo"
|
|
command.arguments = {"player", "elo"}
|
|
command.permissions = {"Set Chess Elo"}
|
|
command.aliases = {"setelochess", "chesselo", "setchess", "setchesselo"}
|
|
|
|
function command:Execute(player, silent, arguments)
|
|
local target = util.FindPlayer(arguments[1], player, true)
|
|
local newElo = tonumber(arguments[2]) or 1400
|
|
|
|
SGUpdate( player, IsValid(target) and target or arguments[1], newElo, false )
|
|
end
|
|
serverguard.command:Add(command)
|
|
|
|
// Draughts command
|
|
local command = {}
|
|
|
|
command.help = "Set a player's Checkers Elo rating."
|
|
command.command = "setelocheckers"
|
|
command.arguments = {"player", "elo"}
|
|
command.permissions = {"Set Chess Elo"}
|
|
command.aliases = {"setcheckers", "setcheckerselo", "checkerselo", "setelodraughts", "setdraughts", "setdraughtselo", "draughtselo"}
|
|
|
|
function command:Execute(player, silent, arguments)
|
|
local target = util.FindPlayer(arguments[1], player, true)
|
|
local newElo = tonumber(arguments[2]) or 1400
|
|
|
|
SGUpdate( player, IsValid(target) and target or arguments[1], newElo, true )
|
|
end
|
|
|
|
serverguard.command:Add(command)
|
|
end
|
|
end
|
|
if ulx then
|
|
/////////
|
|
// ULX //
|
|
/////////
|
|
|
|
// Update
|
|
local function ULXUpdate(calling_ply, target, newElo, isDraughts)
|
|
if CLIENT then return end
|
|
|
|
if type(target)=="Player" and IsValid(target) then
|
|
if isDraughts then
|
|
target:SetDraughtsElo( newElo )
|
|
else
|
|
target:SetChessElo( newElo )
|
|
end
|
|
Chess_UpdateElo( target )
|
|
|
|
ulx.fancyLogAdmin( calling_ply, "#A set the #s Elo rating of #T to #i.", isDraughts and "Checkers" or "Chess", target, newElo )
|
|
elseif (string.SteamID(target or "")) then
|
|
local success,reason = Chess_SetElo( target, newElo, isDraughts )
|
|
|
|
if success then
|
|
ulx.fancyLogAdmin( calling_ply, "#A set the #s Elo rating of #s to #i.", isDraughts and "Checkers" or "Chess", target, newElo )
|
|
else
|
|
ULib.tsayError( calling_ply, ("Could not set elo. (%s)"):format(tostring(reason)) )
|
|
end
|
|
else
|
|
ULib.tsayError( calling_ply, "Invalid SteamID or Player." )
|
|
end
|
|
end
|
|
|
|
// Autocomplete
|
|
local function AutoComplete(...) return ULib.cmds.PlayerArg.complete(ULib.cmds.PlayerArg, ...) end
|
|
|
|
// Chess command
|
|
local function SetChessElo( calling_ply, steamid, newElo )
|
|
local target = ULib.getUser( steamid or "", true, calling_ply )
|
|
|
|
ULXUpdate( calling_ply, IsValid(target) and target or steamid, newElo, false )
|
|
end
|
|
local setchess = ulx.command( "Chess", "ulx chesselo", SetChessElo, {"!setelo", "!setelochess", "!chesselo", "!setchess", "!setchesselo"}, false, false, true )
|
|
setchess:addParam{ type=ULib.cmds.StringArg, hint="Player or SteamID", autocomplete_fn=AutoComplete }
|
|
setchess:addParam{ type=ULib.cmds.NumArg, hint="New Elo", min=0, default=1400 }
|
|
setchess:defaultAccess( ULib.ACCESS_SUPERADMIN )
|
|
setchess:help( "Set Chess Elo rating for user." )
|
|
|
|
// Draughts command
|
|
local function SetDraughtsElo( calling_ply, steamid, newElo )
|
|
local target = ULib.getUser( steamid, true, calling_ply )
|
|
|
|
ULXUpdate( calling_ply, IsValid(target) and target or steamID, newElo, true )
|
|
end
|
|
local setdraughts = ulx.command( "Chess", "ulx checkerselo", SetDraughtsElo, {"!setelocheckers", "!setcheckers", "!setcheckerselo", "!checkerselo", "!setelodraughts", "!setdraughts", "!setdraughtselo", "!draughtselo"}, false, false, true )
|
|
setdraughts:addParam{ type=ULib.cmds.StringArg, hint="Player or SteamID", autocomplete_fn=AutoComplete }
|
|
setdraughts:addParam{ type=ULib.cmds.NumArg, hint="New Elo", min=0, default=1400 }
|
|
setdraughts:defaultAccess( ULib.ACCESS_SUPERADMIN )
|
|
setdraughts:help( "Set Checkers Elo rating for user." )
|
|
end
|
|
end
|
|
hook.Add( "Initialize", "ChessBoardPermissions", SetupCommands )
|