AMX MOD X
Пятница, 09.01.2026, 20:31:31



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Построение вектора дропа
BruteДата: Четверг, 28.08.2008, 13:34:25 | Сообщение # 1
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Нужно запрограммировать вектор дропа оружия. Ентити должно родится в той точке, где стоит игрок(это работает), и полететь туда, куда направлен игрок(летит! Но совсем не туда!).
Code
public CreateDropItem(id)
{
  new eid = create_entity("info_target") //получаем entity index от движка

  entity_set_string(eid, EV_SZ_classname, "weaponbox") //создаём класс ентити  
  entity_set_model(eid, "models/w_ak74.mdl") //используем модель ак47

  // setup entity start origin
  new origin[3]
  get_user_origin(id, origin, 0) //получаем позицию игрока
  new Float:ent_origin[3]
  ent_origin[0]=float(origin[0])  
  ent_origin[1]=float(origin[1])
  ent_origin[2]=float(origin[2])
  entity_set_origin(eid, ent_origin) //устанавливаем стартовую позицию ентити
  entity_set_int(eid, EV_INT_solid, SOLID_TRIGGER) //устанавливаем твердость ентити
  entity_set_int(eid, EV_INT_movetype, MOVETYPE_TOSS) //устанавливаем тип перемещения в пространстве
  entity_set_edict(eid, EV_ENT_owner, id) //устанавливаем ентити хозяина

//--------------------------------------------------------------
  // setup entity angles
  new Float:ent_angles[3]
  entity_get_vector(id, EV_VEC_angles, ent_angles) //получаем угол игрока
  entity_set_vector(eid, EV_VEC_angles, ent_angles) //устанавливаем угол ентити такой-же, как и у игрока
//--------------------------------------------------------------
//А ТУТ Я ВООБЩЕ НЕХРЕНА НЕ ПОНИМАЮ, ЧТО И КАК, И ДЛЯ ЧЕГО ЭТО НУЖНО

  // setup entity velocity
  new Float:ent_anglevec[3]
  entity_get_vector(id, EV_VEC_v_angle, ent_anglevec)
  entity_set_vector(eid, EV_VEC_v_angle, ent_anglevec)

  get_global_vector(GL_v_forward, ent_anglevec)
  new Float:ent_velocity[3]
  ent_velocity[0] = ent_anglevec[0] * 350
  ent_velocity[1] = ent_anglevec[1] * 350
  ent_velocity[2] = ent_anglevec[2] * 350
  entity_set_vector(eid, EV_VEC_velocity, ent_velocity)
}
 
draftДата: Четверг, 28.08.2008, 14:09:15 | Сообщение # 2
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
1) Что это за entity?
2) Я не вижу в коде функции, которая говорит entity куда-то лететь. Просто установлена скорость и направление.
 
DaTaДата: Четверг, 28.08.2008, 14:20:46 | Сообщение # 3
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
vector.inc
Code
/* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */
native velocity_by_aim(iIndex, iVelocity, Float:vRetValue[3]);
 
BruteДата: Четверг, 28.08.2008, 14:47:49 | Сообщение # 4
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Quote (draft)
2) Я не вижу в коде функции, которая говорит entity куда-то лететь. Просто установлена скорость и направление.

Ну напиши тогда код, как это должно выглядеть.
Quote (DaTa)

/* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */
native velocity_by_aim(iIndex, iVelocity, Float:vRetValue[3]);

/* Дает Вам скорость в направлении, игрок смотрит, Скорость - множитель. */
Это скорость, а мне бы направление, и объяснение как вектор построить :)

Добавлено (2008-08-28, 2:47 Pm)
---------------------------------------------
Однако работает! B)

