Upload files to "server"
This commit is contained in:
parent
1ece4a3f2f
commit
be328c9be4
24
server/gang_sync.lua
Normal file
24
server/gang_sync.lua
Normal 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
58
server/gangbank.lua
Normal 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
43
server/killfeed_chat.lua
Normal 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
88
server/leaderboard.lua
Normal 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, we’ll 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
16
server/loadouts.lua
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user