Установка камеры игрока по нужным координатам

Nova

Simple Project
Сообщения
262
Реакции
28
Как установить и заморозить камеру мёртвого игрока по нужным координатам?
 
Последнее редактирование:

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как установить и заморозить камеру мёртвого игрока по нужным координатам?
Запретить переменной переключение на игроков (смотреть за живым игроками) и каждый тик телепортировать игрока в нужную позицию, так его камера будет заморожена в одном положении
 

Nova

Simple Project
Сообщения
262
Реакции
28
Запретить переменной переключение на игроков (смотреть за живым игроками) и каждый тик телепортировать игрока в нужную позицию, так его камера будет заморожена в одном положении
Вопрос совершенно не про переменную mp_forcecamera.
У меня есть координаты, нужно перемести по ним камеру мёртвого игрока. Желательно конкретный пример кода.
 

SIRIUS

♿___DejaVu
Сообщения
509
Реакции
253
Вопрос совершенно не про переменную mp_forcecamera.
У меня есть координаты, нужно перемести по ним камеру мёртвого игрока. Желательно конкретный пример кода.
Ну так тебе ответили ясно и понятно. Запрет для того чтобы игрок не мог переключать камеру.
 

Nova

Simple Project
Сообщения
262
Реакции
28
Т.е. если я спрашиваю "Как установить камеру игрока по нужным координатам?" и при этом прошу пример кода, а вы, перефразировав мой вопрос, отвечаете "телепортировать игрока в нужную позицию", то это является ответом?
Я уже понял, что нужно сделать, я не знаю как именно на уровне кода это реализовать.
 
Последнее редактирование:

panikajo

Участник
Сообщения
866
Реакции
231
@Nova, Ты спросил тебе ответили, уточняй свой вопрос. Напиши мне нужен пример кода -_-
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Вопрос совершенно не про переменную mp_forcecamera.
У меня есть координаты, нужно перемести по ним камеру мёртвого игрока. Желательно конкретный пример кода.
C-подобный:
bool g_bPlayerAlive[MAXPLAYERS+1];

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public Action Event_PlayerDeath(Event event, char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    g_bPlayerAlive[client] = false;
}

public Action Event_PlayerSpawn(Event event, char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    g_bPlayerAlive[client] = true;
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
{
    if(!g_bPlayerAlive[client] || !IsClientInGame(client) || IsFakeClient(client))
        return;

    TeleportEntity(client, <позиция камеры>, <угол поворота камеры>, NULL_VECTOR);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@iLoco, можно ещё чуть короче:
C-подобный:
#include <sdktools_functions>

bool g_bAlive[MAXPLAYERS+1];

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Player);
    HookEvent("player_death", Event_Player);
}

public Action Event_Player(Event event, char[] name, bool dontBroadcast)
{
    g_bAlive[GetClientOfUserId(event.GetInt("userid"))] = name[7] == 's';
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    if(!g_bAlive[client] && IsClientInGame(client) && !IsFakeClient(client))
        TeleportEntity(client, <позиция_камеры>, <угол_поворота_камеры>, NULL_VECTOR);
}
И ещё: у тебя камеру перемещает живому =)
Сообщения автоматически склеены:

И ещё: в OnPlayerRunCmd(), емнип, IsFakeClient(client) никогда не бывает true (у ботов управление иначе работает, видимо).
 
Последнее редактирование:

xtance

Участник
Сообщения
513
Реакции
743
Если на координатах висит какая-нибудь ентити (ну вдруг..) то можно обойтись без постоянного телепорта
C-подобный:
SetClientViewEntity(iClient, iEntity);
SetEntPropEnt(iClient, Prop_Send, "m_hObserverTarget", 0);
SetEntProp(iClient, Prop_Send, "m_iObserverMode", 1);
SetEntProp(iClient, Prop_Send, "m_bDrawViewmodel", 0);
SetEntPropVector(iEntity, Prop_Data, "m_angRotation", view_as<float>({0.0,90.0,0.0})); // по желанию
P.S. тестировалось мало
 
Сверху Снизу