Code
public CreateDropItem(id)
{
  new eid = create_entity("info_target")

  entity_set_string(eid, EV_SZ_classname, "weaponbox")
  entity_set_model(eid, "models/ak47.mdl")

  new origin[3]
  get_user_origin(id, origin, 0)
  new Float:ent_origin[3]
  ent_origin[0]=float(origin[0])
  ent_origin[1]=float(origin[1])
  ent_origin[2]=float(origin[2])
  entity_set_origin(eid, ent_origin)

  entity_set_int(eid, EV_INT_solid, SOLID_TRIGGER)
  entity_set_int(eid, EV_INT_movetype, MOVETYPE_TOSS)
  entity_set_edict(eid, EV_ENT_owner, id)

  new Float:ent_angles[3]
  entity_get_vector(id, EV_VEC_angles, ent_angles)
  entity_set_vector(eid, EV_VEC_angles, ent_angles)

  new Float:ent_velocity[3]
  velocity_by_aim(id, 350, ent_velocity)
  entity_set_vector(eid, EV_VEC_velocity, ent_velocity)
}

СПАСИБО!

 
DaTaДата: Четверг, 28.08.2008, 14:49:28 | Сообщение # 5
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Float:vRetValue[3] - вектор скорости

Code
static Float:vVelocity[3]
velocity_by_aim(id, 300, vVelocity)
set_pev(id2, pev_velocity, vVelocity)

id2 будет двигаться в направлении, куда смотрит id, со скалярной скоростью 300
 
BruteДата: Четверг, 28.08.2008, 15:02:33 | Сообщение # 6
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Quote (DaTa)
id2 будет двигаться в направлении, куда смотрит id, со скалярной скоростью 300

Пока не достигнет земли, это я уже проверил.
Code

   entity_set_vector(eid, EV_VEC_v_angle, ent_anglevec)
   get_global_vector(GL_v_forward, ent_anglevec)

А это что за вектора с префиксом V
 
DaTaДата: Четверг, 28.08.2008, 15:19:00 | Сообщение # 7
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (Brute)

Пока не достигнет земли, это я уже проверил.

можешь попробывать устанавливать MOVETYPE разный или реализовать свою обработку физики, если это тебя не устраивает
Quote (Brute)
А это что за вектора с префиксом V

EV_VEC_v_angle(pev_v_angel, vec3_t v_angle) - углы взгляда игрока, входе x, y, roll(поворот экрана вокруг центра)
HLSDK pm_move
Code
// up / down
#define    PITCH    0
// left / right
#define    YAW  1
// fall over
#define    ROLL    2

GL_v_forward(glb_v_forward, gpGlobals->v_forward) - нормаль прямого вектора, результат подсчета некоторых функций движка

Сообщение отредактировал DaTa - Четверг, 28.08.2008, 15:24:18
 
BruteДата: Суббота, 13.09.2008, 08:04:18 | Сообщение # 8
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
почти всегда, до всего дохожу сам!
Вот целая рабочая процедура:
Code
public CreateDrop(id, classname[], model[], speed)
{
new eid = create_entity("info_target")

entity_set_string(eid, EV_SZ_classname, classname)
entity_set_model(eid, model)

entity_set_int(eid, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(eid, EV_INT_movetype, MOVETYPE_TOSS)
entity_set_edict(eid, EV_ENT_owner, id)

new Float:origin[3], Float:angles[3], Float:velocity[3]
entity_get_vector(id, EV_VEC_origin, origin)
entity_get_vector(id, EV_VEC_angles, angles)

entity_set_vector(eid, EV_VEC_origin, origin)
velocity[0] = float(speed) * floatcos(angles[1], degrees)
velocity[1] = float(speed) * floatsin(angles[1], degrees)
entity_set_vector(eid, EV_VEC_velocity, velocity)
angles[0] = 0.0
entity_set_vector(eid, EV_VEC_angles, angles)
}

где "speed" - длина вектора дропа в точках(растоянее на которое итем будет выкинут).
Прикрепления: 6523256.txt (0.7 Kb)


Сообщение отредактировал Brute - Суббота, 13.09.2008, 08:04:37
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026