/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fakemeta_util>
#include <colorchat>
#include <fvault>
 
#define PLUGIN "Weapon Skin System [WSS]"
#define VERSION "1.0"
#define AUTHOR "6almasok"
 
#define IsValidPlayers(%1,%2) ((1 <= %1 <= 32) && (1 <= %2 <= 32))
 
new oles[33],csomag[33], kredit[33],switchbutton[33],knife[33],getfrag[3][33]
new ModelData[40][64], ModelNum, MaximumBtton
 
new const File[] = "addons/amxmodx/configs/wss_models.ini"
new const szVaultName[] = "wss_vault"
new const prefix[] = "JokeAlmighty"
 
/*Rust Kills | Silver Kills | Gold Kills | Veteran Kills | Knife Kredit*/
new const need_kills[] = { 500, 1000, 2000, 4000}
 
/*Pack Names*/
new const csomagmsg[5][] = { "","","","","" }
 
new const knifedisenable[2][] = { "Kikapcsolva", "Bekapcsolva" }
 
new const menuszoveg[][][] = {
	{"", ""}, //0
	{"", ""}, //1
	{"", ""}, //2
	{"", ""}, //3
	{"", ""}, //4
	{"", ""} //5
}
new const chatszoveg[10][] = 
{
	"^4[%s]^1 FEJLÖVÉS!^3 %s ^1megöléséért kaptál ^3+%i^1 ölést!",
	"^4[%s]^3 %s ^1megöléséért kaptál ^3+%i^1 ölést!",
	"^4[%s]^3 %s ^1kapott ^3+1 ^1ölést ember lesebzésért!",
	"^4[%s]^1 Találtál^3 +%i^1 dobozt!",
	"^4[%s]^1 Kiválasztottad a(z)^3 %s^1-ot!",
	"^4[%s]^1 Sajnos nincs elég ölésed!",
	"^4[%s]^1 Kikapcsoltad a Skin Csomagokat!",
	"^4[%s]^1 Bekapcsoltad a Skin Csomagokat!",
	"^4[%s]^1 A szerveren jelenleg  ^3CHRISTMAS EVENT^1 fut. Megnyitáshoz írd be ^3/menu^1.",
	"^4[%s]^1 Sajnos nincs elég kredited!"
}
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
 
	/* Client Command */
	register_clcmd("say /menu" , "fomenu")
 
	/* Events */
	register_event("CurWeapon", "changeweapon", "be", "1=1")
	register_event("Damage", "sebzes_event", "be", "2!0", "3=0", "4!0")
	register_event("DeathMsg","Halal","a")
 
	/* Cvars */
	register_cvar("wss_hudenable", "1");
	register_cvar("wss_advertmp", "40.0");
	register_cvar("kill_recived", "1");
	register_cvar("hs_recived", "2");
	register_cvar("found_kredit", "1");
 
	/* Other */
	register_forward(FM_Touch,"ForwardTouch" );
	RegisterHam(Ham_Spawn, "player", "spawn_event", 1)
	set_task(1.0, "infohud", 0, _, _, "b")
	set_task(get_cvar_float("wss_advertmp"), "advertist", 0, "", 0, "b", 0)
 
	LoadModel();
}
public advertist(){ 
	ColorChat(0, GREEN, chatszoveg[8],prefix); 
	return PLUGIN_HANDLED;
}
public plugin_precache() {
 
	new Len, btton[196], Data[64], Letoltes[40][64];
	MaximumBtton = file_size(File, 1);
 
	for(new Num = 0; Num < MaximumBtton; Num++){
		read_file(File, Num, btton, 196, Len);
		parse(btton, Data, 63);
		remove_quotes(btton);
		if(btton[0] == ';')
		{
			continue;
		}
		remove_quotes(Data);
		format(Letoltes[Num], 63, "%s", Data);
		precache_model(Letoltes[Num]);
	}
	precache_model("models/joke/jokexmasboxcolor.mdl");
}
public LoadModel()
{
	new Len, btton[196], Data[64];
	MaximumBtton = file_size(File, 1);
	for(new Num; Num < MaximumBtton; Num++){
		ModelNum++;
		read_file(File, Num, btton, 196, Len);
		parse(btton, Data, 63);
		remove_quotes(btton);
		if(btton[0] == ';')
		{
			continue;
		}
		remove_quotes(Data);
		format(ModelData[ModelNum], 63, "%s", Data);
	}
}
public changeweapon(id)
{
	if(!is_user_alive(id) || !is_user_connected(id) || id < 1 || id > 32 || switchbutton[id] == 1)
	return
 
	new fegyver = get_user_weapon(id)
 
	if(csomag[id] == 1){
		if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[1]) //Rozsdas ak
		if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[2]) //Rozsdas awp
		if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[3]) //Rozsdas desi
		if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[4]) //Rozsdas m4
	}
	else if(csomag[id] == 2){
		if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[5]) //ezust ak
		if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[6]) //ezust awp
		if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[7]) //ezust desi
		if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[8]) //ezust m4
	}
	else if(csomag[id] == 3){
		if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[9]) //arany ak
		if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[10]) //arany awp
		if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[11]) //arany desi
		if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[12]) //arany m4
	}
	else if(csomag[id] == 4){
		if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[13]) //veteran ak
		if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[14]) //veteran awp
		if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[15]) //veteran desi
		if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[16]) //veteran m4
	}
	if(knife[id] == 1 && fegyver == CSW_KNIFE){
 
		set_user_maxspeed(id, Float:320.0)
		set_pev(id, pev_viewmodel2, ModelData[17]) //knife
	}
 
}
public spawn_event(id){
	getfrag[0][id] = 0;
	getfrag[1][id] = 0;
	getfrag[2][id] = 0;
}
public sebzes_event(id)
{
	new tamado = get_user_attacker(id);
	if(id == tamado  || !IsValidPlayers(id, tamado )) return;
	getfrag[1][tamado] += read_data(2);
 
	if(!getfrag[2][id] && getfrag[1][tamado] >= 50)
	{
		getfrag[0][tamado] = id;
		getfrag[2][id] = tamado;
	}
}
public Halal() {
 
	new attacker = read_data(1)
	new victim = read_data(2)
 
	new nev[32]
	get_user_name(victim, nev, charsmax(nev))
 
	if(attacker == victim || attacker == 0)
		return PLUGIN_HANDLED
 
	if(read_data( 3 )){
		oles[attacker] += get_cvar_num("hs_recived");
		ColorChat(attacker, GREEN, chatszoveg[0] ,prefix ,nev, get_cvar_num("hs_recived"))
	}
	else{
		oles[attacker] += get_cvar_num("kill_recived");
		ColorChat(attacker, GREEN, chatszoveg[1],prefix, nev, get_cvar_num("kill_recived"))
	}
	if(getfrag[2][victim] && getfrag[2][victim] != attacker){
		new fragetkap = getfrag[2][victim];
		new fragetkapneve[32];
		getfrag[0][fragetkap] = 0;
		getfrag[1][fragetkap] = 0;
		getfrag[2][victim] = 0;
		get_user_name(fragetkap, fragetkapneve, charsmax(fragetkapneve));
		oles[fragetkap]++
		ColorChat(0, GREEN, chatszoveg[2],prefix ,fragetkapneve);
	}
	switch(random_num(1,3)){
		case 1: dropdobas()
	}
	return PLUGIN_HANDLED;
}
public dropdobas()
{	
	new victim = read_data( 2 );
 
	static Float:origin[ 3 ];
	pev( victim, pev_origin, origin );
 
	new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
	origin[ 2 ] -= 36; 
	engfunc( EngFunc_SetOrigin, ent, origin );
 
	if( !pev_valid( ent ) )
	{
		return PLUGIN_HANDLED;
	}
 
	set_pev( ent, pev_classname, "kredit" );
	engfunc( EngFunc_SetModel, ent, "models/joke/jokexmasboxcolor.mdl" );
	dllfunc( DLLFunc_Spawn, ent );
	set_pev( ent, pev_solid, SOLID_BBOX );
	set_pev( ent, pev_movetype, MOVETYPE_NONE );
	engfunc( EngFunc_SetSize, ent, Float:{ -23.160000, -13.660000, -0.050000 }, Float:{ 11.470000, 12.780000, 6.720000 } );
	engfunc( EngFunc_DropToFloor, ent );
 
	return PLUGIN_HANDLED;
}
public ForwardTouch( ent, id )
{
	if(pev_valid(ent))
	{
	new classname[ 32 ];
	pev( ent, pev_classname, classname, charsmax( classname ) );
 
	if( !equal( classname, "kredit") )
	{
		return FMRES_IGNORED;
	}
 
	kredit[id] += get_cvar_num("found_kredit");
	ColorChat(id, GREEN, chatszoveg[3],prefix, get_cvar_num("found_kredit"));
 
	engfunc( EngFunc_RemoveEntity, ent );
	}
	return FMRES_IGNORED
}
public logevent_round_start()
{
	new hkt = FM_NULLENT;
	while ( ( hkt = fm_find_ent_by_class( hkt, "kredit") ) )
	{
		engfunc( EngFunc_RemoveEntity, hkt );
	}	
}
public fomenu(id)
{
	new String[96]
	format(String, charsmax(String), "\r[\dJokeAlmighty\r] \dFőmenü^n\yÖlések: \y%i \r|\y dobozaid: \w%i", oles[id],kredit[id])
	new menu = menu_create(String, "fomenu_MyMenu");
 
	menu_additem(menu, "Játékos Infók", "0");
	menu_additem(menu, "EVENT INFÓ", "1");
 
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_setprop(menu, MPROP_EXITNAME, "\rKilépés");
 
	menu_display(id, menu, 0);
 
	return PLUGIN_HANDLED;
}
public fomenu_MyMenu(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
 
	new command[6], name[64], access, callback;
	menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
 
	switch(item)
	{
		case 0: playerinfo(id)
		case 1: show_motd(id, "addons/amxmodx/configs/motd/event.txt", "[JokeAlmighty] Infok")
	}
 
	menu_destroy(menu);
 
	return PLUGIN_HANDLED;
}
public playerinfo(id)
{	
	new some[256], menu
	static players[32],szTemp[10],pnum
	get_players(players,pnum,"ch");
 
	formatex(some,255,"\r[JokeAlmighty] \wJátékos \d|\w Ölés \d|\w dobozai");
	menu = menu_create(some,"pinfo_Handler");
 
	for (new i; i < pnum; i++)
	{
		formatex(some,256,"%s \r(\yÖlése: \w%i \d| \ydobozai: \w%i\r)",get_player_name(players[i]), oles[players[i]],kredit[players[i]]);
		num_to_str(players[i],szTemp,charsmax(szTemp));
		menu_additem(menu, some, szTemp);
	}
 
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL );
	menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
	menu_display(id, menu);
	return PLUGIN_HANDLED;
}
public pinfo_Handler(id,menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return;
	}
 
	playerinfo(id)
}
public fegymenu(id)
{
	new String[96]
	format(String, charsmax(String), "\r[JokeAlmighty] \wSkin csomagok^n\yKiválasztott Csomag: \d[%s]", csomagmsg[csomag[id]])
	new menu = menu_create(String, "fegymenu_handler" )
 
	format(String, charsmax(String), oles[id] >= need_kills[0] ? (menuszoveg[0][0]):(menuszoveg[0][1]), oles[id], need_kills[0]);
	menu_additem(menu, String, "0" );
	formatex(String, charsmax(String), oles[id] >= need_kills[1] ? (menuszoveg[1][0]):(menuszoveg[1][1]), oles[id], need_kills[1]);
	menu_additem(menu, String, "1");
	formatex(String, charsmax(String), oles[id] >= need_kills[2] ? (menuszoveg[2][0]):(menuszoveg[2][1]), oles[id], need_kills[2]);
	menu_additem(menu, String, "2");
	format(String, charsmax(String), oles[id] >= need_kills[3] ? (menuszoveg[3][0]):(menuszoveg[3][1]), oles[id], need_kills[3]);
	menu_additem(menu, String, "3");
	//formatex(String, charsmax(String), kredit[id] >= need_kills[4] ? (menuszoveg[4][0]):(menuszoveg[4][1]), kredit[id], need_kills[4]);
	//menu_additem(menu, String, "4");
	//menu_additem(menu, switchbutton[id] == 1 ? (menuszoveg[5][0]):(menuszoveg[5][1]), "5");
 
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_setprop(menu, MPROP_BACKNAME, "Vissza");
	menu_setprop(menu, MPROP_NEXTNAME, "Előre");
	menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
 
	menu_display(id, menu, 0);
	return PLUGIN_HANDLED;
}
public fegymenu_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED;
	}
 
	new command[6], name[64], access, callback;
	menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
 
	switch(item)
	{
		case 0: {
			if(oles[id] >= need_kills[0]) {
			csomag[id] = 1
			ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
			}
			else  {
			ColorChat(id, GREEN, chatszoveg[5],prefix);
			}
		}
		case 1: {
			if(oles[id] >= need_kills[1]) {
			csomag[id] = 2
			ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
			}
			else  {
			ColorChat(id, GREEN, chatszoveg[5],prefix);
			}
		}
		case 2: {
			if(oles[id] >= need_kills[2]) {
			csomag[id] = 3
			ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
			}
			else  {
			ColorChat(id, GREEN, chatszoveg[5],prefix);
			}
		}
		case 3: {
			if(oles[id] >= need_kills[3]) {
			csomag[id] = 4
			ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
			}
			else  {
			ColorChat(id, GREEN, chatszoveg[5],prefix);
			}
		}
		//case 4: {
			//if(kredit[id] >= need_kills[4]) {
			//knife[id] = 1
			//ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[5]);
			//}
			//else  {
			//ColorChat(id, GREEN, chatszoveg[9],prefix);
			//}
		//}
		case 5: {
			if(switchbutton[id] == 0){
			switchbutton[id] = 1
			csomag[id] = 0
			knife[id] = 0
			ColorChat(id, GREEN, chatszoveg[6],prefix);
			}
			else {
			switchbutton[id] = 0
			ColorChat(id, GREEN, chatszoveg[7],prefix);
			}
		}
		case 6: {
			ColorChat(id, GREEN, chatszoveg[5],prefix);
		}
	}
 
	fegymenu(id)
	return PLUGIN_HANDLED;
}
public infohud() {
 
	if(!get_cvar_num("wss_hudenable")) return PLUGIN_HANDLED
 
	static id
	for(id = 1; id <= get_maxplayers(); id++)
	{
		if(is_user_alive(id)){
			set_hudmessage(0, 127, 255, 0.01, 0.20, 0, 6.0, 1.0)
			show_hudmessage(id, "[Ölés: %i]^n[Dobozaid: %i]^n", oles[id],kredit[id],csomagmsg[csomag[id]], knifedisenable[knife[id]])
		}
		else{
			new target = entity_get_int(id, EV_INT_iuser2);
 
			if(!target)
			return PLUGIN_CONTINUE;
 
			set_hudmessage(255, 255, 255, 0.01, 0.20, 0, 6.0, 1.0)
			show_hudmessage(id, "[Ölés: %i]^n[Dobozaid: %i]^n", oles[target],kredit[target],csomagmsg[csomag[target]], knifedisenable[knife[target]])
		}
	}
	return PLUGIN_CONTINUE;
}
stock get_player_name(id){
	static szName[32];
	get_user_name(id,szName,31);
	return szName;
}
public client_disconnect(id){
	if(is_user_bot(id)) return;
 
	save(id);
}
public client_putinserver( id ) {
	if(is_user_bot(id)) return;
 
	oles[id] = 0;
	kredit[id] = 0;
	csomag[id] = 0;
	switchbutton[id] = 0;
	load(id);
}
load(id) {
	new szAuthid[32], szData[32];
	get_user_name( id, szAuthid, charsmax(szAuthid));
	new s1[16],s2[16],s3[16],s4[16]
	fvault_get_data( szVaultName, szAuthid, szData, 31 );
	parse( szData, s1, 15, s2, 15 , s3 , 15, s4 ,15);
	oles[id] = str_to_num(s1);
	kredit[id] = str_to_num(s2);
	csomag[id] = str_to_num(s3);
	switchbutton[id] = str_to_num(s4);
}
save(id) {
	new szAuthid[ 32 ], szData[ 32 ];
	get_user_name( id, szAuthid, charsmax(szAuthid));
 
	formatex( szData, 31, "%i %i %i %i", oles[id], kredit[id], csomag[id], switchbutton[id]);
	fvault_set_data( szVaultName, szAuthid, szData );
}
