Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 212»
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Изменение углов (Angles) (Заставить смотреть на предмет/другого игрока/объект)
Изменение углов (Angles)
sssw Дата: Воскресенье, 25.03.2012, 18:47:50 | Сообщение # 1
Сообщений: 123
Репутация: 14 [ +/- ]
Можно ли задать у модели angles направленый к info_target?

Добавлено (25.03.2012, 18:47:50)
---------------------------------------------
или на энтити по индексу
 
_wS_ Дата: Воскресенье, 25.03.2012, 23:02:23 | Сообщение # 2
В EventScripts есть рабочая команда playerset viewcoord <userid> <x> <y> <z> (можешь найти код в addons\eventscripts\corelib\playergetset). Попробовал ее перевести на SM, но результат не порадовал: домашний сервер вылетает с ошибкой Runtime error R6002 floating point not loaded (хз как ее исправить, в интернете один хлам на счет нее).

Закинул скрипт на сервер, который на хосте - функция работает не всегда, даже лучше будет сказать редко. Хотя может я где-то и промазал, позже еще попробую. Т.е. сделать это не так и просто, нужны определённые геометрические знания/формулы, так что я понятия не имею, ибо не дружу с геометрией.
 
_wS_ Дата: Понедельник, 26.03.2012, 03:48:22 | Сообщение # 3
Мучал мучал эту функцию, вот она:
Код
stock SetLookAtEntity(client, entity_index)
{
     decl Float:Client_Origin[3], Float:VEC[3], Float:VecPoints[3], Float:NewAngles[3];
     GetEntPropVector(client, Prop_Send, "m_vecOrigin", Client_Origin);
     GetEntPropVector(entity_index, Prop_Send, "m_vecOrigin", VEC);
     MakeVectorFromPoints(Client_Origin, VEC, VecPoints);
     GetClientEyeAngles(client, VEC);

     new Float:Atan = RadToDeg(ArcTangent(VecPoints[1] / VecPoints[0]));
     if (VecPoints[0] < 0) NewAngles[1] = Atan + 180.0;
     else if (VecPoints[1] < 0) NewAngles[1] = Atan + 360.0;
     else NewAngles[1] = Atan;

     NewAngles[2] = VEC[2];
     NewAngles[0] = 0.0 - RadToDeg(ArcTangent(VecPoints[2] / SquareRoot(Pow(VecPoints[1], 2.0) + Pow(VecPoints[0], 2.0))));

     TeleportEntity(client, Client_Origin, NewAngles, NULL_VECTOR);
}

client - индекс игрока, entity_index - объект, в сторону которого игрок будет смотреть (это может быть игрок или какой-то предмет и тд). Можно не только игрока заставлять смотреть на entity_index, но тогда надо будет заменить GetClientEyeAngles.
 
sssw Дата: Понедельник, 26.03.2012, 08:04:56 | Сообщение # 4
Сообщений: 123
Репутация: 14 [ +/- ]
Ооо... Как Хорошо осталось мне все ещё две задачки после чело, полу авто-матическая турель будет готова..
 
horr0r Дата: Воскресенье, 24.06.2012, 22:30:31 | Сообщение # 5
Сообщений: 149
Репутация: 40 [ +/- ]
Спасибо за функцию, вопрос, возможно узнать есть ли там какое либо препятствие? стена к примеру. Аим сделал))
 
_wS_ Дата: Понедельник, 25.06.2012, 18:25:01 | Сообщение # 6
Пример есть в плагине Obstacle_Kill
 
sssw Дата: Понедельник, 04.11.2013, 05:36:31 | Сообщение # 7
Сообщений: 123
Репутация: 14 [ +/- ]
Цитата _wS_ ()
Мучал мучал эту функцию и все-таки наконец-то получилось
Очень нужная функция. Часто применяемая мной.
 
tolik1231 Дата: Пятница, 03.02.2017, 17:47:49 | Сообщение # 8
Сообщений: 46
Репутация: 0 [ +/- ]
_wS_, использую вашу функция для предмета (чтоб предмет смотрел на игрока) в таймере 0.1 с а поворачивает предмет примерно в 1 секунду. почему так происходит ? функция не успевает сработать так быстро или почему?
 
_wS_ Дата: Пятница, 03.02.2017, 17:53:42 | Сообщение # 9
Цитата tolik1231 ()
_wS_, использую вашу функция для предмета (чтоб предмет смотрел на игрока) в таймере 0.1 с а поворачивает предмет примерно в 1 секунду. почему так происходит ? функция не успевает сработать так быстро или почему?

Не должно быть такого чтоб не успевала, попробуй с другим предметом или игрока пусть поворачивает.
Тут была другая функция, более простая, меньше кода и делает тоже самое, видимо кто-то передумал ей делиться, сейчас если вспомню код, дам.
 
хвостег Дата: Пятница, 03.02.2017, 18:06:22 | Сообщение # 10
Сообщений: 161
Репутация: 53 [ +/- ]
http://world-source.ru/forum/102-3754-22657-16-1402047537
можно заменить GetClientAbsOrigin(client, EntPos); на GetClientEyePosition(client, EntPos);
должно быть нормально.
 
_wS_ Дата: Пятница, 03.02.2017, 18:16:16 | Сообщение # 11
Цитата хвостег ()
http://world-source.ru/forum/102-3754-22657-16-1402047537
можно заменить GetClientAbsOrigin(client, EntPos); на GetClientEyePosition(client, EntPos);
должно быть нормально.

Сделал тест плаг, проверил, скопировал код, иду вставлять сюда, но тут уже =)
Да да, лучше эту штуку использовать.
 
tolik1231 Дата: Пятница, 03.02.2017, 18:42:39 | Сообщение # 12
Сообщений: 46
Репутация: 0 [ +/- ]
хвостег, _wS_, спасибо ребята, буду пробовать с новой функций =) результат отпишу =)

Добавлено (03.02.2017, 18:40:00)
---------------------------------------------
stock setAng(prop, const Float:Pos[3])
{
new Float:EntPos[3];
GetEntPropVector(prop, Prop_Data, "m_angRotation", EntPos);

new Float:Dir[3];
MakeVectorFromPoints(EntPos, Pos, Dir);
GetVectorAngles(Dir, Dir);

TeleportEntity(prop, NULL_VECTOR, Dir, NULL_VECTOR);
}

Вызов функции:
new Float:Pos[3];
GetClientAbsOrigin(client, Pos);
EntPos[2] += 30.0; //Приподнял чутка чтоб не в ноги смотрел.
setAng(prop, Pos);

Вообще ниче не происходит(

Добавлено (03.02.2017, 18:42:39)
---------------------------------------------
_wS_, хвостег, сразу замечу игра ксго.

 
хвостег Дата: Пятница, 03.02.2017, 18:47:43 | Сообщение # 13
Сообщений: 161
Репутация: 53 [ +/- ]
Код
stock setAng(prop, const Float:Pos[3])
{
    new Float:EntPos[3];
    GetEntPropVector(prop, Prop_Data, "m_vecOrigin", EntPos);
    
    new Float:Dir[3];
    MakeVectorFromPoints(EntPos, Pos, Dir);
    GetVectorAngles(Dir, Dir);
    
    TeleportEntity(prop, NULL_VECTOR, Dir, NULL_VECTOR);
}
 
tolik1231 Дата: Пятница, 03.02.2017, 19:11:05 | Сообщение # 14
Сообщений: 46
Репутация: 0 [ +/- ]
да да, исправил - протестил, поворачивается предмет в среднем раз в 1 сек хотя таймер стоит 0.1 ...

опишу ситуацию AcceptEntityInput(AnimModel, "SetParent", C4Hostage, AnimModel, 0);

есть 2 модели AnimModel привязана к C4Hostage
Делаю setAng(C4Hostage , Pos) каждую 0.1 секунду C4Hostage (она не видимая) а AnimModel видимая и повторяет движения за C4Hostage

вот такая карусель )))

Добавлено (03.02.2017, 19:02:52)
---------------------------------------------
Функция то работает верно, но вот не так быстро(

Добавлено (03.02.2017, 19:11:05)
---------------------------------------------
Проверил без привязки другой моделе, все равно попорачивает раз в 1 сек а не раз в 0.1 сек, очень прошу если кого-то заинтерисовал этот момент попробуйте повертеть предмет сами раз в 0.1 сек, он должен смотреть на игрока.

 
хвостег Дата: Пятница, 03.02.2017, 19:40:32 | Сообщение # 15
Сообщений: 161
Репутация: 53 [ +/- ]
Код
#pragma semicolon 1

#include <sdktools>

public OnPluginStart()
{
    RegConsoleCmd("sm_prop", CMD_Prop);
}

stock TestProp(const Float:pos[3], const Float:ang[3], const String:model[])
{
    new prop = CreateEntityByName("prop_dynamic_override");
    if(!IsValidEntity(prop))
    {
  PrintToChatAll("Invalid Entity O_O'");
  return INVALID_ENT_REFERENCE;
    }
    
    DispatchKeyValue(prop, "model", model);
    DispatchKeyValueVector(prop, "origin", pos);
    DispatchKeyValueVector(prop, "angles", ang);
    
    if(!DispatchSpawn(prop))
    {
  PrintToChatAll("Entity Not Spawn O_O'");
  AcceptEntityInput(prop, "kill");
  return INVALID_ENT_REFERENCE;
    }
    
    SetEntProp(prop, Prop_Send, "m_usSolidFlags", 12);
    SetEntProp(prop, Prop_Send, "m_nSolidType",   2);
    
    return EntIndexToEntRef(prop);
}

stock MakeAnglesFromPoints(const Float:pt1[3], const Float:pt2[3], Float:output[3])
{
    MakeVectorFromPoints(pt1, pt2, output);
    GetVectorAngles(output, output);
}

public Action:CMD_Prop(client, args)
{
    new Float:pos[3];
    GetClientAbsOrigin(client, pos);
    
    new Handle:data;
    CreateDataTimer(0.1, Timer_Update, data, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
    
    WritePackCell(data, client);
    WritePackCell(data, TestProp(pos, Float:{0.0,0.0,0.0}, "models/player/ct_sas.mdl"));
    return Plugin_Handled;
}

public Action:Timer_Update(Handle:Timer, Handle:data)
{
    ResetPack(data);
    
    new client = ReadPackCell(data);
    new prop   = EntRefToEntIndex(ReadPackCell(data));
    
    if(prop != INVALID_ENT_REFERENCE)
    {
  if(IsClientInGame(client) && IsPlayerAlive(client))
  {
   new Float:pt1[3], Float:pt2[3], Float:angles[3];
   GetEntPropVector(prop, Prop_Data, "m_vecOrigin", pt1);
   GetClientAbsOrigin(client, pt2);
   
   MakeAnglesFromPoints(pt1, pt2, angles);
   
   TeleportEntity(prop, NULL_VECTOR, angles, NULL_VECTOR);
   return Plugin_Continue;
  }
  AcceptEntityInput(prop, "kill");
    }
    return Plugin_Stop;
}

Прикрепления: test_ang.sp(2Kb)
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Изменение углов (Angles) (Заставить смотреть на предмет/другого игрока/объект)
Страница 1 из 212»
Поиск: