fgnbgfd
This commit is contained in:
parent
d2104837ce
commit
cc6ad77b1e
@ -30,7 +30,7 @@
|
||||
background: linear-gradient(135deg, #2a1a08, #1a0f04);
|
||||
border: 2px solid #6b4b2a;
|
||||
border-radius: 8px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
@ -39,9 +39,9 @@
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.mp-tab:hover { color: #fff; filter: brightness(1.2); }
|
||||
.mp-tab:hover { color: var(--guild-text); filter: brightness(1.2); }
|
||||
.mp-tab.mp-tab-active {
|
||||
color: #fff !important;
|
||||
color: var(--guild-text) !important;
|
||||
border-color: #7a4a00 !important;
|
||||
background: linear-gradient(135deg, #4a3010, #2a1a08) !important;
|
||||
box-shadow: inset 0 0 10px rgba(0,0,0,0.5), 0 0 14px rgba(200,160,60,0.3);
|
||||
@ -78,7 +78,7 @@
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
letter-spacing: 1px;
|
||||
text-transform: uppercase;
|
||||
padding: 10px 20px;
|
||||
@ -128,7 +128,7 @@
|
||||
font-size: 12px;
|
||||
}
|
||||
.gh-members-table th {
|
||||
color: #fff;
|
||||
color: #3a1a05;
|
||||
font-size: 10px;
|
||||
letter-spacing: 1px;
|
||||
text-transform: uppercase;
|
||||
@ -139,7 +139,7 @@
|
||||
.gh-members-table td {
|
||||
padding: 7px 10px;
|
||||
border-bottom: 1px solid rgba(139,106,42,.2);
|
||||
color: #fff;
|
||||
color: #1a0800;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.gh-members-table tr:hover td {
|
||||
@ -155,7 +155,7 @@
|
||||
font-weight: bold;
|
||||
background: linear-gradient(#3a2810, #1a0f04);
|
||||
border: 1px solid var(--guild-border);
|
||||
color: #fff;
|
||||
color: #f0d060;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.gh-rank-badge.leader {
|
||||
@ -203,14 +203,14 @@
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
color: #f0d060;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.gh-guild-name {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
color: #f0d9a6;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@ -218,7 +218,7 @@
|
||||
.gh-guild-desc {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 10px;
|
||||
color: #fff;
|
||||
color: #c8a86a;
|
||||
line-height: 1.5;
|
||||
flex: 1;
|
||||
}
|
||||
@ -227,14 +227,14 @@
|
||||
justify-content: space-between;
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 10px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
}
|
||||
.gh-guild-open {
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-weight: bold;
|
||||
}
|
||||
.gh-guild-closed {
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@ -244,7 +244,7 @@
|
||||
background: linear-gradient(#3a2810, #1a0f04);
|
||||
border: 2px solid var(--guild-border);
|
||||
border-radius: 6px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
@ -254,7 +254,7 @@
|
||||
}
|
||||
.gh-join-btn:hover:not(:disabled) {
|
||||
border-color: #7a4a00;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
}
|
||||
.gh-join-btn:disabled {
|
||||
opacity: .45;
|
||||
@ -262,7 +262,7 @@
|
||||
}
|
||||
.gh-join-btn.pending {
|
||||
border-color: #6a3a00;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
}
|
||||
|
||||
/* ── Gilde gründen ──────────────────────────────────────── */
|
||||
@ -281,7 +281,7 @@
|
||||
.gh-form-label {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.gh-form-input,
|
||||
@ -290,7 +290,7 @@
|
||||
background: rgba(0,0,0,.5);
|
||||
border: 2px solid var(--guild-border);
|
||||
border-radius: 7px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 13px;
|
||||
padding: 7px 10px;
|
||||
@ -308,7 +308,7 @@
|
||||
background: linear-gradient(#6b4b2a, #3c2414);
|
||||
border: 2px solid var(--guild-gold);
|
||||
border-radius: 8px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
@ -323,7 +323,7 @@
|
||||
.gh-error-msg {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@ -359,18 +359,18 @@
|
||||
.gh-task-label {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
color: #f0d9a6;
|
||||
font-weight: bold;
|
||||
}
|
||||
.gh-task-reward {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
color: #fff;
|
||||
color: #f0d060;
|
||||
}
|
||||
.gh-task-done-badge {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
color: #fff;
|
||||
color: #7de87d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@ -398,7 +398,7 @@
|
||||
.gh-task-progress-text {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 10px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
@ -423,13 +423,13 @@
|
||||
.gh-request-name {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
color: #fff;
|
||||
color: #1a0800;
|
||||
flex: 1;
|
||||
}
|
||||
.gh-request-msg {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 10px;
|
||||
color: #fff;
|
||||
color: #5a3010;
|
||||
font-style: italic;
|
||||
flex: 2;
|
||||
overflow: hidden;
|
||||
@ -450,13 +450,13 @@
|
||||
.gh-req-accept {
|
||||
background: linear-gradient(#1a4a18, #0f2a0e);
|
||||
border: 2px solid #4a8a3c;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
}
|
||||
.gh-req-accept:hover { border-color: #7ada60; }
|
||||
.gh-req-reject {
|
||||
background: linear-gradient(#4a1010, #2a0808);
|
||||
border: 2px solid #8a3030;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
}
|
||||
.gh-req-reject:hover { border-color: #ff6060; }
|
||||
|
||||
@ -474,7 +474,7 @@
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
background: linear-gradient(#6b4b2a, #3c2414);
|
||||
border: 2px solid var(--guild-gold);
|
||||
border-radius: 8px;
|
||||
@ -484,12 +484,12 @@
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
color: #f0d9a6;
|
||||
}
|
||||
.gh-my-sub {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
color: #fff;
|
||||
color: #a08060;
|
||||
}
|
||||
.gh-leave-btn {
|
||||
margin-left: auto;
|
||||
@ -497,13 +497,13 @@
|
||||
background: linear-gradient(#3a1010, #1a0808);
|
||||
border: 2px solid #6a2020;
|
||||
border-radius: 7px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
cursor: pointer;
|
||||
transition: .15s;
|
||||
}
|
||||
.gh-leave-btn:hover { border-color: #cc4040; color: #fff; }
|
||||
.gh-leave-btn:hover { border-color: #cc4040; color: var(--guild-text); }
|
||||
|
||||
/* ── Suche ──────────────────────────────────────────────── */
|
||||
.gh-search-bar {
|
||||
@ -518,7 +518,7 @@
|
||||
background: rgba(0,0,0,.5);
|
||||
border: 2px solid var(--guild-border);
|
||||
border-radius: 7px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
padding: 6px 10px;
|
||||
@ -530,7 +530,7 @@
|
||||
background: linear-gradient(#3a2810, #1a0f04);
|
||||
border: 2px solid var(--guild-border);
|
||||
border-radius: 7px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
@ -547,7 +547,7 @@
|
||||
height: 100%;
|
||||
gap: 12px;
|
||||
font-family: "Cinzel", serif;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
text-align: center;
|
||||
padding: 24px;
|
||||
}
|
||||
@ -568,7 +568,7 @@
|
||||
background: linear-gradient(#3a2810, #1a0f04);
|
||||
border: 1px solid var(--guild-border);
|
||||
border-radius: 5px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
padding: 3px 10px;
|
||||
@ -588,14 +588,14 @@
|
||||
padding: 40px;
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
color: #5a3010;
|
||||
}
|
||||
|
||||
/* ── Section-Header innerhalb Panel ────────────────────── */
|
||||
.gh-section-title {
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 12px;
|
||||
color: #fff;
|
||||
color: #4a2000;
|
||||
letter-spacing: 2px;
|
||||
text-transform: uppercase;
|
||||
padding: 8px 16px 4px;
|
||||
@ -608,7 +608,7 @@
|
||||
background: rgba(0,0,0,.5);
|
||||
border: 1px solid var(--guild-border);
|
||||
border-radius: 5px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 11px;
|
||||
padding: 2px 5px;
|
||||
@ -619,7 +619,7 @@
|
||||
background: linear-gradient(#4a1010, #2a0808);
|
||||
border: 1px solid #8a3030;
|
||||
border-radius: 5px;
|
||||
color: #fff;
|
||||
color: var(--guild-text);
|
||||
font-family: "Cinzel", serif;
|
||||
font-size: 10px;
|
||||
cursor: pointer;
|
||||
@ -641,63 +641,73 @@
|
||||
══════════════════════════════════════════════ */
|
||||
|
||||
/* Gilden-Karte (dunkler Hintergrund) */
|
||||
.gh-guild-card .gh-guild-name { color: #fff !important; }
|
||||
.gh-guild-card .gh-guild-desc { color: #fff !important; }
|
||||
.gh-guild-card .gh-guild-meta { color: #fff !important; }
|
||||
.gh-guild-card .gh-guild-open { color: #fff !important; }
|
||||
.gh-guild-card .gh-guild-closed { color: #fff !important; }
|
||||
.gh-guild-tag { color: #fff !important; }
|
||||
.gh-guild-card .gh-guild-name { color: #f0d9a6 !important; }
|
||||
.gh-guild-card .gh-guild-desc { color: #c8a86a !important; }
|
||||
.gh-guild-card .gh-guild-meta { color: var(--guild-text) !important; }
|
||||
.gh-guild-card .gh-guild-open { color: var(--guild-text) !important; }
|
||||
.gh-guild-card .gh-guild-closed { color: var(--guild-text) !important; }
|
||||
.gh-guild-tag { color: #f0d060 !important; }
|
||||
|
||||
/* Eigene Gilde Info-Box (dunkler Hintergrund) */
|
||||
.gh-my-info .gh-my-name { color: #fff !important; }
|
||||
.gh-my-info .gh-my-sub { color: #fff !important; }
|
||||
.gh-my-info .gh-my-name { color: #f0d9a6 !important; }
|
||||
.gh-my-info .gh-my-sub { color: #a08060 !important; }
|
||||
|
||||
/* Rang-Badge */
|
||||
.gh-rank-badge { color: #fff !important; }
|
||||
.gh-rank-badge { color: #f0d060 !important; }
|
||||
.gh-rank-badge.leader { color: #fff !important; }
|
||||
|
||||
/* Mitglieder-Tabelle (Pergament) */
|
||||
.gh-members-table th { color: #fff !important; }
|
||||
.gh-members-table td { color: #fff !important; }
|
||||
.gh-members-table th { color: #3a1a05 !important; }
|
||||
.gh-members-table td { color: #1a0800 !important; }
|
||||
|
||||
/* Aufgaben-Karten (dunkler Hintergrund) */
|
||||
.gh-task-card .gh-task-label { color: #fff !important; }
|
||||
.gh-task-card .gh-task-reward { color: #fff !important; }
|
||||
.gh-task-card .gh-task-done-badge { color: #fff !important; }
|
||||
.gh-task-card .gh-task-progress-text { color: #fff !important; }
|
||||
.gh-task-card .gh-task-label { color: #f0d9a6 !important; }
|
||||
.gh-task-card .gh-task-reward { color: #f0d060 !important; }
|
||||
.gh-task-card .gh-task-done-badge { color: #7de87d !important; }
|
||||
.gh-task-card .gh-task-progress-text { color: var(--guild-text) !important; }
|
||||
|
||||
/* Suche (Pergament) */
|
||||
.gh-search-input { color: #fff !important; background: rgba(255,255,255,.5) !important; }
|
||||
.gh-search-input::placeholder { color: #fff !important; }
|
||||
.gh-search-btn { color: #fff !important; }
|
||||
.gh-search-input { color: var(--guild-text) !important; background: rgba(255,255,255,.5) !important; }
|
||||
.gh-search-input::placeholder { color: var(--guild-text) !important; }
|
||||
.gh-search-btn { color: var(--guild-text) !important; }
|
||||
|
||||
/* Formular (Pergament) */
|
||||
.gh-form-label { color: #fff !important; }
|
||||
.gh-form-label { color: var(--guild-text) !important; }
|
||||
.gh-form-input, .gh-form-textarea, .gh-form-select {
|
||||
color: #fff !important;
|
||||
color: var(--guild-text) !important;
|
||||
background: rgba(255,255,255,.6) !important;
|
||||
}
|
||||
.gh-form-input::placeholder,
|
||||
.gh-form-textarea::placeholder { color: #fff !important; }
|
||||
.gh-form-textarea::placeholder { color: var(--guild-text) !important; }
|
||||
|
||||
/* Section-Titel (Pergament) */
|
||||
.gh-section-title { color: #fff !important; }
|
||||
.gh-section-title { color: #4a2000 !important; }
|
||||
|
||||
/* Leer/Lade (Pergament) */
|
||||
.gh-loading, .gh-empty { color: #fff !important; }
|
||||
.gh-no-guild { color: #fff !important; }
|
||||
.gh-loading, .gh-empty { color: #5a3010 !important; }
|
||||
.gh-no-guild { color: var(--guild-text) !important; }
|
||||
|
||||
/* Anfragen (Pergament-Hintergrund) */
|
||||
.gh-request-name { color: #fff !important; }
|
||||
.gh-request-msg { color: #fff !important; }
|
||||
.gh-request-name { color: #1a0800 !important; }
|
||||
.gh-request-msg { color: #5a3010 !important; }
|
||||
|
||||
/* Pagination (Pergament) */
|
||||
.gh-page-btn {
|
||||
color: #fff !important;
|
||||
color: var(--guild-text) !important;
|
||||
background: rgba(200,160,80,.2) !important;
|
||||
border-color: #8b6a3c !important;
|
||||
}
|
||||
.gh-page-btn.active {
|
||||
background: linear-gradient(#6b4b2a, #3c2414) !important;
|
||||
color: #fff !important;
|
||||
color: var(--guild-text) !important;
|
||||
}
|
||||
|
||||
/* ── Gilde gründen Formular – weiße Schrift ─────────────── */
|
||||
.gh-create-form .gh-form-label { color: #fff !important; }
|
||||
.gh-create-form .gh-form-input,
|
||||
.gh-create-form .gh-form-textarea,
|
||||
.gh-create-form .gh-form-select { color: #fff !important; background: rgba(0,0,0,.45) !important; }
|
||||
.gh-create-form .gh-form-input::placeholder,
|
||||
.gh-create-form .gh-form-textarea::placeholder { color: rgba(255,255,255,.5) !important; }
|
||||
.gh-create-form .gh-error-msg { color: #ff9090 !important; }
|
||||
.gh-create-form .mp-col-header { color: #f0d9a6 !important; }
|
||||
|
||||
@ -5,7 +5,8 @@
|
||||
let gh_initialized = false;
|
||||
let gh_page = 1;
|
||||
let gh_search = '';
|
||||
let gh_playerGuild = null;
|
||||
let gh_playerGuild = null;
|
||||
let gh_isGuildLeader = false;
|
||||
|
||||
function ghLoadCSS() {
|
||||
if (!document.querySelector('link[href="/css/gildenhalle.css"]')) {
|
||||
@ -51,7 +52,7 @@ function ghEnsurePopup() {
|
||||
placeholder="Gildennamen oder Tag suchen…" />
|
||||
<button class="gh-search-btn" id="gh-search-btn">Suchen</button>
|
||||
<button class="gh-search-btn" id="gh-create-toggle-btn"
|
||||
style="border-color:#fff;color:#fff;">+ Gründen</button>
|
||||
style="border-color:var(--guild-text);color:var(--guild-text);">+ Gründen</button>
|
||||
</div>
|
||||
<div class="gh-guild-grid" id="gh-guild-grid">
|
||||
<div class="gh-loading">Lade Gilden…</div>
|
||||
@ -130,7 +131,24 @@ function ghEnsurePopup() {
|
||||
});
|
||||
|
||||
/* Gründen-Toggle */
|
||||
function ghUpdateCreateBtn() {
|
||||
const btn = document.getElementById('gh-create-toggle-btn');
|
||||
if (!btn) return;
|
||||
if (gh_isGuildLeader) {
|
||||
btn.disabled = true;
|
||||
btn.title = 'Gildenmeister können keine weitere Gilde gründen';
|
||||
btn.style.opacity = '0.4';
|
||||
btn.style.cursor = 'not-allowed';
|
||||
} else {
|
||||
btn.disabled = false;
|
||||
btn.title = '';
|
||||
btn.style.opacity = '';
|
||||
btn.style.cursor = '';
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('gh-create-toggle-btn').addEventListener('click', () => {
|
||||
if (gh_isGuildLeader) return;
|
||||
document.getElementById('gh-create-form-wrap').style.display = 'block';
|
||||
document.getElementById('gh-create-error').textContent = '';
|
||||
});
|
||||
@ -183,7 +201,9 @@ async function ghLoadGuildList() {
|
||||
try {
|
||||
const res = await fetch(`/api/gildenhalle/list?search=${encodeURIComponent(gh_search)}&page=${gh_page}`);
|
||||
const data = await res.json();
|
||||
gh_playerGuild = data.playerGuildId;
|
||||
gh_playerGuild = data.playerGuildId;
|
||||
gh_isGuildLeader = data.isGuildLeader || false;
|
||||
ghUpdateCreateBtn();
|
||||
|
||||
if (!data.guilds.length) {
|
||||
grid.innerHTML = '<div class="gh-empty">Keine Gilden gefunden.</div>';
|
||||
@ -330,7 +350,7 @@ async function ghLoadMyGuild() {
|
||||
: `<span class="gh-rank-badge ${m.id === guild.leader_id ? 'leader' : ''}">${m.rank_name || '–'}</span>`
|
||||
}
|
||||
</td>
|
||||
<td style="font-size:10px;color:#fff">
|
||||
<td style="font-size:10px;color:var(--guild-text)">
|
||||
${new Date(m.joined_at).toLocaleDateString('de-DE')}
|
||||
</td>
|
||||
<td>
|
||||
@ -461,8 +481,8 @@ async function ghLoadTasks() {
|
||||
|
||||
container.innerHTML = `
|
||||
<div style="padding:10px 16px;font-family:'Cinzel',serif;font-size:11px;
|
||||
color:#fff;border-bottom:1px solid rgba(139,106,42,.25);">
|
||||
Gemeinsame Aufgaben der Gilde <strong style="color:#fff;">${data.guildName}</strong>
|
||||
color:var(--guild-text);border-bottom:1px solid rgba(139,106,42,.25);">
|
||||
Gemeinsame Aufgaben der Gilde <strong style="color:#5a2a00;">${data.guildName}</strong>
|
||||
</div>
|
||||
<div class="gh-tasks-list">
|
||||
${data.tasks.map(t => {
|
||||
|
||||
@ -30,7 +30,7 @@ async function getPlayerGuild(userId) {
|
||||
async function createDefaultRanks(guildId) {
|
||||
const ranks = [
|
||||
{ name: 'Gildenmeister', sort_order: 1, can_invite: 1, can_kick: 1, can_manage_ranks: 1, can_manage_tasks: 1 },
|
||||
{ name: 'Offizier', sort_order: 2, can_invite: 1, can_kick: 1, can_manage_ranks: 0, can_manage_tasks: 1 },
|
||||
{ name: 'Stellv. Gildenmeister', sort_order: 2, can_invite: 1, can_kick: 1, can_manage_ranks: 0, can_manage_tasks: 1 },
|
||||
{ name: 'Veteran', sort_order: 3, can_invite: 1, can_kick: 0, can_manage_ranks: 0, can_manage_tasks: 0 },
|
||||
{ name: 'Mitglied', sort_order: 99, can_invite: 0, can_kick: 0, can_manage_ranks: 0, can_manage_tasks: 0 },
|
||||
];
|
||||
@ -109,6 +109,12 @@ router.get('/gildenhalle/list', requireLogin, async (req, res) => {
|
||||
|
||||
const playerGuild = await getPlayerGuild(userId);
|
||||
|
||||
// Gildenmeister und Stellv. Gildenmeister dürfen keine weitere Gilde gründen
|
||||
const leaderRanks = ['Gildenmeister', 'Stellv. Gildenmeister'];
|
||||
const isGuildLeader = playerGuild
|
||||
? (playerGuild.leader_id === userId || leaderRanks.includes(playerGuild.rank_name))
|
||||
: false;
|
||||
|
||||
res.json({
|
||||
guilds: guilds.map(g => ({
|
||||
...g,
|
||||
@ -118,6 +124,7 @@ router.get('/gildenhalle/list', requireLogin, async (req, res) => {
|
||||
totalPages: Math.ceil(total / limit),
|
||||
page,
|
||||
playerGuildId: playerGuild?.id || null,
|
||||
isGuildLeader,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('[gildenhalle/list]', err);
|
||||
@ -140,7 +147,14 @@ router.post('/gildenhalle/create', requireLogin, async (req, res) => {
|
||||
|
||||
try {
|
||||
const existing = await getPlayerGuild(userId);
|
||||
if (existing) return res.status(400).json({ error: 'Du bist bereits in einer Gilde.' });
|
||||
if (existing) {
|
||||
// Gildenmeister oder Rang mit can_manage_ranks dürfen keine neue Gilde gründen
|
||||
const leaderRanks = ['Gildenmeister', 'Stellv. Gildenmeister'];
|
||||
if (existing.leader_id === userId || leaderRanks.includes(existing.rank_name)) {
|
||||
return res.status(403).json({ error: 'Gildenmeister und Stellv. Gildenmeister können keine weitere Gilde gründen.' });
|
||||
}
|
||||
return res.status(400).json({ error: 'Du bist bereits in einer Gilde.' });
|
||||
}
|
||||
|
||||
const [result] = await db.query(
|
||||
`INSERT INTO guilds (name, tag, description, leader_id, open)
|
||||
@ -181,7 +195,14 @@ router.post('/gildenhalle/join/:id', requireLogin, async (req, res) => {
|
||||
|
||||
try {
|
||||
const existing = await getPlayerGuild(userId);
|
||||
if (existing) return res.status(400).json({ error: 'Du bist bereits in einer Gilde.' });
|
||||
if (existing) {
|
||||
// Gildenmeister oder Rang mit can_manage_ranks dürfen keine neue Gilde gründen
|
||||
const leaderRanks = ['Gildenmeister', 'Stellv. Gildenmeister'];
|
||||
if (existing.leader_id === userId || leaderRanks.includes(existing.rank_name)) {
|
||||
return res.status(403).json({ error: 'Gildenmeister und Stellv. Gildenmeister können keine weitere Gilde gründen.' });
|
||||
}
|
||||
return res.status(400).json({ error: 'Du bist bereits in einer Gilde.' });
|
||||
}
|
||||
|
||||
const [[guild]] = await db.query('SELECT * FROM guilds WHERE id = ?', [guildId]);
|
||||
if (!guild) return res.status(404).json({ error: 'Gilde nicht gefunden.' });
|
||||
|
||||
Loading…
Reference in New Issue
Block a user