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.

77 lines
3.4 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 active">
<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 th:text="${#temporals.formatISO(cache.timestamp)}"></td>
<td th:text="${cache.name}"></td>
<td
th:class="${cache.archiveStats}? (${cache.archiveStats.allIndexesValid}? 'table-success' : 'table-danger') + ' text-right'"
th:text="${cache.archiveStats}? ${cache.archiveStats.validIndexes} + ' / ' + ${cache.archiveStats.indexes} + ' (' + ${#numbers.formatPercent(cache.archiveStats.validIndexesFraction, 1, 2)} + ')' : 'Calculating...'"
>Calculating...
</td>
<td
th:class="${cache.groupStats}? (${cache.groupStats.allGroupsValid}? 'table-success' : 'table-warning') + ' text-right'"
th:text="${cache.groupStats}? ${#numbers.formatInteger(cache.groupStats.validGroups, 1, 'COMMA')} + ' / ' + ${#numbers.formatInteger(cache.groupStats.groups, 1, 'COMMA')} + ' (' + ${#numbers.formatPercent(cache.groupStats.validGroupsFraction, 1, 2)} + ')' : 'Calculating...'"
>Calculating...
</td>
<td
th:class="${cache.groupStats}? (${cache.groupStats.allKeysValid}? 'table-success' : 'table-warning') + ' text-right'"
th:text="${cache.groupStats}? ${#numbers.formatInteger(cache.groupStats.validKeys, 1, 'COMMA')} + ' / ' + ${#numbers.formatInteger(cache.groupStats.keys, 1, 'COMMA')} + ' (' + ${#numbers.formatPercent(cache.groupStats.validKeysFraction, 1, 2)} + ')' : 'Calculating...'"
>Calculating...
</td>
<td>
<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>
</td>
</tr>
</tbody>
</table>
</div>
<p id="empty-locs">
[1]: 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 we know the key 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>