[Cerere Plugin] Knife Level

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Post Reply
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

26 Mar 2020, 18:40

Plugin Cerut: Knife Level
Descriere (adica ce face el mai exact): Sa fie 12 levele si la fiecare level vei primi un alt knife, un alt model. Nu iti da puteri, nu iti da absolut nimic decat un model. Sa iti arate Experienta facuta in hud jos. HUD-ul sa arate asa: [ Level 1 | Experience: 0/100 | Your Knife: Dual Katana ] . Sa poata sa-si aleaga knife-ul de la level 0 (default) pana la levelul lui actual. Gen are level 5 si scrie /knife si-si alege knife de la lvl 4, 3 ,2 ,1 sau 0 (default). Sa nu poata sa-si aleaga knife-ul daca de la levelul urmator. Sper c-am descris bine. Nu imi dati de pe net, daca vreti sa imi faceti, eu astept.
Serverul impune conditii strict HLDS/REHLDS?: reHLDS
Ai cautat pluginul?(daca da, precizeaza cum): Am gasit cateva dar nu imi rulau pe server + nu sunt cum doresc eu.
Necesita mod special?: Nup.
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
RoyalServer 2
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

27 Mar 2020, 16:25

Va rog, chiar am nevoie!
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

27 Mar 2020, 19:50

Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

28 Mar 2020, 15:00

Altcineva? Modelele le am eu, imi trb doar sursa.
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
User avatar
Laurentiu P.
Fost moderator
Fost moderator
Posts: 2549
Joined: 10 Jul 2013, 21:26
Detinator Steam: Da
Reputatie: Fost super moderator
Fond eXtream: 100
Has thanked: 26 times
Been thanked: 62 times
Contact:

28 Mar 2020, 17:38

no...
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

31 Mar 2020, 17:54

l am incercat si nu imi ruleaza pe server.
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
User avatar
YONTU
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2466
Joined: 10 May 2013, 14:25
Detinator Steam: Nu
CS Status: Everyone is looking at ur shoes
Reputatie: Moderator ajutator
Fost scripter eXtreamCS
Location: Gura Humorului
Has thanked: 256 times
Been thanked: 288 times
Contact:

31 Mar 2020, 22:20

level.sma | Afiseaza codul
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <csx>
#include <nvault>



#define MANAGE_PLAYERS
#define SHOW_HUD	// arata in hud nivelul tau + xp-ul tau + cutitul



// Register Plugin
new const PLUGIN_NAME[] = "Level System", 
	 PLUGIN_VERSION[] = "3.1", 
	 PLUGIN_AUTHOR[] = "YONTU";
	 
//new const PLUGIN_UPDATE[] = "13.02.2018";

#define is_user_valid(%1) (1 <= %1 <= 32)

new const Tag[] = "[Lv. System]";

enum _:e_data
{
	XP[10], 
	knifeName[64],
	knifeModel[128]
}
new Array:v_levelModArray, g_maxLevel = 0, db_levelMod[e_data];
new g_myXP[33], g_myLevel[33], g_myKnife[33], g_playerName[33][32], bool:g_isAlive[33], bool:g_isConnected[33];
new g_hostName[64], cvar_hostname, g_Vault;

#if defined SHOW_HUD
new SyncHudMessage;
#endif

#if defined MANAGE_PLAYERS
#define ADMIN_ACCESS	ADMIN_IMMUNITY
#endif

enum _data_cvars
{
	cvarname[32],
	cvarvalue[5],
	cvardesc[512]
}

enum _:cvars
{
	xp_kill = 0,
	xp_hs,
	xp_kill_knife,
	xp_hs_knife,
	xp_he,
	xp_plant_bmb,
	xp_defuse_bmb,
	xp_explode_bmb,
	xp_levelup_protection,
	xp_levelup_effects
}
new cvar[cvars], cvar_cache[cvars];

new const data_cvars[][_data_cvars] = 
{
	//nume cvar + valore + descriere cvar
	{"xp_kill", "10", "XP-ul obtinut pe kill:"},
	{"xp_hs", "15", "XP-ul obtinut pe headshot:"},
	{"xp_kill_knife", "30", "XP-ul obtinut pe kill facut cu cutitul:"},
	{"xp_hs_knife", "40", "XP-ul obtinut pe headshot facut cu cutitul:"},
	{"xp_he", "30", "XP-ul obtinut pe kill facut cu grenada:"},
	{"xp_levelup_protection", "1", "Atunci cand faci nivel nou, esti imun la orice atac timp cateva secunde (0/1)"},
	{"xp_levelup_effects", "1", "Efecte atunci cand faci nivel nou (0/1)"}
}

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
	register_cvar("level_mod_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("level_mod_", PLUGIN_VERSION);

	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar = register_cvar(data_cvars[cvarname], data_cvars[cvarvalue]);

	register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
	register_event("CurWeapon", "event_curweapon", "be");
	
	// Block change name. Is restricted.
	register_forward(FM_ClientUserInfoChanged, "fw_ChangeName");

	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1);
	
	#if defined MANAGE_PLAYERS
	register_clcmd("say /level", "CmdManagePlayers");
	register_clcmd("say_team /level", "CmdManagePlayers");
	#endif

	register_clcmd("say /knife", "CmdSelectKnife");
	register_clcmd("say_team /knife", "CmdSelectKnife");

	#if defined SHOW_HUD
	SyncHudMessage = CreateHudSyncObj();
	#endif

	cvar_hostname = get_cvar_pointer("hostname");
	
	g_Vault = nvault_open("_level_mod_");
	if(g_Vault == INVALID_HANDLE)
		set_fail_state("Eroare la deschiderea bazei de date din foldeurul data/vault.");
		
	_read_file();
}

_read_file()
{
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/levelmod.ini", path);
	
	new file = fopen(path, "r+");
	new const errors_file[] = "levelmod_errors.txt";
	new format_txt[128];
	
	if(!file_exists(path))
	{
		log_to_file(errors_file, "Nu am gasit fisierul '%s'. Il creez acum!", path);

		format(format_txt, 127, ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
		write_file(path, format_txt);
		format(format_txt, 127, ";-------------------------- | by %s | --------------------------^n^n^n", PLUGIN_AUTHOR);
		write_file(path, format_txt);
		write_file(path, ";Salut. In fisierul asta iti adaugi cate nivele vrei tu. Liniile care contin ';' in fata lor nu vor fi luate in considerare.");
		write_file(path, ";Pentru a seta un nivel, procedezi in felul urmator. Trebuie doar sa completezi linia de mai jos:");
		write_file(path, ";^"XP^"^"KNIFE NAME^"^"KNIFE V_MODEL^"");
		write_file(path, ";XP reprezinta experienta necesara pe care trebuie sa o acumulezi pentru a trece la nivelul urmator.");
		write_file(path, ";KNIFE NAME este numele cutitului.");
		write_file(path, ";KNIFE V_MODEL este numele modelul v_.");
		write_file(path, ";IMPORTANTA: Cate linii ai in fisier, atatea NIVELE VOR FI.^n;");
		write_file(path, ";Un exemplu de nivel este:");
		write_file(path, ";^"100^" ^"BAROS^"");
		write_file(path, ";- ai nevoie de 100 XP sa avansezi^n;- cutitul tau va fi: BAROS^n");
		write_file(path, ";PRIMA LINIE TREBUIE SA FIE NECOMPLETATA.^n;Ti-am adaugat eu mai jos doua nivele. Adauga acum cate nivele vrei sa aiba pluginul.^n^n^n");
		write_file(path, "^"0^"  ^"0^";  Level  0");
		write_file(path, "^"100^"  ^"Avansat^";  Level  1");
		write_file(path, "^"200^"  ^"Expert^";  Level  2");
	}
	
	if(g_maxLevel)
	{
		ArrayClear(v_levelModArray);
		g_maxLevel = 0;
	}
	
	new text[121], levelmod_infos[e_data];
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		if(parse(text, levelmod_infos[XP], charsmax(levelmod_infos), levelmod_infos[knifeName], charsmax(levelmod_infos), levelmod_infos[knifeModel], charsmax(levelmod_infos)) != 3)
		{
			log_to_file(errors_file, "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
			continue;
		}
		
		db_levelMod[XP] = str_to_num(levelmod_infos[XP]);
		copy(db_levelMod[knifeName], charsmax(db_levelMod), levelmod_infos[knifeName]);
		copy(db_levelMod[knifeModel], charsmax(db_levelMod), levelmod_infos[knifeModel]);
		
		ArrayPushArray(v_levelModArray, db_levelMod);
		g_maxLevel++;
	}
	g_maxLevel--;
	fclose(file);
	server_print("[%s] Numarul total de nivele: %d.", PLUGIN_NAME, g_maxLevel);
	
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/level_mod.cfg", path);
	if(!file_exists(path))
	{
		new i;
		for(i = 0; i < sizeof data_cvars; i++)
		{
			formatex(format_txt, 127, "// %s^n%s %s^n^n", data_cvars[cvardesc], data_cvars[cvarname], data_cvars[cvarvalue]);
			write_file(path, format_txt);
		}
	}
	server_cmd("exec %s", path);
}

public plugin_end()
{
	nvault_close(g_Vault);
	ArrayDestroy(v_levelModArray);
}

public plugin_precache()
{
	for(new i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		precache_model(db_levelMod[knifeModel]);
	}
}

public plugin_cfg()
{
	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar_cache = get_pcvar_num(cvar);

	get_pcvar_string(cvar_hostname, g_hostName, charsmax(g_hostName));
}

public plugin_natives()
{
	v_levelModArray = ArrayCreate(e_data);
	
	// Player specific natives
	register_native("xp_mod", "native_xp_mod", 1);
	register_native("get_user_xp", "native_get_user_xp", 1);
	register_native("get_user_level", "native_get_user_level", 1);
	register_native("get_g_maxLevel", "native_get_g_maxLevel", 1);
	register_native("get_user_next_level_xp", "native_get_user_next_level_xp", 1);
}

public native_xp_mod(id, xp, update, save)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return fnSetUserXP(id, xp, update, save);
}

public native_get_user_xp(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return g_myXP[id];
}

public native_get_user_level(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return calculeaza_nivel(id);
}

public native_get_g_maxLevel()
	return g_maxLevel;

public native_get_user_next_level_xp(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}
	
	new level = calculeaza_nivel(id) + 1;
	ArrayGetArray(v_levelModArray, level, db_levelMod);
	
	if(g_isConnected[id] && (level <= g_maxLevel))
		return db_levelMod[XP];

	return true;
}

public client_putinserver(id)
{
	get_user_name(id, g_playerName[id], 31);
	g_myXP[id] = 0;
	g_myKnife[id] = 0;
	g_isConnected[id] = true;
	g_isAlive[id] = false;
	fnLoadXP(id);
	g_myLevel[id] = calculeaza_nivel(id);
	#if defined SHOW_HUD
	set_task(1.0, "task_ShowHUD", id + 1221, _, _, "b");
	#endif
}

public client_disconnect(id)
{
	g_isConnected[id] = false;
	g_isAlive[id] = false;
	g_myKnife[id] = 0;
	fnSaveXP(id);
	#if defined SHOW_HUD
	remove_task(id + 1221);
	#endif
}

// thx ConnorMcLeod
public fw_ChangeName(id)
{
	static const name[] = "name"
	static szOldName[32], szNewName[32];

	pev(id, pev_netname, szOldName, charsmax(szOldName));
	if(szOldName[0])
	{
		get_user_info(id, name, szNewName, charsmax(szNewName));
		if(!equal(szOldName, szNewName))
		{
			set_user_info(id, name, szOldName);
			ColorChat(id, "!3%s!1 Este!4 INTERZISA!1 schimbarea numelui pe server.", Tag);
			return FMRES_HANDLED;
		}
	}

	return FMRES_IGNORED;
}

public fw_PlayerSpawn(id)
{
	if(!is_user_alive(id))
		return HAM_IGNORED;
		
	g_isAlive[id] = true;

	return HAM_IGNORED;
}

public event_NewRound()
{
	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar_cache = get_pcvar_num(cvar);
}

public event_curweapon(id)
{
	if(!g_isAlive[id])
		return PLUGIN_CONTINUE;

	if(get_user_weapon(id) == CSW_KNIFE)
	{
		ArrayGetArray(v_levelModArray, g_myKnife[id], db_levelMod);
		set_pev(id, pev_viewmodel2, db_levelMod[knifeModel]);
	}
	
	return PLUGIN_CONTINUE;
}

