Удаление оружия

ThreshHNS

Участник
Сообщения
248
Реакции
87
Добрый день,
Ищу плагин или же попрошу сделать его.
Суть: когда у игрока заканчиваются патроны в оружие, то это оружие удаляется.
Игра: CS:GO
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
у игрока заканчиваются патроны в оружие
PHP:
#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("weapon_outofammo", Event_OutAmmo);
}

public void Event_OutAmmo(Event event, const char[] name, bool dontBroadcast)
{
    PrintToChat(GetClientOfUserId(event.GetInt("userid")), "У вас закончились патроны");
}
Проверь, сообщение появляется, когда по "нулям" или в другой момент (подробно). Мне некогда тестить, а там допишем.
 
Последнее редактирование:

ThreshHNS

Участник
Сообщения
248
Реакции
87
PHP:
#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("weapon_fire_on_empty", Event_WeaponEmpty);
}

public void Event_WeaponEmpty(Event event, const char[] name, bool dontBroadcast)
{
    PrintToChat(GetClientOfUserId(event.GetInt("userid")), "У вас закончились патроны");
}
Проверь, сообщение появляется, когда по "нулям" или в другой момент (подробно). Мне некогда тестить, а там допишем.
Поставил.
Сообщение выводится, когда стреляешь с 0 патронами, то есть выстрел при пустой обойме (ты понял). Мне же надо удалять, когда просто обойма на 0 (без выстрела).
 

ThreshHNS

Участник
Сообщения
248
Реакции
87
Ставь снова, код обновлён. Нашёл у вас специальное событие. Описания вообще нет, но по названию весьма подходит.
Поставил, походу это событие не работает. Ничего не происходит при нулевом запасе, не при выстреле с пустой обоймой.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
PHP:
#include <sdktools>

#pragma newdecls required

int g_iOffsetActive;

public void OnPluginStart()
{
	if ((g_iOffsetActive = FindSendPropInfo("CBasePlayer", "m_hActiveWeapon")) < 1) SetFailState("Not supported!");
	HookEvent("weapon_fire", WeaponFire);
}

public void WeaponFire(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid")), weapon = GetEntDataEnt2(client, g_iOffsetActive);
	if (weapon != -1)
	{
		char classname[16];
		event.GetString("weapon", classname, sizeof(classname));
		if (strncmp(classname[7], "knife", 5) && strcmp(classname[7], "bayonet"))
		{
			RemovePlayerItem(client, weapon);
			AcceptEntityInput(weapon, "Kill");
			FakeClientCommand(client, "use weapon_knife");
		}
	}
}
У тебя всегда всего 1 патрон выдаётся, так что, самое то.
 
Последнее редактирование:

ThreshHNS

Участник
Сообщения
248
Реакции
87
PHP:
#include <sdktools>

#pragma newdecls required

int g_iOffsetActive;

public void OnPluginStart()
{
    if ((g_iOffsetActive = FindSendPropInfo("CBasePlayer", "m_hActiveWeapon")) < 1) SetFailState("Not supported!");
    HookEvent("weapon_fire", WeaponFire);
}

public void WeaponFire(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid")), weapon = GetEntDataEnt2(client, g_iOffsetActive);
    if (weapon != -1)
    {
        RemovePlayerItem(client, weapon);
        AcceptEntityInput(weapon, "Kill");
    }
}
Как Я понял, у тебя всего 1 патрон выдаётся, так что, самое то.
Все отлично работает, но можешь добавить, чтобы переключалось на нож после того,как оружие удалится?
 

ThreshHNS

Участник
Сообщения
248
Реакции
87
Можешь сделать исключение для всех ножей?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
исключение для всех ножей?
Для начала, точно выясни, что выдаёт событие. Что в чате пишет?
А переключение на нож при этом всегда срабатывает, пусть и нож "золотой", ещё какой-то другой? Оффтоп
 

ThreshHNS

Участник
Сообщения
248
Реакции
87
Для начала, точно выясни, что выдаёт событие. Что в чате пишет?А переключение на нож при этом всегда срабатывает, пусть и нож "золотой", ещё какой-то другой? Оффтоп
Применяется weapon_knife при CT ноже - не выбрасывается
Применяется weapon_knife_ при T и остальных ножах - выбрасывается
Переключение на нож срабатывает ВСЕГДА, на любой.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,606
Реакции
5,096
Вместо if (strcmp(classname, "weapon_knife") попробуй использовать if (StrContains(classname, "knife", false) != -1 || StrContains(classname, "bayonet", false) != -1)
Заодно и в CSGO проверка будет работать со всеми ножами (но вот будет ли выбираться там нож я не знаю).
 

ThreshHNS

Участник
Сообщения
248
Реакции
87
Вместо if (strcmp(classname, "weapon_knife") попробуй использовать if (StrContains(classname, "knife", false) != -1 || StrContains(classname, "bayonet", false) != -1)
Заодно и в CSGO проверка будет работать со всеми ножами (но вот будет ли выбираться там нож я не знаю).
Оружие не удаляется и не меняется на нож.
Ножи при нажатие на ЛКМ - удаляются.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
if (StrContains(classname, "knife", false) != -1 || StrContains(classname, "bayonet", false) != -1)
Позабавил) Оффтоп
исключение для всех ножей
Добавил все ножи.
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
799
@AlmazON, а можешь пожалуйста сделать ещё один скрипт только чтобы тот удалял с карты упавшее из рук (из трупа) оружие и так же переключение на ножик оставить?)
 

ludanik

Участник
Сообщения
146
Реакции
20
@Dreizehnt, mp_weaponstay - Оружие остаётся на карте после смерти игрока.

weapon_auto_cleanup_time — если установлена не на 0, оружие будет удаляться по прошествии определенного времени в секундах, если игроков рядом нет.

weapon_max_before_cleanup — Если установлена не на 0, будет удалять самое старое уроненное оружие, чтобы поддерживать определенное количество уроненного оружия в мире

mp_death_drop_c4 / mp_death_drop_defuser / mp_death_drop_grenade / mp_death_drop_gun = Разрешить / запретить выпадение оружия игрока после его смерти. [1/0]
[CS:GO]

P.S возможно стоит создать тред, по разным вопросам SOURCE и пилить туда часто задающиеся вопросы, aka faq.
 
Последнее редактирование:
Сверху Снизу