Вылеты из игры во время скрытия моделей (плагин hide)

Zelrog

Участник
Сообщения
91
Реакции
27
Здравствуйте, недавно (примерно после обновления с перчатками) столкнулся с проблемой - с плагином hide.
Те кто его используют - имеют вероятность вылета из игры через случайное время (кто почти моментально, а кто через пару минут...)
Сам код (точнее его часть):
C-подобный:
public Action OnSetTransmit(int entity, int client)
{
    if(0 < client < MaxClients && gB_Hide[client] && client != entity && (!IsClientObserver(client) || (GetEntProp(client, Prop_Send, "m_iObserverMode") != 6 &&
        GetEntPropEnt(client, Prop_Send, "m_hObserverTarget") != entity)))
    {
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
Пока что я лишь могу думать на плагин gloves (аналог ws, только перчатки). Других изменений вроде как не вносил за последнее время...
Сталкивался кто с подобным?
(Пока что нет возможности проверить свою догадку)
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Добавь до OnPluginStart():
PHP:
int g_iOffsetTarget, g_iOffsetMode;
И в самой функции OnPluginStart():
PHP:
if ((g_iOffsetTarget = FindSendPropInfo("CBasePlayer", "m_hObserverTarget")) < 1 || (g_iOffsetMode = FindSendPropInfo("CBasePlayer", "m_iObserverMode")) < 1)
    SetFailState("Offset 'CBasePlayer::%s' not find!", g_iOffsetTarget < 1 ? "m_hObserverTarget":"m_iObserverMode");
И вместо того кода, что в 1 посте:
PHP:
public Action OnSetTransmit(int entity, int client)
{
    return gB_Hide[client] && client != entity && (!IsClientObserver(client) || (GetEntData(client, g_iOffsetMode) != 6 &&
        GetEntDataEnt2(client, g_iOffsetTarget) != entity)) ? Plugin_Handled:Plugin_Continue;
}
Так работать будет куда быстрее, может меньше вылетать станут.
 

Zelrog

Участник
Сообщения
91
Реакции
27
Добавь до OnPluginStart():
PHP:
int g_iOffsetTarget, g_iOffsetMode;
И в самой функции OnPluginStart():
PHP:
if ((g_iOffsetTarget = FindSendPropInfo("CBasePlayer", "m_hObserverTarget")) < 1 || (g_iOffsetMode = FindSendPropInfo("CBasePlayer", "m_iObserverMode")) < 1)
    SetFailState("Offset 'CBasePlayer::%s' not find!", g_iOffsetTarget < 1 ? "m_hObserverTarget":"m_iObserverMode");
И вместо того кода, что в 1 посте:
PHP:
public Action OnSetTransmit(int entity, int client)
{
    return gB_Hide[client] && client != entity && (!IsClientObserver(client) || (GetEntData(client, g_iOffsetMode) != 6 &&
        GetEntDataEnt2(client, g_iOffsetTarget) != entity)) ? Plugin_Handled:Plugin_Continue;
}
Так работать будет куда быстрее, может меньше вылетать станут.
Я проверил - всему виной перчатки, предполагаю из за наличия вида от 3 лица. Спасибо конечно за код, но меньше вылетов - не означает отсутствие вылетов :) Попробую использовать аналог плагина отсюда, где есть возможность отключить вид от 3 лица, может поможет :Р
 
Сверху Снизу