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.
131 lines
5.8 KiB
131 lines
5.8 KiB
<!DOCTYPE html>
|
|
<html xmlns:th="http://www.thymeleaf.org" lang="en">
|
|
<head th:replace="layout.html :: head(title='Caches')">
|
|
<title>Caches - OpenRS2 Archive</title>
|
|
<link rel="stylesheet" href="/webjars/bootstrap/css/bootstrap.min.css" />
|
|
<link rel="stylesheet" href="/static/css/openrs2.css" />
|
|
<script src="/webjars/jquery/jquery.min.js" defer></script>
|
|
<script src="/webjars/bootstrap/js/bootstrap.bundle.min.js" defer></script>
|
|
</head>
|
|
<body>
|
|
<nav th:replace="layout.html :: nav(active='caches')"></nav>
|
|
<main class="container">
|
|
<h1>Caches</h1>
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-bordered table-hover">
|
|
<thead class="table-dark">
|
|
<tr>
|
|
<th>Game</th>
|
|
<th>Build(s)</th>
|
|
<th>Timestamp</th>
|
|
<th>Source(s)</th>
|
|
<th>Indexes</th>
|
|
<th>Groups</th>
|
|
<th>Keys<sup><a href="#empty-locs">1</a></sup></th>
|
|
<th>Size<sup><a href="#size">2</a></sup></th>
|
|
<th>Links</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 class="text-right">
|
|
<span th:each="build, it : ${cache.builds}" th:remove="tag">
|
|
<span th:text="${build}">550</span>
|
|
<br th:remove="${it.last}? 'all' : 'none'" />
|
|
</span>
|
|
</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="${#strings.setJoin(cache.names, ', ')}"></td>
|
|
<td th:classappend="${cache.stats}? (${cache.stats.allIndexesValid}? 'table-success' : 'table-danger')"
|
|
class="text-right">
|
|
<span
|
|
th:text="${cache.stats}? ${cache.stats.validIndexes} + ' / ' + ${cache.stats.indexes} : 'Calculating...'"></span>
|
|
<br />
|
|
<span
|
|
th:text="${cache.stats}? '(' + ${#numbers.formatPercent(cache.stats.validIndexesFraction, 1, 2)} + ')'"></span>
|
|
</td>
|
|
<td th:classappend="${cache.stats}? (${cache.stats.allGroupsValid}? 'table-success' : 'table-warning')"
|
|
class="text-right">
|
|
<span
|
|
th:text="${cache.stats}? ${#numbers.formatInteger(cache.stats.validGroups, 1, 'COMMA')} + ' / ' + ${#numbers.formatInteger(cache.stats.groups, 1, 'COMMA')} : 'Calculating...'"></span>
|
|
<br />
|
|
<span
|
|
th:text="${cache.stats}? '(' + ${#numbers.formatPercent(cache.stats.validGroupsFraction, 1, 2)} + ')'"></span>
|
|
</td>
|
|
<td th:classappend="${cache.stats}? (${cache.stats.allKeysValid}? 'table-success' : 'table-warning')"
|
|
class="text-right">
|
|
<span
|
|
th:text="${cache.stats}? ${#numbers.formatInteger(cache.stats.validKeys, 1, 'COMMA')} + ' / ' + ${#numbers.formatInteger(cache.stats.keys, 1, 'COMMA')} : 'Calculating...'"></span>
|
|
<br />
|
|
<span
|
|
th:text="${cache.stats}? '(' + ${#numbers.formatPercent(cache.stats.validKeysFraction, 1, 2)} + ')'"></span>
|
|
</td>
|
|
<!--/*@thymesVar id="#byteunits" type="org.openrs2.archive.web.ByteUnits"*/-->
|
|
<td th:text="${cache.stats}? ${#byteunits.format(cache.stats.size)} : 'Calculating...'"
|
|
class="text-right">Calculating...
|
|
</td>
|
|
<td>
|
|
<div class="btn-group">
|
|
<div class="btn-group">
|
|
<button type="button"
|
|
class="btn btn-primary btn-sm dropdown-toggle"
|
|
data-bs-toggle="dropdown">
|
|
Download
|
|
</button>
|
|
<ul class="dropdown-menu">
|
|
<li th:if="${cache.stats != null and cache.stats.diskStoreValid}"><a
|
|
th:href="${'/caches/' + cache.id + '/disk.zip'}"
|
|
class="dropdown-item">Cache (.dat2/.idx)</a></li>
|
|
<li><a th:href="${'/caches/' + cache.id + '/flat-file.zip'}"
|
|
class="dropdown-item">Cache (Flat file)</a></li>
|
|
<li>
|
|
<hr class="dropdown-divider" />
|
|
</li>
|
|
<li><a th:href="${'/caches/' + cache.id + '/keys.json'}"
|
|
class="dropdown-item">Keys (JSON)</a></li>
|
|
<li><a th:href="${'/caches/' + cache.id + '/keys.zip'}"
|
|
class="dropdown-item">Keys (Text)</a></li>
|
|
<li>
|
|
<hr class="dropdown-divider" />
|
|
</li>
|
|
<li><a th:href="${'/caches/' + cache.id + '/map.png'}"
|
|
class="dropdown-item">Map</a></li>
|
|
</ul>
|
|
</div>
|
|
<a th:href="${'/caches/' + cache.id}"
|
|
class="btn btn-secondary btn-sm">More</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>
|
|
<p>
|
|
<sup id="size">2</sup> Sizes are estimated based on the total
|
|
compressed length of all groups in the cache. The native
|
|
<code>.dat2</code>/<code>.idx</code> format has some overhead
|
|
above this, but the <code>.zip</code> file generated by the
|
|
archiving service will reduce the overhead, so the estimated
|
|
size will roughly match the size of the <code>.zip</code> file.
|
|
</p>
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|