Teleport on kill GAMEMODE

КАЙМАН

Клоун
Сообщения
517
Реакции
88
У кого есть подобный плагин ? Кто знает как такое сделать ?
 
Решение
Так как на видео . Я не знаю что такое вейпоинт .
C++:
#include <sdktools_functions>

public void OnMapStart() { HookEvent("player_death", EventPlayerDeath); }

public void EventPlayerDeath(Event hEvent, const char[] sEvent, bool bdb)
{
    int client = GetClientOfUserId(hEvent.GetInt("userid"));
    int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
    float eye[3], pos[3];
    GetClientEyePosition(client, pos);
    GetClientEyeAngles(attacker, eye);
    if(0 < client <= MaxClients && !IsFakeClient(client)) TeleportEntity(attacker, pos, eye, {999.0, 999.0, 999.0});
}

КАЙМАН

Клоун
Сообщения
517
Реакции
88
Реализация обычным телепортом или прям вейпоинтом как на видео?
Как на видео . Чтобы при убийстве тебя моментально тепало на его место . Было бы интересно сделать такой сервер )
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,839
Как на видео . Чтобы при убийстве тебя моментально тепало на его место . Было бы интересно сделать такой сервер )
На видео не моментально, на мой вопрос конкретнее ответьте
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,839
Так как на видео . Я не знаю что такое вейпоинт .
C++:
#include <sdktools_functions>

public void OnMapStart() { HookEvent("player_death", EventPlayerDeath); }

public void EventPlayerDeath(Event hEvent, const char[] sEvent, bool bdb)
{
    int client = GetClientOfUserId(hEvent.GetInt("userid"));
    int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
    float eye[3], pos[3];
    GetClientEyePosition(client, pos);
    GetClientEyeAngles(attacker, eye);
    if(0 < client <= MaxClients && !IsFakeClient(client)) TeleportEntity(attacker, pos, eye, {999.0, 999.0, 999.0});
}
 
Решение

Grey83

не пишу плагины с весны 2022
Сообщения
8,823
Реакции
5,261
@Palonez, а для чего задавать такую скорость?
Там скорее NULL_VECTOR нужно ставить.

И проверку нужно делать не перед телепортом, а сразу после получения индекса жертвы.
Ну ещё и забыл проверить жив ли убийца (привет убийство гранатой после смерти) и не является ли смерть суицидом.
А проверка был ли убитый ботом тут ни к чему, кмк.
Сообщения автоматически склеены:

И ещё: почему ты телепортируешь игрока на позицию глаз жервы?
Кроме того углы взгляда при телепортации узнавать не нужно (достаточно указать в качестве углов NULL_VECTOR, чтобы угол поворота телепортируемого игрока не менялся).

Ну и самое важное: хук события нужно создавать в OnPluginStart(), а не OnMapStart(). Иначе у тебя при каждой смене карты будет добавляться один хук события пока сервер не перезапустится.

В общем должно было получиться что-то типа этого:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>

float fPos[3];

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

public void EventPlayerDeath(Event hEvent, const char[] sEvent, bool bdb)
{
    int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
    if(!attacker || !IsClientInGame(attacker))
        return;

    int client = GetClientOfUserId(hEvent.GetInt("userid"));
    if(!client || client == attacker || !IsClientInGame(client))
        return;

    GetClientAbsOrigin(client, fPos);
    TeleportEntity(attacker, fPos, NULL_VECTOR, NULL_VECTOR);
}
 
Последнее редактирование:

Palonez

бб братки
Сообщения
3,035
Реакции
1,839
@Palonez, а для чего задавать такую скорость?
Там скорее NULL_VECTOR нужно ставить.

И проверку нужно делать не перед телепортом, а сразу после получения индекса жертвы.
Ну ещё и забыл проверить жив ли убийца (привет убийство гранатой после смерти) и не является ли смерть суицидом.
А проверка был ли убитый ботом тут ни к чему, кмк.
Сообщения автоматически склеены:

И ещё: почему ты телепортируешь игрока на позицию глаз жервы?
Кроме того углы взгляда при телепортации узнавать не нужно (достаточно указать в качестве углов NULL_VECTOR, чтобы угол поворота телепортируемого игрока не менялся).

Ну и самое важное: хук события нужно создавать в OnPluginStart(), а не OnMapStart(). Иначе у тебя при каждой смене карты будет добавляться один хук события пока сервер не перезапустится.

В общем должно было получиться что-то типа этого:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>

float fPos[3];

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

public void EventPlayerDeath(Event hEvent, const char[] sEvent, bool bdb)
{
    int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
    if(!attacker || !IsClientInGame(attacker))
        return;

    int client = GetClientOfUserId(hEvent.GetInt("userid"));
    if(!client || client == attacker || !IsClientInGame(client))
        return;

    GetClientAbsOrigin(client, fPos);
    TeleportEntity(attacker, fPos, NULL_VECTOR, NULL_VECTOR);
}
NULL_VECTOR тпшит же моментально, а тут нужно сглаженно к нему прилететь
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,823
Реакции
5,261
Правда я не уверен что хукать нужно с флагом EventHookMode_Post, а не EventHookMode_Pre (после смерти позиция игрока меняется, да и не факт что и Pre поможет, возможно нужно будет просто менять значение по оси Z на меньшее).

Я в Revival запоминаю позицию смерти и меняю значение оси Z (она при смерти и EventHookMode_Postстановится той, же что и положения глаз вроде):
C-подобный:
    GetClientAbsOrigin(client, fDeathPos[client]);
    fDeathPos[client][2] -= 40;
Сообщения автоматически склеены:

@Palonez, тут скорее игрока после телепортации пнёт пнёт в небо.
 

Вложения

  • изображение_2023-01-17_224925.png
    изображение_2023-01-17_224925.png
    12.9 КБ · Просмотры: 29

Palonez

бб братки
Сообщения
3,035
Реакции
1,839
Правда я не уверен что хукать нужно с флагом EventHookMode_Post, а не EventHookMode_Pre (после смерти позиция игрока меняется, да и не факт что и Pre поможет, возможно нужно будет просто менять значение по оси Z на меньшее).

Я в Revival запоминаю позицию смерти и меняю значение оси Z (она при смерти и EventHookMode_Postстановится той, же что и положения глаз вроде):
C-подобный:
    GetClientAbsOrigin(client, fDeathPos[client]);
    fDeathPos[client][2] -= 40;
Сообщения автоматически склеены:

@Palonez, тут скорее игрока после телепортации пнёт пнёт в небо.
Мне кажется его должно пнуть по направлению взгляда, никогда не ставил скорость)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,823
Реакции
5,261
@Palonez, открой код плагина двойного прыжка и глянь как там параметры прописаны. =)
 
Сверху Снизу