-- ===================================================================== -- aether-admin / Modul: Fraktionen -- -- Mitgliedschaft ergibt sich aus aether_characters.faction. Hier liegen -- nur die Zusatzangaben (Gehalt, Farbe). Der Payday zahlt das Gehalt an -- alle Online-Mitglieder über den Core aus. -- ===================================================================== Admin = Admin or {} Admin.Kern.Registriere('fraktionen', 'laden', function(handelnder, daten) local meta = MySQL.query.await( 'SELECT name, gehalt, farbe, aktiv FROM aether_admin_factions ORDER BY name') or {} -- Mitgliederzahl je Fraktion aus den Charakteren local zaehl = MySQL.query.await([[ SELECT faction AS name, COUNT(*) AS anzahl FROM aether_characters WHERE deleted = 0 AND faction IS NOT NULL AND faction <> '' GROUP BY faction ]]) or {} local nachName = {} for _, z in ipairs(zaehl) do nachName[z.name] = tonumber(z.anzahl) end -- Online-Mitglieder local online = {} local alle = exports['aether-core']:HoleAlleSpieler() or {} for _, d in pairs(alle) do if d.fraktion then online[d.fraktion] = (online[d.fraktion] or 0) + 1 end end for _, f in ipairs(meta) do f.mitglieder = nachName[f.name] or 0 f.online = online[f.name] or 0 f.aktiv = tonumber(f.aktiv) == 1 end return { fraktionen = meta, rechte = Admin.Kern.RechteAbbild(handelnder.quelle) } end) Admin.Kern.Registriere('fraktionen', 'speichern', function(handelnder, daten) local name = tostring(daten.name or ''):sub(1, 48) if #name < 2 then return nil, 'Bitte einen Namen angeben.' end local gehalt = math.max(0, math.floor(tonumber(daten.gehalt) or 0)) local farbe = tostring(daten.farbe or '#34d39a'):sub(1, 9) MySQL.prepare.await([[ INSERT INTO aether_admin_factions (name, gehalt, farbe) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE gehalt = VALUES(gehalt), farbe = VALUES(farbe) ]], { name, gehalt, farbe }) Admin.Log.Schreibe(handelnder, 'Fraktion gespeichert', name, gehalt .. ' €/h') return { ok = true } end) Admin.Kern.Registriere('fraktionen', 'loeschen', function(handelnder, daten) local name = tostring(daten.name or '') if name == '' then return nil, 'Keine Fraktion angegeben.' end MySQL.update.await('DELETE FROM aether_admin_factions WHERE name = ?', { name }) -- Mitgliedschaft der Charaktere lösen MySQL.update.await( 'UPDATE aether_characters SET faction = NULL WHERE faction = ?', { name }) Admin.Log.Schreibe(handelnder, 'Fraktion gelöscht', name) return { ok = true } end) Admin.Kern.Registriere('fraktionen', 'payday', function(handelnder, daten) local name = tostring(daten.name or '') local zeilen = MySQL.query.await( 'SELECT gehalt FROM aether_admin_factions WHERE name = ?', { name }) if not zeilen or not zeilen[1] then return nil, 'Fraktion nicht gefunden.' end local gehalt = tonumber(zeilen[1].gehalt) or 0 if gehalt <= 0 then return nil, 'Diese Fraktion zahlt kein Gehalt.' end local anzahl = 0 local alle = exports['aether-core']:HoleAlleSpieler() or {} for serverId, d in pairs(alle) do if d.fraktion == name then exports['aether-core']:FuegeGeldHinzu(tonumber(serverId), 'bank', gehalt, 'Payday ' .. name) anzahl = anzahl + 1 end end Admin.Log.Schreibe(handelnder, 'Payday', name, anzahl .. ' × ' .. gehalt .. ' €') return { ok = true, anzahl = anzahl } end)