Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
3.9 KiB

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<title>OpenRS2 Archive</title>
<link rel="stylesheet" href="/webjars/bootstrap/css/bootstrap.min.css" />
</head>
<body>
<nav class="navbar navbar-dark bg-dark mb-4">
<div class="container">
<a class="navbar-brand" href="/">OpenRS2 Archive</a>
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link active" href="/caches">Caches</a>
</li>
</ul>
</div>
</nav>
<main class="container">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead class="thead-dark">
<tr>
<th>Game</th>
<th>Build</th>
<th>Timestamp</th>
<th>Name</th>
<th>Indexes</th>
<th>Groups</th>
<th>Keys<sup><a href="#empty-locs">1</a></sup></th>
<th>Download</th>
</tr>
</thead>
<tbody>
<!--/*@thymesVar id="caches" type="java.util.List<org.openrs2.archive.cache.CacheExporter.Cache>"*/-->
<tr th:each="cache : ${caches}">
<td th:text="${cache.game}">runescape</td>
<td th:text="${cache.build}" class="text-right">550</td>
<td>
<span th:text="${#temporals.format(cache.timestamp, 'yyyy-MM-dd')}"></span>
<br />
<span th:text="${#temporals.format(cache.timestamp, 'HH:mm:ss')}"></span>
</td>
<td th:text="${cache.name}"></td>
<td th:classappend="${cache.archiveStats}? (${cache.archiveStats.allIndexesValid}? 'table-success' : 'table-danger')" class="text-right">
<span th:text="${cache.archiveStats}? ${cache.archiveStats.validIndexes} + '&nbsp;/&nbsp;' + ${cache.archiveStats.indexes}"></span>
<br />
<span th:text="${cache.archiveStats}? '(' + ${#numbers.formatPercent(cache.archiveStats.validIndexesFraction, 1, 2)} + ')' : 'Calculating...'"></span>
</td>
<td th:classappend="${cache.groupStats}? (${cache.groupStats.allGroupsValid}? 'table-success' : 'table-warning')" class="text-right">
<span th:text="${cache.groupStats}? ${#numbers.formatInteger(cache.groupStats.validGroups, 1, 'COMMA')} + '&nbsp;/&nbsp;' + ${#numbers.formatInteger(cache.groupStats.groups, 1, 'COMMA')}"></span>
<br />
<span th:text="${cache.groupStats}? '(' + ${#numbers.formatPercent(cache.groupStats.validGroupsFraction, 1, 2)} + ')' : 'Calculating...'"></span>
</td>
<td th:classappend="${cache.groupStats}? (${cache.groupStats.allKeysValid}? 'table-success' : 'table-warning')" class="text-right">
<span th:text="${cache.groupStats}? ${#numbers.formatInteger(cache.groupStats.validKeys, 1, 'COMMA')} + '&nbsp;/&nbsp;' + ${#numbers.formatInteger(cache.groupStats.keys, 1, 'COMMA')}"></span>
<br />
<span th:text="${cache.groupStats}? '(' + ${#numbers.formatPercent(cache.groupStats.validKeysFraction, 1, 2)} + ')' : 'Calculating...'"></span>
</td>
<td>
<div class="btn-group">
<a th:href="${'/caches/' + cache.id + '.zip'}"
class="btn btn-primary btn-sm">Cache</a>
<a th:href="${'/caches/' + cache.id + '.json'}"
class="btn btn-primary btn-sm">Keys</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>
<sup id="empty-locs">1</sup> Map squares in the middle of the
sea are unreachable by normal players, making it impossible to
obtain the keys for their loc groups. However, the loc groups
for these map squares are empty. As XTEA does not hide the
length of the compressed data, this service infers which
encrypted loc groups are empty and includes them in the number
of valid keys, regardless of whether the key is known or not.
After downloading a cache from this service, a cache editor may
be used to replace the empty encrypted loc groups with
unencrypted replacements.
</p>
</main>
</body>
</html>