From da518fdc0f32839730ccdee8098b59c6f842d93f Mon Sep 17 00:00:00 2001 From: navewindre Date: Mon, 13 Nov 2023 14:28:08 +0100 Subject: ya --- sourcemod/scripting/include/entitylump.inc | 157 +++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 sourcemod/scripting/include/entitylump.inc (limited to 'sourcemod/scripting/include/entitylump.inc') diff --git a/sourcemod/scripting/include/entitylump.inc b/sourcemod/scripting/include/entitylump.inc new file mode 100644 index 0000000..9d269e6 --- /dev/null +++ b/sourcemod/scripting/include/entitylump.inc @@ -0,0 +1,157 @@ +#if defined _entitylump_included + #endinput +#endif + +#define _entitylump_included + +/** + * An ordered list of key / value pairs for a map entity. + * If the entry in the EntityLump is removed, the handle will error on all operations. + * (The handle will remain valid on the scripting side, and will still need to be deleted.) + * + * Write operations (update, insert, erase, append) are only allowed during OnMapInit. + */ +methodmap EntityLumpEntry < Handle { + /** + * Copies the key / value at the given index into buffers. + * + * @param index Position, starting from 0. + * @param keybuf Key name buffer. + * @param keylen Maximum length of the key name buffer. + * @param valbuf Value buffer. + * @param vallen Maximum length of the value buffer. + * @error Index is out of bounds. + */ + public native void Get(int index, char[] keybuf = "", int keylen = 0, char[] valbuf = "", int vallen = 0); + + /** + * Updates the key / value pair at the given index. + * + * @param index Position, starting from 0. + * @param key New key name, or NULL_STRING to preserve the existing key name. + * @param value New value, or NULL_STRING to preserve the existing value. + * @error Index is out of bounds or entity lump is read-only. + */ + public native void Update(int index, const char[] key = NULL_STRING, const char[] value = NULL_STRING); + + /** + * Inserts a new key / value pair at the given index, shifting the pair at that index and beyond up. + * If EntityLumpEntry.Length is passed in, this is an append operation. + * + * @param index Position, starting from 0. + * @param key New key name. + * @param value New value. + * @error Index is out of bounds or entity lump is read-only. + */ + public native void Insert(int index, const char[] key, const char[] value); + + /** + * Removes the key / value pair at the given index, shifting all entries past it down. + * + * @param index Position, starting from 0. + * @error Index is out of bounds or entity lump is read-only. + */ + public native void Erase(int index); + + /** + * Inserts a new key / value pair at the end of the entry's list. + * + * @param key New key name. + * @param value New value. + * @error Index is out of bounds or entity lump is read-only. + */ + public native void Append(const char[] key, const char[] value); + + /** + * Searches the entry list for an index matching a key starting from a position. + * + * @param key Key name to search. + * @param start A position after which to begin searching from. Use -1 to start from the + * first entry. + * @return Position after start with an entry matching the given key, or -1 if no + * match was found. + * @error Invalid start position; must be a value between -1 and one less than the + * length of the entry. + */ + public native int FindKey(const char[] key, int start = -1); + + /** + * Searches the entry list for an index matching a key starting from a position. + * This also copies the value from that index into the given buffer. + * + * This can be used to find the first / only value matching a key, or to iterate over all + * the values that match said key. + * + * @param key Key name to search. + * @param buffer Value buffer. This will contain the result of the next match, or empty + * if no match was found. + * @param maxlen Maximum length of the value buffer. + * @param start An index after which to begin searching from. Use -1 to start from the + * first entry. + * @return Position after start with an entry matching the given key, or -1 if no + * match was found. + * @error Invalid start position; must be a value between -1 and one less than the + * length of the entry. + */ + public int GetNextKey(const char[] key, char[] buffer, int maxlen, int start = -1) { + int result = this.FindKey(key, start); + if (result != -1) { + this.Get(result, .valbuf = buffer, .vallen = maxlen); + } else { + buffer[0] = '\0'; + } + return result; + } + + /** + * Retrieves the number of key / value pairs in the entry. + */ + property int Length { + public native get(); + } +}; + +/** + * A group of natives for a singleton entity lump, representing all the entities defined in the map. + * + * Write operations (insert, erase, append) are only allowed during OnMapInit. + */ +methodmap EntityLump { + /** + * Returns the EntityLumpEntry at the given index. + * This handle should be freed by the calling plugin. + * + * @param index Position, starting from 0. + * @error Index is out of bounds. + */ + public static native EntityLumpEntry Get(int index); + + /** + * Erases an EntityLumpEntry at the given index, shifting all entries past it down. + * Any handles referencing the erased EntityLumpEntry will throw on any operations aside from delete. + * + * @param index Position, starting from 0. + * @error Index is out of bounds or entity lump is read-only. + */ + public static native void Erase(int index); + + /** + * Inserts an empty EntityLumpEntry at the given index, shifting the existing entry and ones past it up. + * + * @param index Position, starting from 0. + * @error Index is out of bounds or entity lump is read-only. + */ + public static native void Insert(int index); + + /** + * Creates an empty EntityLumpEntry, returning its index. + * + * @error Entity lump is read-only. + */ + public static native int Append(); + + /** + * Returns the number of entities currently in the lump. + */ + public static native int Length(); +}; -- cgit v1.2.3