SDKHook_SetTransmit

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Такая дилемма, SDKHook отрабатывает, но проверка работы OnTransmit молчит.. Подскажите ошибку
C-подобный:
#include <sdkhooks>
#include <sdktools>

public void OnPluginStart()
{
    RegConsoleCmd("sm_t", CmdSpawnEnt);
}

public void OnMapStart()
{
    PrecacheModel("materials/file.vmt");
}

public Action CmdSpawnEnt(int client, any args)
{
    float fPos[3];
    GetClientEyePosition(client, fPos)
    int iEntity = CreateEntityByName("env_sprite_oriented");
    DispatchKeyValue(iEntity, "classname", "env_sprite_oriented");
    DispatchKeyValue(iEntity, "model", "materials/file.vmt");
    DispatchKeyValueVector(iEntity, "origin", fPos);
    SetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity", client);
    SDKHook(iEntity, SDKHook_SetTransmit, OnTransmit);
    DispatchSpawn(iEntity);
    TeleportEntity(iEntity, fPos, NULL_VECTOR, NULL_VECTOR);
    return Plugin_Changed;
}

public Action OnTransmit(int iEntity, int client)
{
    PrintToChatAll("[%d]", iEntity);
    return Plugin_Changed;
}
 

Nebraska

Участник
Сообщения
225
Реакции
293
C-подобный:
float fPos[3];
GetClientEyePosition(client, fPos);
int iEntity = CreateEntityByName("env_sprite_oriented");
if (iEntity != -1)
{
    DispatchKeyValue(iEntity, "classname", "env_sprite_oriented");
    DispatchKeyValue(iEntity, "model", "materials/file.vmt");
    DispatchKeyValueVector(iEntity, "origin", fPos);
    SetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity", client);
   
    if (DispatchSpawn(iEntity))
    {
        SDKHook(iEntity, SDKHook_SetTransmit, OnTransmit);
    }
}
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
C-подобный:
float fPos[3];
GetClientEyePosition(client, fPos);
int iEntity = CreateEntityByName("env_sprite_oriented");
if (iEntity != -1)
{
    DispatchKeyValue(iEntity, "classname", "env_sprite_oriented");
    DispatchKeyValue(iEntity, "model", "materials/file.vmt");
    DispatchKeyValueVector(iEntity, "origin", fPos);
    SetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity", client);
  
    if (DispatchSpawn(iEntity))
    {
        SDKHook(iEntity, SDKHook_SetTransmit, OnTransmit);
    }
}
Без изменений, реакции от OnTransmit нет
 

GoDtm666

Участник
Сообщения
580
Реакции
589
Попробуйте через таймер или на следующем фрейме хук сделать.
 

Reidenshi

Участник
Сообщения
42
Реакции
14
v34? Работать не будет, я все перепробовал
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@GoDtm666, прикол в том, что в практически одинаковом коде (и класс энтити совпадает) в разных плагинах SDKHook_SetTransmit может как работать, так и не работать.
Если что я про свои Server WH и Revival говорю, как пример. В обоих случаях вешается хук на спрайты, но в Server WH хук работает как положено, а в Revival (в разное время раза три, не меньше, пытался реализовать) - не работает.
Сообщения автоматически склеены:

Даже код работы с хуками можно сравнить:
 

komashchenko

Идиот
Сообщения
916
Реакции
2,569
C++:
#include <sdkhooks>
#include <sdktools>

public void OnPluginStart()
{
    RegConsoleCmd("sm_t", CmdSpawnEnt);
}

public void OnMapStart()
{
    PrecacheModel("materials/file.vmt");
}

Action CmdSpawnEnt(int client, any args)
{
    float fPos[3];
    GetClientEyePosition(client, fPos)
    int iEntity = CreateEntityByName("env_sprite_oriented");
    DispatchKeyValue(iEntity, "classname", "env_sprite_oriented");
    DispatchKeyValue(iEntity, "model", "materials/file.vmt");
    DispatchKeyValueVector(iEntity, "origin", fPos);
    SetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity", client);
    DispatchSpawn(iEntity);
    SetEdictFlags(iEntity, GetEdictFlags(iEntity) & ~FL_EDICT_ALWAYS);
    SDKHook(iEntity, SDKHook_SetTransmit, OnTransmit);
    TeleportEntity(iEntity, fPos, NULL_VECTOR, NULL_VECTOR);
    
    return Plugin_Changed;
}

Action OnTransmit(int iEntity, int client)
{
    SetEdictFlags(iEntity, GetEdictFlags(iEntity) & ~FL_EDICT_ALWAYS);
    
    PrintToChatAll("[%d]", iEntity);
    
    return Plugin_Changed;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
DispatchSpawn(iEntity);
TeleportEntity(iEntity, fPos, NULL_VECTOR, NULL_VECTOR);
Поменяй местами, т.к. лучше делать TeleportEntity() до DispatchSpawn(): на АМ пишут, что может вызвать проблемы.
изображение_2022-10-23_141425.png


@komashchenko, если использовано DispatchKeyValueVector(iEntity, "origin", fPos);, то TeleportEntity(iEntity, fPos, NULL_VECTOR, NULL_VECTOR); уже вроде и не требуется (проверено не раз).

И ещё: м/б добавить ещё пару флагов которые будут выключаться на всякий случай?
Я про FL_EDICT_DONTSEND и FL_EDICT_PVSCHECK: SetEdictFlags(iEntity, GetEdictFlags(iEntity) & ~(FL_EDICT_ALWAYS|FL_EDICT_DONTSEND|FL_EDICT_PVSCHECK));
Сообщения автоматически склеены:

Описание самих флагов:
 
Последнее редактирование:
Сверху Снизу