Изменение углов (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 |
|
|
|
| |
sssw
|
Дата: Понедельник, 04.11.2013, 05:36:31 | Сообщение # 7 |
|
Сообщений: 123
Репутация: 14 [ +/- ]
|
|
Цитата _wS_ ( ) Мучал мучал эту функцию и все-таки наконец-то получилось Очень нужная функция. Часто применяемая мной.
|
|
| |
tolik1231
|
Дата: Пятница, 03.02.2017, 17:47:49 | Сообщение # 8 |
|
Сообщений: 71
Репутация: -1 [ +/- ]
|
|
_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 |
|
Сообщений: 71
Репутация: -1 [ +/- ]
|
|
хвостег, _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 |
|
Сообщений: 71
Репутация: -1 [ +/- ]
|
|
да да, исправил - протестил, поворачивается предмет в среднем раз в 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; }
Гости не могут скачивать файлы
|
|
|
| |
|