|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
Модели и hitbox'es
|
|
| draft | Дата: Пятница, 14.03.2008, 20:56:44 | Сообщение # 1 |
 Полковник
Группа: Пользователи
Сообщений: 225
Статус: Не в сети
| Уважаемые гуру скриптинга, в общем, наболели следующие вопросы (официальный портал помочь не смог) 1) Пытаюсь создать объект (entity) и, когда ставлю ему модель, то зачастую сервер падает. Нормальная работа только с моделями с префиксом w_ и скинами игроков, а стандартные в папке models не ставятся - сервер делает shutdown. Собственно, мне нужно создать большую модель типа ящика или просто двумерная завеса, но, как издевательство, сервер падает и никак не могу это преодолеть. И, что интересно, entity_set_size никакой погоды не делает, объект размеров не меняет (точнее сказать, сама визуальная модель) - видимо, меняется размер самого entity, а не его модели, что меня не устраивает, поэтому пытаюсь найти большую работающую модель (чтоб закрывала весь FOV игрока) 2) Как получить координаты hitbox'es (частей тела) модели игрока? Ясно, что есть get_user_origin, показывающий его координаты и можно получить координаты глаз. А как получить координаты головы, ног, рук и всего остального? Мне, собственно, нужно увидеть крайние точки модели, чтобы грамотно получать её видимость (потому что, по дефолту все entities проводят traceline от центра до центра, а меня это не устраивает - в реальности-то мы видеть можем голову или руку). Самое интересное, что подобные координаты существуют, иначе бы откуда бралась информация при traceline о том, в какую часть тела мы попадаем. Вопрос в том, где эти координаты можно взять?
Сообщение отредактировал draft - Пятница, 14.03.2008, 20:58:46 |
| |
|
|
| marikcool | Дата: Пятница, 14.03.2008, 23:23:34 | Сообщение # 2 |
|
Подполковник
Группа: Пользователи
Сообщений: 139
Статус: Не в сети
| по первому, визуальный скалинг модели такого не существует. и если модель отрисовывать возле глас игрока, то она будет видна у всех, нету возможности клиентской отрисовки произвольной модели. мои идеи- можешь подменить клиенсткую модель рук(v_*.mdl) на свою, или можешь послать клиенту сообщение типо fadetoblack, у него будет черный экран. по второму хз, наверно не стали искать область памяти где лежат эти координаты)) так что бери memhack и ищи))
|
| |
|
|
| DaTa | Дата: Суббота, 15.03.2008, 01:11:23 | Сообщение # 3 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| http://cs-mapper.by.ru/img/tutor/2/t2crates.jpg Игрок за 64х64х64 ящиком ничего не увидет(разве что с помощью дактап), если хочешь, чтобы не было видно его холку - делай ящик размером 72х72х72 http://cs-mapping.com.ua/forum/forumdisplay.php?f=77 Как сделать ящик именно 72х72х72? Нужно сделать максимальное приближение, что бы было видно самую мелкую сетку(квадрат = 1х1 юнит) и примерно по нужным углам растянуть ящик(при компиляции модели углы станут в самые ближние пересечения координатной сетки). Тут есть два варианта исполнения: 1) Сделать центр ящика в центре координатной сетки 2) Сделать центр нижней грани в центре координатной сетки(более удобно, на мой взгляд) Как воплотить ящик в жизнь(пример из плагина Bunnyhop Course Maker 2.0 by FatalisDK)? Code #include <amxmodx> #include <fakemeta>
new const g_BoxModel[] = "models/papka/yawik.mdl" new g_InfoTarget
public plugin_init() { register_plugin("name", "version", "author") register_clcmd("amx_addbox", "create_box") g_InfoTarget = engfunc(EngFunc_AllocString, "info_target") }
public plugin_precache() precache_model(g_BoxModel)
public create_box(id) { static Float:origin[3], iorigin[3]
get_user_origin(id, iorigin, 3) //узнаем, куда целится игрок вызвавший команду IVecFVec(iorigin, origin) //нам нужны координаты во Float static ent ent = engfunc(EngFunc_CreateNamedEntity, g_InfoTarget) //создаем ентити if(! pev_valid(ent) ) return PLUGIN_HANDLED set_pev(ent, pev_classname, "fake_box") //класс может быть любым set_pev(ent, pev_solid, SOLID_BBOX) //делаем его не пустотелым, что бы игрок не мог проходить сквозь него set_pev(ent, pev_movetype, MOVETYPE_NONE) //ящик стоит на месте все время engfunc(EngFunc_SetModel, ent, g_BoxModel) //устанавливаем модель ящика engfunc(EngFunc_SetSize, ent, Float:{-36.0, -36.0, 0.0}, Float:{36.0, 36.0, 72.0})//это размеры ящика, нижняя грань которого в центе(второй способ) engfunc(EngFunc_SetOrigin, ent, origin) //устанавливает ящик в заданные координаты return PLUGIN_HANDLED } Одно НО для пуль ящика не будет существовать. наверно...
|
| |
|
|
| VEN | Дата: Суббота, 15.03.2008, 10:24:27 | Сообщение # 4 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Quote Как получить координаты частей тела модели игрока? Пример для головы:Quote new Float:origin[3], Float:angles[3] engfunc(EngFunc_GetBonePosition, id, PLAYERBONE_HEAD, origin, angles) Список bone-констант (brought to us by Pavol "PM" Marko, если не ошибаюсь): Code #define PLAYERBONE_PELVIS 1 #define PLAYERBONE_SPINE 2 #define PLAYERBONE_SPINE1 3 #define PLAYERBONE_SPINE2 4 #define PLAYERBONE_SPINE3 5 #define PLAYERBONE_NECK 6 #define PLAYERBONE_HEAD 7 #define PLAYERBONE_L_CLAVICLE 9 #define PLAYERBONE_L_UPPERARM 10 #define PLAYERBONE_L_FOREARM 11 #define PLAYERBONE_L_HAND 12 #define PLAYERBONE_L_FINGER0 13 #define PLAYERBONE_L_FINGER01 14 #define PLAYERBONE_L_FINGER1 15 #define PLAYERBONE_L_FINGER11 16 #define PLAYERBONE_L_THIGH 40 #define PLAYERBONE_L_CALF 41 #define PLAYERBONE_L_FOOT 42 #define PLAYERBONE_R_CLAVICLE 23 #define PLAYERBONE_R_UPPERARM 24 #define PLAYERBONE_R_FOREARM 25 #define PLAYERBONE_R_HAND 26 #define PLAYERBONE_R_FINGER0 27 #define PLAYERBONE_R_FINGER01 28 #define PLAYERBONE_R_FINGER1 29 #define PLAYERBONE_R_FINGER11 30 #define PLAYERBONE_R_THIGH 46 #define PLAYERBONE_R_CALF 47 #define PLAYERBONE_R_FOOT 48 Quote нету возможности клиентской отрисовки произвольной модели Есть возможноть отображать конкретную(ые) модель(и)/entity(ies) только для конкретного(ых) игрока(ов). Quote для пуль ящика не будет существовать. наверно Но можно заставить их считаться с желаемыми предметами.
|
| |
|
|
| DaTa | Дата: Суббота, 15.03.2008, 12:49:34 | Сообщение # 5 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (VEN) Но можно заставить их считаться с желаемыми предметами. Прошу прощения за оффтоп, но как? Ловить TraceLine?Добавлено (2008-03-15, 12:49 Pm) ---------------------------------------------
Quote (VEN) Есть возможноть отображать конкретную(ые) модель(и)/entity(ies) только для конкретного(ых) игрока(ов). Можешь рассказать как? Quote (VEN) Список bone-констант Можно где-то узнать их размеры?
|
| |
|
|
| VEN | Дата: Суббота, 15.03.2008, 14:55:00 | Сообщение # 6 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| 1. Да. 2. Хукнуть AddToFullPack и форсировать для всех клиентов, кто не должен видеть данную entity, флаг EF_NODRAW для члена Effects структуры EntityState. 3. ... декомпилировав модель, полагаю.
|
| |
|
|
| draft | Дата: Воскресенье, 16.03.2008, 14:09:42 | Сообщение # 7 |
 Полковник
Группа: Пользователи
Сообщений: 225
Статус: Не в сети
| Спасибо, НО: 1) Суть проблемы в том, что нету у меня работающей модели ящика. А когда ставлю entity_set_model (Надо понимать, что это тоже самое, что engfunc только через <engine.inc>), сервер делает shutdown (вырубается). Тут вопрос в следующем, имеет ли различие при установке модели, какие я ставлю остальные параметры или проблема с падением сервера связана с самой моделью? В общем, нужна сама работающая модель. 2) Когда мы ставим модель прямо на уровень глаз, получается, что при виде от первого лица текстура модели разрывается и мы видим её насквозь. Задача в том, чтобы её было видно ПЕРЕД глазами (т.е., получить следующую координату от начала traceline) 3) VEN, спасибо, за помощь (оказывается, я уже где-то это видел, просто подзабыл). Но вот какой вопрос, а каким образом наиболее грамотно получить крайние точки модели? И, кстати, можно ли применять engfunc(EngFunc_SetBonePosition, id, PLAYERBONE_HEAD, origin, angles) =)
|
| |
|
|
| VEN | Дата: Воскресенье, 16.03.2008, 16:12:03 | Сообщение # 8 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| SetBonePosition не существует, модель - не конструктор, поэтому переставлять ее части недопустимо, хотя, было бы забавно вложить голову в левую руку, например. Получить крайние точки точным образом средствами AMX Mod X довольно сложно. Можно написать плагин-декомпилятор модели, который будет определять размеры частей модели. Можно пользоваться координатами и углами, полученными после вызова GetBonePosition, уточняя крайние точки частей данными, полученными после декомпиляции модели, с учетом угла. Кстати, на практике угол, по крайней мере в CS, всегда нулевой.
|
| |
|
|
| draft | Дата: Воскресенье, 16.03.2008, 16:47:55 | Сообщение # 9 |
 Полковник
Группа: Пользователи
Сообщений: 225
Статус: Не в сети
| Идея просто в том, чтобы точно определять, видим ли мы противника или нет (это всё я для своего нового античита пытаюсь разузнать )
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |