/* Тип интеграции со система ранга
2 - Advanced Expirience System
// ДАЛЬШЕ НАСТРОЕК НЕТ!!!
native ar_set_user_addxp(id, addxp);
native ar_add_user_anew(admin, player, anew);
native cmsranks_set_user_addxp(id, value);
native cmsranks_add_user_anew(id, value);
new const ENT_CLASSNAME[] = "raise_the_coin";
new const ENT_MODEL[] = "models/exp.mdl";
new const SND_PICKUP[] = "exp.wav";
new PLUGIN_NAME[] = "raise_the_coin";
new PLUGIN_VERSION[] = "1.0.3";
new PLUGIN_AUTHOR[] = "Baton4ik48";
new PLUGIN_PREFIX[] = "[COIN]";
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true);
g_iMaxPlayers = get_maxplayers();
set_task(2.0, "Task_HudMsg", .flags = "b");
cvar[CVAR_SQL_HOST] = register_cvar("raise_sql_host", "");
cvar[CVAR_SQL_USER] = register_cvar("raise_sql_user", "");
cvar[CVAR_SQL_PASS] = register_cvar("raise_sql_pass", "");
cvar[CVAR_SQL_DB] = register_cvar("raise_sql_name", "");
cvar[CVAR_SQL_TYPLE] = register_cvar("raise_sql_typle", "");
cvar[GLOW] = register_cvar("raise_ent_glow", "1");
cvar[ENT_LIFETIME] = register_cvar("raise_ent_life", "7.0");
cvar[RAISE_DEAD] = register_cvar("raise_dead_exp", "1");
cvar[RAISE_ALL] = register_cvar("raise_all", "10");
cvar[RAISE_EXP] = register_cvar("raise_exp", "15");
cvar[RAISE_BONUS] = register_cvar("raise_bonus", "2");
cvar[RAISE_MONEY] = register_cvar("raise_money", "5000");
cvar[TIME_DELETE] = register_cvar("raise_deletetime", "5");
cvar[CVAR_MESSAGE] = register_cvar("raise_message", "!y[!gCOIN!y] Вы получили вознаграждение [!g[money] $!y] [!g[bonus] БОНУСОВ!y] [!g[exp] ОПЫТА!y]");
get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
formatex(szConfigFile, charsmax(szConfigFile), "%s/%s", szConfigFile, CONFIG_FILE);
server_cmd("exec ^"%s^"", szConfigFile);
set_task(1.0, "mysql_start");
g_Vault = nvault_open("raise_the_coin");
if (g_Vault == INVALID_HANDLE)
set_fail_state("Error nvault");
if (get_pcvar_num(cvar[TIME_DELETE]) > 0)
nvault_prune(g_Vault, 0, get_systime() - (86400 * get_pcvar_num(cvar[TIME_DELETE])));
precache_model(ENT_MODEL);
precache_sound(SND_PICKUP);
public CBasePlayer_Killed_Post(pVictim, pAttacker, pGib)
new Float: vecVelocity[3];
get_entvar(pVictim, var_origin, vecOrigin);
new iEntity = rg_create_entity("info_target", false);
ar_set_user_addxp(pVictim, -get_pcvar_num(cvar[RAISE_DEAD]));
aes_add_player_exp_f(pVictim, -get_pcvar_num(cvar[RAISE_DEAD]));
cmsranks_set_user_addxp(pVictim, -get_pcvar_num(cvar[RAISE_DEAD]));
vecVelocity[0] = random_float(-200.0, 200.0);
vecVelocity[1] = random_float(-200.0, 200.0);
vecVelocity[2] = random_float(1.0, 200.0);
engfunc(EngFunc_SetModel, iEntity, ENT_MODEL);
engfunc(EngFunc_SetSize, iEntity, { -9.0, -7.0, -0.0 }, { 9.0, 7.0, 6.0 });
set_entvar(iEntity, var_framerate, 1.0);
set_entvar(iEntity, var_sequence, 2);
engfunc(EngFunc_AnimationAutomove, iEntity, 100.0);
set_entvar(iEntity, var_origin, vecOrigin);
set_entvar(iEntity, var_classname, ENT_CLASSNAME);
set_entvar(iEntity, var_movetype, MOVETYPE_TOSS);
set_entvar(iEntity, var_solid, SOLID_TRIGGER);
set_entvar(iEntity, var_velocity, vecVelocity);
set_entvar(iEntity, var_nextthink, get_gametime() + get_pcvar_float(cvar[ENT_LIFETIME]));
if (get_pcvar_num(cvar[GLOW]))
set_entvar(iEntity, var_rendermode, kRenderGlow);
set_entvar(iEntity, var_renderamt, 1.0);
set_entvar(iEntity, var_rendercolor, Float: { 0.0, 255.0, 0.0 });
set_entvar(iEntity, var_renderfx, kRenderFxGlowShell);
SetThink(iEntity, "Cashbrick_Think");
SetTouch(iEntity, "Cashbrick_Touch");
public Cashbrick_Think(pEntity)
if (get_entvar(pEntity, var_iuser2))
get_entvar(pEntity, var_renderamt, fRenderAmt);
set_entvar(pEntity, var_renderamt, fRenderAmt - 20.0);
set_entvar(pEntity, var_nextthink, get_gametime() + 0.1);
set_entvar(pEntity, var_flags, FL_KILLME);
set_entvar(pEntity, var_iuser2, 1);
set_entvar(pEntity, var_rendermode, kRenderTransTexture);
set_entvar(pEntity, var_renderamt, 255.0);
set_entvar(pEntity, var_nextthink, get_gametime() + 1.5);
public Cashbrick_Touch(pEntity, pToucher)
if (!is_entity(pEntity) || !is_user_connected(pToucher))
set_hudmessage(0, 255, 0, -1.0, 0.26, 0, 0.1, 2.0, 0.1, 0.1, 3);
show_hudmessage(pToucher, "+1 монета", g_iCoin);
rh_emit_sound2(pToucher, pToucher, CHAN_ITEM, SND_PICKUP, VOL_NORM, ATTN_NORM);
set_entvar(pEntity, var_flags, FL_KILLME);
if (g_iCoin[pToucher] == get_pcvar_num(cvar[RAISE_ALL]))
new iBonus = get_pcvar_num(cvar[RAISE_BONUS]);
new iExp = get_pcvar_num(cvar[RAISE_EXP]);
new iMoney = get_pcvar_num(cvar[RAISE_MONEY]);
new szMessage[192], szBonus[16], szExp[16], szMoney[16];
get_pcvar_string(cvar[CVAR_MESSAGE], szMessage, charsmax(szMessage));
num_to_str(iBonus, szBonus, charsmax(szBonus));
num_to_str(iExp, szExp, charsmax(szExp));
num_to_str(iMoney, szMoney, charsmax(szMoney));
replace_all(szMessage, charsmax(szMessage), "[bonus]", szBonus);
replace_all(szMessage, charsmax(szMessage), "[exp]", szExp);
replace_all(szMessage, charsmax(szMessage), "[money]", szMoney);
UTIL_SayText(pToucher, szMessage);
rg_add_account(pToucher, get_pcvar_num(cvar[RAISE_MONEY]));
ar_set_user_addxp(pToucher, get_pcvar_num(cvar[RAISE_EXP]));
ar_add_user_anew(-1, pToucher, get_pcvar_num(cvar[RAISE_BONUS]));
aes_add_player_exp_f(pToucher, get_pcvar_num(cvar[RAISE_EXP]));
aes_add_player_bonus_f(pToucher, get_pcvar_num(cvar[RAISE_BONUS]));
cmsranks_set_user_addxp(pToucher, get_pcvar_num(cvar[RAISE_EXP]));
cmsranks_add_user_anew(pToucher, get_pcvar_num(cvar[RAISE_BONUS]));
set_hudmessage(200, 200, 200, 0.01, 0.90, 0, 0.1, 1.0, 0.1, 0.1, 4);
for (new id = 1; id < g_iMaxPlayers; id++)
show_hudmessage(id, "Монет до вознаграждения: %i/%i", g_iCoin[id], get_pcvar_num(cvar[RAISE_ALL]));
public client_connect(id)
public client_disconnected(id)
SQL_FreeHandle(sql_typle);
// log_amx("nvault_close");
new host[128], user[64], pass[64], db[64];
new get_type[13], set_type[12];
get_pcvar_string(cvar[CVAR_SQL_HOST], host, charsmax(host));
get_pcvar_string(cvar[CVAR_SQL_USER], user, charsmax(user));
get_pcvar_string(cvar[CVAR_SQL_PASS], pass, charsmax(pass));
get_pcvar_string(cvar[CVAR_SQL_DB], db, charsmax(db));
get_pcvar_string(cvar[CVAR_SQL_TYPLE], set_type, charsmax(set_type));
if(is_module_loaded(set_type) == -1) {
server_print("^r^n%s error: module '%s' not loaded.^r^n%s Add line %s to %s/modules.ini and restart server^r^n", PLUGIN_PREFIX, set_type, PLUGIN_PREFIX, set_type, CONFIG_FILE);
SQL_GetAffinity(get_type, 12);
if (!equali(get_type, set_type))
if (!SQL_SetAffinity(set_type))
log_amx("Failed to set affinity from %s. to %s.", get_type, set_type);
sql_typle = SQL_MakeDbTuple(host, user, pass, db);
new ErrorCode, Handle:SqlConnection = SQL_Connect(sql_typle, ErrorCode, g_Error, charsmax(g_Error));
if (SqlConnection == Empty_Handle)
Queries = SQL_PrepareQuery(SqlConnection, "CREATE TABLE IF NOT EXISTS Raise_the_coin (`steamid` varchar(32), `coin` INT(11), `time_join` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)");
if (!SQL_Execute(Queries))
SQL_QueryError(Queries, g_Error, charsmax(g_Error));
SQL_FreeHandle(SqlConnection);
if (get_pcvar_num(cvar[TIME_DELETE]) > 0)
if(!strcmp("mysql", set_type))
formatex(szTemp, charsmax(szTemp), "DELETE FROM `Raise_the_coin` WHERE `time_join` < FROM_UNIXTIME(%d - (86400 * %d))", get_systime(), get_pcvar_num(cvar[TIME_DELETE]));
SQL_ThreadQuery(sql_typle, "ignore_handle", szTemp);
// log_amx("mysql delete time %s", szTemp);
else if (!strcmp("sqlite", set_type))
formatex(szTemp, charsmax(szTemp), "DELETE FROM `Raise_the_coin` WHERE `time_join` < datetime('now','-%d day');", get_pcvar_num(cvar[TIME_DELETE]));
SQL_ThreadQuery(sql_typle, "ignore_handle", szTemp);
// log_amx("sqlite delete time %s", szTemp);
get_user_authid(id, sAuthID, charsmax(sAuthID));
format(szTemp, charsmax(szTemp), "SELECT * FROM `Raise_the_coin` WHERE (`Raise_the_coin`.`steamid` = '%s')", sAuthID);
SQL_ThreadQuery(sql_typle, "registration_client", szTemp, Data, 1);
public registration_client(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
if (FailState == TQUERY_CONNECT_FAILED)
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error);
else if (FailState == TQUERY_QUERY_FAILED)
log_amx("Load Query failed. [%d] %s", Errcode, Error);
if (SQL_NumResults(Query) < 1)
get_user_authid(id, sAuthID, charsmax(sAuthID));
format(szTemp, charsmax(szTemp), "INSERT INTO `Raise_the_coin` ( `steamid` , `coin`)VALUES ('%s','0')", sAuthID);
SQL_ThreadQuery(sql_typle, "ignore_handle", szTemp);
g_iCoin[id] = SQL_ReadResult(Query, 1);
get_user_authid(id, sAuthID, charsmax(sAuthID));
format(szTemp, charsmax(szTemp), "UPDATE `Raise_the_coin` SET `coin` = '%i' WHERE `Raise_the_coin`.`steamid` = '%s';", g_iCoin[id], sAuthID);
SQL_ThreadQuery(sql_typle, "ignore_handle", szTemp);
public ignore_handle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
get_user_authid(id, szKey, charsmax(szKey));
formatex(szCoin, charsmax(szCoin), "%i", g_iCoin[id]);
nvault_set(g_Vault, szKey, szCoin);
get_user_authid(id, szKey, charsmax(szKey));
nvault_get(g_Vault, szKey, szCoin, charsmax(szCoin));
g_iCoin[id] = str_to_num(szCoin);
UTIL_SayText(id, const szMessage[], any: ...)
if (!iMsgSayText) iMsgSayText = get_user_msgid("SayText");
if (numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while (replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while (replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while (replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
for (new i = 1; i < g_iMaxPlayers; i++)
if (!is_user_connected(i)) continue;
message_begin(MSG_ONE_UNRELIABLE, iMsgSayText, .player = i);
message_begin(MSG_ONE_UNRELIABLE, iMsgSayText, .player = id);