#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich> //no dobra na jeden register includuje kanapke ale nie chce mi sie grzebac w fake wybaczycie prawda
?
#include <codmod>
#define PLUGIN "Sprint"
#define VERSION "1.0"
#define AUTHOR "DarkGL"
#define SZYBKOSC_GRACZA(%1) (250.0+cod_get_user_trim(%1, 1, 1, 1)*1.3)
new Float:gfPitch[33];
new Float:gfYaw[33];
new Float:gfMoveOffset[33][2];
new giMoves[33];
new bool:gFast[33];
new gZmeczenie[33];
//pcvary
new pSpeed,pZmeczenie;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
pSpeed = register_cvar("sprint_szybkosc","60.0")
pZmeczenie = register_cvar("sprint_zmeczenie","5");
register_forward(FM_PlayerPreThink, "fwPreThink");
register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
RegisterHam(Ham_Spawn,"player","spawned",1)
register_event("CurWeapon","CurWeapon","be", "1=1");
register_clcmd("+fast_run","startMove")
register_clcmd("-fast_run","stopMove")
}
public client_connect(id)
client_cmd(id,"bind shift +fast_run");
public startMove(id){
if(!gFast[id] && is_user_alive(id) && cs_get_user_zoom(id) == CS_SET_NO_ZOOM){
gfPitch[id] = gfYaw[id] = 0.0;
moveTo(id, 0.0, 20.0);
gFast[id] = true;
engfunc(EngFunc_SetClientMaxspeed, id, SZYBKOSC_GRACZA(id)+get_pcvar_float(pSpeed));
remove_task(id)
set_task(0.1,"addZmeczenie",id,_,_,"b")
}
return PLUGIN_HANDLED
}
public stopMove(id){
if(gFast[id] && is_user_alive(id)){
moveTo(id, 0.0, 0.0);
gFast[id] = false;
engfunc(EngFunc_SetClientMaxspeed, id, SZYBKOSC_GRACZA(id));
remove_task(id)
set_task(0.2,"odejZmecznie",id,_,_,"b")
}
return PLUGIN_HANDLED
}
moveTo(id, Float:fPitch, Float:fYaw, moves=30){
gfMoveOffset[id][0] = (fPitch - gfPitch[id])/moves;
gfMoveOffset[id][1] = (fYaw - gfYaw[id])/moves;
giMoves[id] = moves;
}
public fwPreThink(id){
if(!is_user_alive(id)) return;
if(gFast[id]){
set_pev(id, pev_button, pev(id,pev_button) & ~IN_ATTACK)
set_pev(id, pev_button, pev(id,pev_button) & ~IN_ATTACK2)
if(gZmeczenie[id] >= get_pcvar_num(pZmeczenie)*10){
stopMove(id);
}
}
if(giMoves[id] > 0){
giMoves[id]--;
gfPitch[id] += gfMoveOffset[id][0];
gfYaw[id] += gfMoveOffset[id][1];
engfunc(EngFunc_CrosshairAngle, id, gfPitch[id], gfYaw[id]);
}
}
public spawned(id){
if(is_user_alive(id)){
gZmeczenie[id] = 0;
}
}
public addZmeczenie(id){
gZmeczenie[id]++;
}
public odejZmecznie(id){
if(gZmeczenie[id] > 0){
gZmeczenie[id]--;
}
}
public UpdateClientData_Post(id, sendweapons, cd_handle)
{
if(!is_user_alive(id)){
return FMRES_IGNORED
}
if(gFast[id]){
set_cd(cd_handle, CD_ID, 0)
return FMRES_HANDLED
}
return FMRES_IGNORED
}
public CurWeapon(id)
{
if(!is_user_alive(id)){
return PLUGIN_CONTINUE;
}
static iOldWeap[33];
new weapon = read_data(2);
if(gFast[id] && iOldWeap[id] != weapon){
new szName[64];
get_weaponname(iOldWeap[id],szName,charsmax(szName));
engclient_cmd(id,szName);
engfunc(EngFunc_SetClientMaxspeed, id, SZYBKOSC_GRACZA(id)+get_pcvar_float(pSpeed));
return PLUGIN_CONTINUE;
}
iOldWeap[id] = weapon;
return PLUGIN_CONTINUE;
}