Урон и norecoil

Сообщения
137
Реакции
9
Помог
3 раз(а)
Привет народ. вообщем сообразил вот такую штуку но не работает norecoil почему так?
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
    
#define FLAG_ACCESS ADMIN_ADMIN  // флаг доступа
#define DMG_HEGRENADE (1<<24)
    
const Float:fMultiDmg = 1.5 // Умножения урона
new bool:bIsAdmin[33]
new bool:g_norecoil[33]
    
public plugin_init()
{
   RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
    
public client_putinserver(id)
{
   if(get_user_flags(id) & FLAG_ACCESS) bIsAdmin[id] = true
   else bIsAdmin[id] = false;
   if(get_user_flags(id) & FLAG_ACCESS) g_norecoil[id] = true
   else g_norecoil[id] = false;
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
   if(!is_user_connected(attacker) || victim == attacker)
      return HAM_IGNORED
  
   if( damage_type & DMG_HEGRENADE )
      return HAM_IGNORED
  
   if(bIsAdmin[attacker])
   {
      SetHamParamFloat(4, damage * fMultiDmg)
   }
   return HAM_IGNORED
}

public func_prethink(id)
{
    if(!is_user_alive(id) && !g_norecoil[id])
        return;
    
    set_pev(id,pev_punchangle,{ 0.0,0.0,0.0 });
}
public client_disconnect(id)
{
    g_norecoil[id] = false;
}
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
if(!is_user_alive(id) && !g_norecoil[id]) почему "и"? Я думаю нужно "или" - ||
+ где хукается func_prethink? Может client_prethink?
 

AcE

Сообщения
31
Реакции
4
еще client_putinserver сделай так
C++:
public client_putinserver(id)
{
    bIsAdmin[id] = g_norecoil[id] = (get_user_flags(id) & FLAG_ACCESS) ? true : false
}
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
AcE, если планируется только этот функционал, то g_norecoil можно вообще убрать ибо выполняет ту же функцию. Ну и ещё больше оптимизации: bIsAdmin[id] = bool:(get_user_flags(id) & FLAG_ACCESS);
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
w0w, Внемлил вашим советам. но все же разброс не пропал. вот код получившийся
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
    
#define FLAG_ACCESS ADMIN_ADMIN  // флаг
#define DMG_HEGRENADE (1<<24)
    
const Float:fMultiDmg = 1.5 // на сколько умножать
new bool:bIsAdmin[33]
new bool:g_norecoil[33]
    
public plugin_init()
{
   RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
    
public client_putinserver(id)
{
    bIsAdmin[id] = bool:(get_user_flags(id) & FLAG_ACCESS);
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
   if(!is_user_connected(attacker) || victim == attacker)
      return HAM_IGNORED
  
   if( damage_type & DMG_HEGRENADE )
      return HAM_IGNORED
  
   if(bIsAdmin[attacker])
   {
      SetHamParamFloat(4, damage * fMultiDmg)
   }
   return HAM_IGNORED
}

public client_prethink(id)
{
    if(!is_user_alive(id) || !g_norecoil[id])
        return;
    
    set_pev(id,pev_punchangle,{ 0.0,0.0,0.0 });
}
public client_disconnect(id)
{
    g_norecoil[id] = false;
}
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#if !defined MAX_PLAYERS
   #define MAX_PLAYERS 32
#endif

#if !defined DMG_GRENADE
    #define DMG_GRENADE (1<<24)
#endif

#define FLAG_ACCESS ADMIN_ADMIN  // флаг
 
const Float:fMultiDmg = 1.5 // на сколько умножать
new bool:g_bIsAdmin[MAX_PLAYERS+1]
 
public plugin_init()
{
   RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
 
public client_putinserver(id)
{
    g_bIsAdmin[id] = bool:(get_user_flags(id) & FLAG_ACCESS);
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
   if(!is_user_connected(attacker) || victim == attacker)
      return HAM_IGNORED

   if( damage_type & DMG_GRENADE )
      return HAM_IGNORED

   if(g_bIsAdmin[attacker])
   {
      SetHamParamFloat(4, damage * fMultiDmg)
   }
   return HAM_IGNORED
}

public client_prethink(id)
{
    if(!is_user_alive(id) || !g_bIsAdmin[id])
        return;
 
    set_pev(id, pev_punchangle, { 0.0, 0.0, 0.0 });
}
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
w0w, Ошибки при компиляции
24 Окт 2018
Снимок.PNG
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
w0w, Снимок.PNG
24 Окт 2018
тут гранаты и не работали кстати но компилировалось
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
denbtr, скопировал до того как обновил второй раз, скопируй еще раз тот код и будет компилироваться.
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
denbtr, Получаеться gf_norecoil и добавлять не надо было а все в g_bIsAdmin занести
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
denbtr, смысла добавлять два разных массива нет так как в итоге используешь для одной цели, проверялся флаг FLAG_ACCESS и присваивался и bIsAdmin и g_norecoil, в такой реализации смысла нет.
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
w0w, Скомпилировался. ща проверю. принял на заметку
24 Окт 2018
w0w, Но почему то все равно есть разброс
24 Окт 2018
w0w, Я если честно думал убирать разброс для когото частично а для когото почти полностью. такое возможно? но вообще хорошо бы сначала убрать а если что в квары я уже занесу на флаги
 
Сообщения
137
Реакции
9
Помог
3 раз(а)
w0w, О спасибо заработало. не думал что это могло повлиять
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
можно вместо PreThink, использовать PrimaryAttack (например) для выставления отдачи
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
poduna, при входе на сервер проверять на стим айди и ставить true в массив и далее уже проверять если true то выполнять код.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу