-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathindex.html
More file actions
344 lines (330 loc) · 21.7 KB
/
index.html
File metadata and controls
344 lines (330 loc) · 21.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
---
title: LU Server Projects
---
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- PAGE settings -->
<link rel="icon" sizes="16x16 32x32 64x64" href="/favicon.ico">
<title>LU Server Projects</title>
<!-- CSS dependencies -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-DyZ88mC6Up2uqS4h/KRgHuoeGwBcD4Ng9SiP4dIRy0EXTlnuz47vAwmeGwVChigm" crossorigin="anonymous">
<link rel="stylesheet" href="neon.css" type="text/css"> </head>
<style>
html {
scroll-padding-top: 90px;
}
.card-header:first-child {
height: 3.5em;
}
#servers .card-img {
max-height: 175px;
object-fit: contain;
}
#servers .card {
margin-bottom: 20px;
}
.card-link {
margin: 0 1.25rem;
display: inline-block;
}
button.active {
background-color:#f1cd31;
color:#111;
font-weight:bold;
}
.btn {
background-color:rgba(51, 51, 51, 0.5);
color:#f1cd31;
font-weight:bold;
}
.navbar-dark .navbar-nav .nav-link {
color: #f5f5f5;
}
.nav-item.active {
font-weight: bold;
}
.text-muted {
color: #ddd !important;
}
</style>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-info" style="position: fixed; width: 100%; z-index: 100;">
<div class="container">
<a class="navbar-brand" href="#home" style="font-weight: bold; font-size: 200%;">LUSP</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbar2SupportedContent" aria-controls="navbar2SupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse text-center" id="navbar2SupportedContent" style="font-size: 130%;">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#home"><i class="fas fa-home"></i> Home
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#faqs"><i class="fas fa-question-circle"></i> FAQs</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#servers"><i class="fas fa-server"></i> Servers</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#development-resources"><i class="fas fa-tools"></i> Development Resources</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contact-community"><i class="fas fa-users"></i> Community/Contact</a>
</li>
</ul>
</div>
</div>
</nav>
<div id="home" class="py-5 text-center">
<div class="container" style="margin-top: 80px;">
<div class="row">
<div class="col-12">
<h1 class="display-3 text-capitalize">LU Server Projects</h1>
<p class="lead text-muted">Saving Imagination for All</p>
</div>
</div>
</div>
</div>
<div id="faqs" class="py-4">
<div class="container">
<h2><i class="fas fa-question-circle"></i> FAQs</h2>
<hr>
<h3 id="what-is-lusp">What are LU Server Projects?</h3>
<p> This community of projects aims to provide the capability to play the LEGO® Universe MMO, shuttered in February 2012 after a roughly one year run, through emulating the original servers. This is done thanks to the hard work of many fans in
reverse engineering packet captures and the game client, and also opens up the possibility for further creativity through customization by dedicated fans. </p>
<h3>Where can I get in touch with other fans, developers, and community members? Where can I ask questions?</h3>
<p> Please see <a href="#contact-community"><i class="fas fa-users"></i> Community/Contact</a> </p>
<h3 id="history">How did it all start?</h3>
<p> Around the time of the games closure, Pwjones was able to capture a significant volume of packets from the live LU servers, which were then able to be decrypted by Humanoid, who also wrote the very first server prototype playing back these
captures. Not soon thereafter, the community began to overhype the little that was available in this implementation, and due to various reasons multiple fractures developed among the community. Multiple groups formed to work on furthering
the understanding and implementation of LU servers, and through the formation, dissolution, and consolidation of these projects, the current major projects have come in to being, as well as paving the way for other experimental utilities
and implementations. </p>
<h3 id="why-dont-projects-merge">Why can't everyone join forces and work on one project?</h3>
<p>There are multiple reasons for this, including:</p>
<ul>
<li>Brook's Law, that is, "adding more developers to an already late project won't make it go any faster". It takes time to get people up to speed on a different set of code, a different work environment, and so on. In the end, it's possible
that more resources would be spent consolidating than would be gained by a merger</li>
<li>The use of different programming languages entirely</li>
<li>Differing ideologies and specific goals of each project</li>
<li>Individuals want to try their own hand at building a server themselves for fun or experience</li>
<li>Sadly, there are still lingering interpersonal issues among some members of the development community as well</li>
</ul>
<p> However, this is not to say that the projects do not collaborate at all. In fact, this is the complete opposite. There is an immense amount of communication and collaboration among the various teams in understanding the LU systems (for example,
through the public documentation), building utilities, and discussing optimal implementation approaches. </p>
<h3 id="what-takes-so-long">What's taking so long?</h3>
<p>Based on a previous comment by LCDR, this is probably best summed up as follows</p>
<ul>
<li>At the start, absolutely nothing was known about the client, the networking protocol, or much about LU's systems in general. A significant amount of reverse engineering on the client and captured network packets has been needed to be done,
and even now there's still a lot that we don't know, and we're constantly working to learn more about LU's incredibly complex systems.</li>
<li>Everything is being built from the ground up. The only things we can use are the RakNet networking library that LU uses, some database libraries, and other extremely generic utilities that are more for ease of programming than anything.</li>
<li>There's only a few people working on it, and while they have a fair amount of software development experience, many are hobbyists or are still in school. On top of that, no one is working on this full-time, and sadly personal issues and
general lack of available time is common.</li>
</ul>
<h3 id="how-to-play">How can I play LU right now?</h3>
<p>You will need a client (ie, the game itself that you would install from a game disk/with the patcher) and a server emulator (the program responsible for communicating between multiple players, saving and loading user data, etc).</p>
<h3 id="how-to-client">How do I get a game client? Can I use my live client? Can I use the client that comes with the disk?</h3>
<p>
You'll need a complete download of the final release of the client, version 1.10.64. You can use the
client you played with during live as long as you used the "full download" option and your client was
fully updated. Reinstalling the client from the disk will not work as it does not have all data loaded
(you needed to use the patcher to update it to the latest version, which is no longer online).
</p>
<p>
While we legally cannot distribute clients or otherwise provide links to client uploads, we are aware
that they exist. To ensure you stay safe from malware and have a complete/valid client, we have compiled
a list of SHA256 checksums we know are valid. We highly recommend doing this verification if you're not
using your own client from live. To verify your client checksum:
</p>
<ul>
<li>On Windows, open a command prompt and run <code>certutil -hashfile <file> SHA256</code>, replacing <file> with the path to your client</li>
<li>On MacOS or Linux, open a terminal and run <code>shasum -a 256 <file></code>, replacing <file> with the path to your client</li>
</ul>
<p>Known good checksums are:</p>
<ul>
<li><code>8f6c7e84eca3bab93232132a88c4ae6f8367227d7eafeaa0ef9c40e86c14edf5</code> (packed client, rar compressed)</li>
<li><code>c1531bf9401426042e8bab2de04ba1b723042dc01d9907c2635033d417de9e05</code> (packed client, includes extra locales, rar compressed)</li>
<li><code>0d862f71eedcadc4494c4358261669721b40b2131101cbd6ef476c5a6ec6775b</code> (unpacked client, includes extra locales, rar compressed)</li>
</ul>
<h3 id="how-to-server">How do I get a server emulator?</h3>
<p>
DLU has released <a href="https://github.com/DarkflameUniverse/DarkflameServer">their server emulator</a> which allows you to have a nearly feature-complete experience of LEGO Universe.
For DLU setup questions, the best place to ask is the <a href="https://discord.gg/jhTwGqYSKk" target="_blank"><i class="fab fa-discord"></i>LU Community Hub</a>.
Until the setup of DLU becomes easier, you may be interested in setting up Uchu:
</p>
<ol>
<li>Download <a href="https://github.com/UchuServer/UchuTool/releases/latest">Uchu Tool</a> and extract the zip file.</li>
<li>Run <b>Uchu.Tool.exe</b>. Wait for it to download and start Uchu. This tool will also automatically check for and install updates when you run it.</li>
<li>Download the <a href="https://github.com/lcdr/raknet_shim_dll/releases/latest">Network Protocol mod</a> and extract it into your LEGO Universe client folder. Make sure the <b>mods</b> folder is in the same folder as <b>legouniverse.exe</b>.</li>
<li>Open <b>boot.cfg</b> in the LEGO Universe Client folder and change the line starting with <code>AUTHSERVERIP</code> to read <code>AUTHSERVERIP=0:localhost,</code> (this may already be the case depending on the client).</li>
<li>Add a user in the Uchu console (if you're on Windows, the one called Authentication) by typing <code>/adduser username</code> (replacing "username" with what you want your username to be).</li>
<li>Optionally, you can give yourself more command permissions using <code>/gamemaster username level</code>. The highest level available is <code>9</code>.</li>
<li>Launch LEGO Universe (<b>legouniverse.exe</b>).</li>
</ol>
<p>If Uchu can't find the client resources:</p>
<ol>
<li>Go to the <b>uchu</b> folder, which is in the same folder as <b>Uchu.Tool.exe</b>.</li>
<li>Open <b>config.xml</b> using a text editor and locate <code><GameResourcesFolder>path to res folder</GameResourcesFolder></code></li>
<li>Add the path to your client's <b>res</b> folder. For example, on Windows this could be: <code><GameResourceFolder>C:\Users\Bob\LEGO Universe\res</GameResourceFolder></code></li>
</ol>
<p>For help with Uchu, you can join the <a href="https://discord.gg/EFuTB8XZSV" target="_blank"><i class="fab fa-discord"></i> Uchu Community Discord server</a>.</p>
<h3 id="how-to-help">What can I do to help?</h3>
<p> If you have software development experience, you might want to try your hand at helping out one of the open source servers or development utilities linked below. You'll probably want to start out by taking a quick look over the LU Sytems Documentation
(either via the original
<a href="https://docs.google.com/document/d/1v9GB1gNwO0C81Rhd4imbaLN7z-R0zpK5sYJMbxPP3Kc/">Google Docs</a> or the
<a href="http://lu-docs.readthedocs.io/en/latest/">Unofficial ReadTheDocs port</a>). Contributions to the documentation of any kind (through additional client or network reverse engineering, systems documentation, typo fixes, or anything else) are also helpful and are always appreciated.
If you become comfortable with how LU servers operate and show competence in your development skills, more established projects may also be willing to take you on at that time (generally by invitation). You can also fork this project <a href="https://github.com/lusprojects/lusprojects.github.io">on GitHub</a> and submit a pull request if you wish to improve its content or functionality. </p>
<p> Otherwise, your kind words and encouragement do wonders to keep all the developers encouraged to keep working at their hardest to bring back the game as close as possible to the original experience. </p>
</div>
</div>
<div id="servers" class="py-4">
<div class="container">
<h2><i class="fas fa-server"></i> Servers</h2>
<hr>
<div class="card-columns mx-auto">
{% for server in site.opensource %}
<div class="card">
{% if server.image_path %}
<img class="card-img" src="{{ server.image_path | absolute_url}}" alt="Logo of {{ server.name }}">
{% endif %}
<div class="card-body">
<h4 class="card-title"> {{ server.name }} </h4>
<div class="card-text"> {{ server.desc }} </div>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">Status: {{ server.status }}</li>
<li class="list-group-item">Language: {{server.language}}</li>
{% if server.devs %}
<li class="list-group-item">Active Devs: {{ server.devs }}</li>
{% elsif server.author %}
<li class="list-group-item">Author: {{ server.author }}</li>
{% elsif server.authors %}
<li class="list-group-item">Authors: {{ server.authors }}</li>
{% endif %}
</ul>
<div class="card-footer">
{% for link in server.links %}
<a href="{{ link[1] }}" class="card-link" target="_blank"><i class="{{ link[2] }}"></i> {{ link[0] }}</a>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div id="development-resources" class="py-4">
<div class="container">
<h2><i class="fas fa-tools"></i> Development Resources</h2>
<hr>
<div>
<ul class="list-inline">
<li class="list-inline-item"><button class="btn active" id="All_tag" data-tagbtn="1" onclick="showAll()">All</button></li>
<li class="list-inline-item"><button class="btn" id="Research_tag" data-tagbtn="1" onclick="searchForTag('Research')">Research</button></li>
<li class="list-inline-item"><button class="btn" id="Networking_tag" data-tagbtn="1" onclick="searchForTag('Networking')">Networking</button></li>
</ul>
</div>
<div>
<div class="card-columns mx-auto">
{% for resource in site.devresources %}
<div class="card" data-tag="{{ resource.tag }}">
<div class="card-body">
<h4 class="card-title"> {{ resource.name }} </h4>
<div class="card-text"> {{ resource.desc }} </div>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">Status: {{ resource.status }}</li>
<li class="list-group-item">Language: {{ resource.language }}</li>
<li class="list-group-item">Author: {{ resource.author }}</li>
</ul>
<div class="card-footer">
{% for link in resource.links %}
<a href="{{ link[1] }}" class="card-link" target="_blank"><i class="{{ link[2] }}"></i> {{ link[0] }}</a>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
<div>
</div>
</div>
<div id="contact-community" class="py-4">
<div class="container">
<h2><i class="fas fa-users"></i> Community and Contact</h2>
<hr>
<ul>
<li> For general discussion and questions, many fans and developers alike have congregated on the <a href="https://discord.gg/jhTwGqYSKk"><i class="fab fa-discord"></i> LEGO Universe Community Hub Discord server</a>. </li>
<li> For this site and its specific contents, please see the <a href="https://github.com/lusprojects/lusprojects.github.io"><i class="fab fa-github"></i> GitHub repository</a> - feel free to <a href="https://github.com/lusprojects/lusprojects.github.io/issues">file an issue</a>. </li>
<li> For individual projects, see the information in the relevant sections (<a href="#servers">Servers</a> or <a href="#development-resources">Development Resources</a>). </li>
</ul>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha512-+NqPlbbtM1QqiK8ZAo4Yrj2c4lNQoGv8P79DPtKzj++l5jnN39rHA/xsqn8zE9l0uSoxaCdrOgFs6yjyfbBxSg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha512-ldc1sPu1FZ8smgkgp+HwnYyVb1eRn2wEmKrDg1JqPEb02+Ei4kNzDIQ0Uwh0AJVLQFjJoWwG+764x70zy5Tv4A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha512-n6dYFOG599s4/mGlA6E+YLgtg9uPTOMDUb0IprSMDYVLr0ctiRryPEQ8gpM4DCMlx7M2G3CK+ZcaoOoJolzdCg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
activeTag = "";
function searchForTag(tag)
{
$("[data-tagbtn]").removeClass("active");
$("#"+tag+"_tag").toggleClass("active");
if(activeTag != tag)
{
$("[data-tag]:not([data-tag~='"+tag+"'])").hide();
$("[data-tag~='"+tag+"']").show();
activeTag = tag;
}
else
{
showAll();
activeTag = "";
}
}
function showAll()
{
$("[data-tag]").show();
$("[data-tagbtn]").removeClass("active");
$("#All_tag").toggleClass("active");
}
function navigate() {
// Get anchor to scroll to
var hash = $(this).attr('href');
// Scroll with a smooth animation
$('html, body').animate({
'scrollTop': $(hash).offset().top - menuHeight
}, 1000);
}
$('nav a').click(navigate);
const menu = $('nav');
const menuHeight = $('nav').outerHeight();
const menuItems = menu.find('a.nav-link');
// get anchors
const anchorItems = menuItems.map(function() {
return $($(this).attr('href'));
}).filter(function() {
return $(this).length == 1;
});
$(window).scroll(function(e) {
// current scroll distance from top
const distanceFromTop = this.scrollY;
// find out which anchors have been scrolled past
passedElements = anchorItems.filter(function() {
return $(this).offset().top <= distanceFromTop + menuHeight + 10;
});
// get the last one
lastPassedElement = passedElements[passedElements.length - 1];
id = lastPassedElement?.attr('id')
// set the correct menu item as active
menuItem = menuItems.filter(`[href="#${id}"]`);
menuItems.parent().filter('.active').removeClass('active');
menuItem.parent().addClass('active');
});
try {
navigate($('[href="' + window.location.hash + '"]'));
} catch(e){}
</script>
</body>
</html>