/*******************************************************************************
AMX Speed
Author: KRoTaL
Port : Claw (GraffityMaster)
Version: 0.2
0.1 Release
0.2 Dead players can see the speed of the player they are spectating
Shows your current speed, max speed, max ground speed.
You can also see players max ground speeds, to check if one has a speed hack.
Commands:
say /speed - switches the display of the speed info
say speed - switches the display of the speed info
say_team /speed - switches the display of the speed info
say_team speed - switches the display of the speed info
amx_showspeed - shows the max speed of connected players (admin only)
say speedadmin - shows the max speed of connected players (admin only)
Setup:
Install the amxx file.
Enable Engine.
*******************************************************************************/
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <sqlx>
new g_speed[33]
new g_maxGroundSpeed[33]
new g_maxSpeed[33], Top[3][20], TopNev[3][20][32],g_maxplayers
new const SQL_INFO[][] = {
"mysqlgame.clans.hu", // HOST
"xx, // USERNAME
"xx", // PASSWORD
"xx" // DATABASE
}
new Handle:g_SqlTuple;
new name[33][32]
public plugin_init()
{
register_plugin("Speed", "0.2", "KRoTaL / GraffityMaster")
register_clcmd("say /speed", "speedSwitch")
register_clcmd("say speed", "speedSwitch")
register_clcmd("say_team speed", "speedSwitch")
register_clcmd("say_team /speed", "speedSwitch")
register_clcmd("say /btop15", "Topbhop")
register_clcmd("amx_showspeed", "showSpeed", ADMIN_LEVEL_B, "- shows the max speed of connected players")
register_clcmd("say speedadmin", "showSpeed", ADMIN_LEVEL_B, "- shows the max speed of connected players")
set_task(0.1, "speedTask", 5875454, "", 0, "b")
TopEllenorzes()
g_maxplayers = get_maxplayers()
}
public plugin_cfg() {
new Query[512];
g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `hd_new` (`username` varchar(32) NOT NULL,`hd_seb` int(11) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
}
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
if(FailState == TQUERY_CONNECT_FAILED)
set_fail_state("Nem tudtam csatlakozni az adatbazishoz.");
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error");
if(Errcode)
log_amx("Hibat dobtam: %s",Error);
}
public client_putinserver(id) {
if(!is_user_bot(id)) {
get_user_name(id, name[id], charsmax(name))
load(id)
}
}
public load(id) {
new Query[512], Data[1]
Data[0] = id
formatex(Query, charsmax(Query), "SELECT * FROM `hd_new` WHERE username = ^"%s^";", name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1)
}
public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
log_amx("%s", Error)
return
}
else {
new id = Data[0];
if(SQL_NumRows(Query) > 0) { // Ha talált legalább 1 sort, akkor ezek történnek.
g_maxSpeed[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "hd_seb"))
// Ez a parancs szöveg, szám és float esetében is másképp van, ehhez infó lentebb.
}
else { // Ha nem talált sort, mert még nem volt a szerveren, akkor készítünk neki egyet.
save(id) // Ehhez infó a Játékos sorainak létrehozásánál.
}
}
}
public save(id) {
new text[512];
formatex(text, charsmax(text), "INSERT INTO `hd_new` (`username`, `hd_seb`) VALUES (^"%s^", ^"0^");", name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}
public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
log_amx("%s", Error)
return
}
}
public update(id) {
new text[512];
formatex(text, charsmax(text), "UPDATE `hd_new` SET hd_seb = ^"%i^" WHERE username = ^"%s^";", g_maxSpeed[id], name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}
public client_disconnect(id) {
if(!is_user_bot(id)) {
update(id)
}
g_maxSpeed[id] = 0
copy(name[id], charsmax(name[]), "")
}
public plugin_end() {
SQL_FreeHandle(g_SqlTuple)
}
public client_connect(id)
{
g_speed[id] = 0
g_maxGroundSpeed[id] = 0
}
public speedSwitch(id)
{
g_speed[id] = 1 - g_speed[id]
client_print(id, print_chat, "[AMXX] You have %s speedinfo!", g_speed[id] ? "enabled" : "disabled")
return PLUGIN_CONTINUE
}
public showSpeed(id,level,cid)
{
new plname[16]
new players[32], inum, player
new msg[512], len
new i
if(!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
len = format(msg, 511, "<body><pre>%-16.16s %s", "Player Name", "Max Ground Speed")
get_players(players, inum)
for(i = 0; i < inum; i++)
{
player = players[i]
if(g_maxGroundSpeed[player])
{
plname[0] = '^0'
get_user_name(player, plname, 15)
len += format(msg[len], 511-len, "^n%-16.16s %i", plname, g_maxGroundSpeed[player])
}
}
show_motd(id, msg, "Max Ground Speeds")
return PLUGIN_HANDLED
}
public speedTask(param[])
{
new i, j, speed
new msg[128]
for(i = 1; i <= g_maxplayers; i++)
{
if(!is_user_alive(i)) continue
speed = get_speed(i)
if(speed > g_maxSpeed[i])
g_maxSpeed[i] = speed
if(entity_get_int(i, EV_INT_flags) & FL_ONGROUND)
{
if(speed > g_maxGroundSpeed[i])
g_maxGroundSpeed[i] = speed
}
format(msg, 127, "Current Speed: %d ^nMax Speed: %d ^nMax Ground Speed: %d ", speed, g_maxSpeed[i], g_maxGroundSpeed[i])
set_hudmessage(255, 255, 255, 2.0, 0.4, 0, 1.0, 0.13, 0.1, 0.2, 2)
if(g_speed[i])
show_hudmessage(i, msg)
for(j = 1; j <= g_maxplayers; j++)
{
if(!is_user_alive(j) && g_speed[j] && entity_get_int(j, EV_INT_iuser2) == i)
show_hudmessage(j, msg)
}
}
}
public top20ThreadaK(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
{
set_fail_state("[ *HIBA* ] NEM LEHET KAPCSOLODNI AZ ADATBAZISHOZ!")
return
}
else if(FailState == TQUERY_QUERY_FAILED)
{
set_fail_state("[ *HIBA* ] A LEKERDEZES MEGSZAKADT!")
return
}
if(Errcode)
{
log_amx("[ *HIBA* ] PROBLEMA A LEKERDEZESNEL! ( %s )",Error)
return
}
new count
while(SQL_MoreResults(Query))
{
Top[2][count] = SQL_ReadResult(Query, 6)
g_maxSpeed[count] = SQL_ReadResult(Query, 10)
SQL_ReadResult(Query, 3, TopNev[2][count], 31)
count++
SQL_NextRow(Query)
}
return
}
public TopEllenorzes()
{
set_task(0.1, "cmdTopByKills", 9124)
}
public cmdTopByKills()
{
SQL_ThreadQuery(g_SqlTuple, "top20ThreadaK","SELECT * FROM hd_new ORDER BY hd_seb DESC LIMIT 15")
return PLUGIN_HANDLED
}
new const LISTAMENU[][][] = {
{"Játékosnév", "Playername", "Nume jucatar" },
{"Helyezés", "Rank", "Loc" },
{"Ölés", "Kills", "Ucideri" },
{"Dollár", "Dollars", "Dolari" }
}
public Topbhop(id)
{
static menu[3000]
new len
len += formatex(menu[len], charsmax(menu) - len, "<center><table border=^"1^">")
len += formatex(menu[len], charsmax(menu) - len, "<body bgcolor=#000000><table style=^"color: #00FFFF^">")
len += formatex(menu[len], charsmax(menu) - len, "<td>%s</td>", LISTAMENU[0])
len += formatex(menu[len], charsmax(menu) - len, "<td>%s</td>", LISTAMENU[2])
for(new i; i < 20; i++)
{
len += formatex(menu[len], charsmax(menu) - len, "<tr><td>%02d. %s</td>", i+1, TopNev[2][i])
len += formatex(menu[len], charsmax(menu) - len, "<td>%d (%s)</td></tr>", Top[2][i], g_maxSpeed[i])
}
len = formatex(menu[len], charsmax(menu) - len, "</table></center>")
show_motd(id, menu, " Global Offensive | TOP15")
}