#include <amxmodx>
#include <cstrike>
#include <engine>
#include <hamsandwich>
#include <colorchat>
#include <nvault_util>
#define TAG "Szint mod"
#define ADMIN_LEVEL ADMIN_KICK
#define MaxLevels 100
#define TopNumber 15
#define MAX_PLAYERS 32
new g_pCvar_Kill, g_pCvar_Headshot, g_pCvar_Win
new g_pCvar_Suicide, g_pCvar_Dying, g_pCvar_Logadmin
new g_iHeadshot, g_iKill, g_iDying
new g_iWin, g_iSuicide, g_iLogadmin
new g_iLevel[MAX_PLAYERS +1], g_iPoints[MAX_PLAYERS +1], g_iName[MAX_PLAYERS +1]
new g_szLevels[MaxLevels], g_szLevelNames[MaxLevels][MAX_PLAYERS +1]
new g_szKnife[MaxLevels][2][64], bool:g_bGiveRemove
new const SPECIAL_CHAR[2] = "-"
new g_iVault
new g_szTopMotd[1024]
//function by fysiks
public plugin_precache( )
{
new cfgdir[64]
get_localinfo("amxx_configsdir", cfgdir, charsmax(cfgdir))
format(cfgdir, charsmax(cfgdir), "%s/levelmod.ini", cfgdir)
new file = fopen(cfgdir, "rt");
if( file )
{
new i = 0;
new szLevel[5], sfLineData[128];
while( !feof(file) && i < MaxLevels )
{
fgets(file, sfLineData, charsmax(sfLineData));
if( !sfLineData[0] || sfLineData[0] == ';' || sfLineData[0] == '/' && sfLineData[1] == '/' ) continue;
parse(sfLineData, szLevel, charsmax(szLevel), g_szLevelNames[i], charsmax(g_szLevelNames[]), g_szKnife[i][0], charsmax(g_szKnife[][]), g_szKnife[i][1], charsmax(g_szKnife[][]));
g_szLevels[i] = str_to_num(szLevel);
precache_model(g_szKnife[i][0]);
precache_model(g_szKnife[i][1]);
i++;
}
fclose(file);
}
else
{
set_fail_state("amxmodx/configs/levelmod.ini doesnt exist. Stops plugin.");
}
}
public plugin_cfg( )
{
g_iHeadshot = get_pcvar_num(g_pCvar_Headshot)
g_iKill = get_pcvar_num(g_pCvar_Kill)
g_iSuicide = get_pcvar_num(g_pCvar_Suicide)
g_iWin = get_pcvar_num(g_pCvar_Win)
g_iDying = get_pcvar_num(g_pCvar_Dying)
g_iLogadmin = get_pcvar_num(g_pCvar_Logadmin)
}
public plugin_init()
{
register_plugin("Szint plugin", "1.0", "SnusMumrikeN")
register_clcmd("say", "Cmd_Say")
register_clcmd("say_team", "Cmd_Say")
register_clcmd( "PointsAmount", "PointsAction" )
g_pCvar_Kill = register_cvar("cvar_kill", "2") // alap +2
g_pCvar_Headshot = register_cvar("cvar_headshot", "4") // alap +4
g_pCvar_Win = register_cvar("cvar_win", "3") // alap +3
g_pCvar_Dying = register_cvar("cvar_dying", "2") // alap -2
g_pCvar_Suicide = register_cvar("cvar_suicide", "3") // alap -3
g_pCvar_Logadmin = register_cvar("cvar_logadmin", "1") // alap 0
register_event( "DeathMsg", "Event_DeathMsg", "a" );
register_message(get_user_msgid("TextMsg") ,"Message_Win")
RegisterHam( Ham_Item_Deploy, "weapon_knife", "Ham_KnifeDeploy", 1 );
g_iVault = nvault_open("levelmod")
FormatTop(TopNumber)
set_task( 300.0, "Task_Advertise", .flags="b" );
}
public plugin_end()
nvault_close(g_iVault)
public Cmd_Say(id)
{
new args[101], arg1[10], arg2[64]
read_args(args, charsmax(args))
remove_quotes(args)
parse(args, arg1, charsmax(args), arg2, charsmax(arg2))
if(equali(arg1, "/szint" ) || equali(arg1, "/lvl" ))
{
new iPlayer = cmd_target(id, arg2, 0)
if(!arg2[0] || !iPlayer)
{
if( g_szLevels[g_iLevel[id]+1] != 0)
{
ColorChat(id, GREY, "^4[%s]^1 Következő szint:^3 %i ^1[^3%s^1] | Ennyi pont kell a következő szinthez:^3 %i", TAG, g_iLevel[id]+1, g_szLevelNames[g_iLevel[id]+1], g_szLevels[g_iLevel[id]+1] - g_szLevels[g_iLevel[id]]);
ColorChat(id, GREY, "^4[%s]^1 Jelenlegi ponjaid: ^3 %i^1 | Jelenlegi szinted:^3 %i ^1[^3%s^1]", TAG, g_iPoints[ id ], g_iLevel[id], g_szLevelNames[g_iLevel[id]]);
}
else
{
ColorChat(id, GREY, "^4[%s]^1 Jelenlegi pontjaid: ^3 %i^1 | Jelenlegi szinted:^3 %i ^1[^3%s^1] (^4TELJES SZINT^1)", TAG, g_iPoints[ id ], g_iLevel[id], g_szLevelNames[g_iLevel[id]]);
}
}
else
{
new iName[32]
get_user_name(iPlayer, iName, 31)
if( g_szLevels[g_iLevel[iPlayer]+1] != 0)
{
ColorChat(id, GREY, "^4[%s]^1 Következő szint:^3 %i ^1[^3%s^1] | Ennyi pont kell a következő szinthez:^3 %i", TAG, g_iLevel[iPlayer]+1, g_szLevelNames[g_iLevel[iPlayer]+1], g_szLevels[g_iLevel[iPlayer]+1] - g_szLevels[g_iLevel[iPlayer]]);
ColorChat(id, GREY, "^4[%s]^3 %s^1 Kapott^3 %i^1 pontot | Szint:^3 %i ^1[^3%s^1]", TAG, iName, g_iPoints[ iPlayer ], g_iLevel[iPlayer], g_szLevelNames[g_iLevel[iPlayer]]);
}
else
{
ColorChat(id, GREY, "^4[%s]^3 %s^1 kapott^3 %i^1 pontot | Jelenlegi szintje:^3 %i ^1[^3%s^1] (^4TELJES SZINT^1)", TAG, iName, g_iPoints[ iPlayer ], g_iLevel[iPlayer], g_szLevelNames[g_iLevel[iPlayer]]);
}
}
}
else if(equali(arg1, "/top"))
{
show_motd( id, g_szTopMotd, "Top Pont lista" )
}
else if(equali(arg1, "/pontadas"))
{
Playerlist( id )
}
}
Playerlist( id )
{
if(get_user_flags( id ) & ADMIN_LEVEL_A )
{
new Playermenu, Temp[64]
formatex(Temp, charsmax(Temp), "\w[\r%s\w]\y \rAddolás menü^n\wVálaszdi ki a játékost", TAG)
Playermenu = menu_create(Temp, "PlayerlistHandler");
new players[32], pnum, tempid;
new szName[32], szTempid[10];
formatex(Temp, charsmax(Temp), "\y[\r%s\y]^n", g_bGiveRemove ? "ELVÉTEL" : "ADÁS");
menu_additem(Playermenu, Temp, "0")
get_players(players, pnum, "ch");
for( new i; i<pnum; i++ )
{
tempid = players[i];
get_user_name(tempid, szName, charsmax(szName));
num_to_str(tempid, szTempid, charsmax(szTempid));
menu_additem(Playermenu, szName, szTempid, 0);
}
menu_display(id, Playermenu);
}
return PLUGIN_HANDLED
}
public PlayerlistHandler(id, menu, item) {
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], szName[32];
new access, callback;
menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
new key = str_to_num(data);
if( key == 0 )
{
if((g_bGiveRemove = !g_bGiveRemove))
{
g_bGiveRemove = true
menu_destroy(menu);
Playerlist( id )
return PLUGIN_HANDLED
}
else
{
g_bGiveRemove = false
menu_destroy(menu);
Playerlist( id )
return PLUGIN_HANDLED
}
}
g_iName[id] = key
client_cmd(id, "messagemode PointsAmount");
client_cmd(id, "spk fvox/blip");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public PointsAction(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED
new iAmount[50]
read_argv(1,iAmount,49)
new szName[2][32]
get_user_name(id, szName[0], 31)
get_user_name(g_iName[id], szName[1], 31)
if( str_to_num(iAmount) >= 9999999 )
{
ColorChat(id, GREY, "^4[%s]^1 ^3 %s^1 pontot", TAG, g_bGiveRemove ? "elvettek tőled" : "kaptál");
return PLUGIN_HANDLED;
}
if(!is_user_connected(g_iName[id]))
{
ColorChat(id, GREY, "^4[%s]^1 Felhasználó^3 %s^1 nem online", TAG, szName[1]);
return PLUGIN_HANDLED
}
if( g_iLogadmin == 1 )
{
new message[200], Time[64];
get_time("%c", Time, charsmax(Time));
format ( message, charsmax(message), "[%s] %s %s %s %i points", Time, szName[0], g_bGiveRemove ? "elvett" : "adott", szName[1], str_to_num(iAmount));
write_file ( "addons/amxmodx/logs/levelmod.txt", message )
}
ColorChat(0, GREY, "^4[%s]^3 %s^1 %s^3 %s^4 %i^1 pontot", TAG, szName[0], g_bGiveRemove ? "elvett" : "adott", szName[1], str_to_num(iAmount));
set_hudmessage(255, 0, 0, -1.0, 0.1, 0, 1.0, 7.0, 0.1, 1.0)
show_hudmessage( 0, "[%s] %s %s %s %i pontot", TAG, szName[0], g_bGiveRemove ? "elvett" : "adott", szName[1], str_to_num(iAmount));
client_cmd(0, "spk buttons/bell1");
if( g_bGiveRemove )
g_iPoints[g_iName[id]] -= str_to_num(iAmount)
else
g_iPoints[g_iName[id]] += str_to_num(iAmount)
CheckLevel(g_iName[id])
return PLUGIN_HANDLED
}
CheckLevel(id)
{
if( g_iPoints[id] >= g_szLevels[g_iLevel[id]+1] && g_szLevels[g_iLevel[id]+1] != 0)
{
g_iLevel[id]++;
if( g_iPoints[id] >= g_szLevels[g_iLevel[id]+1] && g_szLevels[g_iLevel[id]+1] != 0)
{
CheckLevel(id)
return PLUGIN_HANDLED
}
new g_iName[ 32 ]
get_user_name( id, g_iName, charsmax(g_iName) );
ColorChat ( 0, GREY, "^4[%s]^1 Gratulálunk ^3 %s^1 elérte a ^3 %i^1 szintet! [^3%s^1]", TAG, g_iName, g_iLevel[id], g_szLevelNames[g_iLevel[id]])
client_cmd(0, "spk events/task_complete.wav");
if( is_user_alive( id ) && get_user_weapon( id ) == CSW_KNIFE )
{
entity_set_string( id, EV_SZ_viewmodel, g_szKnife[g_iLevel[id]][0] );
entity_set_string( id, EV_SZ_weaponmodel, g_szKnife[g_iLevel[id]][1] );
}
}
else if( g_iLevel[id] != 0 && g_iPoints[id] <= g_szLevels[g_iLevel[id]-1])
{
g_iLevel[id]--;
if( g_iLevel[id] != 0 && g_iPoints[id] <= g_szLevels[g_iLevel[id]-1] )
{
CheckLevel(id)
return PLUGIN_HANDLED
}
if( is_user_alive( id ) && get_user_weapon( id ) == CSW_KNIFE )
{
entity_set_string( id, EV_SZ_viewmodel, g_szKnife[g_iLevel[id]][0] );
entity_set_string( id, EV_SZ_weaponmodel, g_szKnife[g_iLevel[id]][1] );
}
ColorChat ( id, GREY, "^4[%s]^1 Szinted csökkent. Jelenlegi szinted^3 %i^1 [^3%s^1]", TAG, g_iLevel[id], g_szLevelNames[g_iLevel[id]])
}
return PLUGIN_HANDLED
}
public Event_DeathMsg()
{
new g_iKiller = read_data(1);
new g_iVictim = read_data(2);
if( 1 <= g_iKiller <= get_maxplayers() && cs_get_user_team( g_iVictim ) != cs_get_user_team( g_iKiller )
&& is_user_connected( g_iKiller ))
{
new g_iNames[2][32]
get_user_name(g_iKiller, g_iNames[0], 31)
get_user_name(g_iVictim, g_iNames[1], 31)
if( read_data( 3 ) && g_iHeadshot != 0 )
{
g_iPoints[ g_iKiller ] += g_iHeadshot
ColorChat ( g_iKiller, GREY, "^4[%s]^1 Kaptál ^3 %i^1 pontot mert megölted ^3 %s^1 [^3FEJLÖVÉS^1]", TAG, g_iHeadshot, g_iNames[1])
}
else if( g_iKill != 0 )
{
g_iPoints[ g_iKiller ] += g_iKill
ColorChat ( g_iKiller, GREY, "^4[%s]^1 Kaptál ^3 %i^1 pontot mert megölted ^3 %s", TAG, g_iKill, g_iNames[1])
}
else if( g_iDying != 0 )
{
g_iPoints[ g_iVictim ] -= g_iDying
ColorChat ( g_iVictim, GREY, "^4[%s]^1 Elvesztettél ^3 %i^1 pontot mert megölt téged^3 %s", TAG, g_iDying, g_iNames[0])
}
}
else if( g_iSuicide != 0 && g_iVictim == g_iKiller)
{
g_iPoints[ g_iKiller ] -= g_iSuicide
ColorChat ( g_iKiller, GREY, "^4[%s]^1 Elvesztettél ^3 %i^1 pontot mert meghaltál!", TAG, g_iSuicide)
}
CheckLevel(g_iKiller)
CheckLevel(g_iVictim)
}
public Ham_KnifeDeploy(iWeapon)
{
new id = get_pdata_cbase(iWeapon, 41, 4)
if(is_user_alive(id))
{
entity_set_string( id, EV_SZ_viewmodel, g_szKnife[g_iLevel[id]][0] );
entity_set_string( id, EV_SZ_weaponmodel, g_szKnife[g_iLevel[id]][1] );
}
}
public Message_Win(const MsgId, const MsgDest, const MsgEntity)
{
if( g_iWin == 0 )
return PLUGIN_HANDLED
new Flags[32], iPlayers[32], iNum, id
new Message[ 16 ];
get_msg_arg_string( 2, Message, charsmax( Message ) );
switch(Message[1])
{
case 'T':
{
copy(Flags, charsmax(Flags), "TERRORIST")
}
case 'C':
{
copy(Flags, charsmax(Flags), "CT")
}
}
get_players( iPlayers, iNum, "ae", Flags);
for( new i; i < iNum; i++ )
{
id = iPlayers[i];
g_iPoints[ id ] += g_iWin
ColorChat ( id, GREY, "^4[%s]^1 Kaptál^3 %i^1 pontot mert megnyertétek a kört", TAG, g_iWin)
CheckLevel(id)
}
return PLUGIN_HANDLED
}
public Task_Advertise()
{
ColorChat(0, GREY, "^4[%s]^1 A szerveren szint rendszer fut!^3 ^1 magyarosította: ^3loleee", TAG);
}
stock FormatTop(iNum)
{
if(g_iVault == INVALID_HANDLE)
set_fail_state("nVault returned invalid handle")
enum _:VaultData
{
VD_Key[33],
VD_Value,
VD_szName[33]
};
new Vault2 = nvault_util_open("levelmod")
new iSize = nvault_util_count(Vault2)
new Array:entries = ArrayCreate(VaultData);
new sizeEntries
new data[VaultData], value[256], data2[VaultData]
for(new i = 0, pos, timestamp; i < iSize; i++)
{
pos = nvault_util_read(Vault2, pos, data[VD_Key], charsmax(data[VD_Key]), value, charsmax(value), timestamp);
if(contain(data[VD_Key], SPECIAL_CHAR) != -1)
continue;
else
{
formatex(data[VD_szName], charsmax(data[VD_szName]), "%s%s", data[VD_Key], SPECIAL_CHAR)
nvault_get(g_iVault, data[VD_szName], data[VD_szName], charsmax(data[VD_szName]))
}
data[VD_Value] = str_to_num(value);
if(sizeEntries == 0)
{
ArrayPushArray(entries, data);
sizeEntries++;
continue;
}
else
{
for(timestamp = 0; timestamp <= sizeEntries; timestamp++)
{
if(timestamp == sizeEntries)
{
if(sizeEntries < iNum)
{
ArrayPushArray(entries, data);
sizeEntries++;
}
break;
}
ArrayGetArray(entries, timestamp, data2);
if(data[VD_Value] >= data2[VD_Value])
{
ArrayInsertArrayBefore(entries, timestamp, data);
if(sizeEntries < iNum)
{
sizeEntries++;
}
else
{
ArrayDeleteItem(entries, sizeEntries);
}
break;
}
}
}
}
new iLen
new len = charsmax(g_szTopMotd)
iLen = formatex(g_szTopMotd, len, "<STYLE>body{background:#212121;color:#d1d1d1;font-family:Arial}table{width:100%%;font-size:28px}</STYLE><table cellpadding=1 cellspacing=1 border=0>")
iLen += formatex(g_szTopMotd[iLen], len - iLen, "<tr bgcolor=#333333><th width=1%%><align=left font color=white> %s <th width=5%%> %-22.22s <th width=5%%> %s", "#", "N�v", "Pontok")
new i
for(i = 0; i < sizeEntries; i++)
{
ArrayGetArray(entries, i, data);
data[VD_Key][32] = 0;
data[VD_szName][32] = 0
replace_all(data[VD_szName], charsmax(data[VD_szName]), "<", "<")
replace_all(data[VD_szName], charsmax(data[VD_szName]), ">", ">")
iLen += formatex(g_szTopMotd[iLen], len - iLen, "<tr align=left%s><td align=left><font color=white> %d. <td> %-22.22s <td> %d", " bgcolor=#2b5b95", (i+1), data[VD_szName], data[VD_Value])
}
ArrayDestroy(entries);
iLen += formatex(g_szTopMotd[iLen], len - iLen, "</table></body>")
}
public client_putinserver(id)
{
if( is_user_hltv(id) || is_user_bot(id) )
return;
Load(id)
}
public client_disconnect(id)
{
if( is_user_hltv(id) || is_user_bot(id) )
return;
Save(id)
}
stock Save(id)
{
if(g_iVault == INVALID_HANDLE)
set_fail_state("nVault returned invalid handle")
new szAuthId[35];
get_user_authid(id, szAuthId, charsmax(szAuthId))
new szName[32];
get_user_name(id, szName, 31)
new szData[256];
formatex(szData, charsmax(szData), "%i %i", g_iPoints[id], g_iLevel[id]);
nvault_remove(g_iVault, szAuthId)
nvault_set(g_iVault, szAuthId, szData)
format(szAuthId, charsmax(szAuthId), "%s%s", szAuthId, SPECIAL_CHAR)
nvault_remove(g_iVault, szAuthId)
nvault_set(g_iVault, szAuthId, szName)
}
stock Load(id)
{
if(g_iVault == INVALID_HANDLE)
set_fail_state("nVault returned invalid handle")
new szSavedName[32]
new szName[32]; get_user_name(id, szName, charsmax(szName))
new szAuthId[33]; get_user_authid(id, szAuthId, charsmax(szAuthId))
new szData[256], iTimeStamp
if( !nvault_lookup(g_iVault, szAuthId, szData, charsmax(szData), iTimeStamp) )
{
nvault_set(g_iVault, szAuthId, "0")
format(szAuthId, charsmax(szAuthId), "%s%s", szAuthId, SPECIAL_CHAR)
nvault_set(g_iVault, szAuthId, szName)
return 0
}
ParseLoadData(id, szData);
format(szAuthId, charsmax(szAuthId), "%s%s", szAuthId, SPECIAL_CHAR)
nvault_get(g_iVault, szAuthId, szSavedName)
if(!equal(szName, szSavedName))
{
nvault_remove(g_iVault, szAuthId)
nvault_set(g_iVault, szAuthId, szName)
}
return 0
}
ParseLoadData(id, szData[256])
{
static szNum[11];
strbreak(szData, szNum, charsmax(szNum), szData, charsmax(szData));
g_iPoints[id] = str_to_num(szNum);
strbreak(szData, szNum, charsmax(szNum), szData, charsmax(szData));
g_iLevel[id] = str_to_num(szNum);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1053\\ f0\\ fs16 \n\\ par }
*/