Код за потвърждение: Избери целия код
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Sprint"
#define VERSION "1.2"
#define AUTHOR "akcaliberg"
#define TASKID 58964
#define MAX_PLAYERS 32
new bool:IsUserSprinting[MAX_PLAYERS+1];
new bool:UserCanSprint[MAX_PLAYERS+1];
new gMsgScreenFade;
new Float:LastSprintUsed[MAX_PLAYERS+1];
new Float:LastKeyPressed[MAX_PLAYERS+1];
new Float:LastSprintReleased[MAX_PLAYERS+1];
new Float:SprintTime[MAX_PLAYERS+1];
new Float:gCooldown, Float:gSprinttime, Float:gSprintspeed,
Float:gKeyPressInterval,gShowUsage,gBreathing, gBlockJump, gScreenFade[9];
new const EXHAUSTED_BREATH[] = "player/breathe2.wav";
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("sprint_cooldown","5");
register_cvar("sprint_timemax","2.5");
register_cvar("sprint_speed","400.0");
register_cvar("sprint_keylisten_interval","0.2");
register_cvar("sprint_blockjump","0");
register_cvar("sprint_breathsound","2");
register_cvar("sprint_screenfade_enabled","1");
register_cvar("sprint_screenfade_rgba","0 20 200 50");
register_cvar("sprint_screenfade_rgba2","255 0 0 50");
register_cvar("sprint_showusage","1");
register_event("HLTV","eNewRound","a","1=0","2=0");
register_event("TeamInfo", "eTeamInfo", "a");
register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink");
RegisterHam(Ham_Spawn,"player","fwd_PlayerSpawnPost",1);
gMsgScreenFade = get_user_msgid("ScreenFade");
register_concmd("sprint_reloadcvars", "CacheCvars", ADMIN_CVAR);
if(gShowUsage) set_task(300.0,"ShowUsage",TASKID, .flags="b");
}
public plugin_precache() {
precache_sound(EXHAUSTED_BREATH)
}
public plugin_cfg() {
CacheCvars(0,0,0) // function will ignore the level check if the id equals 0
}
public eNewRound() {
CacheCvars(0,0,0)
}
public eTeamInfo() {
new id = read_data(1);
new szTeam[12];
read_data(2, szTeam, charsmax(szTeam));
UserCanSprint[id] = (szTeam[0] == 'S' || szTeam[0] == 'U') ? false : true;
}
public CacheCvars(id, level, cid) {
if(id != 0 && !cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
gCooldown = get_cvar_float("sprint_cooldown");
gSprinttime = get_cvar_float("sprint_timemax");
gSprintspeed = get_cvar_float("sprint_speed");
gKeyPressInterval = get_cvar_float("sprint_keylisten_interval");
gShowUsage = get_cvar_num("sprint_showusage");
gBreathing = get_cvar_num("sprint_breathsound");
gBlockJump = get_cvar_num("sprint_blockjump");
gScreenFade[0] = get_cvar_num("sprint_screenfade_enabled");
new szRGBA[16], szR[4], szG[4], szB[4], szA[4];
get_cvar_string("sprint_screenfade_rgba",szRGBA,15);
parse(szRGBA, szR, 3, szG, 3, szB, 3, szA, 3);
gScreenFade[1] = str_to_num(szR);
gScreenFade[2] = str_to_num(szG);
gScreenFade[3] = str_to_num(szB);
gScreenFade[4] = str_to_num(szA);
get_cvar_string("sprint_screenfade_rgba2",szRGBA,15);
parse(szRGBA, szR, 3, szG, 3, szB, 3, szA, 3);
gScreenFade[5] = str_to_num(szR);
gScreenFade[6] = str_to_num(szG);
gScreenFade[7] = str_to_num(szB);
gScreenFade[8] = str_to_num(szA);
return PLUGIN_HANDLED
}
public client_putinserver(id) {
if(gShowUsage) set_task(10.0,"ShowUsage",id+TASKID)
}
public fwd_PlayerSpawnPost(id) {
SprintTime[id] = 0.0;
}
public fwd_PlayerPreThink(id) {
if(!UserCanSprint[id]) return;
static button,oldbuttons,flags, Float:speed;
button = pev(id, pev_button);
oldbuttons = pev(id, pev_oldbuttons);
pev(id, pev_maxspeed, speed);
flags = pev(id, pev_flags);
if(!(flags & FL_DUCKING) && speed != 1.0) {
// Pressed
if(button & IN_FORWARD && !(oldbuttons & IN_FORWARD)) {
if( (get_gametime() - LastKeyPressed[id]) < gKeyPressInterval ) {
if( (get_gametime() - LastSprintReleased[id]) >= gCooldown) {
LastSprintUsed[id] = get_gametime();
IsUserSprinting[id] = true;
SprintTime[id] = 0.0
if(gScreenFade[0]) SetScreenFadeEffect(id, 1)
}
else if( SprintTime[id] > 0.0 && SprintTime[id] < gSprinttime ) {
LastSprintUsed[id] = get_gametime();
IsUserSprinting[id] = true;
if(gScreenFade[0]) SetScreenFadeEffect(id, 1)
}
}
LastKeyPressed[id] = get_gametime();
}
// Holding
else if( oldbuttons & IN_FORWARD && button & IN_FORWARD ) {
if(IsUserSprinting[id]) {
if(speed != gSprintspeed) set_pev(id, pev_maxspeed, gSprintspeed );
if( ( SprintTime[id] + get_gametime() - LastSprintUsed[id] ) > gSprinttime) {
IsUserSprinting[id] = false;
ExecuteHamB(Ham_Item_PreFrame, id);
LastSprintReleased[id] = get_gametime();
SprintTime[id] = 0.0;
if(gScreenFade[0]) SetScreenFadeEffect(id, 2)
// Exhausted breath sound
switch(gBreathing) {
case 1: client_cmd(id, "spk %s",EXHAUSTED_BREATH);
case 2: emit_sound(id, CHAN_AUTO, EXHAUSTED_BREATH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
}
}
}
// Released
else if( oldbuttons & IN_FORWARD && !(button & IN_FORWARD)) {
if(IsUserSprinting[id]) {
LastSprintReleased[id] = get_gametime();
IsUserSprinting[id] = false;
SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
ExecuteHamB(Ham_Item_PreFrame, id);
if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
}
}
// Ducking
if(IsUserSprinting[id] && button & IN_DUCK) {
LastSprintReleased[id] = get_gametime();
IsUserSprinting[id] = false;
SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
ExecuteHamB(Ham_Item_PreFrame, id);
if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
}
// Jumping
if(gBlockJump && IsUserSprinting[id] && button & IN_JUMP) {
LastSprintReleased[id] = get_gametime();
IsUserSprinting[id] = false;
SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
ExecuteHamB(Ham_Item_PreFrame, id);
if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
}
}
}
public SetScreenFadeEffect(id, flag) {
switch(flag) {
case 0: {
message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
write_short(0)
write_short(0)
write_short(0)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(0)
message_end()
}
case 1: {
message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
write_short(0) // duration (will be ignored because of the flag)
write_short(0) // holdtime
write_short(0x0004) // FFADE_STAYOUT
write_byte(gScreenFade[1]) // r
write_byte(gScreenFade[2]) // g
write_byte(gScreenFade[3]) // b
write_byte(gScreenFade[4]) // alpha
message_end()
}
case 2: {
message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
write_short(4096) // duration
write_short(2048) // holdtime
write_short(0x0000) // FFADE_IN
write_byte(gScreenFade[5]) // r
write_byte(gScreenFade[6]) // g
write_byte(gScreenFade[7]) // b
write_byte(gScreenFade[8]) // alpha
message_end()
}
}
}
public ShowUsage(id) {
id -= TASKID
client_print(id,print_chat,"[SPRINT] You can sprint in this server by double-tapping forward (W) key. ");
}
[code]