#include <amxmodx> #include <fakemeta> #define PLUGIN "Speedometer" #define VERSION "1.2" #define AUTHOR "AciD" #define FREQ 0.1 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_forward(FM_Think, "Think") 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 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) set_hudmessage(r, g, b, -1.0, 0.7, 0, 0.0, FREQ, 0.01, 0.0) ShowSyncHudMsg(i, SyncHud, "%3.2f units/second", speed) } }
Nie sprawdzałem bo nie mam aktualnie jak, ale twierdzę że działa.