Project: * Clean-up (Eclipse cruft, unused files, etc...) * Git-specific changes * Maven POMs clean-up and changes for the build system * Version set to 1.0.0-0 in the development branches * Maven plug-ins updated to latest versions * Very partial dev. documentation added

This commit is contained in:
Emmanuel BENOîT 2011-12-09 08:07:33 +01:00
parent c74e30d5ba
commit 0665a760de
1439 changed files with 1020 additions and 1649 deletions

View file

@ -0,0 +1,28 @@
<#include "../game.ftl">
<#macro page title hidePlanets=false>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Legacy Worlds Beta 6 <@version/> - ${title?xhtml}</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/main.js"></script>
</head>
<body>
<div id="extframe">
<div class="internal" id="intframe">
<!-- Title and planet list -->
<div class="top-centered">
<p style="padding: 22px 0px 0px 0px" id="tc-title">${title?xhtml}</p>
</div>
<div class="cframe full-width"><#nested></div>
</div>
<div class="internal" id="footer">
Copyright (C) 2004-2010, <a title="DeepClone Development" href="http://www.deepclone.com">DeepClone Development</a>
</div>
</div>
</body>
</html>
</#macro>

View file

@ -0,0 +1,44 @@
<#macro page title>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Legacy Worlds Beta 6 <@version/> - ${title?xhtml}</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/main.js"></script>
</head>
<body>
<div id="extframe">
<div class="internal" id="intframe">
<!-- Header -->
<a id="hbutton" href="home" title="Page d'accueil de Legacy Worlds"><span>Legacy Worlds Beta 6 <@version/></span></a>
<div id="version">version courante : <@full_version/></div>
<div class="top-centered" id="tc-title">${title?xhtml}</div>
<!-- Log-in box -->
<div id="lbox">
<form method="post" action="login.action">
<div>
Adresse e-mail : <input type="text" name="mail" value="" size="15" maxlength="128" class='input' /><br/>
Mot de passe : <input type="password" name="password" value='' size="15" maxlength="128" class='input' /><br/>
<a title="Récupération de mot de passe" href="password-recovery">Mot de passe oublié ?</a>
<input type="submit" value='Connexion' class='input' />
</div>
</form>
</div>
<!-- Menu -->
<a class="mbutton" id="b0" href="scope" title="Portée de ce jalon">Portée</a>
<a class="mbutton" id="b1" href="rules" title="Règles du jeu">Règles</a>
<a class="mbutton" id="b2" href="register" title="Inscription">Inscription</a>
<div class="cframe"><#nested></div>
</div>
<div class="internal" id="footer">
Copyright (C) 2004-2010, <a title="DeepClone Development" href="http://www.deepclone.com">DeepClone Development</a>
</div>
</div>
</body>
</html>
</#macro>

View file

@ -0,0 +1,70 @@
<#include "../game.ftl">
<#macro page title hidePlanets=false>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Legacy Worlds Beta 6 <@version/> - ${title?xhtml}</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/main.js"></script>
</head>
<body>
<div id="extframe">
<div class="internal" id="intframe">
<a id="hbutton" href="overview" title="Page Empire"><span>Legacy Worlds Beta 6 <@version/></span></a>
<div id="version"><@abbr_gt/>: <@game_time record=data.page.gameTime /> / <@abbr_st/>: ${data.page.serverTime?string("yyyy-MM-dd HH:mm:ss ZZZZZ")}</div>
<!-- Title and planet list -->
<div class="top-centered">
<p id="tc-title">${title?xhtml}</p>
<#if !hidePlanets>
<p>&nbsp;</p>
<#if data.page.planets?size == 0>
<p id="get-new-planet"><a href="get-planet">Obtenir une nouvelle planète</a></p>
<#else>
<p id="jump-to-planet"><span class="jtp-text">Aller à la planète</span>: <span>
<#list data.page.planets as planet>
<a href="planet-${planet.id}">${planet.name?xhtml}</a>
</#list>
</span></p>
</#if>
</#if>
</div>
<div id="lbox" class="game-info">
<strong>${data.page.empire}</strong>
<#if data.page.alliance?has_content>
[<strong>${data.page.alliance}</strong>]
</#if><br/>
<span id="gi-cash">${data.page.cash?string(",##0")}</span> <@abbr_bgc/><br/>
<#if data.page.special?has_content>
<span class="special-info">
<#switch data.page.special>
<#case 'v'>EN VACANCES<#break>
<#case 's'>PRELIMINAIRES AUX VACANCES<#break>
<#case 'q'>EN TRAIN D'ABANDONNER<#break>
</#switch>
</span>
</#if>
<br/>
<a href="account">Compte</a> - <a href="logout.action">Déconnexion</a>
</div>
<a class="mbutton" id="b0" href="planets" title="Planètes">Planètes</a>
<a class="mbutton" id="b1" href="fleets" title="Flottes">Flottes</a>
<a class="mbutton" id="b2" href="map" title="Carte de l'univers">Carte</a>
<a class="mbutton" id="b3" href="alliance" title="Alliance">Alliance</a>
<a class="mbutton" id="b4" href="enemies" title="Gèstion des listes de joueurs et alliances ennemis">Listes d'ennemis</a>
<a class="mbutton" id="b5" href="messages" title="Messages">Messages</a>
<a class="mbutton" id="b6" href="bugtrack" title="Application de suivi des bugs">Suivi des bugs</a>
<div class="cframe"><#nested></div>
</div>
<div class="internal" id="footer">
Copyright (C) 2004-2010, <a title="DeepClone Development" href="http://www.deepclone.com">DeepClone Development</a>
</div>
</div>
</body>
</html>
</#macro>

View file

@ -0,0 +1,27 @@
<#macro page title>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Legacy Worlds Beta 6 <@version/> - ${title?xhtml}</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/main.js"></script>
</head>
<body>
<div id="extframe">
<div class="internal" id="intframe">
<!-- Header -->
<a id="hbutton" href="player-session" title="Page d'accueil de Legacy Worlds"><span>Legacy Worlds Beta 6 <@version/></span></a>
<div id="version">Version courante : <@full_version/></div>
<div class="top-centered" id="tc-title">${title?xhtml}</div>
<div class="cframe full-width offline"><#nested></div>
</div>
<div class="internal" id="footer">
Copyright (C) 2004-2010, <a title="DeepClone Development" href="http://www.deepclone.com">DeepClone Development</a>
</div>
</div>
</body>
</html>
</#macro>

View file

@ -0,0 +1,33 @@
<#macro page title>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Legacy Worlds Beta 6 <@version/> - ${title?xhtml}</title>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="js/main.js"></script>
</head>
<body>
<div id="extframe">
<div class="internal" id="intframe">
<!-- Header -->
<a id="hbutton" href="home" title="Page d'accueil de Legacy Worlds"><span>Legacy Worlds Beta 6 <@version/></span></a>
<div id="version">Version courante : <@full_version/></div>
<div class="top-centered" id="tc-title">${title?xhtml}</div>
<!-- Log-in box -->
<div id="lbox">
<br/><br/><br/>
<a href="logout.action">Déconnexion</a>
</div>
<div class="cframe full-width"><#nested></div>
</div>
<div class="internal" id="footer">
Copyright (C) 2004-2010, <a title="DeepClone Development" href="http://www.deepclone.com">DeepClone Development</a>
</div>
</div>
</body>
</html>
</#macro>

View file

@ -0,0 +1,66 @@
<#macro game_time record>
<#if record.years == 1>
1 an,
<#elseif record.years gt 1 >
${record.years?string(",##0")} ans,
</#if>
<#if record.weeks == 1>
1 semaine,
<#elseif record.weeks gt 1 >
${record.weeks?string} semaines,
</#if>
<#if record.days == 1>
1 jour
<#elseif record.days gt 1 >
${record.days?string} jours,
<#else>
premier jour,
</#if>
${record.hours?string("00")}:00
</#macro>
<#macro game_duration record>
<#if record.years == 1>
1 an
<#elseif record.years gt 1 >
${record.years?string(",##0")} ans
</#if>
<#if record.weeks == 1>
1 semaine
<#elseif record.weeks gt 1 >
${record.weeks?string} semaines
</#if>
<#if record.days == 1>
1 jour
<#elseif record.days gt 1 >
${record.days?string} jours
</#if>
<#if record.hours == 1>
1 heure
<#elseif record.hours gt 1 >
${record.hours?string} heures
</#if>
</#macro>
<#macro rl_duration rTime>
<#local rlDays = (rTime / 1440)?floor>
<#local rlHours = ((rTime - rlDays * 1440) / 60)?floor>
<#local rlMinutes = (rTime - rlDays * 1440 - rlHours * 60)>
<#if rlDays gt 0>
<#if rlDays = 1>1 jour<#else>${rlDays} jours</#if>
</#if>
<#if rlHours gt 0>
<#if rlHours = 1>1 heure<#else>${rlHours} heures</#if>
</#if>
<#if rlMinutes gt 0>
<#if rlMinutes = 1>1 minute<#else>${rlMinutes} minutes</#if>
</#if>
</#macro>
<#macro duration rTime gTime>
<#if data.page.useRLTime>
<@rl_duration rTime=rTime />
<#else>
<span title="<@rl_duration rTime=rTime />"><@game_duration record=gTime /></span>
</#if>
</#macro>
<#macro abbr_bgc><abbr title="milliards de crédits galactiques">mcg</abbr></#macro>
<#macro abbr_st><abbr title="Temps Serveur">TS </abbr></#macro>
<#macro abbr_gt><abbr title="Temps dans l'univers du jeu">TJ </abbr></#macro>

View file

@ -0,0 +1,26 @@
<@page title="Legacy Worlds Beta 6 - Jalon 1">
<p>
Bienvenue sur le premier jalon de la Beta 6 de Legacy Worls.
</p>
<p>&nbsp;</p>
<p>
Ceci n'est pas un jeu complet. En fait, la plupart des fonctionnalités avancées de la Beta 5 ont été laissées de côté.
Mais il s'agit d'un bon point de départ pour le développement de la Beta 6. La liste complète des fonctionnalités incluses dans cette version
peut être trouvée sur la page <a href="scope">Portée</a>.
</p>
<p>&nbsp;</p>
<p>
Vous trouverez plus d'informations sur le jeu lui-même sur la page <a href="rules">Règles</a>. Il s'agit basiquement
de ce dont vous avez l'habitude : contruire des choses, tuer des gens aux moyens des choses susnommées. Seuls les détails ont changé.
</p>
<p>&nbsp;</p>
<p>
Maintenant - c'est un peu inhabituel, mais puisque le but réel de cette version est de tester le système lui-même, vous êtes encouragés à créer
des comptes multiples.
</p>
<p>&nbsp;</p>
<p>
Bien que cette version puisse être jouée indépendamment de la Beta 5, elle ne dispose pas de forums (bien qu'un système
de rapport de bugs ait été inclus) ; il est donc recommandé que vous <a href="http://www.legacyworlds.com">joigniez la Beta 5</a> quoi qu'il en soit.
</p>
</@page>

View file

@ -0,0 +1,8 @@
<@page title="Déconnecté">
<p>
Vous avez été déconnecté de Legacy Worlds.
</p>
<p>
Merci d'avoir joué!
</p>
</@page>

View file

@ -0,0 +1,8 @@
<@page title="Identité invalide">
<p>
L'adresse e-mail et le mot de passe que vous avez entrés ne correspondent à aucun compte existant.
</p>
<p>
Veuillez réessayer. Si vous avez oublié votre mot de passe, vous pouvez utiliser le service de <a href="password-recovery">récupération de mot de passe</a>.
</p>
</@page>

View file

@ -0,0 +1,8 @@
<@page title="Automatiquement déconnecté">
<p>
Votre session a expiré et vous avez été déconnecté de Legacy Worlds.
</p>
<p>
Vous devez vous reconnecter.
</p>
</@page>

View file

@ -0,0 +1,8 @@
<@page title="Récupération de mot de passe réussie">
<p>
Votre demande de récupération de mot de passe a été traitée avec succès.
</p>
<p>
Vous pouvez maintenant vous connecter avec le mot de passe que vous venez de définir.
</p>
</@page>

View file

@ -0,0 +1,11 @@
<@page title="Compte désactivé">
<p>
Votre compte est actuellement désactivé.
</p>
<p>
Vous pouvez soit le laisser tel quel en <a href="logout.action">vous déconnectant</a> ou choisir de <a href="reactivate.action">le réactiver</a>.
</p>
<p>
Veuillez noter que votre adresse e-mail doit toujours être valide si vous voulez réactiver votre compte.
</p>
</@page>

View file

@ -0,0 +1,116 @@
<@page title="Règles du jeu">
<h3>Général</h3>
<p>
L'ensemble du jeu est basé sur des mises à jour toutes les minutes. Comme ces mises à jour sont calculées en fonction du moment
où le serveur du jeu a démarré, elles peuvent intervenir à tout moment.
</p>
<p>
C'est pour cela qu'un <em>temps du jeu</em> est défini. Il correspond à la quantité de mises à jour qui ont été calculées.
Une "heure" de temps du jeu correspond à une mise à jour et, en général, à une minute en temps du monde réel.
</p>
<p>
Aucune vraie tentative pour atteindre un jeu équilibré n'a été fait. Il est donc très possible que certains aspects
des règles fonctionnent pas comme prévu.
</p>
<p>&nbsp;</p>
<h3>Finances &amp; recherche</h3>
<p>
Les bénéfices sont majoritairement produits par la population d'un empire. Alors que les bénéfices et charges sont affichés
pour une durée de 24h en temps du monde réel, les réserves financières d'un empire augmentent (ou diminuent) en continu.
Les bâtiments optionnels nommés <em>Ligne de production générique</em> apportent un revenu supplémentaire.
</p>
<p>
La population génère aussi des points de recherche qui sont utilisés pour mettre à jour les progrès scientifiques d'un empire.
Quand une technologie atteint 100% de ses points de recherche requis, elle doit être <em>appliquée</em>, ce qui coûte de l'argent.
</p>
<p>
Deux jeux de trois technologies sont disponibles : les <em>technologies civiles</em> donnent accès à de nouveaux bâtiments,
alors que les <em>technologies militaires</em> fournissent de nouveau types de vaisseaux.
</p>
<p>
Si les réserves financières d'un empire atteignent 0 à cause de charges trop élevées, ses flottes vont commencer à se
dégrader. S'il ne possède pas de flottes, alors ce sont les bâtiments de ses planètes qui commencent à se dégrader.
</p>
<p>
Il est par contre possible qu'un empire atteigne 0 à cause de la construction de bâtiments ou vaisseaux. Dans ce cas, aucun
dommage ne sera infligé, mais la construction sera ralentie.
</p>
<p>&nbsp;</p>
<h3>Gestion de planète</h3>
<p>
Deux types de bâtiments sont disponibles sans aucune technologie : les <em>fabriques de pièces de vaisseaux</em> (qui permettent la
construction de vaisseaux) et les <em>tourelles défensives</em> (qui fournissent une défense statique à vos planètes).
</p>
<p>
La construction et la destruction de bâtiments ne sont pas immédiates. La vitesse à laquelle les bâtiments sont construits
ou détruits dépend de la population de la planète considérée. Pendant la construction, le coût financier des bâtiments
est prélevé dans les réserves de l'empire à chaque mise à jour.
</p>
<p>
Détruire des bâtiments est bien plus rapide que les construire ; de plus, une petite partie du coût du bâtiment est
restituée aux réserves financières de l'empire une fois que le bâtiment a été détruit.
</p>
<p>
La satisfaction d'une planète est déterminée par trois facteurs : le nombre d'emplois fournis par les bâtiments de la planète
par rapport à la population de la planète, la puissance des défenses statiques et la quantité de planètes
possédées par l'empire.
</p>
<p>
La satisfaction ne change pas immédiatement quand un événement l'affecte. L'évolution est progressive et sa vitesse
dépend de son amplitude et de la population totale de la planète.
</p>
<p>
Quand la satisfaction d'une planète est inférieure à 25%, ses habitants se mettent en grève, ce qui réduit les bénéfices,
la production et les défenses de la planète.
</p>
<p>
La croissance de la population est directement proportionnelle à la satisfaction de la planète.
</p>
<p>&nbsp;</p>
<h3>Flottes et vaisseaux</h3>
<p>
Les vaisseaux sont construite sur les planètes selon les mêmes principes que les bâtiments. Par contre, leur vitesse
de construction est déterminée par la production militaire de la planète.
</p>
<p>
Les vaisseaux ont deux caractéristiques : leur <em>puissance</em>, qui détermine leur efficacité au combat, et leur
<em>temps de vol orbite-à-orbite</em>, qui détermine leur vitesse et les différentes pénalités qui peuvent être
infligées à une flottes (redirection, redéploiement, etc.).
</p>
<p>
La puissance d'une flotte correspond à la somme des puissances des vaisseaux qui la composent. Son temps de vol orbite-à-orbite
est déterminé par le vaisseau le plus lent de la flotte.
</p>
<p>
Seules les flottes dont le statut est <em>disponible</em> peuvent être déplacées, divisées ou fusionnées. En
complément, les flottes dont le statut est <em>déploiement initial</em> n'infligent pas de dommages pendant les
combats (par contre, elles peuvent être endommagées). Toutes les flottes peuvent être renommées, dissoutes ou
passées d'un mode à l'autre (entre attaque et défense), quel que soit leur statut.
</p>
<p>&nbsp;</p>
<h3>Batailles</h3>
<p>
Une bataille commence à partir du moment une flotte offensive est présente sur une planète, et se termine quand toutes
les flottes offensives sont parties / ont été détruites, ou quand toutes les flottes défensives et défenses planétaires
sont parties / ont été détruites. Dans ce dernier cas, l'attaquant dont la flotte est la plus puissante prend contrôle
de la planète à la mise à jour suivante.
</p>
<p>
Les batailles sont mises à jour toutes les minutes. En conséquence, il n'y a pas de "rapports de bataille" ; à la place,
un historique de la bataille et des événements qui ont eu lieu pendant la bataille est fourni.
</p>
<p>
L'intensité d'une bataille commence à un faible niveau, augmentant progressivement au cours du temps jusqu'à atteindre
l'intensité maximale. Cette intensité détermine la quantité de dommages infligés.
</p>
<p>
Les dommages dus aux combats qui sont infligés que ce soit aux bâtiments ou aux vaisseaux s'accumulent au cours du temps.
Il n'est pas possible de réparer vaisseaux ou bâtiments.
</p>
<p>&nbsp;</p>
</@page>

