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? А как это сделать?
Отправлено marikcool 06-06-2012 в 18:33:
PrimaryAttack атак и так обрабатывается на клиенте, ничего передовать ненадо, сразу рисуй свой дым когда требуется.
Отправлено Lev 06-06-2012 в 18:52:
То есть я могу в функции void EV_FireAKS( event_args_t *args )
просто создать условие?
if (( m_iShoots >= 10 ))
{
... - нужный мне евент
return;
}
Отправлено antikran 10-06-2012 в 19:53:
Вопрос по рикошетам...
Возможно ли сделать так чтоб все оружие рикошетило, причем привязать углы рикошетов к (допустим) текстовому документу, где указанны имена текстур и вероятность рикошета при определенных углах.
например
имя текстуры - градус вероятность,
metall_012 0 0, 15 95, 30 70, 45 50, 60 30, 90 0.
Возможно ли это.?
__________________
Спасибо тем кто помогает...
И тем кто бред этот читает...
Спасибо Дяде Мише за Xash двиг...
Благодаря ему, чуть больше я постиг...
Ну чайник я, и мало очень знаю С++...
Зато леплю я карты и играю блюз...
Вот так то.
Отправлено Дядя Миша 10-06-2012 в 20:01:
1. возможно
2. код рикошета (точнее отражения) можно взять из гаусса
3. код парсинга текстовых документов - из кода чтения звучащих текстур
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 10-06-2012 в 20:34:
antikran не обязательно заносить данные для каждой текстуры в текстовый файл. Можно сделать условия для каждого из типов текстур и зашить их прямо в код. Например, для металла - вероятность рикошета очень высокая, для вентиляции - нулевая (пуля просто пробьёт дырку), для бетона - чуть меньше чем для металла и т.п. А типы текстур читаются для их "озвучивания", тут ничего нового писать не придётся.
Отправлено HAWK0044 10-06-2012 в 21:43:
Lev
да перешли ты уже мессагой и не делай мозги
Отправлено antikran 10-06-2012 в 22:22:
Спасибо попробую.
__________________
Спасибо тем кто помогает...
И тем кто бред этот читает...
Спасибо Дяде Мише за Xash двиг...
Благодаря ему, чуть больше я постиг...
Ну чайник я, и мало очень знаю С++...
Зато леплю я карты и играю блюз...
Вот так то.
Отправлено qpAHToMAS 11-06-2012 в 03:06:
antikran, советую в ArmAII поиграть, посмотерть как там работают рикошеты. Весьма круто сделано.
Если в кратце, то стоит очень болшой рэндом (не как у гауса, точный угол отражения) и сила/скорость пули здорово уменьшается.
Отправлено antikran 11-06-2012 в 04:48:
qpAHToMAS
Хорошо поиграю))) Можете поздравить только ОСь новую залил... беда, не приходит одна. Хорошо проекты на съемнике были.
Я вот думал что скорее всего не надо к каждому оружию задавать, проще привязать это все к патронам... тоесть к их типу. Насчет рандомайза я думал... но и 99 может выпасть при прямом углу. Сам себя и застрелишь.
__________________
Спасибо тем кто помогает...
И тем кто бред этот читает...
Спасибо Дяде Мише за Xash двиг...
Благодаря ему, чуть больше я постиг...
Ну чайник я, и мало очень знаю С++...
Зато леплю я карты и играю блюз...
Вот так то.
Отправлено Ku2zoff 11-06-2012 в 09:06:
Цитата:
antikran писал:
но и 99 может выпасть при прямом углу. Сам себя и застрелишь.
Из гаусса кстати так можно сделать
Цитата:
antikran писал:
не надо к каждому оружию задавать, проще привязать это все к патронам...
Не пойдёт... От характеристик оружия зависит начальная скорость пули и её кинетическая энергия, значит разные стволы могут стрелять одними и теми же патронами по-разному. Ну это если у тебя как в КС куча стволов разных, использующих одинаковые патроны. Если для каждого ствола свой патрон, то можешь привязывать к типу пулек.
Отправлено Lev 05-07-2012 в 12:25:
Вобщем такое дело - сделал я чтобы при перезарядке магазин пустой выпадал и патроны выбрасывались - но это не очень удобно. По этому я хочу чтобы если в обойме оставались патроны, то вместо прекешеной модельки выпадал итем с партонами, причём с тем количеством патронов которое оставалось в магазине. Условие у меня там уже есть - а как итем поставить не знаю
Отправлено Ku2zoff 05-07-2012 в 12:37:
Lev ты лучше сделай так: перезаряжаем - старый магазин записывается в память, новый заряжается в ствол. И когда у нас заканчиваются нетронутые магазины, начинают использоваться те, что в памяти. Когда магазин пустой - он выкидывается при перезарядке, а когда нет - сохраняется в памяти.
Отправлено ONeiLL 05-07-2012 в 12:41:
ты походу не понял, он хочет, чтобы в выброшенной обойме было столько патронов, сколько он выбросил
Отправлено Lev 05-07-2012 в 12:45:
Ku2zoff - мысль конечно хорошая, но во первых у меня акнимации такие что обойма со свистом вылетает в сторону земли, а во вторых я пока не умею работать с памятью - если ты знаешь как можно спавнить - итем подскажи пожалуйста
Отправлено marikcool 05-07-2012 в 12:52:
а если выкинутую обойму поднять патроны сольются воедино?
Отправлено ONeiLL 05-07-2012 в 12:56:
Цитата:
Lev писал:
не умею работать с памятью
Просто это на замудрёном языке так звучит.
Напиши int iiii = 1;
Поздравляю, ты научился работать с памятью
Отправлено Lev 05-07-2012 в 14:17:
Да - но это не страшно
Добавлено 05-07-2012 в 20:17:
Решил сделать так чтобы персонажи тоже выбрасывали при перезарядке обойму - есть сама функция спавна void CSpetsnaz::SpawnClip( void ) - но как её правилно запустить я не понимаю - если сделать так
SetThink( SpawnClip );
pev->nextthink = gpGlobals->time + 0.0;
то после перезарядки персонажи перестают стрелять и двигаться вообще, хотя и откликаются на разговор.
Отправлено KiQ 06-07-2012 в 15:19:
Lev
pev->nextthink = gpGlobals->time + 0.1;
или уж вызывай непосредственно из Reload.
__________________
-Brain is dead-
Отправлено Дядя Миша 06-07-2012 в 16:46:
Цитата:
ONeiLL писал:
Поздравляю, ты научился работать с памятью
С памятью вы научитесь работать, когда подобные конструкции вас смущать перестанут.
C++ Source Code:
1 | void CStudioModelRenderer :: CreateVertexCache( word handle ) |
3 | int vertSize = 0, normSize = 0; |
4 | int totalVertSize = 0, totalNormSize = 0; |
5 | size_t vertOffsets[MAXSTUDIOMODELS]; |
6 | size_t normOffsets[MAXSTUDIOMODELS]; |
9 | memset( vertOffsets, 0, sizeof( vertOffsets )); |
10 | memset( normOffsets, 0, sizeof( normOffsets )); |
12 | // through all bodies to determine max vertices count |
13 | for( int j = 0; j < m_pStudioHeader->numbodyparts; j++ ) |
15 | mstudiobodyparts_t *pbodypart = (mstudiobodyparts_t *)((byte *)m_pStudioHeader + m_pStudioHeader->bodypartindex) + j; |
17 | int index = m_ModelInstances[handle].m_pEntity->curstate.body / pbodypart->base; |
18 | index = index % pbodypart->nummodels; |
20 | mstudiomodel_t *psubmodel = (mstudiomodel_t *)((byte *)m_pStudioHeader + pbodypart->modelindex) + index; |
21 | vertSize = (psubmodel->numverts * sizeof(Vector)); |
22 | normSize = (psubmodel->numnorms * sizeof(Vector)); |
24 | // NOTE: vertex and normals array are interleaved into memory representation |
27 | vertOffsets[j] = 0; // just in case |
28 | normOffsets[j] = vertOffsets[j] + vertSize; |
32 | vertOffsets[j] = normOffsets[j-1] + lastNormSize; |
33 | normOffsets[j] = vertOffsets[j] + vertSize; |
36 | // count total cache vertexes and normals |
37 | totalVertSize += vertSize; |
38 | totalNormSize += normSize; |
39 | lastNormSize = normSize; |
42 | // create a vertexcache too |
43 | size_t cacheSize = sizeof( VertCache_t ) + totalVertSize + totalNormSize; |
44 | m_ModelInstances[handle].vertcache = (VertCache_t *)calloc( 1, cacheSize ); |
45 | byte *cache_base = (byte *)m_ModelInstances[handle].vertcache + sizeof( VertCache_t ); |
48 | for( int i = 0; i < m_pStudioHeader->numbodyparts; i++ ) |
50 | m_ModelInstances[handle].vertcache->verts[i] = (Vector *)(cache_base + vertOffsets[i]); // vertex array |
51 | m_ModelInstances[handle].vertcache->norms[i] = (Vector *)(cache_base + normOffsets[i]); // normal array |
Вот тогда вы действительно сможете себе сказать "да, я научился работать с памятью".__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 06-07-2012 в 17:45:
конечно я не понял, для чего это, но ничего такого странного тоже не заметил
Отправлено Chyvachok 10-07-2012 в 17:05:
А как создать разрывные патроны? Чтобы автомат стрелял пулями которые взрываются как стрела арбалета.
Отправлено fire64 10-07-2012 в 17:22:
Chyvachok, делай трассу и в месте попадания создавай взрыв.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено Chyvachok 10-07-2012 в 17:35:
fire64 а как учитывать разброс?
Отправлено Дядя Миша 10-07-2012 в 18:07:
Цитата:
fire64 писал:
Chyvachok, делай трассу и в месте попадания создавай взрыв.
мастер апчхимизаций? Пуля уже и так трассу делает. Достаточно взывать взрыв там же, где и искры.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено pRoxxx 10-07-2012 в 20:07:
Цитата:
Lev писал:
не умею работать с памятью
Оу, видел бы ты как я зафлудил ДМ'у аську из за очистки памяти.
Отправлено Chyvachok 11-07-2012 в 10:36:
Сделал я разрывные патроны, кто хочет может глянуть на мой быдлокод:
Только как эффект взрыва чуть к игроку приблизить? А то он некрасиво в стене рисуется.
C++ Source Code:
2 | //pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg357, vecDir, &tr, DMG_BLAST | DMG_ALWAYSGIB); |
3 | RadiusDamage(tr.vecEndPos, pevAttacker, pevAttacker, gSkillData.plrDmg357Exp, gSkillData.plrDmg357Radius, CLASS_NONE, DMG_BLAST | DMG_ALWAYSGIB); //копипаста из кода ХЛВЕ |
5 | static int iContents = UTIL_PointContents ( tr.vecEndPos ); //копипаста из арбалета |
10 | MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, tr.vecEndPos ); |
11 | WRITE_BYTE( TE_EXPLOSION); |
12 | WRITE_COORD( tr.vecEndPos.x ); |
13 | WRITE_COORD( tr.vecEndPos.y ); |
14 | WRITE_COORD( tr.vecEndPos.z ); |
15 | if (iContents != CONTENTS_WATER) |
17 | WRITE_SHORT( g_sModelIndexFireball ); |
21 | WRITE_SHORT( g_sModelIndexWExplosion ); |
23 | WRITE_BYTE( iScaleExp ); // scale * 10 |
24 | WRITE_BYTE( 15 ); // framerate |
25 | WRITE_BYTE( TE_EXPLFLAG_NONE ); |
Отправлено CrazyRussian 11-07-2012 в 11:26:
Цитата:
Chyvachok писал:
Только как эффект взрыва чуть к игроку приблизить?
Vector origin = tr.vecEndPos + vecDir * -чуть;
где:
"чуть" - насколько отодвигаешь взрыв
vecDir - направление из которого у тебя пускается трасса
origin - результирующее положение эффекта взрыва.__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Отправлено Chyvachok 11-07-2012 в 11:32:
CrazyRussian спасибо, попробую.
Отправлено Дядя Миша 11-07-2012 в 13:31:
вместо чють напиши 24.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено marikcool 11-07-2012 в 14:09:
нормуль)
Отправлено Lev 08-08-2012 в 08:03:
Такой вопрос - как можно сделать, чтоб во время перезарядки любого оружия, нельзя было переключиться на другое, до тех пор, пока перезарядка не завершится - то есть ни через меню оружия, ни через кнопку Q?
Отправлено HAWK0044 08-08-2012 в 08:11:
Lev
Идёшь в player.cpp находишь там
C++ Source Code:
void CBasePlayer::SelectItem(const char *pstr) |
и в самом начале после
C++ Source Code:
вставляешь это
C++ Source Code:
3 | CBasePlayerWeapon *wpn = (CBasePlayerWeapon*)m_pActiveItem; |
5 | if(wpn && wpn->m_fInReload) |
потом ищешь
C++ Source Code:
void CBasePlayer::SelectLastItem(void) |
там после
C++ Source Code:
6 | if ( m_pActiveItem && !m_pActiveItem->CanHolster() ) |
вставляешь
C++ Source Code:
3 | CBasePlayerWeapon *wpn = (CBasePlayerWeapon*)m_pActiveItem; |
5 | if(wpn && wpn->m_fInReload) |
Отправлено Lev 08-08-2012 в 08:48:
Спасибо
Отправлено Lev 23-08-2012 в 08:10:
В атаке у любого ствола есть параметр отвечающий за частоту вызова этой функции - например
C++ Source Code:
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1; |
Как сделать, чтобы при одном нажатии на мышь производился один выстрел - и новый можно было сделать только при повторном нажатии?
Отправлено PLut 23-08-2012 в 08:32:
Lev По форуму бы поискал...
В начало функции стрельбы.
C++ Source Code:
if(!(m_pPlayer->m_afButtonPressed & IN_ATTACK)) |
А промежуток между выстрелами сделай меньше, например было 0.1, сделай 0.01.__________________
Base Defense on Steam, ModDB
Отправлено Lev 23-08-2012 в 08:36:
Если 0.01 - то можно как из автомата стрелять)
Отправлено qpAHToMAS 23-08-2012 в 08:40:
Он хочет пистолет как в CS, а не как Glock в HL, который при +attack стреляет пока не кончатся патроны (а в CS будет лишь 1 выстрел).
Отправлено Lev 23-08-2012 в 08:45:
Да не только - мне ещё нужно третью атаку сделать (в Параное уже две есть) - хочу переключать режим стрельбы. Кстати - где кнопку можно забиндить для этого?
Отправлено qpAHToMAS 23-08-2012 в 08:49:
Цитата:
Lev писал:
где кнопку можно забиндить для этого?
Иначе говоря, нажатие на колесико мыши.
Отправлено Lev 23-08-2012 в 09:13:
Да я проще хотел сделать - чтобы не писать полноценную третью атаку - создать переменную, забиндить на неё кнопку - если нажатать один раз то один режим огня, если ещё раз - то следующий
Отправлено KiQ 23-08-2012 в 09:30:
Lev на импульс сделай
__________________
-Brain is dead-
Отправлено Lev 23-08-2012 в 09:39:
Это как?
Добавлено 23-08-2012 в 15:39:
Вот к примеру переменная
int firemode
Отправлено KiQ 23-08-2012 в 09:47:
емнип, в player.cpp в свитче импульсных команд ставишь свое число (например, 555) и пишешь, допустим:
C++ Source Code:
firemode = (firemode == 0) ? 1 : 0; |
потом биндишь на любую клавишу impulse 555
Добавлено 23-08-2012 в 13:47:
P.S. только не в Cheat Commands, иначе будет работать только с sv_cheats 1__________________
-Brain is dead-
Отправлено Lev 23-08-2012 в 10:55:
Фигня какая-то - всё сделал, но клавиша не работает. Написал в конвиге
bind "b" "impulse 45" - бестолку, хотя если через консоль - то всё работает(sv_cheats 1 не ввожу - просто impulse 45)
Добавлено 23-08-2012 в 16:55:
Да - ещё одно - это значение будет меняться глобально - то есть для всего оружия сразу - можно как-нибудь сохранять это значение для каждой пушки отдельно? Там, завести новую переменную, или ещё как
Отправлено Lev 23-08-2012 в 15:04:
Так - с клавишей разобрался. Теперь хочу вывести сообщение на экран - из CBasePlayer::ImpulseCommands всё выводится нормально
C++ Source Code:
5 | UTIL_ShowMessage("#FIRE_MODE_SINGLE", this ); |
10 | UTIL_ShowMessage("#FIRE_MODE_AUTO", this ); |
- но мне нужно делать это из каждого ствола отдельно. Написал функцию - но не работает
C++ Source Code:
6 | UTIL_ShowMessage("#FIRE_MODE_SINGLE", m_pPlayer ); |
9 | UTIL_ShowMessage("#FIRE_MODE_AUTO", m_pPlayer ); |
- хотя если вызвать UTIL_ShowMessage из любой другой функции в классе оружия - то всё работает
Отправлено marikcool 23-08-2012 в 15:09:
сделай функцию смены огня в CBaseWeapon::Shotmode()
в импульсе вызывай CBasePlayerWeapon::Shotmode(), по типу
pPlayer->m_pActiveItem->Shotmode();
Отправлено Дядя Миша 23-08-2012 в 15:13:
А у тебе Shootmode откуда зовётся?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Lev 23-08-2012 в 15:20:
Ты имеешь в виду void CAPS::Shotmode()? Неоткуда - я думал над этим - но я не знаю откуда её вызывать. Откуда нужно?
Отправлено Дядя Миша 23-08-2012 в 15:25:
Цитата:
Lev писал:
Неоткуда - я думал над этим - но я не знаю откуда её вызывать
Ну а как жы у тебя будет появляться миссага, если ты её ниоткуда не зовешь? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено PLut 23-08-2012 в 18:06:
qpAHToMAS Lev Я дал код, что бы было одно нажатие - один выстрел, что и попросили. В начало в функции выстрела его подсунуть и всё работает. И не будет никакого автомата-пулемета, пробовать надо сначала, а потом говорить.
__________________
Base Defense on Steam, ModDB
Отправлено Lev 23-08-2012 в 18:18:
Цитата:
PLut писал:
qpAHToMAS Lev Я дал код, что бы было одно нажатие - один выстрел, что и попросили. В начало в функции выстрела его подсунуть и всё работает. И не будет никакого автомата-пулемета, пробовать надо сначала, а потом говорить.
Ты меня не понял - я имел в виду что можно быстро жать на кнопку мыши и стрелять как из автомата))
Отправлено Lev 24-08-2012 в 16:53:
В общем патался я сделать, чтобы при смене режима высвечивалось сообщение - но только у того оружия которое имеет альтернативный режим. Значение переменной m_iEnableChangeFifeMode посылается из функции deploy каждого ствола - а ниже указанное сделано в импульных командах в player.cpp - но пока ничего не выходит. Если кто разбирается - подскажите как сделать?
C++ Source Code:
3 | if ( m_iEnableChangeFifeMode == 1 ) |
8 | UTIL_ShowMessage("#FIRE_MODE_SINGLE", this ); |
13 | UTIL_ShowMessage("#FIRE_MODE_AUTO", this ); |
17 | if ( m_iEnableChangeFifeMode == 0 ) |
18 | UTIL_ShowMessage("#FIRE_MODE_NONE", this ); |
Добавлено 24-08-2012 в 22:53:
Так - функцию я написал, всё работает. Теперь только нужно с m_iEnableChangeFifeMode разобраться - не знаю откуда лучше передавать переменную. Пробовал и из прекэша, и из итеминфо - но если в два разных ствола дописать extern int m_iEnableChangeFifeMode и потом прировнять переменную в одном оружии к 0, а во втором к 1 - то работает только одна из них, а вторая игнорируется