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:
parent
c74e30d5ba
commit
0665a760de
1439 changed files with 1020 additions and 1649 deletions
legacyworlds-web-main/Content
Filtered/fm
Raw
META-INF
WEB-INF/fm
ROOT.ftl
en
containers
game.ftlstatic
home.ftlloggedOut.ftlloginFailed.ftlnoSession.ftlpasswordRecoveryOk.ftlreactivate.ftlrules.ftlscope.ftl
types
account.ftlalliance.ftlbanned.ftlbattle.ftlbattles.ftlbugsList.ftlbugsReport.ftlbugsTabs.ftlbugsView.ftlchat.ftlenemies.ftlfleets.ftlfleetsCommand.ftlgetNewPlanet.ftlmaintenance.ftlmap.ftlmessage.ftlmessageBox.ftlmessageTabs.ftlmessageTargets.ftlmessageWriter.ftloffline.ftloverview.ftlpasswordRecovery.ftlplanet.ftlplanets.ftlreactivation.ftlregister.ftlregistered.ftlsplitFleet.ftlstatic.ftlvalidation.ftl
fr
containers
game.ftlstatic
home.ftlloggedOut.ftlloginFailed.ftlnoSession.ftlpasswordRecoveryOk.ftlreactivate.ftlrules.ftlscope.ftl
types
account.ftlalliance.ftlbanned.ftlbattle.ftlbattles.ftlbugsList.ftlbugsReport.ftlbugsTabs.ftlbugsView.ftlchat.ftlenemies.ftlfleets.ftlfleetsCommand.ftlgetNewPlanet.ftlmaintenance.ftlmap.ftlmessage.ftlmessageBox.ftlmessageTabs.ftlmessageTargets.ftlmessageWriter.ftloffline.ftloverview.ftlpasswordRecovery.ftlplanet.ftlplanets.ftlreactivation.ftlregister.ftlregistered.ftlsplitFleet.ftlstatic.ftlvalidation.ftl
layout
2
legacyworlds-web-main/Content/Filtered/fm/version.ftl
Normal file
2
legacyworlds-web-main/Content/Filtered/fm/version.ftl
Normal file
|
@ -0,0 +1,2 @@
|
|||
<#macro version>${legacyworlds.version.string}</#macro>
|
||||
<#macro full_version>Beta 6 ${legacyworlds.version.string} (${legacyworlds.version.main}.${legacyworlds.version.release} b${legacyworlds.version.build})</#macro>
|
3
legacyworlds-web-main/Content/Raw/META-INF/MANIFEST.MF
Normal file
3
legacyworlds-web-main/Content/Raw/META-INF/MANIFEST.MF
Normal file
|
@ -0,0 +1,3 @@
|
|||
Manifest-Version: 1.0
|
||||
Class-Path:
|
||||
|
13
legacyworlds-web-main/Content/Raw/WEB-INF/fm/ROOT.ftl
Normal file
13
legacyworlds-web-main/Content/Raw/WEB-INF/fm/ROOT.ftl
Normal file
|
@ -0,0 +1,13 @@
|
|||
<#setting url_escaping_charset='UTF-8'>
|
||||
<#setting number_format='computer'>
|
||||
<#include "/version.ftl">
|
||||
<#include "/layout/columns.ftl">
|
||||
<#include "/layout/datatable.ftl">
|
||||
<#include "/layout/fields.ftl">
|
||||
<#include "/layout/form.ftl">
|
||||
<#include "/layout/happiness.ftl">
|
||||
<#include "/layout/lists.ftl">
|
||||
<#include "/layout/tabs.ftl">
|
||||
<#include "${language}/containers/${container}.ftl" />
|
||||
<#include "${language}/types/${type}.ftl" />
|
||||
<@render />
|
|
@ -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>
|
|
@ -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="Legacy Worlds home page"><span>Legacy Worlds Beta 6 <@version/></span></a>
|
||||
<div id="version">current version: <@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>
|
||||
E-mail address: <input type="text" name="mail" value="" size="15" maxlength="128" class='input' /><br/>
|
||||
Password: <input type="password" name="password" value='' size="15" maxlength="128" class='input' /><br/>
|
||||
<a title="Recover password" href="password-recovery">Forgot your password?</a>
|
||||
<input type="submit" value='Log in' class='input' />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Menu -->
|
||||
<a class="mbutton" id="b0" href="scope" title="Scope of this milestone">Scope</a>
|
||||
<a class="mbutton" id="b1" href="rules" title="Game rules">Rules</a>
|
||||
<a class="mbutton" id="b2" href="register" title="Register">Register</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>
|
|
@ -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="Overview page"><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>
|
||||
<p> </p>
|
||||
<#if !hidePlanets>
|
||||
<#if data.page.planets?size == 0>
|
||||
<p id="get-new-planet"><a href="get-planet">Get new planet</a></p>
|
||||
<#else>
|
||||
<p id="jump-to-planet"><span class="jtp-text">Jump to planet</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'>ON VACATION<#break>
|
||||
<#case 's'>ENTERING VACATION<#break>
|
||||
<#case 'q'>QUITTING<#break>
|
||||
</#switch>
|
||||
</span>
|
||||
</#if>
|
||||
<br/>
|
||||
<a href="account">Account</a> - <a href="logout.action">Log out</a>
|
||||
</div>
|
||||
|
||||
<a class="mbutton" id="b0" href="planets" title="Planets">Planets</a>
|
||||
<a class="mbutton" id="b1" href="fleets" title="Fleets">Fleets</a>
|
||||
<a class="mbutton" id="b2" href="map" title="Map of the universe">Map</a>
|
||||
<a class="mbutton" id="b3" href="alliance" title="Alliance">Alliance</a>
|
||||
<a class="mbutton" id="b4" href="enemies" title="Manage enemy players and alliances">Enemy list</a>
|
||||
<a class="mbutton" id="b5" href="messages" title="Messages">Messages</a>
|
||||
<a class="mbutton" id="b6" href="bugtrack" title="Bug tracking application">Bug tracker</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>
|
|
@ -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="Legacy Worlds home page"><span>Legacy Worlds Beta 6 <@version/></span></a>
|
||||
<div id="version">current version: <@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>
|
|
@ -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="Legacy Worlds home page"><span>Legacy Worlds Beta 6 <@version/></span></a>
|
||||
<div id="version">current version: <@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">Log out</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>
|
66
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/game.ftl
Normal file
66
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/game.ftl
Normal file
|
@ -0,0 +1,66 @@
|
|||
<#macro game_time record>
|
||||
<#if record.years == 1>
|
||||
1 year,
|
||||
<#elseif record.years gt 1 >
|
||||
${record.years?string(",##0")} years,
|
||||
</#if>
|
||||
<#if record.weeks == 1>
|
||||
1 week,
|
||||
<#elseif record.weeks gt 1 >
|
||||
${record.weeks?string} weeks,
|
||||
</#if>
|
||||
<#if record.days == 1>
|
||||
1 day
|
||||
<#elseif record.days gt 1 >
|
||||
${record.days?string} days,
|
||||
<#else>
|
||||
first day,
|
||||
</#if>
|
||||
${record.hours?string("00")}:00
|
||||
</#macro>
|
||||
<#macro game_duration record>
|
||||
<#if record.years == 1>
|
||||
1 year
|
||||
<#elseif record.years gt 1 >
|
||||
${record.years?string(",##0")} years
|
||||
</#if>
|
||||
<#if record.weeks == 1>
|
||||
1 week
|
||||
<#elseif record.weeks gt 1 >
|
||||
${record.weeks?string} weeks
|
||||
</#if>
|
||||
<#if record.days == 1>
|
||||
1 day
|
||||
<#elseif record.days gt 1 >
|
||||
${record.days?string} days
|
||||
</#if>
|
||||
<#if record.hours == 1>
|
||||
1 hour
|
||||
<#elseif record.hours gt 1 >
|
||||
${record.hours?string} hours
|
||||
</#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 day<#else>${rlDays} days</#if>
|
||||
</#if>
|
||||
<#if rlHours gt 0>
|
||||
<#if rlHours = 1>1 hour<#else>${rlHours} hours</#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="billion galactic credits">bgc</abbr></#macro>
|
||||
<#macro abbr_st><abbr title="Server time">ST</abbr></#macro>
|
||||
<#macro abbr_gt><abbr title="Time in the game universe">GT</abbr></#macro>
|
|
@ -0,0 +1,28 @@
|
|||
<@page title="Legacy Worlds Beta 6 - Milestone 1">
|
||||
<p>
|
||||
Welcome to the first milestone release for Legacy Worlds' Beta 6.
|
||||
</p>
|
||||
<p> </p>
|
||||
<p>
|
||||
This is not a complete game. In fact, most of Beta 5's advanced features have been left out.
|
||||
However, it is a good starting point for the development of Beta 6. The complete list of features
|
||||
included in this release can be found on the <a href="scope">Scope</a> page.
|
||||
</p>
|
||||
<p> </p>
|
||||
<p>
|
||||
You will find more information about the game itself on the <a href="rules">Rules</a> page. It's
|
||||
basically the same old thing: build stuff, kill people using the aforementioned stuff. Only the
|
||||
details have changed.
|
||||
</p>
|
||||
<p> </p>
|
||||
<p>
|
||||
Now - this is a bit unusual, but because the real goal of this release is to test the system itself,
|
||||
you are encouraged to create multiple accounts.
|
||||
</p>
|
||||
<p> </p>
|
||||
<p>
|
||||
While this version may be played independently from Beta 5, it doesn't feature forums (although a bug
|
||||
reporting system has been included); it is therefore recommended that you
|
||||
<a href="http://www.legacyworlds.com">join Beta 5</a> anyway.
|
||||
</p>
|
||||
</@page>
|
|
@ -0,0 +1,8 @@
|
|||
<@page title="Logged out">
|
||||
<p>
|
||||
You have been logged out of Legacy Worlds.
|
||||
</p>
|
||||
<p>
|
||||
Thanks for playing!
|
||||
</p>
|
||||
</@page>
|
|
@ -0,0 +1,8 @@
|
|||
<@page title="Invalid credentials">
|
||||
<p>
|
||||
The e-mail address and password you entered do not match any existing account.
|
||||
</p>
|
||||
<p>
|
||||
Please try again. If you have forgotten your password, you may use the <a href="password-recovery">password recovery</a> utility.
|
||||
</p>
|
||||
</@page>
|
|
@ -0,0 +1,8 @@
|
|||
<@page title="Logged out automatically">
|
||||
<p>
|
||||
Your session has expired, and you've been logged out of Legacy Worlds.
|
||||
</p>
|
||||
<p>
|
||||
You need to log in again.
|
||||
</p>
|
||||
</@page>
|
|
@ -0,0 +1,8 @@
|
|||
<@page title="Password Recovery Successful">
|
||||
<p>
|
||||
Your password recovery request has been successfully processed.
|
||||
</p>
|
||||
<p>
|
||||
You may now log in with the new password you have just set.
|
||||
</p>
|
||||
</@page>
|
|
@ -0,0 +1,11 @@
|
|||
<@page title="Account disabled">
|
||||
<p>
|
||||
Your account is currently disabled.
|
||||
</p>
|
||||
<p>
|
||||
You can either leave it as it is by <a href="logout.action">logging out</a> or choose to <a href="reactivate.action">re-activate it</a>.
|
||||
</p>
|
||||
<p>
|
||||
Please note that your email address must still be valid if you want to re-activate your account.
|
||||
</p>
|
||||
</@page>
|
113
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/static/rules.ftl
Normal file
113
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/static/rules.ftl
Normal file
|
@ -0,0 +1,113 @@
|
|||
<@page title="Rules of the game">
|
||||
<h3>General</h3>
|
||||
<p>
|
||||
The whole game is based on per-minute updates. Because these updates are computed depending on when the game
|
||||
server was started, they may happen at any time.
|
||||
</p>
|
||||
<p>
|
||||
Because of this, a <em>game time</em> is provided. It corresponds to the amount of updates that were computed.
|
||||
One "hour" of game time corresponds to an update and, generally speaking, a minute of real-world time.
|
||||
</p>
|
||||
<p>
|
||||
No real attempts at balancing the game were made. It is therefore quite likely that some aspects of the rules
|
||||
will not work as expected.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
<h3>Money & research</h3>
|
||||
<p>
|
||||
Income is mostly provided by an empire's population. While income and upkeep are displayed for 24h of real-world time,
|
||||
an empire's cash reserve will increase (or decrease) continuously. The optional <em>Generic assembly line</em> building
|
||||
provides additional income.
|
||||
</p>
|
||||
<p>
|
||||
Populations also generate research points, which are used to update an empire's research progress. When a
|
||||
technology reaches 100% of its required research points, it needs to be <em>implemented</em>, which costs
|
||||
money.
|
||||
</p>
|
||||
<p>
|
||||
Two sets of three technologies are available: <em>civilian technologies</em> provide new buildings, while
|
||||
<em>military technologies</em> provide new ships.
|
||||
</p>
|
||||
<p>
|
||||
If an empire's cash reserve reach 0 because of a high upkeep, its fleets will begin to degrade. If it does not
|
||||
own any fleets, then its planet's buildings start to degrade.
|
||||
</p>
|
||||
<p>
|
||||
It is however possible for an empire to reach 0 because of buildings and ships construction. In this case,
|
||||
no damage will be inflicted, but construction will be slowed down.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
<h3>Planet management</h3>
|
||||
<p>
|
||||
Two types of buildings are available without any technology: <em>ship parts factories</em> (which allow ships to be built)
|
||||
and <em>defence turrets</em> (which provide stationary defences to your planets).
|
||||
</p>
|
||||
<p>
|
||||
Buildings construction or destruction are not immediate. The speed at which buildings are constructed or destroyed
|
||||
depend on a planet's population. When building, the monetary cost of buildings is taken from the empire's reserves
|
||||
at every update.
|
||||
</p>
|
||||
<p>
|
||||
Destroying buildings is much faster than constructing them; in addition, a small proportion of the building's cost
|
||||
is added back to the empire's cash reserves once the building is destroyed.
|
||||
</p>
|
||||
<p>
|
||||
A planet's happiness is determined by three factors: the amount of jobs provided by the planet's buildings relative
|
||||
to the planet's population, the stationary defences' power and the amount of planets owned by the empire.
|
||||
</p>
|
||||
<p>
|
||||
Happiness does not change immediately when something affects it. The change is progressive, and its speed depend
|
||||
on its amplitude and on the planet's total population.
|
||||
</p>
|
||||
<p>
|
||||
When a planet's happiness is below 25%, its citizen go on strike, which reduces the planet's income, production and
|
||||
defences.
|
||||
</p>
|
||||
<p>
|
||||
Population growth is directly proportional to the planet's happiness.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
<h3>Fleets and ships</h3>
|
||||
<p>
|
||||
Ships are constructed on planets using the same principle as buildings. However, their construction speed is determined
|
||||
by the planet's military production.
|
||||
</p>
|
||||
<p>
|
||||
Ships have two characteristics: their <em>power</em>, which determine how effective they are in battle, and their
|
||||
<em>orbit-to-orbit flight time</em>, which determines their speed and the various penalties which may be inflicted
|
||||
on a fleet (redirection, redeployment, etc).
|
||||
</p>
|
||||
<p>
|
||||
A fleet's power is the sum of each of its ships' power. Its orbit-to-orbit flight time is determined by the slowest
|
||||
ship in the fleet.
|
||||
</p>
|
||||
<p>
|
||||
Only fleets that have the <em>available</em> status may be moved, split, or merged. In addition, fleets that have
|
||||
the <em>deploying</em> status do not inflict damage in battle (they do however receive damage). All fleets may be
|
||||
renamed, disbanded, or switched between offensive and defensive modes, whatever their status is.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
<h3>Battles</h3>
|
||||
<p>
|
||||
A battle starts whenever an attacking fleet is present on a planet, and end when all attacking fleets are gone / have
|
||||
been destroyed, or when all defensive fleets and planetary defences are gone / have been destroyed. In the latter case,
|
||||
the attacker with the biggest fleet takes control of the planet at the next update.
|
||||
</p>
|
||||
<p>
|
||||
Battles are updated every minute. Therefore, there are no "battle reports"; instead, a history of the battle and
|
||||
the events that occured during the battle are provided.
|
||||
</p>
|
||||
<p>
|
||||
A battle's intensity starts at a low level, slowly increasing over time until it reaches full intensity. It determines how
|
||||
much damage is dealt.
|
||||
</p>
|
||||
<p>
|
||||
Battle damage on both buildings and ships accumulates over time. It is not possible to repair ships or buildings.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
</@page>
|
|
@ -0,0 +1,56 @@
|
|||
<@page title="Scope of this milestone">
|
||||
<p>
|
||||
This milestone consists mostly in writing the game's engine and most of the common
|
||||
administrative functionalities. Because of this, the <a href="rules">game</a> itself
|
||||
is pretty limited, and so is the interface.
|
||||
</p>
|
||||
<p> </p>
|
||||
|
||||
<h3>Game server</h3>
|
||||
<p>
|
||||
The stand-alone game server runs independently of any interface and is responsible for
|
||||
all administrative and game functionalities. This release concentrates on:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>system basics</strong> - logging, run-time access to game-related "constants",
|
||||
internationalisation, communications with user interfaces,</li>
|
||||
<li><strong>accounts</strong> - from registration to preferences to inactivity management,</li>
|
||||
<li><strong>naming system</strong> - the names of all in-game entities (empires and planets
|
||||
in this release) are managed through the same sub-system,</li>
|
||||
<li><strong>bug tracking system</strong> - because it will not be possible to include forums
|
||||
until much further in the game's development cycle, the bug-tracking system is an essential
|
||||
tool,</li>
|
||||
<li><strong>scheduler</strong> - because ticks still need to run, sometimes.</li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
|
||||
<h3>Server administration</h3>
|
||||
<p>
|
||||
Server administration is one of the most important areas for this release, although most
|
||||
people will (hopefully) never get to see it. It is implemented as a separate user interface
|
||||
accessing the server through its external communication interface. The administration interface
|
||||
includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>privilege system</strong> (not all administrators are equal),</li>
|
||||
<li><strong>account management</strong>,</li>
|
||||
<li><strong>game parameters access</strong>,</li>
|
||||
<li><strong>bug tracker administration</strong>,</li>
|
||||
<li><strong>names validation</strong>,</li>
|
||||
<li><strong>log viewer</strong>,</li>
|
||||
<li><strong>automated error reports</strong>.</li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
|
||||
<h3>Game and interface</h3>
|
||||
<p>
|
||||
While the game does not bring anything really new, it is based on a per-minute update system.
|
||||
Its interface is probably not really appropriate, as Beta 5's external layout is a bit cramped
|
||||
when it comes to displaying all required in-game information; it is however temporary.
|
||||
</p>
|
||||
<p>
|
||||
This release is available in two languages - English and French - as the internationalisation
|
||||
system needs to be tested. However, it is extremely likely that future milestone releases will
|
||||
only be available in English.
|
||||
</p>
|
||||
</@page>
|
|
@ -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="No" selected=( pref.value != "1" )/>
|
||||
<@form_option value="1" text="Yes" 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="Account">
|
||||
<@tabs>
|
||||
|
||||
<@tab id="prefs" title="Preferences">
|
||||
<@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="Change preferences">
|
||||
<@ff_submit label="Defaults" name="load-default-preferences" />
|
||||
</@form_extended_submit>
|
||||
</@form>
|
||||
</@tab>
|
||||
|
||||
<@tab id="basics" title="Identity">
|
||||
<@form name="lang-form" action="set-language" hash="basics">
|
||||
<@form_part title="Account language" />
|
||||
<@form_select name="language" label="Language">
|
||||
<#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="Update" />
|
||||
</@form>
|
||||
|
||||
<@form name="pwd-form" action="set-password" hash="basics">
|
||||
<@form_part title="Change password" />
|
||||
<#if data.authError!false>
|
||||
<@form_error>Incorrect password</@form_error>
|
||||
</#if>
|
||||
<@form_pwd label="Current password" name="current" />
|
||||
<#switch data.passwordError!"">
|
||||
<#case "EMPTY">
|
||||
<@form_error>Empty password.</@form_error>
|
||||
<#break>
|
||||
<#case "TOO_WEAK">
|
||||
<@form_error>This password is too weak.</@form_error>
|
||||
<#break>
|
||||
<#case "MISMATCH">
|
||||
<@form_error>Password field and confirmation field do not match.</@form_error>
|
||||
<#break>
|
||||
<#case "PROHIBITED">
|
||||
<@form_error>You are not allowed to use this password here.</@form_error>
|
||||
<#break>
|
||||
<#default>
|
||||
<@form_extra>At least 6 characters, containing both text and numbers. Bonus points for special characters, spaces, and extremely long passwords.</@form_extra>
|
||||
</#switch>
|
||||
<@form_pwd label="Password" name="password" />
|
||||
<@form_pwd label="Password (confirm)" name="passwordConfirm" />
|
||||
<@form_submit label="Update" />
|
||||
</@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="Change e-mail address" />
|
||||
<tr class="form-field">
|
||||
<th>Current address:</th>
|
||||
<td>${data.account.address?xhtml}</td>
|
||||
</tr>
|
||||
<@form_extra>
|
||||
You will be able to request an e-mail address change at ${mc.until?string("HH:mm:ss (ZZZZZ)")}.
|
||||
</@form_extra>
|
||||
</@form>
|
||||
<#else>
|
||||
<@form name="mail-form" action="confirm-set-address" hash="basics">
|
||||
<@form_part title="Change e-mail address" />
|
||||
<tr class="form-field">
|
||||
<th>Current address:</th>
|
||||
<td>${data.account.address?xhtml}</td>
|
||||
</tr>
|
||||
<@form_extra>
|
||||
You are changing your address to <em>${mc.newAddress?xhtml}</em>.<br/>
|
||||
Your request will expire at ${mc.until?string("HH:mm (ZZZZZ)")}.
|
||||
</@form_extra>
|
||||
<#if data.codeError!false>
|
||||
<@form_error>Incorrect confirmation code</@form_error>
|
||||
</#if>
|
||||
<@form_text name="code" id="mail-confirmation-code" value="${data.code!}" maxLength=64 label="Confirmation code" />
|
||||
<@form_extended_submit label="Change address">
|
||||
<@ff_submit label="Cancel" name="cancel-set-address" />
|
||||
</@form_extended_submit>
|
||||
</@form>
|
||||
</#if>
|
||||
<#else>
|
||||
<@form name="mail-form" action="set-address" hash="basics">
|
||||
<@form_part title="Change e-mail address" />
|
||||
<#if data.mailAuthError!false>
|
||||
<@form_error>Incorrect password</@form_error>
|
||||
</#if>
|
||||
<tr class="form-field">
|
||||
<th>Current address:</th>
|
||||
<td>${data.account.address?xhtml}</td>
|
||||
</tr>
|
||||
<@form_pwd label="Current password" name="password" id="current-2" />
|
||||
<#switch data.mailError!"">
|
||||
<#case "EMPTY">
|
||||
<@form_error>Empty e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "INVALID">
|
||||
<@form_error>Invalid e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "IN_USE">
|
||||
<@form_error>This e-mail address is already associated with an account.</@form_error>
|
||||
<#break>
|
||||
<#case "SEND_FAIL">
|
||||
<@form_error>Unable to send confirmation code to this address.</@form_error>
|
||||
<#break>
|
||||
<#case "MISMATCH">
|
||||
<@form_error>E-mail address field and confirmation field do not match.</@form_error>
|
||||
<#break>
|
||||
<#default>
|
||||
<@form_extra>The e-mail address <em>MUST</em> exist.</@form_extra>
|
||||
</#switch>
|
||||
<@form_text label="E-mail address" maxLength=128 name="mail" value=data.mail! />
|
||||
<@form_text label="E-mail address (confirm)" maxLength=128 name="mailConfirm" value=data.mail! />
|
||||
<@form_submit label="Update" />
|
||||
</@form>
|
||||
</#if>
|
||||
</@tab>
|
||||
|
||||
<@tab id="status" title="Status">
|
||||
<@form name="game-credits" action="no-action" hash="status">
|
||||
<@form_part title="Game credits" />
|
||||
<tr class="form-field">
|
||||
<th>Game credits:</th>
|
||||
<td>${data.account.gameCredits?string(',##0')}</td>
|
||||
</tr>
|
||||
<@form_extra>
|
||||
Game credits cannot be used at this time. They will however be accumulated
|
||||
throughout the LWB6 development cycle. You obtain them by reporting bugs.
|
||||
</@form_extra>
|
||||
</@form>
|
||||
|
||||
<@form name="vacation-form" action="toggle-vacation" hash="status">
|
||||
<@form_part title="Vacation mode" />
|
||||
<tr class="form-field">
|
||||
<th>Vacation credits:</th>
|
||||
<td>${data.account.vacCredits?string(',##0')}</td>
|
||||
</tr>
|
||||
<tr class="form-field">
|
||||
<th>Maximal duration:</th>
|
||||
<td>
|
||||
<#if data.account.vacTime?has_content>
|
||||
approximately <@game_duration record=data.account.vacTime />
|
||||
<#else>
|
||||
less than an hour
|
||||
</#if>
|
||||
</td>
|
||||
</tr>
|
||||
<#if data.account.vacStart?has_content>
|
||||
<tr class="form-field">
|
||||
<th>Vacation start:</th>
|
||||
<td>${data.account.vacStart?string("HH:mm (yyyy-MM-dd ZZZZZ)")}</td>
|
||||
</tr>
|
||||
<#if data.page.special == 'v'>
|
||||
<@form_submit label="Exit vacation mode" />
|
||||
<#else>
|
||||
<@form_submit label="Cancel vacation mode" />
|
||||
</#if>
|
||||
<#elseif !data.page.special?has_content && data.account.vacTime?has_content>
|
||||
<@form_submit label="Enter vacation mode" />
|
||||
</#if>
|
||||
</@form>
|
||||
|
||||
<#if !data.page.special?has_content>
|
||||
<@form name="quit-form" action="quit" hash="status">
|
||||
<@form_part title="Quit game" />
|
||||
<@form_extra>
|
||||
If you click the button below, your account will be disabled after 24 hours. You will be able to re-enable it for the next 6 months, after which it will be deleted.
|
||||
</@form_extra>
|
||||
<@form_text label="Reason for quitting (optional)" name="reason" value="" />
|
||||
<@form_submit label="Quit game" />
|
||||
</@form>
|
||||
<#elseif data.page.special == 'q'>
|
||||
<@form name="quit-form" action="cancel-quit" hash="status">
|
||||
<@form_part title="Quit game" />
|
||||
<@form_extra>
|
||||
Your account will be disabled at ${data.account.quitGame?string("HH:mm (yyyy-MM-dd ZZZZZ)")}.
|
||||
</@form_extra>
|
||||
<@form_submit label="Cancel" />
|
||||
</@form>
|
||||
</#if>
|
||||
</@tab>
|
||||
|
||||
</@tabs>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,268 @@
|
|||
<#macro show_alliance alliance>
|
||||
<@dt_main>
|
||||
<@dt_entry title="Tag">${alliance.tag?xhtml}</@dt_entry>
|
||||
<@dt_entry title="Name">${alliance.name?xhtml}</@dt_entry>
|
||||
<@dt_entry title="Leader">${alliance.leaderName?xhtml}</@dt_entry>
|
||||
<@dt_entry title="Planets">${alliance.planets?string(",##0")}</@dt_entry>
|
||||
<@dt_entry title=""><a href="msg-alliance-${alliance.id}">Send message</a></@dt_entry>
|
||||
</@dt_main>
|
||||
</#macro>
|
||||
<#macro alliance_info_tab>
|
||||
|
||||
<@tab id="info" title="Other alliances">
|
||||
|
||||
<@form action="alliance-info" name="alliance-info" hash="info">
|
||||
<@form_text name="tag" id="ai-tag" label="Alliance tag" value=data.requested! maxLength=5 />
|
||||
<@form_submit label="Get information" />
|
||||
</@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="Create">
|
||||
<@form action="create-alliance" name="create-alliance" hash="create-alliance">
|
||||
<#switch tagError>
|
||||
<#case "EMPTY"><@form_error>Please specify your alliance's tag.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>This tag is invalid.</@form_error><#break>
|
||||
<#case "UNAVAILABLE"><@form_error>This tag is used by another alliance.</@form_error></break>
|
||||
</#switch>
|
||||
<@form_text name="tag" id="ca-tag" label="Alliance tag" value=tag maxLength=5 />
|
||||
|
||||
<#switch nameError>
|
||||
<#case "EMPTY"><@form_error>Please specify your alliance's name.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>This name is invalid.</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text name="name" id="ca-name" label="Alliance name" value=name maxLength=5 />
|
||||
|
||||
<@form_submit label="Create an alliance" />
|
||||
</@form>
|
||||
</@tab>
|
||||
|
||||
</#macro>
|
||||
<#macro alliance_join_tab>
|
||||
|
||||
<@tab id="join-alliance" title="Join">
|
||||
<@form action="join-alliance" name="join-alliance" hash="join-alliance">
|
||||
<#if data.joinFailure?has_content>
|
||||
<@form_error>Alliance not found.</@form_error>
|
||||
</#if>
|
||||
<@form_text name="tag" id="ja-tag" label="Alliance tag" value=data.joinFailure! maxLength=5 />
|
||||
<@form_submit label="Join this 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="Request sent">
|
||||
<@lineform action="cancel-join" hash="join-alliance">
|
||||
A request to join <strong>${alliance.main.tag?xhtml}</strong> has been sent.
|
||||
<#if data.page.special! != 'v'>
|
||||
<@ff_submit label="Cancel" />
|
||||
</#if>
|
||||
</@lineform>
|
||||
<@show_alliance alliance=alliance.main />
|
||||
</@tab>
|
||||
|
||||
</#macro>
|
||||
<#macro alliance_planets pList>
|
||||
<@tab id="planets" title="Planets">
|
||||
|
||||
<#if pList?size == 0>
|
||||
<p>There are no planets in the alliance.</p>
|
||||
<#return>
|
||||
</#if>
|
||||
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width=80 centered=true>Coordinates</@lv_column>
|
||||
<@lv_column width=150>Planet</@lv_column>
|
||||
<@lv_column width=150>Owner</@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> </td>
|
||||
<td colspan="2">
|
||||
Military situation:
|
||||
<strong class="own-fleet">${planet.defence?string(",##0")}</strong>
|
||||
vs.
|
||||
<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> </@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>
|
||||
|
||||
<#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">
|
||||
You are
|
||||
<#if alliance.leader?has_content>
|
||||
the leader
|
||||
<#else>
|
||||
a member
|
||||
</#if>
|
||||
of <strong>${alliance.main.tag?xhtml}</strong>.
|
||||
<#if data.page.special! != 'v'>
|
||||
<@ff_submit label="Leave 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="Kick selected members" />
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<@lineform action="transfer-leadership" hash="members">
|
||||
Transfer leadership to
|
||||
<@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="Confirm" />
|
||||
</@lineform>
|
||||
</#if>
|
||||
</@tab>
|
||||
|
||||
<#if leader>
|
||||
<@tab id="requests" title="Requests">
|
||||
<#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="No pending requests" />
|
||||
<#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="Accept" />
|
||||
<@form_option value="0" text="Reject" />
|
||||
</@ff_select> selected applicants
|
||||
<@ff_submit label="Confirm" />
|
||||
</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>
|
|
@ -0,0 +1,12 @@
|
|||
<#macro render>
|
||||
<@page title="You've been banned">
|
||||
<p>You did it. You got yourself banned. Nice work.</p>
|
||||
<@dt_main>
|
||||
<@dt_entry width=200 title="Ban date/time">${data.banTime?string("yyyy-MM-dd HH:mm:ss")}</@dt_entry>
|
||||
<@dt_entry width=200 title="Reason for the ban">${data.banReason?xhtml}</@dt_entry>
|
||||
</@dt_main>
|
||||
<#if data.redeemable>
|
||||
<p>Your empire has not been deleted yet. You may appeal the ban by sending an email to <a href="mailto:staff@legacyworlds.com">the staff</a> within 48h.</p>
|
||||
</#if>
|
||||
</@page>
|
||||
</#macro>
|
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/battle.ftl
Normal file
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/battle.ftl
Normal 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>
|
||||
<<
|
||||
<#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="Go" 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>
|
||||
>>
|
||||
<#if disp.next?has_content>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="width: 30px;text-align: left">
|
||||
<a href="battle-${id?string('#')}-latest">>>></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</#macro>
|
||||
<#macro render_list_entry mode record type>
|
||||
<tr class="${mode}-fleet ${type} empire-entry">
|
||||
<td style="width:16px"> </td>
|
||||
<td style="width:16px" class="ships-expander" title="Show/hide <#if type = "planet">buildings<#else>ships</#if>"> </td>
|
||||
<td style="width:16px"> </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"> </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>( planet )</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="Show/hide empires"> </td>
|
||||
<td style="width:16px" class="ships-expander" title="Show/hide ships"> </td>
|
||||
<td colspan="3"><#if mode == "allied">Allied<#else>Hostile</#if> forces</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"> </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"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th> </th>
|
||||
<@lv_column width=100 centered=true>Current</@lv_column>
|
||||
<@lv_column width=100 centered=true>Lost</@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>Click "*" and "+" to toggle ships/buildings and forces display.</em></td></tr>
|
||||
</@listview>
|
||||
</#macro>
|
||||
<#macro render_event_items items>
|
||||
<#list items as item>
|
||||
<@lv_line>
|
||||
<td> </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">Planet renamed to <strong>${event.name}</strong></td>
|
||||
</@lv_line>
|
||||
<#break>
|
||||
<#case "SWITCH">
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<#if event.name = data.page.empire>
|
||||
We have switched to <#if event.hostile>attack<#else>defence</#if>.
|
||||
<#else>
|
||||
<strong>${event.name}</strong> has switched mode and is now <#if event.hostile>hostile<#else>friendly</#if>.
|
||||
</#if>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<#break>
|
||||
<#case "BUILD">
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<#if event.planet>
|
||||
New buildings have been constructed on the planet.
|
||||
<#elseif event.name = data.page.empire>
|
||||
Our new fleets have been deployed.
|
||||
<#else>
|
||||
<#if event.hostile>Hostile<#else>Friendly</#if> fleets belonging to <strong>${event.name}</strong> have been deployed.
|
||||
</#if>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<@render_event_items items=event.ships />
|
||||
<#break>
|
||||
<#case "DEPART">
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<#if event.name = data.page.empire>
|
||||
Our fleets have left orbit.
|
||||
<#else>
|
||||
<#if event.hostile>Hostile<#else>Friendly</#if> fleets belonging to <strong>${event.name}</strong> have left orbit.
|
||||
</#if>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<@render_event_items items=event.ships />
|
||||
<#break>
|
||||
<#case "ARRIVE">
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<#if event.name = data.page.empire>
|
||||
Our fleets have joined the battle.
|
||||
<#else>
|
||||
<#if event.hostile>Hostile<#else>Friendly</#if> fleets belonging to <strong>${event.name}</strong> have joined the battle.
|
||||
</#if>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<@render_event_items items=event.ships />
|
||||
<#break>
|
||||
<#case "DESTROY">
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<#if event.planet>
|
||||
Buildings have been destroyed on the planet.
|
||||
<#elseif event.name = data.page.empire>
|
||||
Our fleets have been disbanded.
|
||||
<#else>
|
||||
<#if event.hostile>Hostile<#else>Friendly</#if> fleets belonging to <strong>${event.name}</strong> have been disbanded.
|
||||
</#if>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<@render_event_items items=event.ships />
|
||||
<#break>
|
||||
<#default>
|
||||
<@lv_line>
|
||||
<td colspan="3">
|
||||
<em>Missing event type "${event.type}" (this is a 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%">History</th></tr>
|
||||
<@lv_line headers=true>
|
||||
<th style="width:120px;font-size: 1px"> </th>
|
||||
<th style="width:170px;font-size: 1px"> </th>
|
||||
<th style="font-size: 1px"> </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>Battle ended at <@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>No more fleets at this location</em></td></tr>
|
||||
</#if>
|
||||
<tr><td colspan="3"> </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"> </td></tr>
|
||||
</#list>
|
||||
<#if hInterval.battleBegins>
|
||||
<tr><td colspan="3" style="text-align:center;padding: 5px 0px;font-weight: bold"><em>Battle started at <@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> </p>
|
||||
<@render_fleets fData=data.battle.ships />
|
||||
<@render_history hData=data.battle.history />
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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>
|
||||
<<
|
||||
<#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>
|
||||
>>
|
||||
<#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">Location</@lv_column>
|
||||
<@lv_column width=80 centered=true> </@lv_column>
|
||||
<@lv_column width=125 centered=true>Joined</@lv_column>
|
||||
<@lv_column width=125 centered=true>Finished</@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>In progress</em>
|
||||
</#if>
|
||||
</@lv_column>
|
||||
</@lv_line>
|
||||
</#list>
|
||||
</@listview>
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<@page title="Battles">
|
||||
<#if data.pages == 0>
|
||||
<p>We have not taken part in any battle</p>
|
||||
<#else>
|
||||
<@render_battles battles=data.list page=data.currentPage pages=data.pages />
|
||||
</#if>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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}&first=${current - count}">
|
||||
</#if>
|
||||
<<
|
||||
<#if current gt 0>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="text-align: center">
|
||||
<#if total gt 1>
|
||||
${total?string(',##0')} entries found.
|
||||
<#elseif total = 1>
|
||||
1 entry found.
|
||||
<#else>
|
||||
No entries found.
|
||||
</#if>
|
||||
</td>
|
||||
<td style="width: 30px;text-align: left">
|
||||
<#if current lt total - count>
|
||||
<a href="bugtrack?${qString}&first=${current + count}">
|
||||
</#if>
|
||||
>>
|
||||
<#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'}&own=${ownOnly}" >
|
||||
<@page title="Bug tracker">
|
||||
<#-- Tabs -->
|
||||
<@bugTabs selected="bugsList" qString="${qString}&first=${data.first}" />
|
||||
|
||||
<#-- Selection -->
|
||||
<div class="form-container">
|
||||
<form action="bugtrack" method="get">
|
||||
<table>
|
||||
<tr><td>
|
||||
List
|
||||
<@ff_select id="sel-own" name="own">
|
||||
<@form_option value="0">all</@form_option>
|
||||
<@form_option value="1" selected=(data.ownOnly)>my own</@form_option>
|
||||
</@ff_select>
|
||||
reports with the following status:
|
||||
<@ff_select id="sel-stat" name="status">
|
||||
<@form_option value="x">(indifferent)</@form_option>
|
||||
<@form_option value="PENDING" selected=((data.status!"") = 'PENDING')>pending validation</@form_option>
|
||||
<@form_option value="OPEN" selected=((data.status!"") = 'OPEN')>being handled</@form_option>
|
||||
<@form_option value="RESOLVED" selected=((data.status!"") = 'RESOLVED')>fixed</@form_option>
|
||||
<@form_option value="WONT_FIX" selected=((data.status!"") = 'WONT_FIX')>won't fix</@form_option>
|
||||
<@form_option value="NOT_A_BUG" selected=((data.status!"") = 'NOT_A_BUG')>not a bug</@form_option>
|
||||
</@ff_select>
|
||||
<@ff_submit label="Search" />
|
||||
</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">Title</@lv_column>
|
||||
<#if !( data.status?has_content )>
|
||||
<@lv_column width=130 centered=true>Status</@lv_column>
|
||||
</#if>
|
||||
<@lv_column width=150 centered=true>Last update</@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}&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>
|
||||
</td>
|
||||
<@lv_column centered=true>
|
||||
by
|
||||
<#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>
|
|
@ -0,0 +1,57 @@
|
|||
<#include "bugsTabs.ftl">
|
||||
<#macro render>
|
||||
<#if data.query.ownOnly>
|
||||
<#local ownOnly = "1">
|
||||
<#else>
|
||||
<#local ownOnly = "0">
|
||||
</#if>
|
||||
<#local qString = "status=${data.query.status!'x'}&own=${ownOnly}" >
|
||||
<@page title="Report bug">
|
||||
<@bugTabs selected="bugsReport" qString="${qString}&first=${data.query.first}" />
|
||||
|
||||
<h3 style="padding:0;text-align:center">READ THIS BEFORE REPORTING BUGS</h3>
|
||||
<p>
|
||||
So, you've found something that doesn't work or that seems to be behaving in an unexpected manner.
|
||||
Nice, that's the reason why this version has been made public.
|
||||
</p>
|
||||
<p>
|
||||
However, are you sure that what you have found is really a bug? If you'd been playing Beta 5 in
|
||||
the past, there are many things that no longer work in the same way. Make sure you've read the
|
||||
<a href="rules">rules</a> and <a href="scope">milestone information</a> first.
|
||||
</p>
|
||||
<p>
|
||||
Once you've read this documentation and haven't found any clue related to your problem, well,
|
||||
it's either a bug or something missing in these pages. In any case, it should be reported.
|
||||
Use the form below for that. Make sure the title is <strong>as clear as possible</strong>
|
||||
(it should indicate the nature of the problem) and that the description is as thorough as you
|
||||
can make it.
|
||||
</p>
|
||||
<p>
|
||||
Thanks for helping!
|
||||
</p>
|
||||
|
||||
<@form action="report-bug" hash="report-form">
|
||||
<tr id="report-form" 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>Please specify the report's title</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Title should be at least 10 characters long</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text label="Title" name="title" value=data.title!"" maxLength=127 />
|
||||
|
||||
<#switch data.descriptionError!"">
|
||||
<#case "EMPTY"><@form_error>Please specify the bug's description</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Description should be at least 30 characters long</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text label="Description" name="description" value=data.description!"" multiline=true maxLength=10 />
|
||||
|
||||
<@form_submit label="Post bug report" />
|
||||
|
||||
</@form>
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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="List bugs" selected=( selected = 'bugsList' ) />
|
||||
<@bugTab href="report-bug?${qString}" title="Report bug" selected=( selected = 'bugsReport' ) />
|
||||
</div>
|
||||
</#macro>
|
||||
<#macro bugStatus status>
|
||||
<#switch status>
|
||||
<#case "PENDING">pending validation<#break>
|
||||
<#case "OPEN">being handled<#break>
|
||||
<#case "RESOLVED">fixed<#break>
|
||||
<#case "WONT_FIX">won't fix<#break>
|
||||
<#case "NOT_A_BUG">not a bug<#break>
|
||||
</#switch>
|
||||
</#macro>
|
|
@ -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>
|
||||
posted bug report #<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>
|
||||
set the report's status to <strong><@bugStatus status=e.status /></strong>
|
||||
</@render_event>
|
||||
</#macro>
|
||||
<#macro render_visibility_event e>
|
||||
<@render_event e=e>
|
||||
set the report's visibility to <strong><#if e.visible>public<#else>private</#if></strong>
|
||||
</@render_event>
|
||||
</#macro>
|
||||
<#macro render_merge_event e>
|
||||
<@render_event e=e>
|
||||
merged current bug report with bug report #<strong>${e.mergedId?string(",##0")}</strong>
|
||||
</@render_event>
|
||||
</#macro>
|
||||
<#macro render_comment_event e>
|
||||
<@render_event e=e>
|
||||
posted a comment
|
||||
<#if !e.visible>
|
||||
<em>(moderation pending)</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'}&own=${ownOnly}" >
|
||||
<@page title="Bug #${data.report.reportId?string(',##0')} - ${data.report.title}" hidePlanets=true>
|
||||
<#-- Tabs -->
|
||||
<@bugTabs selected="" qString="${qString}&first=${data.query.first}" />
|
||||
|
||||
<#-- Bug info -->
|
||||
<@dt_main>
|
||||
<@dt_entry title="Status"><@bugStatus status=data.report.status /></@dt_entry>
|
||||
<@dt_entry title="Public"><#if data.report.visible>Yes<#else>No</#if></@dt_entry>
|
||||
<@dt_entry title="Initially reported">
|
||||
${data.report.posted?string("yyyy-MM-dd HH:mm:ss")}
|
||||
by <@render_submitter s=data.report.initialSubmitter />
|
||||
</@dt_entry>
|
||||
<@dt_entry title="Latest update">
|
||||
${data.report.lastUpdate?string("yyyy-MM-dd HH:mm:ss")}
|
||||
by <@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>You should type a comment before posting a comment.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Comments must be at least 30 characters long.</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text label="New comment" name="comment" multiline=true maxLength=6 value=data.comment!"" />
|
||||
<@form_submit label="Post comment" />
|
||||
</@form>
|
||||
</#if>
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,27 @@
|
|||
<#macro render>
|
||||
<@page title="Legacy Worlds chat">
|
||||
<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="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>
|
|
@ -0,0 +1,98 @@
|
|||
<#macro enemy_tab eList alliances>
|
||||
|
||||
<#if alliances>
|
||||
<#local tabId = "alliances">
|
||||
<#local addAction = "alliance">
|
||||
<#local tabTitle = "Alliances">
|
||||
<#local emptyText = "No enemy alliances.">
|
||||
<#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 = "No enemy empires.">
|
||||
<#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>
|
||||
<#if data.page.special! != 'v'>
|
||||
<@lv_column width=40 centered=true> </@lv_column>
|
||||
</#if>
|
||||
<@lv_column width="x">${tabTitle}</@lv_column>
|
||||
</@lv_line>
|
||||
|
||||
<#list eList as enemy>
|
||||
<@lv_line>
|
||||
<#if data.page.special! != 'v'>
|
||||
<@lv_column centered=true><input type="checkbox" name="id" value="${enemy.id}" /></@lv_column>
|
||||
</#if>
|
||||
<@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>
|
||||
<#if data.page.special! != 'v'>
|
||||
<div class="form-container">
|
||||
<table><tr><td>
|
||||
<@ff_submit label="Remove selected enemies" />
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</#if>
|
||||
</form>
|
||||
</#if>
|
||||
|
||||
<#if data.page.special! != 'v'>
|
||||
<#if error?has_content>
|
||||
<@standalone_error>
|
||||
<#switch error>
|
||||
<#case "INVALID"><#if alliances>Alliance<#else>Empire</#if> not found.<#break>
|
||||
<#case "BANNED">
|
||||
<#if alliances>
|
||||
Feeling Mordred-ish today, are we?
|
||||
<#else>
|
||||
There's a medical term for that - schizophrenia.
|
||||
</#if>
|
||||
<#break>
|
||||
<#case "UNAVAILABLE">
|
||||
This <#if alliances>alliance<#else>empire</#if> is already in your enemy list.
|
||||
<#break>
|
||||
</#switch>
|
||||
</@standalone_error>
|
||||
</#if>
|
||||
<@lineform action="add-enemy-${addAction}" hash=tabId>
|
||||
New enemy: <@ff_text id="name-${addAction}" name="name" value=defName! maxLength=nameLen size=(nameLen+1) />
|
||||
<@ff_submit label="Add" />
|
||||
</@lineform>
|
||||
</#if>
|
||||
|
||||
</@tab>
|
||||
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<@page title="Enemy list">
|
||||
|
||||
<@tabs>
|
||||
|
||||
<@enemy_tab eList=data.empires alliances=false />
|
||||
<@enemy_tab eList=data.alliances alliances=true />
|
||||
|
||||
</@tabs>
|
||||
|
||||
</@page>
|
||||
</#macro>
|
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/fleets.ftl
Normal file
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/fleets.ftl
Normal file
|
@ -0,0 +1,261 @@
|
|||
<#macro render_fleet_ships rType id ships>
|
||||
<table>
|
||||
<tr>
|
||||
<th class="ships-type">Ship class</th>
|
||||
<th class="ships-amount">Quantity</th>
|
||||
<th class="ships-power">Power</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> </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="Penalty">
|
||||
<@duration rTime=fleet.penalty gTime=fleet.gamePenalty />
|
||||
</@dt_entry>
|
||||
</#if>
|
||||
<@dt_entry abbr="OOFT" title="Orbit-to-orbit flight time">
|
||||
<@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>
|
||||
|
||||
</#if>
|
||||
</td>
|
||||
<td class="name">
|
||||
<#if fleet.name?has_content && fleet.name != "">
|
||||
${fleet.name?xhtml}
|
||||
<#else>
|
||||
<em>(unnamed fleet)</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="Attacking">A</abbr><#else><abbr title="Defending">D</abbr></#if>
|
||||
</td>
|
||||
<td class="power">${fleet.power?string(',##0')}</td>
|
||||
<td class="status">
|
||||
<#if fleet.status == 'AVAILABLE'>
|
||||
<abbr title="This fleet is available, it can be given any order.">AVL</abbr>
|
||||
<#else>
|
||||
<#switch fleet.status>
|
||||
<#case 'DEPLOYING'><abbr title="This fleet is undergoing its initial deployment from the space docks.">DPL</abbr><#break>
|
||||
<#case 'REDEPLOYING'><abbr title="This fleet is re-deploying after arrival or mode change.">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>
|
||||
Defence: <strong>${location.defence?string(",##0")}</strong>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<#if location.fleetOwners?size == 0>
|
||||
<p>No fleets at this location.</p>
|
||||
<#else>
|
||||
<table class="fleets-list">
|
||||
<tr class="header">
|
||||
<td class="selector"> </td>
|
||||
<th class="name">Fleet name</th>
|
||||
<th class="owner">Owner</th>
|
||||
<th class="mode"><abbr title="Fleet mode">M</abbr></th>
|
||||
<th class="power"><abbr title="Fleet power">P</abbr></th>
|
||||
<th class="status"><abbr title="Fleet status">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">Vacation mode enabled</td></tr>
|
||||
<#elseif location.battle?has_content && location.battle.hostile gt 0>
|
||||
<tr><td colspan="4" style="padding:2px">
|
||||
Battle - <span class="own-fleet">${location.battle.friendly?string(',##0')}</span> vs. <span class="enemy-fleet">${location.battle.hostile?string(',##0')}</span> -
|
||||
<a href="battle-${location.battle.id}-latest">Details</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> </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="Source"><a href="planet-${fleet.source.id}">${fleet.source.name?xhtml}</a></@dt_entry>
|
||||
<@dt_entry title="Status">
|
||||
<#if fleet.status == 'AVAILABLE'>
|
||||
<abbr title="This fleet is available, it can be given any order.">AVL</abbr>
|
||||
<#else>
|
||||
<abbr title="This fleet is changing course.">RDR</abbr> -
|
||||
<@duration rTime=fleet.penalty gTime=fleet.gamePenalty />
|
||||
</#if>
|
||||
</@dt_entry>
|
||||
<@dt_entry title="Time to target"><@duration rTime=fleet.timeLeft gTime=fleet.gameTimeLeft /></@dt_entry>
|
||||
<@dt_entry title="Coordinates">(${fleet.currentX?string("0.00")};${fleet.currentY?string("0.00")})</@dt_entry>
|
||||
<@dt_entry title="Nearest planet">
|
||||
<#if fleet.nearest?has_content>
|
||||
<a href="planet-${fleet.nearest.id}">${fleet.nearest.name?xhtml}</a>
|
||||
<#else>
|
||||
<em>in outer space</em>
|
||||
</#if>
|
||||
</@dt_entry>
|
||||
<@dt_entry abbr="OOFT" title="Orbit-to-orbit flight time">
|
||||
<@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>
|
||||
|
||||
</#if>
|
||||
</td>
|
||||
<td class="name" colspan="2">
|
||||
<#if fleet.name?has_content && fleet.name != "">
|
||||
${fleet.name?xhtml}
|
||||
<#else>
|
||||
<em>(unnamed fleet)</em>
|
||||
</#if>
|
||||
</td>
|
||||
<td class="mode">
|
||||
<#if fleet.attacking><abbr title="Attacking">A</abbr><#else><abbr title="Defending">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">Moving fleets</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="fleets-list">
|
||||
<tr>
|
||||
<td class="selector"> </td>
|
||||
<th class="name" colspan="2">Fleet name</th>
|
||||
<th class="mode"><abbr title="Fleet mode">M</abbr></th>
|
||||
<th class="power"><abbr title="Fleet power">P</abbr></th>
|
||||
<th class="timeleft"><abbr title="Estimated time to arrival">ETA</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="Fleets">
|
||||
<#local locations = data.fleets.locations>
|
||||
<#local mFleets = data.fleets.moving>
|
||||
<#if locations?size == 0 && mFleets?size == 0>
|
||||
<p>You do not own any fleets or planets.</p>
|
||||
<#else>
|
||||
<div style="font-style: italic; text-align:center; padding: 0 0 10px 0">Click a fleet's name to see composition and details</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="Rename" title="Rename selected fleets" />
|
||||
|
||||
<input type="submit" class="input" name="move" value="Move / redirect" title="Move or redirect selected fleets, if they are available." />
|
||||
|
||||
<input type="submit" class="input" name="setAttack" value="Attack" title="Set selected fleets to attack mode." />
|
||||
<input type="submit" class="input" name="setDefend" value="Defend" title="Set selected fleets to defence mode." />
|
||||
|
||||
<input type="submit" class="input" name="merge" value="Merge" title="Merge selected fleets, if they are available." />
|
||||
<input type="submit" class="input" name="split" value="Split" title="Split selected fleet into two or more fleets." />
|
||||
|
||||
<input type="submit" class="input" name="disband" value="Disband" title="Destroy selected fleets." />
|
||||
</div>
|
||||
</#if>
|
||||
</form>
|
||||
</#if>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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>(unnamed fleet)</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="This fleet is undergoing its initial deployment from the space docks.">DPL</abbr><#break>
|
||||
<#case 'REDEPLOYING'><abbr title="This fleet is re-deploying after arrival or mode change.">RDP</abbr><#break>
|
||||
<#case 'REDIRECTING'><abbr title="This fleet is changing course.">RDP</abbr><#break>
|
||||
<#case 'AVAILABLE'><abbr title="This fleet is available, it can be given any order.">AVL</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>At<#else>Near</#if>
|
||||
<a href="planet-${fleet.nearest.id}">${fleet.nearest.name?xhtml}</a>
|
||||
<#else>
|
||||
In outer space
|
||||
</#if>
|
||||
</td>
|
||||
</#macro>
|
||||
<#macro render_selected_fleets fleets>
|
||||
<h3>Selected fleets</h3>
|
||||
<table class="selected-fleets">
|
||||
<tr>
|
||||
<td class="selector"> </td>
|
||||
<th class="name">Name</th>
|
||||
<th class="power"><abbr title="Fleet power">P</abbr></th>
|
||||
<th class="fltime"><abbr title="Orbit-to-orbit flight time">FT</abbr></th>
|
||||
<th class="status"><abbr title="Fleet status">S</abbr></th>
|
||||
<th class="cloc">Location</th>
|
||||
</tr>
|
||||
<#list fleets as fleet>
|
||||
<tr>
|
||||
<@render_fleet fleet=fleet />
|
||||
</tr>
|
||||
</#list>
|
||||
</table>
|
||||
</#macro>
|
||||
<#macro render_move_fleets>
|
||||
<h3>New orders</h3>
|
||||
<#if data.error>
|
||||
<@standalone_error>This planet does not exist.</@standalone_error>
|
||||
</#if>
|
||||
<p>
|
||||
Move selected fleets to
|
||||
<@ff_text name="destination" id="destination" value="${data.destination!?xhtml}" maxLength=20 size=21 />
|
||||
for
|
||||
<@ff_select name="mode" id="mode">
|
||||
<@form_option text="defence" selected=( !data.mode!false ) value="0" />
|
||||
<@form_option text="attack" selected=( data.mode!false ) value="1" />
|
||||
</@ff_select>
|
||||
|
||||
<@ff_submit label="Ok" />
|
||||
<@ff_submit label="Cancel" name="cancel" />
|
||||
</p>
|
||||
</#macro>
|
||||
<#macro render_rename_fleets>
|
||||
<h3>Rename fleets</h3>
|
||||
<#if data.error>
|
||||
<@standalone_error>This name is invalid.</@standalone_error>
|
||||
</#if>
|
||||
<p>
|
||||
Rename selected fleets to
|
||||
<@ff_text name="name" id="name" value="${data.name!?xhtml}" maxLength=40 size=21 />
|
||||
|
||||
<@ff_submit label="Ok" />
|
||||
<@ff_submit label="Cancel" name="cancel" />
|
||||
</p>
|
||||
</#macro>
|
||||
<#macro render_set_fleets_mode>
|
||||
<h3>Set fleets mode</h3>
|
||||
<p>
|
||||
Assign selected fleets to
|
||||
<#if data.attack>attack<#else>defence</#if>?
|
||||
|
||||
<@ff_submit label="Yes" />
|
||||
<@ff_submit label="No" name="cancel" />
|
||||
</p>
|
||||
<input type="hidden" name="attack" value="<#if data.attack>1<#else>0</#if>" />
|
||||
</#macro>
|
||||
<#macro render_disband_fleets>
|
||||
<h3>Disband fleets</h3>
|
||||
<p>
|
||||
Are you sure?
|
||||
|
||||
<@ff_submit label="Yes" />
|
||||
<@ff_submit label="No" name="cancel" />
|
||||
</p>
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<#switch dataType>
|
||||
<#case 'MoveFleetsResponse'>
|
||||
<#local title="Move fleets">
|
||||
<#local action="move-fleets.action">
|
||||
<#break>
|
||||
<#case 'RenameFleetsResponse'>
|
||||
<#local title="Rename fleets">
|
||||
<#local action="rename-fleets.action">
|
||||
<#break>
|
||||
<#case 'SetFleetsModeResponse'>
|
||||
<#local title="Set fleets mode">
|
||||
<#local action="set-fleets-mode.action">
|
||||
<#break>
|
||||
<#case 'DisbandFleetsResponse'>
|
||||
<#local title="Disband fleets">
|
||||
<#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>
|
|
@ -0,0 +1,17 @@
|
|||
<#macro render>
|
||||
<@page title="Get new planet">
|
||||
<p>Hordes of drooling barbarians invaded your empire, slaughtering your women and raping your cattle?</p>
|
||||
<p>Well, fear no more! You will be able to get a brand new planet.</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>Please select a planet name.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Invalid planet name.</@form_error><#break>
|
||||
<#case "UNAVAILABLE"><@form_error>This planet name is unavailable.</@form_error><#break>
|
||||
<#case "BANNED"><@form_error>This planet name has been banned.</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text name="name" label="New planet's name" value=data.name! />
|
||||
<@form_submit label="Get planet" />
|
||||
</@form>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,16 @@
|
|||
<#macro render><@page title="Server under maintenance">
|
||||
<@dt_main title="The server is currently under maintenance.">
|
||||
<@dt_entry title="Maintenance mode activated">${data.start?string("yyyy-MM-dd HH:mm")}</@dt_entry>
|
||||
<@dt_entry title="Current server time">${data.current?string("yyyy-MM-dd HH:mm")}</@dt_entry>
|
||||
<@dt_entry title="Planned end of maintenance">
|
||||
<#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="Reason">${data.reason?xhtml}</@dt_entry>
|
||||
</@dt_main>
|
||||
</@page></#macro>
|
|
@ -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="View planet ${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>(unexplored)</div></td>
|
||||
</#if>
|
||||
</#list>
|
||||
</tr>
|
||||
</#list>
|
||||
|
||||
</table>
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<@page title="Map">
|
||||
|
||||
<@lineform action="move-map">
|
||||
Coordinates: ( <@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 /> )
|
||||
Size: <@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="Centre map" />
|
||||
</@lineform>
|
||||
|
||||
<@tabs>
|
||||
<@tab id="names" title="Planets">
|
||||
<@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>
|
|
@ -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>
|
||||
<<
|
||||
<#if message.previous?has_content>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="text-align: center">
|
||||
<#if inbox>
|
||||
<a href="inbox-from-${message.id}">Received messages</a>
|
||||
<#else>
|
||||
<a href="outbox-from-${message.id}">Sent messages</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="width: 30px;text-align: left">
|
||||
<#if message.next?has_content>
|
||||
<a href="${link}${message.next}">
|
||||
</#if>
|
||||
>>
|
||||
<#if message.next?has_content>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<#if data.inbox>
|
||||
<#local title="Received messages">
|
||||
<#local timeTtl="Received">
|
||||
<#else>
|
||||
<#local title="Sent messages">
|
||||
<#local timeTtl="Sent">
|
||||
</#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="From">
|
||||
<#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="To">
|
||||
<#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="">New!</@dt_entry>
|
||||
</#if>
|
||||
</@dt_main>
|
||||
|
||||
<@listview><@lv_line headers=true><th colspan="2" style="font-size:1px"> </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"> </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="Delete message" name="delete" />
|
||||
<#if data.inbox && data.message.type != 'INTERNAL'>
|
||||
<@ff_submit label="Compose reply" name="reply" />
|
||||
</#if>
|
||||
</@lineform>
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,125 @@
|
|||
<#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>
|
||||
<<
|
||||
<#if current gt 0>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="text-align: center">
|
||||
<#if total gt 0>
|
||||
Page ${current + 1} / ${total}
|
||||
<#elseif inbox>
|
||||
No messages received.
|
||||
<#else>
|
||||
No messages sent.
|
||||
</#if>
|
||||
</td>
|
||||
<td style="width: 30px;text-align: left">
|
||||
<#if current lt total - 1>
|
||||
<a href="${link}${current + 1}">
|
||||
</#if>
|
||||
>>
|
||||
<#if current lt total - 1>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</#macro>
|
||||
<#macro render>
|
||||
<#if data.inbox>
|
||||
<#local title="Received messages">
|
||||
<#local tab="inbox">
|
||||
<#else>
|
||||
<#local title="Sent messages">
|
||||
<#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="Click here to invert the current selection" id="message-box-selector"> </span></@lv_column>
|
||||
<@lv_column width="x">Subject</@lv_column>
|
||||
<@lv_column width=150 centered=true><#if data.inbox>From<#else>To</#if></@lv_column>
|
||||
<@lv_column width=150 centered=true><#if data.inbox>Received<#else>Sent</#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">
|
||||
With
|
||||
<@ff_select name="target" id="target">
|
||||
<@form_option value="0">selected</@form_option>
|
||||
<@form_option value="1">all</@form_option>
|
||||
</@ff_select>
|
||||
messages:
|
||||
<@ff_select name="action" id="action">
|
||||
<@form_option value="r">mark as read</@form_option>
|
||||
<@form_option value="u">mark as unread</@form_option>
|
||||
<@form_option value="d">delete</@form_option>
|
||||
</@ff_select>
|
||||
<@ff_submit label="Go" />
|
||||
</div>
|
||||
<#else>
|
||||
<div class="form-container">
|
||||
<input type="hidden" name="action" value="d" />
|
||||
Delete
|
||||
<@ff_select name="target" id="target">
|
||||
<@form_option value="0">selected</@form_option>
|
||||
<@form_option value="1">all</@form_option>
|
||||
</@ff_select>
|
||||
messages <@ff_submit label="Go" />
|
||||
</div>
|
||||
</#if>
|
||||
</form>
|
||||
</#if>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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="Received" selected=( selected = 'inbox' ) />
|
||||
<@messageTab href="outbox" title="Sent" selected=( selected = 'outbox' ) />
|
||||
<@messageTab href="compose-message" title="Compose" selected=( selected = 'compose' ) />
|
||||
<@messageTab href="chat" title="Chat" eClass="open-chat-button" />
|
||||
</div>
|
||||
</#macro>
|
|
@ -0,0 +1,62 @@
|
|||
<#include "messageTabs.ftl" />
|
||||
<#macro render>
|
||||
<@page title="Recipients">
|
||||
<@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> </td><td> </td></tr>
|
||||
<#elseif data.empires?size % 3 == 2>
|
||||
<td> </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> </td>
|
||||
<td>${alliance.name}</td>
|
||||
</@lv_line>
|
||||
</#list>
|
||||
</@listview>
|
||||
</@tab>
|
||||
</#if>
|
||||
|
||||
<#if data.admins?size gt 0>
|
||||
<@tab id="admins" title="Administrators">
|
||||
<@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> </td>
|
||||
<td>
|
||||
<#list admin.privileges as priv>
|
||||
<abbr title="${priv.description?xhtml}">${priv}</abbr>
|
||||
</#list>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
</#list>
|
||||
</@listview>
|
||||
</@tab>
|
||||
</#if>
|
||||
|
||||
</@tabs>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,82 @@
|
|||
<#include "messageTabs.ftl" />
|
||||
<#macro render>
|
||||
<#if data.replyTo?has_content>
|
||||
<#local title="Reply to message">
|
||||
<#else>
|
||||
<#local title="Compose new 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>Not so fast! Wait a few seconds before trying again.</@form_error>
|
||||
</#if>
|
||||
|
||||
<#-- Message recipient -->
|
||||
<#if data.targetError>
|
||||
<@form_error>Message recipient not found.</@form_error>
|
||||
</#if>
|
||||
<@form_select label="Recipient type" 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' )>Administrator</@form_option>
|
||||
</@form_select>
|
||||
<@form_text label="Recipient name" name="toName" maxLength=48 value=data.target />
|
||||
<#if (data.target == "")>
|
||||
<tr><td> </td><td><a href="message-targets">Select from list...</a></td></tr>
|
||||
</#if>
|
||||
|
||||
<#-- Subject -->
|
||||
<#if data.titleError>
|
||||
<@form_error>Subject is too short (min.: 2 characters)</@form_error>
|
||||
</#if>
|
||||
<@form_text label="Subject" name="title" maxLength=64 value=data.title />
|
||||
|
||||
<#-- Body -->
|
||||
<#if data.contentsError>
|
||||
<@form_error>Contents are too short (min.: 2 characters)</@form_error>
|
||||
</#if>
|
||||
<@form_text label="Contents" name="contents" value=data.contents multiline=true maxLength=10 />
|
||||
|
||||
<@form_extended_submit label="Send message">
|
||||
<@ff_submit label="Cancel" 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"> </th></@lv_line></@listview>
|
||||
<@dt_main>
|
||||
<@dt_entry width=100 title="">Original message:</@dt_entry>
|
||||
<@dt_entry width=100 title="From">
|
||||
${data.replyTo.sender!}
|
||||
</@dt_entry>
|
||||
<@dt_entry width=100 title="To">
|
||||
${data.replyTo.receiver!}
|
||||
</@dt_entry>
|
||||
<@dt_entry width=100 title="Received">
|
||||
<@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"> </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>
|
|
@ -0,0 +1,9 @@
|
|||
<#macro render><@page title="Server off-line">
|
||||
<p>The game server could not be reached.</p>
|
||||
<p>
|
||||
It may be under maintenance, or it may have crashed. In any case, the staff will receive a notification of the problem.
|
||||
</p>
|
||||
<p>
|
||||
Sorry for the inconvenience.
|
||||
</p>
|
||||
</@page></#macro>
|
|
@ -0,0 +1,118 @@
|
|||
<#macro render>
|
||||
<@page title="Empire">
|
||||
|
||||
<#assign ov = data.overview >
|
||||
<#assign rs = data.research >
|
||||
|
||||
<@tabs>
|
||||
|
||||
<@tab id="overview" title="Overview">
|
||||
<@left_column>
|
||||
|
||||
<#assign nplanets = data.page.planets?size>
|
||||
<@dt_main title="Fleets & planets">
|
||||
<@dt_entry title="Number of planets">${nplanets?string(",##0")}</@dt_entry>
|
||||
<@dt_entry title="Total population">${ov.population?string(",##0")}</@dt_entry>
|
||||
<@dt_entry title="Average happiness"><@happiness value=data.overview.avgHappiness /></@dt_entry>
|
||||
<@dt_entry title="Total fleet power">${ov.fleetPower?string(",##0")}</@dt_entry>
|
||||
</@dt_main>
|
||||
|
||||
<@dt_main title="Battles">
|
||||
<#if data.battles?size gt 0>
|
||||
<@dt_status>We are involved in the following battle(s):</@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>We are not involved in any battle at the moment.</@dt_status>
|
||||
</#if>
|
||||
<@dt_status>
|
||||
<a href="battles">View all battles</a>
|
||||
</@dt_status>
|
||||
</@dt_main>
|
||||
|
||||
</@left_column>
|
||||
|
||||
<@right_column>
|
||||
|
||||
<@dt_main title="Money">
|
||||
<@dt_entry title="Cash reserves">${data.page.cash?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Planet income">${ov.planetIncome?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Planet upkeep">${ov.planetUpkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Fleet upkeep">${ov.fleetUpkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Investments">${ov.investment?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
</@dt_main>
|
||||
|
||||
<@dt_main title="Messages">
|
||||
<@dt_status>
|
||||
<#if ov.newMessages == 0>
|
||||
No new messages.
|
||||
<#elseif ov.newMessages == 1>
|
||||
You have <a href="messages">a new message</a>.
|
||||
<#else>
|
||||
You have <a href="messages">${ov.newMessages} new messages</a>.
|
||||
</#if>
|
||||
</@dt_status>
|
||||
<@dt_status>
|
||||
<a href="compose-message">Compose a message</a>
|
||||
</@dt_status>
|
||||
</@dt_main>
|
||||
|
||||
</@right_column>
|
||||
</@tab>
|
||||
|
||||
<@tab id="research" title="Research">
|
||||
<#if rs?size == 0>
|
||||
<p>Our scientists are still settling in.</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>No usable technologies.</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>
|
||||
Current research: <strong>${research.current.name?xhtml}</strong>
|
||||
<p>
|
||||
${research.current.description?xhtml}
|
||||
</p>
|
||||
</@dt_status>
|
||||
<@dt_entry title="Progress">${research.current.researched}%</@dt_entry>
|
||||
<#if research.current.cost?has_content>
|
||||
<@dt_entry title="Cost">${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="Implement technology" /></div>
|
||||
</form></@dt_status>
|
||||
</#if>
|
||||
</#if>
|
||||
</@dt_main>
|
||||
</@right_column>
|
||||
</#if>
|
||||
|
||||
</div>
|
||||
</#list>
|
||||
</@tab>
|
||||
|
||||
</@tabs>
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,69 @@
|
|||
<#macro render>
|
||||
<@page title="Password recovery">
|
||||
<@tabs>
|
||||
|
||||
<@tab title="Request password recovery" id="request-recovery">
|
||||
<#if data.sent?has_content>
|
||||
<p>An email has been sent to your address, <strong>${data.mail?xhtml}</strong></p>
|
||||
<p>It contains a one-time authentication code you can use to change your password.</p>
|
||||
<p>The authentication code will expire in one hour, and you will not be able to request another code until it expires.</p>
|
||||
<#else>
|
||||
|
||||
<@form name="req-pwd-recovery" action="request-password-recovery">
|
||||
<#switch data.status!>
|
||||
<#case "INVALID_INPUT">
|
||||
<@form_error>Invalid e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "ACCOUNT_NOT_FOUND">
|
||||
<@form_error>Unknown e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "ACCOUNT_STATUS">
|
||||
<@form_error>The account's status prevents password recovery.</@form_error>
|
||||
<#break>
|
||||
<#case "RECOVERY_IN_PROGRESS">
|
||||
<@form_error>A password recovery request has been made within the last hour.</@form_error>
|
||||
<#break>
|
||||
<#case "MAIL_ERROR">
|
||||
<@form_error>Unable to send e-mail.</@form_error>
|
||||
<#break>
|
||||
</#switch>
|
||||
<@form_text label="E-mail address" name="mail" id="req-mail" value=data.mail! maxLength=128 />
|
||||
<@form_submit label="Request password recovery" extraClass="" />
|
||||
</@form>
|
||||
|
||||
</#if>
|
||||
</@tab>
|
||||
|
||||
<@tab id="confirm-recovery" title="Confirm password recovery">
|
||||
<@form name="conf-pwd-recovery" action="confirm-password-recovery" hash="confirm-recovery">
|
||||
<#switch data.cStatus!>
|
||||
<#case "INVALID_MAIL">
|
||||
<@form_error>Invalid e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "NOT_FOUND">
|
||||
<@form_error>Unknown e-mail address or code.</@form_error>
|
||||
<#break>
|
||||
<#case "ACCOUNT_STATUS">
|
||||
<@form_error>The account's status prevents password recovery.</@form_error>
|
||||
<#break>
|
||||
<#case "WEAK_PASSWORD">
|
||||
<@form_error>New password too weak.</@form_error>
|
||||
<#break>
|
||||
<#case "MISMATCH_PASSWORD">
|
||||
<@form_error>Password and password confirmation did not match.</@form_error>
|
||||
<#break>
|
||||
<#case "PROHIBITED">
|
||||
<@form_error>You may not use this password.</@form_error>
|
||||
<#break>
|
||||
</#switch>
|
||||
<@form_text label="E-mail address" name="mail" id="conf-mail" value=data.cMail! maxLength=128 />
|
||||
<@form_text label="Confirmation code" name="code" id="conf-code" value=data.cCode! maxLength=64 />
|
||||
<@form_pwd label="New password" name="password" id="conf-pwd1" />
|
||||
<@form_pwd label="Confirm new password" name="passwordConfirm" id="conf-pwd2" />
|
||||
<@form_submit label="Set new password" />
|
||||
</@form>
|
||||
</@tab>
|
||||
|
||||
</@tabs>
|
||||
</@page>
|
||||
</#macro>
|
329
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/planet.ftl
Normal file
329
legacyworlds-web-main/Content/Raw/WEB-INF/fm/en/types/planet.ftl
Normal file
|
@ -0,0 +1,329 @@
|
|||
<#macro render>
|
||||
<#if ! data.basic?has_content>
|
||||
<@page title="Planet not found">
|
||||
<p>This planet does not exist.</p>
|
||||
</@page>
|
||||
<#return>
|
||||
</#if>
|
||||
<@page title="Planet ${data.basic.name}">
|
||||
<#if data.ownershipError>
|
||||
<@standalone_error>Unfortunately, we no longer control this planet.</@standalone_error>
|
||||
</#if>
|
||||
|
||||
<@tabs>
|
||||
|
||||
<@tab id="general" title="General">
|
||||
<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="Coordinates">(<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="Stationary defence"><strong>${data.orbit.defencePoints?string(",##0")}</strong></@dt_entry>
|
||||
</#if>
|
||||
|
||||
<#if data.own?has_content>
|
||||
<@dt_entry title="Happiness"><@happiness value=data.own.happiness /> <@happiness_change value=data.own.hChange /></@dt_entry>
|
||||
<@dt_entry title="Income"><strong>${data.own.income?string(",##0")}</strong> <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Upkeep"><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="Own fleet power"><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="Friendly fleet power"><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="Hostile fleet power"><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">View battle</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>Please specify a name.</@standalone_error><#break>
|
||||
<#case "INVALID"><@standalone_error>Invalid planet name.</@standalone_error><#break>
|
||||
<#case "UNAVAILABLE"><@standalone_error>This planet name already exists.</@standalone_error><#break>
|
||||
<#case "BANNED"><@standalone_error>This name is banned.</@standalone_error><#break>
|
||||
</#switch>
|
||||
<@lineform action="planet-${data.id}-rename" name="rename" hash="general">
|
||||
<#if data.renamingTo?has_content>
|
||||
<#assign newName = data.renamingTo!>
|
||||
</#if>
|
||||
Rename planet to <@ff_text name="name" id="rename-name" maxLength=20 size=21 value=newName! />
|
||||
<@ff_submit label="Rename planet" />
|
||||
</@lineform>
|
||||
</#if>
|
||||
|
||||
<#if data.own.status.abandonPossible && data.page.special! != 'v'>
|
||||
<@lineform action="planet-${data.id}-abandon" name="abandon" hash="general">
|
||||
<@ff_submit label="Abandon planet" />
|
||||
</@lineform>
|
||||
<#elseif data.own.status.abandonTime gt 0>
|
||||
<@lineform action="planet-${data.id}-cancel-abandon" name="abandon" hash="general">
|
||||
Abandoning planet in <strong><@duration rTime=data.own.status.abandonTime gTime=data.own.status.abandonGameTime /></strong>
|
||||
|
||||
<#if data.page.special! != 'v'>
|
||||
<@ff_submit label="Cancel" />
|
||||
</#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="Buildings">
|
||||
|
||||
<#if data.orbit.buildings?size gt 0>
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Building</@lv_column>
|
||||
<@lv_column width=50 centered=true>Amount</@lv_column>
|
||||
<#if data.own?has_content>
|
||||
<@lv_column width=150 centered=true>Production</@lv_column>
|
||||
<@lv_column width=50 centered=true>Jobs</@lv_column>
|
||||
<@lv_column width=100 centered=true>Upkeep</@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">ind. production<#break>
|
||||
<#case "DEF">defence<#break>
|
||||
<#case "WORK">mil. output<#break>
|
||||
<#case "POP">growth<#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>No buildings on this planet.</@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">
|
||||
Build <@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="(building type)" />
|
||||
<#list data.own.bBuildings as building>
|
||||
<@form_option value=building.id text=building.name />
|
||||
</#list>
|
||||
</@ff_select>
|
||||
<@ff_submit label="Add to queue" />
|
||||
</@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="Cost">${building.cost?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Upkeep">${building.upkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Time to build">
|
||||
<#if building.time?has_content>
|
||||
<@duration rTime=building.time gTime=building.gameTime />
|
||||
<#else>
|
||||
<span style="color:#ffafaf;font-weight:bold" title="Don't even try.">N/A</span>
|
||||
</#if>
|
||||
</@dt_entry>
|
||||
<@dt_entry title="Jobs">${building.workers?string(",##0")}</@dt_entry>
|
||||
<@dt_entry title="Production">${building.output?string(",##0")}
|
||||
<#switch building.prodType>
|
||||
<#case "CASH">ind. production<#break>
|
||||
<#case "DEF">defence<#break>
|
||||
<#case "WORK">mil. output<#break>
|
||||
<#case "POP">growth<#break>
|
||||
</#switch>
|
||||
</@dt_entry>
|
||||
</@dt_main>
|
||||
</div>
|
||||
</#list>
|
||||
</div>
|
||||
|
||||
<#if data.orbit.buildings?size gt 0>
|
||||
<#if data.destructionFailed!false>
|
||||
<@standalone_error>Trying to destroy too many buildings</@standalone_error>
|
||||
</#if>
|
||||
<@lineform name="destroy" action="planet-${data.id}-destroy" hash="buildings">
|
||||
Destroy <@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="(building type)" />
|
||||
<#list data.orbit.buildings as building>
|
||||
<@form_option value=building.id text=building.name />
|
||||
</#list>
|
||||
</@ff_select>
|
||||
<@ff_submit label="Add to queue" />
|
||||
</@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">
|
||||
Remove all items from the build queue (investments will be lost)
|
||||
<@ff_submit label="Flush" />
|
||||
</@lineform>
|
||||
</#if>
|
||||
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width=80 centered=true>Amount</@lv_column>
|
||||
<@lv_column width="x">Nature</@lv_column>
|
||||
<@lv_column width=200 centered=true>Time</@lv_column>
|
||||
<@lv_column width=70 centered=true>Investment</@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="The human race will be long gone when this finishes building.">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="Shipyards">
|
||||
<#if data.page.special! != 'v'>
|
||||
<#if data.own.milQueue.appendPossible>
|
||||
<@lineform name="build-mil" action="planet-${data.id}-build-mil" hash="ships">
|
||||
Build <@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="(ship type)" />
|
||||
<#list data.own.bShips as ship>
|
||||
<@form_option value=ship.id text=ship.name />
|
||||
</#list>
|
||||
</@ff_select>
|
||||
<@ff_submit label="Add to queue" />
|
||||
</@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="Cost">${ship.cost?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Upkeep">${ship.upkeep?string(",##0")} <@abbr_bgc/></@dt_entry>
|
||||
<@dt_entry title="Time to build">
|
||||
<#if ship.time?has_content>
|
||||
<@duration rTime=ship.time gTime=ship.gameTime />
|
||||
<#else>
|
||||
<span style="color:#ffafaf;font-weight:bold" title="Don't even try.">N/A</span>
|
||||
</#if>
|
||||
</@dt_entry>
|
||||
<@dt_entry title="Power">${ship.power?string(",##0")}</@dt_entry>
|
||||
<@dt_entry abbr="OOFT" title="Orbit-to-orbit flight time">
|
||||
<@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">
|
||||
Remove all items from the build queue (investments will be lost)
|
||||
<@ff_submit label="Flush" />
|
||||
</@lineform>
|
||||
</#if>
|
||||
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width=80 centered=true>Amount</@lv_column>
|
||||
<@lv_column width="x">Ship</@lv_column>
|
||||
<@lv_column width=200 centered=true>Time</@lv_column>
|
||||
<@lv_column width=70 centered=true>Investment</@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="The human race will be long gone when this finishes building.">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>
|
|
@ -0,0 +1,167 @@
|
|||
<#macro render>
|
||||
<@page title="Planets">
|
||||
<#assign pl = data.planets>
|
||||
<#if pl?size == 0>
|
||||
<p>We no longer own any planet.</p>
|
||||
<p><a href="get-planet">Get a new planet?</a></p>
|
||||
<#else>
|
||||
|
||||
<@tabs>
|
||||
|
||||
<@tab id="general" title="General">
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Name</@lv_column>
|
||||
<@lv_column width=90 centered=true>Coordinates</@lv_column>
|
||||
<@lv_column width=90 centered=true>Happiness</@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="Economy">
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Name</@lv_column>
|
||||
<@lv_column width=110 right=true>Income</@lv_column>
|
||||
<@lv_column width=110 right=true>Upkeep</@lv_column>
|
||||
<@lv_column width=110 right=true>Profit</@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">Name</@lv_column>
|
||||
<@lv_column width=90 right=true>Military</@lv_column>
|
||||
<@lv_column width=90 right=true>Industrial</@lv_column>
|
||||
<@lv_column width=90 right=true>Growth inc.</@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">Name</@lv_column>
|
||||
<@lv_column width=200 centered=true>Current queue item</@lv_column>
|
||||
<@lv_column width=90 right=true>Investment</@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="Shipyards">
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Name</@lv_column>
|
||||
<@lv_column width=200 centered=true>Current queue item</@lv_column>
|
||||
<@lv_column width=90 right=true>Investment</@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="Military">
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Name</@lv_column>
|
||||
<@lv_column width=90 right=true>Stationary</@lv_column>
|
||||
<@lv_column width=90 right=true>Own fleets</@lv_column>
|
||||
<@lv_column width=90 right=true>Friendly</@lv_column>
|
||||
<@lv_column width=90 right=true>Hostile</@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>
|
|
@ -0,0 +1,24 @@
|
|||
<#macro render>
|
||||
<#if data.success>
|
||||
<@page title="Account re-activation">
|
||||
<p>
|
||||
Your account was successfully re-activated. The confirmation code was sent to <strong>${data.address}</strong>.
|
||||
</p>
|
||||
<p>
|
||||
One you've received this e-mail, please proceed to the <a href="validate-account">confirmation page</a>.
|
||||
</p>
|
||||
</@page>
|
||||
<#else>
|
||||
<@page title="Account re-activation failed">
|
||||
<p>
|
||||
An error occurred while trying to send an e-mail to your address, <strong>${data.address}</strong>.
|
||||
</p>
|
||||
<p>
|
||||
If your address is still valid, you might want to wait a bit and then <a href="reactivate.action">try again</a>.
|
||||
</p>
|
||||
<p>
|
||||
Or the server might be on crack, in which case you should drop <a href="mailto:staff@legacyworlds.com">the staff</a> a line.
|
||||
</p>
|
||||
</@page>
|
||||
</#if>
|
||||
</#macro>
|
|
@ -0,0 +1,56 @@
|
|||
<#macro render>
|
||||
<@page title="Register">
|
||||
<@form name="register" action="register">
|
||||
<#switch data.mailError!"">
|
||||
<#case "EMPTY">
|
||||
<@form_error>Empty e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "INVALID">
|
||||
<@form_error>Invalid e-mail address.</@form_error>
|
||||
<#break>
|
||||
<#case "IN_USE">
|
||||
<@form_error>This e-mail address is already associated with an account.</@form_error>
|
||||
<#break>
|
||||
<#case "SEND_FAIL">
|
||||
<@form_error>Unable to send confirmation code to this address.</@form_error>
|
||||
<#break>
|
||||
<#case "MISMATCH">
|
||||
<@form_error>E-mail address field and confirmation field do not match.</@form_error>
|
||||
<#break>
|
||||
<#default>
|
||||
<@form_extra>The e-mail address <em>MUST</em> exist.</@form_extra>
|
||||
</#switch>
|
||||
<@form_text label="E-mail address" maxLength=128 name="mail" value=data.mail! />
|
||||
<@form_text label="E-mail address (confirm)" maxLength=128 name="mailConfirm" value=data.mail! />
|
||||
|
||||
<#switch data.passwordError!"">
|
||||
<#case "EMPTY">
|
||||
<@form_error>Empty password.</@form_error>
|
||||
<#break>
|
||||
<#case "TOO_WEAK">
|
||||
<@form_error>This password is too weak.</@form_error>
|
||||
<#break>
|
||||
<#case "MISMATCH">
|
||||
<@form_error>Password field and confirmation field do not match.</@form_error>
|
||||
<#break>
|
||||
<#default>
|
||||
<@form_extra>At least 6 characters, containing both text and numbers. Bonus points for special characters, spaces, and extremely long passwords.</@form_extra>
|
||||
</#switch>
|
||||
<@form_pwd label="Password" name="password" />
|
||||
<@form_pwd label="Password (confirm)" name="passwordConfirm" />
|
||||
|
||||
<@form_select name="language" label="Language">
|
||||
<#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="Register" />
|
||||
</@form>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,13 @@
|
|||
<#macro render>
|
||||
<@page title="Accound created">
|
||||
<p>
|
||||
Your account has been successfully created.
|
||||
</p>
|
||||
<p>
|
||||
An e-mail containing its confirmation code has been sent to your address, <strong>${data.mail?xhtml}</strong>.
|
||||
</p>
|
||||
<p>
|
||||
Once you have received it, you will be able to log in and confirm your account.
|
||||
</p>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1,40 @@
|
|||
<#macro render>
|
||||
<@page title="Split fleet">
|
||||
<form action="split-fleet.action" method="post">
|
||||
<div>
|
||||
<input type="hidden" name="fleet" value="${data.initialFleet.id}" />
|
||||
<#if data.shipsError>
|
||||
<@standalone_error>Invalid amount(s) of ships or resulting fleets</@standalone_error>
|
||||
</#if>
|
||||
<@listview>
|
||||
<@lv_line headers=true>
|
||||
<@lv_column width="x">Ship type</@lv_column>
|
||||
<@lv_column width=150>Initial amount</@lv_column>
|
||||
<@lv_column width=150>Amount in new fleet</@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>Invalid fleet name.</@standalone_error>
|
||||
</#if>
|
||||
<p>
|
||||
Create
|
||||
<@ff_text name="nFleets" id="n-fleets" value=data.nFleets size=3 maxLength=2 />
|
||||
new fleet(s) named
|
||||
<@ff_text name="name" id="name" value=data.name size=20 maxLength=40 />
|
||||
|
||||
<@ff_submit label="Ok" />
|
||||
<@ff_submit label="Cancel" name="cancel" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1 @@
|
|||
<#macro render><#if dataType == "HashMap"><#include "../static/${data.name}.ftl" /><#else><#include "../static/${data}.ftl" /></#if></#macro>
|
|
@ -0,0 +1,50 @@
|
|||
<#macro render>
|
||||
<@page title="Account validation">
|
||||
<@form action="validation" name="validation">
|
||||
<@form_extra>
|
||||
Before you can proceed any further, you need to validate your account using the confirmation code that was e-mailed to you.<br/>
|
||||
You will also be able to select the names of your empire and first planet.
|
||||
</@form_extra>
|
||||
|
||||
<#if data.wrongToken>
|
||||
<@form_error>Incorrect confirmation code.</@form_error>
|
||||
</#if>
|
||||
<@form_text label="Confirmation code" value=data.token! name="token" maxLength=64 />
|
||||
|
||||
<#switch data.empireError!>
|
||||
<#case "EMPTY"><@form_error>Please select an empire name.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Invalid empire name.</@form_error><#break>
|
||||
<#case "UNAVAILABLE"><@form_error>This empire name is unavailable.</@form_error><#break>
|
||||
<#case "BANNED"><@form_error>This empire name has been banned.</@form_error><#break>
|
||||
</#switch>
|
||||
|
||||
<#if data.previousEmpires?size == 0>
|
||||
<@form_text label="Empire name" 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="Re-use empire name">
|
||||
<#list data.previousEmpires as oldName>
|
||||
<@form_option text=oldName selected=( oldName == data.empire! ) />
|
||||
</#list>
|
||||
</@form_select>
|
||||
|
||||
<@form_extra>Leave this blank if you want to re-use a previous empire name.</@form_extra>
|
||||
<#if ! data.previousEmpires?seq_contains(data.empire!)>
|
||||
<#assign empValue = data.empire!>
|
||||
</#if>
|
||||
<@form_text name="empire" label="New empire name" value=empValue! maxLength=20 />
|
||||
</#if>
|
||||
|
||||
|
||||
<#switch data.planetError!>
|
||||
<#case "EMPTY"><@form_error>Please select a planet name.</@form_error><#break>
|
||||
<#case "INVALID"><@form_error>Invalid planet name.</@form_error><#break>
|
||||
<#case "UNAVAILABLE"><@form_error>This planet name is unavailable.</@form_error><#break>
|
||||
<#case "BANNED"><@form_error>This planet name has been banned.</@form_error><#break>
|
||||
</#switch>
|
||||
<@form_text name="planet" label="Planet name" value=data.planet! maxLength=20 />
|
||||
|
||||
<@form_submit label="Join the game" />
|
||||
</@form>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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> </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>
|
|
@ -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>
|
|
@ -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>
|
66
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/game.ftl
Normal file
66
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/game.ftl
Normal 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>
|
|
@ -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> </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> </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> </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> </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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
116
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/static/rules.ftl
Normal file
116
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/static/rules.ftl
Normal 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> </p>
|
||||
|
||||
<h3>Finances & 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> </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> </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> </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> </p>
|
||||
|
||||
</@page>
|
|
@ -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> </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> </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> </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>
|
|
@ -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>
|
|
@ -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> </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> </@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>
|
||||
|
||||
<#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>
|
|
@ -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>
|
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/battle.ftl
Normal file
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/battle.ftl
Normal 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>
|
||||
<<
|
||||
<#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>
|
||||
>>
|
||||
<#if disp.next?has_content>
|
||||
</a>
|
||||
</#if>
|
||||
</td>
|
||||
<td style="width: 30px;text-align: left">
|
||||
<a href="battle-${id?string('#')}-latest">>>></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</#macro>
|
||||
<#macro render_list_entry mode record type>
|
||||
<tr class="${mode}-fleet ${type} empire-entry">
|
||||
<td style="width:16px"> </td>
|
||||
<td style="width:16px" class="ships-expander" title="Voir/cacher <#if type = "planet">les bâtiments<#else>les vaisseaux</#if>"> </td>
|
||||
<td style="width:16px"> </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"> </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"> </td>
|
||||
<td style="width:16px" class="ships-expander" title="Voir/cacher les vaisseaux"> </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"> </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"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th style="width:16px"> </th>
|
||||
<th> </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> </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"> </th>
|
||||
<th style="width:170px;font-size: 1px"> </th>
|
||||
<th style="font-size: 1px"> </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"> </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"> </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> </p>
|
||||
<@render_fleets fData=data.battle.ships />
|
||||
<@render_history hData=data.battle.history />
|
||||
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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>
|
||||
<<
|
||||
<#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>
|
||||
>>
|
||||
<#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> </@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>
|
|
@ -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}&first=${current - count}">
|
||||
</#if>
|
||||
<<
|
||||
<#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}&first=${current + count}">
|
||||
</#if>
|
||||
>>
|
||||
<#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'}&own=${ownOnly}" >
|
||||
<@page title="Suivi des bugs">
|
||||
<#-- Tabs -->
|
||||
<@bugTabs selected="bugsList" qString="${qString}&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}&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>
|
||||
</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>
|
|
@ -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'}&own=${ownOnly}" >
|
||||
<@page title="Rapporter un bug">
|
||||
<@bugTabs selected="bugsReport" qString="${qString}&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>
|
|
@ -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>
|
|
@ -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'}&own=${ownOnly}" >
|
||||
<@page title="Bug #${data.report.reportId?string(',##0')} - ${data.report.title}" hidePlanets=true>
|
||||
<#-- Tabs -->
|
||||
<@bugTabs selected="" qString="${qString}&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>
|
|
@ -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>
|
|
@ -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> </@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>
|
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/fleets.ftl
Normal file
261
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/fleets.ftl
Normal 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> </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>
|
||||
|
||||
</#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"> </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> </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>
|
||||
|
||||
</#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"> </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" />
|
||||
|
||||
<input type="submit" class="input" name="move" value="Déplacer" title="Déplacer ou rediriger les flottes sélectionner si elles sont disponibles." />
|
||||
|
||||
<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." />
|
||||
|
||||
<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." />
|
||||
|
||||
<input type="submit" class="input" name="disband" value="Dissoudre" title="Détruire les flottes sélectionnées." />
|
||||
</div>
|
||||
</#if>
|
||||
</form>
|
||||
</#if>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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"> </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>
|
||||
|
||||
<@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 />
|
||||
|
||||
<@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>?
|
||||
|
||||
<@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?
|
||||
|
||||
<@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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
<<
|
||||
<#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>
|
||||
>>
|
||||
<#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"> </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"> </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>
|
|
@ -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>
|
||||
<<
|
||||
<#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>
|
||||
>>
|
||||
<#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"> </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>
|
|
@ -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>
|
|
@ -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> </td><td> </td></tr>
|
||||
<#elseif data.empires?size % 3 == 2>
|
||||
<td> </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> </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> </td>
|
||||
<td>
|
||||
<#list admin.privileges as priv>
|
||||
<abbr title="${priv.description?xhtml}">${priv}</abbr>
|
||||
</#list>
|
||||
</td>
|
||||
</@lv_line>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
</#list>
|
||||
</@listview>
|
||||
</@tab>
|
||||
</#if>
|
||||
|
||||
</@tabs>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -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> </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"> </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"> </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>
|
|
@ -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>
|
|
@ -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 & 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>
|
|
@ -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>
|
329
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/planet.ftl
Normal file
329
legacyworlds-web-main/Content/Raw/WEB-INF/fm/fr/types/planet.ftl
Normal 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>
|
||||
|
||||
<#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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 />
|
||||
|
||||
<@ff_submit label="Ok" />
|
||||
<@ff_submit label="Annuler" name="cancel" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</@page>
|
||||
</#macro>
|
|
@ -0,0 +1 @@
|
|||
<#macro render><#if dataType == "HashMap"><#include "../static/${data.name}.ftl" /><#else><#include "../static/${data}.ftl" /></#if></#macro>
|
|
@ -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>
|
|
@ -0,0 +1,18 @@
|
|||
<#macro left_column width=0>
|
||||
<#if width gt 0>
|
||||
<div class="left-column" style="width: ${width}px">
|
||||
<#else>
|
||||
<div class="column left-column">
|
||||
</#if>
|
||||
<#nested>
|
||||
</div>
|
||||
</#macro>
|
||||
<#macro right_column width=0>
|
||||
<#if width gt 0>
|
||||
<div style="width: ${width}px; padding: 0 0 0 ${width}px">
|
||||
<#else>
|
||||
<div class="column right-column">
|
||||
</#if>
|
||||
<#nested>
|
||||
</div>
|
||||
</#macro>
|
|
@ -0,0 +1,20 @@
|
|||
<#macro dt_main title="">
|
||||
<table class="data-table">
|
||||
<#if title != "">
|
||||
<tr><th colspan="2" class="title">${title}</th></tr>
|
||||
</#if>
|
||||
<#nested>
|
||||
</table>
|
||||
</#macro>
|
||||
<#macro dt_entry title abbr="" width=0>
|
||||
<tr>
|
||||
<th<#if width gt 0> style="width: ${width}px"</#if>><#if title == ""> <#else><#if abbr != ""><abbr title="${title?xhtml}">${abbr?xhtml}</abbr><#else>${title?xhtml}</#if>:</#if></th>
|
||||
<td><#nested></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro dt_blank>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
</#macro>
|
||||
<#macro dt_status>
|
||||
<tr><td colspan="2" class="status"><#nested></td></tr>
|
||||
</#macro>
|
|
@ -0,0 +1,20 @@
|
|||
<#macro ff_text name value id="" maxLength=0 size=0>
|
||||
<input class="input" id="ff-${id?xhtml}" type="text" value="${value?xhtml}" name="${name?xhtml}" <#if maxLength gt 0>maxlength="${maxLength?string}"</#if> <#if size gt 0>size="${size?string}"</#if> />
|
||||
</#macro>
|
||||
<#macro ff_pwd id name>
|
||||
<input class="input" id="ff-${id?xhtml}" type="password" name="${name?xhtml}" />
|
||||
</#macro>
|
||||
<#macro ff_select id name style="">
|
||||
<select class="input" name="${name?xhtml}" id="ff-${id?xhtml}" <#if style != "">style="${style}"</#if>>
|
||||
<#nested>
|
||||
</select>
|
||||
</#macro>
|
||||
<#macro ff_checkbox id name value checked=false>
|
||||
<input class="input" type="checkbox" name="${name?xhtml}" id="ff-${id?xhtml}" value="${value?xhtml}" <#if checked>checked="checked"</#if> />
|
||||
</#macro>
|
||||
<#macro form_option text="" selected=false value="">
|
||||
<option<#if value?string != ""> value="${value?xhtml}"</#if><#if selected> selected="selected"</#if>><#if text == ""><#nested><#else>${text?xhtml}</#if></option>
|
||||
</#macro>
|
||||
<#macro ff_submit label extraClass="" name="" style="">
|
||||
<input class="input<#if extraClass?has_content> ${extraClass}</#if>" <#if name?has_content>name="${name?xhtml}"</#if> type="submit" value="${label?xhtml}" <#if style != "">style="${style}"</#if> />
|
||||
</#macro>
|
98
legacyworlds-web-main/Content/Raw/WEB-INF/fm/layout/form.ftl
Normal file
98
legacyworlds-web-main/Content/Raw/WEB-INF/fm/layout/form.ftl
Normal file
|
@ -0,0 +1,98 @@
|
|||
<#macro form action name="" hash="">
|
||||
<div class="form-container">
|
||||
<form action="${action?url}.action<#if hash != "">#${hash?url}</#if>" method="post">
|
||||
<table>
|
||||
<#nested>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</#macro>
|
||||
<#macro form_field_line label id>
|
||||
<tr class="form-field">
|
||||
<th><label for="ff-${id?xhtml}">${label?xhtml}:</label></th>
|
||||
<td><#nested></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro form_text label name value id="" maxLength=0 multiline=false>
|
||||
<#if id = "">
|
||||
<#local id = name>
|
||||
</#if>
|
||||
<@form_field_line label=label id=id>
|
||||
<#if multiline>
|
||||
<textarea class="input" rows="${maxLength}" id="ff-${id}" name="${name}" cols="60" style="height:auto">${value?xhtml}</textarea>
|
||||
<#else>
|
||||
<@ff_text id=id name=name maxLength=maxLenth value=value />
|
||||
</#if>
|
||||
</@form_field_line>
|
||||
</#macro>
|
||||
<#macro form_checkbox label name value id="" checked=false>
|
||||
<#if id = "">
|
||||
<#local id = name>
|
||||
</#if>
|
||||
<@form_field_line label=label id=id>
|
||||
<@ff_checkbox id=id name=name value=value checked=checked />
|
||||
</@form_field_line>
|
||||
</#macro>
|
||||
<#macro form_pwd label name id="">
|
||||
<#if id = "">
|
||||
<#local id = name>
|
||||
</#if>
|
||||
<@form_field_line label=label id=id>
|
||||
<@ff_pwd id=id name=name />
|
||||
</@form_field_line>
|
||||
</#macro>
|
||||
<#macro form_select label name id="">
|
||||
<#if id = "">
|
||||
<#local id = name>
|
||||
</#if>
|
||||
<@form_field_line label=label id=id>
|
||||
<@ff_select id=id name=name>
|
||||
<#nested>
|
||||
</@ff_select>
|
||||
</@form_field_line>
|
||||
</#macro>
|
||||
<#macro form_part title>
|
||||
<tr class="form-part">
|
||||
<th colspan="2">${title}</th>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro form_extra>
|
||||
<tr class="form-extra">
|
||||
<td colspan="2"><#nested></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro form_error>
|
||||
<tr class="form-error">
|
||||
<td colspan="2"><#nested></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro standalone_error>
|
||||
<div class="form-container">
|
||||
<table>
|
||||
<tr class="form-error">
|
||||
<td colspan="2"><#nested></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</#macro>
|
||||
<#macro form_submit label extraClass="">
|
||||
<tr class="form-submit">
|
||||
<th> </th>
|
||||
<td><@ff_submit label=label extraClass=extraClass /></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro form_extended_submit label extraClass="">
|
||||
<tr class="form-submit">
|
||||
<th> </th>
|
||||
<td><@ff_submit label=label extraClass=extraClass /><#nested /></td>
|
||||
</tr>
|
||||
</#macro>
|
||||
<#macro lineform action name="" hash="">
|
||||
<div class="form-container">
|
||||
<form action="${action?url}.action<#if hash != "">#${hash?url}</#if>" method="post">
|
||||
<table>
|
||||
<tr><td><#nested></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</#macro>
|
|
@ -0,0 +1,20 @@
|
|||
<#macro happiness value>
|
||||
<#if value lt 26>
|
||||
<#assign colour = "#ffafaf">
|
||||
<#elseif value lt 51>
|
||||
<#assign colour = "#ffffaf">
|
||||
<#elseif value lt 76>
|
||||
<#assign colour = "#afafff">
|
||||
<#else>
|
||||
<#assign colour = "#afffaf">
|
||||
</#if>
|
||||
<strong style="color: ${colour}">${value}%</strong>
|
||||
</#macro>
|
||||
<#macro happiness_change value>
|
||||
<#switch data.own.hChange>
|
||||
<#case -2>--<#break>
|
||||
<#case -1>-<#break>
|
||||
<#case 1>+<#break>
|
||||
<#case 2>++<#break>
|
||||
</#switch>
|
||||
</#macro>
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue