PHP Code:
/* [X] The Original Author of this plugin is "DarkGL".
*
* [X] Changelog: (Edited by "kketan77")
*
* 1. Removed Force Bind.
* 2. Added Custom Sprint Menu for Bind.
* 3. Added Color print function.
* 4. Added Default menu for unbind Sprint.
* 5. Added Sprint Screen Fade effect!
*
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Sprint"
#define VERSION "1.0"
#define AUTHOR "DarkGL"
#define FFADE_STAYOUT 0x0004
new g_msgSayText
new g_maxplayers
new const Float:g_fWeaponsSpeed[ ]={
000.0,
250.0, 000.0, 260.0, 250.0, 240.0,
250.0, 250.0, 240.0, 250.0, 250.0,
250.0, 250.0, 210.0, 240.0, 240.0,
250.0, 250.0, 210.0, 250.0, 220.0,
230.0, 230.0, 250.0, 210.0, 250.0,
250.0, 235.0, 221.0, 250.0, 245.0
};
new Float:gfPitch[33];
new Float:gfYaw[33];
new Float:gfMoveOffset[33][2];
new giMoves[33];
new bool:gFast[33];
new gZmeczenie[33];
new pSpeed,pZmeczenie;
new gMsgScreenFade;
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")
register_clcmd("say /sprint","sprint_menu")
register_clcmd("say_team /sprint","sprint_menu")
g_msgSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
gMsgScreenFade = get_user_msgid("ScreenFade")
}
public sprint_menu(id){
new menu = menu_create("\b[Sprint Menu] Bind Shift button for Sprint?", "sprint_menu_handler")
menu_additem(menu, "\wYes (Bind Sprint)", "1", 0);
menu_additem(menu, "\wNo (Don't Bind Sprint)", "2", 0);
menu_additem(menu, "\wMore Information on Sprint.", "3", 0);
menu_additem(menu, "\wReset Shift Button (Default key will be set!)", "4", 0);
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
menu_display(id, menu, 0);
}
public sprint_menu_handler(id, menu, item){
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
client_cmd(id,"bind shift +fast_run")
colored_print(id, "^x04[Sprint Menu]^x01 Sprint is Successfully binded on Shift Button! Press ^x04'Shift'^x01 button for Sprint!")
}
case 2:
{
colored_print(id, "^x04[Sprint Menu]^x01 Sprint is not binded on Shift Button!")
}
case 3:
{
colored_print(id, "^x04[Sprint Menu]^x01 Sprint is temporary power which increase your speed of running!")
}
case 4:
{
client_cmd(id,"bind shift +speed")
colored_print(id, "^x04[Sprint Menu]^x01 Sprint is Successfully removed from Shift Button!")
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public event_Sprint(id){
if(!is_user_alive(id) || is_user_bot(id))
return PLUGIN_CONTINUE;
else if(is_user_alive(id)){
message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, {0,0,0}, id);
write_short( 1<<10 );
write_short( 1<<10 );
write_short( 0x0004 );
write_byte( 225 );
write_byte( 255 );
write_byte( 255 );
write_byte( 35 );
message_end();
}
return PLUGIN_CONTINUE;
}
public stop_Sprint(id){
message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, {0,0,0}, id);
write_short( 1<<10 );
write_short( 1<<10 );
write_short( 1<<12 );
write_byte( 225 );
write_byte( 255 );
write_byte( 255 );
write_byte( 35 );
message_end();
}
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, g_fWeaponsSpeed[get_user_weapon(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;
stop_Sprint(id)
engfunc(EngFunc_SetClientMaxspeed, id, g_fWeaponsSpeed[get_user_weapon(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]){
event_Sprint(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)){
colored_print(id, "^x04[Sprint Menu]^x01 Like to run faster? Type '/sprint' in chat for ^x04[Sprint Menu]^x01")
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, g_fWeaponsSpeed[get_user_weapon(id)]+get_pcvar_float(pSpeed));
return PLUGIN_CONTINUE;
}
iOldWeap[id] = weapon;
return PLUGIN_CONTINUE;
}
colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount
changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}