public client_death(killer, victim, wpnindex, hitplace, TK)
{
	if(killer == victim || !g_isAlive[killer])
		return;

	g_isAlive[victim] = false;

	// optional
	//if(g_myLevel[killer] == g_maxLevel)
	//	return;
	
	new xp;
	switch(wpnindex)
	{
		case CSW_KNIFE:
		{
			if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs_knife] == 0) ? 0 : cvar_cache[xp_hs_knife];
			else xp = (cvar_cache[xp_kill_knife] == 0) ? 0 : cvar_cache[xp_kill_knife];
		}
		case CSW_HEGRENADE: xp = (cvar_cache[xp_he] == 0) ? 0 : cvar_cache[xp_he];
		default:
		{
			if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs] == 0) ? 0 : cvar_cache[xp_hs];
			else xp = (cvar_cache[xp_kill] == 0) ? 0 : cvar_cache[xp_kill];
		}
	}


	if(xp != 0)
	{
		fnSetUserXP(killer, xp, 1, 1);
		ColorChat(killer, "!4%s!1 +!3 %i xp", Tag, xp);
	}
}

public CmdSelectKnife(id)
{
	if(!g_isConnected[id])
		return;
		
	static text[128], tasta[2], i;
	formatex(text, charsmax(text), "Knife Menu | My level: %d", g_myLevel[id]);
	new meniu = menu_create(text, "knifeMenuHandler");
	new callback = menu_makecallback("knifeMenuCallBack");
	   
	for(i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		
		formatex(text, charsmax(text), "%s%s%s [LVL: %i]", g_myLevel[id] < i ? "\d" : "\y", g_myKnife[id] == i ? "\r*\d " : "", db_levelMod[knifeName], i);
		
		tasta[0] = i-1;
		tasta[1] = 0;
		menu_additem(meniu, text, tasta, _, callback);
	}
	menu_setprop(meniu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, meniu);
}

public knifeMenuHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	g_myKnife[id] = item + 1;
	ArrayGetArray(v_levelModArray, g_myKnife[id], db_levelMod);
	ColorChat(id, "!4%s!1 Ti-ai ales cutitul!3 %s!1. Asteapta pana runda viitoare...", Tag, db_levelMod[knifeName]);
	return PLUGIN_CONTINUE;
}

public knifeMenuCallBack(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_myLevel[id] < item + 1 || g_myKnife[id] == item + 1)
		return ITEM_DISABLED;
	
	return ITEM_ENABLED;
}

#if defined MANAGE_PLAYERS
public CmdManagePlayers(id)
{
	if(!(get_user_flags(id) & ADMIN_ACCESS))
	{
		ColorChat(id, "!4%s!1 Nu ai acces!", Tag);
		return PLUGIN_HANDLED;
	}

	new menu = menu_create("Alege un jucator:", "MenuHandler");

	new iPlayers[32], iNum, i, player;
	new szUserID[32], szName[64];
	get_players(iPlayers, iNum);

	for(i = 0; i < iNum; i++)
	{ 
		player = iPlayers[i];

		formatex(szName, charsmax(szName), "%s:\y Level:\r %d", g_playerName[player], g_myLevel[player]);
		formatex(szUserID, charsmax(szUserID), "%d", get_user_userid(player));
		menu_additem(menu, szName, szUserID);
	}

	menu_display(id, menu);
	return PLUGIN_HANDLED;
}

public MenuHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
   
	new item_access, callback, info[64], name[32];
	menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
	
	new userid = str_to_num(info);
	new player = find_player("k", userid);

	ChoosePlayer(id, player);
	return PLUGIN_HANDLED;
}

public ChoosePlayer(id, Choosen)
{
	new szTitle[101], mm[200], szChoosen[200], i;
	formatex(szTitle, charsmax(szTitle), "Schimba-i lui \r%s\y nivelul in:", g_playerName[Choosen]);
	new menu = menu_create(szTitle, "SetLevelHandler");
	
	num_to_str(Choosen, szChoosen, charsmax(szChoosen));
	
	for(i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		formatex(mm, charsmax(mm), "\r%d\w (%d XP)", i, db_levelMod[XP]);
		menu_additem(menu, mm, szChoosen);
	}
	
	menu_display(id, menu);
	return PLUGIN_HANDLED;
}

public SetLevelHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new item_access, callback, info[64], name[32];
	menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
	
	new player = str_to_num(info);	
	g_myLevel[player] = item + 1;
	ArrayGetArray(v_levelModArray, g_myLevel[player], db_levelMod);	// necesar
	g_myXP[player] = (item == 0) ? 0 : db_levelMod[XP];
	
	ColorChat(player, "!4%s!1 Adminul!3 %s!1 ti-a schimbat nivelul in!4 %d!1.", Tag, g_playerName[id], g_myLevel[player]);
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
#endif

public CheckUserLevel(id)
{
	if(!g_isConnected[id])
		return;

	new level = calculeaza_nivel(id);
	ArrayGetArray(v_levelModArray, level, db_levelMod);

	if(g_myLevel[id] == g_maxLevel)
		return;

	// prima data verificam nivelul, a doua conditie e optionala (atunci cand jucatorul are 0 XP)
	if(level != g_myLevel[id] || g_myXP[id] == db_levelMod[XP])
	{
		g_myLevel[id]++;
		
		// Un mic efect? Nu strica...
		if(cvar_cache[xp_levelup_effects])
		{
			// Luam culorile setate pentru fiecare level in parte
			new g_Color[3];
			g_Color[0] = get_color_level(id, 0); // r
			g_Color[1] = get_color_level(id, 1); // g
			g_Color[2] = get_color_level(id, 2); // b

			// Producem efectul jucatorului
			MakeFadeScreen(id, 1.5, g_Color, random_num(100, 200));
		}

		if(cvar_cache[xp_levelup_protection])
		{
			fm_set_user_godmode(id, 1);
			set_task(1.0, "task_RemoveProtect", id);
		}

		ColorChat(id, "!3%s!1 Felicitari, !4ai urcat in level!1. Nivelul curent:!3 %d!1 !", Tag, level);
		if(g_myLevel[id] < g_maxLevel)
		{
			ArrayGetArray(v_levelModArray, g_myLevel[id] + 1, db_levelMod);
			ColorChat(id, "!3%s!1 Next XP:!4 %d!1 !", Tag, db_levelMod[XP]);
		}
	}
}

