-
-
Notifications
You must be signed in to change notification settings - Fork 433
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add functions for working with entity lumps #1673
Conversation
Have tested and confirmed that it's working now. This plugin is available as a sample for entity lump access; it's a copy of the extension's version with the replacement of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks solid, I like the API a lot - thanks for doing the work here @nosoop! The usage does seem niche in total plugin count, but I think it's powerful enough (and stripper popular enough) that it does make sense to ship with SM for sure.
The implementation looks good, I haven't super dug into it yet but I know it's been well tested. The interaction between weakref
and Handle
could be a bit interesting, but I think it's definitely an easier way to go than dealing with handle cloning (and handles aren't the sanest in native land currently). @Headline I'd appreciate your eyes on the C++ stdlib usage here as an extra sanity check.
I think the only change to the implementation that I think it'd be good to attempt is moving the bulk of the code into the logic binary (LumpManager and the natives) - the per-engine builds really are slow and we're trying to share as much as possible, and it looks like we won't need much added to the bridge to accommodate this.
EDIT: Please could you include that test plugin in plugins/testsuite/
too - it looks like a really great reference.
This reallows for building the standalone parser for testing.
This allows for standalone testing of the parsing component with arbitrary entity strings.
As long as there isn't any need for SDK-specific flags, moving it into the logic binary would be fine. I'm not familiar with how the bridge itself would work. From skimming the source, it sounds like I should move the files into Aside, I'm also doing some minor refactors to move the SourceMod dependencies out of
Will do; I'll push a commit with that. Before I forget to mention it, there are currently no checks in place to ensure users don't insert double quotes [in keys / values]. I've considered it before, but I'm not sure which of the options would be preferable:
|
I've moved the entity lump code into the logic binary and confirmed that it builds and runs as expected on Windows / Linux TF2, and have also added the standalone entity lump parsing utility under I'd also request to please add |
Co-authored-by: Mat <matan@mansheroff.net>
Any news regarding this pull request? |
Nothing on my end; just waiting on the merge or further feedback. I might retract the PR since it missed 1.11 to fill in for the now-removed I can't think of a good migration path from the extension to the in-core version, which is why I didn't want to publish extension builds myself.
The lumps remain available in case plugins have any reason to read the original data in the future. Should be able to pool the keys, though. |
Retracting this PR; extension builds will be made available within the next few days*. I'm open to resubmitting this in a form that is backward-compatible with users of the extension in the future. * unless a maintainer merges this into 1.11+ or gives me something actionable before builds go up, I guess — the important thing is that users on current stable builds are able to work with this |
Reopening this and moving the informal discussion with @Headline from Discord into the PR conversation here. Hopefully we can get this sorted out and into stable soon.
If I remember correctly, the idea was that Still, a plugin shouldn't remove an entry it's working with, and it shouldn't expect anything to be preserved if it calls into another plugin, so I consider it developer error. I can expose a property to check for expiry, but in my mind, plugins should not have to worry about it; granted I'm sure people will find creative ways to break my assumptions.
To clarify, the permissions currently in the PR (in Last thing I was considering was tweaking the method naming to match those of |
If the entity lump string cannot be fully parsed, the manager will have a list of successfully parsed lump entries up to the point of failure. This commit prevents the serialized partial entity lump from replacing the original entity string in SourceModBase::GetMapEntitiesString. However, the lump entries will still be present for plugins to work with; this is not defined behavior and we may opt to empty out the lumpmanager instead. This regression was introduced during the migration from extension to core; the extension version never calls its OnMapEntitiesParsed forward on parse failure, so plugins were previously blissfully unaware of entities that may be manipulated, though they could still perform read-only access on the partial list past that forward.
Fixed up a bug introduced in the core-merged version that would cause issues if parsing failed partway into a file. For those interested in testing, attached are builds of Windows and Linux versions compiled for supported SDK versions. The builds were compiled against entlump-1.11, which is this PR rebased against a somewhat recent 1.11 commit (5d9ddee causes rebase conflicts, presumably due to a file list being reverted to a previous ordering). package.zip (Windows) / package.tar.gz (Linux) I've tested the build on TF2, so I assume there won't be any regressions for the few others that have run the extension; the lumpmanager component is practically unchanged. If an entity lump parse failure occurs, it should report an error, but otherwise the server should continue to function as before. |
LGTM! Minor nitpick: Would it make more sense to turn |
Thanks for testing!
|
Closes #1547.
This PR merges my Entity Lump Manager extension into SourceMod's core mostly as-is, with the primary change being that the lump is unlocked for writing during
OnMapInit
instead of during its own forward.Making use of
OnMapInit
just about the only reason for merging into core — I'm open to alternative options if the team would like to push forward with its inclusion in some form.Parsing logic tested against ~700 maps for Team Fortress 2, and a bug has been reported and fixed for CS:GO.
Also open to other changes like bringing the native names more in line with the existing
ArrayList
methods and such.(PR is a WIP and not in working order — have to do some additional work for creating the handle type and to clean up the includes / license headers. Just putting the PR in now in case anyone has any input regarding its inclusion.)