Поправка на Skin System

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.

Модератори: Extreme, Extreme, Extreme, Extreme, Extreme, Extreme, Extreme

Аватар
Bartian
Извън линия
Потребител
Потребител
Мнения: 280
Регистриран на: 01 Сеп 2018, 14:43
Се отблагодари: 65 пъти
Получена благодарност: 78 пъти

Поправка на Skin System

Мнение от Bartian » 17 Фев 2019, 15:37

Здравейте , може ли да ми поправите плъгина за скинове ? Проблема е там, че след смяна на мапа се рестартват точките на убийствата , а аз искам да се запазват постоянно тоест да се вкара nvault или нещо от този сорт.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>

#define SAVETIME_MIN 0.5
#define SAVETIME_MAX 3.0
#define LOADTIME 2.5

#define MAXWEAPONS 30
#define SKINSPERWEAPONS 10
#define POINTSLEN 6

#define PORT 1

#pragma semicolon 1

new const PLUGIN[] = "Skin System";
new const VERSION[] = "3.46";
new const AUTHOR[] = "Destroyt";

new KillPoints[31][33], Skin[31][SKINSPERWEAPONS],
vSkinMdl[31][SKINSPERWEAPONS][64], pSkinMdl[31][SKINSPERWEAPONS][64],
SkinName[31][SKINSPERWEAPONS][32], Already[31], Cvar_Save, pSave[3][32][33];
new PointsFile[64], SkinsFile[64];

new const WeaponNames[][] =
{
	"", "P228", "", "Scout", "He Grenade", "XM1014", "", "MAC10", "AUG",
	"", "Elite", "FiveSeven", "UMP45", "SG550", "Galil", "FAMAS",
	"USP", "Glock18", "AWP", "MP5", "M249", "M3", "M4A1", "TMP", "G3SG1",
	"", "Deagle", "SG552", "AK47", "Knife", "P90"
};
new const WeaponEntNames[][] =
{
	"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_mac10",
	"weapon_aug", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
	"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
	"weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp",
	"weapon_g3sg1", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
};

