Clickable elements in a page which are not hyperlinks to other pages should be buttons for accessibility. This changes the clickable area into a button to more closely align with best practices.
Product is the noun, while the correct part of speech here is the verb "produce".
Also of note, the limit doesn't change unless data is entered and then removed (otherwise the previous limit is kept) even if the button is clicked (which isn't the expected behavior based on the text). However, I'm not sure how to convey this succintly though and I'm not familiar enough with React to change the value when only the button is clicked (especially since it is probably the intended behavior to not change the value when the modal is closed by clicking outside of it).
* fixed the export material fix
* changed teh dev menu fund adjuster for more granular control
* added checks for smartSupply and setSmartSupply
* few random autolints
* added early out in UpgradeWarehouse when not enough cash
* added checks to enforce maxProducts
* added checks to enforce export material is valid for location
* added checks for market ti reasearches
* coupled some of the styles to avoid breaking this later on
* added tooltip incase its too long/ too small
* changes to use elipsis and RTL to read the end of file name
It is possible for a player to qualify for an aug through a faction and
not the gang, e.g. when the gang is newly formed and still getting up to
speed. So, we need to consider both gang qualifications and faction
qualifications when constructing the sleeve augmentation list.
Spanning {node.name} across all three table columns in the Hacknet Node UI uses a bit less screen real estate, so that on larger font sizes you don't end up with e.g. "hacknet- " on one line and "node-11" on the next.
Initially just wanted to change "traffick" to "traffic" (as that supports both the American and British spelling), but then noticed there were a couple of other ones that could be made slightly less restrictive to improve detection. All changes make detection LESS RESTRICTIVE for the player (ie, they have more ways to provide the parameter), none are MORE RESTRICTIVE (ie, won't break any existing code, etc.
Anything that worked before will still work, but now a few things that may not have worked before - like "traffic arms" (without the k), "illegal arms", and "assassin" will work. (Also allowed for the common misspelling of "forgary")
Wraps the toX() functions of the Router to add a check to only run the
function when it is allowed.
The check is used in the import page to prevent user scripts from
redirecting away to a crime or something else.
Adds a channel to communicate between the main process & the renderer
process, so that the game can easily ship data back to the main process.
It uses the Electron contextBridge & ipcRenderer/ipcMain.
Connects those events to various save functions. Adds triggered events
on game save, game load, and imported game. Adds way for the Electron
app to ask for certain actions or data.
Hook handlers to disable automatic restore
Allows to temporarily disable restore when the game just did an import
or deleted a save game. Prevents looping screens.
This adds a new page reachable from the import save file
options menu. It shows the difference between the current save
and the data that is being imported, for confirmation.
Includes an "automatic" variant, which has different wording for when
Electron decides it has access to a newer version of the game.
While in this screen, the autosave is disabled.
This also adds a new BypassWrapper component around the game's tree.
It allows for content to be displayed without rendering the nested
pages (import, recovery). This prevents player scripts from messing
with the screen.
Adds a lot of metadata to be able to easily compare the new save to the
current player.
- Adds lastSaved & identifier to the PlayerObject
- Includes a hash method used to generate an identifier
The API can already toggle smart supply on/off, but can't manage the
related controls for whether smart supply will draw from the existing
materials in the warehouse. Without it, we can't keep some resources in
storage to boost the production multiplier without disabling smart
supply entirely.
Copy the terminal commands into the player object so that they are saved
between game reloads.
Adds a 'history' command to display history, and a 'history -c' command
to clear it from both the current terminal & the player's save.
It may be intentional to use hack for all 3 (ie, assume the player makes the connection that can't hack, also means can't grow or weaken), in which case, disregard.
On the other hand, it could've easily been a copy/paste artifact, and this would be more explicitly clear, so thought it was worth bringing up.
Removed the themes buttons that were in the ThemeEditorModal and only
left a "Revert to Default" button along with a link to the ThemeBrowser
page.
Split off the buttons into reusable components since they are now used
in two pages.
Display the themes in big cards with a zoomable screenshot. Applying the
theme now shows a toast with an option to undo the action.
The snackbar now allows ReactNode instead of only strings.
- Add link with details on how to create a new theme in the game.
- Add link to the theme-sharing discord channel.
- Add icons to the theme & style buttons in GameOptions
- Add "Theme Editor" button to ThemeBrowser
- Add "Style Editor" button to ThemeBrowser
- Move Styles related files into Themes folder
- Includes a modal that shows a bigger version of the screenshot.
- Change Snackbar to allow for ReactNode as the message
It lets us bundle static files such as images.
Allows us to `imports img from "./img.png"` to retrieve an image's path.
Note that we'll have to add other entries in the global.d.ts file if we
want to handle other extensions than .png.
Adds mocks to Jest tests so that we don't fail tests when loading static
assets.
- Used restful patterns for handling server calls (GET/PUT/DELETE)
- Utilized Server interface for saves rather than reimplementing code
- Exposed operations for getting codebase of scripts on the home server and deleting files.
- Added a common response structure