Commit Graph

308 Commits

Author SHA1 Message Date
Fabian Dill f06d160615 don't check the AP tag anymore 2021-05-10 01:18:57 +02:00
Fabian Dill 909172cbad Factorio, Minecraft & Hollow Knight: add startinventory support 2021-05-09 21:22:21 +02:00
Fabian Dill 60f64cc46b rename get_location_name_from_address to get_location_name_from_id 2021-04-28 15:48:11 +02:00
KonoTyran 5087b78c28
fixed !missing to point to location table not item. (#2) 2021-04-28 15:46:54 +02:00
Fabian Dill 2dd6dcab20 remote now unneccessary line 2021-04-17 22:01:34 +02:00
Fabian Dill 4494207717 generalize LocationScout and make LttP remote items break entirely 2021-04-17 22:00:45 +02:00
Fabian Dill 501c55cc26 add per-slot data and embed HK options in it 2021-04-17 21:03:57 +02:00
Fabian Dill 2df7e4e537 add seed_name to multidata and RoomInfo 2021-04-12 09:36:45 +02:00
Fabian Dill 3858a12f26 MultiServer: check for correct game 2021-04-10 21:08:01 +02:00
Fabian Dill f0a6b5a8e4 Factorio:
add visibility option
fix tech_cost using the wrong variable name
fix yaml defaults not init'ing the Option class
LttP:
fix potential pathing confusion in maseya palette shuffler
Server:
Minimum version per team made no sense, removed
2021-04-08 19:53:24 +02:00
Fabian Dill 443fc03700 Send actual NetworkPlayer on Connected too 2021-04-07 02:49:36 +02:00
Fabian Dill 6567f14415 add log_network Server argument 2021-04-07 02:37:21 +02:00
Fabian Dill 32560eac92 send actual NetworkPlayers 2021-04-07 02:20:03 +02:00
Fabian Dill 20b72369d8 allow basic WebHost functionality to work 2021-04-04 03:18:19 +02:00
Fabian Dill 250099f5fd Small adjustments 2021-04-03 20:02:15 +02:00
Fabian Dill 91bcd59940 implement Factorio options max_science_pack and tech_cost
also give warnings about deprecated LttP options
also fix FactorioClient.py getting stuck if send an unknown item id
also fix !missing having an extra newline after each entry
also default to no webui
2021-04-03 14:47:49 +02:00
Fabian Dill dc73fa0f33 Factorio integration 2021-04-01 11:40:58 +02:00
Fabian Dill 7402143c73 turn it around~ 2021-03-19 04:32:17 +01:00
Fabian Dill cdc330629b allow more HK names in console commands 2021-03-19 04:30:19 +01:00
Fabian Dill 8d6bec8b9a allow cheating Hollow Knight items 2021-03-19 04:21:53 +01:00
Fabian Dill 218fb0298f Some .Net compatibility 2021-03-19 04:14:59 +01:00
Fabian Dill a528ed5e9e Client now uses location_id consistently internally, instead of switching on a dime all the time
And some smaller changes
2021-03-07 22:05:07 +01:00
Fabian Dill 78ba31444e additional cleanup 2021-03-03 01:57:12 +01:00
Fabian Dill 0917f21384 revert PrintJSON to use key data, to match with documented behaviour 2021-03-02 22:36:50 +01:00
Fabian Dill 7871555620 Implement PrintJSON
Remove deprecated network packets
Make Client send new locations checked only once
Simplify register_location_checks
Rip out Server savegame compatibility
2021-03-02 22:31:44 +01:00
Fabian Dill 1849693353 Make object hook more dynamic; ignoring unknown arguments 2021-02-28 20:32:15 +01:00
Fabian Dill f19291aaed Remove Fake Hollow Knight Items and Locations
Add GetDataPackage Network system
2021-02-25 02:07:28 +01:00
Fabian Dill fe17fc6320 log misunderstood network commands 2021-02-21 23:54:08 +01:00
Fabian Dill cbbdb2948d attach command to args dict 2021-02-21 23:46:05 +01:00
Fabian Dill ff9b24e88e Hollow Knight integration
(prototype status)
2021-02-21 20:17:24 +01:00
Fabian Dill 1da1e4eac6 Sample implemention of JSONtoTextParser 2021-01-31 11:33:39 +01:00
Fabian Dill 2553b1d2ee Merge branch 'main' into breaking_changes 2021-01-30 23:40:25 +01:00
Fabian Dill c988ec24b6 update item table offsets 2021-01-30 23:40:01 +01:00
Fabian Dill a646594f08 Merge branch 'main' into breaking_changes
# Conflicts:
#	BaseClasses.py
#	Fill.py
#	MultiClient.py
#	MultiServer.py
#	Utils.py
#	test/dungeons/TestDungeon.py
#	test/inverted/TestInverted.py
#	test/inverted_minor_glitches/TestInvertedMinor.py
#	test/inverted_owg/TestInvertedOWG.py
#	test/minor_glitches/TestMinor.py
#	test/owg/TestVanillaOWG.py
#	test/vanilla/TestVanilla.py
#	worlds/alttp/ItemPool.py
#	worlds/alttp/Main.py
#	worlds/alttp/Rom.py
2021-01-30 23:29:32 +01:00
CaitSith2 6163ddd374 Use names listed in Regions.lookup_name_to_id for location names. 2021-01-22 04:40:09 -08:00
CaitSith2 8d63e13ca7 Revert "Multidata is now able to provide items/location IDs to server."
This reverts commit f47a85d435.
2021-01-21 22:43:07 -08:00
CaitSith2 67119f8858 Revert "Get remaining things for better client/server interactions."
This reverts commit 6c1d3cb60d.
2021-01-21 22:41:19 -08:00
CaitSith2 6c1d3cb60d Get remaining things for better client/server interactions. 2021-01-21 16:57:31 -08:00
CaitSith2 f47a85d435 Multidata is now able to provide items/location IDs to server. 2021-01-21 16:23:56 -08:00
CaitSith2 8754c63d4e client/server changes
* Server now includes checked locations as a separate list.
* If client connects to a server that sends checked checks, client can now give accurate information on checked locations, and not show "New Check: seed-unknown-location (total/216)" and instead accurately show "New check: 'seed-known-location' (total_checked/seed_total)"
/missing now accurately reports what was previously checked.
* client now attempts to translate "Unknown Location ID: 'ID'" into an actual location, if server is unaware of the location, but the client is.
2021-01-21 16:21:51 -08:00
Fabian Dill c604dfe509 move networks commands to [str, Optional[dict]] across the board
and some other updates
PrintHTML is an experiment and is unlikely the solution I'll go with
2021-01-21 23:37:58 +01:00
Fabian Dill 514cd19367 Merge branch 'main' into breaking_changes
# Conflicts:
#	BaseClasses.py
#	Mystery.py
#	WebHostLib/downloads.py
#	WebHostLib/models.py
#	WebHostLib/templates/macros.html
#	WebHostLib/upload.py
#	worlds/alttp/ItemPool.py
#	worlds/alttp/Main.py
2021-01-17 06:50:25 +01:00
Fabian Dill 5afe44f9cb use multidata locations to get missing checks (in server) 2021-01-15 03:22:56 +01:00
Fabian Dill 10b7c83f1d Just use locations in the multidata, not static IDs, for forfeits
Should also work better for *other* games
2021-01-10 14:50:38 +01:00
Fabian Dill 233e9e6208 expand forfeit to forfeit out anything that is in multidata, so forfeits works with not yet implemented locations 2021-01-10 12:52:23 +01:00
Fabian Dill e03841794b Add Client warning when forfeit is set to automatic and client can't send required information 2021-01-04 22:41:18 +01:00
Fabian Dill 8ebd36b5a7 update Archipelago 2021-01-03 14:32:32 +01:00
Fabian Dill 08ca4245c1 Merge branch 'main' into breaking_changes
# Conflicts:
#	Adjuster.py
#	AdjusterMain.py
#	BaseClasses.py
#	MultiClient.py
#	MultiServer.py
#	Mystery.py
#	Utils.py
#	WebHostLib/downloads.py
#	WebHostLib/generate.py
#	dumpSprites.py
#	test/TestBase.py
#	worlds/alttp/EntranceRandomizer.py
#	worlds/alttp/Main.py
#	worlds/alttp/Rom.py
2021-01-03 13:13:59 +01:00
Fabian Dill e25a03173b Implement "minimum version" checks into server and clients 2020-12-29 19:23:14 +01:00
Fabian Dill 5128657349 allow setting remaining_mode from server options 2020-11-30 21:07:02 +01:00
Fabian Dill f56efbc9e3 improve handling of embedded server options:
use whitelist
attempt to set, skip otherwise
attempt to convert data type
2020-11-15 15:21:41 +01:00
CaitSith2 7e3e2134e0 Add option to client for actually forcing item sending safety off. 2020-10-27 16:27:39 -07:00
CaitSith2 66894dbd86 Add further safeties to sending of location checks.
This safety is able to be turned off, but has to be done so on EVERY connection explicitly.
2020-10-27 16:24:21 -07:00
CaitSith2 6ff4b20d81 Only save reported locations that actually exist in the multidata. 2020-10-27 02:20:56 -07:00
CaitSith2 83db79815a Make multiclient/multiserver/tracker keydropshuffle aware 2020-10-27 00:53:32 -07:00
Fabian Dill 1d58f54101 move ALTTP to its own world folder 2020-10-24 05:38:56 +02:00
Fabian Dill 4f8c737eec squashed commit of many breaking changes
Dropping Support for Python 3.7; adding support for Python 3.9
2020-10-19 08:26:31 +02:00
Fabian Dill add0762114 more compat removal 2020-10-18 23:18:54 +02:00
Fabian Dill 94dafa3c55 Open Breaking changes 2020-10-18 23:07:48 +02:00
CaitSith2 119a5a2b66 Allow client side login and remote issuing of server side commands.
Disabled by default. Requires a password to be set for it to be enabled.
2020-09-21 22:11:43 -07:00
CaitSith2 e77cd7c38a Add command to allow or forbid a specific player from using the !forfeit command despite server restrictions on the command.
Allows for allowing a player to forfeit if they are under a time restriction where they have to leave the game, without allowing the command globally.
2020-09-02 02:23:31 -07:00
Fabian Dill bca1a2d9e0 WebHost: Automatic !hint tracking 2020-07-27 19:30:31 +02:00
Fabian Dill 789d0245cc MultiServer: supposed to restart savefile on older formats too 2020-07-24 14:14:45 +02:00
Fabian Dill 88ba7b55d2 Multiserver: [0,1] == (0,1) -> False, turns out. 2020-07-24 14:00:59 +02:00
Berserker66 35e2b2d20d set_save adjustments for older DB savegames 2020-07-22 12:02:09 +02:00
Fabian Dill 78c85cce14 WebHost: List Rooms in a sortable table 2020-07-21 23:15:19 +02:00
Fabian Dill ac238d9b14 WebHost: Don't count exit saving as activity, thereby creating a hosting loop 2020-07-20 14:17:05 +02:00
Fabian Dill 1d036c0d3c add compatibility server setting 2020-07-16 16:57:38 +02:00
Fabian Dill 626b6b0521 fix loading old savegames from ponyorm DB 2020-07-16 02:29:36 +02:00
Fabian Dill 93ecf5988b implement secrets.SystemRandom() for --race 2020-07-14 07:01:51 +02:00
Fabian Dill 59a71dbb05 restore multidata backwards compatibility 2020-07-14 05:06:25 +02:00
Fabian Dill ea9e103cb0 update rom name handling 2020-07-14 04:48:56 +02:00
Fabian Dill ead9a0ef15 use modern formatting for joined message 2020-07-13 03:38:19 +02:00
Fabian Dill baba4b7c02 !hint now properly gives you prior collection info without needing enough to pay for another hint 2020-07-13 03:21:28 +02:00
caitsith2 319a315ec5 Fix !countdown and actually make !options work 2020-07-11 13:20:16 -07:00
Fabian Dill d190fe65c6 webhost update 2020-07-10 17:42:22 +02:00
Fabian Dill f998ae1a09 fix that countdown can get stuck 2020-07-05 21:46:44 +02:00
Fabian Dill 12273c396b add /countdown and !options 2020-07-05 21:45:52 +02:00
Fabian Dill 68e92ae5b4 assign option to correct instance 2020-06-27 16:54:07 +02:00
Fabian Dill de2cb1692e refine option changing 2020-06-27 14:25:46 +02:00
Fabian Dill 12120ac995 implement option changing 2020-06-27 14:16:51 +02:00
Fabian Dill 6f9f5cbe14 Add twitch hyperlinking to webhost 2020-06-27 13:52:03 +02:00
Fabian Dill 46038830c3 fix trailing could not pay notification if there was nothing left to pay for 2020-06-26 07:30:26 +02:00
Fabian Dill 45a24fab27 save client activity data to multisave 2020-06-23 14:12:27 +02:00
Fabian Dill 26eb44ef15 revenge of the player number offset 2020-06-21 17:04:25 +02:00
Fabian Dill 6421a373e1 Webhost Update
introduce a very WIP tracker
Server will try to reuse port and also try to only use one port
2020-06-21 15:32:31 +02:00
Fabian Dill 9e18c6f1cd Database-backed Webhosting 2020-06-20 20:03:06 +02:00
Fabian Dill 7e3ee8101f implement lazy multisave saving using a daemon thread 2020-06-20 15:46:33 +02:00
Fabian Dill facecdf487 implement --auto_shutdown <minutes>, shutting down a multiserver after that many minutes of inactivity
and set WebHost to a default of 6 hours
2020-06-16 11:26:54 +02:00
Fabian Dill bd1c9f896b allow ghosted slots with same ID to be replaced 2020-06-16 01:05:32 +02:00
Fabian Dill 3fbb959622 fix !missing for older clients 2020-06-15 22:15:04 +02:00
Fabian Dill 7353b489ce add available hint points to UI 2020-06-15 06:30:51 +02:00
Fabian Dill c486cd77bb fix missed rename 2020-06-14 04:12:38 +02:00
Fabian Dill ddc7be0794 update webhost 2020-06-13 22:49:57 +02:00
Fabian Dill 5da5847805 allow multiserver to defer to embedded options 2020-06-13 08:37:05 +02:00
Fabian Dill 4125995bdd Adjust output to "BM" (Berserker's Multiworld) to differentiate spoiler logs, roms and server data at a glance
Rename _multidata to .multidata and embed .multidata as MultiServer-openable file into windows registry
2020-06-10 21:25:14 +02:00
Fabian Dill 90b24e3d59 alias now goes to 16, same as rom-name. Also improve some docstrings 2020-06-10 06:13:14 +02:00
Fabian Dill 27901008bc fix that hints print already collected items again 2020-06-09 05:22:48 +02:00
Fabian Dill 68f453f802 remove duplicate old hints 2020-06-07 03:50:28 +02:00
Fabian Dill 55b37a998d hotfix hint cost problem 2020-06-07 03:08:53 +02:00
Fabian Dill 2302150521 adjust hint payment rejected text 2020-06-07 02:38:03 +02:00
Fabian Dill 2e21e41c16 Allow partial hints 2020-06-07 02:13:41 +02:00
Fabian Dill b36738f3f4 reraise the crash 2020-06-07 00:50:39 +02:00
Fabian Dill 55152515f6 move stuff out of main(), for alternative server implementations 2020-06-07 00:49:10 +02:00
Fabian Dill 00d7667771 extend hint system with group names 2020-06-07 00:19:19 +02:00
Fabian Dill 38cbcc662f
WebUI (#100)
* Object-Oriented base changes for web-ui prep

* remove debug raise

* optimize broadcast to serialize once

* Implement WebUI socket, static assets, and classes

- Still need to wrap logging functions and send output to UI
- UI commands are successfully being sent to the server

* GUI operational. Wrap logging functions, implement server address selection on GUI, automatically launch web browser when client websocket is served

* Update MultiServer status when a user disconnects / reconnects

* Implement colored item and hint checks, improve GUI readability

* Fix improper formatting on received items

* Update SNES connection status on disconnect / reconnect. Implement itemFound, prevent accidentally printing JS objects

* Minor text change for itemFound

* Fixed a very wrong comment

* Fixed client commands not working, fixed un-helpful error messages appearing in GUI

* Fix a bug causing a failure to connect to a multiworld server if a previously existing cached address was present and the client was loaded without an address passed in

* Convert WebUI to React /w Redux. WebSocket communications not yet operational.

* WebUI fully converted to React / Redux.

- Websocket communication operational
- Added a button to connect to the multiserver which appears only when a SNES is connected and a server connection is not active

* Restore some features lost in WebUI

- Restore (found) notification on hints if the item has already been obtained
- Restore (x/y) indicator on received items, which indicates the number of items the client is waiting to receive from the client in a queue

* Fix a grammatical UI big causing player names to show only an apostrophe when possessive

* Add support for multiple SNES Devices, and switching between them

* freeze support for client

* make sure flask works when frozen

* UI Improvements

- Hint messages now actually show a found status via ✔ and  emoji
- Active player name is always a different color than other players (orange for now)
- Add a toggle to show only entries relevant to the active player
- Added a WidgetArea
- Added a notes widget

* Received items now marked as relevant

* Include production build for deployment

* Notes now survive a browser close. Minimum width applied to monitor to prevent CSS issues.

* include webUi folder in setup.py

* Bugfixes for Monitor

- Fix a bug causing the monitor window to grow beyond it's intended content limit
- Reduced monitor content limit to 200 items
- Ensured each monitor entry has a unique key

* Prevent eslint from yelling at me about stupid things

* Add button to collapse sidebar, press enter on empty server input to disconnect on purpose

* WebUI is now aware of client disconnect, message log limit increased to 350, fix !missing output

* Update WebUI to v2.2.1

- Added color to WebUI for entrance-span
- Make !missing show total count at bottom of list to match /missing behavior

* Fix a bug causing clients version <= 2.2.0 to crash when anyone asks for a hint

- Also fix a bug in the WebUI causing the entrance location to always show as "somewhere"

* Update WebUI color palette (this cost me $50)

* allow text console input alongside web-ui

* remove Flask
a bit overkill for what we're doing

* remove jinja2

* Update WebUI to work with new hosting mechanism

* with flask gone, we no longer need subprocess shenanigans

* If multiple web ui clients try to run, at least present a working console

* Update MultiClient and WebUI to handle multiple clients simultaneously.

- The port on which the websocket for the WebUI is hosted is not chosen randomly from 5000 - 5999. This port is passed to the browser so it knows which MultiClient to connect to

- Removed failure condition if a web server is already running, as there is no need to run more than one web server on a single system. If an exception is thrown while attempting to launch a web server, a check is made for the port being unavailable. If the port is unavailable, it probably means the user is launching a second MultiClient. A web browser is then opened with a connection to the correct webui_socket_port.

- Add a /web command to the MultiClient to repoen the appropriate browser window and get params in case a user accidentally closes the tab

* Use proper name for WebUI

* move webui into /data with other data files

* make web ui optional
This is mostly for laptop users wanting to preserve some battery, should not be needed outside of that.

* fix direct server start

* re-add connection timer

* fix indentation

Co-authored-by: Chris <chris@legendserver.info>
2020-06-03 21:29:43 +02:00
Fabian Dill ffe67c7fa7 make activity timer actually based on activity and add connection timer for connection timing information
Also optimize "register_location_checks", because I was editing it anyway
2020-06-03 21:07:32 +02:00
Fabian Dill 0cb80eadf1 add more room info 2020-05-30 11:36:59 +02:00
Fabian Dill 10bced3d68 rip out port forwarding. Broken and as a result mostly unused. 2020-05-30 03:47:40 +02:00
Fabian Dill 3139b05fd2 tiny hint optimization 2020-05-18 23:27:56 +02:00
Fabian Dill df79e570bb shorten hint text a bit, now that it got longer 2020-05-18 23:24:41 +02:00
Fabian Dill b2e20be077 Hints now contain ER info 2020-05-18 05:40:36 +02:00
caitsith2 d24e5e1eeb Correct an oops on the command line regarding forfeit-mode. 2020-05-14 15:17:56 -07:00
Fabian Dill 9b4a87a467 use self.output in command processor 2020-05-14 07:12:20 +02:00
Fabian Dill aa3eb6a3f8 stronger compression and compatibility on multidata 2020-05-08 23:09:56 +02:00
Fabian Dill 6afd4f0507 addresses #86
And also fixes auto, which worked as goal but never got triggered
2020-05-04 02:47:22 +02:00
Fabian Dill d6665b6b53
Merge pull request #78 from Berserker66/tweaks
Tweaks
2020-04-30 17:27:34 +02:00
Fabian Dill 92350831fc notify_all already prints to local console via logging 2020-04-30 04:44:57 +02:00
Fabian Dill a6cc75d36a optimize broadcast to serialize once 2020-04-30 04:39:38 +02:00
Fabian Dill f5be6867c8 "license" is a python built-in and we should not shadow that name 2020-04-28 22:17:47 +02:00
caitsith2 7a3511e1ef Update messages that get sent to client with aliases. 2020-04-27 23:49:46 -07:00
Fabian Dill 00da5dfd65 warn older client versions that features are missing 2020-04-28 05:59:03 +02:00
CaitSith2 495254addf
Actually check if client goal is achieved, instead of just existence of an entry. (#77) 2020-04-27 15:13:33 +02:00
Fabian Dill ad66909669 implement server side /alias, also prevent aliases with trailing whitespace 2020-04-27 03:47:12 +02:00
Fabian Dill 00ba3c71c9 fix server not sending aliased names on connect 2020-04-25 23:16:16 +02:00
Fabian Dill 77ca61d069 introduce forfeit_mode and remaining_mode, as well as server state for client has beaten the game
more info in host.yaml
2020-04-25 15:11:58 +02:00
caitsith2 49385ede3d Change win text 2020-04-24 21:42:13 -07:00
caitsith2 b3c7789596 Changes
* Game end detection - Detect if the player finished their game, and announce it accordingly.
* Add a client side /slow_mode option. (allows to delay receiving items when a massive amount of them come in, like from a forfeit.)
2020-04-24 20:07:28 -07:00
Fabian Dill 5d33b4b164 introduce persistent data storage, which for now just caches rom -> server pairs 2020-04-24 05:29:02 +02:00
Fabian Dill 7582767401 aliases 2020-04-23 06:16:54 +02:00
Fabian Dill 9842399d8b fix payment for already found hints 2020-04-22 15:50:14 +02:00
Fabian Dill fa2cf20b01 !hint now points out all hints relating to the player issuing the command.
payed hints also retain that they were already found and don't need to be re-checked as items can't be unfound.
2020-04-22 05:09:46 +02:00
Fabian Dill afc379f92e make get_intended_text handle 1 out of 1 pools correctly. 2020-04-21 21:53:20 +02:00
Fabian Dill 9291a0dbca make sure countdown is started in base10 2020-04-21 21:46:16 +02:00
Fabian Dill 8ea342abe5 Add result flag to commands 2020-04-21 06:26:51 +02:00
Fabian Dill 356ff91cfd make players command only output to the player requesting if there's 10 or more players 2020-04-20 23:03:52 +02:00
Fabian Dill 905714adfe improve license command with cache and local path 2020-04-20 21:15:13 +02:00
Fabian Dill 860faf6ef5 unify versions 2020-04-20 14:50:49 +02:00
Fabian Dill 5a57519c32 Add count to missing command
Add a server's missing command
Fix password wasn't able to remove a set password
2020-04-20 11:47:50 +02:00
Fabian Dill ecc2b03aed keep track of last item checked time for clients 2020-04-20 04:36:56 +02:00
Fabian Dill a4225d29e5 document Command Processor __call__ tree 2020-04-19 15:32:27 +02:00
Fabian Dill 60707f5196 fix methods with raw_text and optional argument 2020-04-19 15:31:15 +02:00
Fabian Dill 98a8af560a rename get_connected_players_string 2020-04-19 14:51:48 +02:00
Fabian Dill 3840832f05 disconnect on send failure 2020-04-19 14:05:58 +02:00
Fabian Dill 24fce94766 Don't ignore disconnects when they happen during data transfer, instead properly disconnect the client 2020-04-19 13:16:12 +02:00
Fabian Dill 659bc0e177 no longer eat multiple spaces in commands 2020-04-19 03:24:27 +02:00
Fabian Dill 4f52a8db4c player names should not contain spaces, but in case they do, this makes single-spaces work 2020-04-19 00:14:43 +02:00
Fabian Dill 8599c76647 Disallow spaces in generated names 2020-04-18 21:46:57 +02:00
Fabian Dill ea53fff43e allow kicking of players with spaces in name (permanent solution later) 2020-04-18 21:42:21 +02:00
Fabian Dill a36d887122 add ability to disable forfeits 2020-04-16 15:40:31 +02:00