HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Кодинг оружия (https://hlfx.ru/forum/showthread.php?threadid=3457)
Отправлено Lev 05-06-2012 в 05:29:
Кодинг оружия
Не знаю возможно ли - но всё же - можно как нибудь посчитать, сколько пуль подряд выпустила пушка, или же сколько времени зажата атака (для автоматов)?
Отправлено DefilerUnit 05-06-2012 в 07:44:
это подойдёт?
http://hlpp.thewavelength.net/tuts/burst.htm
Отправлено HAWK0044 05-06-2012 в 08:03:
DefilerUnit
не подойдёт.Точнее подойдёт, но что-то метод через weaponidle меня настораживает.
Lev
тебе нужно завести переменную которая будет хранить время первого выстрела и прибавить к нему промежуток того времени в котором ты хочешь сделать замер.
float flFirstShot;
if(!flFirstShot)
flFirstShot = gpGlobals->time + 1.0;//1.0 - твоё время
if(flFirstShot > gpGlobals->time)
{
m_iShoots++;
}
else
{
flFirstShot = 0.0;
m_iShoots=0;
}
Отправлено Дядя Миша 05-06-2012 в 10:12:
Lev пиши по русски - хочу замутить перегрев оружия. Все беды от того, что люди называют вещи не своими именами.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Lev 05-06-2012 в 13:05:
Ну можно и так сказать - только мне нужно просто сделать кастомный дым при прохождении временного поргога стрельбы. Вот таким спрайтом
Отправлено ONeiLL 05-06-2012 в 13:11:
Lev , таким спрайтом сложновато будет замутить, ведь спрайт всегда смотрит лицом к игроку
Добавлено 05-06-2012 в 16:11:
Или дым у тебя вверх должен быть направлен?
Отправлено Lev 05-06-2012 в 13:15:
У меня в entity.cpp есть дым - круглый, после каждого выстрела
C++ Source Code:
1 | void VectorAngles( const float *forward, float *angles ); |
3 | float zz_framerate = CVAR_GET_FLOAT( "zz_framerate" ); |
4 | float zz_fadespeed = CVAR_GET_FLOAT( "zz_fadespeed" ); |
5 | float zz_life = CVAR_GET_FLOAT( "zz_life" ); |
6 | float zz_alpha = CVAR_GET_FLOAT( "zz_alpha" ); |
8 | int iSmoke = CVAR_GET_FLOAT("cl_gunsmoke"); |
10 | TEMPENTITY *pSmokeTempEntity; |
11 | int iGunSmoke = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/gunsmoke.spr"); |
13 | TEMPENTITY *pSmokeTempEntity2; |
14 | int iGunSmoke2 = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/gunsmoke2.spr"); |
16 | vec3_t up, right, forward, angles; |
18 | cl_entity_t *ent = gEngfuncs.GetEntityByIndex( entity->index ); |
20 | angles = ent->curstate.angles; |
22 | AngleVectors( entity->angles, forward, up, right ); |
29 | pSmokeTempEntity = gEngfuncs.pEfxAPI->R_TempSprite( (float *)&entity->attachment[0], Vector (1,1,1)/*forward * gEngfuncs.pfnRandomLong ( -1 , 1 ) + right * gEngfuncs.pfnRandomLong ( -1 , 1 ) + up * gEngfuncs.pfnRandomLong ( -1 , 1 )*/, |
36 | FTENT_SPRANIMATE| FTENT_FADEOUT); |
39 | { // sprite created successfully, adjust some things |
40 | pSmokeTempEntity->fadeSpeed = gEngfuncs.pfnRandomLong ( 10.0 , 2.0 ); |
41 | pSmokeTempEntity->entity.curstate.framerate = 20; |
42 | pSmokeTempEntity->entity.curstate.renderamt = 255; |
43 | pSmokeTempEntity->entity.curstate.rendercolor.r = COLOR_VALUE; |
44 | pSmokeTempEntity->entity.curstate.rendercolor.g = COLOR_VALUE; |
45 | pSmokeTempEntity->entity.curstate.rendercolor.b = COLOR_VALUE; |
47 | gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoi( event->options) ); |
48 | DlightFlash((float *)&entity->attachment[0]); |
- а новый дым должен возникать только при перегреве - от ствола - вроде горячего воздуха
Отправлено Дядя Миша 05-06-2012 в 13:16:
Цитата:
ONeiLL писал:
ведь спрайт всегда смотрит лицом к игроку
кто тебя так обманул? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 05-06-2012 в 13:32:
Ну если не скомпилить с параметром oriented или vp_parallel_upright
Отправлено qpAHToMAS 05-06-2012 в 23:36:
Какая разница, какой спрайт. Человек спрашивал как отловить конкретный момент, а создать эффект — совсем другое дело.
Отправлено Lev 06-06-2012 в 07:37:
Мне нужно узнать три вещи: первое - как и где ловить этот момент(я думаю что на сервере в коде самого оружия), второе - как передать этот момент на клиент, чтобы им можно было воспользоваться в эвентах, и третье - в выше преведённом мной коде, дым после выстрела не прикреплён к стволу, а остаётся там, где произошёл выстрел - и в этом случае это нормально, но новый эффект мне нужно бы зафиксировать на стволе - как это можно сделать?
Отправлено ONeiLL 06-06-2012 в 08:12:
Код дал HAWK0044
Его в PrimaryAttack
C++ Source Code:
2 | flFirstShot = gpGlobals->time + 1.0;//1.0 - твоё время |
4 | if(flFirstShot > gpGlobals->time) |
14 | if( m_iShoots >= 10 ) // После 10 выстрелов дым |
16 | // А вот здесь уже и надо наш дым делать, как думай сам |
Предварительно переменные flFirstShot и flFirstShot надо объявить в классе оружия или в CBaseWeapon, потом в функ. Deploy их поидее надо обнулять.
Добавлено 06-06-2012 в 11:12:
И я не уверен, будет это работать или нет )))
Отправлено Lev 06-06-2012 в 17:45:
Всё работает - отлавливает момент точно после десяти выстрелов. Я думаю для этого дела создать новый евент с дымом - но как эту информацию переслать на клиент, чтобы в нужный момент запустить эвент?
Отправлено marikcool 06-06-2012 в 18:14:
зачем пересылать?, клиентское оружие и так проиграет после 10 выстрела то что требуется.
Отправлено Lev 06-06-2012 в 18:26:
Ты имеешь в виду то, которое в ev_hldm.cpp? А как это сделать?