Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 01 июн 2015, 06:01

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Gauss, саморазряд
СообщениеДобавлено: 08 авг 2014, 12:26 
Не в сети
Зарегистрирован:
29 июл 2012, 19:08
Последнее посещение:
21 апр 2015, 12:20
Сообщения: 64
Откуда: Новосибирск
Добрый день, кто знает, можно ли как-нибудь средствами 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


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Gauss, саморазряд
СообщениеДобавлено: 08 авг 2014, 17:10 
Не в сети
Аватара пользователя
Зарегистрирован:
06 июн 2010, 16:53
Последнее посещение:
01 июн 2015, 01:51
Сообщения: 1067
Откуда: Владивосток
Наверное надо значение m_flStartCharge изменять.

_________________
Изображение
Vi Veri Veniversum Vivus Vici


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Gauss, саморазряд
СообщениеДобавлено: 12 авг 2014, 08:15 
Не в сети
Зарегистрирован:
29 июл 2012, 19:08
Последнее посещение:
21 апр 2015, 12:20
Сообщения: 64
Откуда: Новосибирск
а какими средствами можно реализовать? есть pvPrivateData offset для этого значения?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Gauss, саморазряд
СообщениеДобавлено: 12 авг 2014, 09:15 
Не в сети
Зарегистрирован:
06 авг 2010, 10:25
Последнее посещение:
19 май 2015, 13:59
Сообщения: 653
Откуда: Uzbekistan
Вот.

Код:
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?

_________________
Изображение


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Gauss, саморазряд
СообщениеДобавлено: 12 авг 2014, 13:33 
Не в сети
Зарегистрирован:
29 июл 2012, 19:08
Последнее посещение:
21 апр 2015, 12:20
Сообщения: 64
Откуда: Новосибирск
Отлично

параметр 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;
}


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Gauss, саморазряд
СообщениеДобавлено: 12 авг 2014, 18:17 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
30 май 2015, 17:11
Сообщения: 674
Откуда: Некрополь у Кремлёвской стены
Код:
if(!(1 <= iInvoker <= 32))
      return FMRES_IGNORED
Используй макс плаерс


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB