Half-Life и Adrenaline Gamer форум
http://aghl.ru/forum/

Gauss, саморазряд
http://aghl.ru/forum/viewtopic.php?f=20&t=1861
Страница 1 из 1

Автор:  stationmega [ 08 авг 2014, 12:26 ]
Заголовок сообщения:  Gauss, саморазряд

Добрый день, кто знает, можно ли как-нибудь средствами amx убрать у гаусса саморазряд (когда долго его крутишь, он разряжается в игрока) ?

как-нибудь привязать событие, и изменять параметры, или переписать функцию

код sdk, gauss.cpp

Код:
if ( m_pPlayer->m_flStartCharge < gpGlobals->time - 10 )
{
   // Player charged up too long. Zap him.
   EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/electro4.wav", 1.0, ATTN_NORM, 0, 80 + RANDOM_LONG(0,0x3f));
   EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM,   "weapons/electro6.wav", 1.0, ATTN_NORM, 0, 75 + RANDOM_LONG(0,0x3f));
         
   m_fInAttack = 0;
   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0;
   m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
               
#ifndef CLIENT_DLL
   m_pPlayer->TakeDamage( VARS(eoNullEntity), VARS(eoNullEntity), 50, DMG_SHOCK );
   UTIL_ScreenFade( m_pPlayer, Vector(255,128,0), 2, 0.5, 128, FFADE_IN );
#endif
   SendWeaponAnim( GAUSS_IDLE );
            
// Player may have been killed and this weapon dropped, don't execute any more code after this!
   return;
}

Вот эта проверка, на число 10

Автор:  KORD_12.7 [ 08 авг 2014, 17:10 ]
Заголовок сообщения:  Re: Gauss, саморазряд

Наверное надо значение m_flStartCharge изменять.

Автор:  stationmega [ 12 авг 2014, 08:15 ]
Заголовок сообщения:  Re: Gauss, саморазряд

а какими средствами можно реализовать? есть pvPrivateData offset для этого значения?

Автор:  GordonFreeman [ 12 авг 2014, 09:15 ]
Заголовок сообщения:  Re: Gauss, саморазряд

Вот.

Код:
float m_flStartCharge      395
float m_flAmmoStartCharge   396
float m_flPlayAftershock   397
float m_flNextAmmoBurn      398   // while charging, when to absorb another unit of player's ammo?

Автор:  stationmega [ 12 авг 2014, 13:33 ]
Заголовок сообщения:  Re: Gauss, саморазряд

Отлично

параметр startcharge влияет на мощность выстрела гаусса, для полного заряда нужно 1.5 секунд (multiplayer),
стоит условие, если время заряда превысило 8 секунд (что меньше 10), сбросить это время до 4х секунд (8-4), что больше 1.5,
регистрация события раскрутки,
проверка каждые 0.2 секунды, чтобы не перегружать сервер лишний раз

Код:
new g_iGaussSpin;
new g_iPrecacheEventId;
new Float:tm

const m_flStartCharge = 395
const OFFSET_LINUX = 5

new Float:timenow,Float:timenow2

public plugin_init() {
   register_plugin(PLUGIN, VERSION, AUTHOR)
   register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
   unregister_forward(FM_PrecacheEvent, g_iPrecacheEventId, 1);
   
}
public plugin_precache(){
   g_iPrecacheEventId = register_forward(FM_PrecacheEvent, "fw_PrecacheEvent", 1);
}
public fw_PrecacheEvent(iType, const szName[])
{
   if (!strcmp(szName, "events/gaussspin.sc"))
   {
      g_iGaussSpin = get_orig_retval();
   }
   
   return FMRES_IGNORED;
}

public fw_PlaybackEvent(iFlags, iInvoker, iEventIndex, Float: flDelay, Float: flOrigin, Float: flAngles, Float: flfParam1, Float: flfParam2, iParam1, iParam2, bParam1, bParam2)
{
   if(!(1 <= iInvoker <= 32))
      return FMRES_IGNORED
      
   timenow2 = get_gametime()
   if((timenow2-timenow)>0.2)//проверка каждые 0.2 секунды
   {
      timenow = timenow2
      if (iEventIndex == g_iGaussSpin && !flDelay)
      {
         tm = get_pdata_float(iInvoker,m_flStartCharge,OFFSET_LINUX)
         if(get_gametime()>(tm+8))//если время заряда превысило 8 секунд
         {
            set_pdata_float(iInvoker, m_flStartCharge  , get_gametime()-4, OFFSET_LINUX)//сбросить его до 4х секунд
         }
      }
   }

   return FMRES_IGNORED;
}

Автор:  Turanga_Leela [ 12 авг 2014, 18:17 ]
Заголовок сообщения:  Re: Gauss, саморазряд

Код:
if(!(1 <= iInvoker <= 32))
      return FMRES_IGNORED
Используй макс плаерс

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/