View Single Post
Psyk0tik
Veteran Member
Join Date: May 2012
Location: Homeless
Old 07-14-2018 , 21:08   Re: l4d2 survivor speed plugin
Reply With Quote #8

Got it working.

PHP Code:
#include <sourcemod>
#pragma semicolon 1
#pragma newdecls required
#define PLUGIN_VERSION "1.0"

bool g_bSpedUp[MAXPLAYERS 1];
ConVar g_cvEnablePlugin;

public 
Plugin myinfo =
{
    
name "[L4D & L4D2] Set Player Speed",
    
author "Psykotik (Crasher_3637)",
    
description "Allows admins to set player's speed.",
    
version PLUGIN_VERSION,
    
url "https://forums.alliedmods.net/showthread.php?t=304476"
};

public 
void OnPluginStart()
{
    
RegAdminCmd("sm_setspeed"cmdSetSpeedADMFLAG_KICK"Set a player's speed.");
    
RegAdminCmd("sm_speedplayer"cmdSetSpeedADMFLAG_KICK"Set a player's speed.");
    
g_cvEnablePlugin CreateConVar("sps_enableplugin""1""Enable the plugin?\n(0: OFF)\n(1: ON)");
    
CreateConVar("sps_pluginversion"PLUGIN_VERSION"Plugin version"FCVAR_NOTIFY|FCVAR_DONTRECORD);
    
g_cvEnablePlugin.AddChangeHook(vEnablePlugin);
    
AutoExecConfig(true"set_player_speed");
}

public 
void vEnablePlugin(ConVar convar, const char[] oldValue, const char[] newValue)
{
    if (!
g_cvEnablePlugin.BoolValue)
    {
        for (
int iPlayeriPlayer <= MaxClientsiPlayer++)
        {
            if (
bIsValidClient(iPlayer))
            {
                
SetEntPropFloat(iPlayerProp_Send"m_flLaggedMovementValue"1.0);
            }
        }
    }
}

public 
Action cmdSetSpeed(int clientint args)
{
    if (!
g_cvEnablePlugin.BoolValue)
    {
        
ReplyToCommand(client"\x04[SPS]\x01 The\x05 Set Player Speed\x01 plugin is off.");
        return 
Plugin_Handled;
    }
    if (!
bIsValidClient(client))
    {
        
ReplyToCommand(client"\x04[SPS]\x01 You must be in-game to use this command.");
        return 
Plugin_Handled;
    }
    
char target[32];
    
char target_name[MAX_NAME_LENGTH];
    
int target_list[MAXPLAYERS];
    
int target_count;
    
bool tn_is_ml;
    
GetCmdArg(1targetsizeof(target));
    
char arg2[32];
    
GetCmdArg(2arg2sizeof(arg2));
    
float value StringToFloat(arg2);
    
char arg3[32];
    
GetCmdArg(3arg3sizeof(arg3));
    
int toggle StringToInt(arg3);
    if (
args != 3)
    {
        
ReplyToCommand(client"\x04[SPS]\x01 Usage: sm_setspeed <#userid|name> <value> <0|1> or sm_speedplayer <#userid|name> <value> <0|1>");
        return 
Plugin_Handled;
    }
    if ((
target_count ProcessTargetString(targetclienttarget_listMAXPLAYERSCOMMAND_FILTER_ALIVEtarget_namesizeof(target_name), tn_is_ml)) <= 0)
    {
        
ReplyToTargetError(clienttarget_count);
        return 
Plugin_Handled;
    }
    for (
int iPlayer 0iPlayer target_countiPlayer++)
    {
        
vChangePlayerSpeed(target_list[iPlayer], valuetoggle);
    }
    return 
Plugin_Handled;
}

void vChangePlayerSpeed(int clientfloat valueint toggle)
{
    switch (
toggle)
    {
        case 
0:
        {
            
g_bSpedUp[client] = false;
            
SetEntPropFloat(clientProp_Send"m_flLaggedMovementValue"1.0);
        }
        case 
1:
        {
            if (
bIsValidClient(client) && !g_bSpedUp[client])
            {
                
g_bSpedUp[client] = true;
                
DataPack dpDataPack;
                
CreateDataTimer(1.0tTimerChangePlayerSpeeddpDataPackTIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
                
dpDataPack.WriteCell(GetClientUserId(client));
                
dpDataPack.WriteFloat(value);
            }
        }
    }
}

public 
Action tTimerChangePlayerSpeed(Handle timerDataPack pack)
{
    
pack.Reset();
    
int client GetClientOfUserId(pack.ReadCell());
    
float value pack.ReadFloat();
    if (!
g_cvEnablePlugin.BoolValue || !bIsValidClient(client) || !g_bSpedUp[client])
    {
        return 
Plugin_Stop;
    }
    
SetEntPropFloat(clientProp_Send"m_flLaggedMovementValue"value);
    return 
Plugin_Continue;
}

bool bIsValidClient(int client)
{
    return 
client && client <= MaxClients && IsClientInGame(client) && !IsClientInKickQueue(client) && IsPlayerAlive(client);

Attached Files
File Type: sp Get Plugin or Get Source (set_player_speed.sp - 590 views - 3.6 KB)
__________________
Psyk0tik is offline