#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <colorchat>
#define PLUGIN "Speedometer"
#define VERSION "1.2"
#define AUTHOR "AciD"
#define FREQ 0.1
#define FL_WATERJUMP (1<<11) // player jumping out of water
#define FL_ONGROUND (1<<9) // At rest / on the ground
new bool:plrSpeed[33]
new TaskEnt,SyncHud,showspeed,color, maxplayers, r, g, b
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("AcidoX", "Speedometer 1.1", FCVAR_SERVER)
register_cvar("sbhopper_version", "1.2", FCVAR_SERVER)
register_forward(FM_Think, "Think")
register_cvar("bh_enabled", "1")
register_cvar("bh_autojump", "1")
register_cvar("bh_showusage", "1")
TaskEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
set_pev(TaskEnt, pev_classname, "speedometer_think")
set_pev(TaskEnt, pev_nextthink, get_gametime() + 1.01)
register_clcmd("say /speed", "toogleSpeed")
showspeed = register_cvar("showspeed", "1")
color = register_cvar("speed_colors", "255 255 255")
SyncHud = CreateHudSyncObj()
maxplayers = get_maxplayers()
new colors[16], red[4], green[4], blue[4]
get_pcvar_string(color, colors, sizeof colors - 1)
parse(colors, red, 3, green, 3, blue, 3)
r = str_to_num(red)
g = str_to_num(green)
b = str_to_num(blue)
}
public Think(ent)
{
if(ent == TaskEnt)
{
SpeedTask()
set_pev(ent, pev_nextthink, get_gametime() + FREQ)
}
}
public client_putinserver(id)
{
plrSpeed[id] = showspeed > 0 ? true : false
}
public toogleSpeed(id)
{
plrSpeed[id] = plrSpeed[id] ? false : true
return PLUGIN_HANDLED
}
SpeedTask()
{
static i, target
static Float:velocity[3]
static Float:speed, Float:speedh
for(i=1; i<=maxplayers; i++)
{
if(!is_user_connected(i)) continue
if(!plrSpeed[i]) continue
target = pev(i, pev_iuser1) == 4 ? pev(i, pev_iuser2) : i
pev(target, pev_velocity, velocity)
speed = vector_length(velocity)
speedh = floatsqroot(floatpower(velocity[0], 2.0) + floatpower(velocity[1], 2.0))
set_hudmessage(r, g, b, -1.0, 0.7, 0, 0.0, FREQ, 0.01, 0.0)
ShowSyncHudMsg(i, SyncHud, "%3.2f Sebesseg^n%3.2f km/h", speedh, speedh / 16)
}
}
public client_PreThink(id) {
if (!get_cvar_num("bh_enabled"))
return PLUGIN_CONTINUE
entity_set_float(id, EV_FL_fuser2, 0.0) // Disable slow down after jumping
if (!get_cvar_num("bh_autojump"))
return PLUGIN_CONTINUE
// Code from CBasePlayer::Jump (player.cpp) Make a player jump automatically
if (entity_get_int(id, EV_INT_button) & 2) { // If holding jump
new flags = entity_get_int(id, EV_INT_flags)
if (flags & FL_WATERJUMP)
return PLUGIN_CONTINUE
if ( entity_get_int(id, EV_INT_waterlevel) >= 2 )
return PLUGIN_CONTINUE
if ( !(flags & FL_ONGROUND) )
return PLUGIN_CONTINUE
new Float:velocity[3]
entity_get_vector(id, EV_VEC_velocity, velocity)
velocity[2] += 250.0
entity_set_vector(id, EV_VEC_velocity, velocity)
entity_set_int(id, EV_INT_gaitsequence, 6) // Play the Jump Animation
}
return PLUGIN_CONTINUE
}
public client_authorized(id)
set_task(30.0, "showUsage", id)
public showUsage(id) {
if ( !get_cvar_num("bh_enabled") || !get_cvar_num("bh_showusage") )
return PLUGIN_HANDLED
if ( !get_cvar_num("bh_autojump") ) {
client_print(id, print_chat, "[AMXX] A nyulugras be van kapcsolva a szerveren. Ugras utan nem lassulsz le.")
} else {
ColorChat(id, GREEN, "[BHOP]-^1Hasznalata ^4W-A-S-D ^1melett, az ^4ugras ^1lenyomvatartasaval!")
}
return PLUGIN_HANDLED
}