Upload files to "server"

This commit is contained in:
tanthius 2026-02-12 04:18:01 +00:00
parent 1ece4a3f2f
commit be328c9be4
5 changed files with 229 additions and 0 deletions

24
server/gang_sync.lua Normal file
View File

@ -0,0 +1,24 @@
-- server/gang_sync.lua
print("^2[turfwar]^7 gang_sync.lua loaded")
-- IMPORTANT: set this to match wherever you store gang membership.
-- Most turfwar scripts have something like PlayerGang[src] = gangId
-- If yours is named differently, change it here.
local function getGangFor(src)
if PlayerGang and PlayerGang[src] ~= nil then
return tonumber(PlayerGang[src]) or 0
end
-- Common alternates people use:
if GangOf and GangOf[src] ~= nil then
return tonumber(GangOf[src]) or 0
end
return 0
end
RegisterNetEvent("turfwar:gang:requestMyGang", function()
local src = source
local gangId = getGangFor(src)
TriggerClientEvent("turfwar:setMyGang", src, gangId)
end)

58
server/gangbank.lua Normal file
View File

@ -0,0 +1,58 @@
print("^2[turfwar]^7 gangbank.lua loaded (server)")
local GangBank = {} -- [gangId] = amount
local function clamp(n)
n = tonumber(n) or 0
if n < 0 then n = 0 end
return math.floor(n)
end
local function getGangId(src)
if PlayerGang and PlayerGang[src] ~= nil then return tonumber(PlayerGang[src]) or 0 end
return 0
end
local function broadcastToGang(gangId)
local amount = GangBank[gangId] or 0
for _, s in ipairs(GetPlayers()) do
s = tonumber(s)
if getGangId(s) == gangId then
TriggerClientEvent("turfwar:gangbank:update", s, gangId, amount)
end
end
end
GangBankAPI = GangBankAPI or {}
function GangBankAPI.Get(gangId)
gangId = tonumber(gangId) or 0
return GangBank[gangId] or 0
end
function GangBankAPI.Set(gangId, amount)
gangId = tonumber(gangId) or 0
GangBank[gangId] = clamp(amount)
broadcastToGang(gangId)
end
function GangBankAPI.Add(gangId, delta)
gangId = tonumber(gangId) or 0
GangBank[gangId] = clamp((GangBank[gangId] or 0) + (tonumber(delta) or 0))
broadcastToGang(gangId)
end
RegisterNetEvent("turfwar:gangbank:requestMyGang", function()
local src = source
local gangId = getGangId(src)
TriggerClientEvent("turfwar:gangbank:update", src, gangId, GangBank[gangId] or 0)
end)
-- console test
RegisterCommand("gangbank_set", function(src, args)
if src ~= 0 then return end
local g = tonumber(args[1] or "0") or 0
local a = tonumber(args[2] or "0") or 0
GangBankAPI.Set(g, a)
print(("Set gangbank %d = %d"):format(g, a))
end, true)

43
server/killfeed_chat.lua Normal file
View File

@ -0,0 +1,43 @@
print("^2[turfwar]^7 killfeed.lua loaded (server)")
RegisterNetEvent('turfwar:killfeed:report', function(data)
local src = source
if type(data) ~= "table" then return end
local killerId = tonumber(data.killer or 0) or 0
local victimId = tonumber(data.victim or 0) or 0
if victimId <= 0 then victimId = src end
local victimName = GetPlayerName(victimId) or ("ID " .. tostring(victimId))
local victimGang = tonumber(data.victimGang or 0) or 0
-- ✅ Death-only (no player killer)
if killerId <= 0 then
TriggerClientEvent('turfwar:killfeed:chat', -1, {
isDeathOnly = true,
killer = 0,
victim = victimId,
victimName = victimName,
victimGang = victimGang,
weapon = tonumber(data.weapon or 0) or 0,
})
return
end
local killerName = GetPlayerName(killerId) or ("ID " .. tostring(killerId))
local killerGang = tonumber(data.killerGang or 0) or 0
TriggerClientEvent('turfwar:killfeed:chat', -1, {
killer = killerId,
victim = victimId,
killerName = killerName,
victimName = victimName,
weapon = tonumber(data.weapon or 0) or 0,
headshot = (data.headshot == true),
distance = tonumber(data.distance or 0) or 0,
killerGang = killerGang,
victimGang = victimGang,
})
end)

88
server/leaderboard.lua Normal file
View File

@ -0,0 +1,88 @@
-- server/leaderboard.lua
print("^2[turfwar]^7 server/leaderboard.lua LOADED")
-- We assume Turfs runtime table exists in server/main.lua as `local Turfs = {}`
-- and Config.GANGS exists.
-- We will be defensive: if Turfs isn't visible here, well use an exported getter you can add (optional).
local function getTurfsRuntime()
-- If Turfs is global somewhere, use it.
if Turfs then return Turfs end
-- If Turfs is local in main.lua (as in your paste), this file cannot see it.
-- In that case, you must either:
-- A) Move leaderboard code into server/main.lua, OR
-- B) Make Turfs global in main.lua: change `local Turfs = {}` to `Turfs = {}`
return nil
end
local function buildLeaderboard()
local t = getTurfsRuntime()
if not t then
return {
title = "Most influence",
rows = {},
error = "Turfs runtime not visible. In server/main.lua change `local Turfs = {}` to `Turfs = {}`."
}
end
-- count owned turfs per gang
local counts = {} -- [gangId] = n
for _, turf in pairs(t) do
local owner = tonumber(turf.owner) or 0
if owner ~= 0 then
counts[owner] = (counts[owner] or 0) + 1
end
end
-- build sortable rows
local rows = {}
for gangId, info in pairs(Config.GANGS or {}) do
gangId = tonumber(gangId) or 0
if gangId ~= 0 then
local c = counts[gangId] or 0
rows[#rows + 1] = {
gangId = gangId,
name = info.name or ("Gang " .. tostring(gangId)),
value = c
}
end
end
table.sort(rows, function(a, b)
if a.value == b.value then
return a.name < b.name
end
return a.value > b.value
end)
-- Keep only gangs that exist in config; you can also filter out zeroes if you want:
-- (comment in if you only want gangs with >0)
-- local filtered = {}
-- for _, r in ipairs(rows) do if r.value > 0 then filtered[#filtered+1]=r end end
-- rows = filtered
return {
title = "Most influence",
rows = rows
}
end
local function broadcastLeaderboard()
local payload = buildLeaderboard()
TriggerClientEvent("turfwar:leaderboard:update", -1, payload)
end
-- Clients can request snapshot
RegisterNetEvent("turfwar:leaderboard:request", function()
local src = source
TriggerClientEvent("turfwar:leaderboard:update", src, buildLeaderboard())
end)
-- Let other server code trigger refresh
RegisterNetEvent("turfwar:leaderboard:refresh", function()
broadcastLeaderboard()
end)
-- Export for other resources if needed
exports("BroadcastLeaderboard", broadcastLeaderboard)

16
server/loadouts.lua Normal file
View File

@ -0,0 +1,16 @@
print("^2[turfwar]^7 server/loadouts.lua LOADED (DISABLED - shop handles weapons)")
Loadouts = Loadouts or {}
function Loadouts.StripPlayer(src)
-- Optional: keep this if you want neutrals to have no weapons:
-- TriggerClientEvent("turfwar:stripWeapons", src)
end
function Loadouts.GiveGangLoadout(src, gangId)
-- Disabled: shop/armory handles weapons now
end
function Loadouts.ApplyForGang(src, gangId)
-- Disabled: do nothing
end