public plugin_init()
{	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar(PLUGIN, AUTHOR, FCVAR_SERVER);
	
	Cvar_Save = register_cvar("skin_s_savemod", "2");
	
	register_clcmd("say", "Say");
	register_clcmd("say_team", "Say");
	
	for(new Num; Num < sizeof WeaponEntNames; Num++)
	{
		RegisterHam(Ham_Item_Deploy, WeaponEntNames[Num], "WeaponModel", 1);
	}
	
	register_forward(FM_ClientUserInfoChanged, "NameChange");
	register_dictionary("skinsystem.txt");
	
	LoadSkins();
}
public plugin_precache() {
	static ConfigsDir[64]; 
	get_localinfo("amxx_configsdir", ConfigsDir, 63);
	formatex(PointsFile, 63, "%s/skinsystem/save.ini", ConfigsDir);
	formatex(SkinsFile, 63, "%s/skinsystem/skins.cfg", ConfigsDir);
	
	new Len, Line[256], Data[3][48], FileLine;
	FileLine = file_size(SkinsFile, 1);
	for(new Num = 0; Num < FileLine; Num++)
	{
		read_file(SkinsFile, Num, Line, 255, Len);
		parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
		
		if(Line[0] == ';' || strlen(Line) < 5)
			continue;

		remove_quotes(Data[1]);
		remove_quotes(Data[2]);
		
		if(containi(Data[1], ".mdl") != -1)
		{
			precache_model(Data[1]);
		}
					
		if(containi(Data[2], ".mdl") != -1)
		{
			precache_model(Data[2]);
		}
	}
}
public NameChange(Player) 
{
	if(!is_user_connected(Player) || get_pcvar_num(Cvar_Save) != 0)
		return FMRES_IGNORED;

	new OldName[32], NewName[32], Name[32];
	get_user_name(Player, Name, 31);
	pev(Player, pev_netname, OldName, charsmax(OldName));
	if(OldName[0])
	{
		get_user_info(Player, "name", NewName, charsmax(NewName));
		if(!equal(OldName, NewName))
		{
			remove_task(Player);
			
			LoadPlayer(Player);
			LoadPoints(Player);
		}
	}
	return FMRES_IGNORED;
}
public WeaponModel(Weapon) {
	new Player = get_pdata_cbase(Weapon, 41, 4);
	new WeaponID = cs_get_weapon_id(Weapon);
	
	if(Player > 32 || Player < 1
	|| WeaponID < 1 || WeaponID > 30)
	{
		return HAM_SUPERCEDE;
	}
	
	for(new Num = 1; Num < MAXWEAPONS; Num++)
	{
		if(Num == WeaponID)
		{
			for(new x; x < Already[WeaponID]; x++)
			{
				if(KillPoints[WeaponID][Player] >= Skin[WeaponID][x])
				{
					if(containi(vSkinMdl[WeaponID][x], ".mdl") != -1)
					{
						set_pev(Player, pev_viewmodel2, vSkinMdl[WeaponID][x]);
					}
					if(containi(pSkinMdl[WeaponID][x], ".mdl") != -1)
					{
						set_pev(Player, pev_weaponmodel2, pSkinMdl[WeaponID][x]);
					}
				}
			}
		}
	}
	return HAM_IGNORED;
}
public LoadSkins() {
	new File;
	File = fopen(SkinsFile, "rt");
	
	if(File)
	{
		new Line[256], Type[32], Data[5][64];
		while(!feof(File))
		{
			fgets(File, Line, 255);
			
			if(Line[0] == ';' || strlen(Line) < 5)
				continue;
				
			parse(Line, Type, 31);
			
			for(new Num = 1; Num < MAXWEAPONS+1; Num++)
			{
				if(Already[Num] >= SKINSPERWEAPONS)
					continue;
				
				if(equali(Type, WeaponNames[Num]))
				{
					parse(Line, Data[0], 63, Data[1], 63, Data[2], 63, Data[3], 63, Data[4], 63);
					copy(vSkinMdl[Num][Already[Num]], 63, Data[1]);
					copy(pSkinMdl[Num][Already[Num]], 63, Data[2]);
					copy(SkinName[Num][Already[Num]], 31, Data[4]);
					Skin[Num][Already[Num]] = str_to_num(Data[3]);
					Already[Num]++;
				}
			}
		}
		fclose(File);
	}
}
public client_death(Killer, Victim, Weapon)
{
	if(Killer == Victim
	|| Killer > 32 || Killer < 1
	|| Weapon == 25 || Weapon == 9
	|| Weapon < 1 || Weapon > 30)
	{
		return PLUGIN_HANDLED;
	}
	
	set_task(random_float(SAVETIME_MIN, SAVETIME_MAX), "SavePoints", Killer);
	KillPoints[Weapon][Killer]++;
	
	return PLUGIN_CONTINUE;
}
public ShowSkins(Player, i)
{
	new MotdTitle[64];
	formatex(MotdTitle, 63, "%L", LANG_SERVER, "MOTD1");
	
	new Motd[1024], Line[256];
	formatex(Line, 255, "<body bgcolor=^"black^">^n<font color=^"red^">^n");
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<p align=^"center^">%s %s by: %s</p></font>^n<font color=^"greenyellow^">^n", PLUGIN, VERSION, AUTHOR);
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<p align=^"center^">%L:</p></font>^n", LANG_SERVER, "SKINS", WeaponNames[i]);
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<h5>^n<font color=^"white^">^n");
	add(Motd, 1023, Line, 255);
	
	for(new Num; Num < MAXWEAPONS; Num++)
	{
		if(Num != i)
		continue;
		formatex(Line, 255, "<p>");
		add(Motd, 1023, Line, 255);
		for(new x; x < SKINSPERWEAPONS; x++)
		{
			if(strlen(SkinName[Num][x]) < 2)
				continue;
			
			formatex(Line, 255, "<br>%s: (%L)", SkinName[Num][x], LANG_SERVER, "KILLS", Skin[Num][x]);
			add(Motd, 1023, Line, 255);
		}
		formatex(Line, 255, "</p>");
		add(Motd, 1023, Line, 255);
	}
	
	formatex(Line, 255, "^n</h5>^n</font>^n</body>");
	add(Motd, 1023, Line, 255);
	show_motd(Player, Motd, MotdTitle);
}
public ShowPoints(Player, Target)
{
	new Name[32], MotdTitle[64];
	get_user_name(Target, Name, 31);
	
	formatex(MotdTitle, 63, "%L", LANG_SERVER, "PKILLS", Name);
	
	new Motd[1024], Line[256];
	formatex(Line, 255, "<body bgcolor=^"black^">^n<font color=^"red^">^n");
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<p align=^"center^">%s %s by: %s</p></font>^n<font color=^"white^">^n", PLUGIN, VERSION, AUTHOR);
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<p align=^"center^">%L:</p></font>^n", LANG_SERVER, "PKILLS", Name);
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<font color=^"cyan^">^n");
	add(Motd, 1023, Line, 255);
	formatex(Line, 255, "<h5>^n");
	add(Motd, 1023, Line, 255);
 
	if(Target > 0)
	{
		formatex(Line, 255, "<p align=^"center^">");
		add(Motd, 1023, Line, 255);
		new Len;
		for(new Num = 1; Num < MAXWEAPONS+1; Num++)
		{
			if(Num == 2 || Num == 6 || Num == 9 || Num == 25)
			{
				continue;
			}
			
			Len++;
			
			if(Len < POINTSLEN)
			{
				formatex(Line, 255, " %s: %d |", WeaponNames[Num], KillPoints[Num][Target]);
				add(Motd, 1023, Line, 255);
			}
			else
			{
				Len = 0;
				formatex(Line, 255, " %s: %d</p>^n<p align=^"center^">", WeaponNames[Num], KillPoints[Num][Target]);
				add(Motd, 1023, Line, 255);
			}
		}
		formatex(Line, 255, "</p>");
		add(Motd, 1023, Line, 255);
	}
	
	formatex(Line, 255, "^n</h5>^n</font>^n</body>");
	add(Motd, 1023, Line, 255);
	show_motd(Player, Motd, MotdTitle);
}
public Say(Player)
{
	new Message[32];
	read_args(Message, 31);
	remove_quotes(Message);
	
	if(equali(Message, "/mykills"))
	{
		ShowPoints(Player, Player);
	}
	else if(containi(Message, "/skins") != -1)
	{
		for(new Num; Num < MAXWEAPONS+1; Num++)
		{
			if(containi(Message, WeaponNames[Num]) != -1)
			{
				ShowSkins(Player, Num);
				return PLUGIN_HANDLED;
			}
		}
	}
	else
	{
		new TargetName[32], Name[32], Command[32];
		parse(Message, Command, 31, TargetName, 31);
		if(equali(Command, "/kill"))
		{
			for(new Target; Target < 32; Target++)
			{
				if(Target == Player || !is_user_connected(Target))
				{
					continue;
				}
				
				get_user_name(Target, Name, 31);
				
				if((containi(Name, TargetName) != -1))
				{
					if(equali(Name, TargetName))
					ShowPoints(Player, Target);
					else if(strlen(TargetName) > 3)
					ShowPoints(Player, Target);
					return PLUGIN_HANDLED;
				}
			}
		}
	}
	return PLUGIN_CONTINUE;
}
public client_putinserver(Player)
{
	remove_task(Player);
	set_task(LOADTIME, "LoadPoints", Player);
}
public client_connect(Player)
{
	LoadPlayer(Player);
}
public LoadPoints(Player)
{
	if(!is_user_connected(Player))
	{
		return PLUGIN_HANDLED;
	}
	
	new File;
	File = fopen(PointsFile, "rt");
	
	if(File)
	{
		new Line[256];
		new LineName[32], Data[31][8];
		
		while(!feof(File))
		{
			fgets(File, Line, 255);
			
			if(Line[0] == ';' || strlen(Line) < 2)
				continue;
				
			parse(Line, LineName, 31);
			
			if(equal(LineName, pSave[get_pcvar_num(Cvar_Save)][Player]))
			{
				parse(Line, Data[0], 7, Data[1], 7, Data[2], 7, Data[3], 7, Data[4], 7, Data[5], 7,
				Data[6], 7, Data[7], 7, Data[8], 7, Data[9], 7, Data[10], 7, Data[11], 7, Data[12], 7,
				Data[13], 7, Data[14], 7, Data[15], 7, Data[16], 7, Data[17], 7, Data[18], 7, Data[19], 7,
				Data[20], 7, Data[21], 7, Data[22], 7, Data[23], 7, Data[24], 7, Data[25], 7, Data[26], 7,
				Data[27], 7, Data[28], 7, Data[29], 7, Data[30], 7);
				
				for(new Num = 1; Num < MAXWEAPONS+1; Num++)
				{
					KillPoints[Num][Player] = str_to_num(Data[Num]);
				}
				return PLUGIN_HANDLED;
			}
		}
		fclose(File);
	}
	return PLUGIN_CONTINUE;
}
public SavePoints(Player)
{
	if(!is_user_connected(Player))
	{
		return PLUGIN_HANDLED;
	}
	
	new File;
	File = fopen(PointsFile, "rt");
	
	if(File)
	{
		new Line[192], LineNum;
		
		new LineName[32], bool:Found;
		
		while(!feof(File))
		{
			fgets(File, Line, 191);
			
			if(Line[0] == ';' || strlen(Line) < 2)
				continue;
				
			parse(Line, LineName, 31);
			
			if(equal(LineName, pSave[get_pcvar_num(Cvar_Save)][Player]) && !Found)
			{
				new SaveLine[256], PlayerPoints[256], String[8];
				
				for(new Num = 1; Num < MAXWEAPONS+1; Num++)
				{
					format(String, 7, "^"%i^" ", KillPoints[Num][Player]);
					add(PlayerPoints, 255, String);
				}
				
				formatex(SaveLine, 255, "^"%s^" %s", pSave[get_pcvar_num(Cvar_Save)][Player], PlayerPoints);
				write_file(PointsFile, SaveLine, LineNum);
				Found = true;
				return PLUGIN_HANDLED;
			}
			
			LineNum++;
		}
		
		if(!Found)
		{
			new SaveLine[256], PlayerPoints[256], String[8];
				
			for(new Num; Num < MAXWEAPONS; Num++)
			{
				format(String, 7, "^"%i^" ", KillPoints[Num][Player]);
				add(PlayerPoints, 255, String);
			}
			
			formatex(SaveLine, 255, "^"%s^" %s", pSave[get_pcvar_num(Cvar_Save)][Player], PlayerPoints);
			write_file(PointsFile, SaveLine);
			return PLUGIN_HANDLED;
		}
		fclose(File);
	}
	return PLUGIN_CONTINUE;
}
stock LoadPlayer(Player)
{
	new Num;
	for(Num = 1; Num < MAXWEAPONS+1; Num++)
	{
		KillPoints[Num][Player] = 0;
	}
	
	for(Num = 0; Num < 2; Num++)
	{
		pSave[0][Player] = "";
	}
	get_user_name(Player, pSave[0][Player], 31);
	get_user_ip(Player, pSave[1][Player], 31, PORT);
	get_user_authid(Player, pSave[2][Player], 31);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
*/
Последно промяна от Bartian на 21 Фев 2019, 20:17, променено общо 1 път.
Думата "хакер" е неправилно използвана в смисъл на "компютърен хакер" от някои журналисти. Ние, хакерите, отказваме да приемем това тълкуване и продължаваме да означаваме с него смисъла на "някой, който обича да го програмира и да го ползва". Изображение

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Поправка на Skin System

Мнение от OciXCrom » 21 Фев 2019, 16:48

А, къде е плъгинът?

Аватар
Bartian
Извън линия
Потребител
Потребител
Мнения: 280
Регистриран на: 01 Сеп 2018, 14:43
Се отблагодари: 65 пъти
Получена благодарност: 78 пъти

Поправка на Skin System

Мнение от Bartian » 23 Фев 2019, 16:29

Оправих се като промених правата на файлът save.ini да може да чете и записва, локнете темата.
Думата "хакер" е неправилно използвана в смисъл на "компютърен хакер" от някои журналисти. Ние, хакерите, отказваме да приемем това тълкуване и продължаваме да означаваме с него смисъла на "някой, който обича да го програмира и да го ползва". Изображение

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Amazon [Bot] и 37 госта