stock MakeFadeScreen(id, const Float:Seconds, const color[3], const Alpha)
{
	static g_MsgScreenFade = 0;
	if(!g_MsgScreenFade)
		g_MsgScreenFade = get_user_msgid("ScreenFade");

	message_begin(MSG_ONE, g_MsgScreenFade, _, id);
	write_short(floatround(4096.0 * Seconds, floatround_round));
	write_short(floatround(4096.0 * Seconds, floatround_round));
	write_short(0x0000);
	write_byte(color[0]);
	write_byte(color[1]);
	write_byte(color[2]);
	write_byte(Alpha);
	message_end();
}

public get_color_level(id, number)
{
	new g_Color[3];
	switch(g_myLevel[id])
	{
		case 1:	g_Color = { 248, 172, 58 };
		case 2:	g_Color = { 0, 255, 128 };
		case 3:	g_Color = { 170, 255, 127 };
		case 4:	g_Color = { 155, 240, 70 };
		case 5:	g_Color = { 255, 255, 0 };
		case 6:	g_Color = { 255, 127, 85 };
		case 7:	g_Color = { 0, 212, 255 };
		case 8:	g_Color = { 70, 70, 240 };
		case 9:	g_Color = { 170, 0, 255 };
		case 10:	g_Color = { 255, 255, 0 };
		default:	g_Color = { 200, 200, 0 };
	}
	
	return g_Color[number];
}

public task_RemoveProtect(id)
	fm_set_user_godmode(id, 0);

#if defined SHOW_HUD
public task_ShowHUD(taskid)
{
	new id = taskid - 1221;
	ArrayGetArray(v_levelModArray, g_myLevel[id], db_levelMod);

	new status[64];
	if(g_isAlive[id])
	{
		new g_Color[3];
		g_Color[0] = get_color_level(id, 0);
		g_Color[1] = get_color_level(id, 1);
		g_Color[2] = get_color_level(id, 2);

		if(equal(db_levelMod[knifeName], ""))
			formatex(status, charsmax(status), "");
		else
			formatex(status, charsmax(status), "  -  YOUR KNIFE: %s", db_levelMod[knifeName]);

		if(g_myLevel[id] == g_maxLevel)
		{
			set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.88, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: %d  -  XP: %d%s", g_myLevel[id], g_myXP[id], status);
		}
		else
		{
			set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.88, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: %d  -  XP: %d/%d%s", g_myLevel[id], g_myXP[id], db_levelMod[XP], status);
		}
	}
	else
	{
		new idSpec;
		idSpec = pev(id, pev_iuser2);

		if(g_isConnected[idSpec])
		{
			ArrayGetArray(v_levelModArray, g_myLevel[idSpec], db_levelMod);

			if(equal(db_levelMod[knifeName], ""))
				formatex(status, charsmax(status), "");
			else
				formatex(status, charsmax(status), " HIS KNIFE: %s | ", db_levelMod[knifeName]);

			set_hudmessage(255, 255, 255, -1.0, 0.87, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "Spectating: %s (%.1f HP)^n%sLevel: %d | XP: %d", g_playerName[idSpec], float(get_user_health(idSpec)), status, g_myLevel[idSpec], g_myXP[idSpec]);
		}
	}
}
#endif

public fnSaveXP(id)
{
	new szVaultData[64];
	format(szVaultData, charsmax(szVaultData), "%i#", g_myXP[id]);
	nvault_set(g_Vault, g_playerName[id], szVaultData);
	//nvault_close(g_Vault);
}

public fnLoadXP(id)
{
 	new szVaultData[64], xp[33];
	format(szVaultData, charsmax(szVaultData), "%i#", g_myXP[id]);

	nvault_get(g_Vault, g_playerName[id], szVaultData, charsmax(szVaultData));
	replace_all(szVaultData, charsmax(szVaultData), "#", " ");

	parse(szVaultData, xp, charsmax(xp));
	g_myXP[id] = str_to_num(xp);
	//nvault_close(g_Vault);
}

// STOCK'S
stock fnSetUserXP(id, xp, update, save)
{
	if(!g_isConnected[id])
		return PLUGIN_HANDLED;

	if(xp != 0)
	{
		g_myXP[id] += xp;
		if(g_myXP[id] <= 0) g_myXP[id] = 0;
	}

	if(update) CheckUserLevel(id);
	if(save) fnSaveXP(id);

	return PLUGIN_CONTINUE;
}

stock calculeaza_nivel(id)
{
	new i, level = 1, bool:found = false;
	if(g_myXP[id] != 0)
	{
		for(i = 1; i < g_maxLevel; i++)
		{
			ArrayGetArray(v_levelModArray, i, db_levelMod);

			if(g_myXP[id] < db_levelMod[XP])
			{
				level = i;
				found = true;
				break;
			}
		}
		if(!found) { level = g_maxLevel; }
	}
	else { level = 1; }
	
	return level; //clamp(level, 1, g_maxLevel);
}

stock ColorChat(id, String[], any:...)
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--)
	{
		i = Players[iNum];
		
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}

