diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index f5d4e54b..8d018820 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -1104,7 +1104,7 @@ static cell_t smn_KvGetSectionSymbol(IPluginContext *pCtx, const cell_t *params) static cell_t KeyValues_Import(IPluginContext *pContext, const cell_t *params) { // This version takes (dest, src). The original is (src, dest). - cell_t new_params[3] = { + const cell_t new_params[3] = { 2, params[2], params[1], diff --git a/extensions/clientprefs/natives.cpp b/extensions/clientprefs/natives.cpp index 63e554e7..adffe6f1 100644 --- a/extensions/clientprefs/natives.cpp +++ b/extensions/clientprefs/natives.cpp @@ -471,20 +471,82 @@ cell_t GetClientCookieTime(IPluginContext *pContext, const cell_t *params) return value; } +static cell_t Cookie_Set(IPluginContext *pContext, const cell_t *params) +{ + // This version takes (handle, client, value). The original is (client, handle, value). + const cell_t new_params[4] = { + 3, + params[2], + params[1], + params[3] + }; + + return SetClientPrefCookie(pContext, new_params); +} + +static cell_t Cookie_Get(IPluginContext *pContext, const cell_t *params) +{ + // This verson takes (handle, client, buffer, maxlen). The original is (client, handle, buffer, maxlen). + const cell_t new_params[5] = { + 4, + params[2], + params[1], + params[3], + params[4] + }; + + return GetClientPrefCookie(pContext, new_params); +} + +static cell_t Cookie_SetByAuthId(IPluginContext *pContext, const cell_t *params) +{ + // This version takes (handle, authid, value). The original is (authid, handle, value). + const cell_t new_params[4] = { + 3, + params[2], + params[1], + params[3] + }; + + return SetAuthIdCookie(pContext, new_params); +} + +static cell_t Cookie_GetClientTime(IPluginContext *pContext, const cell_t *params) +{ + // This version takes (handle, client). The original is (client, handle) + const cell_t new_params[3] = { + 2, + params[2], + params[1], + }; + + return GetClientCookieTime(pContext, new_params); +} + sp_nativeinfo_t g_ClientPrefNatives[] = { - {"RegClientCookie", RegClientPrefCookie}, - {"FindClientCookie", FindClientPrefCookie}, - {"SetClientCookie", SetClientPrefCookie}, - {"SetAuthIdCookie", SetAuthIdCookie}, - {"GetClientCookie", GetClientPrefCookie}, - {"AreClientCookiesCached", AreClientCookiesCached}, - {"GetCookieAccess", GetCookieAccess}, - {"ReadCookieIterator", ReadCookieIterator}, - {"GetCookieIterator", GetCookieIterator}, - {"ShowCookieMenu", ShowSettingsMenu}, - {"SetCookieMenuItem", AddSettingsMenuItem}, - {"SetCookiePrefabMenu", AddSettingsPrefabMenuItem}, + {"RegClientCookie", RegClientPrefCookie}, + {"FindClientCookie", FindClientPrefCookie}, + {"SetClientCookie", SetClientPrefCookie}, + {"SetAuthIdCookie", SetAuthIdCookie}, + {"GetClientCookie", GetClientPrefCookie}, + {"AreClientCookiesCached", AreClientCookiesCached}, + {"GetCookieAccess", GetCookieAccess}, + {"ReadCookieIterator", ReadCookieIterator}, + {"GetCookieIterator", GetCookieIterator}, + {"ShowCookieMenu", ShowSettingsMenu}, + {"SetCookieMenuItem", AddSettingsMenuItem}, + {"SetCookiePrefabMenu", AddSettingsPrefabMenuItem}, {"GetClientCookieTime", GetClientCookieTime}, - {NULL, NULL} + + {"Cookie.Cookie", RegClientPrefCookie}, + {"Cookie.Find", FindClientPrefCookie}, + {"Cookie.Set", Cookie_Set}, + {"Cookie.Get", Cookie_Get}, + {"Cookie.SetByAuthId", Cookie_SetByAuthId}, + {"Cookie.SetPrefabMenu", AddSettingsPrefabMenuItem}, + {"Cookie.GetClientTime", Cookie_GetClientTime}, + {"Cookie.AccessLevel.get", GetCookieAccess}, + + {NULL, NULL} }; diff --git a/plugins/include/clientprefs.inc b/plugins/include/clientprefs.inc index 6225fada..6f5afcc8 100644 --- a/plugins/include/clientprefs.inc +++ b/plugins/include/clientprefs.inc @@ -40,9 +40,9 @@ */ enum CookieAccess { - CookieAccess_Public, /**< Visible and Changeable by users */ - CookieAccess_Protected, /**< Read only to users */ - CookieAccess_Private /**< Completely hidden cookie */ + CookieAccess_Public, /**< Visible and Changeable by users */ + CookieAccess_Protected, /**< Read only to users */ + CookieAccess_Private, /**< Completely hidden cookie */ }; /** @@ -50,10 +50,10 @@ enum CookieAccess */ enum CookieMenu { - CookieMenu_YesNo, /**< Yes/No menu with "yes"/"no" results saved into the cookie */ - CookieMenu_YesNo_Int, /**< Yes/No menu with 1/0 saved into the cookie */ - CookieMenu_OnOff, /**< On/Off menu with "on"/"off" results saved into the cookie */ - CookieMenu_OnOff_Int /**< On/Off menu with 1/0 saved into the cookie */ + CookieMenu_YesNo, /**< Yes/No menu with "yes"/"no" results saved into the cookie */ + CookieMenu_YesNo_Int, /**< Yes/No menu with 1/0 saved into the cookie */ + CookieMenu_OnOff, /**< On/Off menu with "on"/"off" results saved into the cookie */ + CookieMenu_OnOff_Int, /**< On/Off menu with 1/0 saved into the cookie */ }; enum CookieMenuAction @@ -71,98 +71,17 @@ enum CookieMenuAction * * INPUT : Client index and any data if available. */ - CookieMenuAction_SelectOption = 1 + CookieMenuAction_SelectOption = 1, }; -/** - * Note: - * - * A successful return value/result on any client prefs native only guarantees that the local cache has been updated. - * Database connection problems can still prevent the data from being permanently saved. Connection problems will be logged as - * errors by the clientprefs extension. - */ - -/** - * Creates a new Client preference cookie. - * - * Handles returned by RegClientCookie can be closed via CloseHandle() when - * no longer needed. - * - * @param name Name of the new preference cookie. - * @param description Optional description of the preference cookie. - * @param access What CookieAccess level to assign to this cookie. - * @return A handle to the newly created cookie. If the cookie already - * exists, a handle to it will still be returned. - * @error Cookie name is blank. - */ -native Handle RegClientCookie(const char[] name, const char[] description, CookieAccess access); - -/** - * Searches for a Client preference cookie. - * - * Handles returned by FindClientCookie can be closed via CloseHandle() when - * no longer needed. - * - * @param name Name of cookie to find. - * @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. - */ -native Handle FindClientCookie(const char[] name); - -/** - * Set the value of a Client preference cookie. - * - * @param client Client index. - * @param cookie Client preference cookie handle. - * @param value String value to set. - * @error Invalid cookie handle or invalid client index. - */ -native void SetClientCookie(int client, Handle cookie, const char[] value); - -/** - * Retrieve the value of a Client preference cookie. - * - * @param client Client index. - * @param cookie Client preference cookie handle. - * @param buffer Copyback buffer for value. - * @param maxlen Maximum length of the buffer. - * @error Invalid cookie handle or invalid client index. - */ -native void GetClientCookie(int client, Handle cookie, char[] buffer, int maxlen); - -/** - * Sets the value of a Client preference cookie based on an authID string. - * - * @param authID String Auth/STEAM ID of player to set. - * @param cookie Client preference cookie handle. - * @param value String value to set. - * @error Invalid cookie handle. - */ -native void SetAuthIdCookie(const char[] authID, Handle cookie, const char[] value); - -/** - * Checks if a clients cookies have been loaded from the database. - * - * @param client Client index. - * @return True if loaded, false otherwise. - * @error Invalid client index. - */ -native bool AreClientCookiesCached(int client); - -/** - * Called once a client's saved cookies have been loaded from the database. - * - * @param client Client index. - */ -forward void OnClientCookiesCached(int client); - /** * Cookie Menu Callback prototype * - * @param client Client index. - * @param action CookieMenuAction being performed. - * @param info Info data passed. - * @param buffer Outbut buffer. - * @param maxlen Max length of the output buffer. + * @param client Client index. + * @param action CookieMenuAction being performed. + * @param info Info data passed. + * @param buffer Outbut buffer. + * @param maxlen Max length of the output buffer. */ typedef CookieMenuHandler = function void ( int client, @@ -172,17 +91,170 @@ typedef CookieMenuHandler = function void ( int maxlen ); +/** + * Note: + * + * A successful return value/result on any client prefs native only guarantees that the local cache has been updated. + * Database connection problems can still prevent the data from being permanently saved. Connection problems will be logged as + * errors by the clientprefs extension. + */ + +methodmap Cookie < Handle { + // Creates a new Client preference cookie. + // + // Handles returned can be closed via CloseHandle() when + // no longer needed. + // + // @param name Name of the new preference cookie. + // @param description Optional description of the preference cookie. + // @param access What CookieAccess level to assign to this cookie. + // @return A handle to the newly created cookie. If the cookie already + // exists, a handle to it will still be returned. + // @error Cookie name is blank. + public native Cookie(const char[] name, const char[] description, CookieAccess access); + + // Searches for a Client preference cookie. + // + // Handles returned by Cookie.Find can be closed via CloseHandle() when + // no longer needed. + // + // @param name Name of cookie to find. + // @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. + public static native Cookie Find(const char[] name); + + // Set the value of a Client preference cookie. + // + // @param client Client index. + // @param value String value to set. + // @error Invalid cookie handle or invalid client index. + public native void Set(int client, const char[] value); + + // Retrieve the value of a Client preference cookie. + // + // @param client Client index. + // @param buffer Copyback buffer for value. + // @param maxlen Maximum length of the buffer. + // @error Invalid cookie handle or invalid client index. + public native void Get(int client, char[] buffer, int maxlen); + + // Sets the value of a Client preference cookie based on an authID string. + // + // @param authID String Auth/STEAM ID of player to set. + // @param value String value to set. + // @error Invalid cookie handle. + public native void SetByAuthId(const char[] authID, const char[] value); + + // Add a new prefab item to the client cookie settings menu. + // + // Note: This handles everything automatically and does not require a callback + // + // @param type A CookieMenu prefab menu type. + // @param display Text to show on the menu. + // @param handler Optional handler callback for translations and output on selection + // @param info Info data to pass to the callback. + // @error Invalid cookie handle. + public native void SetPrefabMenu(CookieMenu type, const char[] display, CookieMenuHandler handler=INVALID_FUNCTION, any info=0); + + // Returns the last updated timestamp for a client cookie + // + // @param client Client index. + // @return Last updated timestamp. + public native int GetClientTime(int client); + + // Returns the access level of a cookie + // + // @return CookieAccess access level. + // @error Invalid cookie handle. + property CookieAccess AccessLevel { + public native get(); + } +}; + +/** + * Creates a new Client preference cookie. + * + * Handles returned by RegClientCookie can be closed via CloseHandle() when + * no longer needed. + * + * @param name Name of the new preference cookie. + * @param description Optional description of the preference cookie. + * @param access What CookieAccess level to assign to this cookie. + * @return A handle to the newly created cookie. If the cookie already + * exists, a handle to it will still be returned. + * @error Cookie name is blank. + */ +native Handle RegClientCookie(const char[] name, const char[] description, CookieAccess access); + +/** + * Searches for a Client preference cookie. + * + * Handles returned by FindClientCookie can be closed via CloseHandle() when + * no longer needed. + * + * @param name Name of cookie to find. + * @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. + */ +native Handle FindClientCookie(const char[] name); + +/** + * Set the value of a Client preference cookie. + * + * @param client Client index. + * @param cookie Client preference cookie handle. + * @param value String value to set. + * @error Invalid cookie handle or invalid client index. + */ +native void SetClientCookie(int client, Handle cookie, const char[] value); + +/** + * Retrieve the value of a Client preference cookie. + * + * @param client Client index. + * @param cookie Client preference cookie handle. + * @param buffer Copyback buffer for value. + * @param maxlen Maximum length of the buffer. + * @error Invalid cookie handle or invalid client index. + */ +native void GetClientCookie(int client, Handle cookie, char[] buffer, int maxlen); + +/** + * Sets the value of a Client preference cookie based on an authID string. + * + * @param authID String Auth/STEAM ID of player to set. + * @param cookie Client preference cookie handle. + * @param value String value to set. + * @error Invalid cookie handle. + */ +native void SetAuthIdCookie(const char[] authID, Handle cookie, const char[] value); + +/** + * Checks if a clients cookies have been loaded from the database. + * + * @param client Client index. + * @return True if loaded, false otherwise. + * @error Invalid client index. + */ +native bool AreClientCookiesCached(int client); + +/** + * Called once a client's saved cookies have been loaded from the database. + * + * @param client Client index. + */ +forward void OnClientCookiesCached(int client); + + /** * Add a new prefab item to the client cookie settings menu. * * Note: This handles everything automatically and does not require a callback * - * @param cookie Client preference cookie handle. - * @param type A CookieMenu prefab menu type. - * @param display Text to show on the menu. - * @param handler Optional handler callback for translations and output on selection - * @param info Info data to pass to the callback. - * @error Invalid cookie handle. + * @param cookie Client preference cookie handle. + * @param type A CookieMenu prefab menu type. + * @param display Text to show on the menu. + * @param handler Optional handler callback for translations and output on selection + * @param info Info data to pass to the callback. + * @error Invalid cookie handle. */ native void SetCookiePrefabMenu(Handle cookie, CookieMenu type, const char[] display, CookieMenuHandler handler=INVALID_FUNCTION, any info=0); @@ -191,37 +263,37 @@ native void SetCookiePrefabMenu(Handle cookie, CookieMenu type, const char[] dis * * Note: This only adds the top level menu item. You need to handle any submenus from the callback. * - * @param handler A MenuHandler callback function. - * @param info Data to pass to the callback. - * @param display Text to show on the menu. - * @error Invalid cookie handle. + * @param handler A MenuHandler callback function. + * @param info Data to pass to the callback. + * @param display Text to show on the menu. + * @error Invalid cookie handle. */ native void SetCookieMenuItem(CookieMenuHandler handler, any info, const char[] display); /** * Displays the settings menu to a client. * - * @param client Client index. + * @param client Client index. */ native void ShowCookieMenu(int client); /** * Gets a cookie iterator. Must be freed with CloseHandle(). * - * @return A new cookie iterator. + * @return A new cookie iterator. */ native Handle GetCookieIterator(); /** * Reads a cookie iterator, then advances to the next cookie if any. * - * @param iter Cookie iterator Handle. - * @param name Name buffer. - * @param nameLen Name buffer size. - * @param access Access level of the cookie. - * @param desc Cookie description buffer. - * @param descLen Cookie description buffer size. - * @return True on success, false if there are no more commands. + * @param iter Cookie iterator Handle. + * @param name Name buffer. + * @param nameLen Name buffer size. + * @param access Access level of the cookie. + * @param desc Cookie description buffer. + * @param descLen Cookie description buffer size. + * @return True on success, false if there are no more commands. */ native bool ReadCookieIterator(Handle iter, char[] name, @@ -229,22 +301,22 @@ native bool ReadCookieIterator(Handle iter, CookieAccess &access, char[] desc="", int descLen=0); - + /** * Returns the access level of a cookie * - * @param cookie Client preference cookie handle. - * @return CookieAccess access level. - * @error Invalid cookie handle. + * @param cookie Client preference cookie handle. + * @return CookieAccess access level. + * @error Invalid cookie handle. */ native CookieAccess GetCookieAccess(Handle cookie); /** * Returns the last updated timestamp for a client cookie * - * @param client Client index. - * @param cookie Cookie handle. - * @return Last updated timestamp. + * @param client Client index. + * @param cookie Cookie handle. + * @return Last updated timestamp. */ native int GetClientCookieTime(int client, Handle cookie); @@ -279,5 +351,14 @@ public void __ext_cprefs_SetNTVOptional() MarkNativeAsOptional("ReadCookieIterator"); MarkNativeAsOptional("GetCookieAccess"); MarkNativeAsOptional("GetClientCookieTime"); + + MarkNativeAsOptional("Cookie.Cookie"); + MarkNativeAsOptional("Cookie.Find"); + MarkNativeAsOptional("Cookie.Set"); + MarkNativeAsOptional("Cookie.Get"); + MarkNativeAsOptional("Cookie.SetByAuthId"); + MarkNativeAsOptional("Cookie.SetPrefabMenu"); + MarkNativeAsOptional("Cookie.GetClientTime"); + MarkNativeAsOptional("Cookie.AccessLevel.get"); } #endif