А до меня доходит то, что ты посты набиваешь.До меня не доходит,в чем смысл?
у игрока заканчиваются патроны в оружие
#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")), "У вас закончились патроны");
}
Поставил.Проверь, сообщение появляется, когда по "нулям" или в другой момент (подробно). Мне некогда тестить, а там допишем.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")), "У вас закончились патроны"); }
Ставь снова, код обновлён. Нашёл у вас специальное событие. Описания вообще нет, но по названию весьма подходит.Поставил
Поставил, походу это событие не работает. Ничего не происходит при нулевом запасе, не при выстреле с пустой обоймой.Ставь снова, код обновлён. Нашёл у вас специальное событие. Описания вообще нет, но по названию весьма подходит.
при выстреле
#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 патрон выдаётся, так что, самое то.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"); } }
Еще один баг нашел, с ножа когда бьешь на левую кнопку мыши, то он тоже удаляется. Надо это убрать.
Если в руках какой-нибудь там "золотой нож" или "нож-бабочка", то запросто.и при knife, и weapon_knife
Применяется weapon_knife при CT ноже - не выбрасывается
Оружие не удаляется и не меняется на нож.Вместо if (strcmp(classname, "weapon_knife") попробуй использовать if (StrContains(classname, "knife", false) != -1 || StrContains(classname, "bayonet", false) != -1)
Заодно и в CSGO проверка будет работать со всеми ножами (но вот будет ли выбираться там нож я не знаю).