- Статьи
- 2018-12-23
Автор статьи: Mort3m
Вообще, сама задумка статьи с зм сру, но так как это мертвый сайт, кого это волнует?
В данной статье я вам расскажу как можно добавить собственные ( кастомные ) модели игрокам.
Многие делают эти самые модели через мод, как по мне, легче сделать так, как я опишу в этом гайде.
И так, для начала нам нужен Zombie Plague Fix5a. Потому что в этом фиксе есть натив на установку кастомной модели.
Если данного фикса у вас на моде нету, берём обычный Zombie Plague.
ВНИМАНИЕ! Следующий блок статьи пойдет о том, как добавить натив на установку кастомной модели. Т.е для тех, у кого нет Fix5a.
Приступим.
1. Открываем исходник мода.
2. Ищем строку
public plugin_natives()
3. Ищем свободное место для добавления натива. Либо место, куда вы бы хотели поместить сам натив.
Лично я это буду делать после натива zp_force_buy_extra_item
Добавляем строку:
register_native("zp_override_user_model", "native_override_user_model", 1);
Должно получиться так:
4. Теперь нам надо добавить саму функцию установки кастомной модели.
Спускаемся до строки:
/*================================================================================
[Custom Natives]
=================================================================================*/
И в любом удобном месте вставляем этот блок кода:
// Native: zp_override_user_model
public native_override_user_model(id, const newmodel[], modelindex)
{
// ZP disabled
if (!g_pluginenabled)
return false;
if (!is_user_valid_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
// Strings passed byref
param_convert(2)
// Remove previous tasks
remove_task(id+TASK_MODEL)
// Custom models stuff
static currentmodel[32]
if (g_handle_models_on_separate_ent)
{
// Set the right model
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// Set model on player model entity
fm_set_playermodel_ent(id)
}
else
{
// Get current model for comparing it with the current one
fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
// Set the right model, after checking that we don't already have it
if (!equal(currentmodel, newmodel))
{
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// An additional delay is offset at round start
// since SVC_BAD is more likely to be triggered there
if (g_newround)
set_task(5.0 * g_modelchange_delay, "fm_user_model_update", id+TASK_MODEL)
else
fm_user_model_update(id+TASK_MODEL)
}
}
return true;
}
Должно получиться так: ( Шрифт уменьшил чтобы код влез полностью )
Если вы всё сделали правильно, компиляция должна пройти успешно:
ВНИМАНИЕ! Следующий блок статьи пойдет для всех пользователей, имеющих как обычный Zombie Plague так и Fix5a.
Итак, перейдем к основному.
Теперь нам надо будет написать маленький плагин, добавляющий вашу модель игрокам. Сам плагин я выложу в этой статье.
1. Создаём файл формата .sma с любым угодным вам названием
2. Заходим в файл любым текстовым редактором.
3. Подключаем инклуды + Оффсеты.
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
// Оффсеты
#define linux_diff_player 5
#define m_modelIndexPlayer 491
4. Вписываем натив + некоторые макросы + создаём переменную.
Важно! ПАПКА С МОДЕЛЬЮ И САМА МОДЕЛЬ ДОЛЖНЫ БЫТЬ С ОДИНАКОВЫМИ НАЗВАНИЯМИ
// Сам натив
native zp_override_user_model(pPlayer, szModel[], iModelIndex = 0);
#define MODEL_NAME "tommy" // Название модели
#define MODEL_PATH "models/player/%s/%s.mdl" // Оригинальный путь до моделей.
#define MODEL_ACCESS_ADMIN ADMIN_BAN // Установка модели только Админу. Закомментируйте, если не нужно
// Создаём переменную для хранения в ней индекса модели
new g_iszModelIndex;
5. Теперь нам надо вписать два форварда. plugin_precache и plugin_init
И в них зарегистрировать нужное нам событие и регистрацию плагина ( по желанию )
// Прекеш модели
public plugin_precache()
{
static szModelPath[128];
formatex(szModelPath, charsmax(szModelPath), MODEL_PATH, MODEL_NAME, MODEL_NAME);
// Присваиваем индекс модели переменной
g_iszModelIndex = engfunc(EngFunc_PrecacheModel, szModelPath);
}
// Регистрация нужных нам событий ( register_plugin по желанию )
public plugin_init()
{
// Регистрируем плагин
register_plugin("[AMXX] Custom Model", "0.0.1", "m0rt3m/тут может быть ваш ник");
// Ловим эвент спавна игрока
RegisterHam(Ham_Spawn, "player", "HamHook__PlayerSpawn_Post", 1);
}
6. Теперь нам осталось создать публичную функцию и вписать форвард когда игрок превращается в человека.
public HamHook__PlayerSpawn_Post(iPlayer)
{
// Проверяем на коннект
if(!is_user_connected(iPlayer))
return;
// Проверяем на зомби и выжившего
if(zp_get_user_zombie(iPlayer) || zp_get_user_survivor(iPlayer))
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
public zp_user_humanized_post(iPlayer, iSurvivor)
{
// Проверяем на выжившего
if(iSurvivor)
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
Плагин можно довести до ума, и сделать выставление моделей по ини и т.д, собственно, если вы шарите в павне, для вас это не будет особой проблемой.
Пожертвовать Вы можете сделать автору Mort3m, подарок в виде пожертвования на его электронную копилку ;)
30%
Скидка на покупку всех
сборок до 08.09.2024
Специально для тебя - Гость
Выбрать сборку
Плагин « Свинорез / Svinorez » для CS 1.6
файлы местами поменяйте, 2.1 со скином игрока
Паблик Сборка кс 1.6
В файле по пути cstrike/addons/amxmodx/configs/users.ini
Public cборка by [T3rkecorejz] для CS 1.6
12312312112321322
СЛИВ МОЕЙ ЗОМБИ СБОРКИ кс 1.6 // ПРИВАТ // 12 ПРИВИЛЕГИЙ +HOOK
Обновите ссылку
CS-Bans 1.3 Последние версии CS:Bans
Missing install folder..
Данные для Связи.https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169Услуга Помощь в установке/настройке серверов/модов/плагинов/сайтов.
GameCMS (Game Content Management System) Данные для Связи. https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169
Исправили Почту всех приходит, Очистили базу от кометов, Мусорных файлов, Дальше будем работать по файлам.
ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.
AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn
Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.
Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.
Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.
Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!
ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!
NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".
UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".