#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <sqlx>
#include <cstrike>
#define MAXPLAYERS 33
#define MAXRANK 5 //maximum rang
#define Tablename "tablaaaaaa" //tabla neve
#define OWNER ADMIN_IMMUNITY
#define ADMIN ADMIN_MAP
#define VIP ADMIN_LEVEL_H
new const cPrefix[] = "PREFIX";
enum _:eRank{eRankNum, eRankName[64], eRankTime,};
new const cRanks[MAXRANK][eRank] ={
{0, "Újonc", 0},//(rang száma), (rang neve), (rang ideje mpben. [30 perc = 1800mp | 60 perc = 3600mp] ..stb)
{1, "Valamit tud", 3600},//60perc
{2, "Kiezte", 7200},//120perc
{3, "Profi", 14400},//240perc
{4, "Veterán", 28800}//480perc
}
new SayText;
enum _:ePlayer{eTime, eRanks,};
new g_ePlayer[ePlayer][MAXPLAYERS];
new Handle:g_SqlTuple;
public plugin_init(){
register_plugin("TimeRank", "1.0", "asdasd!!");
register_clcmd("say /ji", "time_p");//jatek ido chatre jeleniti meg
register_clcmd("say /rangom", "rank_p");//rangod
register_clcmd("say /rangok", "ranks_p");//rangok
SayText = get_user_msgid("SayText");
register_clcmd("say", "sayhook");
register_clcmd("say_team", "saythook");
register_forward (FM_PlayerPreThink, "fm_prethink");
}
public ranks_p(id)
{
new sText[1024], iTimes[4], iRow[8];
format(sText, charsmax(sText), "\r%s \d| \w Ranglista", cPrefix);
new iMenu = menu_create(sText, "ranks_p_h");
for(new i = 1; i < sizeof(cRanks); i++)
{
iTimes[0] = cRanks[i][eRankTime];
iTimes[1] = iTimes[0] / 60;
iTimes[2] = iTimes[1] / 60;
iTimes[3] = iTimes[2] / 24;
iTimes[0] = iTimes[0] - iTimes[1] * 60;
iTimes[1] = iTimes[1] - iTimes[2] * 60;
iTimes[2] = iTimes[2] - iTimes[3] * 24;
num_to_str(i, iRow, charsmax(iRow));
format(sText, charsmax(sText), "\y%d. \w%s\w -\r %d\w nap\r %d\w óra\r %d\w perc\r %d\w mp", i, cRanks[i][eRankName], iTimes[3], iTimes[2], iTimes[1], iTimes[0]);
menu_additem(iMenu, sText, iRow);
}
menu_setprop(iMenu, MPROP_BACKNAME, "\wVissza");
menu_setprop(iMenu, MPROP_NEXTNAME, "\wKövetkező");
menu_setprop(iMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, iMenu, 0);
}
public ranks_p_h(id, iMenu, iItem){if(iItem == MENU_EXIT){menu_destroy(iMenu);return;}}
public fm_prethink(id)
{
if(is_user_connected(id))
CheckRank_p(id);
}
public CheckRank_p(id)
{
if(g_ePlayer[eRanks][id] == MAXRANK)
return FMRES_IGNORED;
new sName[64], iTime;
iTime = g_ePlayer[eTime][id] + get_user_time(id);
get_user_name(id, sName, charsmax(sName));
if(iTime >= cRanks[g_ePlayer[eRanks][id]+1][eRankTime])
{
g_ePlayer[eRanks][id]++;
client_printcolor(id, "^4[%s]^3 %s^4 %s^1 rangba lépett!", cPrefix, sName, cRanks[g_ePlayer[eRanks][id]][eRankName]);
return FMRES_SUPERCEDE;
}
return FMRES_SUPERCEDE;
}
public time_p(id)
{
new iTimes[4];
iTimes[0] = g_ePlayer[eTime][id] + get_user_time(id);
iTimes[1] = iTimes[0] / 60;
iTimes[2] = iTimes[1] / 60;
iTimes[3] = iTimes[2] / 24;
iTimes[0] = iTimes[0] - iTimes[1] * 60;
iTimes[1] = iTimes[1] - iTimes[2] * 60;
iTimes[2] = iTimes[2] - iTimes[3] * 24;
client_printcolor(id, "^4[%s]^1 A szerveren töltött időd:^3 %d^1 nap,^3 %d^1 óra,^3 %d^1 perc,^3 %d^1 másodperc.", cPrefix, iTimes[3], iTimes[2], iTimes[1], iTimes[0]);
}
public rank_p(id)
{
new sMax[32];
format(sMax, charsmax(sMax), g_ePlayer[eRanks][id] == MAXRANK ? "Nincs következő rang":"%s", cRanks[g_ePlayer[eRanks][id]+1][eRankName]);
client_printcolor(id, "^4[%s]^1 Rangod:^3 %s^4 |^1 Következő rangod:^3 %s", cPrefix, cRanks[g_ePlayer[eRanks][id]][eRankName], sMax);
}
public sayhook(id)
{
new sMessage[512], sText[128], sDeath[16], iLen, sName[64];
read_args(sMessage, charsmax(sMessage));
remove_quotes(sMessage);
if(strlen(sMessage) == 0 || sMessage[0] == '/' || sMessage[0] == '@')
return PLUGIN_HANDLED;
format(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^1%s", sDeath);
if(get_user_flags(id) & OWNER)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Tulajdonos]");
else if(get_user_flags(id) & ADMIN)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Admin^3]");
else if(get_user_flags(id) & VIP)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[4VIP^3]");
else
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Játékos^3]");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[%s]", cRanks[g_ePlayer[eRanks][id]][eRankName]);
get_user_name(id, sName, charsmax(sName));
format(sMessage, charsmax(sMessage), "%s ^1%s ^3»^3 %s", sText, sName, sMessage);
for(new i; i < get_maxplayers(); i++)
{
if(!is_user_connected(i))
continue;
client_printcolor(i, sMessage);
}
return PLUGIN_HANDLED;
}
public saythook(id)
{
new sMessage[512], sText[128], sDeath[16], iLen, sName[64];
read_args(sMessage, charsmax(sMessage));
remove_quotes(sMessage);
if(strlen(sMessage) == 0 || sMessage[0] == '/' || sMessage[0] == '@')
return PLUGIN_HANDLED;
new iTeam, sTeam[32];
iTeam = get_user_team(id, sTeam, charsmax(sTeam));
switch(iTeam)
{
case CS_TEAM_CT: {sTeam = "Terrorelhárító";}
case CS_TEAM_T: {sTeam = "Terrorista";}
case CS_TEAM_SPECTATOR: {sTeam = "Nézelődő";}
}
format(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3(%s)", sTeam);
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^1%s", sDeath);
if(get_user_flags(id) & OWNER)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Tulajdonos]");
else if(get_user_flags(id) & ADMIN)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Admin^3]");
else if(get_user_flags(id) & VIP)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[4VIP^3]");
else
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[Játékos^3]");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^4[%s]", cRanks[g_ePlayer[eRanks][id]][eRankName]);
get_user_name(id, sName, charsmax(sName));
format(sMessage, charsmax(sMessage), "%s ^1%s ^3»^3 %s", sText, sName, sMessage);
for(new i; i < get_maxplayers(); i++)
{
if(!is_user_connected(i))
continue;
if(cs_get_user_team(id) == CS_TEAM_CT)
client_printcolor(i, sMessage);
else if(cs_get_user_team(id) == CS_TEAM_T)
client_printcolor(i,sMessage);
else
client_printcolor(i, sMessage);
}
return PLUGIN_HANDLED;
}
public client_authorized(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
g_ePlayer[eTime][id] = 0;
g_ePlayer[eRanks][id] = 0;
SelectDataTable(id);
return PLUGIN_HANDLED;
}
public client_disconnect(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
TableUpdate(id);
return PLUGIN_HANDLED;
}
public plugin_cfg()
{
//Kiszolgáló | Felhasználó | Jelszó | Adatbázis
g_SqlTuple = SQL_MakeDbTuple("", "", "", "");
CreateTable();
}
public CreateTable(){
new iLen;
static sQuery[2048];
iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `%s` ", Tablename);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`SteamId` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qTime` int(11) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qRanks` int(11) NOT NULL)");
SQL_ThreadQuery(g_SqlTuple, "TableCreateThread", sQuery);
}
public TableUpdate(id)
{
static sQuery[2048];
new iLen, sSteamID[64];
get_user_authid(id, sSteamID, charsmax(sSteamID));
iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `%s` SET ", Tablename);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qTime = ^"%i^",", g_ePlayer[eTime][id] + get_user_time(id));
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qRanks = ^"%i^" WHERE `SteamId` = ^"%s^";", g_ePlayer[eRanks][id], sSteamID);
SQL_ThreadQuery(g_SqlTuple, "QuerySetDataTable", sQuery);
}
public TableCreateThread(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime)
{
if(iFailState == TQUERY_CONNECT_FAILED)
set_fail_state("[Create] Nem lehet csatlakozni az adatbazishoz!");
else if(iFailState == TQUERY_QUERY_FAILED)
set_fail_state("[Create] Lekerdezesi hiba");
if(iErrcode)
log_amx("[Create] Hiba:**!! %s !!**", sError);
}
public TableInsert(id)
{
static sQuery[2048], sSteamID[64];
get_user_authid(id, sSteamID, charsmax(sSteamID));
formatex(sQuery, charsmax(sQuery), "INSERT INTO `%s` (`SteamId`) VALUES (^"%s^");", Tablename, sSteamID);
SQL_ThreadQuery(g_SqlTuple, "QuerySetDataTable", sQuery);
}
public SelectDataTable(id)
{
static sQuery[2048];
new sData[1], sSteamID[64];
sData[0] = id;
get_user_authid(id, sSteamID, charsmax(sSteamID));
formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE SteamId = ^"%s^";", Tablename, sSteamID);
SQL_ThreadQuery(g_SqlTuple, "QuerySelectDataTable", sQuery, sData, 1);
}
public QuerySelectDataTable(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("[Insert] Hiba:**!! %s !!**", sError);
return;
}
else
{
new id = sData[0];
if(SQL_NumRows(sQuery) > 0)
{
g_ePlayer[eTime][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qTime"));
g_ePlayer[eRanks][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qRanks"));
}
else
TableInsert(id);
}
}
public QuerySetDataTable(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("[SetData] Hiba:**!! %s !!**", sError);
return;
}
}
stock client_printcolor(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[256];
vformat(msg, charsmax(msg), input, 3);
replace_all(msg, charsmax(msg), "!g", "^4");
replace_all(msg, charsmax(msg), "!y", "^1");
replace_all(msg, charsmax(msg), "!t", "^3");
if (id) players[0] = id; else get_players(players, count, "ch");{
for ( new i = 0; i < count; i++ )
{
if ( is_user_connected(players[i]) )
{
message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}