AMX MOD X
Суббота, 03.01.2026, 08:26:17



Приветствую Вас Гость | RSS
[ Главная ] [ Как узнать угол, на который повёрнут игрок? - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Как узнать угол, на который повёрнут игрок?
RockonДата: Вторник, 04.11.2008, 07:45:28 | Сообщение # 1
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
Доброго времени суток! )
Собственно у меня ещё один вопрос.
Как мне узнать угол, на который повёрнут игрок?
про angle не говорите, что есть - лучше объясните, как им пользоваться? Проблема в том, что я пытаюсь создать респавн с себя: свои координаты я узнал - это несложно, но вот на какой угол я повёрнут - я не понял, как это вычислять..

Было бы здорово, если бы кто-нибудь толком написал..

 
KokaДата: Вторник, 04.11.2008, 09:39:05 | Сообщение # 2
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
узнаем угол на который повернута энтити

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) // приминяем изменения

так ? blink


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Вторник, 04.11.2008, 09:43:54
 
DaTaДата: Вторник, 04.11.2008, 13:19:18 | Сообщение # 3
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
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
Репутация: 1
Статус: Не в сети
спасибо огромное - очень не хватало такой статьи. Сразу всё понятно стало. Сейчас посмотрю и возомжно будут новые вопросы, как же без них? :)

Добавлено (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
Репутация: 47
Статус: Не в сети
Player Spawn Points Fixer (PSP Fixer) плагин смотрел? Он исправляет угол точек респавна игроков.
 
RockonДата: Среда, 05.11.2008, 02:53:40 | Сообщение # 6
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
Честно говоря - я не знаю функций, что там используются, поэтому смотреть исходник мне тяжеловато..

Добавлено (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);  

Бред конечно но я так парился, чтобы это понять blush

Сообщение отредактировал Rockon - Вторник, 04.11.2008, 16:38:59
 
slogicДата: Среда, 05.11.2008, 17:13:49 | Сообщение # 7
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Тебе пивели пример
Quote (Koka)
pev(ent, pev_angles, MyVec)

Чего не спроил, что означает параметр ent - не понимаю. Запомни, все сущности с индексами от 1 до 32 (на самом деле maxplayers) - зарезервированы для игроков.
 
RockonДата: Четверг, 06.11.2008, 14:13:26 | Сообщение # 8
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
я тогда уже понял - что ent был индексом. Я вместо него ставил id..
Моя проблема то была в другом. У меня угол был вечно равен нулю. Хотя я брал пример с твоего плагина.
И ещё я так и не понял, почему у тебя в твоём плагине был не pev а EV_VEC_angles.. Тогда откуда pev? Сокращение какое то?


Сообщение отредактировал Rockon - Четверг, 06.11.2008, 14:17:18
 
DaTaДата: Пятница, 07.11.2008, 00:45:58 | Сообщение # 9
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
У амхх скриптера есть два инструмента, которыми он работает с атрибутами 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
Репутация: 1
Статус: Не в сети
Спасибо.. Чорт была бы репа - поднял до максимума blush
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026