Files
SMScripts/scripting/temp/mckayupdater.sp
2025-04-15 22:27:20 -04:00

108 lines
3.9 KiB
SourcePawn

/****************************************
* mckayupdater.sp
*
* This file is used in Dr. McKay's plugins for Updater integration
* For more info on Dr. McKay's plugins, see http://www.doctormckay.com
* For more info on Updater, see https://forums.alliedmods.net/showthread.php?t=169095
* You may copy and use this file, but please be sure to change the URL to your own!
*
* This file does the following tasks:
* - Adds the plugin to Updater's updating pool (using UPDATER_BASE_URL/UPDATE_FILE (UPDATE_FILE should be defined prior to including this file))
* - Creates a cvar CONVAR_PREFIX_auto_update to control whether Updater is enabled (CONVAR_PREFIX should be defined prior to including this file)
* - Creates a version cvar CONVAR_PREFIX_version (CONVAR_PREFIX should be defined prior to including this file)
* - Dynamically adds "A" to the version cvar based on whether Updater is installed and working
*
* If you need to put code into OnAllPluginsLoaded, define ALL_PLUGINS_LOADED_FUNC with a function (doesn't need to be public) to be called inside of OnAllPluginsLoaded
* For example, #define ALL_PLUGINS_LOADED_FUNC AllPluginsLoaded
* AllPluginsLoaded() { ... }
*
* If you need to put code into OnLibraryAdded, define LIBRARY_ADDED_FUNC with a function (doesn't need to be public) to be called inside of OnLibraryAdded
* For example, #define LIBRARY_ADDED_FUNC LibraryAdded
* LibraryAdded(const String:name[]) { ... }
*
* If you need to put code into OnLibraryRemoved, define LIBRARY_REMOVED_FUNC with a function (doesn't need to be public) to be called inside of OnLibraryRemoved
* For example, #define LIBRARY_REMOVED_FUNC LibraryRemoved
* LibraryRemoved(const String:name[]) { ... }
*
* Define RELOAD_ON_UPDATE and the plugin will reload itself upon being updated
*
*/
#if defined _mckay_updater_included
#endinput
#endif
#define _mckay_updater_included
#if defined REQUIRE_PLUGIN
#undef REQUIRE_PLUGIN
#endif
#include <updater>
#define REQUIRE_PLUGIN
#define UPDATER_BASE_URL "http://hg.doctormckay.com/public-plugins/raw/default"
new Handle:cvarEnableUpdater;
new Handle:cvarVersion;
public OnAllPluginsLoaded() {
decl String:cvarName[64];
Format(cvarName, sizeof(cvarName), "%s_auto_update", CONVAR_PREFIX);
cvarEnableUpdater = CreateConVar(cvarName, "1", "Enables automatic updating (has no effect if Updater is not installed)");
Format(cvarName, sizeof(cvarName), "%s_version", CONVAR_PREFIX);
cvarVersion = CreateConVar(cvarName, PLUGIN_VERSION, "Plugin Version", FCVAR_DONTRECORD|FCVAR_CHEAT|FCVAR_NOTIFY);
HookConVarChange(cvarEnableUpdater, CheckUpdaterStatus);
HookConVarChange(cvarVersion, CheckUpdaterStatus);
CheckUpdaterStatus(INVALID_HANDLE, "", "");
#if defined ALL_PLUGINS_LOADED_FUNC
ALL_PLUGINS_LOADED_FUNC();
#endif
}
public OnLibraryAdded(const String:name[]) {
CheckUpdaterStatus(INVALID_HANDLE, "", "");
#if defined LIBRARY_ADDED_FUNC
LIBRARY_ADDED_FUNC(name);
#endif
}
public OnLibraryRemoved(const String:name[]) {
CheckUpdaterStatus(INVALID_HANDLE, "", "");
#if defined LIBRARY_REMOVED_FUNC
LIBRARY_REMOVED_FUNC(name);
#endif
}
public CheckUpdaterStatus(Handle:convar, const String:name[], const String:value[]) {
if(cvarVersion == INVALID_HANDLE) {
return; // Version cvar not created yet
}
if(LibraryExists("updater") && GetConVarBool(cvarEnableUpdater)) {
decl String:url[512], String:version[12];
Format(url, sizeof(url), "%s/%s", UPDATER_BASE_URL, UPDATE_FILE);
Updater_AddPlugin(url); // Has no effect if we're already in Updater's pool
Format(version, sizeof(version), "%sA", PLUGIN_VERSION);
SetConVarString(cvarVersion, version);
} else {
SetConVarString(cvarVersion, PLUGIN_VERSION);
}
}
public Action:Updater_OnPluginChecking() {
if(!GetConVarBool(cvarEnableUpdater)) {
return Plugin_Handled;
}
return Plugin_Continue;
}
#if defined RELOAD_ON_UPDATE
public Updater_OnPluginUpdated() {
ReloadPlugin();
}
#endif