* * * Форумы на Наша-Life THREAD * * * -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- THREAD : Точность стрельбы NPC (WeaponProficiency) Started at 15-06-2016 12:46 by 6apMaJIeu' Visit at https://bbs.hl-inside.ru/showthread.php?threadid=58169 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 1] Author : 6apMaJIeu' Date : 15-06-2016 12:46 Title : Точность стрельбы NPC (WeaponProficiency) Эй ребятки, замечали когда-нибудь в hl2, что комбайны стреляют как курица лапой, а у повстанцев всё летит в яблочко? И что, например, в garrysmod вообще никто никогда не может в вас попасть? Что ж, раз мне всегда было интересно копать ИИ, чё б и не поделиться. ;D Повторяю, это относится только к пушкам NPC, НЕ ИГРОКА! Сейчас я вам расскажу про такую интересную фичу, как "регулятор точности стрельбы персонажей или WeaponProficiency", пригодится тем, кто создаёт моды на source. Итак, у нас есть 5 видов "точностей", в общем о них: WEAPON_PROFICIENCY_POOR Это полное говно, в garrysmod'e зачем-то его поставили у всех комбинов. При такой "точности" NPC практически никогда не попадает в цель. WEAPON_PROFICIENCY_AVERAGE Типа средняя, только вот нифига она не средняя. Такое же говно, как и poor. WEAPON_PROFICIENCY_GOOD Вот эту я бы назвал средней. При ней NPC хотябы редко попадает. WEAPON_PROFICIENCY_VERY_GOOD NPC часто попадает в цель. Промахов и попаданий примерно 50х50%. WEAPON_PROFICIENCY_PERFECT Редко мажут и практически всегда попадают в яблочко. Но дело в том, что для разных пушек эта фигня работает по разному. Вот пушки доступные npc в hl2: weapon_alyxgun - пушка Аликс weapon_pistol - пистолет 9 мм weapon_smg1 - автомат weapon_ar2 - импульсная винтовка weapon_shotgun - дробовик weapon_rpg - гранатомёт Теперь рекомендуемые значения "точности" для них (да, я все их тестировал): weapon_alyxgun Только perfect, так как это пушка одного из глав. героев. weapon_pistol poor - как ни странно, пистолет в этом плане самый точный. poor будет являться для него средним значением, а perfect точным. Промежуточные никогда не ставьте, потому что разницы не будет никакой. POOR или PERFECT - на выбор - средняя или высокая точности. weapon_smg1 У него уже побольше выбора: perfect - в яблочко very_good - редко мажет good - предел, часто мажет При значениях poor или average для автомата npc ни во что никогда не попадёт. weapon_ar2 Почти то же, что у автомата, но никогда не ставьте perfect. Дело в том, что импульсовка по природе точнее smg и значение при perfect уходит в "минус 1 градус разброса". Хз как это работает, но игра может даже глючить. Итак: GOOD или VERY_GOOD - прилично или всегда в яблочко. wepon_shotgun и weapon_rpg Всегда perfect и точка. Дроб - самый неточный, и требует высокое значение. RPG - вы хотите, чтоб повстанцы мазали мимо страйдера или не стреляли вовсе? Я - нет, ставим perfect. Вот коды оригинала для персов: 1 - солдаты альянса, 2 - метрокопы, 3 - все повстанцы, включая всяких Барни и Аликс. 1. npc_combine.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_Combine::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if( FClassnameIs( pWeapon, "weapon_ar2" ) ) { if( hl2_episodic.GetBool() ) { return WEAPON_PROFICIENCY_VERY_GOOD; } else { return WEAPON_PROFICIENCY_GOOD; } } else if( FClassnameIs( pWeapon, "weapon_shotgun" ) ) { if( m_nSkin != COMBINE_SKIN_SHOTGUNNER ) { m_nSkin = COMBINE_SKIN_SHOTGUNNER; } return WEAPON_PROFICIENCY_PERFECT; } else if( FClassnameIs( pWeapon, "weapon_smg1" ) ) { return WEAPON_PROFICIENCY_GOOD; } return BaseClass::CalcWeaponProficiency( pWeapon ); } [/code] 2. npc_metropolice.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_MetroPolice::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if( FClassnameIs( pWeapon, "weapon_pistol" ) ) { return WEAPON_PROFICIENCY_POOR; } if( FClassnameIs( pWeapon, "weapon_smg1" ) ) { return WEAPON_PROFICIENCY_VERY_GOOD; } return BaseClass::CalcWeaponProficiency( pWeapon ); } [/code] 3. npc_playercompanion.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_PlayerCompanion::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if( FClassnameIs( pWeapon, "weapon_ar2" ) ) { return WEAPON_PROFICIENCY_VERY_GOOD; } return WEAPON_PROFICIENCY_PERFECT; } [/code] Как видите, повстанцы почему-то стреляют лучше комбинов, особенно НЕ в эпизодах. Предлагаю завязать всё на уровнях сложности игры, чтоб точность стрельбы npc можно было регулировать, а также на типах персов. 1. npc_combine.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_Combine::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if( FClassnameIs( pWeapon, "weapon_ar2" ) ) { if( IsElite() || hl2_episodic.GetBool() ) { return WEAPON_PROFICIENCY_VERY_GOOD; } else { return WEAPON_PROFICIENCY_GOOD; } } else if( FClassnameIs( pWeapon, "weapon_shotgun" ) ) { if( m_nSkin != COMBINE_SKIN_SHOTGUNNER ) { m_nSkin = COMBINE_SKIN_SHOTGUNNER; } return WEAPON_PROFICIENCY_PERFECT; } else if( FClassnameIs( pWeapon, "weapon_smg1" ) ) { if( g_pGameRules->IsSkillLevel(SKILL_EASY) ) { return WEAPON_PROFICIENCY_GOOD; } else { return WEAPON_PROFICIENCY_VERY_GOOD; } } return BaseClass::CalcWeaponProficiency( pWeapon ); } [/code] Да, и пусть солдаты ещё и умеют стрелять подстволкой автомата на среднем и высоком уровнях сложности. О том как скомпили-ть модельку солдата, которая может так стрелять, описано здесь: [url]https://bbs.nashalife.ru/showthread.php?s=&threadid=58002[/url] Только после Weapon_OwnsThisType( "weapon_smg1" ) допишите ещё " && !g_pGameRules->IsSkillLevel(SKILL_EASY)" 2. npc_metropolice.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_MetroPolice::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if ( g_pGameRules->IsSkillLevel(SKILL_EASY) || m_bSimpleCops ) { if( FClassnameIs( pWeapon, "weapon_pistol" ) ) { return WEAPON_PROFICIENCY_POOR; } if( FClassnameIs( pWeapon, "weapon_smg1" ) ) { return WEAPON_PROFICIENCY_VERY_GOOD; } } else { return WEAPON_PROFICIENCY_PERFECT; } return BaseClass::CalcWeaponProficiency( pWeapon ); } [/code] 3. npc_playercompanion.cpp [code] //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- WeaponProficiency_t CNPC_PlayerCompanion::CalcWeaponProficiency( CBaseCombatWeapon *pWeapon ) { if( g_pGameRules->IsSkillLevel(SKILL_EASY) || Classify() == CLASS_PLAYER_ALLY_VITAL || m_bGameEndAlly ) { if( FClassnameIs( pWeapon, "weapon_ar2" ) ) { return WEAPON_PROFICIENCY_VERY_GOOD; } return WEAPON_PROFICIENCY_PERFECT; } else { if( FClassnameIs( pWeapon, "weapon_rpg" ) ) { return WEAPON_PROFICIENCY_PERFECT; } if( FClassnameIs( pWeapon, "weapon_shotgun" ) ) { return WEAPON_PROFICIENCY_PERFECT; } return WEAPON_PROFICIENCY_GOOD; } return BaseClass::CalcWeaponProficiency( pWeapon ); } [/code] Вот, теперь всё встало на свои места. Комбины стреляют лучше ситизенов, если уровень сложности не лёгкий. Это естественно касается только обычных повстанцев, но не глав. героев, типа Барни. Герои всегда стреляют отлично. Также элита стреляет лучше обычных солдат. Вальвы должны были всё это учесть, но, видимо, им было лень и они по-моему всё оставили для лёгкого. Ладно, всем спасибо! Надеюсь, моё долбаное исследование кому-нибудь пригодится. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 2] Author : Sten Date : 16-06-2016 08:34 Выглядит полезно=) [size=1]Особенно если учесть, что только в Сорс есть гемплей, во всяких анриелах нормальных блюпринтов все равно нет, что бы сразу был экшон, про упячку даже вспоминать смешно, там и редактора как такового нет :D[/size] Так что старичек Сорс все еще актуален, кому нужно сделать шутан. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 3] Author : Universal Union Date : 29-08-2016 09:03 А это можно изменить только при создании модов? Или можно изменить в коде самой игры? -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 4] Author : Barnacle Date : 29-08-2016 17:24 [b]Universal Union[/b], в любом случае ведь мод получается. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 5] Author : 6apMaJIeu' Date : 01-09-2016 23:11 Как я уже ни раз писал, проблема Стима, что официального, что крякнутого, в том, что даже если ты хочешь внести незначительные изменения в саму игру, тебе всё равно придётся делать мод, который будет являться почти той же самой игрой, включающей твои дополнения или изменения. В бета-версиях программы (или т. п., точно уже не помню) была очень полезная функция preferlocal - вкл/выкл приоритет локальных файлов, так что ты мог вставить dll в саму игру и игра в стиме считывала бы их, не заменяя на оригиналы. Но по какой-то причине эти дураки-программисты решили эту кнопку не добавлять. Но "упоминание" о ней осталось в steam.dll, поэтому в эмуляторах эта кнопка работает. Преимуществом МОДов стима на одиночные игры, в отличии от эмулятора, будет экономия места на жёстком диске, т. к. эмулятор потребует копирования архивов. Но лично меня раздражает сам факт отсутствия столь полезной кнопки, как PreferLocal, и то что надо создавать мод, то что одиночная игра постоянно скачивает какие-то обновления (сетевая понятно, но одиночной-то они зачем?), то что ты получаешь дрянскую иконку мода в списке игр, когда хотел бы просто добавить изменения в саму игру. Поэтому я предпочитаю эмулятор для одиночных, а стим только для сетевых игр, т. к. сетевым нужны обновления. Эмулятор не будет скачивать обновления, бесить тебя при каждом запуске одиночной, не нужно ничего ждать - просто включил игру и играешь, и ещё можешь изменять в ней что хочешь. Только стим надо отключать, т. к. они с эмулятором конфликтуют. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 6] Author : Universal Union Date : 02-09-2016 12:10 Большое спасибо вам за объяснение, просто всего лишь хотелось изменить меткость у Комбинов и всё, а из-за этого придется помучиться. [size=1][i]Universal Union добавил [date]1472818893[/date]:[/i][/size] А ещё один вопрос. Нашел старую версию второй халфы 2, где ещё ранения не очень видны и огонь 2D, на него мод пойдет? [size=1][i]Universal Union добавил [date]1472819136[/date]:[/i][/size] Блин ещё один вопрос, извините, пожалуйста. А если я вставлю в файлах .cpp этот код, то не выдаст ошибку из-за того, что там "{" и "}" стоят не так, как надо? Просто при вставке автоматически не исправляется. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 7] Author : 6apMaJIeu' Date : 02-09-2016 16:12 Да, я тоже не понимаю зачем подобное пихать в исходный код. Сделали бы обычные скрипты, открываемые блокнотом. Было б легче, не надо каждый раз компилировать. Итак, на сколько знаю, у халфы и прочих игр valve было и есть 4 движка: 1. Оригинальный GoldSource или Half-Life Engine: это всякие hl, cs 1.6, оригинальный teamfortress 98 и другие. 2. Дальше появился source 2003 (src protocol 7) - это движок именно hl2. Вроде даже был создан, когда ещё не было стима. Даже к ер1 он уже не подойдёт. В нынешних SDK исходников к нему нет. Если ты скачал не эпизоды, а именно этот старый hl2, исходные коды к нему у меня остались с первых версий SDK, которых уже нет. Могу передать. 3. С выходом ер1 они решили сделать base source engine 2 или source 2005, его также называют src protocol 7 new. Он есть в "source SDK/bin/ep1". 4. Движок ер2 - orangebox, Source 2007, src protocol 14, короче опять куча названий одного и того же. Там как раз уже появился 3d-огонь. Он подходит для ер2 и для новых версий hl2 и ер1 2009, которые были под него переделаны, чтобы был 1 движок, а не 3. По-моему 2007 и 2009 отличаются только названием, я не заметил разницы. Если будешь делать мод - советую использовать именно этот универсальный движок. Код должен работать, если ты правильно вставляешь. Если со вставкой кода проблемы - могу передать 3 перечисленные файла срр, ну и стреляющую гранатами подстволки модельку солдата на замену. Только не забывайте писать какой движок нужен, т. к. для каждого из перечисленных разные срр, да и mdl тоже. Могу передать сами dll или вообще игру, если хотите. Мне не жалко. ;) -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 8] Author : Universal Union Date : 03-09-2016 13:16 Ого! Если можете, то прошу ваш, пожалуйста дайте. Я всегда мечтал об этом, просто в Гаррис Моде играть с другой меткостью все равно не то, как в самой халфе. Не против был бы, чтобы вы скинули dll, саму игру, также cpp(cpp нынешнего движка и движка, в котором 2д огонь), я очень бы хотел. Просто я столько смотрел, как сделать мод, в котором был бы просто весь контент второй халфы, только с измененной меткостью, но в одном видео показывают одно, в другом другое, в третьем вообще другое, аж мозг дымиться начал. БОЛЬШОЕ ВАМ СПАСИБО! Я давно таких людей встречал, я честно это вам говорю! [size=1][i]Universal Union добавил [date]1472908804[/date]:[/i][/size] И если можете, исходный код 2-ой халфы со старым движком. Оказывается, мечты сбываются. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 9] Author : 6apMaJIeu' Date : 04-09-2016 00:51 Прям мечтал? XD Что ж, помогу, потому что сам так же спрашивал, искал и хрен кто что разжуёт. Всё копать самому пришлось. А раз ты даже вставить код не можешь, то тебе ещё кучу времени надо провести, прежде чем хоть что-то получится. Короче, забей на исходники, я тебе на мыло саму игру отправил, там всё есть и солдаты стреляют как надо. Версия хорошая, никаких фейкфактори и прочей ерунды я туда не добавлял. Обычная халфа с парой косметических изменений. То что там будет я написал. Если всё же соберёшься делать мод, делай его лучше в Стиме на последней версии движка, ибо старые нафиг никому не упёрлись. Имею ввиду прям МОД с картами и прочим. ;) Он у тебя будет в SourceMods, туда кидаешь dll, скрипты и прочее, прочее. Но, раз уж попросил, вот код, который совсем старый: [url]https://bbs.nashalife.ru/showthread.php?s=&threadid=58201[/url] А вот тот, что даже сейчас наверное можно найти, они были в лицензионном SDK: [url]https://yadi.sk/d/9x5PtYtTuk5RP[/url] Теперь придётся объяснить как с ними обращаться. Тебе прежде всего нужны Visual Studio 2003 и 2008, можно экспресс-версии (Express), можно другие попробовать, но я юзал эти. Оригиналы кода оставь в архивах, чтоб мог вернуть, если что, работай же с распакованными папками. Дальше открываешь файлы проектов. В них ты можешь редактировать срр и компилировать dll. Вообще срр можно и блокнотом, но это не очень удобно, но компилить dll нужно только Visual Studio. Для старой hl2 - Source Engine, тебе нужен src_code/src/Game_SDK.sln Открыл 2003-й студией - выбрал конфигурацию release, скомпилировал (build) client.dll и server.dll Появятся в папках "..cl_dll/cl_dll___Win32_HL2_Release" и "dlls/release_hl2". Для ер1 тебе нужен src_mod/ep1/Game_HL2-2003.sln; можно 2005, но он какой-то глючной, забей на него. Всё так же, как с предыдущим, но не забудь добавить npc_zombine.cpp, его в 2003-м почему-то нет. Для ер2 src_mod/orangebox/Game_Episodic-2005.sln тут нужна 2008-я студия. dll появляются в папках: orangebox/game/client/release_episodic, orangebox/game/server/release_episodic В мою версию не вставляй их, там не только dll изменены, так что испортишь и не вернёшь. Сделай для тестов другие папки МОДов, как сказано в инструкции, типа так: steam/source engine/"твой мод"/bin steam/base source engine 2/"твой мод"/bin steam/source 2007 binaries/"твой мод"/bin порядок: hl2, ep1, ep2 Фух, вроде всё. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 10] Author : Universal Union Date : 04-09-2016 05:54 Всё, пришло. Ещё раз, спасибо. Всё что вы написали, я попробую сделать. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 11] Author : Universal Union Date : 04-09-2016 12:27 При ребилде в Micrsoft VS 2013 именно в npc_metropolice.cpp выдаёт какие-то ошибки. Не знаете, с чем это связано? Вот скрины: [url]http://prntscr.com/cdzq7b[/url] [url]http://prntscr.com/cdzqhr[/url] [url]http://prntscr.com/cdzqls[/url] [url]http://prntscr.com/cdzqtc[/url] -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 12] Author : 6apMaJIeu' Date : 04-09-2016 17:08 Покажи лучше не ошибки, а часть кода, которую ты изменил. Далее пиши вопросы сюда: [url]https://bbs.nashalife.ru/showthread.php?s=&threadid=49046&perpage=15&highlight=&pagenumber=23[/url] Тема называется "вопрос-ответ" в разделе кодинг. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 13] Author : Universal Union Date : 05-09-2016 09:47 Извините, понял, спасибо. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- [Post 14] Author : koff33 Date : 05-09-2016 15:39 Тему на этом прикрою, однако, если возникнут вопросы именно по точно NPC, то напишите в личку - открою. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The messages has been download from Форумы на Наша-Life at https://bbs.hl-inside.ru at 28.03.2024 01:03:59