Нужно проверять только victim на флаг. Уже при уронеА что нужно сделать то?
Зачем делать проверку при каждом уроне, если можно сразу поставить хук только на тех игроков, которым мы должны 100% резать урон.Нужно проверять только victim на флаг. Уже при уроне
Невнятное ТЗ, я сначала понял как "Отключить нанесение урона от ножа игрокам с флагом `z`"))
iLoco
Нет урона от ножа только для ROOT
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
int g_iFlagRestrict;
public OnPluginStart()
{
g_iFlagRestrict = ReadFlagString("z");
for(int i = 1; i <= MaxClients; i++) if(IsClientAuthorized(i) && IsClientInGame(i)) {
OnClientPostAdminCheck(i);
}
}
public void OnClientPostAdminCheck(int client)
{
if(!IsFakeClient(client) && GetUserFlagBits(client) & g_iFlagRestrict) {
SDKHook(client, SDKHook_OnTakeDamage, Hook_OnTakeDamage);
}
}
public Action Hook_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{
if(attacker > 0 && attacker < MaxClients) {
char classname[32];
GetClientWeapon(attacker, classname, sizeof(classname));
if(StrContains(classname, "knife", false) != -1) {
damage = 0.0;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
Тк ему над узнать, что цель - рут, потому у этой цели не снимать хп.Зачем делать проверку при каждом уроне, если можно сразу поставить хук только на тех игроков, которым мы должны 100% резать урон.
Ты не понял что я имею в виду, я говорю о том, что лучше в плане оптимизации поставить хук только на тех игроков, с которыми мы хотим работать, то-есть на тех, у кого есть флаг 'z', при их коннекте это можно отловить и захукать их, и после в хуке уже определяем тип оружия, мы уже 100% уверенны что victim - это игрок с флагом 'z'Тк ему над узнать, что цель - рут, потому у этой цели не снимать хп.
А ты проверяешь заведомо всех игроков, не зная, будет рут целью или аттакером
Но при этом аттакер тоже Z. Потому он сам не может никому нанести урон. Потому нам необходимо, забив на эту оптимизацию, узнавать непосредственно при попытке нанесения урона, не Z ли цель. И всё. Нам не нужно хукать и атакующего, и жертву исходя исключительно из того, какой у них флаг, ведь мы не знаем, кто кем будет.мы уже 100% уверенны что victim - это игрок с флагом 'z'
Ну так смысл хукать всех игроков и после в хуке проверять какие имеет флаги жертва, если можно заранее сделать хуки только для нужных жертв с 'z' флагом и всё, проверка на наличие флагов не требуться внутри хука, только удостоверится что это игрок а не ент и что оружие - нож.Он же просит не отнимать HP только у игроков с этим флагом. И не важно, кто атакует - главное, чтобы жертва была Z
Блядь, но тогда резать сможет только Z, а должен любой игрок, просто если жертва Z, урон не проходит, заебался объяснять на хуйНу так смысл хукать всех игроков и после в хуке проверять какие имеет флаги жертва, если можно заранее сделать хуки только для нужных жертв с 'z' флагом и всё, проверка на наличие флагов не требуться внутри хука, только удостоверится что это игрок а не ент и что оружие - нож.
Эта реализация не подходит?iLoco
Paranoiiik
Вот это я задачку вам задал!Вроде код простой а не простой.Спасибо заранее что разбераетесь.Может ещё с утра мысли будут по свежее.Есть другой код если с этим не получиться.
Не тупи, игроку с флагом 'z' урон от ножа не должен наносится, а другим - должен. Смотри как сделано тут Написание плагиновБлядь, но тогда резать сможет только Z, а должен любой игрок, просто если жертва Z, урон не проходит, заебался объяснять на хуй
ОффтопПростите. С удовольствием принимаю на ебало баллы за мат
У меня компилируется нормально, sm 1.10iLoco
Твой код ничего не поменял.Как было в оригинале что я скидывал так всё и осталось.Я с тупил твой код не компелится
// NoKnifeDamage.sp
NoKnifeDamage.sp(5) : error 010: invalid function or declaration
NoKnifeDamage.sp(9) : error 017: undefined symbol "g_iFlagRestrict"
NoKnifeDamage.sp(11) : error 017: undefined symbol "int"
NoKnifeDamage.sp(11) : warning 215: expression has no effect
NoKnifeDamage.sp(11) : error 001: expected token: ")", but found ";"
NoKnifeDamage.sp(11) : error 036: empty statement
NoKnifeDamage.sp(11) : fatal error 127: too many error messages on one line
Compilation aborted.
6 Errors.
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
new g_iFlagRestrict;
public OnPluginStart()
{
g_iFlagRestrict = ReadFlagString("z");
for(new i = 1; i <= MaxClients; i++) if(IsClientAuthorized(i) && IsClientInGame(i)) {
OnClientPostAdminCheck(i);
}
}
public OnClientPostAdminCheck(client)
{
if(!IsFakeClient(client) && GetUserFlagBits(client) & g_iFlagRestrict) {
SDKHook(client, SDKHook_OnTakeDamage, Hook_OnTakeDamage);
}
}
public Action:Hook_OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
if(attacker > 0 && attacker < MaxClients) {
decl String:classname[32];
GetClientWeapon(attacker, classname, sizeof(classname));
if(StrContains(classname, "knife", false) != -1) {
damage = 0.0;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
не воспроизводит звук при перезарядке.Привет, посмотри этот вариант. Плагин на новом синтаксисе, сразу говорю
Желаемые звуки можно прописать по пути addons/sourcemod/configs/reload_sound_list.iniПривет всем
Можно ли сделать в данном плагине,чтоб звук перезарядки был один только?
И чтоб не было такого,что когда обойма полная,ты нажимаешь перезарядить и там много раз звук воспроизводит.
Ну если конечно не много заморочек там.
Заранее благодарю.