Command arguments overhaul by Miyoglow · Pull Request #169 · NutScript/NutScript · GitHub
Skip to content

Command arguments overhaul#169

Draft
Miyoglow wants to merge 8 commits into
NutScript:1.2-stablefrom
Miyoglow:commands-branch
Draft

Command arguments overhaul#169
Miyoglow wants to merge 8 commits into
NutScript:1.2-stablefrom
Miyoglow:commands-branch

Conversation

@Miyoglow

@Miyoglow Miyoglow commented May 16, 2024

Copy link
Copy Markdown
Contributor

First steps to a command arguments overhaul, this will be an active draft PR. Just getting it started for now.
The goals of this are mainly to make it simpler to create commands/arguments and know what to expect in the onRun function, it should automatically check the input arguments when running the command to see if they match the commands arguments list and replace any input arguments if needed (see how nut.type.player returns a findPlayer call and if it's successful it gets sent on to the onRun)

The basics seem to work as of right now (replaced /roll and /pm to test optional and required arguments) but I still think we could setup a new system that automatically generates more scoped/specific net.* messages for every command.
Probably should also come up with a way to make any nut.type.string argument that is final in the command's argument list not require quotes surrounding it.

This also implements a basic "type" library, could be expanded upon and/or used elsewhere in the framework.

Until this is in a better spot I think getting CAMI in should be looked at first, and also any temporary fixes that may be needed first until we finish this up.

Miyoglow added 2 commits May 16, 2024 00:28
Final string arguments no longer require quotes surrounding them
Added character type
@Miyoglow

Copy link
Copy Markdown
Contributor Author

…t free bit position.

(this may fail when we hit 32 types, possibly cause stack overflow or halt)

Any final argument can be typed without quotes now, not just strings. Chatbox modification to make it work

Fixed the help menu to actually display syntax.

Changed all commands in sh_commands.lua to use it (not yet plugin commands)

Now arguments can be a single value instead of table, and also arguments can have multiple types accepted, like in the case of /charunban (we could expand this to more commands later)
@Miyoglow

Miyoglow commented May 17, 2024

Copy link
Copy Markdown
Contributor Author

With the latest commit we've switched from the pow2 calc to just iterating over the bits to find the next free bit position when adding types.
(this'll probably fail if we ever hit 32 types (ie 32 bits), possibly cause stack overflow or halt)

Any final argument can be typed without quotes now, not just strings. Chatbox updated to make that and syntax work. (temporary, will overhaul chatbox completely at a later date)
Fixed the help menu to actually display syntax.

Changed all commands in sh_commands.lua to use new the argument system (not yet plugin commands)

Now command arguments list can be a single value instead of table, and also arguments can have multiple types accepted, like in the case of /charunban (we could expand this to more commands later).

Miyoglow added 2 commits May 17, 2024 02:31
…ing it all up.

Change what nut.type returns
Change target.getPlayer into a type check for /charunban
to just a table, and then implement functions for and/or.

Change where types "resolve" any value into their own type, instead of being in assert it will now be a different function.
@Miyoglow

Miyoglow commented May 17, 2024

Copy link
Copy Markdown
Contributor Author

With the latest commit we've changed from using bitwise operations for managing types to now shoving types into a table, the implementation for and/or is now a little more convoluted but should still be manage-able. (I didn't like the 32bit limit that comes with operating on bits like that)

New functions:
nut.type.tor(...) accepts vararg of types (and more 'and/or' functions), and spits out a function, this function can be called with a value passed to it to see if it passes any of the type's assertion functions.

nut.type.tand(...) is functionally the same but instead of allowing it to pass any of the type's assertion's it must pass them all.

nut.type.resolve(nut.type.* OR and/or function, value) if a and/or function is provided it will go through all the types that were used to make that function and try to resolve them into their respective type. If a type is provided it will try to resolve for that type. (note: resolve does not do any sort of assertion)

and nut.type.assert(nut.type.* OR and/or function, value) will call and return the function that is provided into it (should be a and/or function) or, pass a nut.type.* into it and it will call and return that type's assertion function.

Assertion as been cleaned up to only implement actual "assertion" and not changing any values, that functionality, for "resolving" any value (most likely a command argument string) into the certain type has been put into the type's table as a new function added with nut.type.addResolve(type, func)

Resolve function's should be like this:
Any value (probably command argument string) gets passed into it, you should then here check to see if you can find a value of the type (i.e a character) that matches the passed argument, then return that character. There is also a return false, FAIL_STRING if you want to pass a fail string to nut.type.resolve's second output (fail string's are used in nut.command.parse to give that feedback to the client when a resolve fails).

Miyoglow added 2 commits May 18, 2024 17:24
Change nut.util.findPlayer to use the player type resolve instead.

If an argument is set to nut.type.optional only it won't show in the syntax and will always count as a success to resolve.

Resolves made a table on the type with unique identifiers per resolve, so you could add have more resolves per type now.
@Miyoglow

Miyoglow commented May 19, 2024

Copy link
Copy Markdown
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant