отключения взрыва гранат

Сан Саныч

Участник
Сообщения
17
Реакции
0
Здравствуйте, есть ли у кого плагин отключения взрыва гранат? Что бы ты ее бросил и где она упала там и лежит, хочу поставить его вместе со скином снежка
Сообщения автоматически склеены:

css v34
 

romeo7

Участник
Сообщения
189
Реакции
93
попробуй:
public void OnEntityCreated(int entity, const char[] classname)
{
    if(StrEqual(classname, "hegrenade_projectile"))
    {
        RequestFrame(BlockExploding, EntIndexToEntRef(entity));
    }
}

public void BlockExploding(int ref)
{
    int entity = EntRefToEntIndex(ref);
    
    if (entity != INVALID_ENT_REFERENCE)
    {
        SetEntProp(entity, Prop_Data, "m_nNextThinkTick", -1);
    }
}
 
Последнее редактирование:

Сан Саныч

Участник
Сообщения
17
Реакции
0
Куда это написать?
Сообщения автоматически склеены:

Или это скомпилировать надо?
 

Сан Саныч

Участник
Сообщения
17
Реакции
0
попробуй:
public void OnEntityCreated(int entity, const char[] classname)
{
    if(StrEqual(classname, "hegrenade_projectile"))
    {
        RequestFrame(BlockExploding, EntIndexToEntRef(entity));
    }
}

public void BlockExploding(int ref)
{
    int entity = EntRefToEntIndex(ref);
  
    if (entity != INVALID_ENT_REFERENCE)
    {
        SetEntProp(entity, Prop_Data, "m_nNextThinkTick", -1);
    }
}
спасибо, работает
Сообщения автоматически склеены:

@stotik, уже сделал, спасибо
Сообщения автоматически склеены:

и еще, не подскажете плагин что бы были бесконечные гранаты? типа кинул, и сразу появилась новая, без ожидания взрыва
 
Последнее редактирование:

romeo7

Участник
Сообщения
189
Реакции
93
и еще, не подскажете плагин что бы были бесконечные гранаты? типа кинул, и сразу появилась новая, без ожидания взрыва
простой способ:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

public void OnEntityCreated(int entity, const char[] classname)
{
    if (strcmp(classname, "hegrenade_projectile", false) == 0)
    {
        SDKHook(entity, SDKHook_Spawn, OnEntitySpawned);
    }
}

public void OnEntitySpawned(int entity)
{
    int owner = GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity");
    
    if(IsClientInGame(owner) && !IsFakeClient(owner))
    {
        GivePlayerItem(owner, "weapon_hegrenade");
        CreateTimer(0.4, EquipWepaon, GetClientUserId(owner));
    }
}

public Action EquipWepaon(Handle timer, int userid)
{
    int owner = GetClientOfUserId(userid);
    
    if(owner && IsPlayerAlive(owner)) FakeClientCommandEx(owner, "use weapon_hegrenade");
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
я не думаю что m_hOwnerEntity вернет вообще что то для этого энтити, будет либо -1 либо ошибки в консоль выводить.
надо получать игрока через m_hThrower.
 

romeo7

Участник
Сообщения
189
Реакции
93
я не думаю что m_hOwnerEntity вернет вообще что то для этого энтити, будет либо -1 либо ошибки в консоль выводить.
надо получать игрока через m_hThrower.
Зачем так думаешь? Код рабочий. SDKHook_Spawn для этого.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
простой способ:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

public void OnEntityCreated(int entity, const char[] classname)
{
    if (strcmp(classname, "hegrenade_projectile", false) == 0)
    {
        SDKHook(entity, SDKHook_Spawn, OnEntitySpawned);
    }
}

public void OnEntitySpawned(int entity)
{
    int owner = GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity");
   
    if(IsClientInGame(owner) && !IsFakeClient(owner))
    {
        GivePlayerItem(owner, "weapon_hegrenade");
        CreateTimer(0.4, EquipWepaon, GetClientUserId(owner));
    }
}

public Action EquipWepaon(Handle timer, int userid)
{
    int owner = GetClientOfUserId(userid);
   
    if(owner && IsPlayerAlive(owner)) FakeClientCommandEx(owner, "use weapon_hegrenade");
}
Таймер здесь не к месту, если Вы используете хуки, то используйте их до конца.
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Зачем так думаешь? Код рабочий. SDKHook_Spawn для этого.
я вообще не обратил внимание как там реализовал ты.
-
изменил сообщение по причине моей глупости, надо было полностью посмотреть. признаю.
 
Последнее редактирование:

romeo7

Участник
Сообщения
189
Реакции
93
Таймер здесь не к месту, если Вы используете хуки, то используйте их до конца.

так лучше:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

public void OnEntityCreated(int entity, const char[] classname)
{
    if (strcmp(classname, "hegrenade_projectile", false) == 0)
    {
        SDKHook(entity, SDKHook_Spawn, OnEntitySpawned);
    }
}

public void OnEntitySpawned(int entity)
{
    int owner = GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity");
  
    if(owner > 0 && IsClientInGame(owner) && !IsFakeClient(owner) && IsPlayerAlive(owner))
    {
        int weapon = GivePlayerItem(owner, "weapon_hegrenade");
        FakeClientCommandEx(owner, "use weapon_hegrenade");
        SetEntPropEnt(owner, Prop_Send, "m_hActiveWeapon", weapon);
    }
}
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Код рабочий. SDKHook_Spawn для этого.
Если создаётся hegrenade_projectile, то это не всегда значит, что игрок кинул грену =)
Entity могли создать для каких-то своих целей, не указав владельца.

PHP:
new ent = CreateEntityByName("hegrenade_projectile");
DispatchSpawn(ent); // m_hOwnerEntity = -1, IsClientInGame(-1) = [SM] Exception reported: Client index -1 is invalid
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Таймер здесь не к месту, если Вы используете хуки, то используйте их до конца.
Не всегда в момент спавна можно получить все параметры энтити, т.к. они на тот момент могут быть ещё не присвоены.
А вот через тик после создания, как правило, все параметры уже в порядке.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Не всегда в момент спавна можно получить все параметры энтити, т.к. они на тот момент могут быть ещё не присвоены.
А вот через тик после создания, как правило, все параметры уже в порядке.
Речь про наличие таймера в обход логического использования функционала sdk, который используется и имеет в наличии необходимые инструменты.
 
Сверху Снизу