AMX MOD X
Четверг, 01.01.2026, 02:07:28



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
поворачивает ли игрок на право лил на лево прицел
He_npeTДата: Воскресенье, 22.07.2007, 20:05:01 | Сообщение # 1
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Как зделать такой if: if (игрок поворачивает прицел на право || игрок поворачивает прицел на лево) { ?

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
slogicДата: Понедельник, 23.07.2007, 13:46:23 | Сообщение # 2
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
в prethink запоминай viewangle. в postthink читаешь новый viewangle. далее берешь две составляющие этого вектора, которые дают процекцию на горизонтальную плоскоять (какие именно - надо узнать экспериментально - я сейчас не готов ответить), ну и далее берешь угол между этими 2D векторами. Знак этого числа и определит направление поворта.

Сообщение отредактировал slogic - Понедельник, 23.07.2007, 13:47:19
 
He_npeTДата: Понедельник, 23.07.2007, 16:44:23 | Сообщение # 3
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Ничего не понимаю... sad

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
VENДата: Понедельник, 23.07.2007, 16:53:22 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
В prethink запоминаешь значение *_v_angle, если изменилось, значит прицел повернулся. По разнице старого и нового углов делаешь выводы о величине угла смещения.
 
He_npeTДата: Понедельник, 23.07.2007, 19:09:09 | Сообщение # 5
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Будет ведь xyz по координатам каты, или я тут чтото не так понимаю... Будет как: человек и его окружность или координаты определённой точки обекта нa который он смотрит? И какой из этих 3 данных точка по горизотнали?
Code

static Float:angle[3];
pev(id, pev_angles, angle);

И можно какнибудь зделать, чтобы для каждоко человека было отдельно? Вроде:
Code

static Float:angle[33][3];
pev(id, pev_angles, angle[id]);

токо правильно.


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Понедельник, 23.07.2007, 19:17:45
 
slogicДата: Понедельник, 23.07.2007, 20:11:22 | Сообщение # 6
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (He_npeT)
Будет ведь xyz по координатам каты

angle содержит вектор относительно игрока, а не относительно точки (0, 0, 0) на карте. Так что можно смело вычислять угол. Зачем я тебе говорил спроецировать на плоскость? Для того, чтобы узнать именно поворот, иначе можно "зацепить" наклоны.

В prethink и postthink forward функции передается аргумент id - индекс игрока. Проблем вообще нет. Они как раз и вызываются для каждого игрока.

 
He_npeTДата: Понедельник, 23.07.2007, 20:41:31 | Сообщение # 7
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Code

new bool:turning_right[33];
new bool:turning_left[33];

public client_PreThink(id) {
   static Float:angle[3];
   pev(id, pev_angles, angle);
}

public client_PostThink(id) {
   static Float:angle_old[3] = angle[3];  
   static Float:angle[3];
   pev(id, pev_angles, angle);
   if (angle_old[X] > angle[X]) {
     turning_left[id] = true;
     turning_right[id] = false;
   } else if (angle_old[X] < angle[X]) {
     turning_left[id] = false;
     turning_right[id] = true;
   } else {
     turning_left[id] = false;
     turning_right[id] = false;
   }
}

Тут я вижу несколько проблем: что вместо Х (1, 2, или 3?). неуверен нащёт static Float:angle_old[3] = angle[3];. ведь сначало идёт prethink над всеми игроками, я уже тогда posttink, то-есть id собъётся (вроде).

Да и к таму-же, если по глу игрока, то ведь токо 2 точки должны быть (причём тут дальность - z)?


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Понедельник, 23.07.2007, 20:48:35
 
slogicДата: Вторник, 24.07.2007, 15:11:04 | Сообщение # 8
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Вместо x - 1. Это yaw-угол. А вообще можешь слепить тестовый скрипт и убедиться.
ststic - неверное решение: во-первых ты хранишь только для одного игрока углы, а во-вторых, ты не обратишься к массиву из другой функции, т.к. область видимости этого массива (angle[3]) в prethink только внутри тела этой функции. Надо делать два глобальных двумерных массива.
 
He_npeTДата: Вторник, 24.07.2007, 17:24:05 | Сообщение # 9
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Code

new bool:turning_right[33];  
new bool:turning_left[33];  

new old_angle1[33];

public client_PreThink(id) {  
    static Float:angle[3];  
    pev(id, pev_angles, angle);  
    old_angle1[id] = angle[1];
}  

public client_PostThink(id) {  
    static Float:angle[3];  
    pev(id, pev_angles, angle);  
    if (old_angle1[id] > angle[1]) {  
      turning_left[id] = true;  
      turning_right[id] = false;  
    } else if (old_angle1[id] < angle[1]) {  
      turning_left[id] = false;  
      turning_right[id] = true;  
    } else {  
      turning_left[id] = false;  
      turning_right[id] = false;  
    }  
}  

Как я понел теперь правильно? wacko Но я всё= не понимаю что такое PostThink... PreThink как я знаю - это event который вызывается игроком на каждой его fps, но PostThink - чёрт знает...


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
slogicДата: Вторник, 24.07.2007, 20:55:37 | Сообщение # 10
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Как я понял, ты используешь engine модуль, а не fakemeta. PreThink вызывается до применения физики движка, а PostThink - после. Каждый FPS на сервере вызывается как раз функция server_frame(). PreThink/PostThink для группы игроков могут быть вызваны по нескольку раз между вызовами server_frame().

Quote (He_npeT)
Как я понел теперь правильно?

Вроде правильно (ты даже оптимизацию сделал). Только надо
Code

new Float:old_angle1[33];
 
He_npeTДата: Среда, 25.07.2007, 02:07:15 | Сообщение # 11
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Спасибо. +1. =]

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026