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=3010)
Отправлено DefilerUnit 22-09-2011 в 09:44:
динамичный прицел
кто знает как можно сделать динамичный прицел чтоб он реагирвал на скорость игрока
Отправлено Дядя Миша 22-09-2011 в 09:49:
Разве в параное не такой прицел?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DefilerUnit 22-09-2011 в 11:04:
ну дак такой тык надо чтоб кто то разжевал как это сделать
Отправлено Дядя Миша 22-09-2011 в 12:39:
TrashBot так ты хотябы начни разбираться. А то всё разжевал, да в рот положил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DefilerUnit 22-09-2011 в 15:10:
да как бы всё ок только пока нету возможности поиском пробижаться по всей библиотеке в поиске кода прицела. ну я думаю он на клиенте а раз на клиенте, то тут небольшой ньюанс.
Дядя Миша ты ведь вроде уже эксперементировал с прицелом в ксаше, вот скажи с ним получится такое?: еси скорость такая игрока юзается такой спрайт еси другая юзается другой спрайт
Отправлено Дядя Миша 22-09-2011 в 15:23:
TrashBot запросто.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DefilerUnit 22-09-2011 в 17:48:
итак нашел где код прицела он оказывается в ammo.cpp (афигеть куда его засунули) и нашел код где он меняется:
if ( gHUD.m_iFOV >= 90 )
{ // normal crosshairs
if (fOnTarget && m_pWeapon->hAutoaim)
SetCrosshair(m_pWeapon->hAutoaim, m_pWeapon->rcAutoaim, 255, 255, 255);
else
SetCrosshair(m_pWeapon->hCrosshair, m_pWeapon->rcCrosshair, 255, 255, 255);
}
else
{ // zoomed crosshairs
if (fOnTarget && m_pWeapon->hZoomedAutoaim)
SetCrosshair(m_pWeapon->hZoomedAutoaim, m_pWeapon->rcZoomedAutoaim, 255, 255, 255);
else
SetCrosshair(m_pWeapon->hZoomedCrosshair, m_pWeapon->rcZoomedCrosshair, 255, 255, 255);
}
значит мне нужно прописать еще один Crosshair и топать на сервер а на сервере прописывать что типо m_fInZoom = 1; который будет юзать мой прицел при разной speed. Или можно как то на клиенте if (speed ) написать?
Отправлено Дядя Миша 22-09-2011 в 17:55:
да не, на сервер топать необязательно.
Достаточно расшарить через глобальную переменную clientdata->velocity
например из функции HUD_TxferLocalOverrides.
Ну и там сделать sqrt( DotProduct( velocity, velocity )) и получить текущую скорость игрока.
И скорость эта будет обычно равна трём значениям: 320 - когда бежишь, 160 когда идешь и 0 когда стоишь. Ну и вот опираясь на эти значения и надо делать условия.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DefilerUnit 22-09-2011 в 21:08:
Дядя Миша напиши тутор плиз
Отправлено Ku2zoff 23-09-2011 в 01:14:
TrashBot тебе примерно объяснили, как найти скорость игрока на клиенте. В HUD_Redraw рисуй четыре полоски через FillRGBA и меняй их координаты в зависимости от скорости. Вот тут тутор по динамическому разбросу пуль. Правда он для HL2, но адаптировать под ХЛ думаю можно, функция GetDynamicSpread это то, что нужно. Если там есть специфичные для сорсСДК функции, то их можно заменить на родные из ХЛ.
Отправлено Дядя Миша 23-09-2011 в 05:50:
TrashBot вон, пусть лучше Ku2zoff напишет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 23-09-2011 в 08:46:
Дядя Миша мне и самомму такой прицел нужен, только не сейчас, а как-нибудь попозже. Может сегодня попробую написать, а может потом...
Добавлено 23-09-2011 в 15:40:
Я думаю, лучше данные о размере прицела посылать с сервера, чтобы учитывать не только скорость игрока и то, сидит он или стоит, но ещё и вектор разброса оружия, который будем рассчитывать на сервере в зависимости от количества выстрелов.
Добавлено 23-09-2011 в 15:46:
А передавать это число можно через fuser4 или iuser4, они вроде как ни под что не заюзаны.
Отправлено PLut 23-09-2011 в 11:14:
C++ Source Code:
3 | float cross_size = 20.0f; |
5 | cross_size += gHUD.m_iCSize; // gHUD.m_iCSize - переменная, значение которой я увеличиваю при выстреле. у меня в эвенте. |
7 | if (gHUD.m_iCSize > 0.0f) |
8 | gHUD.m_iCSize -= (gHUD.m_flTimeDelta * CVAR_GET_FLOAT( "hud_crosshair_speed" )); // возвращаем прицелу изначальный размер. hud_crosshair_speed сами подбирайте, какая скорость больше нравится. |
10 | if (gHUD.m_iCSize > 32.0f) |
11 | gHUD.m_iCSize = 32.0f; // ограничиваем переменную |
13 | if (gHUD.m_iCSize < 0.0f) |
14 | gHUD.m_iCSize = 0.0f; // ограничиваем переменную |
16 | if( CVAR_GET_FLOAT( "hud_crosshair" ) ) // рисуем, если hud_crosshair 1 |
21 | x = (ScreenWidth/2)-cross_size+1; |
23 | FillRGBA(x, y, iWidth, iHeight, r, g, b, 255); |
28 | x = (ScreenWidth/2)+cross_size; |
30 | FillRGBA(x, y, iWidth, iHeight, r, g, b, 255); |
36 | y = (ScreenHeight/2)-cross_size+1; |
37 | FillRGBA(x, y, iWidth, iHeight, r, g, b, 255); |
43 | y = (ScreenHeight/2)+cross_size; |
44 | FillRGBA(x, y, iWidth, iHeight, r, g, b, 255); |
Основано на коде из паранойи.
Банальный клиентский прицел, но без изменения размера при передвижении.
Прибавляю единицу в подобном (cross_size+1) месте, для вида, можете её убрать и посмотреть что будет. На точность прицела почти не влияет.
И кстати! Никто не отменял вариант "посмотреть в арранжмоде". Там он больше на ксовский похож. Размер меняется при движении, прыжке, присядке, стрельбе.__________________
Base Defense on Steam, ModDB
Отправлено Ku2zoff 23-09-2011 в 12:56:
PLut чего ж так дофига кода-то?
У меня код отрисовки всего 14 строчек занял. Ну плюс ещё потом добавлю строчки четыре для изменения размера.
Добавлено 23-09-2011 в 19:51:
C++ Source Code:
5 | int xPos = ScreenWidth/2; |
6 | int yPos = ScreenHeight/2; |
13 | FillRGBA(xPos - iDepth/2, yPos - iDepth/2, iDepth, iDepth, r, g, b, a); // center |
15 | FillRGBA(xPos - iDepth/2, yPos - iDist - iLength, iDepth, iLength, r, g, b, a); // top |
16 | FillRGBA(xPos - iDepth/2, yPos + iDist, iDepth, iLength, r, g, b, a); // bottom |
18 | FillRGBA(xPos - iDist - iLength, yPos - iDepth/2, iLength, iDepth, r, g, b, a); // left |
19 | FillRGBA(xPos + iDist, yPos - iDepth/2, iLength, iDepth, r, g, b, a); // right |
А вот мой вариант. На некоторых разрешениях выглядит неровно. Но на 1024 и 1280 нормально. Посередине есть точка
Как в ДОДе.
Добавлено 23-09-2011 в 19:56:
Цитата:
PLut писал:
"посмотреть в арранжмоде".
Там прицел кварами меняется
При стрельбе с сервера идёт команда, изменяющая квар. В старых исходниках арранжевого мента точно так. В новых - не знаю.
Отправлено Дядя Миша 23-09-2011 в 13:05:
Та вы чего, меряетесь, кто код короче напишет? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'