View file

@ -0,0 +1,58 @@
<@page title="Portée de ce jalon">
<p>
Ce jalon consiste majoritairement en l'écriture du moteur du jeu et des fonctionnalités
administratives de base. De ce fait, le <a href="rules">jeu</a> lui-même est très limité,
de même que l'interface.
</p>
<p>&nbsp;</p>
<h3>Serveur du jeu</h3>
<p>
Le serveur du jeu tourne indépendamment de toute interface et est en charge de toutes les
fonctionnalités administratives et de jeu. Cette version est focalisée sur :
</p>
<ul>
<li><strong>bases système</strong> - enregistrement de fichiers journal, accès en cours d'exécution
à des "constantes" liées au jeu, internationalisation, communications avec les interfaces utilisateur,</li>
<li><strong>comptes</strong> - depuis l'enregistrement jusqu'aux préférences et à la gestion de l'inactivité,</li>
<li><strong>système de nommage</strong> - les noms de toutes les entités au sein du jeu (empires et
planètes dans cette version) sont gérées par le même sous-système,</li>
<li><strong>système de suivi des bugs</strong> - parce qu'il ne sera pas possible d'inclure de forums avant
d'être bien plus loin dans le cycle de développement du jeu, le système de suivi des bugs est un outil
essentiel,</li>
<li><strong>ordonnanceur</strong> - parce que les mises à jour ont quand même besoin d'être d'être calculées,
parfois.</li>
</ul>
<p>&nbsp;</p>
<h3>Administration du serveur</h3>
<p>
L'administration du serveur est l'une des composantes principales de cette version, bien que
la plupart des gens ne la verront (on peut l'espérer) jamais. Elle est implantée comme une
interface utilisateur séparée qui accède au serveur par son interface de communication externe.
L'interface d'administration inclut :
</p>
<ul>
<li><strong>système de droits</strong> (tous les administrateurs ne sont pas égaux),</li>
<li><strong>gestion des comptes</strong>,</li>
<li><strong>accès aux paramètres du jeu</strong>,</li>
<li><strong>administration du suivi des bugs</strong>,</li>
<li><strong>validation de noms</strong>,</li>
<li><strong>affichage des fichiers journal</strong>,</li>
<li><strong>rapports d'erreurs automatisés</strong>.</li>
</ul>
<p>&nbsp;</p>
<h3>Jeu et interface</h3>
<p>
Bien que je jeu n'apporte rien de réellement nouveau, il est basé sur un système de mise à
jour à la minute. Son interface n'est probablement pas appropriée, du fait que la disposition
de l'interface externe de la Beta 5 est un peu restreinte quand il s'agit d'afficher toutes
les informations requises au sein du jeu. Cette interface est quoi qu'il en soit temporaire.
</p>
<p>
Cette version est disponible en deux langues - anglais et français - parce que le système
d'internationalisation a besoin d'être testé. Mais il est extrêmement probable que les futurs
jalons ne seront disponibles qu'en anglais.
</p>
</@page>

View file

@ -0,0 +1,220 @@
<#macro render_preference pref>
<#switch pref.type>
<#case 'BOOLEAN'>
<@form_select label=pref.name name=pref.id id="pref-${pref.id}">
<@form_option value="0" text="Non" selected=( pref.value != "1" )/>
<@form_option value="1" text="Oui" selected=( pref.value == "1" )/>
</@form_select>
<#break>
<#case 'INTEGER'>
<#case 'STRING'>
<@form_text label=pref.name name=pref.id id="pref-${pref.id}" value=pref.value />
<#break>
<#case 'CHOICE'>
<@form_select label=pref.name name=pref.id id="pref-${pref.id}">
<#list pref.choices as choice>
<@form_option value=choice.value text=choice.display selected=( pref.value == choice.value )/>
</#list>
</@form_select>
<#break>
</#switch>
<#if pref.description?has_content>
<@form_extra>${pref.description?xhtml}</@form_extra>
</#if>
</#macro>
<#macro render_prefs_category category>
<@form_part title=category.name />
<#list category.preferences as p>
<@render_preference pref=p />
</#list>
</#macro>
<#macro render>
<@page title="Compte">
<@tabs>
<@tab id="prefs" title="Préférences">
<@form name="prefs-form" action="set-preferences" hash="prefs">
<#list data.account.preferences as c>
<@render_prefs_category category=c />
</#list>
<@form_extended_submit label="Changer les préférences">
<@ff_submit label="Défauts" name="load-default-preferences" />
</@form_extended_submit>
</@form>
</@tab>
<@tab id="basics" title="Identité">
<@form name="lang-form" action="set-language" hash="basics">
<@form_part title="Langue du compte" />
<@form_select name="language" label="Langue ">
<#list data.account.supportedLanguages.languages as lang>
<@form_option text=lang.name value=lang.id selected=(lang.id == data.account.language) />
</#list>
</@form_select>
<@form_submit label="Mettre à jour" />
</@form>
<@form name="pwd-form" action="set-password" hash="basics">
<@form_part title="Changement de mot de passe" />
<#if data.authError!false>
<@form_error>Mot de passe incorrect</@form_error>
</#if>
<@form_pwd label="Mot de passe actuel " name="current" />
<#switch data.passwordError!"">
<#case "EMPTY">
<@form_error>Mot de passe vide.</@form_error>
<#break>
<#case "TOO_WEAK">
<@form_error>Ce mot de passe est trop faible.</@form_error>
<#break>
<#case "MISMATCH">
<@form_error>Le mot de passe et sa confirmation ne sont pas identiques.</@form_error>
<#break>
<#case "PROHIBITED">
<@form_error>Vous ne pouvez pas utiliser ce mot de passe ici.</@form_error>
<#break>
<#default>
<@form_extra>Au moins 6 caractères, incluant à la fois des lettres et des chiffres. Bonus pour les caractères spéciaux, les espaces et les mots de passe extrèmement longs.</@form_extra>
</#switch>
<@form_pwd label="Mot de passe " name="password" />
<@form_pwd label="Mot de passe (confirmation) " name="passwordConfirm" />
<@form_submit label="Mettre à jour" />
</@form>
<#if data.account.mailChange?has_content>
<#local mc = data.account.mailChange>
<#if mc.used>
<@form name="mail-form" action="set-address" hash="basics">
<@form_part title="Changement d'adresse e-mail" />
<tr class="form-field">
<th>Adresse actuelle :</th>
<td>${data.account.address?xhtml}</td>
</tr>
<@form_extra>
Vous pourrez demander un changement d'adresse e-mail à ${mc.until?string("HH:mm:ss (ZZZZZ)")}.
</@form_extra>
</@form>
<#else>
<@form name="mail-form" action="confirm-set-address" hash="basics">
<@form_part title="Changement d'adresse e-mail" />
<tr class="form-field">
<th>Adresse actuelle :</th>
<td>${data.account.address?xhtml}</td>
</tr>
<@form_extra>
Vous êtes en train de demander un changement d'adresse e-mail pour <em>${mc.newAddress?xhtml}</em>.<br/>
Votre requête va expirer à ${mc.until?string("HH:mm (ZZZZZ)")}.
</@form_extra>
<#if data.codeError!false>
<@form_error>Code de confirmation erroné</@form_error>
</#if>
<@form_text name="code" id="mail-confirmation-code" value="${data.code!}" maxLength=64 label="Code de confirmation" />
<@form_extended_submit label="Changer d'adresse">
<@ff_submit label="Annuler" name="cancel-set-address" />
</@form_extended_submit>
</@form>
</#if>
<#else>
<@form name="mail-form" action="set-address" hash="basics">
<@form_part title="Changement d'adresse e-mail" />
<#if data.mailAuthError!false>
<@form_error>Mot de pase erroné</@form_error>
</#if>
<tr class="form-field">
<th>Current address:</th>
<td>${data.account.address?xhtml}</td>
</tr>
<@form_pwd label="Mot de passe actuel " name="password" id="current-2" />
<#switch data.mailError!"">
<#case "EMPTY">
<@form_error>Adresse e-mail vide.</@form_error>
<#break>
<#case "INVALID">
<@form_error>Adresse e-mail invalide.</@form_error>
<#break>
<#case "IN_USE">
<@form_error>Cette adresse e-mail est déjà associée à un compte.</@form_error>
<#break>
<#case "SEND_FAIL">
<@form_error>Impossible d'envoyer un code de confirmation à cette adresse.</@form_error>
<#break>
<#case "MISMATCH">
<@form_error>L'adresse e-mail et sa confirmation ne sont pas identiques.</@form_error>
<#break>
<#default>
<@form_extra>L'adresse e-mail <em>DOIT</em> exister.</@form_extra>
</#switch>
<@form_text label="Adresse e-mail " maxLength=128 name="mail" value=data.mail! />
<@form_text label="Adresse e-mail (confirmation) " maxLength=128 name="mailConfirm" value=data.mail! />
<@form_submit label="Mettre à jour" />
</@form>
</#if>
</@tab>
<@tab id="status" title="Statut">
<@form name="game-credits" action="no-action" hash="status">
<@form_part title="Crédits de jeu" />
<tr class="form-field">
<th>Crédits de jeu:</th>
<td>${data.account.gameCredits?string(',##0')}</td>
</tr>
<@form_extra>
Les crédits de jeu ne peuvent pas être utilisés actuellement. Par contre, ils seront accumulés au cours du cycle de développement de LWB6.
Vous les obtenez en rapportant des bugs.
</@form_extra>
</@form>
<@form name="vacation-form" action="toggle-vacation" hash="status">
<@form_part title="Mode vacances" />
<tr class="form-field">
<th>Crédits de vacances :</th>
<td>${data.account.vacCredits?string(',##0')}</td>
</tr>
<tr class="form-field">
<th>Durée maximale :</th>
<td>
<#if data.account.vacTime?has_content>
approximativement <@game_duration record=data.account.vacTime />
<#else>
moins d'une heure
</#if>
</td>
</tr>
<#if data.account.vacStart?has_content>
<tr class="form-field">
<th>Début de vacances :</th>
<td>${data.account.vacStart?string("HH:mm (yyyy-MM-dd ZZZZZ)")}</td>
</tr>
<#if data.page.special == 'v'>
<@form_submit label="Quitter le mode vacances" />
<#else>
<@form_submit label="Annuler le mode vacances" />
</#if>
<#elseif !data.page.special?has_content && data.account.vacTime?has_content>
<@form_submit label="Entrer en mode vacances" />
</#if>
</@form>
<#if !data.page.special?has_content>
<@form name="quit-form" action="quit" hash="status">
<@form_part title="Quitter le jeu" />
<@form_extra>
Si vous cliquez le bouton ci-dessous, votre compte sera désactivé après un délai de 24h. Vous pourrez le réactiver pendant les 6 prochains mois, délai après lequel il sera supprimé.
</@form_extra>
<@form_text label="Raison de quitter (optionel) " name="reason" value="" />
<@form_submit label="Quitter le jeu" />
</@form>
<#elseif data.page.special == 'q'>
<@form name="quit-form" action="cancel-quit" hash="status">
<@form_part title="Quitter le jeu" />
<@form_extra>
Votre compte sera désactivé à ${data.account.quitGame?string("HH:mm (yyyy-MM-dd ZZZZZ)")}.
</@form_extra>
<@form_submit label="Annuler" />
</@form>
</#if>
</@tab>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,268 @@
<#macro show_alliance alliance>
<@dt_main>
<@dt_entry title="Tag ">${alliance.tag?xhtml}</@dt_entry>
<@dt_entry title="Nom ">${alliance.name?xhtml}</@dt_entry>
<@dt_entry title="Dirigeant ">${alliance.leaderName?xhtml}</@dt_entry>
<@dt_entry title="Planètes ">${alliance.planets?string(",##0")}</@dt_entry>
<@dt_entry title=""><a href="msg-alliance-${alliance.id}">Envoyer un message</a></@dt_entry>
</@dt_main>
</#macro>
<#macro alliance_info_tab>
<@tab id="info" title="Autres alliances">
<@form action="alliance-info" name="alliance-info" hash="info">
<@form_text name="tag" id="ai-tag" label="Tag de l'alliance" value=data.requested! maxLength=5 />
<@form_submit label="Obtenir les informations" />
</@form>
<#if data.info?has_content>
<@show_alliance alliance=data.info />
</#if>
</@tab>
</#macro>
<#macro alliance_creation_tab>
<#if data.creation?has_content>
<#assign tag = data.creation.tag!>
<#assign tagError = data.creation.tagError!>
<#assign name = data.creation.name!>
<#assign nameError = data.creation.nameError!>
<#else>
<#assign tag = "">
<#assign tagError = "">
<#assign name = "">
<#assign nameError = "">
</#if>
<@tab id="create-alliance" title="Créer">
<@form action="create-alliance" name="create-alliance" hash="create-alliance">
<#switch tagError>
<#case "EMPTY"><@form_error>Veuillez indiquer le tag de votre alliance.</@form_error><#break>
<#case "INVALID"><@form_error>Ce tag est invalide.</@form_error><#break>
<#case "UNAVAILABLE"><@form_error>Ce tag est utilisé par une autre alliance.</@form_error></break>
</#switch>
<@form_text name="tag" id="ca-tag" label="Tag de l'alliance " value=tag maxLength=5 />
<#switch nameError>
<#case "EMPTY"><@form_error>Veuillez spécifier le nom de votre alliance.</@form_error><#break>
<#case "INVALID"><@form_error>Ce nom est invalide.</@form_error><#break>
</#switch>
<@form_text name="name" id="ca-name" label="Nom de l'alliance " value=name maxLength=5 />
<@form_submit label="Créer une alliance" />
</@form>
</@tab>
</#macro>
<#macro alliance_join_tab>
<@tab id="join-alliance" title="Rejoindre">
<@form action="join-alliance" name="join-alliance" hash="join-alliance">
<#if data.joinFailure?has_content>
<@form_error>Alliance non trouvée.</@form_error>
</#if>
<@form_text name="tag" id="ja-tag" label="Tag de l'alliance" value=data.joinFailure! maxLength=5 />
<@form_submit label="Rejoindre cette alliance" />
</@form>
</@tab>
</#macro>
<#macro no_alliance>
<#if data.page.special! != 'v'>
<@alliance_join_tab />
<@alliance_creation_tab />
</#if>
</#macro>
<#macro alliance_joining_tab>
<@tab id="join-alliance" title="Requête envoyée">
<@lineform action="cancel-join" hash="join-alliance">
Une requête pour rejoindre <strong>${alliance.main.tag?xhtml}</strong> a été envoyée.
<#if data.page.special! != 'v'>
<@ff_submit label="Annuler" />
</#if>
</@lineform>
<@show_alliance alliance=alliance.main />
</@tab>
</#macro>
<#macro alliance_planets pList>
<@tab id="planets" title="Planètes">
<#if pList?size == 0>
<p>Il n'y a pas de planètes dans cette alliance.</p>
<#return>
</#if>
<@listview>
<@lv_line headers=true>
<@lv_column width=80 centered=true>Coordonnées</@lv_column>
<@lv_column width=150>Planètes</@lv_column>
<@lv_column width=150>Propriétaire</@lv_column>
</@lv_line>
<#list pList as planet>
<#if planet.battle>
<#local bStart = "<span class='enemy-fleet' style='font-weight:bold'>">
<#local bEnd = "</span>">
<#else>
<#local bStart = " ">
<#local bEnd = " ">
</#if>
<@lv_line>
<@lv_column centered=true>${bStart}(${planet.x},${planet.y};${planet.orbit})${bEnd}</@lv_column>
<@lv_column><a href="planet-${planet.id}">${bStart}${planet.name?xhtml}${bEnd}</a></@lv_column>
<@lv_column>${bStart}${planet.owner?xhtml}${bEnd}</@lv_column>
</@lv_line>
<#if planet.battle>
<@lv_line>
<td>&nbsp;</td>
<td colspan="2">
Situation militaire:
<strong class="own-fleet">${planet.defence?string(",##0")}</strong>
contre
<strong class="enemy-fleet">${planet.attack?string(",##0")}</strong>
</td>
</@lv_line>
</#if>
</#list>
</@listview>
</@tab>
</#macro>
<#macro alliance_members mList isLeader empty="">
<#if mList?size == 0 && empty != "">
<p>${empty?xhtml}</p>
<#return>
</#if>
<@listview>
<@lv_line headers=true>
<#if isLeader && data.page.special! != 'v'>
<@lv_column width=40 centered=true>&nbsp;</@lv_column>
</#if>
<@lv_column width="x">Empire</@lv_column>
</@lv_line>
<#list mList as member>
<@lv_line>
<#if isLeader && data.page.special! != 'v'>
<@lv_column centered=true>
<#if member.name == data.page.empire>
&nbsp;
<#else>
<input type="checkbox" name="members" value="${member.id}" />
</#if>
</@lv_column>
</#if>
<@lv_column>
<#if member.name == data.page.empire>
${member.name?xhtml}
<#else>
<a href="msg-empire-${member.id}">${member.name?xhtml}</a>
</#if>
</@lv_column>
</@lv_line>
</#list>
</@listview>
</#macro>
<#macro alliance_member_page>
<#local leader = alliance.leader?has_content>
<@tab id="in-alliance" title="Alliance">
<@lineform action="leave-alliance" hash="join-alliance">
Vous êtes
<#if alliance.leader?has_content>
le dirigeant
<#else>
un membre
</#if>
de <strong>${alliance.main.tag?xhtml}</strong>.
<#if data.page.special! != 'v'>
<@ff_submit label="Quitter l'alliance" />
</#if>
</@lineform>
<@show_alliance alliance=alliance.main />
</@tab>
<@alliance_planets pList=alliance.member.planets />
<@tab id="members" title="Members">
<#if leader && alliance.member.members?size gt 1 && data.page.special! != 'v'>
<form action="kick-members.action#members" method="post">
</#if>
<@alliance_members mList=alliance.member.members isLeader=leader />
<#if leader && alliance.member.members?size gt 1 && data.page.special! != 'v'>
<div class="form-container">
<table><tr><td>
<@ff_submit label="Exclure les membres sélectionnés" />
</td></tr></table>
</div>
</form>
<@lineform action="transfer-leadership" hash="members">
Trasnférer la direction à
<@ff_select id="leadership" name="leadership">
<#list alliance.member.members as member>
<#if member.name != data.page.empire>
<@form_option value=member.id text=member.name />
</#if>
</#list>
</@ff_select>
<@ff_submit label="Confirmation" />
</@lineform>
</#if>
</@tab>
<#if leader>
<@tab id="requests" title="Requêtes">
<#if alliance.leader.requests?size gt 0 && data.page.special! != 'v'>
<form action="manage-requests.action#requests" method="post">
</#if>
<@alliance_members mList=alliance.leader.requests isLeader=true empty="Aucune requête en suspens" />
<#if alliance.leader.requests?size gt 0 && data.page.special! != 'v'>
<div class="form-container">
<table><tr><td>
<@ff_select id="requests-select" name="action">
<@form_option value="1" text="Accepter" />
<@form_option value="0" text="Rejecter" />
</@ff_select> postulants sélectionnés
<@ff_submit label="Confirmation" />
</td></tr></table>
</div>
</form>
</#if>
</@tab>
</#if>
</#macro>
<#macro render>
<@page title="Alliance">
<#assign alliance = data.alliance>
<@tabs>
<#if alliance.main?has_content>
<#if alliance.member?has_content>
<@alliance_member_page />
<#else>
<@alliance_joining_tab />
</#if>
<#else>
<@no_alliance />
</#if>
<@alliance_info_tab />
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,12 @@
<#macro render>
<@page title="Vous avez été banni">
<p>Vous avez réussi. Vous avez été banni. Bien joué.</p>
<@dt_main>
<@dt_entry width=200 title="Date/Heure du bannissement ">${data.banTime?string("yyyy-MM-dd HH:mm:ss")}</@dt_entry>
<@dt_entry width=200 title="Raison du bannissement ">${data.banReason?xhtml}</@dt_entry>
</@dt_main>
<#if data.redeemable>
<p>Votre empire n'a pas encore été supprimé. Vous pouvez faire appel de ce bannissement en envoyant un e-mail à <a href="mailto:staff@legacyworlds.com">the staff</a> dans un délai de 48h.</p>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,261 @@
<#macro render_header desc>
<div style="text-align:center;margin: 2px 0">
At <a href="planet-${desc.location.id?string('#')}">${desc.location.name?xhtml}</a>
(<strong>${desc.x},${desc.y}</strong>;${desc.orbit})
</div>
</#macro>
<#macro render_navigation id disp>
<form action="battle-${id}-at.action" method="post">
<table style="width:100%;margin: 2px 0">
<tr>
<td style="width: 30px;text-align: right">
<#if disp.previous?has_content>
<a href="battle-${id?string('#')}-at-${disp.previous.ticks?string('#')}">
</#if>
&lt;&lt;
<#if disp.previous?has_content>
</a>
</#if>
</td>
<td style="text-align: center">
<@ff_select id="view-battle-tick" name="tick" style="width:470px">
<#list disp.all as viewable>
<@form_option value="${viewable.ticks?string('#')}" selected=(viewable.ticks == disp.current.ticks)><@game_time record=viewable.gameTime /></@form_option>
</#list>
</@ff_select>
<@ff_submit label="Voir" style="width:40px" />
</td>
<td style="width: 30px;text-align: left">
<#if disp.next?has_content>
<a href="battle-${id?string('#')}-at-${disp.next.ticks?string('#')}">
</#if>
&gt;&gt;
<#if disp.next?has_content>
</a>
</#if>
</td>
<td style="width: 30px;text-align: left">
<a href="battle-${id?string('#')}-latest">&gt;&gt;&gt;</a>
</td>
</tr>
</table>
</form>
</#macro>
<#macro render_list_entry mode record type>
<tr class="${mode}-fleet ${type} empire-entry">
<td style="width:16px">&nbsp;</td>
<td style="width:16px" class="ships-expander" title="Voir/cacher <#if type = "planet">les bâtiments<#else>les vaisseaux</#if>">&nbsp;</td>
<td style="width:16px">&nbsp;</td>
<td colspan="2">
<#nested>
</td>
<td style="text-align:center">${record.cPower?string(',##0')}</td>
<td style="text-align:center">${record.lPower?string(',##0')}</td>
</tr>
<#list record.ships as shipType>
<tr class="${mode}-fleet ${type} ship-type">
<td style="width:64px" colspan="4">&nbsp;</td>
<td>${shipType.name}</td>
<td style="text-align:center">${shipType.cAmount?string(',##0')}</td>
<td style="text-align:center">${shipType.lAmount?string(',##0')}</td>
</tr>
</#list>
</#macro>
<#macro render_protagonist mode record>
<#if record.ships?has_content>
<@render_list_entry mode=mode record=record type="empire">
<#if record.player.id = 0 || mode = "own">
${record.player.name?xhtml}
<#else>
<a href="msg-empire-${record.player.id}">${record.player.name?xhtml}</a>
</#if>
</@render_list_entry>
</#if>
</#macro>
<#macro render_planet mode record>
<@render_list_entry mode=mode record=record type="planet"><em>( planète )</em></@render_list_entry>
</#macro>
<#macro render_protagonists mode source>
<#if source.players?size = 0>
<#return>
</#if>
<tr class="${mode}-fleet group">
<td style="width:16px" class="forces-expander" title="Voir/cacher les empires">&nbsp;</td>
<td style="width:16px" class="ships-expander" title="Voir/cacher les vaisseaux">&nbsp;</td>
<td colspan="3">Forces <#if mode == "allied">Alliées<#else>Hostiles</#if></td>
<td style="text-align:center">${source.cPower?string(',##0')}</td>
<td style="text-align:center">${source.lPower?string(',##0')}</td>
</tr>
<#list source.ships as shipType>
<tr class="${mode}-fleet group ship-type">
<td style="width:64px" colspan="4">&nbsp;</td>
<td>${shipType.name}</td>
<td style="text-align:center">${shipType.cAmount?string(',##0')}</td>
<td style="text-align:center">${shipType.lAmount?string(',##0')}</td>
</tr>
</#list>
<#list source.players as pRecord>
<@render_protagonist mode=mode record=pRecord />
</#list>
</#macro>
<#macro render_fleets fData>
<@listview>
<tr><th colspan="6" style="text-align:center; font-size: 110%">Forces</th></tr>
<@lv_line headers=true>
<th style="width:16px">&nbsp;</th>
<th style="width:16px">&nbsp;</th>
<th style="width:16px">&nbsp;</th>
<th style="width:16px">&nbsp;</th>
<th>&nbsp;</th>
<@lv_column width=100 centered=true>Actuelles</@lv_column>
<@lv_column width=100 centered=true>Détruites</@lv_column>
</@lv_line>
<@render_protagonist mode="own" record=fData.own />
<#if fData.planet.relation == "OWN">
<@render_planet mode="own" record=fData.planet />
</#if>
<@render_protagonists mode="allied" source=fData.friendly />
<#if fData.planet.relation == "ALLIED">
<@render_planet mode="allied" record=fData.planet />
</#if>
<@render_protagonists mode="enemy" source=fData.hostile />
<#if fData.planet.relation == "ENEMY">
<@render_planet mode="enemy" record=fData.planet />
</#if>
<tr class="tip" style="display:none"><td colspan="7" style="text-align:center"><em>Cliquer "*" et "+" pour étendre les affichages de vaisseaux/bâtiments.</em></td></tr>
</@listview>
</#macro>
<#macro render_event_items items>
<#list items as item>
<@lv_line>
<td>&nbsp;</td>
<td><strong>${item.name}</strong></td>
<td>${item.cAmount?string(",##0")}</td>
</@lv_line>
</#list>
</#macro>
<#macro render_event event>
<#switch event.type>
<#case "RENAME">
<@lv_line>
<td colspan="3">Planète renommée en <strong>${event.name}</strong></td>
</@lv_line>
<#break>
<#case "SWITCH">
<@lv_line>
<td colspan="3">
<#if event.name = data.page.empire>
Nous sommes passés en <#if event.hostile>attaque<#else>défense</#if>.
<#else>
<strong>${event.name}</strong> a changé de mode et est maintenant <#if event.hostile>hostile<#else>dans notre camp</#if>.
</#if>
</td>
</@lv_line>
<#break>
<#case "BUILD">
<@lv_line>
<td colspan="3">
<#if event.planet>
De nouveau bâtiments ont été construits sur la planète.
<#elseif event.name = data.page.empire>
Nos nouvelles flottes ont été déployées.
<#else>
Des flottes <#if event.hostile>Hostiles<#else>Alliées</#if> appartenant à <strong>${event.name}</strong> ont été déployées.
</#if>
</td>
</@lv_line>
<@render_event_items items=event.ships />
<#break>
<#case "DEPART">
<@lv_line>
<td colspan="3">
<#if event.name = data.page.empire>
Nos flottes ont quitté l'orbite.
<#else>
Des flottes <#if event.hostile>Hostiles<#else>Alliées</#if> appartemant à <strong>${event.name}</strong> ont quitté l'orbite.
</#if>
</td>
</@lv_line>
<@render_event_items items=event.ships />
<#break>
<#case "ARRIVE">
<@lv_line>
<td colspan="3">
<#if event.name = data.page.empire>
Nos flottes se sont jointes à la bataille.
<#else>
Des flottes <#if event.hostile>Hostiles<#else>Alliées</#if> appartenant à <strong>${event.name}</strong> se sont jointes à la bataille.
</#if>
</td>
</@lv_line>
<@render_event_items items=event.ships />
<#break>
<#case "DESTROY">
<@lv_line>
<td colspan="3">
<#if event.planet>
Des bâtiments ont été détruits sur la planète.
<#elseif event.name = data.page.empire>
Nos flottes ont été dissoutes.
<#else>
Des flottes <#if event.hostile>Hostiles<#else>Alliées</#if> appartenant à <strong>${event.name}</strong> ont été dissoutes.
</#if>
</td>
</@lv_line>
<@render_event_items items=event.ships />
<#break>
<#default>
<@lv_line>
<td colspan="3">
<em>Type d'événement manquant "${event.type}" (ceci est un bug)</em>
</td>
</@lv_line>
<#break>
</#switch>
</#macro>
<#macro render_history hData>
<#if hData?size = 0>
<#return>
</#if>
<@listview>
<tr><th colspan="3" style="text-align:center; font-size: 110%">Historique</th></tr>
<@lv_line headers=true>
<th style="width:120px;font-size: 1px">&nbsp;</th>
<th style="width:170px;font-size: 1px">&nbsp;</th>
<th style="font-size: 1px">&nbsp;</th>
</@lv_line>
<#list hData as hInterval>
<#if hInterval.end?has_content>
<#if hInterval.battleEnds>
<tr><td colspan="3" style="text-align:center;padding: 5px 0px;font-weight: bold"><em>La bataille s'est terminée à <@game_time record=hInterval.end.gameTime /></em></td></tr>
<#else>
<tr><td colspan="3" style="text-align:center;padding: 5px 0px;font-weight: bold"><em>Plus de flottes à cet endroit</em></td></tr>
</#if>
<tr><td colspan="3">&nbsp;</td></tr>
</#if>
<#list hInterval.entries as atTick>
<tr><td colspan="3" style="text-align:center;padding: 5px 0px"><em><@game_time record=atTick.time.gameTime />:</em></td></tr>
<#list atTick.events as event>
<@render_event event=event />
</#list>
<tr><td colspan="3">&nbsp;</td></tr>
</#list>
<#if hInterval.battleBegins>
<tr><td colspan="3" style="text-align:center;padding: 5px 0px;font-weight: bold"><em>La bataille a commencé à <@game_time record=hInterval.begin.gameTime /></em></td></tr>
</#if>
</#list>
</@listview>
</#macro>
<#macro render>
<#local bDescription = data.battle.description>
<#local bDisplay = data.battle.display>
<@page title="Battle #${bDescription.id?string(',##0')} at ${bDescription.location.name}">
<@render_header desc=bDescription />
<@render_navigation id=bDescription.id disp=bDisplay />
<p>&nbsp;</p>
<@render_fleets fData=data.battle.ships />
<@render_history hData=data.battle.history />
</@page>
</#macro>

View file

@ -0,0 +1,62 @@
<#macro render_battles battles page pages>
<#if pages gt 1>
<table style="width:100%;margin: 2px 0">
<tr>
<td style="width: 30px;text-align: right">
<#if page gt 0>
<a href="battles-${page - 1}">
</#if>
&lt;&lt;
<#if page gt 0>
</a>
</#if>
</td>
<td style="text-align: center">
Page ${page + 1} / ${pages}
</td>
<td style="width: 30px;text-align: left">
<#if page lt pages - 1>
<a href="battles-${page + 1}">
</#if>
&gt;&gt;
<#if page lt pages - 1>
</a>
</#if>
</td>
</tr>
</table>
</#if>
<@listview>
<@lv_line headers=true>
<@lv_column width=60 centered=true>#</@lv_column>
<@lv_column width="x">Localisation</@lv_column>
<@lv_column width=80 centered=true>&nbsp;</@lv_column>
<@lv_column width=125 centered=true>Rejointe</@lv_column>
<@lv_column width=125 centered=true>Terminée</@lv_column>
</@lv_line>
<#list battles as battle>
<@lv_line>
<@lv_column centered=true><a href="battle-${battle.id?string('#')}-latest">${battle.id?string(',##0')}</a></@lv_column>
<@lv_column>${battle.location.name?xhtml}</@lv_column>
<@lv_column centered=true>(${battle.x},${battle.y};${battle.orbit})</@lv_column>
<@lv_column centered=true><@game_time record=battle.first.gameTime /></@lv_column>
<@lv_column centered=true>
<#if battle.last?has_content>
<@game_time record=battle.last.gameTime />
<#else>
<em>En cours</em>
</#if>
</@lv_column>
</@lv_line>
</#list>
</@listview>
</#macro>
<#macro render>
<@page title="Batailles">
<#if data.pages == 0>
<p>Nous n'avons pris part à aucune bataille</p>
<#else>
<@render_battles battles=data.list page=data.currentPage pages=data.pages />
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,136 @@
<#include "bugsTabs.ftl">
<#macro render_navigation current count total qString>
<table style="width:100%;margin: 2px 0">
<tr>
<td style="width: 30px;text-align: right">
<#if current gt 0>
<a href="bugtrack?${qString}&amp;first=${current - count}">
</#if>
&lt;&lt;
<#if current gt 0>
</a>
</#if>
</td>
<td style="text-align: center">
<#if total gt 1>
${total?string(',##0')} entrées trouvées.
<#elseif total = 1>
1 entrée trouvée.
<#else>
Aucune entrée trouvée.
</#if>
</td>
<td style="width: 30px;text-align: left">
<#if current lt total - count>
<a href="bugtrack?${qString}&amp;first=${current + count}">
</#if>
&gt;&gt;
<#if current lt total - count>
</a>
</#if>
</td>
</tr>
</table>
</#macro>
<#macro render>
<#if data.ownOnly>
<#local ownOnly = "1">
<#else>
<#local ownOnly = "0">
</#if>
<#local qString = "status=${data.status!'x'}&amp;own=${ownOnly}" >
<@page title="Suivi des bugs">
<#-- Tabs -->
<@bugTabs selected="bugsList" qString="${qString}&amp;first=${data.first}" />
<#-- Selection -->
<div class="form-container">
<form action="bugtrack" method="get">
<table>
<tr><td>
Lister
<@ff_select id="sel-own" name="own">
<@form_option value="0">tous les</@form_option>
<@form_option value="1" selected=(data.ownOnly)>mes</@form_option>
</@ff_select>
rapports dont le statut est :
<@ff_select id="sel-stat" name="status">
<@form_option value="x">(indifférent)</@form_option>
<@form_option value="PENDING" selected=((data.status!"") = 'PENDING')>en attente de validation</@form_option>
<@form_option value="OPEN" selected=((data.status!"") = 'OPEN')>en cours de traitement</@form_option>
<@form_option value="RESOLVED" selected=((data.status!"") = 'RESOLVED')>résolu</@form_option>
<@form_option value="WONT_FIX" selected=((data.status!"") = 'WONT_FIX')>ne sera pas résolu</@form_option>
<@form_option value="NOT_A_BUG" selected=((data.status!"") = 'NOT_A_BUG')>pas un bug</@form_option>
</@ff_select>
<@ff_submit label="Rechercher" />
</td></tr>
</table>
</form>
</div>
<#-- Navigation -->
<@render_navigation current=data.first count=data.count total=data.entries qString=qString />
<#-- List of bugs -->
<#if data.reports?size gt 0>
<@listview>
<@lv_line headers=true>
<@lv_column centered=true width=60>#</@lv_column>
<@lv_column width="x">Titre</@lv_column>
<#if !( data.status?has_content )>
<@lv_column width=130 centered=true>Statut</@lv_column>
</#if>
<@lv_column width=150 centered=true>Dernière mise à jour</@lv_column>
</@lv_line>
<#list data.reports as report>
<#if !data.ownOnly && report.initialSubmitter.userId?has_content && !report.initialSubmitter.admin && report.initialSubmitter.name = data.page.empire>
<#local eClass="own-fleet">
<#else>
<#local eClass="">
</#if>
<@lv_line class=eClass>
<@lv_column centered=true>${report.reportId?string(",##0")}</@lv_column>
<@lv_column><a href="bug-${report.reportId}?${qString}&amp;first=${data.first}">${report.title}</a></@lv_column>
<#if !( data.status?has_content )>
<@lv_column centered=true><@bugStatus status=report.status /></@lv_column>
</#if>
<@lv_column centered=true>
<#if report.updated>
<strong>
</#if>
${report.lastUpdate?string("yyyy-MM-dd HH:mm:ss")}
<#if report.updated>
</strong>
</#if>
</@lv_column>
</@lv_line>
<@lv_line class=eClass>
<#if data.status?has_content>
<td colspan="2">
<#else>
<td colspan="3">
</#if>
&nbsp;</td>
<@lv_column centered=true>
par
<#if report.latestSubmitter.admin>
<span style="color:#ffafaf">
</#if>
${report.latestSubmitter.name}
<#if report.latestSubmitter.admin>
</span>
</#if>
</@lv_column>
</@lv_line>
</#list>
</@listview>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,62 @@
<#include "bugsTabs.ftl">
<#macro render>
<#if data.query.ownOnly>
<#local ownOnly = "1">
<#else>
<#local ownOnly = "0">
</#if>
<#local qString = "status=${data.query.status!'x'}&amp;own=${ownOnly}" >
<@page title="Rapporter un bug">
<@bugTabs selected="bugsReport" qString="${qString}&amp;first=${data.query.first}" />
<h3 style="padding:0;text-align:center">LISEZ CECI AVANT DE RAPPORTER UN BUG</h3>
<p>
Or donc, vous avez découvert quelque chose qui ne fonctionne pas ou qui semble se comporter
incorrectement. Très bien - c'est la raison pour laquelle cette version est publique.
</p>
<p>
Cependant, êtes-vous sûr qu'il s'agit bel et bien d'un bug? Si vous avez joué à la Beta 5, beaucoup
de choses ont changé et ne se comportent plus de la même manière. Assurez-vous tout d'abord d'avoir
consulté les <a href="rules">règles du jeu</a> ainsi que les informations concernant la
<a href="scope">portée de ce jalon</a>.
</p>
<p>
Une fois que vous avez lu cette documentation, si vous n'avez rien trouvé qui semble se rapporter
à votre problème, hé bien, il s'agit d'un vrai bug ou bien de quelque chose qui a été omis dans la doc.
Dans tous les cas, ce problème devrait être rapporté en utilisant le formulaire ci-dessous.
Utilisez un titre <strong>aussi clair que possible</strong> (il devrait indiquer la nature du problème)
et écrivez une description aussi précise que vous le pouvez.
</p>
<p>
Il est préférable que ce rapport soit écrit en Anglais, afin d'être lisible par tous les membres
de l'équipe, mais ce n'est pas obligatoire.
</p>
<p>
Merci pour votre aide!
</p>
<@form action="report-bug">
<tr style="display:none"><td colspan="2">
<input type="hidden" name="status" value="${(data.query.status!'x')?xhtml}" />
<input type="hidden" name="own" value="${ownOnly}" />
<input type="hidden" name="first" value="${data.query.first}" />
</td></tr>
<#switch data.titleError!"">
<#case "EMPTY"><@form_error>Veuillez spécifier le titre du rapport</@form_error><#break>
<#case "INVALID"><@form_error>Le titre doit comprendre au moins 10 caractères</@form_error><#break>
</#switch>
<@form_text label="Titre " name="title" value=data.title!"" maxLength=127 />
<#switch data.descriptionError!"">
<#case "EMPTY"><@form_error>Veuillez spécifier la description du bug</@form_error><#break>
<#case "INVALID"><@form_error>La description doit comprendre au moins 30 caractères</@form_error><#break>
</#switch>
<@form_text label="Description " name="description" value=data.description!"" multiline=true maxLength=10 />
<@form_submit label="Poster le rapport de bug" />
</@form>
</@page>
</#macro>

View file

@ -0,0 +1,18 @@
<#macro bugTab href title selected>
<a class="tab-button<#if selected> selected-tab</#if>" href="${href}">${title}</a>
</#macro>
<#macro bugTabs selected qString>
<div class="tab-buttons">
<@bugTab href="bugtrack?${qString}" title="Lister les bugs" selected=( selected = 'bugsList' ) />
<@bugTab href="report-bug?${qString}" title="Rapporter un bug" selected=( selected = 'bugsReport' ) />
</div>
</#macro>
<#macro bugStatus status>
<#switch status>
<#case "PENDING">en attende de validation<#break>
<#case "OPEN">en cours de traitement<#break>
<#case "RESOLVED">résolu<#break>
<#case "WONT_FIX">ne sera pas résolu<#break>
<#case "NOT_A_BUG">pas un bug<#break>
</#switch>
</#macro>

View file

@ -0,0 +1,124 @@
<#include "bugsTabs.ftl" />
<#macro render_submitter s>
<#if s.admin>
<span style="color:#ffafaf">
<#elseif s.userId?has_content && s.name = data.page.empire>
<span style="color:#afffaf">
</#if>
${s.name?xhtml}
<#if s.admin || ( s.userId?has_content && s.name = data.page.empire )>
</span>
</#if>
</#macro>
<#macro render_event e>
<div style="text-align:center; padding:10px 10px">
${e.timestamp?string("yyyy-MM-dd HH:mm:ss")} - <@render_submitter s=e.submitter />
<#nested>
</div>
</#macro>
<#macro render_report_event e>
<@render_event e=e>
a posté un rapport de bug #<strong>${e.id?string(",##0")}</strong>
</@render_event>
<h3 style="margin:0;text-align:center;padding:0 0 10px 0">${e.title}</h3>
<div style="margin: 0 40px 20px 40px">
${e.contents}
</div>
</#macro>
<#macro render_status_event e>
<@render_event e=e>
a changé le statut du rapport en <strong><@bugStatus status=e.status /></strong>
</@render_event>
</#macro>
<#macro render_visibility_event e>
<@render_event e=e>
a mis la visibilité du rapport à <strong><#if e.visible>public<#else>privé</#if></strong>
</@render_event>
</#macro>
<#macro render_merge_event e>
<@render_event e=e>
a fusionné le rapport de bug courant avec le rapport de bug #<strong>${e.mergedId?string(",##0")}</strong>
</@render_event>
</#macro>
<#macro render_comment_event e>
<@render_event e=e>
a posté un commentaire
<#if !e.visible>
<em>(en attente de modération)</em>
</#if>
</@render_event>
<div style="margin: 0 40px 20px 40px">
${e.contents}
</div>
</#macro>
<#macro render>
<#if data.query.ownOnly>
<#local ownOnly = "1">
<#else>
<#local ownOnly = "0">
</#if>
<#local qString = "status=${data.query.status!'x'}&amp;own=${ownOnly}" >
<@page title="Bug #${data.report.reportId?string(',##0')} - ${data.report.title}" hidePlanets=true>
<#-- Tabs -->
<@bugTabs selected="" qString="${qString}&amp;first=${data.query.first}" />
<#-- Bug info -->
<@dt_main>
<@dt_entry title="Statut "><@bugStatus status=data.report.status /></@dt_entry>
<@dt_entry title="Public "><#if data.report.visible>Oui<#else>Non</#if></@dt_entry>
<@dt_entry title="Rapporté initialement le ">
${data.report.posted?string("yyyy-MM-dd HH:mm:ss")}
par <@render_submitter s=data.report.initialSubmitter />
</@dt_entry>
<@dt_entry title="Dernière mise à jour le ">
${data.report.lastUpdate?string("yyyy-MM-dd HH:mm:ss")}
par <@render_submitter s=data.report.latestSubmitter />
</@dt_entry>
</@dt_main>
<#-- List events -->
<#local mayPost = false>
<#list data.events as event>
<hr/>
<#local mayPost = ( mayPost || ( !event.submitter.admin && event.submitter.userId?has_content && event.submitter.name = data.page.empire ) )>
<#switch event.type>
<#case 'INIT'>
<@render_report_event e=event />
<#break>
<#case 'STATUS'>
<@render_status_event e=event />
<#break>
<#case 'COMMENT'>
<@render_comment_event e=event />
<#break>
<#case 'VISIBILITY'>
<@render_visibility_event e=event />
<#break>
<#case 'MERGE'>
<@render_merge_event e=event />
<#break>
</#switch>
</#list>
<#-- Comment form -->
<#if mayPost && ( data.report.status = 'OPEN' || data.report.status = 'PENDING' )>
<hr id="post-comment"/>
<@form action="bug-${data.report.reportId}-comment" hash="post-comment">
<tr style="display:none">
<td colspan="2">
<input type="hidden" name="status" value="${data.query.status!"x"}" />
<input type="hidden" name="own" value="${ownOnly}" />
<input type="hidden" name="first" value="${data.query.first}" />
</td>
</tr>
<#switch data.commentError!"">
<#case "EMPTY"><@form_error>Vous devriez écrire le commentaire avant de le poster.</@form_error><#break>
<#case "INVALID"><@form_error>Les commentaires doivent compter au moins 30 caractères.</@form_error><#break>
</#switch>
<@form_text label="Nouveau commentaire " name="comment" multiline=true maxLength=6 value=data.comment!"" />
<@form_submit label="Poster le commentaire" />
</@form>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,28 @@
<#macro render>
<@page title="Legacy Worlds - Discussion">
<applet code="IRCApplet.class" archive="irc.jar,pixx.jar" codebase="pjirc" width="100%" height="100%">
<param name="CABINETS" value="irc.cab,securedirc.cab,pixx.cab" />
<param name="nick" value="${(data.page.empire?replace(' ' , '_'))?xhtml}" />
<param name="alternatenick" value="LW-Player-???" />
<param name="name" value="${data.page.empire?xhtml}" />
<param name="host" value="irc.legacyworlds.com" />
<param name="gui" value="pixx" />
<param name="quitmessage" value="Destination - outer space!" />
<param name="fingerreply" value="Legacy Worlds player" />
<param name="userinforeply" value="Legacy Worlds player" />
<param name="language" value="french" />
<param name="style:bitmapsmileys" value="false"/>
<param name="pixx:highlight" value="true"/>
<param name="pixx:highlightnick" value="true"/>
<param name="pixx:showconnect" value="false" />
<param name="pixx:showchanlist" value="false" />
<param name="pixx:showabout" value="false" />
<param name="pixx:showhelp" value="false" />
<param name="command1" value="/join #deepclone" />
<param name="command2" value="/join #legacy" />
</applet>
</@page>
</#macro>

View file

@ -0,0 +1,92 @@
<#macro enemy_tab eList alliances>
<#if alliances>
<#local tabId = "alliances">
<#local addAction = "alliance">
<#local tabTitle = "Alliances">
<#local emptyText = "Aucune alliance ennemie.">
<#local nameLen = 5>
<#if data.alliance?has_content & data.alliance>
<#local error = data.error>
<#local defName = data.name>
</#if>
<#else>
<#local tabId = "empires">
<#local addAction = "empire">
<#local tabTitle = "Empires">
<#local emptyText = "Aucun empire ennemi.">
<#local nameLen = 20>
<#if data.alliance?has_content & !data.alliance>
<#local error = data.error>
<#local defName = data.name>
</#if>
</#if>
<@tab id=tabId title=tabTitle>
<#if eList?size == 0>
<p>${emptyText}</p>
<#else>
<form action="remove-enemy-${tabId}.action#${tabId}" method="post">
<@listview>
<@lv_line headers=true>
<@lv_column width=40 centered=true>&nbsp;</@lv_column>
<@lv_column width="x">${tabTitle}</@lv_column>
</@lv_line>
<#list eList as enemy>
<@lv_line>
<@lv_column centered=true><input type="checkbox" name="id" value="${enemy.id}" /></@lv_column>
<@lv_column>
<#if alliances><a href="msg-alliance-${enemy.id}">[<#else><a href="msg-empire-${enemy.id}"></#if>${enemy.name?xhtml}<#if alliances>]</#if></a>
</@lv_column>
</@lv_line>
</#list>
</@listview>
<div class="form-container">
<table><tr><td>
<@ff_submit label="Supprimer les ennemis sélectionnés" />
</td></tr></table>
</div>
</form>
</#if>
<#if data.page.special! != 'v'>
<#if error?has_content>
<@standalone_error>
<#switch error>
<#case "INVALID"><#if alliances>Alliance<#else>Empire</#if> non trouvé.<#break>
<#case "BANNED">
<#if alliances>
Petite trahison entre amis ?
<#else>
Il y a un terme médical pour ça - schizophrénie.
</#if>
<#break>
<#case "UNAVAILABLE">
<#if alliances>Cette alliance<#else>Cet empire</#if> est déjà dans votre liste d'ennemis.
<#break>
</#switch>
</@standalone_error>
</#if>
<@lineform action="add-enemy-${addAction}" hash=tabId>
Nouvel ennemi: <@ff_text id="name-${addAction}" name="name" value=defName! maxLength=nameLen size=(nameLen+1) />
<@ff_submit label="Ajouter" />
</@lineform>
</#if>
</@tab>
</#macro>
<#macro render>
<@page title="Liste d'ennemis">
<@tabs>
<@enemy_tab eList=data.empires alliances=false />
<@enemy_tab eList=data.alliances alliances=true />
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,261 @@
<#macro render_fleet_ships rType id ships>
<table>
<tr>
<th class="ships-type">Classe de vaisseaux</th>
<th class="ships-amount">Quantité</th>
<th class="ships-power">Puissance</th>
</tr>
<#list ships as ship>
<tr>
<td class="ships-type">${ship.name}</td>
<td class="ships-amount">${ship.amount?string(',##0')}</td>
<td class="ships-power">${ship.power?string(',##0')}</td>
</tr>
</#list>
</table>
</#macro>
<#macro render_static_fleet_details rType fleet>
<tr class="${rType} fleet-ships" id="fleet-${fleet.id}-ships">
<td>&nbsp;</td>
<td colspan="5">
<div style="float:right">
<@render_fleet_ships rType="own-fleet" id=fleet.id ships=fleet.ships />
</div>
<div style="width:">
<@dt_main>
<#if fleet.status != 'AVAILABLE'>
<@dt_entry title="Pénalité">
<@duration rTime=fleet.penalty gTime=fleet.gamePenalty />
</@dt_entry>
</#if>
<@dt_entry abbr="TVOO " title="Temps de vol d'orbite-à-orbite">
<@duration rTime=fleet.flightTime gTime=fleet.gameFlightTime />
</@dt_entry>
</@dt_main>
</div>
</td>
</tr>
</#macro>
<#macro render_fleets_at location owners>
<#list owners as owner>
<#switch owner.relation>
<#case 'OWN'>
<#local rType = 'own-fleet'>
<#local mode = location.attacking >
<#break>
<#case 'ALLIED'>
<#local rType = 'allied-fleet'>
<#local mode = location.attacking >
<#break>
<#case 'ENEMY'>
<#local rType = 'enemy-fleet'>
<#local mode = ! location.attacking >
<#break>
</#switch>
<#list owner.fleets as fleet>
<tr class="${rType} fleet-details" id="fleet-${fleet.id}">
<td class="selector">
<#if owner.relation == 'OWN' && data.page.special! != 'v'>
<input type="checkbox" name="selection" value="${fleet.id}" />
<#else>
&nbsp;
</#if>
</td>
<td class="name">
<#if fleet.name?has_content && fleet.name != "">
${fleet.name?xhtml}
<#else>
<em>(flotte sans nom)</em>
</#if>
</td>
<td>
<#if owner.relation = 'OWN'>
${owner.name?xhtml}
<#else>
<a href="msg-empire-${owner.id}">${owner.name?xhtml}</a>
</#if>
</td>
<td class="mode">
<#if mode><abbr title="En attaque">A</abbr><#else><abbr title="En défense">D</abbr></#if>
</td>
<td class="power">${fleet.power?string(',##0')}</td>
<td class="status">
<#if fleet.status == 'AVAILABLE'>
<abbr title="Cette flotte est disponible, il est possible de lui donner n'importe quel ordre.">DIS</abbr>
<#else>
<#switch fleet.status>
<#case 'DEPLOYING'><abbr title="Cette flotte est en train d'effectuer son déploiement initial depuis les quais spaciaux.">DPL</abbr><#break>
<#case 'REDEPLOYING'><abbr title="Cette flotte est en train de se re-déployer après son arrivée ou un changement de mode.">RDP</abbr><#break>
</#switch>
</#if>
</td>
</tr>
<@render_static_fleet_details rType=rType fleet=fleet />
</#list>
</#list>
</#macro>
<#macro render_static_fleets locations>
<#list locations as location>
<table class="fleets-planet">
<tr>
<td class="pic"><img src="img/pp/s/${location.picture}.png" alt="${location.name?xhtml}" /></td>
<th class="planet-name"><a href="planet-${location.id}">${location.name?xhtml}</a> (<strong>${location.x},${location.y}</strong>;<strong>${location.orbit}</strong>)</th>
<td class="planet-data">Population : <strong>${location.population?string(",##0")}</strong></td>
<td class="planet-data">
<#if location.attacking>
<span class="enemy-fleet">
<#elseif location.own>
<span class="own-fleet">
<#else>
<span class="allied-fleet">
</#if>
Défense : <strong>${location.defence?string(",##0")}</strong>
</span>
</td>
</tr>
<tr>
<td colspan="4">
<#if location.fleetOwners?size == 0>
<p>Aucune flotte à cet endroit.</p>
<#else>
<table class="fleets-list">
<tr class="header">
<td class="selector">&nbsp;</td>
<th class="name">Nom de la flotte</th>
<th class="owner">Propriétaire</th>
<th class="mode"><abbr title="Mode le la flotte">M</abbr></th>
<th class="power"><abbr title="Puissance de la flotte">P</abbr></th>
<th class="status"><abbr title="Statut de la flotte">S</abbr></th>
</tr>
<@render_fleets_at location=location owners=location.fleetOwners />
</table>
</#if>
</td>
</tr>
<#if location.onVacation!false>
<tr><td colspan="4" style="padding:2px">Mode vacances activé</td></tr>
<#elseif location.battle?has_content && location.battle.hostile gt 0>
<tr><td colspan="4" style="padding:2px">
Bataille - <span class="own-fleet">${location.battle.friendly?string(',##0')}</span> contre <span class="enemy-fleet">${location.battle.hostile?string(',##0')}</span> -
<a href="battle-${location.battle.id}-latest">Détails</a>
</td></tr>
</#if>
</table>
</#list>
</#macro>
<#macro render_moving_fleet_details fleet>
<tr class="own-fleet fleet-ships" id="fleet-${fleet.id}-ships">
<td>&nbsp;</td>
<td colspan="6">
<div style="float:right">
<@render_fleet_ships rType="own-fleet" id=fleet.id ships=fleet.ships />
</div>
<div style="width:">
<@dt_main>
<@dt_entry title="Origine "><a href="planet-${fleet.source.id}">${fleet.source.name?xhtml}</a></@dt_entry>
<@dt_entry title="Statut ">
<#if fleet.status == 'AVAILABLE'>
<abbr title="Cette flotte est disponible, il est possible de lui donner n'importe quel ordre.">DIS</abbr>
<#else>
<abbr title="Cette flotte est en train de changer de destination.">RDR</abbr> -
<@duration rTime=fleet.penalty gTime=fleet.gamePenalty />
</#if>
</@dt_entry>
<@dt_entry title="Temps jusqu'à la destionation "><@duration rTime=fleet.timeLeft gTime=fleet.gameTimeLeft /></@dt_entry>
<@dt_entry title="Coordonnées ">(${fleet.currentX?string("0.00")};${fleet.currentY?string("0.00")})</@dt_entry>
<@dt_entry title="Planète la plus proche ">
<#if fleet.nearest?has_content>
<a href="planet-${fleet.nearest.id}">${fleet.nearest.name?xhtml}</a>
<#else>
<em>dans l'espace profond</em>
</#if>
</@dt_entry>
<@dt_entry abbr="TVOO " title="Temps de vol d'orbite-à-orbite">
<@duration rTime=fleet.flightTime gTime=fleet.gameFlightTime />
</@dt_entry>
</@dt_main>
</div>
</td>
</tr>
</#macro>
<#macro render_moving_fleet fleet>
<tr class="own-fleet fleet-details" id="fleet-${fleet.id}">
<td class="selector">
<#if data.page.special! != 'v'>
<input type="checkbox" name="selection" value="${fleet.id}" />
<#else>
&nbsp;
</#if>
</td>
<td class="name" colspan="2">
<#if fleet.name?has_content && fleet.name != "">
${fleet.name?xhtml}
<#else>
<em>(flotte sans nom)</em>
</#if>
</td>
<td class="mode">
<#if fleet.attacking><abbr title="En attaque">A</abbr><#else><abbr title="En défense">D</abbr></#if>
</td>
<td class="power">${fleet.power?string(',##0')}</td>
<td class="timeleft"><@duration rTime=fleet.eta gTime=fleet.gameEta /></td>
<td class="destination"><a href="planet-${fleet.destination.id}">${fleet.destination.name?xhtml}</a></td>
</tr>
<@render_moving_fleet_details fleet=fleet />
</#macro>
<#macro render_moving_fleets fleets>
<#if fleets?size != 0>
<table class="fleets-moving">
<tr>
<th class="mv-header">Flottes en mouvement</th>
</tr>
<tr>
<td>
<table class="fleets-list">
<tr>
<td class="selector">&nbsp;</td>
<th class="name" colspan="2">Nom de la flotte</th>
<th class="mode"><abbr title="Mode le la flotte">M</abbr></th>
<th class="power"><abbr title="Puissance de la flotte">P</abbr></th>
<th class="timeleft"><abbr title="Temps estimé jusqu'à l'arrivée">TEA</abbr></th>
<th class="destination">Destination</th>
</tr>
<#list fleets as fleet>
<@render_moving_fleet fleet=fleet />
</#list>
</table>
</td>
</tr>
</table>
</#if>
</#macro>
<#macro render>
<@page title="Flottes">
<#local locations = data.fleets.locations>
<#local mFleets = data.fleets.moving>
<#if locations?size == 0 && mFleets?size == 0>
<p>Vous ne possédez ni flottes ni planètes.</p>
<#else>
<div style="font-style: italic; text-align:center; padding: 0 0 10px 0">Cliquez sur le nom d'un flotte pour voir sa compsition et autres détails la concernant</div>
<form method="post" action="fleets.action">
<@render_static_fleets locations=locations />
<@render_moving_fleets fleets=mFleets />
<#if data.page.special! != 'v'>
<div id="fleet-actions">
<input type="submit" class="input" name="rename" value="Renommer" title="Renommer les flottes sélectionnées" />
&nbsp;
<input type="submit" class="input" name="move" value="Déplacer" title="Déplacer ou rediriger les flottes sélectionner si elles sont disponibles." />
&nbsp;
<input type="submit" class="input" name="setAttack" value="Attaquer" title="Mettre les flottes sélectionnées en mode attaque." />
<input type="submit" class="input" name="setDefend" value="Défendre" title="Mettre les flottes sélectionnées en mode défense." />
&nbsp;
<input type="submit" class="input" name="merge" value="Fusionner" title="Fusionner les flottes sélectionnées si elles sont disponibles." />
<input type="submit" class="input" name="split" value="Diviser" title="Diviser la flotte sélectionnée en deux flottes ou plus." />
&nbsp;
<input type="submit" class="input" name="disband" value="Dissoudre" title="Détruire les flottes sélectionnées." />
</div>
</#if>
</form>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,137 @@
<#macro render_fleet fleet>
<td class="selector"><input type="checkbox" name="selection" value="${fleet.id}" checked="checked" /></td>
<td class="name">
<#if fleet.name?has_content && fleet.name != "">
${fleet.name?xhtml}
<#else>
<em>(flotte sans nom)</em>
</#if>
</td>
<td class="power">${fleet.power?string(',##0')}</td>
<td class="fltime"><@duration rTime=fleet.flightTime gTime=fleet.gameFlightTime /></td>
<td class="status">
<#switch fleet.status>
<#case 'DEPLOYING'><abbr title="Cette flotte est en train d'effectuer son déploiement initial depuis les quais spaciaux.">DPL</abbr><#break>
<#case 'REDEPLOYING'><abbr title="Cette flotte est en train de se re-déployer après son arrivée ou un changement de mode.">RDP</abbr><#break>
<#case 'REDIRECTING'><abbr title="Cette flotte est en train de changer de destination.">RDP</abbr><#break>
<#case 'AVAILABLE'><abbr title="Cette flotte est disponible, il est possible de lui donner n'importe quel ordre.">DIS</abbr><#break>
</#switch>
</td>
<td class="cloc">
(${fleet.x?string("0.00")};${fleet.y?string("0.00")})<br/>
<#if fleet.nearest?has_content>
<#if fleet.atPlanet>À<#else>Près de</#if>
<a href="planet-${fleet.nearest.id}">${fleet.nearest.name?xhtml}</a>
<#else>
Dans l'espace profond
</#if>
</td>
</#macro>
<#macro render_selected_fleets fleets>
<h3>Flottes sélectionnées</h3>
<table class="selected-fleets">
<tr>
<td class="selector">&nbsp;</td>
<th class="name">Nom</th>
<th class="power"><abbr title="Puissance de la flotte">P</abbr></th>
<th class="fltime"><abbr title="Temps de vol orbite-à-orbite">TV</abbr></th>
<th class="status"><abbr title="Statut de la flotte">S</abbr></th>
<th class="cloc">Localisation</th>
</tr>
<#list fleets as fleet>
<tr>
<@render_fleet fleet=fleet />
</tr>
</#list>
</table>
</#macro>
<#macro render_move_fleets>
<h3>Nouveaux ordres</h3>
<#if data.error>
<@standalone_error>Cette planète n'existe pas.</@standalone_error>
</#if>
<p>
Diriger les flottes sélectionnées vers
<@ff_text name="destination" id="destination" value="${data.destination!?xhtml}" maxLength=20 size=21 />
en
<@ff_select name="mode" id="mode">
<@form_option text="défense" selected=( !data.mode!false ) value="0" />
<@form_option text="attaque" selected=( data.mode!false ) value="1" />
</@ff_select>
&nbsp;
<@ff_submit label="Ok" />
<@ff_submit label="Annuler" name="cancel" />
</p>
</#macro>
<#macro render_rename_fleets>
<h3>Renommer les flottes</h3>
<#if data.error>
<@standalone_error>Ce nom est invalide.</@standalone_error>
</#if>
<p>
Renommer les flottes sélectionnées en
<@ff_text name="name" id="name" value="${data.name!?xhtml}" maxLength=40 size=21 />
&nbsp;
<@ff_submit label="Ok" />
<@ff_submit label="Annuler" name="cancel" />
</p>
</#macro>
<#macro render_set_fleets_mode>
<h3>Définir le mode des flottes</h3>
<p>
Mettre les flottes sélectionnées en
<#if data.attack>attaque<#else>défense</#if>?
&nbsp;
<@ff_submit label="Oui" />
<@ff_submit label="Non" name="cancel" />
</p>
<input type="hidden" name="attack" value="<#if data.attack>1<#else>0</#if>" />
</#macro>
<#macro render_disband_fleets>
<h3>Dissudre les flottes</h3>
<p>
Êtes-vous sûr?
&nbsp;
<@ff_submit label="Oui" />
<@ff_submit label="Non" name="cancel" />
</p>
</#macro>
<#macro render>
<#switch dataType>
<#case 'MoveFleetsResponse'>
<#local title="Déplacer les flottes">
<#local action="move-fleets.action">
<#break>
<#case 'RenameFleetsResponse'>
<#local title="Renommer les flottes">
<#local action="rename-fleets.action">
<#break>
<#case 'SetFleetsModeResponse'>
<#local title="Définir le mode des flottes">
<#local action="set-fleets-mode.action">
<#break>
<#case 'DisbandFleetsResponse'>
<#local title="Dissoudre les flottes">
<#local action="disband-fleets.action">
<#break>
</#switch>
<@page title=title>
<form action="${action}" method="post">
<@render_selected_fleets fleets=data.fleets />
<#switch dataType>
<#case 'MoveFleetsResponse'>
<@render_move_fleets />
<#break>
<#case 'RenameFleetsResponse'>
<@render_rename_fleets />
<#break>
<#case 'SetFleetsModeResponse'>
<@render_set_fleets_mode />
<#break>
<#case 'DisbandFleetsResponse'>
<@render_disband_fleets />
<#break>
</#switch>
</form>
</@page>
</#macro>

View file

@ -0,0 +1,17 @@
<#macro render>
<@page title="Obtenir une nouvelle planète">
<p>Des hordes de barbares à la bouche écumante ont envahi votre empire, massacrant vos femmes et violant votre bétail ?</p>
<p>Eh bien, n'ayez plus peur ! Vous pourrez recevoir une nouvelle planète flambant neuve.</p>
<p>Please note that doing this will disband your fleets.</p>
<@form action="get-planet" name="get-planet">
<#switch data.error!>
<#case "EMPTY"><@form_error>Veuillez sélectionner un nom de planète.</@form_error><#break>
<#case "INVALID"><@form_error>Nom de planète invalide.</@form_error><#break>
<#case "UNAVAILABLE"><@form_error>Ce nom de planète n'est pas disponible.</@form_error><#break>
<#case "BANNED"><@form_error>Ce nom de planète a été banni.</@form_error><#break>
</#switch>
<@form_text name="name" label="Nom de la nouvelle planète " value=data.name! />
<@form_submit label="Obtenir la planète" />
</@form>
</@page>
</#macro>

View file

@ -0,0 +1,16 @@
<#macro render><@page title="Serveur en cours de maintenance">
<@dt_main title="Le serveur est en cours de maintenance.">
<@dt_entry title="Début de la maintenance">${data.start?string("yyyy-MM-dd HH:mm")}</@dt_entry>
<@dt_entry title="Temps serveur actuel">${data.current?string("yyyy-MM-dd HH:mm")}</@dt_entry>
<@dt_entry title="Fin prévue de l'opération">
<#if data.late>
<span style="color: #ff0000;font-weight:bold">
</#if>
${data.end?string("yyyy-MM-dd HH:mm")}
<#if data.late>
</span>
</#if>
</@dt_entry>
<@dt_entry title="Raison">${data.reason?xhtml}</@dt_entry>
</@dt_main>
</@page></#macro>

View file

@ -0,0 +1,83 @@
<#macro render_system system tags>
<td class="map-system">
<#list system.planets as planet>
<#if tags>
<#if planet.tag?has_content>
<#assign vName = "[${planet.tag}]">
<#else>
<#assign vName = "N/A">
</#if>
<#else>
<#assign vName = planet.name>
</#if>
<#if planet.tag?has_content>
<#assign vTitle = " [${planet.tag}]" >
<#else>
<#assign vTitle = "" >
</#if>
<#if planet.relation?has_content>
<#switch planet.relation>
<#case "OWN">
<#assign lStyle = "class='own-planet'" >
<#break>
<#case "ALLIED">
<#assign lStyle = "class='allied-planet'" >
<#break>
<#case "ENEMY">
<#assign lStyle = "class='enemy-planet'" >
<#break>
</#switch>
<#elseif planet.tag?has_content>
<#assign lStyle = "class='other-planet'" >
<#else>
<#assign lStyle = "" >
</#if>
<div class="map-planet">
<img src="img/pp/s/${planet.picture}.png" alt="${planet.name?xhtml}${vTitle?xhtml}" />
<a href="planet-${planet.id}" ${lStyle} title="Voir la planète ${planet.name?xhtml}${vTitle?xhtml}">${vName?xhtml}</a>
</div>
</#list>
</td>
</#macro>
<#macro render_map size systems tags>
<table class="map map-${size}">
<#list systems as row>
<tr>
<#list row as system>
<#if system?has_content>
<@render_system system=system tags=tags />
<#else>
<td class="map-empty"><div>(inexploré)</div></td>
</#if>
</#list>
</tr>
</#list>
</table>
</#macro>
<#macro render>
<@page title="Carte">
<@lineform action="move-map">
Coordonnées : ( <@ff_text name="x" id="x" maxLength=4 size=5 value=data.x?string /> ;
<@ff_text name="y" id="y" maxLength=4 size=5 value=data.y?string /> )
Taille : <@ff_select id="sz" name="sz">
<#list data.sizes as size>
<@form_option text=size value=size_index selected=( size_index == data.sizeOrdinal ) />
</#list>
</@ff_select>
<@ff_submit label="Centrer la carte" />
</@lineform>
<@tabs>
<@tab id="names" title="Planètes">
<@render_map size=data.sizeOrdinal systems=data.systems tags=false />
</@tab>
<@tab id="alliances" title="Alliances">
<@render_map size=data.sizeOrdinal systems=data.systems tags=true />
</@tab>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,115 @@
<#macro render_navigation message inbox>
<#if inbox>
<#local link="inbox-message-">
<#else>
<#local link="outbox-message-">
</#if>
<table style="width:100%;margin: 2px 0">
<tr>
<td style="width: 30px;text-align: right">
<#if message.previous?has_content>
<a href="${link}${message.previous}">
</#if>
&lt;&lt;
<#if message.previous?has_content>
</a>
</#if>
</td>
<td style="text-align: center">
<#if inbox>
<a href="inbox-from-${message.id}">Messages reçus</a>
<#else>
<a href="outbox-from-${message.id}">Messages envoyés</a>
</#if>
</td>
<td style="width: 30px;text-align: left">
<#if message.next?has_content>
<a href="${link}${message.next}">
</#if>
&gt;&gt;
<#if message.next?has_content>
</a>
</#if>
</td>
</tr>
</table>
</#macro>
<#macro render>
<#if data.inbox>
<#local title="Messages reçus">
<#local timeTtl="Reçu le ">
<#else>
<#local title="Messages envoyés">
<#local timeTtl="Envoyé le ">
</#if>
<#switch data.message.type>
<#case 'INTERNAL'>
<#local mColor="#ffffaf">
<#break>
<#case 'ADMINISTRATOR'>
<#local mColor="#ffafaf">
<#break>
<#case 'ALLIANCE'>
<#local mColor="#afafff">
<#break>
<#case 'EMPIRE'>
<#local mColor="#afafaf">
<#break>
</#switch>
<@page title=title>
<@render_navigation message=data.message inbox=data.inbox />
<@dt_main>
<@dt_entry width=100 title="De ">
<#if data.inbox>
<span style="color:${mColor};font-weight:bold">
</#if>
${data.message.sender!}
<#if data.inbox>
</span>
</#if>
</@dt_entry>
<@dt_entry width=100 title="À ">
<#if !data.inbox>
<span style="color:${mColor};font-weight:bold">
</#if>
${data.message.receiver!}
<#if !data.inbox>
</span>
</#if>
</@dt_entry>
<@dt_entry width=100 title=timeTtl>
<@abbr_gt />: <@game_time record=data.message.gameTime /> / <@abbr_st />: ${data.message.time?string("yyyy-MM-dd HH:mm:ss")}
</@dt_entry>
<#if data.message.unread>
<@dt_entry width=100 title="">Nouveau!</@dt_entry>
</#if>
</@dt_main>
<@listview><@lv_line headers=true><th colspan="2" style="font-size:1px">&nbsp;</th></@lv_line></@listview>
<h3 style="margin:0;text-align:center;padding:0 0 10px 0">${data.message.title}</h3>
<div style="margin: 0 40px 20px 40px">
${data.message.contents}
</div>
<@listview><@lv_line headers=true><th colspan="2" style="font-size:1px">&nbsp;</th></@lv_line></@listview>
<@lineform action="message">
<input type="hidden" name="inbox" value="<#if data.inbox>1<#else>0</#if>" />
<input type="hidden" name="id" value="${data.message.id}" />
<#if data.message.previous?has_content>
<#local afterDelete = data.message.previous>
<#elseif data.message.next?has_content>
<#local afterDelete = data.message.next>
<#else>
<#local afterDelete = "x">
</#if>
<input type="hidden" name="next" value="${afterDelete}" />
<@ff_submit label="Supprimer le message" name="delete" />
<#if data.inbox && data.message.type != 'INTERNAL'>
<@ff_submit label="Écrire une réponse" name="reply" />
</#if>
</@lineform>
</@page>
</#macro>

View file

@ -0,0 +1,124 @@
<#include "messageTabs.ftl" />
<#macro render_navigation current total inbox>
<#if inbox>
<#local link="inbox-">
<#else>
<#local link="outbox-">
</#if>
<table style="width:100%;margin: 2px 0">
<tr>
<td style="width: 30px;text-align: right">
<#if current gt 0>
<a href="${link}${current - 1}">
</#if>
&lt;&lt;
<#if current gt 0>
</a>
</#if>
</td>
<td style="text-align: center">
<#if total gt 0>
Page ${current + 1} / ${total}
<#elseif inbox>
Aucun message reçu.
<#else>
Aucun message envoyé.
</#if>
</td>
<td style="width: 30px;text-align: left">
<#if current lt total - 1>
<a href="${link}${current + 1}">
</#if>
&gt;&gt;
<#if current lt total - 1>
</a>
</#if>
</td>
</tr>
</table>
</#macro>
<#macro render>
<#if data.inbox>
<#local title="Messages reçus">
<#local tab="inbox">
<#else>
<#local title="Messages envoyés">
<#local tab="outbox">
</#if>
<@page title=title>
<@messageTabs selected=tab />
<@render_navigation current=data.cPage total=data.pages inbox=data.inbox />
<#if data.messages?size gt 0>
<form action="messages.action" method="post">
<div style="display:none">
<input type="hidden" name="inbox" value="<#if data.inbox>1<#else>0</#if>" />
<input type="hidden" name="page" value="${data.cPage}" />
</div>
<@listview>
<@lv_line headers=true>
<@lv_column width=16 centered=true><span title="Cliquez ici pour inverser la sélection" id="message-box-selector">&nbsp;</span></@lv_column>
<@lv_column width="x">Sujet</@lv_column>
<@lv_column width=150 centered=true><#if data.inbox>De<#else>À</#if></@lv_column>
<@lv_column width=150 centered=true><#if data.inbox>Reçu le<#else>Envoyé le</#if></@lv_column>
</@lv_line>
<#list data.messages as message>
<#switch message.type>
<#case 'INTERNAL'>
<#local mType="int-msg">
<#break>
<#case 'ADMINISTRATOR'>
<#local mType="admin-msg">
<#break>
<#case 'ALLIANCE'>
<#local mType="alliance-msg">
<#break>
<#case 'EMPIRE'>
<#local mType="empire-msg">
<#break>
</#switch>
<#if ! message.read>
<#local mType = "${mType} unread-msg">
</#if>
<@lv_line class=mType>
<@lv_column centered=true>
<input type="checkbox" name="selection" value="${message.id}" class="input message-selection" />
</@lv_column>
<@lv_column><a href="<#if data.inbox>inbox<#else>outbox</#if>-message-${message.id}">${message.title}</a></@lv_column>
<@lv_column centered=true>${message.sender!}</@lv_column>
<@lv_column centered=true>${message.time?string("yyyy-MM-dd HH:mm:ss")}</@lv_column>
</@lv_line>
</#list>
</@listview>
<#if data.inbox>
<div class="form-container">
<@ff_select name="action" id="action">
<@form_option value="r">Marquer comme lus</@form_option>
<@form_option value="u">Marquer comme non lus</@form_option>
<@form_option value="d">Supprimer</@form_option>
</@ff_select>
<@ff_select name="target" id="target">
<@form_option value="0">les messages sélectionnés</@form_option>
<@form_option value="1">tous les messages</@form_option>
</@ff_select>
<@ff_submit label="Appliquer" />
</div>
<#else>
<div class="form-container">
<input type="hidden" name="action" value="d" />
Supprimer
<@ff_select name="target" id="target">
<@form_option value="0">les messages sélectionnés</@form_option>
<@form_option value="1">tous les messages</@form_option>
</@ff_select>
<@ff_submit label="Appliquer" />
</div>
</#if>
</form>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,11 @@
<#macro messageTab href title selected=false eClass="">
<a class="tab-button<#if selected> selected-tab</#if><#if eClass != ''> ${eClass}</#if>" href="${href}">${title}</a>
</#macro>
<#macro messageTabs selected>
<div class="tab-buttons">
<@messageTab href="messages" title="Reçus" selected=( selected = 'inbox' ) />
<@messageTab href="outbox" title="Envoyés" selected=( selected = 'outbox' ) />
<@messageTab href="compose-message" title="Écrire" selected=( selected = 'compose' ) />
<@messageTab href="chat" title="Disussion" eClass="open-chat-button" />
</div>
</#macro>

View file

@ -0,0 +1,62 @@
<#include "messageTabs.ftl" />
<#macro render>
<@page title="Destinataires">
<@messageTabs selected="compose" />
<@tabs>
<#if data.empires?size gt 0>
<@tab id="empires" title="Empires">
<table style="width:98%">
<#list data.empires as empire>
<#if empire_index % 3 == 0>
<tr><td style="text-align:center;width: 34%">
<#else>
<td style="text-align:center;width: 33%">
</#if>
<a style="margin: 5px 20px;padding: 4px" href="msg-empire-${empire.id}">${empire.name?xhtml}</a></td>
<#if empire_index % 3 == 2></tr></#if>
</#list>
<#if data.empires?size % 3 == 1>
<td>&nbsp;</td><td>&nbsp;</td></tr>
<#elseif data.empires?size % 3 == 2>
<td>&nbsp;</td></tr>
</#if>
</table>
</@tab>
</#if>
<#if data.alliances?size gt 0>
<@tab id="alliances" title="Alliances">
<@listview>
<#list data.alliances as alliance>
<@lv_line>
<td style="width: 100px; text-align:right"><a href="msg-alliance-${alliance.id}">[${alliance.tag?xhtml}]</a>&nbsp;&nbsp;</td>
<td>${alliance.name}</td>
</@lv_line>
</#list>
</@listview>
</@tab>
</#if>
<#if data.admins?size gt 0>
<@tab id="admins" title="Administrateurs">
<@listview>
<#list data.admins as admin>
<@lv_line>
<td style="width: 100px; text-align:right"><a href="msg-admin-${admin.id}">${admin.name?xhtml}</a>&nbsp;&nbsp;</td>
<td>
<#list admin.privileges as priv>
<abbr title="${priv.description?xhtml}">${priv}</abbr>
</#list>
</td>
</@lv_line>
<tr><td colspan="2">&nbsp;</td></tr>
</#list>
</@listview>
</@tab>
</#if>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,82 @@
<#include "messageTabs.ftl" />
<#macro render>
<#if data.replyTo?has_content>
<#local title="Répondre au message">
<#else>
<#local title="Écrire un nouveau message">
</#if>
<@page title=title>
<@messageTabs selected="compose" />
<div class="form-container">
<form action="send-message.action" method="post">
<#if data.replyTo?has_content>
<input name="rtInbox" type="hidden" value="<#if data.inbox>1<#else>0</#if>" />
<input name="rtId" type="hidden" value="${data.replyTo.id}" />
</#if>
<table>
<#if data.timingError>
<@form_error>Pas si vite ! Attendez quelques secondes avant d'essayer à nouveau.</@form_error>
</#if>
<#-- Message recipient -->
<#if data.targetError>
<@form_error>Destinataire du message non trouvé.</@form_error>
</#if>
<@form_select label="Type de destinataire " name="toType">
<@form_option value="EMPIRE" selected=( data.messageType = 'EMPIRE' )>Empire</@form_option>
<@form_option value="ALLIANCE" selected=( data.messageType = 'ALLIANCE' )>Alliance</@form_option>
<@form_option value="ADMINISTRATOR" selected=( data.messageType = 'ADMINISTRATOR' )>Administrateur</@form_option>
</@form_select>
<@form_text label="Nom du destinataire " name="toName" maxLength=48 value=data.target />
<#if (data.target == "")>
<tr><td>&nbsp;</td><td><a href="message-targets">Sélectionner depuis la liste...</a></td></tr>
</#if>
<#-- Subject -->
<#if data.titleError>
<@form_error>Le sujet est trop court (min.: 2 caractères)</@form_error>
</#if>
<@form_text label="Sujet " name="title" maxLength=64 value=data.title />
<#-- Body -->
<#if data.contentsError>
<@form_error>Le corps du message est trop court (min.: 2 caractères)</@form_error>
</#if>
<@form_text label="Corps du message " name="contents" value=data.contents multiline=true maxLength=10 />
<@form_extended_submit label="Envoyer le message">
<@ff_submit label="Annuler" name="cancel" />
</@form_extended_submit>
</table>
</form>
</div>
<#-- Original message -->
<#if data.replyTo?has_content>
<@listview><@lv_line headers=true><th colspan="2" style="font-size:1px">&nbsp;</th></@lv_line></@listview>
<@dt_main>
<@dt_entry width=100 title="">Message d'origine :</@dt_entry>
<@dt_entry width=100 title="De ">
${data.replyTo.sender!}
</@dt_entry>
<@dt_entry width=100 title="À ">
${data.replyTo.receiver!}
</@dt_entry>
<@dt_entry width=100 title="Reçu le ">
<@abbr_gt />: <@game_time record=data.replyTo.gameTime /> / <@abbr_st />: ${data.replyTo.time?string("yyyy-MM-dd HH:mm:ss")}
</@dt_entry>
</@dt_main>
<@listview><@lv_line headers=true><th colspan="2" style="font-size:1px">&nbsp;</th></@lv_line></@listview>
<h3 style="margin:0;text-align:center;padding:0 0 10px 0">${data.replyTo.title}</h3>
<div style="margin: 0 40px 20px 40px">
${data.replyTo.contents}
</div>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,9 @@
<#macro render><@page title="Serveur hors ligne">
<p>Le serveur du jeu n'a pas pu être contacté.</p>
<p>
Il peut être en cours de maintenance ou il a pu planter. Dans tous les cas, une alerte a été transmise à l'équipe d'administration.
</p>
<p>
Désolés pour les troubles occasionnés.
</p>
</@page></#macro>

View file

@ -0,0 +1,118 @@
<#macro render>
<@page title="Empire">
<#assign ov = data.overview >
<#assign rs = data.research >
<@tabs>
<@tab id="overview" title="Résumé">
<@left_column>
<#assign nplanets = data.page.planets?size>
<@dt_main title="Flottes &amp; Planètes">
<@dt_entry title="Nombre de planètes ">${nplanets?string(",##0")}</@dt_entry>
<@dt_entry title="Population totale ">${ov.population?string(",##0")}</@dt_entry>
<@dt_entry title="Satisfaction moyenne "><@happiness value=data.overview.avgHappiness /></@dt_entry>
<@dt_entry title="Puissance de flotte totale ">${ov.fleetPower?string(",##0")}</@dt_entry>
</@dt_main>
<@dt_main title="Batailles">
<#if data.battles?size gt 0>
<@dt_status>Nous sommes impliqués dans les batailles suivantes:</@dt_status>
<#list data.battles as battle>
<@dt_status><a href="battle-${battle.id}-latest">${battle.location.name?xhtml}</a>
(${battle.x},${battle.y};${battle.orbit})</@dt_status>
</#list>
<#else>
<@dt_status>Nous ne sommes impliqués dans aucune bataille.</@dt_status>
</#if>
<@dt_status>
<a href="battles">Toutes les batailles</a>
</@dt_status>
</@dt_main>
</@left_column>
<@right_column>
<@dt_main title="Finances">
<@dt_entry title="Réserves financières ">${data.page.cash?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Bénéfice planétaire ">${ov.planetIncome?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Charges planètaires ">${ov.planetUpkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Charges des flottes ">${ov.fleetUpkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Investissements ">${ov.investment?string(",##0")} <@abbr_bgc/></@dt_entry>
</@dt_main>
<@dt_main title="Messages">
<@dt_status>
<#if ov.newMessages == 0>
Aucun nouveau message.
<#elseif ov.newMessages == 1>
Vous avez <a href="messages">un nouveau message</a>.
<#else>
Vous avez <a href="messages">${ov.newMessages} nouveaux messages</a>.
</#if>
</@dt_status>
<@dt_status>
<a href="compose-message">Ecrire message</a>
</@dt_status>
</@dt_main>
</@right_column>
</@tab>
<@tab id="research" title="Recherche">
<#if rs?size == 0>
<p>Nos scientifiques sont encore en train de s'installer.</p>
</#if>
<#list rs as research>
<div>
<h3>${research.name?xhtml}</h3>
<p>${research.description?xhtml}</p>
<@left_column>
<#if research.implemented?size == 0>
<p>Aucune technologie utilisable.</p>
<#else>
<@dt_main>
<#list research.implemented as tech>
<@dt_status>
${tech.name?xhtml}
<div class="auto-hide">${tech.description?xhtml}</div>
</@dt_status>
</#list>
</@dt_main>
</#if>
</@left_column>
<#if research.current?has_content>
<@right_column>
<@dt_main>
<@dt_status>
Recherche actuelle : <strong>${research.current.name?xhtml}</strong>
<p>
${research.current.description?xhtml}
</p>
</@dt_status>
<@dt_entry title="Progression">${research.current.researched}%</@dt_entry>
<#if research.current.cost?has_content>
<@dt_entry title="Coût">${research.current.cost?string(",##0")} <@abbr_bgc/></@dt_entry>
<#if data.page.cash gte research.current.cost && data.page.special! != 'v'>
<@dt_status><form action="implement-${research.id}.action#research" method="post">
<div><@ff_submit label="Appliquer la technologie" /></div>
</form></@dt_status>
</#if>
</#if>
</@dt_main>
</@right_column>
</#if>
</div>
</#list>
</@tab>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,69 @@
<#macro render>
<@page title="Récupération de mot de passe">
<@tabs>
<@tab title="Demande de récupération de mot de passe" id="request-recovery">
<#if data.sent?has_content>
<p>Un e-mail vous a été envoyé à votre adresse, <strong>${data.mail?xhtml}</strong></p>
<p>Il contient un code d'authetification à usage unique que vous devez utiliser pour changer votre mot de passe.</p>
<p>Le code d'authentification va expirer dans une heure, et vous ne pourrez pas demander un autre code jusqu'à ce qu'il ait expiré.</p>
<#else>
<@form name="req-pwd-recovery" action="request-password-recovery">
<#switch data.status!>
<#case "INVALID_INPUT">
<@form_error>Adresse e-mail invalide.</@form_error>
<#break>
<#case "ACCOUNT_NOT_FOUND">
<@form_error>Adresse e-mail inconnue.</@form_error>
<#break>
<#case "ACCOUNT_STATUS">
<@form_error>L'état du compte ne permet pas la récupération de mot de passe.</@form_error>
<#break>
<#case "RECOVERY_IN_PROGRESS">
<@form_error>Une demande de récupération de mot de passe a été fait au cours de la dernière heure.</@form_error>
<#break>
<#case "MAIL_ERROR">
<@form_error>Incapable d'envoyer un e-mail.</@form_error>
<#break>
</#switch>
<@form_text label="Adresse e-mail" name="mail" id="req-mail" value=data.mail! maxLength=128 />
<@form_submit label="Demander la récupération de mot de passe" extraClass="" />
</@form>
</#if>
</@tab>
<@tab id="confirm-recovery" title="Confirmer la récupération de mot de passe">
<@form name="conf-pwd-recovery" action="confirm-password-recovery" hash="confirm-recovery">
<#switch data.cStatus!>
<#case "INVALID_MAIL">
<@form_error>Adresse e-mail invalide.</@form_error>
<#break>
<#case "NOT_FOUND">
<@form_error>Code ou adresse e-mail inconnu.</@form_error>
<#break>
<#case "ACCOUNT_STATUS">
<@form_error>L'état du compte ne permet pas la récupération de mot de passe.</@form_error>
<#break>
<#case "WEAK_PASSWORD">
<@form_error>Nouveau mot de passe trop faible.</@form_error>
<#break>
<#case "MISMATCH_PASSWORD">
<@form_error>Le mot de passe et sa confirmation ne sont pas identiques.</@form_error>
<#break>
<#case "PROHIBITED">
<@form_error>Vous ne pouvez pas utiliser ce mot de passe.</@form_error>
<#break>
</#switch>
<@form_text label="Adresse e-mail" name="mail" id="conf-mail" value=data.cMail! maxLength=128 />
<@form_text label="Code de confirmation" name="code" id="conf-code" value=data.cCode! maxLength=64 />
<@form_pwd label="Nouveau mot de passe" name="password" id="conf-pwd1" />
<@form_pwd label="Confirmation du nouveau mot de passe" name="passwordConfirm" id="conf-pwd2" />
<@form_submit label="Définir le nouveau mot de passe" />
</@form>
</@tab>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,329 @@
<#macro render>
<#if ! data.basic?has_content>
<@page title="Planète non trouvée">
<p>Cette planète n'existe pas.</p>
</@page>
<#return>
</#if>
<@page title="Planète ${data.basic.name}">
<#if data.ownershipError>
<@standalone_error>Malheureusement, nous ne controllons plus cette planète.</@standalone_error>
</#if>
<@tabs>
<@tab id="general" title="Général">
<div>
<div style="float:right; padding: 3px">
<img src="img/pp/l/${data.basic.picture}.png" style="border: 1px solid white" alt="${data.basic.name?xhtml}" />
</div>
<@left_column width=250>
<@dt_main>
<@dt_entry title="Coordonnées ">(<strong>${data.basic.x},${data.basic.y}</strong>;<strong>${data.basic.orbit}</strong>)</@dt_entry>
<#if data.basic.alliance?has_content>
<@dt_entry title="Alliance "><strong>${data.basic.alliance}</strong></@dt_entry>
<#else>
<@dt_blank />
</#if>
<#if data.orbit?has_content>
<@dt_entry title="Population "><strong>${data.orbit.population?string(",##0")}</strong></@dt_entry>
<@dt_entry title="Défense statique "><strong>${data.orbit.defencePoints?string(",##0")}</strong></@dt_entry>
</#if>
<#if data.own?has_content>
<@dt_entry title="Satisfaction "><@happiness value=data.own.happiness /> <@happiness_change value=data.own.hChange /></@dt_entry>
<@dt_entry title="Bénéfice "><strong>${data.own.income?string(",##0")}</strong> <@abbr_bgc/></@dt_entry>
<@dt_entry title="Charges "><strong>${data.own.upkeep?string(",##0")}</strong> <@abbr_bgc/></@dt_entry>
</#if>
</@dt_main>
</@left_column>
<@right_column width=250>
<#if data.orbit?has_content>
<@dt_main>
<#if data.orbit.ownFleet gt 0>
<@dt_entry title="Puissance de flotte propre "><span style="color: #afffaf">${data.orbit.ownFleet?string(",##0")}</span></@dt_entry>
<#else>
<@dt_blank />
</#if>
<#if data.orbit.friendlyFleet gt 0>
<@dt_entry title="Puissance de flotte alliée "><span style="color: #afafff">${data.orbit.friendlyFleet?string(",##0")}</span></@dt_entry>
<#else>
<@dt_blank />
</#if>
<#if data.orbit.hostileFleet gt 0>
<@dt_entry title="Puissance de flotte hostile"><span style="color: #ffafaf">${data.orbit.hostileFleet?string(",##0")}</span></@dt_entry>
<#else>
<@dt_blank />
</#if>
<#if data.orbit.battle?has_content>
<@dt_entry title=""><a href="battle-${data.orbit.battle}-latest">Voir la bataille</a></@dt_entry>
<#else>
<@dt_blank />
</#if>
<@dt_blank /><@dt_blank /><@dt_blank /><@dt_blank /><@dt_blank />
</@dt_main>
</#if>
</@right_column>
</div>
<#if data.own?has_content>
<#if data.own.status.renamePossible && data.page.special! != 'v'>
<#switch data.renameError!>
<#case "EMPTY"><@standalone_error>Veuillez spécifier un nom.</@standalone_error><#break>
<#case "INVALID"><@standalone_error>Nom de planète invalide.</@standalone_error><#break>
<#case "UNAVAILABLE"><@standalone_error>Ce nom de planète existe déjà.</@standalone_error><#break>
<#case "BANNED"><@standalone_error>Ce nom a été banni.</@standalone_error><#break>
</#switch>
<@lineform action="planet-${data.id}-rename" name="rename" hash="general">
<#if data.renamingTo?has_content>
<#assign newName = data.renamingTo!>
</#if>
Renommer la planète en <@ff_text name="name" id="rename-name" maxLength=20 size=21 value=newName! />
<@ff_submit label="Renommer la planète" />
</@lineform>
</#if>
<#if data.own.status.abandonPossible && data.page.special! != 'v'>
<@lineform action="planet-${data.id}-abandon" name="abandon" hash="general">
<@ff_submit label="Abandonner la planète" />
</@lineform>
<#elseif data.own.status.abandonTime gt 0>
<@lineform action="planet-${data.id}-cancel-abandon" name="abandon" hash="general">
Abandon de la planète dans <strong><@duration rTime=data.own.status.abandonTime gTime=data.own.status.abandonGameTime /></strong>
&nbsp;
<#if data.page.special! != 'v'>
<@ff_submit label="Annuler" />
</#if>
</@lineform>
</#if>
</#if>
</@tab>
<#if data.orbit?has_content>
<#if data.orbit.buildings?size gt 0 || data.own?has_content>
<@tab id="buildings" title="Bâtiments">
<#if data.orbit.buildings?size gt 0>
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Bâtiment</@lv_column>
<@lv_column width=50 centered=true>Nombre</@lv_column>
<#if data.own?has_content>
<@lv_column width=150 centered=true>Production</@lv_column>
<@lv_column width=50 centered=true>Emplois</@lv_column>
<@lv_column width=100 centered=true>Charges</@lv_column>
</#if>
</@lv_line>
<#list data.orbit.buildings as building>
<@lv_line>
<@lv_column>
${building.name?xhtml}
<#if data.own?has_content>
<div class="auto-hide">${building.description?xhtml}</div>
</#if>
</@lv_column>
<@lv_column centered=true>${building.amount?string(",##0")}</@lv_column>
<#if data.own?has_content>
<@lv_column centered=true>
${building.output?string(",##0")}
<#switch building.produces>
<#case "CASH">production ind.<#break>
<#case "DEF">défense<#break>
<#case "WORK">production mil.<#break>
<#case "POP">croissance<#break>
</#switch>
</@lv_column>
<@lv_column centered=true>${building.jobs?string(",##0")}</@lv_column>
<@lv_column centered=true>${building.upkeep?string(",##0")} <@abbr_bgc/></@lv_column>
</#if>
</@lv_line>
</#list>
</@listview>
<#else>
<@dt_main><@dt_status>Aucun bâtiment sur cette planète.</@dt_status></@dt_main>
</#if>
<#if data.own?has_content>
<#if data.page.special! != 'v'>
<#if data.own.civQueue.appendPossible>
<@lineform name="build-civ" action="planet-${data.id}-build-civ" hash="buildings">
Construire <@ff_text name="amount" id="civ-build-amount" size=5 maxLength=4 value="" />
<@ff_select name="type" id="civ-build-type">
<@form_option value="0" text="(type de bâtiment)" />
<#list data.own.bBuildings as building>
<@form_option value=building.id text=building.name />
</#list>
</@ff_select>
<@ff_submit label="Ajouter à la liste" />
</@lineform>
<div id="buildings-types">
<#list data.own.bBuildings as building>
<div class="building-type" id="building-type-${building.id}">
<@dt_main>
<@dt_status>${building.description?xhtml}</@dt_status>
<@dt_entry title="Coût ">${building.cost?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Charges ">${building.upkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Temps de construction ">
<#if building.time?has_content>
<@duration rTime=building.time gTime=building.gameTime />
<#else>
<span style="color:#ffafaf;font-weight:bold" title="N'essayez même pas.">N/A</span>
</#if>
</@dt_entry>
<@dt_entry title="Emplois ">${building.workers?string(",##0")}</@dt_entry>
<@dt_entry title="Production ">${building.output?string(",##0")}
<#switch building.prodType>
<#case "CASH">production ind.<#break>
<#case "DEF">défense<#break>
<#case "WORK">production mil.<#break>
<#case "POP">croissance<#break>
</#switch>
</@dt_entry>
</@dt_main>
</div>
</#list>
</div>
<#if data.orbit.buildings?size gt 0>
<#if data.destructionFailed!false>
<@standalone_error>Tentative de destruction d'un trop grand nombre de bâtiments</@standalone_error>
</#if>
<@lineform name="destroy" action="planet-${data.id}-destroy" hash="buildings">
Détruire <@ff_text name="amount" id="civ-destroy-amount" size=5 maxLength=4 value="" />
<@ff_select name="type" id="civ-destroy-type">
<@form_option value="0" text="(type de bâtiment)" />
<#list data.orbit.buildings as building>
<@form_option value=building.id text=building.name />
</#list>
</@ff_select>
<@ff_submit label="Ajouter à la liste" />
</@lineform>
</#if>
</#if>
</#if>
<#if data.own.civQueue.items?size gt 0>
<#if data.page.special! != 'v'>
<@lineform name="flush-civ-queue" action="planet-${data.id}-flush-civ" hash="buildings">
Retirer tous les éléments de la liste de construction (les investissements seront perdus)
<@ff_submit label="Vider" />
</@lineform>
</#if>
<@listview>
<@lv_line headers=true>
<@lv_column width=80 centered=true>Nombre</@lv_column>
<@lv_column width="x">Nature</@lv_column>
<@lv_column width=200 centered=true>Temps</@lv_column>
<@lv_column width=70 centered=true>Investissement</@lv_column>
</@lv_line>
<#list data.own.civQueue.items as qItem>
<@lv_line>
<@lv_column centered=true>${qItem.amount?string(",##0")}</@lv_column>
<@lv_column>${qItem.name} <#if qItem.destroy>(destruction)<#else>(construction)</#if></@lv_column>
<@lv_column centered=true>
<#if qItem.timeLeft?has_content>
<@duration rTime=qItem.timeLeft gTime=qItem.gameTimeLeft />
<#else>
<span style="color:#ffafaf;font-weight:bold" title="L'espèce humaine se sera éteinte depuis bien longtemps quand cette construction sera terminée...">N/A</span>
</#if>
</@lv_column>
<@lv_column centered=true>${qItem.invested?string(",##0")} <@abbr_bgc/></@lv_column>
</@lv_line>
</#list>
</@listview>
</#if>
</#if>
</@tab>
</#if>
<#if data.own?has_content>
<@tab id="ships" title="Chantiers navals">
<#if data.page.special! != 'v'>
<#if data.own.milQueue.appendPossible>
<@lineform name="build-mil" action="planet-${data.id}-build-mil" hash="ships">
Construire <@ff_text name="amount" id="mil-build-amount" size=5 maxLength=4 value="" />
<@ff_select name="type" id="mil-build-type">
<@form_option value="0" text="(type de vaisseau)" />
<#list data.own.bShips as ship>
<@form_option value=ship.id text=ship.name />
</#list>
</@ff_select>
<@ff_submit label="Ajouter à la liste" />
</@lineform>
<div id="ships-types">
<#list data.own.bShips as ship>
<div class="ship-type" id="ship-type-${ship.id}">
<@dt_main>
<@dt_status>${ship.description?xhtml}</@dt_status>
<@dt_entry title="Coût ">${ship.cost?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Charges ">${ship.upkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
<@dt_entry title="Temps de Construction ">
<#if ship.time?has_content>
<@duration rTime=ship.time gTime=ship.gameTime />
<#else>
<span style="color:#ffafaf;font-weight:bold" title="N'essayez même pas.">N/A</span>
</#if>
</@dt_entry>
<@dt_entry title="Puissance ">${ship.power?string(",##0")}</@dt_entry>
<@dt_entry abbr="TVOO " title="Temps de vol orbite-à-orbite">
<@duration rTime=ship.flightTime gTime=ship.gameFlightTime />
</@dt_entry>
</@dt_main>
</div>
</#list>
</div>
</#if>
</#if>
<#if data.own.milQueue.items?size gt 0>
<#if data.page.special! != 'v'>
<@lineform name="flush-mil-queue" action="planet-${data.id}-flush-mil" hash="ships">
Retirer tous les éléments de la liste de construction (les investissements seront perdus)
<@ff_submit label="Vider" />
</@lineform>
</#if>
<@listview>
<@lv_line headers=true>
<@lv_column width=80 centered=true>Nombre</@lv_column>
<@lv_column width="x">Vaisseau</@lv_column>
<@lv_column width=200 centered=true>Temps</@lv_column>
<@lv_column width=70 centered=true>Investissement</@lv_column>
</@lv_line>
<#list data.own.milQueue.items as qItem>
<@lv_line>
<@lv_column centered=true>${qItem.amount?string(",##0")}</@lv_column>
<@lv_column>${qItem.name}</@lv_column>
<@lv_column centered=true>
<#if qItem.timeLeft?has_content>
<@duration rTime=qItem.timeLeft gTime=qItem.gameTimeLeft />
<#else>
<span style="color:#ffafaf;font-weight:bold" title="L'espèce humaine se sera éteinte depuis bien longtemps quand cette construction sera terminée...">N/A</span>
</#if>
</@lv_column>
<@lv_column centered=true>${qItem.invested?string(",##0")} <@abbr_bgc/></@lv_column>
</@lv_line>
</#list>
</@listview>
</#if>
</@tab>
</#if>
</#if>
</@tabs>
</@page>
</#macro>

View file

@ -0,0 +1,167 @@
<#macro render>
<@page title="Planètes">
<#assign pl = data.planets>
<#if pl?size == 0>
<p>Nous ne possédons plus aucune planète.</p>
<p><a href="get-planet">Obtenir une nouvelle planète ?</a></p>
<#else>
<@tabs>
<@tab id="general" title="Général">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=90 centered=true>Coordonnées</@lv_column>
<@lv_column width=90 centered=true>Satisfaction</@lv_column>
<@lv_column width=90 right=true>Population</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column><a href="planet-${planet.id}">${planet.name?xhtml}</a></@lv_column>
<@lv_column centered=true>(${planet.x},${planet.y};${planet.orbit})</@lv_column>
<@lv_column centered=true><@happiness value=planet.happiness /></@lv_column>
<@lv_column right=true>${planet.population?string(",##0")}</@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
<@tab id="eco" title="Économie">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=110 right=true>Bénéfice</@lv_column>
<@lv_column width=110 right=true>Charges</@lv_column>
<@lv_column width=110 right=true>Revenu</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column><a href="planet-${planet.id}">${planet.name?xhtml}</a></@lv_column>
<@lv_column right=true>${planet.income?string(",##0")} <@abbr_bgc /></@lv_column>
<@lv_column right=true>${planet.upkeep?string(",##0")} <@abbr_bgc /></@lv_column>
<@lv_column right=true>
<#if planet.upkeep gt planet.income>
<span style="color: red">
</#if>
${( planet.income - planet.upkeep )?string(",##0")} <@abbr_bgc />
<#if planet.upkeep gt planet.income>
</span>
</#if>
</@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
<@tab id="prod" title="Production">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=90 right=true>Militaire</@lv_column>
<@lv_column width=90 right=true>Industriel</@lv_column>
<@lv_column width=120 right=true>Aug. Croissance</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column><a href="planet-${planet.id}#buildings">${planet.name?xhtml}</a></@lv_column>
<@lv_column right=true>${planet.militaryProduction?string(",##0")}</@lv_column>
<@lv_column right=true>${planet.industrialProduction?string(",##0")}</@lv_column>
<@lv_column right=true>${planet.growthProduction?string(",##0")}</@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
<@tab id="cons" title="Construction">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=200 centered=true>Item actuellement produit</@lv_column>
<@lv_column width=90 right=true>Investissement</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column><a href="planet-${planet.id}#buildings">${planet.name?xhtml}</a></@lv_column>
<@lv_column centered=true>
<#if planet.civAmount = 0>
<em>N/A</em>
<#else>
<strong>${planet.civAmount?string(",##0")}</strong>x
${planet.civName?xhtml}
<#if planet.civDestroy>
(destruction)
<#else>
(construction)
</#if>
</#if>
</@lv_column>
<@lv_column right=true>${planet.civInvestment?string(",##0")} <@abbr_bgc /></@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
<@tab id="ships" title="Chantiers navals">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=200 centered=true>Item actuellement produit</@lv_column>
<@lv_column width=90 right=true>Investissement</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column><a href="planet-${planet.id}#ships">${planet.name?xhtml}</a></@lv_column>
<@lv_column centered=true>
<#if planet.milAmount = 0>
<em>N/A</em>
<#else>
<strong>${planet.milAmount?string(",##0")}</strong>x
${planet.milName?xhtml}
</#if>
</@lv_column>
<@lv_column right=true>${planet.milInvestment?string(",##0")} <@abbr_bgc /></@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
<@tab id="mil" title="Militaire">
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Nom</@lv_column>
<@lv_column width=90 right=true>Stationnaire</@lv_column>
<@lv_column width=110 right=true>Flottes propres</@lv_column>
<@lv_column width=90 right=true>Alliées</@lv_column>
<@lv_column width=90 right=true>Hostiles</@lv_column>
</@lv_line>
<#list pl as planet>
<@lv_line>
<@lv_column>
<#if planet.battle?has_content>
<a href="battle-${planet.battle}-latest"><span style="color:red">
</#if>
${planet.name?xhtml}
<#if planet.battle?has_content>
</span></a>
</#if>
</@lv_column>
<@lv_column right=true><span class="own-fleet">${planet.fpStatic?string(",##0")}</span></@lv_column>
<@lv_column right=true><span class="own-fleet">${planet.fpOwn?string(",##0")}</span></@lv_column>
<@lv_column right=true><span class="allied-fleet">${planet.fpFriendly?string(",##0")}</span></@lv_column>
<@lv_column right=true><span class="enemy-fleet">${planet.fpHostile?string(",##0")}</span></@lv_column>
</@lv_line>
</#list>
</@listview>
</@tab>
</@tabs>
</#if>
</@page>
</#macro>

View file

@ -0,0 +1,24 @@
<#macro render>
<#if data.success>
<@page title="réactivation de compte">
<p>
Votre compte a été réactivé avec succès. Le conde de confirmation a été envoyé à <strong>${data.address}</strong>.
</p>
<p>
Une fois que vous avez reçu cet e-mail, veuillez aller sur la <a href="validate-account">page de confirmation</a>.
</p>
</@page>
<#else>
<@page title="Erreur de réactivation de compte">
<p>
Une erreur a eu lieu lors de l'envoi d'un e-mail à votre adresse, <strong>${data.address}</strong>.
</p>
<p>
Si votre adresse est toujours valide, vous pouvez envisager d'attendre un peu et d'<a href="reactivate.action">essayer à nouveau</a>.
</p>
<p>
Ou le serveur est peut-être sous acide, auquel cas vous devriez informer <a href="mailto:staff@legacyworlds.com">l'équipe d'administration</a>.
</p>
</@page>
</#if>
</#macro>

View file

@ -0,0 +1,56 @@
<#macro render>
<@page title="Enregistrement">
<@form name="register" action="register">
<#switch data.mailError!"">
<#case "EMPTY">
<@form_error>Adresse e-mail vide.</@form_error>
<#break>
<#case "INVALID">
<@form_error>Adresse e-mail invalide.</@form_error>
<#break>
<#case "IN_USE">
<@form_error>Cette adresse e-mail est déjà associée à un compte.</@form_error>
<#break>
<#case "SEND_FAIL">
<@form_error>Impossible d'envoyer le code de confirmation à cette adresse.</@form_error>
<#break>
<#case "MISMATCH">
<@form_error>L'adresse e-mail et sa confirmation ne sont pas identiques.</@form_error>
<#break>
<#default>
<@form_extra>L'adresse e-mail <em>DOIT</em> exister.</@form_extra>
</#switch>
<@form_text label="Adresse e-mail" maxLength=128 name="mail" value=data.mail! />
<@form_text label="Adresse e-mail (confirmation)" maxLength=128 name="mailConfirm" value=data.mail! />
<#switch data.passwordError!"">
<#case "EMPTY">
<@form_error>Mot de passe vide.</@form_error>
<#break>
<#case "TOO_WEAK">
<@form_error>Cet mot de passe est trop faible.</@form_error>
<#break>
<#case "MISMATCH">
<@form_error>Le mot de passe et sa confirmation ne sont pas identiques.</@form_error>
<#break>
<#default>
<@form_extra>Au moins 6 catactères, contenant à la fois des lettres et des chiffres. Points bonus pour les caractères spéciaux, les espaces et les mots de passe extrèmement longs.</@form_extra>
</#switch>
<@form_pwd label="Mot de passe" name="password" />
<@form_pwd label="Mot de passe (confirmation)" name="passwordConfirm" />
<@form_select name="language" label="Langue">
<#if dataType == "ListLanguagesResponse">
<#assign lList = data.languages>
<#else>
<#assign lList = data.supportedLanguages.languages>
</#if>
<#list lList as lang>
<@form_option text=lang.name value=lang.id selected=(lang.id == language) />
</#list>
</@form_select>
<@form_submit label="S'enregistrer" />
</@form>
</@page>
</#macro>

View file

@ -0,0 +1,13 @@
<#macro render>
<@page title="Compte créé">
<p>
Votre compte a été créé avec succès.
</p>
<p>
Un e-mail contenant son code de confirmation a été envoyé à votre adresse, <strong>${data.mail?xhtml}</strong>.
</p>
<p>
Une fois que vous l'aurez reçu, vous serez en mesure de vous connecter et de confirmer votre compte.
</p>
</@page>
</#macro>

View file

@ -0,0 +1,40 @@
<#macro render>
<@page title="Diviser la flotte">
<form action="split-fleet.action" method="post">
<div>
<input type="hidden" name="fleet" value="${data.initialFleet.id}" />
<#if data.shipsError>
<@standalone_error>Nombre de vaisseaux ou de flottes résultantes invalides</@standalone_error>
</#if>
<@listview>
<@lv_line headers=true>
<@lv_column width="x">Type de vaisseaux</@lv_column>
<@lv_column width=150>Nombre initial</@lv_column>
<@lv_column width=150>Nombre dans la nouvelle flotte</@lv_column>
</@lv_line>
<#list data.ships as ships>
<@lv_line headers>
<@lv_column>${ships.name}</@lv_column>
<@lv_column>${ships.amount?string(",##0")}</@lv_column>
<@lv_column>
<@ff_text name="ships_${ships.id}" id="ships-${ships.id}" value=ships.selectedAmount />
</@lv_column>
</@lv_line>
</#list>
</@listview>
<#if data.nameError>
<@standalone_error>Nom de flotte invalide.</@standalone_error>
</#if>
<p>
Créer
<@ff_text name="nFleets" id="n-fleets" value=data.nFleets size=3 maxLength=2 />
nouvelle(s) flotte(s) nommée(s)
<@ff_text name="name" id="name" value=data.name size=20 maxLength=40 />
&nbsp;
<@ff_submit label="Ok" />
<@ff_submit label="Annuler" name="cancel" />
</p>
</div>
</form>
</@page>
</#macro>

View file

@ -0,0 +1 @@
<#macro render><#if dataType == "HashMap"><#include "../static/${data.name}.ftl" /><#else><#include "../static/${data}.ftl" /></#if></#macro>

View file

@ -0,0 +1,50 @@
<#macro render>
<@page title="Validation de compte">
<@form action="validation" name="validation">
<@form_extra>
Avant d'aller plus loin, vous devez valider votre compte en utilisant le code de confirmation qui vous a été envoyé par e-mail.<br/>
Vous pouvez aussi choisir le nom de votre empire et de votre première planète.
</@form_extra>
<#if data.wrongToken>
<@form_error>Code ds confirmation incorrect.</@form_error>
</#if>
<@form_text label="Code de confirmation" value=data.token! name="token" maxLength=64 />
<#switch data.empireError!>
<#case "EMPTY"><@form_error>Veuillez choisir un nom d'empire.</@form_error><#break>
<#case "INVALID"><@form_error>Nom d'empire invalide.</@form_error><#break>
<#case "UNAVAILABLE"><@form_error>Ce nom d'empire n'est pas disponible.</@form_error><#break>
<#case "BANNED"><@form_error>Ce nom d'empire a été banni.</@form_error><#break>
</#switch>
<#if data.previousEmpires?size == 0>
<@form_text label="Nom d'empire" value=data.empire! name="empire" maxLength=20 />
<tr style="display:none"><td colspan="2"><input type="hidden" name="old" value="" /></td></tr>
<#else>
<@form_select name="old" label="Réutiliser un nom d'empire">
<#list data.previousEmpires as oldName>
<@form_option text=oldName selected=( oldName == data.empire! ) />
</#list>
</@form_select>
<@form_extra>Laissez ce champ vide si vous voulez réutiliser un ancien nom d'empire.</@form_extra>
<#if ! data.previousEmpires?seq_contains(data.empire!)>
<#assign empValue = data.empire!>
</#if>
<@form_text name="empire" label="Nouveau nom d'empire" value=empValue! maxLength=20 />
</#if>
<#switch data.planetError!>
<#case "EMPTY"><@form_error>Veuillez choisir un nom de planète.</@form_error><#break>
<#case "INVALID"><@form_error>Nom de planète invalide.</@form_error><#break>
<#case "UNAVAILABLE"><@form_error>Ce nom de planète n'est pas disponible.</@form_error><#break>
<#case "BANNED"><@form_error>Ce nom de planète a été banni.</@form_error><#break>
</#switch>
<@form_text name="planet" label="Nom de planète" value=data.planet! maxLength=20 />
<@form_submit label="Entrer dans le jeu" />
</@form>
</@page>
</#macro>