|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
Как узнать угол, на который повёрнут игрок?
|
|
| Rockon | Дата: Вторник, 04.11.2008, 07:45:28 | Сообщение # 1 |
 Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| Доброго времени суток! ) Собственно у меня ещё один вопрос. Как мне узнать угол, на который повёрнут игрок? про angle не говорите, что есть - лучше объясните, как им пользоваться? Проблема в том, что я пытаюсь создать респавн с себя: свои координаты я узнал - это несложно, но вот на какой угол я повёрнут - я не понял, как это вычислять.. Было бы здорово, если бы кто-нибудь толком написал..
|
| |
|
|
| Koka | Дата: Вторник, 04.11.2008, 09:39:05 | Сообщение # 2 |
 Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| узнаем угол на который повернута энтити static Float:MyVec[3] pev(ent, pev_angles, MyVec) // MyVec[0] -- это x // MyVec[1] -- это y // MyVec[2] -- это z MyVec[1] += 45.0 // крутим энтити на 45 градусов по угрику set_pev(ent, pev_angles, MyVec) // приминяем изменения так ? 
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Вторник, 04.11.2008, 09:43:54 |
| |
|
|
| DaTa | Дата: Вторник, 04.11.2008, 13:19:18 | Сообщение # 3 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| http://amxmodx.ucoz.ru/forum/8-50-245-16-1164823038 Quote (slogic) .angle ориентация модели игрока в пространстве (в градусах) .v_angle направление, куда смотрит игрок (в градусах); если смотрит в направлении отличном от .angle, то модель игрока визуально перекручивается (как проволока) - ноги в направлении .angle, тело - направлении .v_angle; кстати, этот атрибут используется ТОЛЬКО для игроков, для других entity - нулевой
|
| |
|
|
| Rockon | Дата: Вторник, 04.11.2008, 15:13:49 | Сообщение # 4 |
 Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| спасибо огромное - очень не хватало такой статьи. Сразу всё понятно стало. Сейчас посмотрю и возомжно будут новые вопросы, как же без них? Добавлено (2008-11-04, 3:13 Pm) --------------------------------------------- А как мне привязать это к id? Code public monsterAdd(id, netname ) { static Float: angles[3]; pev(pev_netname, pev_angles, angles); } angles[2] = ? Или может использовать pev_v_angle как направление взгляда игрока для создания правильно угла респавна? Мне на выходе нужно получить угол в градусах.. А получается 0
Сообщение отредактировал Rockon - Вторник, 04.11.2008, 15:16:39 |
| |
|
|
| slogic | Дата: Вторник, 04.11.2008, 15:34:02 | Сообщение # 5 |
|
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Player Spawn Points Fixer (PSP Fixer) плагин смотрел? Он исправляет угол точек респавна игроков.
|
| |
|
|
| Rockon | Дата: Среда, 05.11.2008, 02:53:40 | Сообщение # 6 |
 Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| Честно говоря - я не знаю функций, что там используются, поэтому смотреть исходник мне тяжеловато.. Добавлено (2008-11-04, 4:19 Pm) --------------------------------------------- Единственное, что я нашёл там arrViewAngle и arrModelAngle - но они привязанны к энтити info_player_start vip и deathmatch, а не к игроку конкретно и соответственно читая строчку Code entity_get_vector(iID, EV_VEC_v_angle, arrViewAngle) Я понял только, что некий v_angle(взгляд игрока) приравнивает своё значение к arrViewAngle) Но вот что за iID, точнее что там у него за значение - вот это я пока смотрю.. Если есть возможность - можно ли хоть какую-то зацепку? Или лучше схему вычисления этого злополучного угла.. Добавлено (2008-11-04, 4:25 Pm) --------------------------------------------- Посмотрел дальше - iID ведёт прямой путь к энтити респавнов игроков.. Но всёравно не очень понимаю схему работы =\ Добавлено (2008-11-04, 4:33 Pm) --------------------------------------------- Да и ещё. Я ведь ищу угол не с info_player_deathmatch/start - я уже бегаю рождённым игроком(т.е. у меня поидее другой класс энтити) и тогда мне надо Code iID = find_ent_by_class(iID,[b] g_arrSpawnClasses[i][/b]) вместо g_arrSpawnClasses[i] свой класс написать.. Какой? И как сделать чтобы именно с моего игрока считался угол обзора с глаз? Добавлено (2008-11-04, 4:38 Pm) --------------------------------------------- Как не бьюсь - не пойму я принципов работы вашего плагина.. Ну очень много функций, а описания в энжине скудные.. Не тот у меня уровень =\ Добавлено (2008-11-05, 2:53 Am) --------------------------------------------- хех) Разобрался. Спасибо алиед модс =) Собственно для тех, кто вдруг захочет выяснить угол своего обзора - вот код: Code new Float:angles[3]; pev(id, pev_v_angle, angles); Бред конечно но я так парился, чтобы это понять 