stock fm_set_user_godmode(id, godmode = 0)
{
	set_pev(id, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
	return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


odata ce instalezi pluginul, ti se va creea automat un fisier in configs (levelmod.ini)
Acolo gasesti informatii cum:
-sa adaugi nivele
-sa adaugi si cutitele (nume si v_model)
-sa adaugi si xp-ul pentru fiecare level

Comenzi:
/level (acces admin): adminul seteaza nivelul unui jucator (se deschide un meniu cu toti jucatorii, alegi jucatorul si selectezi nivelul)
/knife (acces @all): alegi cutitul (cutitele se deblocheazA in functie de nivelul curent)

Altele:
-xp ul se salveaza (deci nu se pierd date la urmatoarea conectare pe server)
-apare in hud cum ai zis tu
-daca esti spec pe cineva apare nivelul jucatorului + viata + numele lui (hud)

Cvar-uri:
-la instalarea pluginului, se creeaza un fisier in configs (level_mod.cfg)
-acolo modifici cvar-urile dupa bunul plac (+ detalii cvar)
„Peste douăzeci de ani vei fi dezamăgit din cauza lucrurilor pe care nu le-ai făcut, nu din cauza celor pe care le-ai făcut.” - Mark Twain
„Asa e si in viata, hotii castiga, prostii care invata pierd.” - Mihai Nemeș


Bio.LeagueCs.Ro - Biohazard v4.4 Xmas Edition
discord: IonutC#5114

Experinta in: Java/Spring boot/Angular/C/C++/C#/Javascript/Python/HTML/CSS/Pawn/SQL
Ai nevoie de ajutorul meu? Ma poti gasi doar la adresa de discord de mai sus.
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

01 Apr 2020, 21:35

Il incerc acum si revin cu edit!
Urmatoarele erori:

LevelMod.sma(93) : error 032: array index out of bounds (variable "data_cvars")
LevelMod.sma(93) : error 033: array must be indexed (variable "cvar")
LevelMod.sma(199) : error 032: array index out of bounds (variable "data_cvars")
LevelMod.sma(225) : error 035: argument type mismatch (argument 1)
LevelMod.sma(225) : error 033: array must be indexed (variable "cvar_cache")
LevelMod.sma(355) : error 035: argument type mismatch (argument 1)
LevelMod.sma(355) : error 033: array must be indexed (variable "cvar_cache")

7 Errors.
Could not locate output file LevelMod.amx (compile failed).
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

02 Apr 2020, 16:14

Code: Select all

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <csx>
#include <nvault>



#define MANAGE_PLAYERS
#define SHOW_HUD	// arata in hud nivelul tau + xp-ul tau + cutitul



// Register Plugin
new const PLUGIN_NAME[] = "Level System", 
	 PLUGIN_VERSION[] = "3.1", 
	 PLUGIN_AUTHOR[] = "YONTU";
	 
//new const PLUGIN_UPDATE[] = "13.02.2018";

#define is_user_valid(%1) (1 <= %1 <= 32)

new const Tag[] = "[Lv. System]";

enum _:e_data
{
	XP[10], 
	knifeName[64],
	knifeModel[128]
}
new Array:v_levelModArray, g_maxLevel = 0, db_levelMod[e_data];
new g_myXP[33], g_myLevel[33], g_myKnife[33], g_playerName[33][32], bool:g_isAlive[33], bool:g_isConnected[33];
new g_hostName[64], cvar_hostname, g_Vault;

#if defined SHOW_HUD
new SyncHudMessage;
#endif

#if defined MANAGE_PLAYERS
#define ADMIN_ACCESS	ADMIN_IMMUNITY
#endif

enum _data_cvars
{
	cvarname[32],
	cvarvalue[5],
	cvardesc[512]
}

enum _:cvars
{
	xp_kill = 0,
	xp_hs,
	xp_kill_knife,
	xp_hs_knife,
	xp_he,
	xp_plant_bmb,
	xp_defuse_bmb,
	xp_explode_bmb,
	xp_levelup_protection,
	xp_levelup_effects
}
new cvar[cvars], cvar_cache[cvars];

new const data_cvars[][_data_cvars] = 
{
	//nume cvar + valore + descriere cvar
	{"xp_kill", "10", "XP-ul obtinut pe kill:"},
	{"xp_hs", "15", "XP-ul obtinut pe headshot:"},
	{"xp_kill_knife", "30", "XP-ul obtinut pe kill facut cu cutitul:"},
	{"xp_hs_knife", "40", "XP-ul obtinut pe headshot facut cu cutitul:"},
	{"xp_he", "30", "XP-ul obtinut pe kill facut cu grenada:"},
	{"xp_levelup_protection", "1", "Atunci cand faci nivel nou, esti imun la orice atac timp cateva secunde (0/1)"},
	{"xp_levelup_effects", "1", "Efecte atunci cand faci nivel nou (0/1)"}
}

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
	register_cvar("level_mod_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
	set_cvar_string("level_mod_", PLUGIN_VERSION);

	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar[i] = register_cvar(data_cvars[i][cvarname], data_cvars[i][cvarvalue]);

	register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
	register_event("CurWeapon", "event_curweapon", "be");
	
	// Block change name. Is restricted.
	register_forward(FM_ClientUserInfoChanged, "fw_ChangeName");

	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1);
	
	#if defined MANAGE_PLAYERS
	register_clcmd("say /level", "CmdManagePlayers");
	register_clcmd("say_team /level", "CmdManagePlayers");
	#endif

	register_clcmd("say /knife", "CmdSelectKnife");
	register_clcmd("say_team /knife", "CmdSelectKnife");

	#if defined SHOW_HUD
	SyncHudMessage = CreateHudSyncObj();
	#endif

	cvar_hostname = get_cvar_pointer("hostname");
	
	g_Vault = nvault_open("_level_mod_");
	if(g_Vault == INVALID_HANDLE)
		set_fail_state("Eroare la deschiderea bazei de date din foldeurul data/vault.");
		
	_read_file();
}

_read_file()
{
	new path[64];
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/levelmod.ini", path);
	
	new file = fopen(path, "r+");
	new const errors_file[] = "levelmod_errors.txt";
	new format_txt[128];
	
	if(!file_exists(path))
	{
		log_to_file(errors_file, "Nu am gasit fisierul '%s'. Il creez acum!", path);

		format(format_txt, 127, ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
		write_file(path, format_txt);
		format(format_txt, 127, ";-------------------------- | by %s | --------------------------^n^n^n", PLUGIN_AUTHOR);
		write_file(path, format_txt);
		write_file(path, ";Salut. In fisierul asta iti adaugi cate nivele vrei tu. Liniile care contin ';' in fata lor nu vor fi luate in considerare.");
		write_file(path, ";Pentru a seta un nivel, procedezi in felul urmator. Trebuie doar sa completezi linia de mai jos:");
		write_file(path, ";^"XP^"^"KNIFE NAME^"^"KNIFE V_MODEL^"");
		write_file(path, ";XP reprezinta experienta necesara pe care trebuie sa o acumulezi pentru a trece la nivelul urmator.");
		write_file(path, ";KNIFE NAME este numele cutitului.");
		write_file(path, ";KNIFE V_MODEL este numele modelul v_.");
		write_file(path, ";IMPORTANTA: Cate linii ai in fisier, atatea NIVELE VOR FI.^n;");
		write_file(path, ";Un exemplu de nivel este:");
		write_file(path, ";^"100^" ^"BAROS^"");
		write_file(path, ";- ai nevoie de 100 XP sa avansezi^n;- cutitul tau va fi: BAROS^n");
		write_file(path, ";PRIMA LINIE TREBUIE SA FIE NECOMPLETATA.^n;Ti-am adaugat eu mai jos doua nivele. Adauga acum cate nivele vrei sa aiba pluginul.^n^n^n");
		write_file(path, "^"0^"  ^"0^";  Level  0");
		write_file(path, "^"100^"  ^"Avansat^";  Level  1");
		write_file(path, "^"200^"  ^"Expert^";  Level  2");
	}
	
	if(g_maxLevel)
	{
		ArrayClear(v_levelModArray);
		g_maxLevel = 0;
	}
	
	new text[121], levelmod_infos[e_data];
	while(!feof(file))
	{
		fgets(file, text, charsmax(text));
		trim(text);
		
		if(text[0] == ';' || !strlen(text)) 
		{
			continue; 
		}
		
		if(parse(text, levelmod_infos[XP], charsmax(levelmod_infos), levelmod_infos[knifeName], charsmax(levelmod_infos), levelmod_infos[knifeModel], charsmax(levelmod_infos)) != 3)
		{
			log_to_file(errors_file, "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
			continue;
		}
		
		db_levelMod[XP] = str_to_num(levelmod_infos[XP]);
		copy(db_levelMod[knifeName], charsmax(db_levelMod), levelmod_infos[knifeName]);
		copy(db_levelMod[knifeModel], charsmax(db_levelMod), levelmod_infos[knifeModel]);
		
		ArrayPushArray(v_levelModArray, db_levelMod);
		g_maxLevel++;
	}
	g_maxLevel--;
	fclose(file);
	server_print("[%s] Numarul total de nivele: %d.", PLUGIN_NAME, g_maxLevel);
	
	get_localinfo("amxx_configsdir", path, charsmax(path));
	format(path, charsmax(path), "%s/level_mod.cfg", path);
	if(!file_exists(path))
	{
		new i;
		for(i = 0; i < sizeof data_cvars; i++)
		{
			formatex(format_txt, 127, "// %s^n%s %s^n^n", data_cvars[i][cvardesc], data_cvars[i][cvarname], data_cvars[i][cvarvalue]);
			write_file(path, format_txt);
		}
	}
	server_cmd("exec %s", path);
}

public plugin_end()
{
	nvault_close(g_Vault);
	ArrayDestroy(v_levelModArray);
}

public plugin_precache()
{
	for(new i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		precache_model(db_levelMod[knifeModel]);
	}
}

public plugin_cfg()
{
	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar_cache[i] = get_pcvar_num(cvar[i]);

	get_pcvar_string(cvar_hostname, g_hostName, charsmax(g_hostName));
}

public plugin_natives()
{
	v_levelModArray = ArrayCreate(e_data);
	
	// Player specific natives
	register_native("xp_mod", "native_xp_mod", 1);
	register_native("get_user_xp", "native_get_user_xp", 1);
	register_native("get_user_level", "native_get_user_level", 1);
	register_native("get_g_maxLevel", "native_get_g_maxLevel", 1);
	register_native("get_user_next_level_xp", "native_get_user_next_level_xp", 1);
}

public native_xp_mod(id, xp, update, save)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return fnSetUserXP(id, xp, update, save);
}

public native_get_user_xp(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return g_myXP[id];
}

public native_get_user_level(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}

	return calculeaza_nivel(id);
}

public native_get_g_maxLevel()
	return g_maxLevel;

public native_get_user_next_level_xp(id)
{
	if(!is_user_valid(id))
	{
		log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
		return false;
	}
	
	new level = calculeaza_nivel(id) + 1;
	ArrayGetArray(v_levelModArray, level, db_levelMod);
	
	if(g_isConnected[id] && (level <= g_maxLevel))
		return db_levelMod[XP];

	return true;
}

public client_putinserver(id)
{
	get_user_name(id, g_playerName[id], 31);
	g_myXP[id] = 0;
	g_myKnife[id] = 0;
	g_isConnected[id] = true;
	g_isAlive[id] = false;
	fnLoadXP(id);
	g_myLevel[id] = calculeaza_nivel(id);
	#if defined SHOW_HUD
	set_task(1.0, "task_ShowHUD", id + 1221, _, _, "b");
	#endif
}

public client_disconnect(id)
{
	g_isConnected[id] = false;
	g_isAlive[id] = false;
	g_myKnife[id] = 0;
	fnSaveXP(id);
	#if defined SHOW_HUD
	remove_task(id + 1221);
	#endif
}

// thx ConnorMcLeod
public fw_ChangeName(id)
{
	static const name[] = "name"
	static szOldName[32], szNewName[32];

	pev(id, pev_netname, szOldName, charsmax(szOldName));
	if(szOldName[0])
	{
		get_user_info(id, name, szNewName, charsmax(szNewName));
		if(!equal(szOldName, szNewName))
		{
			set_user_info(id, name, szOldName);
			ColorChat(id, "!3%s!1 Este!4 INTERZISA!1 schimbarea numelui pe server.", Tag);
			return FMRES_HANDLED;
		}
	}

	return FMRES_IGNORED;
}

public fw_PlayerSpawn(id)
{
	if(!is_user_alive(id))
		return HAM_IGNORED;
		
	g_isAlive[id] = true;

	return HAM_IGNORED;
}

public event_NewRound()
{
	new i;
	for(i = 0; i < sizeof data_cvars; i++)
		cvar_cache[i] = get_pcvar_num(cvar[i]);
}

public event_curweapon(id)
{
	if(!g_isAlive[id])
		return PLUGIN_CONTINUE;

	if(get_user_weapon(id) == CSW_KNIFE)
	{
		ArrayGetArray(v_levelModArray, g_myKnife[id], db_levelMod);
		set_pev(id, pev_viewmodel2, db_levelMod[knifeModel]);
	}
	
	return PLUGIN_CONTINUE;
}

public client_death(killer, victim, wpnindex, hitplace, TK)
{
	if(killer == victim || !g_isAlive[killer])
		return;

	g_isAlive[victim] = false;

	// optional
	//if(g_myLevel[killer] == g_maxLevel)
	//	return;
	
	new xp;
	switch(wpnindex)
	{
		case CSW_KNIFE:
		{
			if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs_knife] == 0) ? 0 : cvar_cache[xp_hs_knife];
			else xp = (cvar_cache[xp_kill_knife] == 0) ? 0 : cvar_cache[xp_kill_knife];
		}
		case CSW_HEGRENADE: xp = (cvar_cache[xp_he] == 0) ? 0 : cvar_cache[xp_he];
		default:
		{
			if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs] == 0) ? 0 : cvar_cache[xp_hs];
			else xp = (cvar_cache[xp_kill] == 0) ? 0 : cvar_cache[xp_kill];
		}
	}


	if(xp != 0)
	{
		fnSetUserXP(killer, xp, 1, 1);
		ColorChat(killer, "!4%s!1 +!3 %i xp", Tag, xp);
	}
}

