Max Warlock 398 Опубликовано 14 Января 2015 (изменено) У меня проблема с виду попроще. Пытаюсь на ЧН сделать пояс по типу ЛА. Добавил в секцию патронов belt = true Патроны стали вешаться на пояс. Нашёл в файле Weapon.cpp итерацию по поиску патронов. Там их две. Одна по m_ruck, а вторая по m_belt. В двух местах. Закомментировал ту, что по m_ruck. //Сколько всего патронов в инвентаре int CWeapon::GetSuitableAmmoTotal(bool use_item_to_spawn) const { int l_count = iAmmoElapsed; if(!m_pInventory) return l_count; //чтоб не делать лишних пересчетов if(m_pInventory->ModifyFrame()<=m_dwAmmoCurrentCalcFrame) return l_count + iAmmoCurrent; m_dwAmmoCurrentCalcFrame = Device.dwFrame; iAmmoCurrent = 0; for(int i = 0; i < (int)m_ammoTypes.size(); ++i) { LPCSTR l_ammoType = *m_ammoTypes[i]; for(TIItemContainer::iterator l_it = m_pInventory->m_belt.begin(); m_pInventory->m_belt.end() != l_it; ++l_it) { CWeaponAmmo *l_pAmmo = smart_cast<CWeaponAmmo*>(*l_it); if(l_pAmmo && !xr_strcmp(l_pAmmo->cNameSect(), l_ammoType)) { iAmmoCurrent = iAmmoCurrent + l_pAmmo->m_boxCurr; } } //#MW0009# // for(TIItemContainer::iterator l_it = m_pInventory->m_ruck.begin(); m_pInventory->m_ruck.end() != l_it; ++l_it) // { // CWeaponAmmo *l_pAmmo = smart_cast<CWeaponAmmo*>(*l_it); // if(l_pAmmo && !xr_strcmp(l_pAmmo->cNameSect(), l_ammoType)) // { // iAmmoCurrent = iAmmoCurrent + l_pAmmo->m_boxCurr; // } // } //#MW0009# if (!use_item_to_spawn) continue; if (!inventory_owner().item_to_spawn()) continue; iAmmoCurrent += inventory_owner().ammo_in_box_to_spawn(); } return l_count + iAmmoCurrent; } //Сколько в инвентаре патронов текущего типа int CWeapon::GetCurrentTypeAmmoTotal() const { int l_count = iAmmoElapsed; if ( !m_pInventory ) { return l_count; } //чтоб не делать лишних пересчетов if ( m_pInventory->ModifyFrame() <= m_dwAmmoCurrentCalcFrame ) { return l_count + iAmmoCurrent; } m_dwAmmoCurrentCalcFrame = Device.dwFrame; iAmmoCurrent = 0; VERIFY( 0 <= m_ammoType && m_ammoType < m_ammoTypes.size() ); { LPCSTR l_ammoType = m_ammoTypes[m_ammoType].c_str(); for(TIItemContainer::iterator l_it = m_pInventory->m_belt.begin(); m_pInventory->m_belt.end() != l_it; ++l_it) { CWeaponAmmo *l_pAmmo = smart_cast<CWeaponAmmo*>(*l_it); if(l_pAmmo && !xr_strcmp(l_pAmmo->cNameSect(), l_ammoType)) { iAmmoCurrent = iAmmoCurrent + l_pAmmo->m_boxCurr; } } //#MW0009# // for(TIItemContainer::iterator l_it = m_pInventory->m_ruck.begin(); m_pInventory->m_ruck.end() != l_it; ++l_it) // { // CWeaponAmmo *l_pAmmo = smart_cast<CWeaponAmmo*>(*l_it); // if(l_pAmmo && !xr_strcmp(l_pAmmo->cNameSect(), l_ammoType)) // { // iAmmoCurrent = iAmmoCurrent + l_pAmmo->m_boxCurr; // } // } //#MW0009# } return l_count + iAmmoCurrent; } ГГ один хрен берёт патроны хоть откуда. Сначала с пояса, а потом с рюкзака. НПС зато расстреляв магазин теряют возможность стрелять и носятся по локациям как оголтелые с дикими криками "Не убивай, мужик!" Итераций по патронам в коде больше не нашёл. Подскажите, люди добрые, шо мне делать с этим несчастьем? Нашёл вот чего: //попытаться найти в инвентаре патроны текущего типа m_pAmmo = smart_cast<CWeaponAmmo*>(m_pInventory->GetAny(*m_ammoTypes[m_ammoType])); if(!m_pAmmo && !m_bLockType) { for(u32 i = 0; i < m_ammoTypes.size(); ++i) { //проверить патроны всех подходящих типов m_pAmmo = smart_cast<CWeaponAmmo*>(m_pInventory->GetAny(*m_ammoTypes[i])); if(m_pAmmo) { m_ammoType = i; break; } } } Помогите, пожалуйста, переделать на то, чтобы искал он на поясе. Изменено 14 Января 2015 пользователем Max Warlock Поделиться этим сообщением Ссылка на сообщение
Max Warlock 398 Опубликовано 15 Января 2015 (изменено) @Карлан, спасибо. Сделал так. Заменил функции в файле WeaponMagazined.cpp Патроны ГГ стал брать исключительно с пояса. Но... NPC теперь расстреляв весь свой магазин, стоят как вкопанные и не перезаряжаются... И орут "Врёшь, не уйдёшь!" Изменено 15 Января 2015 пользователем Max Warlock Поделиться этим сообщением Ссылка на сообщение