Иконка ресурса

Player Class Model 1.4.1

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Версия со стоками smlib'a, но без него.
Зачем?
50% плагина это просто инклюд smlib'a
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools_functions>

new String:wS_ModeL[9][250], Handle:wS_Cvar[9], bool:g_Enabled = false;
new String:s_DownListPath[PLATFORM_MAX_PATH];
new Handle:h_DownListPath;

public OnPluginStart()
{
	wS_Cvar[1] = CreateConVar("model_phoenix",		"");
	wS_Cvar[2] = CreateConVar("model_leet",			"");
	wS_Cvar[3] = CreateConVar("model_arctic",		"");
	wS_Cvar[4] = CreateConVar("model_guerilla",		"");
	wS_Cvar[5] = CreateConVar("model_seal_team",		"");
	wS_Cvar[6] = CreateConVar("model_gsg9",			"");
	wS_Cvar[7] = CreateConVar("model_sas",			"");
	wS_Cvar[8] = CreateConVar("model_gign",			"");

	h_DownListPath = CreateConVar("sm_player_class_model_dl", "cfg/sourcemod/player_class_model_dl.txt", "Путь к скачкам");

	AutoExecConfig(true, "player_class_model",		"sourcemod");
	HookEvent("player_spawn",	player_spawn);
}

public OnMapStart()
{
	for (new class = 1; class < 9; class++)
	{
		GetConVarString(wS_Cvar[class], wS_ModeL[class], 75);
		if (wS_ModeL[class][0] == 'm' && FileExists(wS_ModeL[class])) PrecacheModel(wS_ModeL[class], true);
		else wS_ModeL[class][0] = '\0';
	}
}

public OnConfigsExecuted()
{
	GetConVarString(h_DownListPath, s_DownListPath, sizeof(s_DownListPath));
	HookConVarChange(h_DownListPath, CvarChanges);
	
	if (FileExists(s_DownListPath))
		File_ReadDownloadList(s_DownListPath);
	else
		LogError("Downloadslist '%s' not found", s_DownListPath);

	g_Enabled = false;
	for (new class = 1; class < 9; class++)
	{
		GetConVarString(wS_Cvar[class], wS_ModeL[class], 250);
		if (wS_ModeL[class][0] == 'm' && FileExists(wS_ModeL[class]))
		{
			PrecacheModel(wS_ModeL[class], true);
			g_Enabled = true;
		}
		else
			wS_ModeL[class][0] = '\0';
	}
}

public CvarChanges(Handle:convar, const String:oldValue[], const String:newValue[])
{
	if (convar == h_DownListPath)
	{
		strcopy(s_DownListPath, sizeof(s_DownListPath), newValue);
		if (FileExists(s_DownListPath))
			File_ReadDownloadList(s_DownListPath);
	}
}

public player_spawn(Handle:event, const String:name[], bool:silent)
{
	if (!g_Enabled)
		return;

	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	new xclass = GetEntProp(client, Prop_Send, "m_iClass");
	if (0 < xclass < 9 && wS_ModeL[xclass][0] == 'm') SetEntityModel(client, wS_ModeL[xclass]);
}

stock File_ReadDownloadList(const String:path[])
{
	new Handle:file = OpenFile(path, "r");
	
	if (file  == INVALID_HANDLE) {
		return;
	}

	new String:buffer[PLATFORM_MAX_PATH];
	while (!IsEndOfFile(file)) {
		ReadFileLine(file, buffer, sizeof(buffer));
		
		new pos;
		pos = StrContains(buffer, "//");
		if (pos != -1) {
			buffer[pos] = '\0';
		}
		
		pos = StrContains(buffer, "#");
		if (pos != -1) {
			buffer[pos] = '\0';
		}

		pos = StrContains(buffer, ";");
		if (pos != -1) {
			buffer[pos] = '\0';
		}
		
		TrimString(buffer);
		
		if (buffer[0] == '\0') {
			continue;
		}

		File_AddToDownloadsTable(buffer);
	}

	CloseHandle(file);
}
new String:_smlib_empty_twodimstring_array[][] = { { '\0' } };
stock File_AddToDownloadsTable(const String:path[], bool:recursive=true, const String:ignoreExts[][]=_smlib_empty_twodimstring_array, size=0)
{
	if (path[0] == '\0') {
		return;
	}

	if (FileExists(path)) {
		
		new String:fileExtension[4];
		File_GetExtension(path, fileExtension, sizeof(fileExtension));
		
		if (StrEqual(fileExtension, "bz2", false) || StrEqual(fileExtension, "ztmp", false)) {
			return;
		}
		
		if (Array_FindString(ignoreExts, size, fileExtension) != -1) {
			return;
		}
}}

stock File_GetExtension(const String:path[], String:buffer[], size)
{
	new extpos = FindCharInString(path, '.', true);
	
	if (extpos == -1) {
		buffer[0] = '\0';
		return;
	}

	strcopy(buffer, size, path[++extpos]);
}

stock Array_FindString(const String:array[][], size, const String:str[], bool:caseSensitive=true, start=0)
{
	if (start < 0) {
		start = 0;
	}

	for (new i=start; i < size; i++) {

		if (StrEqual(array[i], str, caseSensitive)) {
			return i;
		}
	}
	
	return -1;
}
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Danyas, я не скриптер, просто вшил в плагин автоскачку. Код не изменен, оригинал от wS.
Скинь постом sp, smx закреплю в первом посте.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Danyas, я не скриптер, просто вшил в плагин автоскачку. Код не изменен, оригинал от wS.
Скинь постом sp, smx закреплю в первом посте.

У меня почему-то ерроры начали бегать...
Возможно я ошибся где-то. На днях отпишу и посмотрю
 
Сообщения
19
Реакции
0
Помогите новичку, хочу поставить свои скины на сервер, но никак не могу понять что именно надо писать в файле player_class_model_dl.txt

В player_class_model.cfg всё прописано верно начиная от пример: (models/player/ct/ct_gign)
 

Alraune

Участник
Сообщения
216
Реакции
52
В player_class_model_dl.txt копируешь списком все пути всех файлов моделей.
models/и дальше
materials/и дальше
А в player_class_model.cfg вставляешь только файлы mdl
Например - model_sas "models/player/stenli/girl_cowboy.mdl"
Кстати заметила что некоторые скины , прекрасно отображающиеся плагином Personal Skins почему то эррорят с этим плагином и наоборот. Так что дело не всегда в самих скинах.
На своём сервере ( в34 ) я заменила все стандартные скины именно этим плагином. Ошибок в логах нет. Но действительно пара проверенных скинов на нём не пошла.
Тем кто только планирует использовать плагин посоветую таки придерживаться концептуальности при выборе скинов на замену стандартных, иначе потенциальные игроки сервера "не в теме" просто не зайдут к вам больше... Проверено :р
 
Последнее редактирование:
Сообщения
19
Реакции
0
На ZRiot будет работать? Если нет то подскажите плагин подобный этому, чтобы игроки за КТ при заходе имели только один скин! Personal Skin, будет работать?
 

Vitya

Участник
Сообщения
4
Реакции
0
Почему этот плагин перебивает скины админов?
 

hotlife157

Участник
Сообщения
119
Реакции
8
Последнее редактирование:

engbro19

Участник
Сообщения
4
Реакции
3
НА CS:GO Работает !

Добавлено через 1 минуту
model_phoenix "models/player/slow/aot/salem/slow.mdl" -- МЕНЯЕТ СКиН TT
model_leet "models/player/adidas/t_leet.mdl" -- МЕНЯЕТ СКИН CT
Остальное не работает на CS:GO потому что там всего 2 скина!
 
Последнее редактирование:

hirowatch

Живет ХЛмод`ом
Сообщения
2,722
Реакции
1,634
hirowatch добавил(а) новый ресурс:

Player Class Model - Изменения стандартных классов

Есть всего 8 классов игроков, у каждого из которых собственный скин. С помощью этого плагина, вы можете изменить скин для некоторых/всех классов.
Указывайте полный путь к модели от models/ до .mdl, если хотите установить новый скин. Или оставьте поле пустым, чтобы была стандартная модель.
Пример настройки .../cstrike/cfg/sourcemod/player_class_model.cfg:
C-подобный:
model_phoenix "models/player/slow/aot/salem/slow.mdl"
model_leet "models/player/adidas/t_leet.mdl"
model_arctic...

Узнать больше об этом ресурсе...
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Nekro обновил(а) ресурс Player Class Model новой записью:

Обновление 1.4

1. Плагин обновлён до версии 1.4
2. Теперь переменные отлавливаются иначе, их можно изменять в любой момент игры, в моём случаи через mapconfig
3. Плагин имеет не много иной файл настроек, при обновлении выключите сервер, удалите файл и включите вновь для новой версии с описанием каждой переменной
4. Более не нужно использовать сторонние способы подгрузки файлов, достаточно просто вписать путь mdl в настройки и вся модель полностью скачается (пути загрузок моделей писать никуда не надо)
5...

Узнать больше об этом обновлении...
 
Последнее редактирование модератором:

2manbl4

Участник
Сообщения
50
Реакции
17
Поставь в тэг ксс, что-бы было понятно
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Опять Nekro и опять не положил в архив smartdm. Это бесить начинает, отправил жалобу
 
Сверху Снизу