public CmdSelectKnife(id)
{
	if(!g_isConnected[id])
		return;
		
	static text[128], tasta[2], i;
	formatex(text, charsmax(text), "Knife Menu | My level: %d", g_myLevel[id]);
	new meniu = menu_create(text, "knifeMenuHandler");
	new callback = menu_makecallback("knifeMenuCallBack");
	   
	for(i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		
		formatex(text, charsmax(text), "%s%s%s [LVL: %i]", g_myLevel[id] < i ? "\d" : "\y", g_myKnife[id] == i ? "\r*\d " : "", db_levelMod[knifeName], i);
		
		tasta[0] = i-1;
		tasta[1] = 0;
		menu_additem(meniu, text, tasta, _, callback);
	}
	menu_setprop(meniu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, meniu);
}

public knifeMenuHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	g_myKnife[id] = item + 1;
	ArrayGetArray(v_levelModArray, g_myKnife[id], db_levelMod);
	ColorChat(id, "!4%s!1 Ti-ai ales cutitul!3 %s!1. Asteapta pana runda viitoare...", Tag, db_levelMod[knifeName]);
	return PLUGIN_CONTINUE;
}

public knifeMenuCallBack(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(g_myLevel[id] < item + 1 || g_myKnife[id] == item + 1)
		return ITEM_DISABLED;
	
	return ITEM_ENABLED;
}

