Перейти к контенту

Редактирование движка X-Ray


Rolan

Рекомендуемые сообщения

У меня проблема с виду попроще. Пытаюсь на ЧН сделать пояс по типу ЛА.

Добавил в секцию патронов 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; 
				}
			}
		}

 

 

 

Помогите, пожалуйста, переделать на то, чтобы искал он на поясе.

Изменено пользователем Max Warlock

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, спасибо. Сделал так. Заменил функции в файле WeaponMagazined.cpp

Патроны ГГ стал брать исключительно с пояса. Но... NPC теперь расстреляв весь свой магазин, стоят как вкопанные и не перезаряжаются... И орут "Врёшь, не уйдёшь!" :)

Изменено пользователем Max Warlock

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...