new PlVers:__version = 5; new Float:NULL_VECTOR[3]; new String:NULL_STRING[1]; new Extension:__ext_core = 72; new MaxClients; new Extension:__ext_sdktools = 1164; new Handle:g_hCVTeam; new Handle:g_hCVTime; new g_iRestrictTeam; new Float:g_fRestrictTime; new Handle:g_hAllowDuckTimer[67]; new bool:g_bIsDucking[67]; public Plugin:myinfo = { name = "Anti Duck", description = "Disables players from ducking.", author = "Blaze", version = "1.1", url = "http://www.Clan-Destiny.de/" }; public __ext_core_SetNTVOptional() { MarkNativeAsOptional("GetFeatureStatus"); MarkNativeAsOptional("RequireFeature"); MarkNativeAsOptional("AddCommandListener"); MarkNativeAsOptional("RemoveCommandListener"); MarkNativeAsOptional("BfWriteBool"); MarkNativeAsOptional("BfWriteByte"); MarkNativeAsOptional("BfWriteChar"); MarkNativeAsOptional("BfWriteShort"); MarkNativeAsOptional("BfWriteWord"); MarkNativeAsOptional("BfWriteNum"); MarkNativeAsOptional("BfWriteFloat"); MarkNativeAsOptional("BfWriteString"); MarkNativeAsOptional("BfWriteEntity"); MarkNativeAsOptional("BfWriteAngle"); MarkNativeAsOptional("BfWriteCoord"); MarkNativeAsOptional("BfWriteVecCoord"); MarkNativeAsOptional("BfWriteVecNormal"); MarkNativeAsOptional("BfWriteAngles"); MarkNativeAsOptional("BfReadBool"); MarkNativeAsOptional("BfReadByte"); MarkNativeAsOptional("BfReadChar"); MarkNativeAsOptional("BfReadShort"); MarkNativeAsOptional("BfReadWord"); MarkNativeAsOptional("BfReadNum"); MarkNativeAsOptional("BfReadFloat"); MarkNativeAsOptional("BfReadString"); MarkNativeAsOptional("BfReadEntity"); MarkNativeAsOptional("BfReadAngle"); MarkNativeAsOptional("BfReadCoord"); MarkNativeAsOptional("BfReadVecCoord"); MarkNativeAsOptional("BfReadVecNormal"); MarkNativeAsOptional("BfReadAngles"); MarkNativeAsOptional("BfGetNumBytesLeft"); MarkNativeAsOptional("PbReadInt"); MarkNativeAsOptional("PbReadFloat"); MarkNativeAsOptional("PbReadBool"); MarkNativeAsOptional("PbReadString"); MarkNativeAsOptional("PbReadColor"); MarkNativeAsOptional("PbReadAngle"); MarkNativeAsOptional("PbReadVector"); MarkNativeAsOptional("PbReadVector2D"); MarkNativeAsOptional("PbGetRepeatedFieldCount"); MarkNativeAsOptional("PbReadRepeatedInt"); MarkNativeAsOptional("PbReadRepeatedFloat"); MarkNativeAsOptional("PbReadRepeatedBool"); MarkNativeAsOptional("PbReadRepeatedString"); MarkNativeAsOptional("PbReadRepeatedColor"); MarkNativeAsOptional("PbReadRepeatedAngle"); MarkNativeAsOptional("PbReadRepeatedVector"); MarkNativeAsOptional("PbReadRepeatedVector2D"); MarkNativeAsOptional("PbSetInt"); MarkNativeAsOptional("PbSetFloat"); MarkNativeAsOptional("PbSetBool"); MarkNativeAsOptional("PbSetString"); MarkNativeAsOptional("PbSetColor"); MarkNativeAsOptional("PbSetAngle"); MarkNativeAsOptional("PbSetVector"); MarkNativeAsOptional("PbSetVector2D"); MarkNativeAsOptional("PbAddInt"); MarkNativeAsOptional("PbAddFloat"); MarkNativeAsOptional("PbAddBool"); MarkNativeAsOptional("PbAddString"); MarkNativeAsOptional("PbAddColor"); MarkNativeAsOptional("PbAddAngle"); MarkNativeAsOptional("PbAddVector"); MarkNativeAsOptional("PbAddVector2D"); MarkNativeAsOptional("PbReadMessage"); MarkNativeAsOptional("PbReadRepeatedMessage"); MarkNativeAsOptional("PbAddMessage"); VerifyCoreVersion(); return 0; } bool:operator==(Float:,Float:)(Float:oper1, Float:oper2) { return FloatCompare(oper1, oper2) == 0; } bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive) { return strcmp(str1, str2, caseSensitive) == 0; } public OnPluginStart() { new Handle:hVersion = CreateConVar("sm_antiduck_version", "1.1", "Disable Ducking", 401728, false, 0.0, false, 0.0); if (hVersion) { SetConVarString(hVersion, "1.1", false, false); } g_hCVTeam = CreateConVar("sm_antiduck_team", "1", "Which team should not be allowed to duck? 0: disabled, 1: both, 2: terror, 3: ct?", 262144, true, 0.0, true, 3.0); g_hCVTime = CreateConVar("sm_antiduck_time", "2", "How long in seconds should a player be disallowed to duck after standing up?", 262144, true, 0.0, false, 0.0); HookConVarChange(g_hCVTeam, ConVarChanged:1); HookConVarChange(g_hCVTime, ConVarChanged:3); return 0; } public OnConfigsExecuted() { g_iRestrictTeam = GetConVarInt(g_hCVTeam); g_fRestrictTime = GetConVarFloat(g_hCVTime); return 0; } public OnClientDisconnect(client) { g_bIsDucking[client] = 0; if (g_hAllowDuckTimer[client][0][0]) { KillTimer(g_hAllowDuckTimer[client][0][0], false); g_hAllowDuckTimer[client] = 0; } return 0; } public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { if (g_iRestrictTeam) { if (buttons & 4) { g_bIsDucking[client] = 1; new var1; if (0.0 == g_fRestrictTime) { buttons = buttons & -5; return Action:1; } } else { if (g_bIsDucking[client][0][0]) { g_bIsDucking[client] = 0; g_hAllowDuckTimer[client] = CreateTimer(g_fRestrictTime, Timer_AllowDucking, client, 2); } } return Action:0; } return Action:0; } public Action:Timer_AllowDucking(Handle:timer, client) { g_hAllowDuckTimer[client] = 0; return Action:4; } public ConVar_Team(Handle:convar, String:oldValue[], String:newValue[]) { if (StrEqual(oldValue, newValue, true)) { return 0; } g_iRestrictTeam = StringToInt(newValue, 10); return 0; } public ConVar_Time(Handle:convar, String:oldValue[], String:newValue[]) { if (StrEqual(oldValue, newValue, true)) { return 0; } g_fRestrictTime = StringToFloat(newValue); return 0; }