#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <sqlx>
#include <fakemeta>
#define MAXPLAYERS 33 // player id-k lesznek
#define MAXLVL 50 // max szint
#define MAXRANK 11 // maximum rang
#pragma semicolon 1 // mindenhova ahova lehet tegyék ; jelet
#define ChatColor print_team_default // -1 csak szürke a ^3 -2 csak piros, -3 csak kék, print_team_default az alap
#define Tablename "Hlmodra_tabla"
#define OWNER ADMIN_IMMUNITY // OWnerben taroljuk az immunitas jogot
#define ADMIN ADMIN_MAP // adminban a mapvaltas jogot
#define VIP ADMIN_LEVEL_H //vipben meg egy h jogot
//(valamelyik előtt mindenképpen legyen // jel!)
#define RANK_ON // ha latni akarsz rangokat chatben (tulaj admin vip)
//#define RANK_OFF // ha nem akarsz latni rangokat chatben (tulaj admin vip)
//(valamelyik előtt mindenképpen legyen // jel!)
enum _:ePlayer{eXp,eLvl,eRank,eRankCounter,};
new g_ePlayer[ePlayer][MAXPLAYERS], cvarPrefix, gSyncHud, Handle:g_SqlTuple;
enum _:eRanks{eRankName[64], eRankLvl,};
new const cRanks[MAXRANK][eRanks] = {
{"Valaki új", 0}, //rang neve, szint
{"Kezdő", 5},
{"Szereti a tejet", 10},
{"Szereti a cukrot", 15},
{"Cukros bácsi/néni", 20},
{"Loli", 25},
{"Elismert cukros bácsi/néni", 30},
{"Újféle cukor", 35},
{"Gyűjtögető", 40},
{"Gyerekrabló", 45},
{"Rabszolgatartó", MAXLVL} //bővíteni ? MAXLVLt írd át a max szintre és mindenképpen legalulra kerüljön! | a szinteket ötösével adjad meg ha lehet! mert ha nem elfog csúszni a rang.
};
public plugin_init()
{
register_plugin("Hlmodra", "valamiverziosiskell?", "szeretjükatejetazbiztos!");
register_clcmd("say /info", "info_p");
//register_clcmd("say /rs", "statreset_p");
register_event("DeathMsg", "ev_deathmsg", "a");
cvarPrefix = register_cvar("Prefix", "^4[PREFIX] ^3»");
////////////////////////////////////////
register_clcmd("say", "sayhook"); //Maradjon alul!
register_clcmd("say_team", "saythook"); //Maradjon alul!
////////////////////////////////////////
gSyncHud = CreateHudSyncObj();
}
get_cprefix(){
new sPrefix[32];
get_pcvar_string(cvarPrefix, sPrefix, charsmax(sPrefix));
return sPrefix;
}
public info_p(id)
{
new Xp, Xp2;
Xp = 15+g_ePlayer[eLvl][id];
Xp2 = 15*30+g_ePlayer[eLvl][id]*Xp;
client_print_color(id, ChatColor, "%s^1 Rangod: %s | Szinted/Xpd: %d/%d | Következő rang: %s", get_cprefix(), cRanks[g_ePlayer[eRank][id]][eRankName],
g_ePlayer[eXp][id], Xp2, cRanks[g_ePlayer[eRank][id]+1][eRankName]);
}
public client_PreThink(id)
LvlCheck(id);
public LvlCheck(id)
{
if(g_ePlayer[eLvl][id] == MAXLVL || g_ePlayer[eRank][id] == MAXRANK)
return PLUGIN_HANDLED;
new Xp, Xp2, sName[64];
Xp = 15+g_ePlayer[eLvl][id];
Xp2 = 15*30+g_ePlayer[eLvl][id]*Xp;
if(g_ePlayer[eXp][id] >= Xp2)
{
g_ePlayer[eLvl][id]++;
g_ePlayer[eXp][id] = 0;
g_ePlayer[eRankCounter][id]++;
if(g_ePlayer[eRankCounter][id] == 5)
{
g_ePlayer[eRank][id]++;
g_ePlayer[eRankCounter][id] = 0;
}
get_user_name(id, sName, charsmax(sName));
client_print_color(0, ChatColor, "^4%s^3 %s^1 szintet lépett, szintje: %d.", get_cprefix(), sName, g_ePlayer[eLvl][id]);
}
return PLUGIN_HANDLED;
}
public ev_deathmsg()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new iHs = read_data(3);
new iRnd, sName[64];
if(!iKiller || !iVictim || iVictim == iKiller)
return PLUGIN_HANDLED;
get_user_name(iVictim, sName, charsmax(sName));
if(iHs)
{
iRnd = random_num(5, 10);
g_ePlayer[eXp][iKiller] += iRnd;
client_print_color(iKiller, ChatColor, "%s^1 Kaptál^3 %d^1 Xp-t^3 %s^1 fejbelövéséért!", get_cprefix(), iRnd, sName);
}
else
{
iRnd = random_num(1, 5);
g_ePlayer[eXp][iKiller] += iRnd;
client_print_color(iKiller, ChatColor, "%s^1 Kaptál^3 %d^1 Xp-t^3 %s^1 megöléséért!", get_cprefix(), iRnd, sName);
}
return PLUGIN_HANDLED;
}
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;
new iTeam, iColor;
iTeam = get_user_team(id);
switch(iTeam) //itt lehet elvalasztani hogy ha ctk irnak a tk kéken lássák, és fordítva, ha specek akkor szürkén látják.
{
case CS_TEAM_CT: iColor = -3; //kék
case CS_TEAM_T: iColor = -2;//piros
case CS_TEAM_SPECTATOR: iColor = -1;//szürke
}
format(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^1%s", sDeath);
#if defined RANK_ON
if(get_user_flags(id) & OWNER)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Tulajdonos^3]^1~");
else if(get_user_flags(id) & ADMIN)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Admin^3]^1~");
else if(get_user_flags(id) & VIP)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4VIP^3]^1~");
else
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Játékos^3]^1~");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Szint: %d^3]~", g_ePlayer[eLvl][id]);
#endif
#if defined RANK_OFF
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Szint: %d^3]~", g_ePlayer[eLvl][id]);
#endif
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_print_color(i, iColor, 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], iColor;
iTeam = get_user_team(id, sTeam, charsmax(sTeam));
switch(iTeam) //itt lehet elvalasztani hogy ha ctk irnak a tk kéken lássák, és fordítva, ha specek akkor szürkén látják!
{
case CS_TEAM_CT: {sTeam = "Terrorelhárító"; iColor = -3;} //kék
case CS_TEAM_T: {sTeam = "Terrorista"; iColor = -2;} //piros
case CS_TEAM_SPECTATOR: {sTeam = "Nézelődő"; iColor = -1;} //szürke
}
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 defined RANK_ON
if(get_user_flags(id) & OWNER)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Tulajdonos^3]^1~");
else if(get_user_flags(id) & ADMIN)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Admin^3]^1~");
else if(get_user_flags(id) & VIP)
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4VIP^3]^1~");
else
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Játékos^3]^1~");
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Szint: %d^3]^1~", g_ePlayer[eLvl][id]);
#endif
#if defined RANK_OFF
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "~^3[^4Szint: %d^3]~", g_ePlayer[eLvl][id]);
#endif
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_print_color(i, iColor, sMessage);
else if(cs_get_user_team(id) == CS_TEAM_T)
client_print_color(i, iColor, sMessage);
else
client_print_color(i, iColor, sMessage);
}
return PLUGIN_HANDLED;
}
public hudshow_p(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
new sText[256], iLen, idT;
new Target = pev(id, pev_iuser1) == 4 ? pev(id, pev_iuser2) : id;
idT = is_user_alive(id) ? id:Target;
new Xp, Xp2;
Xp = 15+g_ePlayer[eLvl][idT];
Xp2 = 15*30+g_ePlayer[eLvl][idT]*Xp;
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "Szint: [ %d --> %d ]^n", g_ePlayer[eLvl][idT], MAXLVL);
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "Rang: -- %s --^n", cRanks[g_ePlayer[eRank][idT]][eRankName]);
iLen += formatex(sText[iLen], charsmax(sText)-iLen, "XP: [ %d --> %d ]", g_ePlayer[eXp][idT], Xp2);
set_hudmessage(0, 255, 0, -1.0, 0.85, 0, 6.0, 1.0, 0.1, 0.2, -1);
ShowSyncHudMsg(id, gSyncHud, "%s", sText);
set_task(1.0, "hudshow_p", id);
return PLUGIN_HANDLED;
}
public client_authorized(id)
{
if(is_user_bot(id))
return;
set_task(5.0, "hudshow_p", id);
g_ePlayer[eXp][id] = 0;
g_ePlayer[eLvl][id] = 0;
g_ePlayer[eRank][id] = 0;
g_ePlayer[eRankCounter][id] = 0;
SelectDataTable(id);
}
public client_disconnected(id)
{
if(is_user_bot(id))
return;
TableUpdate(id);
if(task_exists(id))
remove_task(id);
}
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, "`qSzint` int(11) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qXp` int(11) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qRank` int(11) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qRankCounter` 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, "qSzint = ^"%i^",", g_ePlayer[eLvl][id]);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qXp = ^"%i^",", g_ePlayer[eXp][id]);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qRank = ^"%i^",", g_ePlayer[eRank][id]);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qRankCounter = ^"%i^" WHERE `SteamId` = ^"%s^";", g_ePlayer[eRankCounter][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[eLvl][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qSzint"));
g_ePlayer[eXp][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qXp"));
g_ePlayer[eRank][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qRank"));
g_ePlayer[eRankCounter][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qRankCounter"));
}
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;
}
}