Сообщение отредактировал Rockon - Вторник, 04.11.2008, 16:38:59 |
| |
|
|
| slogic | Дата: Среда, 05.11.2008, 17:13:49 | Сообщение # 7 |
|
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Тебе пивели пример Quote (Koka) pev(ent, pev_angles, MyVec) Чего не спроил, что означает параметр ent - не понимаю. Запомни, все сущности с индексами от 1 до 32 (на самом деле maxplayers) - зарезервированы для игроков.
|
| |
|
|
| Rockon | Дата: Четверг, 06.11.2008, 14:13:26 | Сообщение # 8 |
 Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| я тогда уже понял - что ent был индексом. Я вместо него ставил id.. Моя проблема то была в другом. У меня угол был вечно равен нулю. Хотя я брал пример с твоего плагина. И ещё я так и не понял, почему у тебя в твоём плагине был не pev а EV_VEC_angles.. Тогда откуда pev? Сокращение какое то?
Сообщение отредактировал Rockon - Четверг, 06.11.2008, 14:17:18 |
| |
|
|
| DaTa | Дата: Пятница, 07.11.2008, 00:45:58 | Сообщение # 9 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| У амхх скриптера есть два инструмента, которыми он работает с атрибутами entitity - это модуль engine и fakemeta. engine более прост в использовании, там реализованы некоторые форварды(forward функции, которые вызываются из плагина при каком-то событии), функции, реализацию которых пришлось бы добиваться комбинациями возможностей fakemeta. Так же там реализованы stock функции комбинациями функций engine(которые портирует fakemeta_util.inc чуть более чем полностью). fakemeta - очень гибкий инструмент, имеет много возможностей metamod(практически все), может полностью заменить engine своей функциональностью. Скриптеры предпочитают использовать fakemeta, engine - это слишком по лаймерски и непопулярно)) Оба модуля могут имеют доступ к атрибутам ентитей, а именно: engine Code /* Sets/gets things in an entities Entvars Struct. */ native entity_get_int(iIndex, iKey); native entity_set_int(iIndex, iKey, iVal); native Float:entity_get_float(iIndex, iKey); native entity_set_float(iIndex, iKey, Float:iVal); native entity_get_vector(iIndex, iKey, Float:vRetVector[3]); native entity_set_vector(iIndex, iKey, const Float:vNewVector[3]); native entity_get_edict(iIndex, iKey); native entity_set_edict(iIndex, iKey, iNewIndex); native entity_get_string(iIndex, iKey, szReturn[], iRetLen); native entity_set_string(iIndex, iKey, const szNewVal[]); native entity_get_byte(iIndex, iKey); native entity_set_byte(iIndex, iKey, iVal); iKey - атрибут (engine_const.inc) fakemeta Code /** * Returns entvar data from an entity. Use the pev_* enum (in fakemeta_const.inc) to specify which data you want retrieved. * * @note This function uses "read_data" style data syntax. It returns integer values, * by-references float data, and sets a buffer for string data. * * @note If retrieving strings, you may optionally get a pointer into the global string table. Depending on * your situation, there are two ways to do this. * 1: This simply gets the pointer. * new ptr = pev(entid, pev_classname) * 2: The pointer will be stored in ptr AND the actual string is retrieved. * new ptr, classname[32] * pev(entid, pev_classname, ptr, classname, 31) * * @param _index The entity index to lookup. * @param _value The pev field to lookup (look in fakemeta_const.inc) */ native pev(_index,_value,any:...);
/** * Sets entvar data for an entity. Use the pev_* enum from fakemeta_const.inc for reference. * * @note Setting string data will automatically allocate a new string (via AllocString) * If you have a string already allocated with your own call to AllocString, use * set_pev_string_ptr instead. * * @param _index The entity index to set the value on. * @param _value The pev field to set, (look in fakemeta_const.inc) */ native set_pev(_index,_value,any:...);
/** * Use this native to set a pev field to a string that is already allocated (via a function such * as EngFunc_AllocString). * * @note If you specify _value as anything other than string fields, an error will be thrown. * @note Pass 0 as the _string field to set it to an empty string. * * @param _index The entity index to set the value on. * @param _value The pev field to set - MUST be a string field. * @param _string The string handle, retrieved from places like AllocString. */ _value - атрибут(fakemeta_const.inc) ===== т.е. Code new Float:vAngles[3] entity_get_vector(id, EV_VEC_angles, vAngles) эквивалентно Code new Float:vAngles[3] pev(id, pev_angles, vAngles)
|
| |
|
|
| Rockon | Дата: Пятница, 07.11.2008, 10:43:41 | Сообщение # 10 |
 Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| Спасибо.. Чорт была бы репа - поднял до максимума
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |