diff --git a/admin.php b/admin.php index 0809218..c829008 100644 --- a/admin.php +++ b/admin.php @@ -375,7 +375,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST[' $stmt = $db->prepare("UPDATE factions SET name = ?, slug = ?, image_url = ?, fa_icon = ?, color = ? WHERE id = ?"); $stmt->execute([$name, $slug, $image_url, $fa_icon, $color, $id]); } else { - $stmt = $db->prepare("INSERT INTO factions (name, slug, image_url, fa_icon, color) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt = $db->prepare("INSERT INTO factions (name, slug, image_url, fa_icon, color) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$name, $slug, $image_url, $fa_icon, $color]); $id = $db->lastInsertId(); } @@ -524,18 +524,20 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST[' } try { + $image_url = null; + if (!empty($_FILES["image"]["name"])) { + $ext = pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION); + $filename = "grade_" . time() . "_" . uniqid() . "." . $ext; + if (!is_dir("assets/images/grades/")) mkdir("assets/images/grades/", 0775, true); + move_uploaded_file($_FILES["image"]["tmp_name"], "assets/images/grades/" . $filename); + $image_url = "assets/images/grades/" . $filename; + } + if ($id > 0) { $stmt = db()->prepare("UPDATE grades SET name = ?, slug = ?, user_type = ?, min_level = ?, max_level = ?, image_url = COALESCE(?, image_url) WHERE id = ?"); - $image_url = null; - if (!empty($_FILES["image"]["name"])) { - $ext = pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION); - $filename = "grade_" . time() . "_" . uniqid() . "." . $ext; - move_uploaded_file($_FILES["image"]["tmp_name"], "assets/images/grades/" . $filename); - $image_url = "assets/images/grades/" . $filename; - } $stmt->execute([$name, $slug, $user_type, $min_level, $max_level, $image_url, $id]); } else { - $stmt = db()->prepare("INSERT INTO grades (name, slug, user_type, min_level, max_level) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt = db()->prepare("INSERT INTO grades (name, slug, user_type, min_level, max_level, image_url) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->execute([$name, $slug, $user_type, $min_level, $max_level, $image_url]); } header('Location: ?tab=ranks&success=1'); @@ -785,7 +787,7 @@ elseif ($tab === "units") { unset($unit); $factions_list = $db->query("SELECT id, name FROM factions ORDER BY name ASC")->fetchAll(); $resources_list = $db->query("SELECT id, name FROM game_resources ORDER BY name ASC")->fetchAll(); - +} ?> @@ -836,8 +838,6 @@ elseif ($tab === "units") { .toggle-container { display: flex; align-items: center; gap: 5px; font-size: 9px; color: #8c92a3; flex: 0 0 100px; } .switch { position: relative; display: inline-block; width: 40px; height: 20px; flex-shrink: 0; } .switch input { opacity: 0; width: 0; height: 0; } - $factions_list = $db->query("SELECT id, name FROM factions ORDER BY name ASC")->fetchAll(); - $resources_list = $db->query("SELECT id, name FROM game_resources ORDER BY name ASC")->fetchAll(); @keyframes blink { 0% { opacity: 1; } @@ -865,8 +865,8 @@ elseif ($tab === "units") { .ms-item:hover { background: #2d3545; } .ms-item input { width: auto !important; } .unit-grid-container { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; } - .unit-grid { display: grid; grid-template-columns: repeat(5, 40px); grid-template-rows: repeat(10, 40px); gap: 2px; background: #2d3545; padding: 2px; width: fit-content; } - .unit-cell { width: 40px; height: 40px; background: #0f172a; cursor: pointer; border: 1px solid #334155; } + .unit-grid { display: grid; grid-template-columns: repeat(6, 64px); grid-template-rows: repeat(6, 64px); gap: 2px; background: #2d3545; padding: 2px; width: fit-content; } + .unit-cell { width: 64px; height: 64px; background: #0f172a; cursor: pointer; border: 1px solid #334155; } .unit-cell.active { background: #88c0d0; } .unit-cell:hover { border-color: #88c0d0; } @@ -958,7 +958,7 @@ elseif ($tab === "units") {
- +
@@ -1006,11 +1006,11 @@ elseif ($tab === "units") {
- +
-
Cliquez sur les cases pour définir la forme de l'unité (5x10).
- +
Cliquez sur les cases pour définir la forme de l'unité (6x6).
+
@@ -1028,7 +1028,7 @@ elseif ($tab === "units") {
- +
@@ -1087,8 +1087,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1154,8 +1154,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1177,10 +1177,6 @@ elseif ($tab === "units") {

Ajouter / Modifier un Grade

-
- - -
@@ -1211,6 +1207,10 @@ elseif ($tab === "units") {
+
+ + +
@@ -1252,8 +1252,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1353,7 +1353,7 @@ elseif ($tab === "units") {
- + X @@ -1430,7 +1430,7 @@ elseif ($tab === "units") { - + X @@ -1558,8 +1558,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1613,8 +1613,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1678,8 +1678,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1882,8 +1882,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -1927,8 +1927,8 @@ elseif ($tab === "units") { - - Suppr + + Supprimer @@ -2005,26 +2005,17 @@ elseif ($tab === "units") { - - ' . htmlspecialchars($fl["name"]) . ''; - break; - } - } - } - echo !empty($allies) ? implode(', ', $allies) : 'Aucune'; - ?> - + prepare("SELECT f.name FROM factions f JOIN faction_alliances fa ON (f.id = fa.faction_id_1 OR f.id = fa.faction_id_2) WHERE (fa.faction_id_1 = ? OR fa.faction_id_2 = ?) AND f.id != ?"); + $stmt->execute([$f['id'], $f['id'], $f['id']]); + $allies = $stmt->fetchAll(PDO::FETCH_COLUMN); + if(empty($allies)) echo 'Aucune'; + foreach($allies as $ally) echo '' . htmlspecialchars($ally) . ''; + ?> - - - Suppr - + + Supprimer @@ -2041,281 +2032,80 @@ elseif ($tab === "units") {
- +
- - + +
-
-
- +
- +
-
- - +
+
+ + +
+
+ +
-
- -
- +
- + + -
VisuelNomSlugHeader?Actions
VisuelHeaderNomSlugActions
- ?v=" style="max-width: 40px; max-height: 40px;"> + ?v=" style="max-width: 30px; max-height: 30px;"> - - + + + + - - - - - - - - Suppr + + Supprimer
- -

Journal de Bord (Versions)

-
-

Ajouter / Modifier une Version

-
- - -
-
- - -
- - -
-
-
- - -
- - - -
- - - - - - - - - - - - -
VersionTitreDateActions
v - - SUPPR -
- -

Système de Lootboxes

-

Créer / Modifier une Lootbox

+

Ajouter / Modifier une Lootbox

-
- - +
+ +
- +
@@ -2323,141 +2113,218 @@ document.addEventListener('DOMContentLoaded', function() {
-
- -
- - -
-
Nb Total
-
Chance (%)
-
+
+ +
+
Nombre de tirages (Probabilités)
+
+
+
Nb Tirages
+
Probabilité (%)
+
+
- -
- -
- +
- -
- - -
-
Type
-
Ressource / Objet
-
Chance (%)
-
Qté Min
-
Qté Max
-
+ +
+
Objets possibles dans la box
+
+
+
Ressource (Slug)
+
Probabilité (%)
+
Quantité (Min/Max)
+
Garanti ?
+
+
- -
- -
- +
-
- - +
+ +
- + - + - -
NomSlugObjets Directs (100%)Nb Total (%)Pool Aléatoire (%)Actions
NomSlugTirages PossiblesNombre d'itemsActions
- - $i['is_guaranteed']); - foreach ($directs as $d): ?> -
- - (Qté: -) -
- Aucun"; ?> -
+
+ - - -
- objet(s): - % -
- -
-
- - !$i['is_guaranteed']); - foreach ($pool as $i): ?> -
- (Rien)'; ?>: - % - (Qté: -) -
- -
-
- - Suppr + + Supprimer
+ + +

Journal de Bord du Projet

+
+

Nouvelle Entrée

+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+
+ + +
+
+
+ +

+
+
+ +
+
+
+ +
+
+ + Supprimer +
+
+ + +
+ + document.addEventListener("DOMContentLoaded", function() { + updateRankFields(); + if (document.getElementById('tab') === 'units' || ) { + createUnitGrid(); + } + }); + \ No newline at end of file diff --git a/api/chat.php b/api/chat.php index dbe026c..c2e7c8c 100644 --- a/api/chat.php +++ b/api/chat.php @@ -7,7 +7,7 @@ $input = json_decode(file_get_contents('php://input'), true); $message = $input['message'] ?? ''; if (empty($message)) { - echo json_encode(['reply' => "I didn't catch that. Could you repeat?"]); + echo json_encode(['reply' => "Je n'ai pas bien compris. Pouvez-vous répéter ?"]); exit; } @@ -16,18 +16,18 @@ try { $stmt = db()->query("SELECT keywords, answer FROM faqs"); $faqs = $stmt->fetchAll(PDO::FETCH_ASSOC); - $knowledgeBase = "Here is the knowledge base for this website:\n\n"; + $knowledgeBase = "Voici la base de connaissances pour ce site Web :\n\n"; foreach ($faqs as $faq) { $knowledgeBase .= "Q: " . $faq['keywords'] . "\nA: " . $faq['answer'] . "\n---\n"; } // 2. Construct Prompt for AI - $systemPrompt = "You are a helpful, friendly AI assistant for this website. " . - "Use the provided Knowledge Base to answer user questions accurately. " . - "If the answer is found in the Knowledge Base, rephrase it naturally. " . + $systemPrompt = "Vous êtes un assistant IA utile et amical pour ce site Web. " . + "Utilisez la base de connaissances fournie pour répondre avec précision aux questions des utilisateurs. " . + "Si la réponse se trouve dans la base de connaissances, reformulez-la naturellement. " . "If the answer is NOT in the Knowledge Base, use your general knowledge to help, " . "but politely mention that you don't have specific information about that if it seems like a site-specific question. " . - "Keep answers concise and professional.\n\n" . + "Gardez les réponses concises et professionnelles. RÉPONDEZ TOUJOURS EN FRANÇAIS.\n\n" . $knowledgeBase; // 3. Call AI API @@ -55,10 +55,10 @@ try { } else { // Fallback if AI fails error_log("AI Error: " . ($response['error'] ?? 'Unknown')); - echo json_encode(['reply' => "I'm having trouble connecting to my brain right now. Please try again later."]); + echo json_encode(['reply' => "J'ai du mal à me connecter à mon cerveau pour le moment. Veuillez réessayer plus tard."]); } } catch (Exception $e) { error_log("Chat Error: " . $e->getMessage()); - echo json_encode(['reply' => "An internal error occurred."]); + echo json_encode(['reply' => "Une erreur interne est survenue."]); } diff --git a/assets/js/main.js b/assets/js/main.js index d349598..892c504 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -33,7 +33,7 @@ document.addEventListener('DOMContentLoaded', () => { }, 500); } catch (error) { console.error('Error:', error); - appendMessage("Sorry, something went wrong. Please try again.", 'bot'); + appendMessage("Désolé, une erreur est survenue. Veuillez réessayer.", 'bot'); } }); }); diff --git a/index.php b/index.php index fda843f..d22345a 100644 --- a/index.php +++ b/index.php @@ -81,10 +81,10 @@ if (isset($_SESSION['user_id'])) { LEFT JOIN user_resources ur ON gr.id = ur.resource_id AND ur.user_id = ? WHERE gr.show_in_header = 1 ORDER BY CASE - WHEN gr.name = 'Crédits' THEN 1 - WHEN gr.name = 'Materials' THEN 2 - WHEN gr.name = 'Energie' THEN 3 - WHEN gr.name = 'Données' THEN 4 + WHEN gr.name LIKE 'Crédit%' THEN 1 + WHEN gr.name LIKE 'Matériau%' THEN 2 + WHEN gr.name LIKE 'Energie%' THEN 3 + WHEN gr.name LIKE 'Donnée%' THEN 4 ELSE 5 END ASC, gr.name ASC "); @@ -99,7 +99,7 @@ if (isset($_SESSION['user_id'])) { ]; } } else { - $header_resources = $db->query("SELECT * FROM game_resources WHERE show_in_header = 1 ORDER BY CASE WHEN name = 'Crédits' THEN 1 WHEN name = 'Materials' THEN 2 WHEN name = 'Energie' THEN 3 WHEN name = 'Données' THEN 4 ELSE 5 END ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC); + $header_resources = $db->query("SELECT * FROM game_resources WHERE show_in_header = 1 ORDER BY CASE WHEN name LIKE 'Crédit%' THEN 1 WHEN name LIKE 'Matériau%' THEN 2 WHEN name LIKE 'Energie%' THEN 3 WHEN name LIKE 'Donnée%' THEN 4 ELSE 5 END ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC); foreach($header_resources as $hr) { $resources[$hr["name"]] = ["val" => "0", "prod" => "", "icon" => $hr["icon"] ?: "fa-gem", "image" => $hr["image_url"]]; }