diff --git a/core/smn_console.cpp b/core/smn_console.cpp index eda2529b..6d7e0b96 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -1182,28 +1182,19 @@ static cell_t SendConVarValue(IPluginContext *pContext, const cell_t *params) CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]); if (!pPlayer) - { return pContext->ThrowNativeError("Client index %d is invalid", params[1]); - } if (!pPlayer->IsConnected()) - { return pContext->ThrowNativeError("Client %d is not connected", params[1]); - } if (pPlayer->IsFakeClient()) - { return pContext->ThrowNativeError("Client %d is fake and cannot be targeted", params[1]); - } INetChannel *netchan = static_cast(engine->GetPlayerNetInfo(params[1])); if (netchan == NULL) - { return 0; - } netchan->SendData(buffer); - return 1; } @@ -1247,6 +1238,59 @@ static cell_t RemoveCommandListener(IPluginContext *pContext, const cell_t *para return 1; } +static cell_t ConVar_BoolValue_set(IPluginContext *pContext, const cell_t *params) +{ + static cell_t new_params[5] = { + 4, + params[1], + params[2], + 0, /* Default replicate setting. */ + 0, /* Default replicate setting. */ + }; + + return sm_SetConVarNum(pContext, new_params); +} + +static cell_t ConVar_IntValue_set(IPluginContext *pContext, const cell_t *params) +{ + static cell_t new_params[5] = { + 4, + params[1], + params[2], + 0, /* Default replicate setting. */ + 0, /* Default replicate setting. */ + }; + + return sm_SetConVarNum(pContext, new_params); +} + +static cell_t ConVar_FloatValue_set(IPluginContext *pContext, const cell_t *params) +{ + static cell_t new_params[5] = { + 4, + params[1], + params[2], + 0, /* Default replicate setting. */ + 0, /* Default replicate setting. */ + }; + + return sm_SetConVarFloat(pContext, new_params); +} + +static cell_t ConVar_ReplicateToClient(IPluginContext *pContext, const cell_t *params) +{ + // Old version is (client, handle, value). + // New version is (handle, client, value). + static cell_t new_params[4] = { + 3, + params[2], + params[1], + params[3], + }; + + return SendConVarValue(pContext, new_params); +} + REGISTER_NATIVES(consoleNatives) { {"CreateConVar", sm_CreateConVar}, @@ -1287,5 +1331,29 @@ REGISTER_NATIVES(consoleNatives) {"SendConVarValue", SendConVarValue}, {"AddCommandListener", AddCommandListener}, {"RemoveCommandListener", RemoveCommandListener}, + + // Transitional syntax support. + {"ConVar.BoolValue.get", sm_GetConVarBool}, + {"ConVar.BoolValue.set", ConVar_BoolValue_set}, + {"ConVar.FloatValue.get", sm_GetConVarFloat}, + {"ConVar.FloatValue.set", ConVar_FloatValue_set}, + {"ConVar.IntValue.get", sm_GetConVarInt}, + {"ConVar.IntValue.set", ConVar_IntValue_set}, + {"ConVar.Flags.get", sm_GetConVarFlags}, + {"ConVar.Flags.set", sm_SetConVarFlags}, + {"ConVar.SetBool", sm_SetConVarNum}, + {"ConVar.SetInt", sm_SetConVarNum}, + {"ConVar.SetFloat", sm_SetConVarFloat}, + {"ConVar.GetString", sm_GetConVarString}, + {"ConVar.SetString", sm_SetConVarString}, + {"ConVar.RestoreDefault", sm_ResetConVar}, + {"ConVar.GetDefault", GetConVarDefault}, + {"ConVar.GetBounds", sm_GetConVarBounds}, + {"ConVar.SetBounds", sm_SetConVarBounds}, + {"ConVar.GetName", sm_GetConVarName}, + {"ConVar.ReplicateToClient", ConVar_ReplicateToClient}, + {"ConVar.AddChangeHook", sm_HookConVarChange}, + {"ConVar.RemoveChangeHook", sm_UnhookConVarChange}, + {NULL, NULL} }; diff --git a/plugins/antiflood.sp b/plugins/antiflood.sp index 02a93c1b..21fce854 100644 --- a/plugins/antiflood.sp +++ b/plugins/antiflood.sp @@ -47,7 +47,7 @@ public Plugin:myinfo = new Float:g_LastTime[MAXPLAYERS + 1] = {0.0, ...}; /* Last time player used say or say_team */ new g_FloodTokens[MAXPLAYERS + 1] = {0, ...}; /* Number of flood tokens player has */ -new Handle:sm_flood_time; /* Handle to sm_flood_time convar */ +ConVar sm_flood_time; /* Handle to sm_flood_time convar */ public OnPluginStart() { @@ -60,11 +60,11 @@ public OnClientPutInServer(client) g_FloodTokens[client] = 0; } -new Float:max_chat; +float max_chat; -public bool:OnClientFloodCheck(client) +public bool OnClientFloodCheck(int client) { - max_chat = GetConVarFloat(sm_flood_time); + max_chat = sm_flood_time.FloatValue; if (max_chat <= 0.0 || CheckCommandAccess(client, "sm_flood_access", ADMFLAG_ROOT, true)) diff --git a/plugins/basechat.sp b/plugins/basechat.sp index d359bfaf..cb9aa1bf 100644 --- a/plugins/basechat.sp +++ b/plugins/basechat.sp @@ -49,7 +49,7 @@ public Plugin:myinfo = new String:g_ColorNames[13][10] = {"White", "Red", "Green", "Blue", "Yellow", "Purple", "Cyan", "Orange", "Pink", "Olive", "Lime", "Violet", "Lightblue"}; new g_Colors[13][3] = {{255,255,255},{255,0,0},{0,255,0},{0,0,255},{255,255,0},{255,0,255},{0,255,255},{255,128,0},{255,0,128},{128,255,0},{0,255,128},{128,0,255},{0,128,255}}; -new Handle:g_Cvar_Chatmode = INVALID_HANDLE; +ConVar g_Cvar_Chatmode; new EngineVersion:g_GameEngine = Engine_Unknown; @@ -136,7 +136,7 @@ public Action:OnClientSayCommand(client, const String:command[], const String:sA } else if (strcmp(command, "say_team", false) == 0 || strcmp(command, "say_squad", false) == 0) { - if (!CheckCommandAccess(client, "sm_chat", ADMFLAG_CHAT) && !GetConVarBool(g_Cvar_Chatmode)) + if (!CheckCommandAccess(client, "sm_chat", ADMFLAG_CHAT) && !g_Cvar_Chatmode.BoolValue) { return Plugin_Continue; } diff --git a/plugins/basecomm.sp b/plugins/basecomm.sp index 2cc7c193..6c2993e7 100644 --- a/plugins/basecomm.sp +++ b/plugins/basecomm.sp @@ -50,8 +50,8 @@ public Plugin:myinfo = new bool:g_Muted[MAXPLAYERS+1]; // Is the player muted? new bool:g_Gagged[MAXPLAYERS+1]; // Is the player gagged? -new Handle:g_Cvar_Deadtalk = INVALID_HANDLE; // Holds the handle for sm_deadtalk -new Handle:g_Cvar_Alltalk = INVALID_HANDLE; // Holds the handle for sv_alltalk +ConVar g_Cvar_Deadtalk; // Holds the handle for sm_deadtalk +ConVar g_Cvar_Alltalk; // Holds the handle for sv_alltalk new bool:g_Hooked = false; // Tracks if we've hooked events for deadtalk TopMenu hTopMenu; @@ -89,8 +89,8 @@ public OnPluginStart() RegAdminCmd("sm_ungag", Command_Ungag, ADMFLAG_CHAT, "sm_ungag - Restores a player's ability to use chat."); RegAdminCmd("sm_unsilence", Command_Unsilence, ADMFLAG_CHAT, "sm_unsilence - Restores a player's ability to use voice and chat."); - HookConVarChange(g_Cvar_Deadtalk, ConVarChange_Deadtalk); - HookConVarChange(g_Cvar_Alltalk, ConVarChange_Alltalk); + g_Cvar_Deadtalk.AddChangeHook(ConVarChange_Deadtalk); + g_Cvar_Alltalk.AddChangeHook(ConVarChange_Alltalk); /* Account for late loading */ TopMenu topmenu; @@ -122,7 +122,7 @@ public OnAdminMenuReady(TopMenu topmenu) public ConVarChange_Deadtalk(Handle:convar, const String:oldValue[], const String:newValue[]) { - if (GetConVarInt(g_Cvar_Deadtalk)) + if (g_Cvar_Deadtalk.IntValue) { HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post); HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post); @@ -155,11 +155,11 @@ public Action:OnClientSayCommand(client, const String:command[], const String:sA return Plugin_Continue; } -public ConVarChange_Alltalk(Handle:convar, const String:oldValue[], const String:newValue[]) +public void ConVarChange_Alltalk(ConVar convar, const char[] oldValue, const char[] newValue) { - new mode = GetConVarInt(g_Cvar_Deadtalk); + int mode = g_Cvar_Deadtalk.IntValue; - for (new i = 1; i <= MaxClients; i++) + for (int i = 1; i <= MaxClients; i++) { if (!IsClientInGame(i)) { @@ -170,7 +170,7 @@ public ConVarChange_Alltalk(Handle:convar, const String:oldValue[], const String { SetClientListeningFlags(i, VOICE_MUTED); } - else if (GetConVarBool(g_Cvar_Alltalk)) + else if (g_Cvar_Alltalk.BoolValue) { SetClientListeningFlags(i, VOICE_NORMAL); } @@ -209,7 +209,7 @@ public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { - new client = GetClientOfUserId(GetEventInt(event, "userid")); + int client = GetClientOfUserId(GetEventInt(event, "userid")); if (!client) { @@ -222,13 +222,13 @@ public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) return; } - if (GetConVarBool(g_Cvar_Alltalk)) + if (g_Cvar_Alltalk.BoolValue) { SetClientListeningFlags(client, VOICE_NORMAL); return; } - new mode = GetConVarInt(g_Cvar_Deadtalk); + int mode = g_Cvar_Deadtalk.IntValue; if (mode == 1) { SetClientListeningFlags(client, VOICE_LISTENALL); diff --git a/plugins/basecomm/gag.sp b/plugins/basecomm/gag.sp index 36cc94e6..15e21463 100644 --- a/plugins/basecomm/gag.sp +++ b/plugins/basecomm/gag.sp @@ -233,11 +233,11 @@ PerformMute(client, target, bool:silent=false) PerformUnMute(client, target, bool:silent=false) { g_Muted[target] = false; - if (GetConVarInt(g_Cvar_Deadtalk) == 1 && !IsPlayerAlive(target)) + if (g_Cvar_Deadtalk.IntValue == 1 && !IsPlayerAlive(target)) { SetClientListeningFlags(target, VOICE_LISTENALL); } - else if (GetConVarInt(g_Cvar_Deadtalk) == 2 && !IsPlayerAlive(target)) + else if (g_Cvar_Deadtalk.IntValue == 2 && !IsPlayerAlive(target)) { SetClientListeningFlags(target, VOICE_TEAM); } @@ -306,11 +306,11 @@ PerformUnSilence(client, target) { g_Muted[target] = false; - if (GetConVarInt(g_Cvar_Deadtalk) == 1 && !IsPlayerAlive(target)) + if (g_Cvar_Deadtalk.IntValue == 1 && !IsPlayerAlive(target)) { SetClientListeningFlags(target, VOICE_LISTENALL); } - else if (GetConVarInt(g_Cvar_Deadtalk) == 2 && !IsPlayerAlive(target)) + else if (g_Cvar_Deadtalk.IntValue == 2 && !IsPlayerAlive(target)) { SetClientListeningFlags(target, VOICE_TEAM); } diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index 0a4f9986..5bc80f6d 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -85,7 +85,7 @@ public OnPluginStart() SetMenuTitle(g_MapList, "%T", "Please select a map", LANG_SERVER); SetMenuExitBackButton(g_MapList, true); - decl String:mapListPath[PLATFORM_MAX_PATH]; + char mapListPath[PLATFORM_MAX_PATH]; BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); SetMapListCompatBind("sm_map menu", mapListPath); @@ -118,7 +118,7 @@ bool:IsVarProtected(const String:cvar[]) bool:IsClientAllowedToChangeCvar(client, const String:cvarname[]) { - new Handle:hndl = FindConVar(cvarname); + ConVar hndl = FindConVar(cvarname); new bool:allowed = false; new client_flags = client == 0 ? ADMFLAG_ROOT : GetUserFlagBits(client); @@ -129,7 +129,7 @@ bool:IsClientAllowedToChangeCvar(client, const String:cvarname[]) } else { - if (GetConVarFlags(hndl) & FCVAR_PROTECTED) + if (hndl.Flags & FCVAR_PROTECTED) { allowed = ((client_flags & ADMFLAG_PASSWORD) == ADMFLAG_PASSWORD); } @@ -212,7 +212,7 @@ new String:g_FlagNames[FLAG_STRINGS][20] = CustomFlagsToString(String:buffer[], maxlength, flags) { - decl String:joins[6][6]; + char joins[6][6]; new total; for (new i=_:Admin_Custom1; i<=_:Admin_Custom6; i++) @@ -230,7 +230,7 @@ CustomFlagsToString(String:buffer[], maxlength, flags) FlagsToString(String:buffer[], maxlength, flags) { - decl String:joins[FLAG_STRINGS+1][32]; + char joins[FLAG_STRINGS+1][32]; new total; for (new i=0; i 0) { @@ -399,9 +398,9 @@ ShowTimeLeft(client, who) } } - if (g_Cvar_FragLimit != INVALID_HANDLE) + if (g_Cvar_FragLimit) { - new fraglimit = GetConVarInt(g_Cvar_FragLimit); + int fraglimit = g_Cvar_FragLimit.IntValue; if (fraglimit > 0) { @@ -436,9 +435,9 @@ ShowTimeLeft(client, who) } } - if (g_Cvar_MaxRounds != INVALID_HANDLE) + if (g_Cvar_MaxRounds) { - new maxrounds = GetConVarInt(g_Cvar_MaxRounds); + int maxrounds = g_Cvar_MaxRounds.IntValue; if (maxrounds > 0) { @@ -486,7 +485,7 @@ ShowTimeLeft(client, who) } if (who == TIMELEFT_ALL_ALWAYS - || (who == TIMELEFT_ALL_MAYBE && GetConVarInt(g_Cvar_TriggerShow))) + || (who == TIMELEFT_ALL_MAYBE && g_Cvar_TriggerShow.IntValue)) { PrintToChatAll("[SM] %s", finalOutput); } @@ -503,10 +502,10 @@ ShowTimeLeft(client, who) ShowFriendlyFire(client) { - if (g_Cvar_FriendlyFire != INVALID_HANDLE) + if (g_Cvar_FriendlyFire) { - decl String:phrase[24]; - if (GetConVarBool(g_Cvar_FriendlyFire)) + char phrase[24]; + if (g_Cvar_FriendlyFire.BoolValue) { strcopy(phrase, sizeof(phrase), "Friendly Fire On"); } @@ -515,7 +514,7 @@ ShowFriendlyFire(client) strcopy(phrase, sizeof(phrase), "Friendly Fire Off"); } - if(GetConVarInt(g_Cvar_TriggerShow)) + if (g_Cvar_TriggerShow.IntValue) { PrintToChatAll("[SM] %t", phrase); } diff --git a/plugins/basevotes.sp b/plugins/basevotes.sp index f5aa654f..943a5e5d 100644 --- a/plugins/basevotes.sp +++ b/plugins/basevotes.sp @@ -51,7 +51,7 @@ public Plugin:myinfo = new Handle:g_hVoteMenu = INVALID_HANDLE; -new Handle:g_Cvar_Limits[3] = {INVALID_HANDLE, ...}; +ConVar g_Cvar_Limits[3] = {null, ...}; //new Handle:g_Cvar_VoteSay = INVALID_HANDLE; enum voteType @@ -262,8 +262,9 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) } else if (action == MenuAction_VoteEnd) { - decl String:item[64], String:display[64]; - new Float:percent, Float:limit, votes, totalVotes; + char item[64], display[64]; + float percent, limit; + int votes, totalVotes; GetMenuVoteInfo(param2, votes, totalVotes); GetMenuItem(menu, param1, item, sizeof(item), _, display, sizeof(display)); @@ -277,7 +278,7 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) if (g_voteType != voteType:question) { - limit = GetConVarFloat(g_Cvar_Limits[g_voteType]); + limit = g_Cvar_Limits[g_voteType].FloatValue; } /* :TODO: g_voteClient[userid] needs to be checked */ diff --git a/plugins/funcommands/beacon.sp b/plugins/funcommands/beacon.sp index bad1b648..1402d823 100644 --- a/plugins/funcommands/beacon.sp +++ b/plugins/funcommands/beacon.sp @@ -33,7 +33,7 @@ new g_BeaconSerial[MAXPLAYERS+1] = { 0, ... }; -new Handle:g_Cvar_BeaconRadius = INVALID_HANDLE; +ConVar g_Cvar_BeaconRadius; CreateBeacon(client) { @@ -86,28 +86,28 @@ public Action:Timer_Beacon(Handle:timer, any:value) return Plugin_Stop; } - new team = GetClientTeam(client); + int team = GetClientTeam(client); - new Float:vec[3]; + float vec[3]; GetClientAbsOrigin(client, vec); vec[2] += 10; if (g_BeamSprite > -1 && g_HaloSprite > -1) { - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); TE_SendToAll(); if (team == 2) { - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, redColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, redColor, 10, 0); } else if (team == 3) { - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, blueColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, blueColor, 10, 0); } else { - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, greenColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, greenColor, 10, 0); } TE_SendToAll(); diff --git a/plugins/funcommands/fire.sp b/plugins/funcommands/fire.sp index 5bff2839..1e73a4fb 100644 --- a/plugins/funcommands/fire.sp +++ b/plugins/funcommands/fire.sp @@ -34,16 +34,16 @@ new g_FireBombSerial[MAXPLAYERS+1] = { 0, ... }; new g_FireBombTime[MAXPLAYERS+1] = { 0, ... }; -new Handle:g_Cvar_BurnDuration = INVALID_HANDLE; -new Handle:g_Cvar_FireBombTicks = INVALID_HANDLE; -new Handle:g_Cvar_FireBombRadius = INVALID_HANDLE; -new Handle:g_Cvar_FireBombMode = INVALID_HANDLE; +ConVar g_Cvar_BurnDuration; +ConVar g_Cvar_FireBombTicks; +ConVar g_Cvar_FireBombRadius; +ConVar g_Cvar_FireBombMode; CreateFireBomb(client) { g_FireBombSerial[client] = ++g_Serial_Gen; CreateTimer(1.0, Timer_FireBomb, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS); - g_FireBombTime[client] = GetConVarInt(g_Cvar_FireBombTicks); + g_FireBombTime[client] = g_Cvar_FireBombTicks.IntValue; } KillFireBomb(client) @@ -99,16 +99,16 @@ public Action:Timer_FireBomb(Handle:timer, any:value) } g_FireBombTime[client]--; - new Float:vec[3]; + float vec[3]; GetClientEyePosition(client, vec); if (g_FireBombTime[client] > 0) { - new color; + int color; if (g_FireBombTime[client] > 1) { - color = RoundToFloor(g_FireBombTime[client] * (255.0 / GetConVarFloat(g_Cvar_FireBombTicks))); + color = RoundToFloor(g_FireBombTime[client] * (255.0 / g_Cvar_FireBombTicks.FloatValue)); if (g_BeepSound[0]) { EmitAmbientSound(g_BeepSound, vec, client, SNDLEVEL_RAIDSIREN); @@ -125,7 +125,7 @@ public Action:Timer_FireBomb(Handle:timer, any:value) SetEntityRenderColor(client, 255, color, color, 255); - decl String:name[64]; + char name[64]; GetClientName(client, name, sizeof(name)); PrintCenterTextAll("%t", "Till Explodes", name, g_FireBombTime[client]); @@ -134,9 +134,9 @@ public Action:Timer_FireBomb(Handle:timer, any:value) GetClientAbsOrigin(client, vec); vec[2] += 10; - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FireBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_FireBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); TE_SendToAll(); - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FireBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_FireBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); TE_SendToAll(); } return Plugin_Continue; @@ -145,7 +145,7 @@ public Action:Timer_FireBomb(Handle:timer, any:value) { if (g_ExplosionSprite > -1) { - TE_SetupExplosion(vec, g_ExplosionSprite, 0.1, 1, 0, GetConVarInt(g_Cvar_FireBombRadius), 5000); + TE_SetupExplosion(vec, g_ExplosionSprite, 0.1, 1, 0, g_Cvar_FireBombRadius.IntValue, 5000); TE_SendToAll(); } @@ -153,16 +153,16 @@ public Action:Timer_FireBomb(Handle:timer, any:value) { GetClientAbsOrigin(client, vec); vec[2] += 10; - TE_SetupBeamRingPoint(vec, 50.0, GetConVarFloat(g_Cvar_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.5, 30.0, 1.5, orangeColor, 5, 0); + TE_SetupBeamRingPoint(vec, 50.0, g_Cvar_FireBombRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.5, 30.0, 1.5, orangeColor, 5, 0); TE_SendToAll(); vec[2] += 15; - TE_SetupBeamRingPoint(vec, 40.0, GetConVarFloat(g_Cvar_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 30.0, 1.5, orangeColor, 5, 0); + TE_SetupBeamRingPoint(vec, 40.0, g_Cvar_FireBombRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 30.0, 1.5, orangeColor, 5, 0); TE_SendToAll(); vec[2] += 15; - TE_SetupBeamRingPoint(vec, 30.0, GetConVarFloat(g_Cvar_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.7, 30.0, 1.5, orangeColor, 5, 0); + TE_SetupBeamRingPoint(vec, 30.0, g_Cvar_FireBombRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.7, 30.0, 1.5, orangeColor, 5, 0); TE_SendToAll(); vec[2] += 15; - TE_SetupBeamRingPoint(vec, 20.0, GetConVarFloat(g_Cvar_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.8, 30.0, 1.5, orangeColor, 5, 0); + TE_SetupBeamRingPoint(vec, 20.0, g_Cvar_FireBombRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.8, 30.0, 1.5, orangeColor, 5, 0); TE_SendToAll(); } @@ -171,13 +171,13 @@ public Action:Timer_FireBomb(Handle:timer, any:value) EmitAmbientSound(g_BoomSound, vec, client, SNDLEVEL_RAIDSIREN); } - IgniteEntity(client, GetConVarFloat(g_Cvar_BurnDuration)); + IgniteEntity(client, g_Cvar_BurnDuration.FloatValue); KillFireBomb(client); SetEntityRenderColor(client, 255, 255, 255, 255); - if (GetConVarInt(g_Cvar_FireBombMode) > 0) + if (g_Cvar_FireBombMode.IntValue > 0) { - new teamOnly = ((GetConVarInt(g_Cvar_FireBombMode) == 1) ? true : false); + int teamOnly = ((g_Cvar_FireBombMode.IntValue == 1) ? true : false); for (new i = 1; i <= MaxClients; i++) { @@ -191,18 +191,18 @@ public Action:Timer_FireBomb(Handle:timer, any:value) continue; } - new Float:pos[3]; + float pos[3]; GetClientAbsOrigin(i, pos); - new Float:distance = GetVectorDistance(vec, pos); + float distance = GetVectorDistance(vec, pos); - if (distance > GetConVarFloat(g_Cvar_FireBombRadius)) + if (distance > g_Cvar_FireBombRadius.FloatValue) { continue; } - new Float:duration = GetConVarFloat(g_Cvar_BurnDuration); - duration *= (GetConVarFloat(g_Cvar_FireBombRadius) - distance) / GetConVarFloat(g_Cvar_FireBombRadius); + float duration = g_Cvar_BurnDuration.FloatValue; + duration *= (g_Cvar_FireBombRadius.FloatValue - distance) / g_Cvar_FireBombRadius.FloatValue; IgniteEntity(i, duration); } @@ -372,14 +372,14 @@ public Action:Command_Burn(client, args) return Plugin_Handled; } - decl String:arg[65]; + char arg[65]; GetCmdArg(1, arg, sizeof(arg)); - new Float:seconds = GetConVarFloat(g_Cvar_BurnDuration); + float seconds = g_Cvar_BurnDuration.FloatValue; if (args > 1) { - decl String:time[20]; + char time[20]; GetCmdArg(2, time, sizeof(time)); if (StringToFloatEx(time, seconds) == 0) { @@ -388,8 +388,9 @@ public Action:Command_Burn(client, args) } } - decl String:target_name[MAX_TARGET_LENGTH]; - decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + char target_name[MAX_TARGET_LENGTH]; + int target_list[MAXPLAYERS], target_count; + bool tn_is_ml; if ((target_count = ProcessTargetString( arg, @@ -430,11 +431,12 @@ public Action:Command_FireBomb(client, args) return Plugin_Handled; } - decl String:arg[65]; + char arg[65]; GetCmdArg(1, arg, sizeof(arg)); - decl String:target_name[MAX_TARGET_LENGTH]; - decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + char target_name[MAX_TARGET_LENGTH]; + int target_list[MAXPLAYERS], target_count; + bool tn_is_ml; if ((target_count = ProcessTargetString( arg, diff --git a/plugins/funcommands/ice.sp b/plugins/funcommands/ice.sp index 0275c52e..8de9701d 100644 --- a/plugins/funcommands/ice.sp +++ b/plugins/funcommands/ice.sp @@ -36,10 +36,10 @@ new g_FreezeBombSerial[MAXPLAYERS+1] = { 0, ... }; new g_FreezeTime[MAXPLAYERS+1] = { 0, ... }; new g_FreezeBombTime[MAXPLAYERS+1] = { 0, ... }; -new Handle:g_Cvar_FreezeDuration = INVALID_HANDLE; -new Handle:g_Cvar_FreezeBombTicks = INVALID_HANDLE; -new Handle:g_Cvar_FreezeBombRadius = INVALID_HANDLE; -new Handle:g_Cvar_FreezeBombMode = INVALID_HANDLE; +ConVar g_Cvar_FreezeDuration; +ConVar g_Cvar_FreezeBombTicks; +ConVar g_Cvar_FreezeBombRadius; +ConVar g_Cvar_FreezeBombMode; FreezeClient(client, time) { @@ -93,7 +93,7 @@ CreateFreezeBomb(client) KillFreezeBomb(client); return; } - g_FreezeBombTime[client] = GetConVarInt(g_Cvar_FreezeBombTicks); + g_FreezeBombTime[client] = g_Cvar_FreezeBombTicks.IntValue; g_FreezeBombSerial[client] = ++g_Serial_Gen; CreateTimer(1.0, Timer_FreezeBomb, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS); } @@ -229,7 +229,7 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) if (g_FreezeBombTime[client] > 1) { - color = RoundToFloor(g_FreezeBombTime[client] * (255.0 / GetConVarFloat(g_Cvar_FreezeBombTicks))); + color = RoundToFloor(g_FreezeBombTime[client] * (255.0 / g_Cvar_FreezeBombTicks.FloatValue)); if (g_BeepSound[0]) { EmitAmbientSound(g_BeepSound, vec, client, SNDLEVEL_RAIDSIREN); @@ -246,7 +246,7 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) SetEntityRenderColor(client, color, color, 255, 255); - decl String:name[64]; + char name[64]; GetClientName(client, name, sizeof(name)); PrintCenterTextAll("%t", "Till Explodes", name, g_FreezeBombTime[client]); @@ -255,9 +255,9 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) GetClientAbsOrigin(client, vec); vec[2] += 10; - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_FreezeBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); TE_SendToAll(); - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_FreezeBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); TE_SendToAll(); } return Plugin_Continue; @@ -266,7 +266,7 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) { if (g_ExplosionSprite > -1) { - TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, GetConVarInt(g_Cvar_FreezeBombRadius), 5000); + TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, g_Cvar_FreezeBombRadius.IntValue, 5000); TE_SendToAll(); } @@ -276,13 +276,13 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) } KillFreezeBomb(client); - FreezeClient(client, GetConVarInt(g_Cvar_FreezeDuration)); + FreezeClient(client, g_Cvar_FreezeDuration.IntValue); - if (GetConVarInt(g_Cvar_FreezeBombMode) > 0) + if (g_Cvar_FreezeBombMode.IntValue > 0) { - new bool:teamOnly = ((GetConVarInt(g_Cvar_FreezeBombMode) == 1) ? true : false); + bool teamOnly = ((g_Cvar_FreezeBombMode.IntValue == 1) ? true : false); - for (new i = 1; i <= MaxClients; i++) + for (int i = 1; i <= MaxClients; i++) { if (!IsClientInGame(i) || !IsPlayerAlive(i) || i == client) { @@ -294,12 +294,12 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) continue; } - new Float:pos[3]; + float pos[3]; GetClientEyePosition(i, pos); - new Float:distance = GetVectorDistance(vec, pos); + float distance = GetVectorDistance(vec, pos); - if (distance > GetConVarFloat(g_Cvar_FreezeBombRadius)) + if (distance > g_Cvar_FreezeBombRadius.FloatValue) { continue; } @@ -318,7 +318,7 @@ public Action:Timer_FreezeBomb(Handle:timer, any:value) } } - FreezeClient(i, GetConVarInt(g_Cvar_FreezeDuration)); + FreezeClient(i, g_Cvar_FreezeDuration.IntValue); } } return Plugin_Stop; @@ -421,7 +421,7 @@ public MenuHandler_Freeze(Handle:menu, MenuAction:action, param1, param2) new String:name[32]; GetClientName(target, name, sizeof(name)); - PerformFreeze(param1, target, GetConVarInt(g_Cvar_FreezeDuration)); + PerformFreeze(param1, target, g_Cvar_FreezeDuration.IntValue); ShowActivity2(param1, "[SM] ", "%t", "Froze target", "_s", name); } @@ -479,7 +479,7 @@ public MenuHandler_FreezeBomb(Handle:menu, MenuAction:action, param1, param2) } } -public Action:Command_Freeze(client, args) +public Action Command_Freeze(int client, int args) { if (args < 1) { @@ -487,10 +487,10 @@ public Action:Command_Freeze(client, args) return Plugin_Handled; } - decl String:arg[65]; + char arg[65]; GetCmdArg(1, arg, sizeof(arg)); - new seconds = GetConVarInt(g_Cvar_FreezeDuration); + int seconds = g_Cvar_FreezeDuration.IntValue; if (args > 1) { diff --git a/plugins/funcommands/timebomb.sp b/plugins/funcommands/timebomb.sp index 182a3bcb..cc659cf0 100644 --- a/plugins/funcommands/timebomb.sp +++ b/plugins/funcommands/timebomb.sp @@ -34,15 +34,15 @@ new g_TimeBombSerial[MAXPLAYERS+1] = { 0, ... }; new g_TimeBombTime[MAXPLAYERS+1] = { 0, ... }; -new Handle:g_Cvar_TimeBombTicks = INVALID_HANDLE; -new Handle:g_Cvar_TimeBombRadius = INVALID_HANDLE; -new Handle:g_Cvar_TimeBombMode = INVALID_HANDLE; +ConVar g_Cvar_TimeBombTicks; +ConVar g_Cvar_TimeBombRadius; +ConVar g_Cvar_TimeBombMode; CreateTimeBomb(client) { g_TimeBombSerial[client] = ++g_Serial_Gen; CreateTimer(1.0, Timer_TimeBomb, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS); - g_TimeBombTime[client] = GetConVarInt(g_Cvar_TimeBombTicks); + g_TimeBombTime[client] = g_Cvar_TimeBombTicks.IntValue; } KillTimeBomb(client) @@ -80,8 +80,8 @@ PerformTimeBomb(client, target) public Action:Timer_TimeBomb(Handle:timer, any:value) { - new client = value & 0x7f; - new serial = value >> 7; + int client = value & 0x7f; + int serial = value >> 7; if (!IsClientInGame(client) || !IsPlayerAlive(client) @@ -92,16 +92,16 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) } g_TimeBombTime[client]--; - new Float:vec[3]; + float vec[3]; GetClientEyePosition(client, vec); if (g_TimeBombTime[client] > 0) { - new color; + int color; if (g_TimeBombTime[client] > 1) { - color = RoundToFloor(g_TimeBombTime[client] * (128.0 / GetConVarFloat(g_Cvar_TimeBombTicks))); + color = RoundToFloor(g_TimeBombTime[client] * (128.0 / g_Cvar_TimeBombTicks.FloatValue)); if (g_BeepSound[0]) { EmitAmbientSound(g_BeepSound, vec, client, SNDLEVEL_RAIDSIREN); @@ -118,7 +118,7 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) SetEntityRenderColor(client, 255, 128, color, 255); - decl String:name[64]; + char name[64]; GetClientName(client, name, sizeof(name)); PrintCenterTextAll("%t", "Till Explodes", name, g_TimeBombTime[client]); @@ -127,9 +127,9 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) GetClientAbsOrigin(client, vec); vec[2] += 10; - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_TimeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_TimeBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); TE_SendToAll(); - TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_TimeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_TimeBombRadius.FloatValue / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); TE_SendToAll(); } return Plugin_Continue; @@ -138,7 +138,7 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) { if (g_ExplosionSprite > -1) { - TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, GetConVarInt(g_Cvar_TimeBombRadius), 5000); + TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, g_Cvar_TimeBombRadius.IntValue, 5000); TE_SendToAll(); } @@ -151,9 +151,9 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) KillTimeBomb(client); SetEntityRenderColor(client, 255, 255, 255, 255); - if (GetConVarInt(g_Cvar_TimeBombMode) > 0) + if (g_Cvar_TimeBombMode.IntValue > 0) { - new teamOnly = ((GetConVarInt(g_Cvar_TimeBombMode) == 1) ? true : false); + int teamOnly = ((g_Cvar_TimeBombMode.IntValue == 1) ? true : false); for (new i = 1; i <= MaxClients; i++) { @@ -167,18 +167,18 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) continue; } - new Float:pos[3]; + float pos[3]; GetClientEyePosition(i, pos); - new Float:distance = GetVectorDistance(vec, pos); + float distance = GetVectorDistance(vec, pos); - if (distance > GetConVarFloat(g_Cvar_TimeBombRadius)) + if (distance > g_Cvar_TimeBombRadius.FloatValue) { continue; } new damage = 220; - damage = RoundToFloor(damage * ((GetConVarFloat(g_Cvar_TimeBombRadius) - distance) / GetConVarFloat(g_Cvar_TimeBombRadius))); + damage = RoundToFloor(damage * ((g_Cvar_TimeBombRadius.FloatValue - distance) / g_Cvar_TimeBombRadius.FloatValue)); SlapPlayer(i, damage, false); @@ -189,14 +189,14 @@ public Action:Timer_TimeBomb(Handle:timer, any:value) } /* ToDo - new Float:dir[3]; + float dir[3]; SubtractVectors(vec, pos, dir); TR_TraceRayFilter(vec, dir, MASK_SOLID, RayType_Infinite, TR_Filter_Client); if (i == TR_GetEntityIndex()) { new damage = 100; - new radius = GetConVarInt(g_Cvar_TimeBombRadius) / 2; + new radius = g_Cvar_TimeBombRadius.IntValue / 2; if (distance > radius) { diff --git a/plugins/funvotes.sp b/plugins/funvotes.sp index d8a27a14..2d2c6e2e 100644 --- a/plugins/funvotes.sp +++ b/plugins/funvotes.sp @@ -53,10 +53,10 @@ public Plugin:myinfo = new Handle:g_hVoteMenu = INVALID_HANDLE; -new Handle:g_Cvar_Limits[5] = {INVALID_HANDLE, ...}; -new Handle:g_Cvar_Gravity = INVALID_HANDLE; -new Handle:g_Cvar_Alltalk = INVALID_HANDLE; -new Handle:g_Cvar_FF = INVALID_HANDLE; +ConVar g_Cvar_Limits[5] = {null, ...}; +ConVar g_Cvar_Gravity; +ConVar g_Cvar_Alltalk; +ConVar g_Cvar_FF; // new Handle:g_Cvar_Show = INVALID_HANDLE; @@ -199,8 +199,9 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) } else if (action == MenuAction_VoteEnd) { - decl String:item[64]; - new Float:percent, Float:limit, votes, totalVotes; + char item[64]; + float percent, limit; + int votes, totalVotes; GetMenuVoteInfo(param2, votes, totalVotes); GetMenuItem(menu, param1, item, sizeof(item)); @@ -212,7 +213,7 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) percent = GetVotePercent(votes, totalVotes); - limit = GetConVarFloat(g_Cvar_Limits[g_voteType]); + limit = g_Cvar_Limits[g_voteType].FloatValue; /* :TODO: g_voteClient[userid] needs to be checked. */ @@ -235,7 +236,7 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) { PrintToChatAll("[SM] %t", "Cvar changed", "sv_gravity", item); LogAction(-1, -1, "Changing gravity to %s due to vote.", item); - SetConVarInt(g_Cvar_Gravity, StringToInt(item)); + g_Cvar_Gravity.IntValue = StringToInt(item); } case (voteType:burn): @@ -257,16 +258,16 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) case (voteType:alltalk): { - PrintToChatAll("[SM] %t", "Cvar changed", "sv_alltalk", (GetConVarBool(g_Cvar_Alltalk) ? "0" : "1")); - LogAction(-1, -1, "Changing alltalk to %s due to vote.", (GetConVarBool(g_Cvar_Alltalk) ? "0" : "1")); - SetConVarBool(g_Cvar_Alltalk, !GetConVarBool(g_Cvar_Alltalk)); + PrintToChatAll("[SM] %t", "Cvar changed", "sv_alltalk", (g_Cvar_Alltalk.BoolValue ? "0" : "1")); + LogAction(-1, -1, "Changing alltalk to %s due to vote.", (g_Cvar_Alltalk.BoolValue ? "0" : "1")); + g_Cvar_Alltalk.BoolValue = !g_Cvar_Alltalk.BoolValue; } case (voteType:ff): { - PrintToChatAll("[SM] %t", "Cvar changed", "mp_friendlyfire", (GetConVarBool(g_Cvar_FF) ? "0" : "1")); - LogAction(-1, -1, "Changing friendly fire to %s due to vote.", (GetConVarBool(g_Cvar_FF) ? "0" : "1")); - SetConVarBool(g_Cvar_FF, !GetConVarBool(g_Cvar_FF)); + PrintToChatAll("[SM] %t", "Cvar changed", "mp_friendlyfire", (g_Cvar_FF.BoolValue ? "0" : "1")); + LogAction(-1, -1, "Changing friendly fire to %s due to vote.", (g_Cvar_FF.BoolValue ? "0" : "1")); + g_Cvar_FF.BoolValue = !g_Cvar_FF.BoolValue; } } } diff --git a/plugins/funvotes/votealltalk.sp b/plugins/funvotes/votealltalk.sp index 561b2274..51fefd75 100644 --- a/plugins/funvotes/votealltalk.sp +++ b/plugins/funvotes/votealltalk.sp @@ -52,7 +52,7 @@ DisplayVoteAllTalkMenu(client) g_hVoteMenu = CreateMenu(Handler_VoteCallback, MenuAction:MENU_ACTIONS_ALL); - if (GetConVarBool(g_Cvar_Alltalk)) + if (g_Cvar_Alltalk.BoolValue) { SetMenuTitle(g_hVoteMenu, "Votealltalk Off"); } @@ -101,4 +101,4 @@ public Action:Command_VoteAlltalk(client, args) DisplayVoteAllTalkMenu(client); return Plugin_Handled; -} \ No newline at end of file +} diff --git a/plugins/funvotes/voteff.sp b/plugins/funvotes/voteff.sp index e12934cc..9fbb045c 100644 --- a/plugins/funvotes/voteff.sp +++ b/plugins/funvotes/voteff.sp @@ -52,7 +52,7 @@ DisplayVoteFFMenu(client) g_hVoteMenu = CreateMenu(Handler_VoteCallback, MenuAction:MENU_ACTIONS_ALL); - if (GetConVarBool(g_Cvar_FF)) + if (g_Cvar_FF.BoolValue) { SetMenuTitle(g_hVoteMenu, "Voteff Off"); } @@ -100,4 +100,4 @@ public Action:Command_VoteFF(client, args) DisplayVoteFFMenu(client); return Plugin_Handled; -} \ No newline at end of file +} diff --git a/plugins/include/console.inc b/plugins/include/console.inc index f1fc2928..2440216f 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -37,15 +37,6 @@ #define INVALID_FCVAR_FLAGS (-1) -/** - * Console variable bound values used with Get/SetConVarBounds() - */ -enum ConVarBounds -{ - ConVarBound_Upper = 0, - ConVarBound_Lower -}; - /** * Console variable query helper values. */ @@ -63,17 +54,6 @@ enum ReplySource SM_REPLY_TO_CHAT = 1, }; -/** - * Console variable query result values. - */ -enum ConVarQueryResult -{ - ConVarQuery_Okay = 0, /**< Retrieval of client convar value was successful. */ - ConVarQuery_NotFound, /**< Client convar was not found. */ - ConVarQuery_NotValid, /**< A console command with the same name was found, but there is no convar. */ - ConVarQuery_Protected /**< Client convar was found, but it is protected. The server cannot retrieve its value. */ -}; - /** * @section Flags for console commands and console variables. The descriptions * for each constant come directly from the Source SDK. @@ -424,293 +404,6 @@ native GetCmdArg(argnum, String:buffer[], maxlength); */ native GetCmdArgString(String:buffer[], maxlength); -/** - * Creates a new console variable. - * - * @param name Name of new convar. - * @param defaultValue String containing the default value of new convar. - * @param description Optional description of the convar. - * @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. - * @param hasMin Optional boolean that determines if the convar has a minimum value. - * @param min Minimum floating point value that the convar can have if hasMin is true. - * @param hasMax Optional boolean that determines if the convar has a maximum value. - * @param max Maximum floating point value that the convar can have if hasMax is true. - * @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. - * @error Convar name is blank or is the same as an existing console command. - */ -native ConVar:CreateConVar(const String:name[], const String:defaultValue[], const String:description[]="", flags=0, bool:hasMin=false, Float:min=0.0, bool:hasMax=false, Float:max=0.0); - -/** - * Searches for a console variable. - * - * @param name Name of convar to find. - * @return A handle to the convar if it is found. INVALID_HANDLE otherwise. - */ -native ConVar:FindConVar(const String:name[]); - -/** - * Called when a console variable's value is changed. - * - * @param convar Handle to the convar that was changed. - * @param oldValue String containing the value of the convar before it was changed. - * @param newValue String containing the new value of the convar. - * @noreturn - */ -typedef ConVarChanged = function void (ConVar convar, const char[] oldValue, const char[] newValue); - -/** - * Creates a hook for when a console variable's value is changed. - * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @noreturn - * @error Invalid or corrupt Handle or invalid callback function. - */ -native HookConVarChange(Handle:convar, ConVarChanged:callback); - -/** - * Removes a hook for when a console variable's value is changed. - * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @noreturn - * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. - */ -native UnhookConVarChange(Handle:convar, ConVarChanged:callback); - -/** - * Returns the boolean value of a console variable. - * - * @param convar Handle to the convar. - * @return The boolean value of the convar. - * @error Invalid or corrupt Handle. - */ -native bool:GetConVarBool(Handle:convar); - -/** - * Sets the boolean value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New boolean value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarBool(Handle:convar, bool:value, bool:replicate=false, bool:notify=false); - -/** - * Returns the integer value of a console variable. - * - * @param convar Handle to the convar. - * @return The integer value of the convar. - * @error Invalid or corrupt Handle. - */ -native GetConVarInt(Handle:convar); - -/** - * Sets the integer value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New integer value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarInt(Handle:convar, value, bool:replicate=false, bool:notify=false); - -/** - * Returns the floating point value of a console variable. - * - * @param convar Handle to the convar. - * @return The floating point value of the convar. - * @error Invalid or corrupt Handle. - */ -native Float:GetConVarFloat(Handle:convar); - -/** - * Sets the floating point value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New floating point value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarFloat(Handle:convar, Float:value, bool:replicate=false, bool:notify=false); - -/** - * Retrieves the string value of a console variable. - * - * @param convar Handle to the convar. - * @param value Buffer to store the value of the convar. - * @param maxlength Maximum length of string buffer. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native GetConVarString(Handle:convar, String:value[], maxlength); - -/** - * Sets the string value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New string value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarString(Handle:convar, const String:value[], bool:replicate=false, bool:notify=false); - -/** - * Resets the console variable to its default value. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native ResetConVar(Handle:convar, bool:replicate=false, bool:notify=false); - -/** - * Retrieves the default string value of a console variable. - * - * @param convar Handle to the convar. - * @param value Buffer to store the default value of the convar. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid or corrupt Handle. - */ -native GetConVarDefault(Handle:convar, String:value[], maxlength); - -/** - * Returns the bitstring of flags on a console variable. - * - * @param convar Handle to the convar. - * @return A bitstring containing the FCVAR_* flags that are enabled. - * @error Invalid or corrupt Handle. - */ -native GetConVarFlags(Handle:convar); - -/** - * Sets the bitstring of flags on a console variable. - * - * @param convar Handle to the convar. - * @param flags A bitstring containing the FCVAR_* flags to enable. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarFlags(Handle:convar, flags); - -/** - * Retrieves the specified bound of a console variable. - * - * @param convar Handle to the convar. - * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. - * @param value By-reference cell to store the specified floating point bound value. - * @return True if the convar has the specified bound set, false otherwise. - * @error Invalid or corrupt Handle. - */ -native bool:GetConVarBounds(Handle:convar, ConVarBounds:type, &Float:value); - -/** - * Sets the specified bound of a console variable. - * - * @param convar Handle to the convar. - * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper - * @param set If set to true, convar will use specified bound. If false, bound will be removed. - * @param value Floating point value to use as the specified bound. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarBounds(Handle:convar, ConVarBounds:type, bool:set, Float:value=0.0); - -/** - * Retrieves the name of a console variable. - * - * @param convar Handle to the convar. - * @param name Buffer to store the name of the convar. - * @param maxlength Maximum length of string buffer. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native GetConVarName(Handle:convar, String:name[], maxlength); - -union ConVarQueryFinished -{ - /** - * Called when a query to retrieve a client's console variable has finished. - * - * @param cookie Unique identifier of query. - * @param client Player index. - * @param result Result of query that tells one whether or not query was successful. - * See ConVarQueryResult enum for more details. - * @param convarName Name of client convar that was queried. - * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. - * @param value Value that was passed when query was started. - * @noreturn - */ - function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, any value); - - /** - * Called when a query to retrieve a client's console variable has finished. - * - * @param cookie Unique identifier of query. - * @param client Player index. - * @param result Result of query that tells one whether or not query was successful. - * See ConVarQueryResult enum for more details. - * @param convarName Name of client convar that was queried. - * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. - * @noreturn - */ - function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue); -}; - -/** - * Starts a query to retrieve the value of a client's console variable. - * - * @param client Player index. - * @param cvarName Name of client convar to query. - * @param callback A function to use as a callback when the query has finished. - * @param value Optional value to pass to the callback function. - * @return A cookie that uniquely identifies the query. - * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. - */ -native QueryCookie:QueryClientConVar(client, const String:cvarName[], ConVarQueryFinished:callback, any:value=0); - /** * Gets a command iterator. Must be freed with CloseHandle(). * @@ -781,17 +474,6 @@ native bool:CheckAccess(AdminId:id, flags, bool:override_only=false); -/** - * Returns true if the supplied character is valid in a ConVar name. - * - * @param c Character to validate. - * @return True is valid for ConVars, false otherwise - */ -stock bool:IsValidConVarChar(c) -{ - return (c == '_' || IsCharAlpha(c) || IsCharNumeric(c)); -} - /** * Returns the bitstring of flags of a command. * @@ -850,17 +532,6 @@ native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &f */ native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0); -/** - * Replicates a convar value to a specific client. This does not change the actual convar value. - * - * @param client Client index - * @param convar ConVar handle - * @param value String value to send - * @return True on success, false on failure - * @error Invalid client index, client not in game, or client is fake - */ -native bool:SendConVarValue(client, Handle:convar, const String:value[]); - /** * Adds an informational string to the server's public "tags". * This string should be a short, unique identifier. @@ -969,26 +640,3 @@ forward Action:OnClientSayCommand(client, const String:command[], const String:s * */ forward void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs); - -// Most of these aren't properties because they're more complex -methodmap ConVar < Handle -{ - public ConVar() = CreateConVar; - public GetBool() = GetConVarBool; - public SetBool() = SetConVarBool; - public GetInt() = GetConVarInt; - public SetInt() = SetConVarInt; - public GetFloat() = GetConVarFloat; - public SetFloat() = SetConVarFloat; - public GetString() = GetConVarString; - public SetString() = SetConVarString; - public RestoreDefaultValue() = ResetConVar; - public GetFlags() = GetConVarFlags; - public SetFlags() = SetConVarFlags; - public GetBounds() = GetConVarBounds; - public SetBounds() = SetConVarBounds; - public GetDefaultValue() = GetConVarDefault; - public GetName() = GetConVarName; - public AddChangeHook() = HookConVarChange; - public RemoveChangeHook() = UnhookConVarChange; -} \ No newline at end of file diff --git a/plugins/include/convars.inc b/plugins/include/convars.inc new file mode 100644 index 00000000..d938823d --- /dev/null +++ b/plugins/include/convars.inc @@ -0,0 +1,493 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ============================================================================= + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +/** + * Console variable bound values used with Get/SetConVarBounds() + */ +enum ConVarBounds +{ + ConVarBound_Upper = 0, + ConVarBound_Lower +}; + +/** + * Console variable query result values. + */ +enum ConVarQueryResult +{ + ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */ + ConVarQuery_NotFound, //< Client convar was not found. */ + ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */ + ConVarQuery_Protected //< Client convar was found, but it is protected. The server cannot retrieve its value. */ +}; + +// Called when a console variable's value is changed. +// +// @param convar Handle to the convar that was changed. +// @param oldValue String containing the value of the convar before it was changed. +// @param newValue String containing the new value of the convar. +typedef ConVarChanged = function void (ConVar convar, const char[] oldValue, const char[] newValue); + +// Creates a new console variable. +// +// @param name Name of new convar. +// @param defaultValue String containing the default value of new convar. +// @param description Optional description of the convar. +// @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. +// @param hasMin Optional boolean that determines if the convar has a minimum value. +// @param min Minimum floating point value that the convar can have if hasMin is true. +// @param hasMax Optional boolean that determines if the convar has a maximum value. +// @param max Maximum floating point value that the convar can have if hasMax is true. +// @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. +// @error Convar name is blank or is the same as an existing console command. +native ConVar CreateConVar( + const char[] name, + const char[] defaultValue, + const char[] description="", + int flags=0, + bool hasMin=false, float min=0.0, + bool hasMax=false, float max=0.0); + +// Searches for a console variable. +// +// @param name Name of convar to find. +// @return A ConVar object if found; null otherwise. +native ConVar FindConVar(const char[] name); + +// A ConVar is a configurable, named setting in the srcds console. +methodmap ConVar < Handle +{ + // Retrieves or sets a boolean value for the convar. + property bool BoolValue { + public native get(); + public native set(bool b); + } + + // Retrieves or sets an integer value for the convar. + property int IntValue { + public native get(); + public native set(int value); + } + + // Retrieves or sets a float value for the convar. + property float FloatValue { + public native get(); + public native set(float value); + } + + // Gets or sets the flag bits (FCVAR_*) on the convar. + property int Flags { + public native get(); + public native set(int flags); + } + + // Sets the boolean value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New boolean value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetBool(bool value, bool replicate=false, bool notify=false); + + // Sets the integer value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New integer value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetInt(int value, bool replicate=false, bool notify=false); + + // Sets the floating point value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New floating point value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetFloat(float value, bool replicate=false, bool notify=false); + + // Retrieves the string value of a console variable. + // + // @param convar Handle to the convar. + // @param value Buffer to store the value of the convar. + // @param maxlength Maximum length of string buffer. + public native void GetString(char[] value, int maxlength); + + // Sets the string value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New string value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetString(const char[] value, bool replicate=false, bool notify=false); + + // Resets the console variable to its default value. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void RestoreDefault(bool replicate=false, bool notify=false); + + // Retrieves the default string value of a console variable. + // + // @param value Buffer to store the default value of the convar. + // @param maxlength Maximum length of string buffer. + // @return Number of bytes written to the buffer (UTF-8 safe). + public native int GetDefault(char[] value, int maxlength); + + // Retrieves the specified bound of a console variable. + // + // @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. + // @param value By-reference cell to store the specified floating point bound value. + // @return True if the convar has the specified bound set, false otherwise. + public native bool GetBounds(ConVarBounds type, float &value); + + // Sets the specified bound of a console variable. + // + // @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper + // @param set If set to true, convar will use specified bound. If false, bound will be removed. + // @param value Floating point value to use as the specified bound. + public native void SetBounds(ConVarBounds type, bool set, float value=0.0); + + // Retrieves the name of a console variable. + // + // @param name Buffer to store the name of the convar. + // @param maxlength Maximum length of string buffer. + public native void GetName(char[] name, maxlength); + + // Replicates a convar value to a specific client. This does not change the actual convar value. + // + // @param client Client index + // @param value String value to send + // @return True on success, false on failure + // @error Invalid client index, client not in game, or client is fake + public native bool ReplicateToClient(int client, const char[] value); + + // Creates a hook for when a console variable's value is changed. + // + // @param callback An OnConVarChanged function pointer. + public native void AddChangeHook(ConVarChanged callback); + + // Removes a hook for when a console variable's value is changed. + // + // @param convar Handle to the convar. + // @param callback An OnConVarChanged function pointer. + // @error No active hook on convar. + public native void RemoveChangeHook(ConVarChanged callback); +} + +/** + * Creates a hook for when a console variable's value is changed. + * + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle or invalid callback function. + */ +native void HookConVarChange(Handle convar, ConVarChanged callback); + +/** + * Removes a hook for when a console variable's value is changed. + * + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. + */ +native void UnhookConVarChange(Handle convar, ConVarChanged callback); + +/** + * Returns the boolean value of a console variable. + * + * @param convar Handle to the convar. + * @return The boolean value of the convar. + * @error Invalid or corrupt Handle. + */ +native bool GetConVarBool(Handle convar); + +/** + * Sets the boolean value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New boolean value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarBool(Handle convar, bool value, bool replicate=false, bool notify=false); + +/** + * Returns the integer value of a console variable. + * + * @param convar Handle to the convar. + * @return The integer value of the convar. + * @error Invalid or corrupt Handle. + */ +native int GetConVarInt(Handle convar); + +/** + * Sets the integer value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New integer value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarInt(Handle convar, int value, bool replicate=false, bool notify=false); + +/** + * Returns the floating point value of a console variable. + * + * @param convar Handle to the convar. + * @return The floating point value of the convar. + * @error Invalid or corrupt Handle. + */ +native float GetConVarFloat(Handle convar); + +/** + * Sets the floating point value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New floating point value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarFloat(Handle convar, float value, bool replicate=false, bool notify=false); + +/** + * Retrieves the string value of a console variable. + * + * @param convar Handle to the convar. + * @param value Buffer to store the value of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. + */ +native void GetConVarString(Handle convar, char[] value, int maxlength); + +/** + * Sets the string value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New string value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarString(Handle convar, const char[] value, bool replicate=false, bool notify=false); + +/** + * Resets the console variable to its default value. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void ResetConVar(Handle convar, bool replicate=false, bool notify=false); + +/** + * Retrieves the default string value of a console variable. + * + * @param convar Handle to the convar. + * @param value Buffer to store the default value of the convar. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid or corrupt Handle. + */ +native int GetConVarDefault(Handle convar, char[] value, int maxlength); + +/** + * Returns the bitstring of flags on a console variable. + * + * @param convar Handle to the convar. + * @return A bitstring containing the FCVAR_* flags that are enabled. + * @error Invalid or corrupt Handle. + */ +native int GetConVarFlags(Handle convar); + +/** + * Sets the bitstring of flags on a console variable. + * + * @param convar Handle to the convar. + * @param flags A bitstring containing the FCVAR_* flags to enable. + * @error Invalid or corrupt Handle. + */ +native void SetConVarFlags(Handle convar, flags); + +/** + * Retrieves the specified bound of a console variable. + * + * @param convar Handle to the convar. + * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. + * @param value By-reference cell to store the specified floating point bound value. + * @return True if the convar has the specified bound set, false otherwise. + * @error Invalid or corrupt Handle. + */ +native bool GetConVarBounds(Handle convar, ConVarBounds type, float &value); + +/** + * Sets the specified bound of a console variable. + * + * @param convar Handle to the convar. + * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper + * @param set If set to true, convar will use specified bound. If false, bound will be removed. + * @param value Floating point value to use as the specified bound. + * @error Invalid or corrupt Handle. + */ +native void SetConVarBounds(Handle convar, ConVarBounds type, bool set, float value=0.0); + +/** + * Retrieves the name of a console variable. + * + * @param convar Handle to the convar. + * @param name Buffer to store the name of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. + */ +native void GetConVarName(Handle convar, char[] name, maxlength); + +/** + * Replicates a convar value to a specific client. This does not change the actual convar value. + * + * @param client Client index + * @param convar ConVar handle + * @param value String value to send + * @return True on success, false on failure + * @error Invalid client index, client not in game, or client is fake + */ +native bool SendConVarValue(int client, Handle convar, const char[] value); + +union ConVarQueryFinished +{ + // Called when a query to retrieve a client's console variable has finished. + // + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + // @param value Value that was passed when query was started. + function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, any value); + + // Called when a query to retrieve a client's console variable has finished. + // + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue); +}; + +/** + * Starts a query to retrieve the value of a client's console variable. + * + * @param client Player index. + * @param cvarName Name of client convar to query. + * @param callback A function to use as a callback when the query has finished. + * @param value Optional value to pass to the callback function. + * @return A cookie that uniquely identifies the query. + * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. + */ +native QueryCookie QueryClientConVar(int client, const char[] cvarName, ConVarQueryFinished callback, any value=0); + +/** + * Returns true if the supplied character is valid in a ConVar name. + * + * @param c Character to validate. + * @return True is valid for ConVars, false otherwise + */ +stock bool IsValidConVarChar(int c) +{ + return (c == '_' || IsCharAlpha(c) || IsCharNumeric(c)); +} diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index bb928258..6c0c5b67 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -64,6 +64,7 @@ struct Plugin #include #include #include +#include #include #include #include diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index 043f1f00..32e98e54 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -47,27 +47,27 @@ public Plugin:myinfo = }; /* Valve ConVars */ -new Handle:g_Cvar_Winlimit = INVALID_HANDLE; -new Handle:g_Cvar_Maxrounds = INVALID_HANDLE; -new Handle:g_Cvar_Fraglimit = INVALID_HANDLE; -new Handle:g_Cvar_Bonusroundtime = INVALID_HANDLE; +ConVar g_Cvar_Winlimit; +ConVar g_Cvar_Maxrounds; +ConVar g_Cvar_Fraglimit; +ConVar g_Cvar_Bonusroundtime; /* Plugin ConVars */ -new Handle:g_Cvar_StartTime = INVALID_HANDLE; -new Handle:g_Cvar_StartRounds = INVALID_HANDLE; -new Handle:g_Cvar_StartFrags = INVALID_HANDLE; -new Handle:g_Cvar_ExtendTimeStep = INVALID_HANDLE; -new Handle:g_Cvar_ExtendRoundStep = INVALID_HANDLE; -new Handle:g_Cvar_ExtendFragStep = INVALID_HANDLE; -new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; -new Handle:g_Cvar_IncludeMaps = INVALID_HANDLE; -new Handle:g_Cvar_NoVoteMode = INVALID_HANDLE; -new Handle:g_Cvar_Extend = INVALID_HANDLE; -new Handle:g_Cvar_DontChange = INVALID_HANDLE; -new Handle:g_Cvar_EndOfMapVote = INVALID_HANDLE; -new Handle:g_Cvar_VoteDuration = INVALID_HANDLE; -new Handle:g_Cvar_RunOff = INVALID_HANDLE; -new Handle:g_Cvar_RunOffPercent = INVALID_HANDLE; +ConVar g_Cvar_StartTime; +ConVar g_Cvar_StartRounds; +ConVar g_Cvar_StartFrags; +ConVar g_Cvar_ExtendTimeStep; +ConVar g_Cvar_ExtendRoundStep; +ConVar g_Cvar_ExtendFragStep; +ConVar g_Cvar_ExcludeMaps; +ConVar g_Cvar_IncludeMaps; +ConVar g_Cvar_NoVoteMode; +ConVar g_Cvar_Extend; +ConVar g_Cvar_DontChange; +ConVar g_Cvar_EndOfMapVote; +ConVar g_Cvar_VoteDuration; +ConVar g_Cvar_RunOff; +ConVar g_Cvar_RunOffPercent; new Handle:g_VoteTimer = INVALID_HANDLE; new Handle:g_RetryTimer = INVALID_HANDLE; @@ -138,9 +138,9 @@ public OnPluginStart() g_Cvar_Fraglimit = FindConVar("mp_fraglimit"); g_Cvar_Bonusroundtime = FindConVar("mp_bonusroundtime"); - if (g_Cvar_Winlimit != INVALID_HANDLE || g_Cvar_Maxrounds != INVALID_HANDLE) + if (g_Cvar_Winlimit || g_Cvar_Maxrounds) { - decl String:folder[64]; + char folder[64]; GetGameFolderName(folder, sizeof(folder)); if (strcmp(folder, "tf") == 0) @@ -159,7 +159,7 @@ public OnPluginStart() } } - if (g_Cvar_Fraglimit != INVALID_HANDLE) + if (g_Cvar_Fraglimit) { HookEvent("player_death", Event_PlayerDeath); } @@ -168,9 +168,9 @@ public OnPluginStart() //Change the mp_bonusroundtime max so that we have time to display the vote //If you display a vote during bonus time good defaults are 17 vote duration and 19 mp_bonustime - if (g_Cvar_Bonusroundtime != INVALID_HANDLE) + if (g_Cvar_Bonusroundtime) { - SetConVarBounds(g_Cvar_Bonusroundtime, ConVarBound_Upper, true, 30.0); + g_Cvar_Bonusroundtime.SetBounds(ConVarBound_Upper, true, 30.0); } g_NominationsResetForward = CreateGlobalForward("OnNominationRemoved", ET_Ignore, Param_String, Param_Cell); @@ -228,9 +228,9 @@ public OnConfigsExecuted() /* Check if mapchooser will attempt to start mapvote during bonus round time - TF2 Only */ - if ((g_Cvar_Bonusroundtime != INVALID_HANDLE) && !GetConVarInt(g_Cvar_StartRounds)) + if (g_Cvar_Bonusroundtime && !g_Cvar_StartRounds.IntValue) { - if (GetConVarFloat(g_Cvar_Bonusroundtime) <= GetConVarFloat(g_Cvar_VoteDuration)) + if (g_Cvar_Bonusroundtime.FloatValue <= g_Cvar_VoteDuration.FloatValue) { LogError("Warning - Bonus Round Time shorter than Vote Time. Votes during bonus round may not have time to complete"); } @@ -251,7 +251,7 @@ public OnMapEnd() GetCurrentMap(map, sizeof(map)); PushArrayString(g_OldMapList, map); - if (GetArraySize(g_OldMapList) > GetConVarInt(g_Cvar_ExcludeMaps)) + if (GetArraySize(g_OldMapList) > g_Cvar_ExcludeMaps.IntValue) { RemoveFromArray(g_OldMapList, 0); } @@ -316,8 +316,8 @@ SetupTimeleftTimer() new time; if (GetMapTimeLeft(time) && time > 0) { - new startTime = GetConVarInt(g_Cvar_StartTime) * 60; - if (time - startTime < 0 && GetConVarBool(g_Cvar_EndOfMapVote) && !g_MapVoteCompleted && !g_HasVoteStarted) + new startTime = g_Cvar_StartTime.IntValue * 60; + if (time - startTime < 0 && g_Cvar_EndOfMapVote.BoolValue && !g_MapVoteCompleted && !g_HasVoteStarted) { InitiateVote(MapChange_MapEnd, INVALID_HANDLE); } @@ -351,7 +351,7 @@ public Action:Timer_StartMapVote(Handle:timer, Handle:data) g_VoteTimer = INVALID_HANDLE; } - if (!GetArraySize(g_MapList) || !GetConVarBool(g_Cvar_EndOfMapVote) || g_MapVoteCompleted || g_HasVoteStarted) + if (!GetArraySize(g_MapList) || !g_Cvar_EndOfMapVote.BoolValue || g_MapVoteCompleted || g_HasVoteStarted) { return Plugin_Stop; } @@ -386,7 +386,7 @@ public Event_TeamPlayWinPanel(Handle:event, const String:name[], bool:dontBroadc { g_TotalRounds++; - if (!GetArraySize(g_MapList) || g_HasVoteStarted || g_MapVoteCompleted || !GetConVarBool(g_Cvar_EndOfMapVote)) + if (!GetArraySize(g_MapList) || g_HasVoteStarted || g_MapVoteCompleted || !g_Cvar_EndOfMapVote.BoolValue) { return; } @@ -432,7 +432,7 @@ public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) winner = GetEventInt(event, "winner"); } - if (winner == 0 || winner == 1 || !GetConVarBool(g_Cvar_EndOfMapVote)) + if (winner == 0 || winner == 1 || !g_Cvar_EndOfMapVote.BoolValue) { return; } @@ -457,12 +457,12 @@ public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) public CheckWinLimit(winner_score) { - if (g_Cvar_Winlimit != INVALID_HANDLE) + if (g_Cvar_Winlimit) { - new winlimit = GetConVarInt(g_Cvar_Winlimit); + int winlimit = g_Cvar_Winlimit.IntValue; if (winlimit) { - if (winner_score >= (winlimit - GetConVarInt(g_Cvar_StartRounds))) + if (winner_score >= (winlimit - g_Cvar_StartRounds.IntValue)) { InitiateVote(MapChange_MapEnd, INVALID_HANDLE); } @@ -472,12 +472,12 @@ public CheckWinLimit(winner_score) public CheckMaxRounds(roundcount) { - if (g_Cvar_Maxrounds != INVALID_HANDLE) + if (g_Cvar_Maxrounds) { - new maxrounds = GetConVarInt(g_Cvar_Maxrounds); + int maxrounds = g_Cvar_Maxrounds.IntValue; if (maxrounds) { - if (roundcount >= (maxrounds - GetConVarInt(g_Cvar_StartRounds))) + if (roundcount >= (maxrounds - g_Cvar_StartRounds.IntValue)) { InitiateVote(MapChange_MapEnd, INVALID_HANDLE); } @@ -487,12 +487,12 @@ public CheckMaxRounds(roundcount) public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { - if (!GetArraySize(g_MapList) || g_Cvar_Fraglimit == INVALID_HANDLE || g_HasVoteStarted) + if (!GetArraySize(g_MapList) || !g_Cvar_Fraglimit || g_HasVoteStarted) { return; } - if (!GetConVarInt(g_Cvar_Fraglimit) || !GetConVarBool(g_Cvar_EndOfMapVote)) + if (!g_Cvar_Fraglimit.IntValue || !g_Cvar_EndOfMapVote.BoolValue) { return; } @@ -509,7 +509,7 @@ public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) return; } - if (GetClientFrags(fragger) >= (GetConVarInt(g_Cvar_Fraglimit) - GetConVarInt(g_Cvar_StartFrags))) + if (GetClientFrags(fragger) >= (g_Cvar_Fraglimit.IntValue - g_Cvar_StartFrags.IntValue)) { InitiateVote(MapChange_MapEnd, INVALID_HANDLE); } @@ -572,16 +572,16 @@ InitiateVote(MapChange:when, Handle:inputlist=INVALID_HANDLE) * like sm_mapvote from the adminmenu in the future. */ - decl String:map[PLATFORM_MAX_PATH]; + char map[PLATFORM_MAX_PATH]; /* No input given - User our internal nominations and maplist */ if (inputlist == INVALID_HANDLE) { - new nominateCount = GetArraySize(g_NominateList); - new voteSize = GetConVarInt(g_Cvar_IncludeMaps); + int nominateCount = GetArraySize(g_NominateList); + int voteSize = g_Cvar_IncludeMaps.IntValue; /* Smaller of the two - It should be impossible for nominations to exceed the size though (cvar changed mid-map?) */ - new nominationsToAdd = nominateCount >= voteSize ? voteSize : nominateCount; + int nominationsToAdd = nominateCount >= voteSize ? voteSize : nominateCount; for (new i=0; i 0) { - ExtendMapTimeLimit(GetConVarInt(g_Cvar_ExtendTimeStep)*60); + ExtendMapTimeLimit(g_Cvar_ExtendTimeStep.IntValue * 60); } } - if (g_Cvar_Winlimit != INVALID_HANDLE) + if (g_Cvar_Winlimit) { - new winlimit = GetConVarInt(g_Cvar_Winlimit); + int winlimit = g_Cvar_Winlimit.IntValue; if (winlimit) { - SetConVarInt(g_Cvar_Winlimit, winlimit + GetConVarInt(g_Cvar_ExtendRoundStep)); + g_Cvar_Winlimit.IntValue = winlimit + g_Cvar_ExtendRoundStep.IntValue; } } - if (g_Cvar_Maxrounds != INVALID_HANDLE) + if (g_Cvar_Maxrounds) { - new maxrounds = GetConVarInt(g_Cvar_Maxrounds); + new maxrounds = g_Cvar_Maxrounds.IntValue; if (maxrounds) { - SetConVarInt(g_Cvar_Maxrounds, maxrounds + GetConVarInt(g_Cvar_ExtendRoundStep)); + g_Cvar_Maxrounds.IntValue = maxrounds + g_Cvar_ExtendRoundStep.IntValue; } } - if (g_Cvar_Fraglimit != INVALID_HANDLE) + if (g_Cvar_Fraglimit) { - new fraglimit = GetConVarInt(g_Cvar_Fraglimit); + int fraglimit = g_Cvar_Fraglimit.IntValue; if (fraglimit) { - SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep)); + g_Cvar_Fraglimit.IntValue = fraglimit + g_Cvar_ExtendFragStep.IntValue; } } @@ -781,10 +781,10 @@ public Handler_MapVoteFinished(Handle:menu, num_items, const item_info[][2]) { - if (GetConVarBool(g_Cvar_RunOff) && num_items > 1) + if (g_Cvar_RunOff.BoolValue && num_items > 1) { - new Float:winningvotes = float(item_info[0][VOTEINFO_ITEM_VOTES]); - new Float:required = num_votes * (GetConVarFloat(g_Cvar_RunOffPercent) / 100.0); + float winningvotes = float(item_info[0][VOTEINFO_ITEM_VOTES]); + float required = num_votes * (g_Cvar_RunOffPercent.FloatValue / 100.0); if (winningvotes < required) { @@ -793,16 +793,16 @@ public Handler_MapVoteFinished(Handle:menu, SetMenuTitle(g_VoteMenu, "Runoff Vote Nextmap"); SetVoteResultCallback(g_VoteMenu, Handler_VoteFinishedGeneric); - decl String:map[PLATFORM_MAX_PATH]; - decl String:info1[PLATFORM_MAX_PATH]; - decl String:info2[PLATFORM_MAX_PATH]; + char map[PLATFORM_MAX_PATH]; + char info1[PLATFORM_MAX_PATH]; + char info2[PLATFORM_MAX_PATH]; GetMenuItem(menu, item_info[0][VOTEINFO_ITEM_INDEX], map, sizeof(map), _, info1, sizeof(info1)); AddMenuItem(g_VoteMenu, map, info1); GetMenuItem(menu, item_info[1][VOTEINFO_ITEM_INDEX], map, sizeof(map), _, info2, sizeof(info2)); AddMenuItem(g_VoteMenu, map, info2); - new voteDuration = GetConVarInt(g_Cvar_VoteDuration); + int voteDuration = g_Cvar_VoteDuration.IntValue; SetMenuExitButton(g_VoteMenu, false); VoteMenuToAll(g_VoteMenu, voteDuration); @@ -811,7 +811,7 @@ public Handler_MapVoteFinished(Handle:menu, new Float:map2percent = float(item_info[1][VOTEINFO_ITEM_VOTES])/ float(num_votes) * 100; - PrintToChatAll("[SM] %t", "Starting Runoff", GetConVarFloat(g_Cvar_RunOffPercent), info1, map1percent, info2, map2percent); + PrintToChatAll("[SM] %t", "Starting Runoff", g_Cvar_RunOffPercent.FloatValue, info1, map1percent, info2, map2percent); LogMessage("Voting for next map was indecisive, beginning runoff vote"); return; @@ -862,7 +862,7 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) case MenuAction_VoteCancel: { // If we receive 0 votes, pick at random. - if (param1 == VoteCancel_NoVotes && GetConVarBool(g_Cvar_NoVoteMode)) + if (param1 == VoteCancel_NoVotes && g_Cvar_NoVoteMode.BoolValue) { new count = GetMenuItemCount(menu); decl String:map[PLATFORM_MAX_PATH]; @@ -940,13 +940,13 @@ CreateNextVote() { ClearArray(g_NextMapList); - decl String:map[PLATFORM_MAX_PATH]; + char map[PLATFORM_MAX_PATH]; new Handle:tempMaps = CloneArray(g_MapList); GetCurrentMap(map, sizeof(map)); RemoveStringFromArray(tempMaps, map); - if (GetConVarInt(g_Cvar_ExcludeMaps) && GetArraySize(tempMaps) > GetConVarInt(g_Cvar_ExcludeMaps)) + if (g_Cvar_ExcludeMaps.IntValue && GetArraySize(tempMaps) > g_Cvar_ExcludeMaps.IntValue) { for (new i = 0; i < GetArraySize(g_OldMapList); i++) { @@ -955,10 +955,10 @@ CreateNextVote() } } - new limit = (GetConVarInt(g_Cvar_IncludeMaps) < GetArraySize(tempMaps) ? GetConVarInt(g_Cvar_IncludeMaps) : GetArraySize(tempMaps)); - for (new i = 0; i < limit; i++) + int limit = (g_Cvar_IncludeMaps.IntValue < GetArraySize(tempMaps) ? g_Cvar_IncludeMaps.IntValue : GetArraySize(tempMaps)); + for (int i = 0; i < limit; i++) { - new b = GetRandomInt(0, GetArraySize(tempMaps) - 1); + int b = GetRandomInt(0, GetArraySize(tempMaps) - 1); GetArrayString(tempMaps, b, map, sizeof(map)); PushArrayString(g_NextMapList, map); RemoveFromArray(tempMaps, b); @@ -1007,7 +1007,7 @@ NominateResult:InternalNominateMap(String:map[], bool:force, owner) } /* Too many nominated maps. */ - if (GetArraySize(g_NominateList) >= GetConVarInt(g_Cvar_IncludeMaps) && !force) + if (GetArraySize(g_NominateList) >= g_Cvar_IncludeMaps.IntValue && !force) { return Nominate_VoteFull; } @@ -1015,9 +1015,9 @@ NominateResult:InternalNominateMap(String:map[], bool:force, owner) PushArrayString(g_NominateList, map); PushArrayCell(g_NominateOwners, owner); - while (GetArraySize(g_NominateList) > GetConVarInt(g_Cvar_IncludeMaps)) + while (GetArraySize(g_NominateList) > g_Cvar_IncludeMaps.IntValue) { - new String:oldmap[PLATFORM_MAX_PATH]; + char oldmap[PLATFORM_MAX_PATH]; GetArrayString(g_NominateList, 0, oldmap, sizeof(oldmap)); Call_StartForward(g_NominationsResetForward); Call_PushString(oldmap); @@ -1142,7 +1142,7 @@ public Native_CheckVoteDone(Handle:plugin, numParams) public Native_EndOfMapVoteEnabled(Handle:plugin, numParams) { - return GetConVarBool(g_Cvar_EndOfMapVote); + return g_Cvar_EndOfMapVote.BoolValue; } public Native_GetExcludeMapList(Handle:plugin, numParams) diff --git a/plugins/nominations.sp b/plugins/nominations.sp index 1cf6078f..8384a251 100644 --- a/plugins/nominations.sp +++ b/plugins/nominations.sp @@ -46,8 +46,8 @@ public Plugin myinfo = url = "http://www.sourcemod.net/" }; -Handle g_Cvar_ExcludeOld = null; -Handle g_Cvar_ExcludeCurrent = null; +ConVar g_Cvar_ExcludeOld; +ConVar g_Cvar_ExcludeCurrent; Menu g_MapMenu = null; Handle g_MapList = null; @@ -262,13 +262,13 @@ void BuildMapMenu() ArrayList excludeMaps; char currentMap[32]; - if (GetConVarBool(g_Cvar_ExcludeOld)) + if (g_Cvar_ExcludeOld.BoolValue) { excludeMaps = ArrayList(ByteCountToCells(33)); GetExcludeMapList(excludeMaps); } - if (GetConVarBool(g_Cvar_ExcludeCurrent)) + if (g_Cvar_ExcludeCurrent.BoolValue) { GetCurrentMap(currentMap, sizeof(currentMap)); } @@ -280,7 +280,7 @@ void BuildMapMenu() GetArrayString(g_MapList, i, map, sizeof(map)); - if (GetConVarBool(g_Cvar_ExcludeCurrent)) + if (g_Cvar_ExcludeCurrent.BoolValue) { if (StrEqual(map, currentMap)) { @@ -289,7 +289,7 @@ void BuildMapMenu() } /* Dont bother with this check if the current map check passed */ - if (GetConVarBool(g_Cvar_ExcludeOld) && status == MAPSTATUS_ENABLED) + if (g_Cvar_ExcludeOld.BoolValue && status == MAPSTATUS_ENABLED) { if (excludeMaps.FindString(map) != -1) { diff --git a/plugins/randomcycle.sp b/plugins/randomcycle.sp index 9d0493b9..69e7da40 100644 --- a/plugins/randomcycle.sp +++ b/plugins/randomcycle.sp @@ -43,7 +43,7 @@ public Plugin:myinfo = url = "http://www.sourcemod.net/" }; -new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; +ConVar g_Cvar_ExcludeMaps; new Handle:g_MapList = INVALID_HANDLE; new Handle:g_OldMapList = INVALID_HANDLE; @@ -82,7 +82,7 @@ public Action:Timer_RandomizeNextmap(Handle:timer) decl String:map[32]; new bool:oldMaps = false; - if (GetConVarInt(g_Cvar_ExcludeMaps) && GetArraySize(g_MapList) > GetConVarInt(g_Cvar_ExcludeMaps)) + if (g_Cvar_ExcludeMaps.IntValue && GetArraySize(g_MapList) > g_Cvar_ExcludeMaps.IntValue) { oldMaps = true; } @@ -99,7 +99,7 @@ public Action:Timer_RandomizeNextmap(Handle:timer) PushArrayString(g_OldMapList, map); SetNextMap(map); - if (GetArraySize(g_OldMapList) > GetConVarInt(g_Cvar_ExcludeMaps)) + if (GetArraySize(g_OldMapList) > g_Cvar_ExcludeMaps.IntValue) { RemoveFromArray(g_OldMapList, 0); } @@ -107,4 +107,4 @@ public Action:Timer_RandomizeNextmap(Handle:timer) LogAction(-1, -1, "RandomCycle has chosen %s for the nextmap.", map); return Plugin_Stop; -} \ No newline at end of file +} diff --git a/plugins/reservedslots.sp b/plugins/reservedslots.sp index 1aa16d71..5b296e04 100644 --- a/plugins/reservedslots.sp +++ b/plugins/reservedslots.sp @@ -48,12 +48,12 @@ new g_adminCount = 0; new bool:g_isAdmin[MAXPLAYERS+1]; /* Handles to convars used by plugin */ -new Handle:sm_reserved_slots; -new Handle:sm_hide_slots; -new Handle:sv_visiblemaxplayers; -new Handle:sm_reserve_type; -new Handle:sm_reserve_maxadmins; -new Handle:sm_reserve_kicktype; +ConVar sm_reserved_slots; +ConVar sm_hide_slots; +ConVar sv_visiblemaxplayers; +ConVar sm_reserve_type; +ConVar sm_reserve_maxadmins; +ConVar sm_reserve_kicktype; enum KickType { @@ -73,8 +73,8 @@ public OnPluginStart() sm_reserve_maxadmins = CreateConVar("sm_reserve_maxadmins", "1", "Maximum amount of admins to let in the server with reserve type 2", 0, true, 0.0); sm_reserve_kicktype = CreateConVar("sm_reserve_kicktype", "0", "How to select a client to kick (if appropriate)", 0, true, 0.0, true, 2.0); - HookConVarChange(sm_reserved_slots, SlotCountChanged); - HookConVarChange(sm_hide_slots, SlotHideChanged); + sm_reserved_slots.AddChangeHook(SlotCountChanged); + sm_hide_slots.AddChangeHook(SlotHideChanged); } public OnPluginEnd() @@ -85,17 +85,17 @@ public OnPluginEnd() public OnMapStart() { - if (GetConVarBool(sm_hide_slots)) - { - SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots)); + if (sm_hide_slots.BoolValue) + { + SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - sm_reserved_slots.IntValue); } } public OnConfigsExecuted() { - if (GetConVarBool(sm_hide_slots)) + if (sm_hide_slots.BoolValue) { - SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots)); + SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - sm_reserved_slots.IntValue); } } @@ -108,9 +108,9 @@ public Action:OnTimedKick(Handle:timer, any:client) KickClient(client, "%T", "Slot reserved", client); - if (GetConVarBool(sm_hide_slots)) + if (sm_hide_slots.BoolValue) { - SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots)); + SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - sm_reserved_slots.IntValue); } return Plugin_Handled; @@ -118,7 +118,7 @@ public Action:OnTimedKick(Handle:timer, any:client) public OnClientPostAdminCheck(client) { - new reserved = GetConVarInt(sm_reserved_slots); + new reserved = sm_reserved_slots.IntValue; if (reserved > 0) { @@ -126,13 +126,13 @@ public OnClientPostAdminCheck(client) new limit = GetMaxHumanPlayers() - reserved; new flags = GetUserFlagBits(client); - new type = GetConVarInt(sm_reserve_type); + new type = sm_reserve_type.IntValue; if (type == 0) { if (clients <= limit || IsFakeClient(client) || flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION) { - if (GetConVarBool(sm_hide_slots)) + if (sm_hide_slots.BoolValue) { SetVisibleMaxSlots(clients, limit); } @@ -172,7 +172,7 @@ public OnClientPostAdminCheck(client) g_isAdmin[client] = true; } - if (clients > limit && g_adminCount < GetConVarInt(sm_reserve_maxadmins)) + if (clients > limit && g_adminCount < sm_reserve_maxadmins.IntValue) { /* Server is full, reserved slots aren't and client doesn't have reserved slots access */ @@ -198,9 +198,9 @@ public OnClientPostAdminCheck(client) public OnClientDisconnect_Post(client) { - if (GetConVarBool(sm_hide_slots)) + if (sm_hide_slots.BoolValue) { - SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots)); + SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - sm_reserved_slots.IntValue); } if (g_isAdmin[client]) @@ -210,30 +210,30 @@ public OnClientDisconnect_Post(client) } } -public SlotCountChanged(Handle:convar, const String:oldValue[], const String:newValue[]) +public SlotCountChanged(ConVar convar, const String:oldValue[], const String:newValue[]) { /* Reserved slots or hidden slots have been disabled - reset sv_visiblemaxplayers */ - new slotcount = GetConVarInt(convar); + new slotcount = convar.IntValue; if (slotcount == 0) { ResetVisibleMax(); } - else if (GetConVarBool(sm_hide_slots)) + else if (sm_hide_slots.BoolValue) { SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - slotcount); } } -public SlotHideChanged(Handle:convar, const String:oldValue[], const String:newValue[]) +public SlotHideChanged(ConVar convar, const String:oldValue[], const String:newValue[]) { /* Reserved slots or hidden slots have been disabled - reset sv_visiblemaxplayers */ - if (!GetConVarBool(convar)) + if (!convar.BoolValue) { ResetVisibleMax(); } else { - SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots)); + SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - sm_reserved_slots.IntValue); } } @@ -248,17 +248,17 @@ SetVisibleMaxSlots(clients, limit) num = limit; } - SetConVarInt(sv_visiblemaxplayers, num); + sv_visiblemaxplayers.IntValue = num; } ResetVisibleMax() { - SetConVarInt(sv_visiblemaxplayers, -1); + sv_visiblemaxplayers.IntValue = -1; } SelectKickClient() { - new KickType:type = KickType:GetConVarInt(sm_reserve_kicktype); + new KickType:type = KickType:sm_reserve_kicktype.IntValue; new Float:highestValue; new highestValueId; @@ -326,4 +326,4 @@ SelectKickClient() } return highestValueId; -} \ No newline at end of file +} diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index d1981888..cb1528ac 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -46,12 +46,12 @@ public Plugin:myinfo = url = "http://www.sourcemod.net/" }; -new Handle:g_Cvar_Needed = INVALID_HANDLE; -new Handle:g_Cvar_MinPlayers = INVALID_HANDLE; -new Handle:g_Cvar_InitialDelay = INVALID_HANDLE; -new Handle:g_Cvar_Interval = INVALID_HANDLE; -new Handle:g_Cvar_ChangeTime = INVALID_HANDLE; -new Handle:g_Cvar_RTVPostVoteAction = INVALID_HANDLE; +ConVar g_Cvar_Needed; +ConVar g_Cvar_MinPlayers; +ConVar g_Cvar_InitialDelay; +ConVar g_Cvar_Interval; +ConVar g_Cvar_ChangeTime; +ConVar g_Cvar_RTVPostVoteAction; new bool:g_CanRTV = false; // True if RTV loaded maps and is active. new bool:g_RTVAllowed = false; // True if RTV is available to players. Used to delay rtv votes. @@ -106,7 +106,7 @@ public OnConfigsExecuted() { g_CanRTV = true; g_RTVAllowed = false; - CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(g_Cvar_InitialDelay.FloatValue, Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); } public OnClientConnected(client) @@ -117,7 +117,7 @@ public OnClientConnected(client) g_Voted[client] = false; g_Voters++; - g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); + g_VotesNeeded = RoundToFloor(float(g_Voters) * g_Cvar_Needed.FloatValue); return; } @@ -134,7 +134,7 @@ public OnClientDisconnect(client) g_Voters--; - g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); + g_VotesNeeded = RoundToFloor(float(g_Voters) * g_Cvar_Needed.FloatValue); if (!g_CanRTV) { @@ -146,7 +146,7 @@ public OnClientDisconnect(client) g_Votes >= g_VotesNeeded && g_RTVAllowed ) { - if (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished()) + if (g_Cvar_RTVPostVoteAction.IntValue == 1 && HasEndOfMapVoteFinished()) { return; } @@ -186,7 +186,7 @@ public Action:Command_RTV(client, args) AttemptRTV(client) { - if (!g_RTVAllowed || (GetConVarInt(g_Cvar_RTVPostVoteAction) == 1 && HasEndOfMapVoteFinished())) + if (!g_RTVAllowed || (g_Cvar_RTVPostVoteAction.IntValue == 1 && HasEndOfMapVoteFinished())) { ReplyToCommand(client, "[SM] %t", "RTV Not Allowed"); return; @@ -198,7 +198,7 @@ AttemptRTV(client) return; } - if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers)) + if (GetClientCount(true) < g_Cvar_MinPlayers.IntValue) { ReplyToCommand(client, "[SM] %t", "Minimal Players Not Met"); return; @@ -255,13 +255,13 @@ StartRTV() if (CanMapChooserStartVote()) { - new MapChange:when = MapChange:GetConVarInt(g_Cvar_ChangeTime); + new MapChange:when = MapChange:g_Cvar_ChangeTime.IntValue; InitiateMapChooserVote(when); ResetRTV(); g_RTVAllowed = false; - CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(g_Cvar_Interval.FloatValue, Timer_DelayRTV, _, TIMER_FLAG_NO_MAPCHANGE); } } @@ -288,4 +288,4 @@ public Action:Timer_ChangeMap(Handle:hTimer) } return Plugin_Stop; -} \ No newline at end of file +}