#if defined MANAGE_PLAYERS
public CmdManagePlayers(id)
{
	if(!(get_user_flags(id) & ADMIN_ACCESS))
	{
		ColorChat(id, "!4%s!1 Nu ai acces!", Tag);
		return PLUGIN_HANDLED;
	}

	new menu = menu_create("Alege un jucator:", "MenuHandler");

	new iPlayers[32], iNum, i, player;
	new szUserID[32], szName[64];
	get_players(iPlayers, iNum);

	for(i = 0; i < iNum; i++)
	{ 
		player = iPlayers[i];

		formatex(szName, charsmax(szName), "%s:\y Level:\r %d", g_playerName[player], g_myLevel[player]);
		formatex(szUserID, charsmax(szUserID), "%d", get_user_userid(player));
		menu_additem(menu, szName, szUserID);
	}

	menu_display(id, menu);
	return PLUGIN_HANDLED;
}

public MenuHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
   
	new item_access, callback, info[64], name[32];
	menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
	
	new userid = str_to_num(info);
	new player = find_player("k", userid);

	ChoosePlayer(id, player);
	return PLUGIN_HANDLED;
}

public ChoosePlayer(id, Choosen)
{
	new szTitle[101], mm[200], szChoosen[200], i;
	formatex(szTitle, charsmax(szTitle), "Schimba-i lui \r%s\y nivelul in:", g_playerName[Choosen]);
	new menu = menu_create(szTitle, "SetLevelHandler");
	
	num_to_str(Choosen, szChoosen, charsmax(szChoosen));
	
	for(i = 1; i <= g_maxLevel; i++)
	{
		ArrayGetArray(v_levelModArray, i, db_levelMod);
		formatex(mm, charsmax(mm), "\r%d\w (%d XP)", i, db_levelMod[XP]);
		menu_additem(menu, mm, szChoosen);
	}
	
	menu_display(id, menu);
	return PLUGIN_HANDLED;
}

public SetLevelHandler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new item_access, callback, info[64], name[32];
	menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
	
	new player = str_to_num(info);	
	g_myLevel[player] = item + 1;
	ArrayGetArray(v_levelModArray, g_myLevel[player], db_levelMod);	// necesar
	g_myXP[player] = (item == 0) ? 0 : db_levelMod[XP];
	
	ColorChat(player, "!4%s!1 Adminul!3 %s!1 ti-a schimbat nivelul in!4 %d!1.", Tag, g_playerName[id], g_myLevel[player]);
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
#endif

public CheckUserLevel(id)
{
	if(!g_isConnected[id])
		return;

	new level = calculeaza_nivel(id);
	ArrayGetArray(v_levelModArray, level, db_levelMod);

	if(g_myLevel[id] == g_maxLevel)
		return;

	// prima data verificam nivelul, a doua conditie e optionala (atunci cand jucatorul are 0 XP)
	if(level != g_myLevel[id] || g_myXP[id] == db_levelMod[XP])
	{
		g_myLevel[id]++;
		
		// Un mic efect? Nu strica...
		if(cvar_cache[xp_levelup_effects])
		{
			// Luam culorile setate pentru fiecare level in parte
			new g_Color[3];
			g_Color[0] = get_color_level(id, 0); // r
			g_Color[1] = get_color_level(id, 1); // g
			g_Color[2] = get_color_level(id, 2); // b

			// Producem efectul jucatorului
			MakeFadeScreen(id, 1.5, g_Color, random_num(100, 200));
		}

		if(cvar_cache[xp_levelup_protection])
		{
			fm_set_user_godmode(id, 1);
			set_task(1.0, "task_RemoveProtect", id);
		}

		ColorChat(id, "!3%s!1 Felicitari, !4ai urcat in level!1. Nivelul curent:!3 %d!1 !", Tag, level);
		if(g_myLevel[id] < g_maxLevel)
		{
			ArrayGetArray(v_levelModArray, g_myLevel[id] + 1, db_levelMod);
			ColorChat(id, "!3%s!1 Next XP:!4 %d!1 !", Tag, db_levelMod[XP]);
		}
	}
}

stock MakeFadeScreen(id, const Float:Seconds, const color[3], const Alpha)
{
	static g_MsgScreenFade = 0;
	if(!g_MsgScreenFade)
		g_MsgScreenFade = get_user_msgid("ScreenFade");

	message_begin(MSG_ONE, g_MsgScreenFade, _, id);
	write_short(floatround(4096.0 * Seconds, floatround_round));
	write_short(floatround(4096.0 * Seconds, floatround_round));
	write_short(0x0000);
	write_byte(color[0]);
	write_byte(color[1]);
	write_byte(color[2]);
	write_byte(Alpha);
	message_end();
}

