Как установить стартовое значение хп?

Ammy

Участник
Сообщения
81
Реакции
16
Ребят, требуется установить большое количество хп у террористов на всех картах включая карты с игровыми режимами.
Требуется для игрового режима Маньяк, на некоторых картах для маньяка стоит количество хп 100 как изменить не знаю.
Может у кого имеются идеи? В инете нету, искал очень долго.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,076
1586449807150.png

Я даун?
 

Ammy

Участник
Сообщения
81
Реакции
16

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,076
Попробуй тогда заменить SetEntityHealth на это:
C-подобный:
SetEntProp(client, Prop_Send, "m_iHealth", 10000);
 

Ammy

Участник
Сообщения
81
Реакции
16
с
Попробуй тогда заменить SetEntityHealth на это:
C-подобный:
SetEntProp(client, Prop_Send, "m_iHealth", 10000);
Сменили карту, хп по дефолту карты стоит, может есть способ установить бессмертие для т стороны?
 

Svyatoy

Участник
Сообщения
335
Реакции
137
с

Сменили карту, хп по дефолту карты стоит, может есть способ установить бессмертие для т стороны?
Если сделал, как кидали скрин выше - такого быть не должно.
Можешь свой код скинуть?
 

Ammy

Участник
Сообщения
81
Реакции
16
Если сделал, как кидали скрин выше - такого быть не должно.
Можешь свой код скинуть?
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && GetClientTeam(client) == 2) SetEntProp(client, Prop_Send, "m_iHealth", 10000);
}
Ты об этом?
Код с твоим изминением.
 

Svyatoy

Участник
Сообщения
335
Реакции
137
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && GetClientTeam(client) == 2) SetEntProp(client, Prop_Send, "m_iHealth", 10000);
}
Ты об этом?
Код с твоим изминением.
Изменение конечно не моё, но выглядит нормально.
Ты сказал, что нужно сделать Т бессмертным. Можно заблокировать любой урон по нему в принципе. (Кроме урона от падений, карты и т.д. Но можно и с ними)
На сервере используются Кулаки? (Это нужно знать для блокировки)
 
  • Мне нравится
Реакции: Ammy

Ammy

Участник
Сообщения
81
Реакции
16
Изменение конечно не моё, но выглядит нормально.
Ты сказал, что нужно сделать Т бессмертным. Можно заблокировать любой урон по нему в принципе. (Кроме урона от падений, карты и т.д. Но можно и с ними)
На сервере используются Кулаки? (Это нужно знать для блокировки)
Нет кулаки не используются
 

bigboi300

Не удаляю копирайты
Сообщения
153
Реакции
28
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && GetClientTeam(client) == 2) SetEntProp(client, Prop_Send, "m_iHealth", 10000);
}
Ты об этом?
Код с твоим изминением.
Не благодари
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public Action Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && GetClientTeam(client) == 2) SetEntProp(client, Prop_Send, "m_iHealth", 10000);
}
 
Последнее редактирование:

Madness aka null138

Участник
Сообщения
721
Реакции
778
Карты дают хп с задержкой, т.е нужно поставить таймер в событии спавна или старта раунда с задержкой в 0.3 например, после которого можно ставить хп.
 

Svyatoy

Участник
Сообщения
335
Реакции
137
Карты дают хп с задержкой, т.е нужно поставить таймер в событии спавна или старта раунда с задержкой в 0.3 например, после которого можно ставить хп.
Держи! Это игнорирует любой урон по Т нанесённый игроками. У них даже экран не дёрнется 🙂
Но с кулаками это не сработает, имей ввиду!


Sourcepawn:
#include <sourcemod>
#include <sdkhooks>

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
    HookEvent("round_end", Event_RoundEnd);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int iClient = GetClientOfUserId(event.GetInt("userid"));

    if(0 < iClient <= MaxClients && IsClientInGame(iClient) && GetClientTeam(iClient) == 2)
        SDKHook(iClient, SDKHook_TraceAttack, Hook_TraceAttack);
}

public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; ++i)
    {
        if(i > 0 && i <= MaxClients && IsClientInGame(i) && GetClientTeam(i) == 2)
            SDKUnhook(i, SDKHook_TraceAttack, Hook_TraceAttack);
    }
}

public Action Hook_TraceAttack(iClient, &iAttacker, &iInflictor, &Float:damage, &damagetype, int &ammotype, int hitbox, int hitgroup)
{
    return Plugin_Handled;
}
 
  • Мне нравится
Реакции: Ammy

Madness aka null138

Участник
Сообщения
721
Реакции
778
Ага, 100 хп устанавливают. Держи в курсе)0)0
вообще то существуют браш энтити которые и дают хп на картах при активации. вот и проблема у автора, энтити карты ставит 100 хп после того как плагин срабатывает.
тут речь не про дефолт значение хп которую сама игра ставит, а про отдельный энтити.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,076
Оффтоп
@Ammy, тогда уж покажи карту, на которой такой ужас происходит (ссылку на мастерскую)
 

Madness aka null138

Участник
Сообщения
721
Реакции
778
Просто кто-то любит пофлудить в теме. Я уже дал автору ответ, который ему понравился, но видимо в душе у некоторых живут тролли и постонабиватели


Щас бы вместо OnTakeDamage использовать трассировку. Тем более в чем смысл каждый раз делать анхук и заного хукать ?

C++:
for(int i = 1; i <= MaxClients; ++i)
{
    if(i > 0 && i <= MaxClients && IsClientInGame(i) && GetClientTeam(i) == 2)
        SDKUnhook(i, SDKHook_TraceAttack, Hook_TraceAttack);
}
зачем повторная проверка на индекс игрока, если изначально было задано в цикле старт от 1 до 64 ?

Вот это ответ конечно же. Куда класс поставить ?
А решение проблемы уже было сказано мною. Плагин, который выдает хп, делает это раньше чем срабатывает энтити карты, которое, конечно же и ставит хп.
Нужно просто в исходнике задержку через таймер поставить.
 
Последнее редактирование:

Svyatoy

Участник
Сообщения
335
Реакции
137
Щас бы вместо OnTakeDamage использовать трассировку.
Твой вариант может просто обнулить дамаг, а трассировка блокирует полностью событие урона. С трассировкой игрок не замедлится, у него не дёрнется экран при попадании, в него вообще как-будто не стреляли. Не кажется, что такое решение лучше?

Тем более в чем смысл каждый раз делать анхук и заного хукать ?
Смысл в том, что маньяк зачастую 1, максимум 3. Предлагаешь всех (условно) 30 игроков хукать при заходе на сервер и проверять за какую он команду при каждом срабатывании хука? Классное потребление ресурсов...

C++:
for(int i = 1; i <= MaxClients; ++i)
{
    if(i > 0 && i <= MaxClients && IsClientInGame(i) && GetClientTeam(i) == 2)
        SDKUnhook(i, SDKHook_TraceAttack, Hook_TraceAttack);
}
зачем повторная проверка на индекс игрока, если изначально было задано в цикле старт от 1 до 64 ?

Вот это ответ конечно же. Куда класс поставить ?
А решение проблемы уже было сказано мною. Плагин, который выдает хп, делает это раньше чем срабатывает энтити карты, которое, конечно же и ставит хп.
Нужно просто в исходнике задержку через таймер поставить.
Согласен, с проверкой дополнительной накосячил немного

может есть способ установить бессмертие для т стороны?
А это по поводу твоего решения, которое явно таковым в этой задаче не является
 
Сверху Снизу