All pastes #939344 Raw Edit

Untitled

public text v1 · immutable
·published 2008-03-12 06:11 UTC
rendered paste body
#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma semicolon 1

new Handle:Enabled;
new Handle:RespawnTime;
new Handle:NoBlock;
new Handle:SpawnProtection;
new Handle:SpawnWeapon;
new Handle:BhopPush;
new Handle:BhopHeight;
new Handle:SurfCvars; 

new VelOff_0;
new VelOff_1;
new BaseVelOff;
new CollOff;

new bool:EventsHooked;

public Plugin:myinfo = 
{
	name = "Surf Tools",
	author = "Fredd",
	description = "Adds Fun to Surf Servers",
	version = "1.5",
	url = "www.sourcemod.net"
}
public OnMapStart()
{
	decl String:MapName[32];
	GetCurrentMap(MapName, sizeof(MapName));
	
	if(StrContains(MapName, "surf") != -1)
	{
		SetConVarInt(Enabled, 1);
		LogMessage("[SurfTools] SurfTools is Enabled");
		new SCvars = GetConVarInt(SurfCvars);
		
		if(SCvars == 1)
		{
			LogMessage("[SurfTools] Changing server cvars for 1337 surfing...");
			ServerCommand("sv_airaccelerate 999");
		} else
		{
			LogMessage("[SurfTools] Server cvars have not been changed for good surfing...set 'st_surfcvars' to 1 and reload the map for cvars to be changed"); 
		}
	} else 
	{
		SetConVarInt(Enabled, 0);
		LogMessage("[SurfTools] SurfTools is disbaled: Not a valid surf map");
	}	
}

public OnPluginStart()
{
	CreateConVar("st_version", "1.5", "Surf tools Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
	
	Enabled  			=    	CreateConVar("st_enabled", 		"1", 				"0 = Plugin Disabled, 1 = Plugin Enabled");
	RespawnTime 		=    	CreateConVar("st_respawntime", 	"5", 				"Ammount of time to respawn after a user dies");
	NoBlock  			=    	CreateConVar("st_noblock", 		"1", 				"Toggles on and off no blocking");
	SpawnProtection 	=   	CreateConVar("st_sptime", 		"5", 				"Sets the amount of seconds user's will be protected from getting killed on their respawn");
	SpawnWeapon   		=  		CreateConVar("st_spawnweapon", 	"weapon_scout", 	"sets wether the client should get a scout on respawn or not");
	BhopPush    		=   	CreateConVar("st_bhoppush",		"1.0",				"The forward push when you jump");
	BhopHeight  		=		CreateConVar("st_bhopheight",	"1.0",				"The upward push when you jump");
	SurfCvars			=		CreateConVar("st_surfcvars", 	"1", 				"1 = Enabled surf cvars, 0 disable them(def = 1)");
	
	VelOff_0    		=   	FindSendPropOffs("CBasePlayer","m_vecVelocity[0]");
	VelOff_1    		=   	FindSendPropOffs("CBasePlayer","m_vecVelocity[1]");
	BaseVelOff			= 		FindSendPropOffs("CBasePlayer","m_vecBaseVelocity");
	
	CollOff 			= 		FindSendPropOffs("CBaseEntity", "m_CollisionGroup");
	
	EventsHooked = true;
	
	RegConsoleCmd("say", Command_Say);
	RegConsoleCmd("say_team", Command_Say);
	
	
	
	HookConVarChange(Enabled, OnConVarChange);
	
	HookEvent("player_death", PlayerDeath);
	HookEvent("player_spawn", PlayerSpawn);
	HookEvent("player_jump",PlayerJump);
	
	
	CreateTimer(60.0, PrintMsg, _, TIMER_REPEAT);
}
public Action:PrintMsg(Handle:timer)
{
	if(GetConVarInt(Enabled) == 1)
		PrintToChatAll("\x04[SurfTools]\x01This server is running \x04SurfTools\x01, to respawn type \x04/respawn\x01 or \x04respawn");
}
public OnConVarChange(Handle:convar, const String:oldValue[], const String:newValue[])
{
	new value = !!StringToInt(newValue);
	if (value == 0)
	{
		if (EventsHooked == true)
		{
			EventsHooked = false;
			
			UnhookEvent("player_death", PlayerDeath);
			UnhookEvent("player_spawn", PlayerSpawn);
			UnhookEvent("player_jump",PlayerJump);			
		}
	}
	else
	{
		EventsHooked = true;
		
		HookEvent("player_death", PlayerDeath);
		HookEvent("player_spawn", PlayerSpawn);
		HookEvent("player_jump",PlayerJump);	
	}
}
public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	RespawnClient(client);
	
	return Plugin_Continue;
}
public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	new Team = GetClientTeam(client);
	
	if(IsPlayerAlive(client) && (Team == 2 || Team == 3))
	{
		decl String:WpnName[33];
		GetConVarString(SpawnWeapon, WpnName, sizeof(WpnName));
		
		SpawnProtctClient(client);
		GivePlayerItem(client, "weapon_knife");
		
		if(GetConVarInt(NoBlock) == 1)
			SetEntData(client, CollOff, 2, 4, true);

		if(StrContains(WpnName, "weapon_") != -1)
			GivePlayerItem(client, WpnName);
		else
			LogError("st_spawnweapon is not set to a valid weapon name..");
	
		RemoveModels();
	}
	return Plugin_Continue;
}
public PlayerJump(Handle:event,const String:name[],bool:dontBroadcast)
{
	new index   =  GetClientOfUserId(GetEventInt(event,"userid"));
	new Float:finalvec[3];
	
	finalvec[0] =    GetEntDataFloat(index,VelOff_0)*GetConVarFloat(BhopPush)/2.0;
	finalvec[1] =    GetEntDataFloat(index,VelOff_1)*GetConVarFloat(BhopPush)/2.0;
	finalvec[2] =    GetConVarFloat(BhopHeight)*50.0;
	
	SetEntDataVector(index,BaseVelOff,finalvec,true);
}
public Action:Command_Say(client, args)
{
	if(GetConVarInt(Enabled) == 1)
	{   
		decl String:text[192];
		GetCmdArgString(text, sizeof(text));
		
		new startidx = 0;
		if (text[0] == '"')
		{
			startidx = 1;
			
			new len = strlen(text);
			if (text[len-1] == '"')
			{
				text[len-1] = '\0';
			}
		}
		if(StrEqual(text[startidx], "/respawn") || StrEqual(text[startidx], "respawn"))
			RespawnClient(client);
	}
	return Plugin_Continue;
}
stock RespawnClient(client)
{
	new Team = GetClientTeam(client);
	
	if(Team == 0 || Team == 1)
	{
		PrintToChat(client, "\x04[SurfTools]\x01You must be on a team first");
		return;
	}
	if(IsPlayerAlive(client))
	{
		PrintToChat(client, "\x04[SurfTools]\x01You must be dead");
		return;
	}   
	new Float:Timer = float(GetConVarInt(RespawnTime));
	
	PrintToChat(client, "\x04[SurfTools]\x01You will be respawned in \x04%i \x01seconds", RoundToNearest(Timer));
	CreateTimer(Timer, Respawn, client);
	
	return;
}
stock SpawnProtctClient(client)
{
	new Float:Timer = float(GetConVarInt(SpawnProtection));
	
	SetEntProp(client, Prop_Data, "m_takedamage", 0, 1);
	PrintToChat(client, "\x04[SurfTools] \x01you will be spawned protected for \x04%i \x01seconds", RoundToNearest(Timer));
	CreateTimer(Timer, RemoveSpawnProtection, client);
	
	return;
}
public Action:RemoveSpawnProtection(Handle:Timer, any:client)
{
	if(!IsClientInGame(client))
		return;
	
	SetEntProp(client, Prop_Data, "m_takedamage", 2, 1);
	PrintToChat(client, "\x04[SurfTools] \x01spawn protection is now off..");
	
	return;
}
public Action:Respawn(Handle:Timer, any:client)
{
	if(!IsClientInGame(client) || IsPlayerAlive(client))
		return;
	
	new Team = GetClientTeam(client);
	if(Team == 0 || Team == 1)
		return;
	
	CS_RespawnPlayer(client);
	
	return;
}
stock RemoveModels()
{
	new start = GetMaxClients();
	
	for(new i = start+1; i <= GetMaxEntities(); i++)
	{
		if(IsValidEntity(i))
		{
			new String:EntModel[128];
			GetEntPropString(i, Prop_Data, "m_ModelName", EntModel, sizeof(EntModel));
			
			if ((StrContains(EntModel, "models/weapons/w_knife.mdl") != -1) ||
				(StrContains(EntModel, "models/weapons/w_knife_t.mdl") != -1) ||
			(StrContains(EntModel, "models/weapons/w_knife_ct.mdl") != -1))
			
			RemoveEdict(i);
		}
	}
}