mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
Cleaned up default website css. Renamed app.css to website.css'
This commit is contained in:
parent
b1b26bf489
commit
07f994ce91
15 changed files with 257 additions and 997 deletions
|
|
@ -56,6 +56,7 @@ Up requirements to Django 3.2+
|
|||
- New Channel-System using the `channel` command and nicks. Removed the `ChannelHandler` and the
|
||||
concept of a dynamically created `ChannelCmdSet`.
|
||||
- Add `Msg.db_receiver_external` field to allowe external, string-id message-receivers.
|
||||
- Renamed `app.css` to `website.css` for consistency. Removed old prosimii-css files.
|
||||
|
||||
### Evennia 0.9.5 (2019-2020)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,158 @@
|
|||
# The Web Admin
|
||||
|
||||
The Evennia _Web admin_ is a customized [Django admin site](https://docs.djangoproject.com/en/3.2/ref/contrib/admin/)
|
||||
and is used for manipulating the game database using a graphical interface.
|
||||
used for manipulating the game database using a graphical interface. You
|
||||
have to be logged into the site to use it. It then appears as an `Admin` link
|
||||
the top of your website. You can also go to [http://localhost:4001/admin](http://localhost:4001/admin) when
|
||||
running locally.
|
||||
|
||||
All actions done in the admin can also be done in-game by use of Admin- or
|
||||
Builder-commands. The only exception is the assigning of `staff` flags for
|
||||
allowing users access to the admin itself.
|
||||
Almost all actions done in the admin can also be done in-game by use of Admin-
|
||||
or Builder-commands.
|
||||
|
||||
## Usage
|
||||
|
||||
The admin is pretty self-explanatory - you can see lists of each object type,
|
||||
create new instances of each type and also add new Attributes/tags them. The
|
||||
admin frontpage will give a summary of all relevant entities and how they are
|
||||
used.
|
||||
|
||||
There are a few use cases that requires some additional explanation though.
|
||||
|
||||
### Adding objects to Attributes
|
||||
|
||||
The `value` field of an Attribute is pickled into a special form. This is usually not
|
||||
something you need to worry about (the admin will pickle/unpickle) the value
|
||||
for you), _except_ if you want to store a database-object in an attribute. Such
|
||||
objects are actually stored as a `tuple` with object-unique data.
|
||||
|
||||
1. Find the object you want to add to the Attribute. At the bottom of the first section
|
||||
you'll find the field _Serialized string_. This string shows a Python tuple like
|
||||
|
||||
('__packed_dbobj__', ('objects', 'objectdb'), '2021:05:15-08:59:30:624660', 358)
|
||||
|
||||
Mark and copy this tuple-string to your clipboard exactly as it stands (parentheses and all).
|
||||
2. Go to the entity that should have the new Attribute and create the Attribute. In its `value`
|
||||
field, paste the tuple-string you copied before. Save!
|
||||
3. If you want to store multiple objects in, say, a list, you can do so by literally
|
||||
typing a python list `[tuple, tuple, tuple, ...]` where you paste in the serialized
|
||||
tuple-strings with commas. At some point it's probably easier to do this in code though ...
|
||||
|
||||
### Linking Accounts and Characters
|
||||
|
||||
In `MULTISESSION_MODE` 0 or 1, each connection can have one Account and one
|
||||
Character, usually with the same name. Normally this is done by the user
|
||||
creating a new account and logging in - a matching Character will then be
|
||||
created for them. You can however also do so manually in the admin:
|
||||
|
||||
1. First create the complete Account in the admin.
|
||||
2. Next, create the Object (usually of `Character` typeclass) and name it the same
|
||||
as the Account. It also needs a command-set. The default CharacterCmdset is a good bet.
|
||||
3. In the `Puppeting Account` field, select the Account.
|
||||
4. Make sure to save everything.
|
||||
5. Click the `Link to Account` button (this will only work if you saved first). This will
|
||||
add the needed locks and Attributes to the Account to allow them to immediately
|
||||
connect to the Character when they next log in. This will (where possible):
|
||||
- Set `account.db._last_puppet` to the Character.
|
||||
- Add Character to `account.db._playabel_characters` list.
|
||||
- Add/extend the `puppet:` lock on the Character to include `puppet:pid(<Character.id>)`
|
||||
|
||||
### Building with the Admin
|
||||
|
||||
It's possible (if probably not very practical at scale) to build and describe
|
||||
rooms in the Admin.
|
||||
|
||||
1. Create an `Object` of a Room-typeclass with a suitable room-name.
|
||||
2. Set an Attribute 'desc' on the room - the value of this Attribute is the
|
||||
room's description.
|
||||
3. Add `Tags` of `type` 'alias' to add room-aliases (no type for regular tags)
|
||||
|
||||
Exits:
|
||||
|
||||
1. Exits are `Objects` of an `Exit` typeclass, so create one.
|
||||
2. The exit has `Location` of the room you just created.
|
||||
3. Set `Destination` set to where the exit leads to.
|
||||
4. Set a 'desc' Attribute, this is shown if someone looks at the exit.
|
||||
5. `Tags` of `type` 'alias' are alternative names users can use to go through
|
||||
this exit.
|
||||
|
||||
## Grant others access to the admin
|
||||
|
||||
The access to the admin is controlled by the `Staff status` flag on the
|
||||
Account. Without this flag set, even superusers will not even see the admin
|
||||
link on the web page. The staff-status has no in-game equivalence.
|
||||
|
||||
|
||||
Only Superusers can change the `Superuser status` flag, and grant new
|
||||
permissions to accounts. The superuser is the only permission level that is
|
||||
also relevant in-game. `User Permissions` and `Groups` found on the `Account`
|
||||
admin page _only_ affects the admin - they have no connection to the in-game
|
||||
[Permissions](Permissions) (Player, Builder, Admin etc).
|
||||
|
||||
For a staffer with `Staff status` to be able to actually do anything, the
|
||||
superuser must grant at least some permissions for them on their Account. This
|
||||
can also be good in order to limit mistakes. It can be a good idea to not allow
|
||||
the `Can delete Account` permission, for example.
|
||||
|
||||
```important::
|
||||
|
||||
If you grant staff-status and permissions to an Account and they still cannot
|
||||
access the admin's content, try reloading the server.
|
||||
|
||||
```
|
||||
|
||||
```warning::
|
||||
|
||||
If a staff member has access to the in-game ``py`` command, they can just as
|
||||
well have their admin ``Superuser status`` set too. The reason is that ``py``
|
||||
grants them all the power they need to set the ``is_superuser`` flag on their
|
||||
account manually. There is a reason access to the ``py`` command must be
|
||||
considered carefully ...
|
||||
|
||||
```
|
||||
|
||||
## Customizing the web admin
|
||||
|
||||
Customizing the admin is a big topic and something beyond the scope of this
|
||||
documentation. See the [official Django docs](https://docs.djangoproject.com/en/3.2/ref/contrib/admin/) for
|
||||
the details. This is just a brief summary.
|
||||
|
||||
See the [Website](./Website) page for an overview of the components going into
|
||||
generating a web page. The Django admin uses the same principle except that
|
||||
Django provides a lot of tools to automate the admin-generation for us.
|
||||
|
||||
Admin templates are found in `evennia/web/templates/admin/` but you'll find
|
||||
this is relatively empty. This is because most of the templates are just
|
||||
inherited directly from their original location in the Django package
|
||||
(`django/contrib/admin/templates/`). So if you wanted to override one you'd have
|
||||
to copy it from _there_ into your `mygame/templates/admin/` folder. Same is true
|
||||
for CSS files.
|
||||
|
||||
The admin site's backend code (the views) is found in `evennia/web/admin/`. It
|
||||
is organized into `admin`-classes, like `ObjectAdmin`, `AccountAdmin` etc.
|
||||
These automatically use the underlying database models to generate useful views
|
||||
for us without us havint go code the forms etc ourselves.
|
||||
|
||||
The top level `AdminSite` (the admin configuration referenced in django docs)
|
||||
is found in `evennia/web/utils/adminsite.py`.
|
||||
|
||||
|
||||
### Change the title of the admin
|
||||
|
||||
By default the admin's title is `Evennia web admin`. To change this, add the
|
||||
following to your `mygame/web/urls.py`:
|
||||
|
||||
```python
|
||||
# in mygame/web/urls.py
|
||||
|
||||
# ...
|
||||
|
||||
from django.conf.admin import site
|
||||
|
||||
#...
|
||||
|
||||
site.site_header = "My great game admin"
|
||||
|
||||
|
||||
```
|
||||
|
||||
Reload the server and the admin's title header will have changed.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
# Webclient
|
||||
|
||||
# **Web client**
|
||||
# Web Client
|
||||
|
||||
Evennia comes with a MUD client accessible from a normal web browser. During development you can try
|
||||
it at `http://localhost:4001/webclient`. The client consists of several parts, all under
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ environment. It leverages the Django web framework and provides:
|
|||
game. Users logged into the website will be auto-logged into the game if they
|
||||
do so with the webclient since they share the same login credentials (there
|
||||
is no way to safely do auto-login with telnet clients).
|
||||
- The [Web Admin](Web-Admin) is based on the Django web admin and allows you to
|
||||
- The [Web Admin](./Web-Admin) is based on the Django web admin and allows you to
|
||||
edit the game database in a graphical interface.
|
||||
- The [Webclient](./Webclient) page is served by the webserver, but the actual
|
||||
game communication (sending/receiving data) is done by the javascript client
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
# Game Website
|
||||
# Game website
|
||||
|
||||
When Evennia starts it will also start a [Webserver](./Webserver) as part of the
|
||||
[Server](./Portal-And-Server) process. This uses [Django](https://docs.djangoproject.com)
|
||||
to present a simple but functional default game website. With the default setup,
|
||||
open your browser to `localhost:4001` or `127.0.0.1:4001` to see it.
|
||||
open your browser to [localhost:4001](http://localhost:4001) or [127.0.0.1:4001](http://127.0.0.1:4001)
|
||||
to see it.
|
||||
|
||||
The website allows existing players to log in using an account-name and
|
||||
password they previously used to register with the game. If a user logs in with
|
||||
|
|
@ -16,22 +17,27 @@ resources. It also shows some statistics about how many players are currently
|
|||
connected.
|
||||
|
||||
In the top menu you can find
|
||||
- Home - Get back to front page.
|
||||
- Document - A link to the latest stable Evennia documentation.
|
||||
- Characters - This is a demo of connecting in-game characters to the website.
|
||||
- _Home_ - Get back to front page.
|
||||
- _Documentation_ - A link to the latest stable Evennia documentation.
|
||||
- _Characters_ - This is a demo of connecting in-game characters to the website.
|
||||
It will display a list of all entities of the
|
||||
_typeclasses.characters.Character` typeclass and allow you to view their
|
||||
description with an optional image. The list is only available to logged-in
|
||||
users.
|
||||
- Channels - This is a demo of connecting in-game chats to the website. It will
|
||||
- _Channels_ - This is a demo of connecting in-game chats to the website. It will
|
||||
show a list of all channels available to you and allow you to view the latest
|
||||
discussions. Most channels require logging in, but the `Public` channel can
|
||||
also be viewed by non-loggedin users.
|
||||
- Help - This ties the in-game [Help system](./Help-System) to the website. All
|
||||
- _Help_ - This ties the in-game [Help system](./Help-System) to the website. All
|
||||
database-based help entries that are publicly available or accessible to your
|
||||
account can be read. This is a good way to present a body of help for people
|
||||
to read outside of the game.
|
||||
- Play Online - This opens the [Webclient](./Webclient) in the browser.
|
||||
- _Play Online_ - This opens the [Webclient](./Webclient) in the browser.
|
||||
- _Admin_ The [Web admin](Web admin) will only show if you are logged in.
|
||||
- _Log in/out_ - Allows you to authenticate using the same credentials you use
|
||||
in the game.
|
||||
- _Register_ - Allows you to register a new account. This is the same as
|
||||
creating a new account upon first logging into the game).
|
||||
|
||||
## Modifying the default Website
|
||||
|
||||
|
|
@ -263,7 +269,7 @@ your copy. Just remember to reload.
|
|||
### Using Flat Pages
|
||||
|
||||
The absolutely simplest way to add a new web page is to use the `Flat Pages`
|
||||
app available in the [Web Admin](Web-Admin). The page will appear with the same
|
||||
app available in the [Web Admin](./Web-Admin). The page will appear with the same
|
||||
styling as the rest of the site.
|
||||
|
||||
For the `Flat pages` module to work you must first set up a _Site_ (or
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
- [Components/Tags](Components/Tags)
|
||||
- [Components/TickerHandler](Components/TickerHandler)
|
||||
- [Components/Typeclasses](Components/Typeclasses)
|
||||
- [Components/Web Admin](Components/Web-Admin)
|
||||
- [Components/Webclient](Components/Webclient)
|
||||
- [Components/Webserver](Components/Webserver)
|
||||
- [Components/Website](Components/Website)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import sys
|
|||
SERVERNAME = "Evennia"
|
||||
# Short one-sentence blurb describing your game. Shown under the title
|
||||
# on the website and could be used in online listings of your game etc.
|
||||
GAME_SLOGAN = "Python MU* creation system"
|
||||
GAME_SLOGAN = "The Python MUD/MU* creation system"
|
||||
# Lockdown mode will cut off the game from any external connections
|
||||
# and only allow connections from localhost. Requires a cold reboot.
|
||||
LOCKDOWN_MODE = False
|
||||
|
|
|
|||
|
|
@ -77,15 +77,15 @@ class AccountChangeForm(UserChangeForm):
|
|||
required=False,
|
||||
)
|
||||
|
||||
# is_superuser = forms.BooleanField(
|
||||
# label = "Superuser status",
|
||||
# required=False,
|
||||
# help_text="Superusers bypass all in-game locks and has all "
|
||||
# "permissions without explicitly assigning them. Usually "
|
||||
# "only one superuser (user #1) is needed, new superusers "
|
||||
# "can be created by setting the `is_superuser` flag in code "
|
||||
# "or by the `evennia createsuperuser` CLI command."
|
||||
# )
|
||||
is_superuser = forms.BooleanField(
|
||||
label = "Superuser status",
|
||||
required=False,
|
||||
help_text="Superusers bypass all in-game locks and has all "
|
||||
"permissions without explicitly assigning them. Usually "
|
||||
"only one superuser (user #1) is needed and only a superuser "
|
||||
"can create another superuser.<BR>"
|
||||
"Only Superusers can change the user/group permissions below."
|
||||
)
|
||||
|
||||
def clean_username(self):
|
||||
"""
|
||||
|
|
@ -312,7 +312,17 @@ class AccountAdmin(BaseUserAdmin):
|
|||
help_texts["puppeted_objects"] = self.puppeted_objects.help_text
|
||||
kwargs["help_texts"] = help_texts
|
||||
|
||||
return super().get_form(request, obj, **kwargs)
|
||||
# security disabling for non-superusers
|
||||
form = super().get_form(request, obj, **kwargs)
|
||||
disabled_fields = set()
|
||||
if not request.user.is_superuser:
|
||||
disabled_fields |= {
|
||||
'is_superuser', 'user_permissions', 'user_groups'
|
||||
}
|
||||
for field_name in disabled_fields:
|
||||
if field_name in form.base_fields:
|
||||
form.base_fields[field_name].disabled = True
|
||||
return form
|
||||
|
||||
@sensitive_post_parameters_m
|
||||
def user_change_password(self, request, id, form_url=""):
|
||||
|
|
|
|||
|
|
@ -1,225 +0,0 @@
|
|||
/**************************************
|
||||
* TITLE: Prosimii Print Stylesheet *
|
||||
* URI : prosimii/prosimii-print.css *
|
||||
* MODIF: 2003-Apr-30 19:15 +0800 *
|
||||
**************************************/
|
||||
|
||||
|
||||
/* ##### Common Styles ##### */
|
||||
|
||||
body {
|
||||
color: black;
|
||||
background-color: white;
|
||||
font-family: "times new roman", times, roman, serif;
|
||||
font-size: 12pt;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
acronym, .titleTip {
|
||||
font-style: italic;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
acronym:after, .titleTip:after { /* Prints titles after the acronyms/titletips. Doesn't work in MSIE */
|
||||
content: "(" attr(title) ")";
|
||||
font-size: 90%;
|
||||
font-style: normal;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
a {
|
||||
color: black;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a[href]:after { /* Prints the links' URIs after the links' texts. Doesn't work in MSIE */
|
||||
content: "<" attr(href) ">";
|
||||
font-size: 90%;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: -0.25em 0 1em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: square;
|
||||
margin: -0.25em 0 1em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 0 0 1em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul li {
|
||||
margin: 1ex 0 0 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol li {
|
||||
margin: 1ex 0 0 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 0 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.doNotPrint {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Header ##### */
|
||||
|
||||
#header {
|
||||
}
|
||||
|
||||
.superHeader {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.midHeader {
|
||||
color: black;
|
||||
background-color: transparent;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
.headerTitle {
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 200%;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.headerSubTitle {
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 110%;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
padding: 0 0 1ex 0;
|
||||
}
|
||||
|
||||
.headerLinks {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.subHeader {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Side Menu ##### */
|
||||
|
||||
#side-bar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Main Copy ##### */
|
||||
|
||||
#main-copy {
|
||||
text-align: justify;
|
||||
margin: 0 !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#main-copy h1 {
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 120%;
|
||||
margin: 2ex 0 1ex 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#main-copy h2 {
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 100%;
|
||||
margin: 0;
|
||||
padding: 2ex 0 0.5ex 0;
|
||||
}
|
||||
|
||||
#main-copy h1 + h2 {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
#main-copy p {
|
||||
margin: 0 0 2ex 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h2 a:after {
|
||||
content: "" !important;
|
||||
}
|
||||
|
||||
.newsDate {
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.newsDate:before { /* Prints an '[' before the news item's date. Doesn't work in MSIE */
|
||||
content: "[";
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.newsDate:after { /* Prints a ']' after the news item's date. Doesn't work in MSIE */
|
||||
content: "]";
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.newsSummary {
|
||||
display: inline;
|
||||
margin: 0 0 0 1ex !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.more {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.smallCaps {
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
.quarter, .oneThird, .half, .twoThirds, .fullWidth {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Footer ##### */
|
||||
|
||||
#footer {
|
||||
color: black;
|
||||
background-color: transparent;
|
||||
font-size: 100%;
|
||||
text-align: center;
|
||||
margin: 2em 0 0 0;
|
||||
padding: 1ex 0 0 0;
|
||||
border-top: 1px solid black;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#footer a {
|
||||
color: black;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -1,342 +0,0 @@
|
|||
/*************************************************
|
||||
* TITLE: Prosimii Alternative Screen Stylesheet *
|
||||
* URI : prosimii/prosimii-screen-alt.css *
|
||||
* MODIF: 2004-Apr-28 21:56 +0800 *
|
||||
*************************************************/
|
||||
|
||||
|
||||
/* ##### Common Styles ##### */
|
||||
|
||||
body {
|
||||
font-family: verdana, helvetica, arial, sans-serif;
|
||||
font-size: 73%; /* Enables font size scaling in MSIE */
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html > body {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
acronym, .titleTip {
|
||||
border-bottom: 1px dotted rgb(61,92,122);
|
||||
cursor: help;
|
||||
margin: 0;
|
||||
padding: 0 0 0.4px 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
margin: 0;
|
||||
padding: 0 1px 2px 1px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: rgb(117,144,174);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: square;
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 1em 0 0.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul li {
|
||||
line-height: 1.5em;
|
||||
margin: 1.25ex 0 0 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol li {
|
||||
line-height: 1.5em;
|
||||
margin: 1.25ex 0 0 2em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: 0 0 1ex 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
line-height: 1.75em;
|
||||
margin: 0 0 1.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.doNotDisplay {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
.smallCaps {
|
||||
font-size: 117%;
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Header ##### */
|
||||
|
||||
.superHeader {
|
||||
color: rgb(130,128,154);
|
||||
background-color: rgb(33,50,66);
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0.5ex 10px;
|
||||
}
|
||||
|
||||
.superHeader span {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.superHeader a {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0.25ex 0 0;
|
||||
}
|
||||
|
||||
.superHeader a:hover {
|
||||
color: rgb(193,102,90);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.midHeader {
|
||||
color: white;
|
||||
background-color: rgb(61,92,122);
|
||||
margin: 0;
|
||||
padding: 0.26ex 10px;
|
||||
}
|
||||
|
||||
.headerTitle {
|
||||
font-size: 300%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.headerSubTitle {
|
||||
font-size: 151%;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
margin: 0 0 1ex 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.headerLinks {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0 0 2ex 0;
|
||||
position: absolute;
|
||||
right: 1.5em;
|
||||
top: 3.5em;
|
||||
}
|
||||
|
||||
.headerLinks a {
|
||||
color: white;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0 0.5ex 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.headerLinks a:hover {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.subHeader {
|
||||
color: white;
|
||||
background-color: rgb(117,144,174);
|
||||
margin: 0;
|
||||
padding: 0.5ex 10px;
|
||||
}
|
||||
|
||||
.subHeader a, .subHeader .highlight {
|
||||
color: white;
|
||||
background-color: transparent;
|
||||
font-size: 110%;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0.25ex 0 0;
|
||||
}
|
||||
|
||||
.subHeader a:hover, .subHeader .highlight {
|
||||
color: rgb(255,204,0);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Side Menu ##### */
|
||||
|
||||
#side-bar {
|
||||
color: rgb(204,204,204);
|
||||
background-color: transparent;
|
||||
list-style-type: square;
|
||||
list-style-position: inside;
|
||||
width: 10em;
|
||||
margin: 0;
|
||||
padding: 1ex 0;
|
||||
border: 1px solid rgb(204,204,204);
|
||||
position: absolute;
|
||||
left: 1.5ex;
|
||||
top: 12em;
|
||||
}
|
||||
|
||||
[id="side-bar"] {
|
||||
position: fixed !important; /* Makes the side menu scroll with the page. Doesn't work in MSIE */
|
||||
}
|
||||
|
||||
#side-bar a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#side-bar:hover {
|
||||
color: rgb(117,144,174);
|
||||
background-color: transparent;
|
||||
border-color: rgb(117,144,174);
|
||||
}
|
||||
|
||||
#side-bar li {
|
||||
margin: 0;
|
||||
padding: 0.75ex 0 1ex 1.75ex;
|
||||
}
|
||||
|
||||
#side-bar li:hover {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
|
||||
#side-bar li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Main Copy ##### */
|
||||
|
||||
#main-copy {
|
||||
text-align: justify;
|
||||
margin: -0.5ex 1em 1em 12.5em;
|
||||
padding: 0.5em 10px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#main-copy h1 {
|
||||
color: rgb(117,144,174);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 186%;
|
||||
margin: 0;
|
||||
padding: 1.5ex 0 0 0;
|
||||
}
|
||||
|
||||
#main-copy h2 {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 151%;
|
||||
margin: 0;
|
||||
padding: 1ex 0 0 0;
|
||||
}
|
||||
|
||||
#main-copy p {
|
||||
line-height: 1.75em;
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.newsHeading {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 145%;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 1ex 0 0 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.newsHeading:hover {
|
||||
color: rgb(117,144,174);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.newsDate {
|
||||
font-style: italic;
|
||||
margin: 0 !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.newsSummary {
|
||||
margin: 1.5ex 0 2.5ex 0.75ex !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.more {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
|
||||
.more a {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-size: 92%;
|
||||
text-decoration: underline;
|
||||
margin: 0;
|
||||
padding: 0.25ex 0.75ex;
|
||||
}
|
||||
|
||||
.more a:hover {
|
||||
color: rgb(117,144,174);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Footer ##### */
|
||||
|
||||
#footer {
|
||||
color: rgb(51,51,102);
|
||||
background-color: rgb(239,239,239);
|
||||
font-size: 87%;
|
||||
text-align: center;
|
||||
line-height: 1.25em;
|
||||
margin: 2em 0 0 0;
|
||||
padding: 1ex 10px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#footer a {
|
||||
color: rgb(0,68,204);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -1,359 +0,0 @@
|
|||
/***************************************
|
||||
* TITLE: Prosimii Screen Stylesheet *
|
||||
* URI : prosimii/prosimii-screen.css *
|
||||
* MODIF: 2004-Apr-28 21:43 +0800 *
|
||||
***************************************/
|
||||
|
||||
|
||||
/* ##### Common Styles ##### */
|
||||
|
||||
body {
|
||||
font-family: verdana, helvetica, arial, sans-serif;
|
||||
font-size: 73%; /* Enables font size scaling in MSIE */
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html > body {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
acronym, .titleTip {
|
||||
border-bottom: 1px dotted rgb(61,92,122);
|
||||
cursor: help;
|
||||
margin: 0;
|
||||
padding: 0 0 0.4px 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
margin: 0;
|
||||
padding: 0 1px 2px 1px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: rgb(117,144,174);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: square;
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 1em 0 0.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul li {
|
||||
line-height: 1.5em;
|
||||
margin: 1.25ex 0 0 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol li {
|
||||
line-height: 1.5em;
|
||||
margin: 1.25ex 0 0 2em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: 0 0 1ex 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
line-height: 1.75em;
|
||||
margin: 0 0 1.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.doNotDisplay {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
.smallCaps {
|
||||
font-size: 117%;
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Header ##### */
|
||||
|
||||
.superHeader {
|
||||
color: rgb(130,128,154);
|
||||
background-color: rgb(33,50,66);
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0.5ex 10px;
|
||||
}
|
||||
|
||||
.superHeader span {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.superHeader a {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0.25ex 0 0;
|
||||
}
|
||||
|
||||
.superHeader a:hover {
|
||||
color: rgb(193,102,90);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.midHeader {
|
||||
color: white;
|
||||
background-color: rgb(61,92,122);
|
||||
margin: 0;
|
||||
padding: 0.26ex 10px;
|
||||
}
|
||||
|
||||
.headerTitle {
|
||||
font-size: 300%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.headerSubTitle {
|
||||
font-size: 151%;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
margin: 0 0 1ex 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.headerLinks {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0 0 2ex 0;
|
||||
position: absolute;
|
||||
right: 1.5em;
|
||||
top: 3.5em;
|
||||
}
|
||||
|
||||
.headerLinks a {
|
||||
color: white;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0 0.5ex 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.headerLinks a:hover {
|
||||
color: rgb(195,196,210);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.subHeader {
|
||||
color: white;
|
||||
background-color: rgb(117,144,174);
|
||||
margin: 0;
|
||||
padding: 0.5ex 10px;
|
||||
}
|
||||
|
||||
.subHeader a, .subHeader .highlight {
|
||||
color: white;
|
||||
background-color: transparent;
|
||||
font-size: 110%;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0 0.25ex 0 0;
|
||||
}
|
||||
|
||||
.subHeader a:hover, .subHeader .highlight {
|
||||
color: rgb(255,204,0);
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/* ##### Main Copy ##### */
|
||||
|
||||
#main-copy {
|
||||
margin: 0;
|
||||
padding: 0.5em 10px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#main-copy h1 {
|
||||
color: rgb(117,144,174);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 200%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#main-copy h2 {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 151%;
|
||||
margin: 0;
|
||||
padding: 1ex 0 0 0;
|
||||
}
|
||||
|
||||
#main-copy p {
|
||||
line-height: 1.75em;
|
||||
margin: 1em 0 1.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.newsHeading {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-family: "trebuchet ms", verdana, helvetica, arial, sans-serif;
|
||||
font-size: 145%;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 1ex 0 0 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.newsHeading:hover {
|
||||
color: rgb(117,144,174);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.newsDate {
|
||||
font-style: italic;
|
||||
margin: 0 !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.newsSummary {
|
||||
margin: 1.5ex 0 2.5ex 0.75ex !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.more {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
|
||||
.more a {
|
||||
color: rgb(61,92,122);
|
||||
background-color: transparent;
|
||||
font-size: 92%;
|
||||
text-decoration: underline;
|
||||
margin: 0;
|
||||
padding: 0.25ex 0.75ex;
|
||||
}
|
||||
|
||||
.more a:hover {
|
||||
color: rgb(117,144,174);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.rowOfBoxes {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.quarter, .oneThird, .half, .twoThirds, .fullWidth {
|
||||
margin: 1em 0;
|
||||
float: left;
|
||||
border-left: 1px solid rgb(204,204,204);
|
||||
}
|
||||
|
||||
.quarter {
|
||||
width: 21%;
|
||||
padding: 0 1.9%;
|
||||
}
|
||||
|
||||
.oneThird {
|
||||
width: 28%;
|
||||
padding: 0 1.9%;
|
||||
}
|
||||
|
||||
.half {
|
||||
text-align: justify;
|
||||
width: 46%;
|
||||
padding: 0 1.9%;
|
||||
}
|
||||
|
||||
.twoThirds {
|
||||
text-align: justify;
|
||||
width: 63%;
|
||||
padding: 0 1.9%;
|
||||
}
|
||||
|
||||
.fullWidth {
|
||||
text-align: justify;
|
||||
width: 96%;
|
||||
padding: 0 1.2em;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.filler { /* use with an empty <p> element to add padding to the end of a text box */
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.noBorderOnLeft {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.dividingBorderAbove {
|
||||
border-top: 1px solid rgb(204,204,204);
|
||||
}
|
||||
|
||||
/* More elegant alternatives to .noBorderOnLeft & .dividingBorderAbove
|
||||
* that don't require the creation of new classes - but which are not
|
||||
* supported by MSIE - are the following:
|
||||
*
|
||||
* .rowOfBoxes > div:first-child {
|
||||
* border-left: none;
|
||||
* }
|
||||
*
|
||||
* .rowOfBoxes + .rowOfBoxes {
|
||||
* border-top: 1px solid rgb(204,204,204);
|
||||
* }
|
||||
*/
|
||||
|
||||
|
||||
/* ##### Footer ##### */
|
||||
|
||||
#footer {
|
||||
color: rgb(51,51,102);
|
||||
background-color: rgb(239,239,239);
|
||||
font-size: 87%;
|
||||
text-align: center;
|
||||
line-height: 1.25em;
|
||||
margin: 2em 0 0 0;
|
||||
padding: 1ex 10px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#footer a {
|
||||
color: rgb(0,68,204);
|
||||
background-color: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -1,3 +1,6 @@
|
|||
/* Evennia CSS styles for the game website */
|
||||
|
||||
|
||||
/* Old site styles, left in just in case.
|
||||
Shouldn't break anything! */
|
||||
@media (max-width: 570px) {
|
||||
|
|
@ -49,16 +52,6 @@ body {
|
|||
background-color: #eee;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
line-height: 60px; /* Vertically center the text there */
|
||||
background-color: #7590ae;
|
||||
}
|
||||
|
||||
.navbar-brand-logo {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
|
|
@ -69,3 +62,40 @@ body {
|
|||
.navbar {
|
||||
background-color: #3d5c7a;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
line-height: 60px; /* Vertically center the text there */
|
||||
background-color: #3d5c7a;
|
||||
}
|
||||
|
||||
|
||||
/* Fancy play - button */
|
||||
|
||||
a.playbutton {
|
||||
box-shadow: 0px 1px 10px 5px #9fb4f2;
|
||||
background:linear-gradient(to bottom, #7892c2 5%, #476e9e 100%);
|
||||
background-color:#7892c2;
|
||||
border-radius:12px;
|
||||
border:1px solid #4e6096;
|
||||
display:inline-block;
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
font-family:Arial;
|
||||
font-size:19px;
|
||||
padding:14px 37px;
|
||||
text-decoration:none;
|
||||
text-shadow:0px 1px 0px #283966;
|
||||
}
|
||||
a.playbutton:hover {
|
||||
background:linear-gradient(to bottom, #476e9e 5%, #7892c2 100%);
|
||||
background-color:#476e9e;
|
||||
}
|
||||
a.playbutton:active {
|
||||
position:relative;
|
||||
top:1px;
|
||||
}
|
||||
|
|
@ -25,13 +25,6 @@ folder and edit it to add/remove links to the menu.
|
|||
<li>
|
||||
<a class="nav-link" href="{% url 'index' %}">Home</a>
|
||||
</li>
|
||||
<!-- evennia documentation -->
|
||||
<li>
|
||||
<a class="nav-link" href="https://www.evennia.com/docs/latest/Evennia-Introduction.html">About</a>
|
||||
</li>
|
||||
<li><a class="nav-link" href="https://www.evennia.com/docs/latest">Documentation</a></li>
|
||||
<!-- end evennia documentation -->
|
||||
|
||||
<!-- game views -->
|
||||
<li><a class="nav-link" href="{% url 'characters' %}">Characters</a></li>
|
||||
<li><a class="nav-link" href="{% url 'channels' %}">Channels</a></li>
|
||||
|
|
|
|||
|
|
@ -12,10 +12,11 @@
|
|||
<link rel="icon" type="image/x-icon" href="/static/website/images/evennia_logo.png" />
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
||||
<!--link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.6.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"-->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
|
||||
|
||||
<!-- Base CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="{% static "website/css/app.css" %}">
|
||||
<link rel="stylesheet" type="text/css" href="{% static "website/css/website.css" %}">
|
||||
|
||||
{% comment %}
|
||||
Allows for loading custom styles without overriding the base site styles
|
||||
|
|
@ -55,7 +56,9 @@
|
|||
<footer class="footer">
|
||||
{% block footer %}
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<span class="text-white">Powered by <a class="text-white font-weight-bold" href="https://evennia.com">Evennia.</a></span>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</footer>
|
||||
|
|
|
|||
|
|
@ -8,42 +8,37 @@
|
|||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card text-center">
|
||||
<div class="card-body">
|
||||
<h1 class="card-title">Welcome!</h1>
|
||||
|
||||
<h1 class="card-title">Welcome to Evennia!</h1>
|
||||
|
||||
<hr />
|
||||
|
||||
<p class="lead">
|
||||
Welcome to your new installation of <a href="https://evennia.com">Evennia</a>, your friendly
|
||||
neighborhood next-generation MUD development system and server.
|
||||
The Python MUD/MU* creation system.
|
||||
</p>
|
||||
<p>
|
||||
You are looking at Evennia's web
|
||||
presence, which can be expanded to a full-fledged site as needed.<br />
|
||||
Through the <a href="{% url 'admin:index' %}">admin interface</a> you can view and edit the
|
||||
database without logging into the game.
|
||||
You are looking at the start of your game's website, generated out of
|
||||
the box by Evennia. It has several example pages and can be expanded
|
||||
into a full-fledged home for your game.
|
||||
</p>
|
||||
{% if webclient_enabled %}
|
||||
<p>
|
||||
You can also connect to the game directly from your browser using our
|
||||
<a href="{% url 'webclient:index' %}">online client</a>!<br>
|
||||
<a href="{% url 'webclient:index' %}" class="playbutton">Play in the browser!</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<p>
|
||||
For more info, take your time to
|
||||
peruse our extensive online <a href="https://evennia.com/docs/latest">documentation</a>.
|
||||
peruse Evennia's extensive online <a href="https://evennia.com/docs/latest">manual</a>.
|
||||
</p>
|
||||
<p>
|
||||
Should you have any questions, concerns, bug reports, or
|
||||
if you want to help out, don't hesitate to join the Evennia community
|
||||
to make your voice heard! Drop a mail to the <a
|
||||
href="https://github.com/evennia/evennia/discussions">mailing
|
||||
list</a> or to come say hi in the <a
|
||||
href="http://webchat.freenode.net/?channels=evennia">developer chatroom</a>.
|
||||
If you have any questions, don't hesitate to join the Evennia community! Drop a message in the <a href="https://github.com/evennia/evennia/discussions">Evennia forums</a>
|
||||
or come say hi in the support/chat channels (<a href="http://webchat.freenode.net/?channels=evennia">IRC</a>
|
||||
or <a href="https://discord.gg/NecFePw">Discord</a>).
|
||||
</p>
|
||||
<p>
|
||||
If you find bugs, please report them to our <a href="https://github.com/evennia/evennia/issues">Issue tracker</a>.
|
||||
If you find bugs, please report them to our <a href="https://github.com/evennia/evennia/issues">Issue tracker</a> on GitHub.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -99,16 +94,16 @@
|
|||
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card text-center">
|
||||
<h4 class="card-header text-center">Evennia</h4>
|
||||
|
||||
<div class="card-body">
|
||||
<p><a href="https://evennia.com">Evennia</a> is an open-source MUD server built in
|
||||
<a href="http://python.org">Python</a>, on top of the
|
||||
<p><a href="https://evennia.com">Evennia</a> is an open-source MUD/MU*-creation framework built in
|
||||
<a href="http://python.org">Python</a>, using
|
||||
<a href="http://twistedmatrix.com">Twisted</a> and
|
||||
<a href="http://djangoproject.com">Django</a> frameworks. This
|
||||
combination of technologies allows for the quick and easy creation
|
||||
of the game of your dreams - as simple or as complex as you like.</p>
|
||||
<a href="http://djangoproject.com">Django</a>.<br>
|
||||
Create the text-based multiplayer-game of your dreams - as
|
||||
simple or as complex as you like.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue