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

В данной статье я расскажу вам, как можно поставить свою модель игрока для любой привилегии.Например у вас 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

Hello, Our administration publishes only cannon content, put like under the post below and write the top comment, we are preparing the material just for you, Darling Гость.

Donate You can make the author Universe, a gift in the form of a donation to his Paypal ;)


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

      • 31 December 2018 09:33
  2. Mort3m
    Mort3m
    • 0
    Ehh, как всё сложно, и чем мой вариант с zp_override_user_model не устраивает? 
    • 31 December 2018 00:33
    1. Universe
      Твой вариант очень классный, но другие варианты не помешают и тем более меня попросили её запилить, не отказывать же
      • 31 December 2018 09:32
      1. Mort3m
        Mort3m
        • 0
        Мой вариант наиболее легкий чем этот, но в этом варианте всё прописывается через мод, kak jitb to
        • 31 December 2018 16:22
  3. Mad Crowd
    у меня получилось но модели обычных игроков стали стандартными тип(arctic,leet,gign и т.д)
    что можно с этим сделать?
    • 1 February 2019 02:35
    1. Mort3m
      Mort3m
      • 0
      Смотреть мою статью и делать по ней^^
      Или заказать у меня плагин на модели игроков по INI файлу
      • 1 February 2019 14:19
  4. 89371513701
    Ошибка при компиляции выдает в этих местах
    g_modelindex_sponsor = ArrayCreate(1, 1);
    Array:model_sponsor 
    • 24 June 2019 14:22
Users belonging to group Guests cannot add comments to this article.
Base for Your Build
Information

Welcome to TB-TEAM.COM!

To become a full-fledged user of our portal, you need to register.
Register
Create your own account!

Register Now
Log In
Already registered? Go ahead and log in!

Log In