So here's my own code for the plugin! It has only speed and scout for now but I wanna know if you people think it look better??
Just a hint! Line 178 I wanna change cs_get_weaopn_ammo to use fakemeta or other module so that I don't have to include <cstike> any idea?
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
/*Hello people and welcome to DeFRAG for CS1.6!
Most of the code here is taken from anothers plugins that already exist. I'm a totally beginner in amxx coding so I need time to understand fully how it works.
If someone better than me want to make it I will be gratefull, I just got the idea nothing more :)
CREDITS GOES TO :
ConnorMcLeod : Bhop script -> http://forums.alliedmods.net/showthr...light=slowdown
skyjur : Semiclip -> http://forums.alliedmods.net/showthr...light=semiclip post #6
arkshine : Sprint plugin code [VERSION 2] -> http://forums.alliedmods.net/showthread.php?t=85767 post #10
Meow meow : Scout conc -> http://forums.alliedmods.net/showthr...highlight=conc [Original idea from Fatalis]
Watch scout conc in action -> http://www.youtube.com/watch?v=g0lBufjXakI
That is DeFRaG on Quake 3 -> http://www.youtube.com/watch?v=fqq9YcmHW1A*/
#define MAX_PLAYERS 20 // Define max_players on DeFRAG server
#define BUNNYJUMP_MAX_SPEED_FACTOR 1.0 // Define speed gained when using Bhop
#define Player_Jump 6
#define OFFSET_CAN_LONGJUMP 356 // VEN
#define CONC_WEAP CSW_SCOUT // Define wich weapon to use for having a conc push
#define KNIFE_SPRINT_SPEED 1500.0 // Define the speed when using +sprint cmd
#define KNIFE_DEFAULT_SPEED 500.0 // Define normal move speed with the knife (Default Cs1.6 = 250)
new defrag_scoutpush, defrag_scoutradius, defrag_scout_iammo;
// new maxplayers
new bool:g_bAlive[MAX_PLAYERS +1]
// new g_pcvarBhop, g_pcvarFallDamage
// new g_pcvarGravity
new lastammo[33];
new lastweap[33];
public plugin_init() {
register_plugin("DeFRAG", "1.0", "superNOVA_")
register_clcmd ( "+sprint", "ClientCommand_StartSprint" );
register_clcmd ( "-sprint", "ClientCommand_StopSprint" );
// g_pcvarBhop = register_cvar("bhop", "1") // 0 = Bhop OFF / 1 = Bhop ON //
// g_pcvarFallDamage = register_cvar("mp_falldamage", "0.0") // Amout of the normal damages taken when falling (0 = no damages / 1 = normal damages )
RegisterHam(Ham_Player_Jump, "player", "Player_Jump")
register_forward(FM_UpdateClientData, "UpdateClientData")
register_forward(FM_CmdStart, "CmdStart")
RegisterHam(Ham_Spawn, "player", "Check_Alive", 1)
RegisterHam(Ham_Killed, "player", "Check_Alive", 1)
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_player")
register_concmd("amx_bhop", "AdminCmd_Bhop", ADMIN_LEVEL_A, "<nick|#userid> <0|1>")
// g_pcvarGravity = get_cvar_pointer("sv_gravity")
// DeFRAG Scout Settings
defrag_scoutpush = register_cvar("scout_conc","900.0"); // Force of the push
defrag_scoutradius = register_cvar("scout_radius","900.0"); // Area covered by the push
defrag_scout_iammo = register_cvar("scout_iammo","0"); // Infinite ammo for scout <0/1>
// BHOP Settings
// g_pcvarBhop = register_cvar("bhop_on", "1") // (0 : bhop off, 1 : bhop off)
// g_pcvarFallDamage = register_cvar("mp_falldamage", "0.0") // Amount of normal damages taken when falling ( 0 = no damages // 1 = normal damages )
}
public Check_Alive(id)
{
g_bAlive[id] = bool:is_user_alive(id)
}
// DeFRAG Knife
new const g_szKnifeModel[] = "models/v_knife.mdl"; // To set the knife model! Easy if you want to use custom models (will make some soon just for DeFRAG)
const KNIFE_DRAW_ANIMATION = 3;
public ClientCommand_StartSprint ( const PlayerId )
{
if ( get_user_weapon ( PlayerId ) == CSW_KNIFE )
{
UTIL_SetPlayerSpeed ( PlayerId , KNIFE_DEFAULT_SPEED );
set_pev( PlayerId, pev_viewmodel2, g_szKnifeModel );
set_pev( PlayerId, pev_weaponanim, KNIFE_DRAW_ANIMATION );
message_begin( MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, PlayerId );
write_byte( KNIFE_DRAW_ANIMATION );
write_byte( pev( PlayerId, pev_body ) );
message_end();
}
return PLUGIN_HANDLED;
}
UTIL_SetPlayerSpeed ( const PlayerId, const Float:Speed )
{
set_pev( PlayerId, pev_maxspeed, Speed );
engfunc( EngFunc_SetClientMaxspeed, PlayerId, Speed );
}
// DeFRAG bhop
// DeFRAG scout
stock get_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3] )
{
new Float:fEntOrigin[3];
pev( ent, pev_origin, fEntOrigin );
// Velocity = Distance / Time
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = ( vector_distance( fEntOrigin,fOrigin ) / fSpeed );
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;
return ( fVelocity[0] && fVelocity[1] && fVelocity[2] );
}
// Sets velocity of an entity (ent) away from origin with speed (speed)
stock set_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed )
{
new Float:fVelocity[3];
get_velocity_from_origin( ent, fOrigin, fSpeed, fVelocity )
set_pev( ent, pev_velocity, fVelocity );
return ( 1 );
}
public make_tracer(id)
{
new Float:maxboost = get_pcvar_float(defrag_scoutpush);
if( !maxboost )
return;
new weap = read_data(2); // id of the weapon
new ammo = read_data(3); // ammo left in clip
if( weap == CONC_WEAP && g_bAlive[id] ){
if( lastweap[id] == 0 )
lastweap[id] = weap;
if( lastammo[id] > ammo && lastweap[id] == weap ){
new Vec[3], Float:fVec[3], Float:origin[3];
get_user_origin(id, Vec, 3);
IVecFVec(Vec, fVec);
pev(id, pev_origin, origin);
new Float:dist = get_distance_f( origin, fVec );
new Float:radius = get_pcvar_float( defrag_scoutradius );
if(dist <= radius){
new Float:boost = maxboost - ( ( maxboost * dist) / radius );
set_velocity_from_origin(id, fVec, boost);
}
if( get_pcvar_num( defrag_scout_iammo ) )
{
new wpn[32];
get_weaponname(weap,wpn,31);
if( ammo == 1 )
{
new iWPNidx = -1;
while( (iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)) )
{
if( id == pev(iWPNidx, pev_owner) )
{
cs_set_weapon_ammo(iWPNidx, 11);
ammo = 11;
break;
}
}
}
}
}
lastammo[id] = ammo;
lastweap[id] = weap;
}
}