#include #include #include #define PLUGIN "Glowing Color By Speed" #define VERSION "1.0" #define AUTHOR "Garey" // Comment below if you do not want /glow showing up on chat #define ECHOCMD #define FREQ 0.1 new bool:plrGlow[33] = { true, ... }; new TaskEnt,g_showglow,g_glowamount,g_minspeed,g_maxspeed, maxplayers public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("Garey", "Glowing Color By Speed", 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 /glow", "toogleGlow") g_showglow = register_cvar("gbs_start", "0") g_glowamount=register_cvar("gbs_amount", "25") g_minspeed=register_cvar("gbs_glow_min_speed", "250") g_maxspeed=register_cvar("gbs_glow_max_speed", "300") maxplayers = get_maxplayers() } public Think(ent) { if(ent == TaskEnt) { SpeedTask() set_pev(ent, pev_nextthink, get_gametime() + FREQ) } } public client_putinserver(id) { plrGlow[id] = (get_pcvar_num(g_showglow)) > 0 ? true : false } public toogleGlow(id) { if( plrGlow[id] ) { client_print(id, print_chat, "[AMXX] Glowing is disabled for you."); set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderNormal,0) plrGlow[id] = false; } else { client_print(id, print_chat, "[AMXX] Glowing is enabled for you."); plrGlow[id] = true; } #if defined ECHOCMD return PLUGIN_CONTINUE; #else return PLUGIN_HANDLED; #endif } stock dynamicColor(min,max,Float:value,&red,&green,&blue) { //Don`t launch with max ~= min #define MaxC 255 #define MinC 0 #define DtC 255 if (value>=max) { red=MaxC; green=MinC; blue=MinC; return; } else if (value<=min) { red=MinC; green=MinC; blue=MaxC; return; } new Float:step = (max-min)/4.0; new Float:dt = value-min; if (dt <= step) { red = MinC; green = floatround(dt*(DtC/step)); blue = MaxC; } else if (dt-=step, dt <= step) { red = MinC; green = MaxC; blue = floatround((step-dt)*(DtC/step)); } else if (dt-=step, dt <= step) { red = floatround(dt*(DtC/step)); green = MaxC; blue = MinC; } else { dt-=step; red = MaxC; green = floatround((step-dt)*(DtC/step)); blue = MinC; } return; } SpeedTask() { static i, target static Float:velocity[3] static Float:speedh for(i=1; i<=maxplayers; i++) { if(!is_user_connected(i)) continue if(!plrGlow[i]) continue target = pev(i, pev_iuser1) == 4 ? pev(i, pev_iuser2) : i pev(target, pev_velocity, velocity) speedh = floatsqroot(floatpower(velocity[0], 2.0) + floatpower(velocity[1], 2.0)) static r, g, b dynamicColor(get_pcvar_num(g_minspeed),get_pcvar_num(g_maxspeed),speedh,r,g,b) set_user_rendering(i,kRenderFxGlowShell,r,g,b,kRenderNormal,get_pcvar_num(g_glowamount)) } }