Как сделать свою модель для любой привилегии?
Как сделать свою модель для любой привилегии?

В данной статье я расскажу вам, как можно поставить свою модель игрока для любой привилегии.Например у вас 5 привилегий и у каждой привилегии будет своя модель игрока!

Открываем исходник главного мода и ищем такую строку:

// Customization vars
Перед ней добавляем:

#define MYMODELFLAG                    ADMIN_LEVEL_C
где ADMIN_LEVEL_C - это флаг, у которого будет заданная вами модель.


После // Customization vars добавляем:

new Array:model_myname, Array:g_modelindex_myname;

Далее ищем такую строку:

// Initialize a few dynamically sized arrays

И после нее добавляем:

model_myname = ArrayCreate(32, 1);
g_modelindex_myname = ArrayCreate(1, 1);

Двигаемся дальше и ищем:

// Custom weapon models

перед ней добавляем:

for (i = 0; i < ArraySize(model_myname); i++)
{
	ArrayGetString(model_myname, i, buffer, charsmax(buffer))
	format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
	ArrayPushCell(g_modelindex_myname, engfunc(EngFunc_PrecacheModel, buffer))
	if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
	if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}

Теперь ищем такие строки:

if (g_handle_models_on_separate_ent)
{
	// Set the right model


и заменяем этот код:

if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	iRand = random_num(0, ArraySize(model_admin_human) - 1)
	ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
}

на этот:

if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	iRand = random_num(0, ArraySize(model_admin_human) - 1)
	ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
}
else if (get_user_flags(id) & MYMODELFLAG)
{
	iRand = random_num(0, ArraySize(model_myname) - 1)
	ArrayGetString(model_myname, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_myname, iRand))
}

Листаем чуть-чуть ниже и видим такой код:

// Set the right model, after checking that we don't already have it
if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	size = ArraySize(model_admin_human)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_admin_human, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
			
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
	}
}

и заменяем его на этот:

// Set the right model, after checking that we don't already have it
if (get_user_flags(id) & MYMODELFLAG)
{
	size = ArraySize(model_myname)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_myname, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
			
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_myname, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_myname, iRand))
	}
}
else if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	size = ArraySize(model_admin_human)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_admin_human, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
			
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
	}
}

Уже почти закончили, ищите такой код:

if (g_handle_models_on_separate_ent)
{
	// Set the right model
	if (g_survivor[id])
	{
		iRand = random_num(0, ArraySize(model_survivor) - 1)
		ArrayGetString(model_survivor, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_survivor, iRand))
	}
	else
	{
		if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
		{
			iRand = random_num(0, ArraySize(model_admin_human) - 1)
			ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
			if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
		}
		else
		{
			iRand = random_num(0, ArraySize(model_human) - 1)
			ArrayGetString(model_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
			if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_human, iRand))
		}
	}

В этом блоке кода мы заменяем только этот код:

if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	iRand = random_num(0, ArraySize(model_admin_human) - 1)
	ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
}

на этот:

if (get_user_flags(id) & MYMODELFLAG)
{
	iRand = random_num(0, ArraySize(model_myname) - 1)
	ArrayGetString(model_myname, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_myname, iRand))
}
else if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	iRand = random_num(0, ArraySize(model_admin_human) - 1)
	ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
	if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
}

Листаем немного ниже и находим такой код:

if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	size = ArraySize(model_admin_human)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_admin_human, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
				
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
	}
}

и заменяем его на такой:

if (get_user_flags(id) & MYMODELFLAG)
{
	size = ArraySize(model_myname)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_myname, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
				
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_myname, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_myname, iRand))
	}
}
else if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
{
	size = ArraySize(model_admin_human)
	for (i = 0; i < size; i++)
	{
		ArrayGetString(model_admin_human, i, tempmodel, charsmax(tempmodel))
		if (equal(currentmodel, tempmodel)) already_has_model = true
	}
				
	if (!already_has_model)
	{
		iRand = random_num(0, size - 1)
		ArrayGetString(model_admin_human, iRand, g_playermodel[id], charsmax(g_playermodel[]))
		if (g_set_modelindex_offset) fm_cs_set_user_model_index(id, ArrayGetCell(g_modelindex_admin_human, iRand))
	}
}

Выходим на финиш и последнее, ищем такую строку:

else if (equal(key, "ADMIN HUMAN"))

и перед ней добавляем:

else if (equal(key, "MYNAMEMODEL HUMAN"))
{
	// Parse models
	while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ','))
	{
		// Trim spaces
		trim(key)
		trim(value)
						
		// Add to models array
		ArrayPushString(model_myname, key)
	}
}


Все с исходником мы закончили работу. Теперь его можно компилировать и заменять амхх файл.

Осталось зайти в zombieplague.ini
И там где
ADMIN HUMAN =
ниже добавляем:
MYNAMEMODEL HUMAN = название модели
Сохраняем и закрываем файл. Все, теперь у игроков с флагом MYMODELFLAG будет установлена модель MYNAMEMODEL HUMAN из zombieplague.ini

Привет, наша адмнистрация публикует только пушечный контент, поставь лайк под постом ниже и напишите самый топовый комментарий, мы готовим материал только для тебя, любимый Гость.

Пожертвовать Вы можете сделать автору Universe, подарок в виде пожертвования на его электронную копилку ;)


Комментариев 8
  1. BuB9neC
    BuB9neC
    • -1
    Я знаю, что ты воспользовался моей статьёй про макрос... Чувствую... 087-tongue
    • 30 декабря 2018 23:38
    1. Universe
      Обязательно

      Why i'm not from Ukraine?
      -------------------------------------------------------------------------------------------------------------------------
      Группа VK: vk.com/forumbz
      • 31 декабря 2018 09:33
  2. Mort3m
    Mort3m
    • 0
    Ehh, как всё сложно, и чем мой вариант с zp_override_user_model не устраивает? 
    • 31 декабря 2018 00:33
    1. Universe
      Твой вариант очень классный, но другие варианты не помешают и тем более меня попросили её запилить, не отказывать же
      Why i'm not from Ukraine?
      -------------------------------------------------------------------------------------------------------------------------
      Группа VK: vk.com/forumbz
      • 31 декабря 2018 09:32
      1. Mort3m
        Mort3m
        • 0
        Мой вариант наиболее легкий чем этот, но в этом варианте всё прописывается через мод, kak jitb to
        • 31 декабря 2018 16:22
  3. Mad Crowd
    у меня получилось но модели обычных игроков стали стандартными тип(arctic,leet,gign и т.д)
    что можно с этим сделать?
    • 1 февраля 2019 02:35
    1. Mort3m
      Mort3m
      • 0
      Смотреть мою статью и делать по ней^^
      Или заказать у меня плагин на модели игроков по INI файлу
      • 1 февраля 2019 14:19
  4. 89371513701
    Ошибка при компиляции выдает в этих местах
    g_modelindex_sponsor = ArrayCreate(1, 1);
    Array:model_sponsor 
    • 24 июня 2019 14:22
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Сайт был обновлен, нажми CTRL+F5
Основа для вашей сборки
ReHLDS 3.7.0.698

ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.

AmxModx 5.2.7.1

AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn

Reunion 0.1.92

Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.

Revoice 0.1.0.34

Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.

Metamod-r 1.3.128

Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.

Ultimate Unprecacher 1.1

Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!

ReAuthCheck 0.1.6

ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!

NetBufExtender (NBEX) 1.0

NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".

UserInfoNetOptimizer (UINO) 1.0

UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".

Информация

Добро пожаловать на WIZARD-CS.RU!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт