mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-27 04:13:27 -07:00
Compare commits
5 Commits
0.6.7-rc1
...
webhost_ot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1529c8938c | ||
|
|
70fc3e05fb | ||
|
|
d01c9577ab | ||
|
|
260bae359d | ||
|
|
3016379b85 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -45,6 +45,7 @@ EnemizerCLI/
|
|||||||
/SNI/
|
/SNI/
|
||||||
/sni-*/
|
/sni-*/
|
||||||
/appimagetool*
|
/appimagetool*
|
||||||
|
/VC_redist.x64.exe
|
||||||
/host.yaml
|
/host.yaml
|
||||||
/options.yaml
|
/options.yaml
|
||||||
/config.yaml
|
/config.yaml
|
||||||
|
|||||||
@@ -773,7 +773,7 @@ class CommonContext:
|
|||||||
if len(parts) == 1:
|
if len(parts) == 1:
|
||||||
parts = title.split(', ', 1)
|
parts = title.split(', ', 1)
|
||||||
if len(parts) > 1:
|
if len(parts) > 1:
|
||||||
text = parts[1] + '\n\n' + text
|
text = f"{parts[1]}\n\n{text}" if text else parts[1]
|
||||||
title = parts[0]
|
title = parts[0]
|
||||||
# display error
|
# display error
|
||||||
self._messagebox = MessageBox(title, text, error=True)
|
self._messagebox = MessageBox(title, text, error=True)
|
||||||
@@ -896,6 +896,8 @@ async def server_loop(ctx: CommonContext, address: typing.Optional[str] = None)
|
|||||||
"May not be running Archipelago on that address or port.")
|
"May not be running Archipelago on that address or port.")
|
||||||
except websockets.InvalidURI:
|
except websockets.InvalidURI:
|
||||||
ctx.handle_connection_loss("Failed to connect to the multiworld server (invalid URI)")
|
ctx.handle_connection_loss("Failed to connect to the multiworld server (invalid URI)")
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
ctx.handle_connection_loss("Failed to connect to the multiworld server. Connection timed out.")
|
||||||
except OSError:
|
except OSError:
|
||||||
ctx.handle_connection_loss("Failed to connect to the multiworld server")
|
ctx.handle_connection_loss("Failed to connect to the multiworld server")
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ app.config["SELFGEN"] = True # application process is in charge of scheduling G
|
|||||||
app.config["JOB_THRESHOLD"] = 1
|
app.config["JOB_THRESHOLD"] = 1
|
||||||
# after what time in seconds should generation be aborted, freeing the queue slot. Can be set to None to disable.
|
# after what time in seconds should generation be aborted, freeing the queue slot. Can be set to None to disable.
|
||||||
app.config["JOB_TIME"] = 600
|
app.config["JOB_TIME"] = 600
|
||||||
|
# maximum time in seconds since last activity for a room to be hosted
|
||||||
|
app.config["MAX_ROOM_TIMEOUT"] = 259200
|
||||||
# memory limit for generator processes in bytes
|
# memory limit for generator processes in bytes
|
||||||
app.config["GENERATOR_MEMORY_LIMIT"] = 4294967296
|
app.config["GENERATOR_MEMORY_LIMIT"] = 4294967296
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from threading import Event, Thread
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from pony.orm import db_session, select, commit, PrimaryKey
|
from pony.orm import db_session, select, commit, PrimaryKey, desc
|
||||||
|
|
||||||
from Utils import restricted_loads, utcnow
|
from Utils import restricted_loads, utcnow
|
||||||
from .locker import Locker, AlreadyRunningException
|
from .locker import Locker, AlreadyRunningException
|
||||||
@@ -129,7 +129,8 @@ def autohost(config: dict):
|
|||||||
with db_session:
|
with db_session:
|
||||||
rooms = select(
|
rooms = select(
|
||||||
room for room in Room if
|
room for room in Room if
|
||||||
room.last_activity >= utcnow() - timedelta(days=3))
|
room.last_activity >= utcnow() - timedelta(
|
||||||
|
seconds=config["MAX_ROOM_TIMEOUT"])).order_by(desc(Room.last_port))
|
||||||
for room in rooms:
|
for room in rooms:
|
||||||
# we have to filter twice, as the per-room timeout can't currently be PonyORM transpiled.
|
# we have to filter twice, as the per-room timeout can't currently be PonyORM transpiled.
|
||||||
if room.last_activity >= utcnow() - timedelta(seconds=room.timeout + 5):
|
if room.last_activity >= utcnow() - timedelta(seconds=room.timeout + 5):
|
||||||
|
|||||||
@@ -26,7 +26,10 @@ class GenericWeb(WebWorld):
|
|||||||
'English', 'setup_en.md', 'setup/en', ['alwaysintreble'])
|
'English', 'setup_en.md', 'setup/en', ['alwaysintreble'])
|
||||||
triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.',
|
triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.',
|
||||||
'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble'])
|
'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble'])
|
||||||
tutorials = [setup, mac, commands, advanced_settings, triggers, plando]
|
other = Tutorial('Other Games and Tools',
|
||||||
|
'A guide to additional games and tools that can be used with Archipelago.',
|
||||||
|
'English', 'other_en.md', 'other/en', ['Berserker'])
|
||||||
|
tutorials = [setup, mac, commands, advanced_settings, triggers, plando, other]
|
||||||
|
|
||||||
|
|
||||||
class GenericWorld(World):
|
class GenericWorld(World):
|
||||||
|
|||||||
24
worlds/generic/docs/other_en.md
Normal file
24
worlds/generic/docs/other_en.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Other Games and Tools
|
||||||
|
|
||||||
|
This guide provides information on additional community resources, tools, and games that function with Archipelago.
|
||||||
|
|
||||||
|
## Community Resources
|
||||||
|
|
||||||
|
The Archipelago community is active across several platforms where you can find support, new games, and tools.
|
||||||
|
|
||||||
|
### Discord Servers
|
||||||
|
Archipelago has two primary Discord servers for community interaction, game support, and hosting public games:
|
||||||
|
- **[Archipelago Official Discord](https://discord.gg/8Z65BR2)**: The main hub for the community, including general discussion, support, and public multiworld hosting.
|
||||||
|
- **[Archipelago After Dark Discord](https://discord.gg/fqvNCCRsu4)**: An adults-only server for 18+ and unrated content.
|
||||||
|
|
||||||
|
Both servers feature an **#apworld-index** channel. These channels are repositories for "APWorlds" — additional game implementations that can be easily added to your Archipelago installation to support more games.
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
- **[Archipelago Wiki](https://archipelago.miraheze.org/)**: A community-maintained wiki.
|
||||||
|
|
||||||
|
## Community Tools
|
||||||
|
|
||||||
|
These community-developed tools are frequently used alongside Archipelago to improve the player experience.
|
||||||
|
|
||||||
|
### PopTracker
|
||||||
|
**[PopTracker](https://github.com/black-sliver/PopTracker)** is a universal multi-platform tracking application designed for randomizers. It supports many Archipelago games through tracker packs, providing both manual and automatic autotracking capabilities by connecting directly to an Archipelago server.
|
||||||
@@ -1281,7 +1281,7 @@ exclusion_table = {
|
|||||||
LocationName.HadesCupTrophyParadoxCups,
|
LocationName.HadesCupTrophyParadoxCups,
|
||||||
LocationName.MusicalOrichalcumPlus,
|
LocationName.MusicalOrichalcumPlus,
|
||||||
],
|
],
|
||||||
"HitlistCasual": {
|
"HitlistCasual": [
|
||||||
LocationName.FuturePete,
|
LocationName.FuturePete,
|
||||||
LocationName.BetwixtandBetweenBondofFlame,
|
LocationName.BetwixtandBetweenBondofFlame,
|
||||||
LocationName.GrimReaper2,
|
LocationName.GrimReaper2,
|
||||||
@@ -1299,7 +1299,7 @@ exclusion_table = {
|
|||||||
LocationName.MCP,
|
LocationName.MCP,
|
||||||
LocationName.Lvl50,
|
LocationName.Lvl50,
|
||||||
LocationName.Lvl99
|
LocationName.Lvl99
|
||||||
},
|
],
|
||||||
"Cups": {
|
"Cups": {
|
||||||
LocationName.ProtectBeltPainandPanicCup,
|
LocationName.ProtectBeltPainandPanicCup,
|
||||||
LocationName.SerenityGemPainandPanicCup,
|
LocationName.SerenityGemPainandPanicCup,
|
||||||
|
|||||||
Reference in New Issue
Block a user