public get_color_level(id, number)
{
	new g_Color[3];
	switch(g_myLevel[id])
	{
		case 1:	g_Color = { 248, 172, 58 };
		case 2:	g_Color = { 0, 255, 128 };
		case 3:	g_Color = { 170, 255, 127 };
		case 4:	g_Color = { 155, 240, 70 };
		case 5:	g_Color = { 255, 255, 0 };
		case 6:	g_Color = { 255, 127, 85 };
		case 7:	g_Color = { 0, 212, 255 };
		case 8:	g_Color = { 70, 70, 240 };
		case 9:	g_Color = { 170, 0, 255 };
		case 10:	g_Color = { 255, 255, 0 };
		default:	g_Color = { 200, 200, 0 };
	}
	
	return g_Color[number];
}

public task_RemoveProtect(id)
	fm_set_user_godmode(id, 0);

#if defined SHOW_HUD
public task_ShowHUD(taskid)
{
	new id = taskid - 1221;
	ArrayGetArray(v_levelModArray, g_myLevel[id], db_levelMod);

	new status[64];
	if(g_isAlive[id])
	{
		new g_Color[3];
		g_Color[0] = get_color_level(id, 0);
		g_Color[1] = get_color_level(id, 1);
		g_Color[2] = get_color_level(id, 2);

		if(equal(db_levelMod[knifeName], ""))
			formatex(status, charsmax(status), "");
		else
			formatex(status, charsmax(status), "  -  YOUR KNIFE: %s", db_levelMod[knifeName]);

		if(g_myLevel[id] == g_maxLevel)
		{
			set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.88, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: %d  -  XP: %d%s", g_myLevel[id], g_myXP[id], status);
		}
		else
		{
			set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.88, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: %d  -  XP: %d/%d%s", g_myLevel[id], g_myXP[id], db_levelMod[XP], status);
		}
	}
	else
	{
		new idSpec;
		idSpec = pev(id, pev_iuser2);

		if(g_isConnected[idSpec])
		{
			ArrayGetArray(v_levelModArray, g_myLevel[idSpec], db_levelMod);

			if(equal(db_levelMod[knifeName], ""))
				formatex(status, charsmax(status), "");
			else
				formatex(status, charsmax(status), " HIS KNIFE: %s | ", db_levelMod[knifeName]);

			set_hudmessage(255, 255, 255, -1.0, 0.87, 0, 6.0, 1.1, 0.0, 0.0, -1);
			ShowSyncHudMsg(id, SyncHudMessage, "Spectating: %s (%.1f HP)^n%sLevel: %d | XP: %d", g_playerName[idSpec], float(get_user_health(idSpec)), status, g_myLevel[idSpec], g_myXP[idSpec]);
		}
	}
}
#endif

public fnSaveXP(id)
{
	new szVaultData[64];
	format(szVaultData, charsmax(szVaultData), "%i#", g_myXP[id]);
	nvault_set(g_Vault, g_playerName[id], szVaultData);
	//nvault_close(g_Vault);
}

public fnLoadXP(id)
{
 	new szVaultData[64], xp[33];
	format(szVaultData, charsmax(szVaultData), "%i#", g_myXP[id]);

	nvault_get(g_Vault, g_playerName[id], szVaultData, charsmax(szVaultData));
	replace_all(szVaultData, charsmax(szVaultData), "#", " ");

	parse(szVaultData, xp, charsmax(xp));
	g_myXP[id] = str_to_num(xp);
	//nvault_close(g_Vault);
}

// STOCK'S
stock fnSetUserXP(id, xp, update, save)
{
	if(!g_isConnected[id])
		return PLUGIN_HANDLED;

	if(xp != 0)
	{
		g_myXP[id] += xp;
		if(g_myXP[id] <= 0) g_myXP[id] = 0;
	}

	if(update) CheckUserLevel(id);
	if(save) fnSaveXP(id);

	return PLUGIN_CONTINUE;
}

stock calculeaza_nivel(id)
{
	new i, level = 1, bool:found = false;
	if(g_myXP[id] != 0)
	{
		for(i = 1; i < g_maxLevel; i++)
		{
			ArrayGetArray(v_levelModArray, i, db_levelMod);

			if(g_myXP[id] < db_levelMod[XP])
			{
				level = i;
				found = true;
				break;
			}
		}
		if(!found) { level = g_maxLevel; }
	}
	else { level = 1; }
	
	return level; //clamp(level, 1, g_maxLevel);
}

stock ColorChat(id, String[], any:...)
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--)
	{
		i = Players[iNum];
		
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}

stock fm_set_user_godmode(id, godmode = 0)
{
	set_pev(id, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
	return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
AdrianJrr
Membru, skill 0
Membru, skill 0
Posts: 45
Joined: 25 Aug 2017, 17:14
Detinator Steam: Da
CS Status: GO.ERAZER.RO
Detinator server CS: GO.ERAZER.RO
SteamID: STEAM_0:1:443307992
Fond eXtream: 0
Location: Giurgiu
Been thanked: 1 time
Contact:

03 Apr 2020, 03:10

L-am compilat si l-am pus pe server, de ce nu ruleaza? In amx_plugins nu il recunoaste.
FORUM: WWW.ERAZER.RO
DNS: CSGO.ERAZER.RO
IP + PORT: 89.44.246.29:27015
User avatar
paraParaschiv
Membru, skill +1
Membru, skill +1
Posts: 137
Joined: 12 Jun 2019, 18:06
Detinator Steam: Da
CS Status: PuNcT
Detinator server CS: « ESL.CSPOWER.RO »
SteamID: Stai LIN !
Fond eXtream: 0
Has thanked: 3 times
Been thanked: 2 times

03 Apr 2020, 15:41

adriane aceasi problema am avut si eu....compileaza cu:
https://aghl.ru/webcompiler/webcompiler.php
ESL.CSPOWER.RO
Cromwell
Membru nou
Membru nou
Posts: 1
Joined: 13 Jun 2020, 01:24
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0

13 Jun 2020, 01:47

Recomand:
https://forum.kgb-hosting.com/showthread.php?t=99852
Când am să intru la pc am să postez sursa tradusă.
Și acesta este foarte bun: level, market, shop, vip, happy hour , se pot adăuga ușor modele dacă nu reușești să lași reply și te ajut.
Părerea mea că aceste 2 pluginuri sunt cele mai bune knife mod level , mai este knife-skins v2.2 dacă nu mă înșel, dar nu este așa de bun ca aceste două plugine, asta este doar părerea mea.
https://github.com/Rajko97/Knife-EXP-Mo ... er/cstrike
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 34 guests