Перейти к содержанию

[ Warface ] Краш при убийстве турелей


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

Игра выдаёт краш при убийстве турелей с аимом

Что можно сделать?

 

Спойлер

void CreateHits()
{
	core::initialize();
	if (core::pGameFramework)
	{
		if (core::mActorSystem = core::pGameFramework->GetActorSystem())
		{
			if (core::pGameFramework->GetClientActor(&core::mActor))
			{
				if (core::pEntityIterator = core::gEnv->GetEntitySystem()->GetEntityIterator())
				{
					for (; core::pEntity = core::pEntityIterator->EntityNext();)
					{
						if (core::pActor = core::pGameFramework->GetActorSystem()->GetActor(core::pEntity->GetEntityId()))
						{
							if (core::mActor != core::pActor)
							{
								if (elimination_team(core::mActor, core::pActor))
								{
									AABB aabb;
									core::pEntity->GetWorldBounds(aabb);
									Vec3 vBone = aabb.GetCenter();
									ICharacterInstance* pCharacter = core::pEntity->GetCharacter(0);
									ISkeletonPose* pSkeleton = pCharacter->GetSkeleton();
									const char* cName = core::pEntity->GetName();
									const char* cClassName = core::pEntity->GetEntityClass()->GetIClassName();
									int boneId = GetBonePositionByName(core::pEntity, pSkeleton, cClassName, cName);
									if (KillingEntity(core::pEntity, vBone, boneId, cName, cClassName))
									{
										int material = GetMaterialEnemy(core::pEntity, cName, cClassName);
										KillEnemy(core::mActor, core::pActor, vBone, 0, material);
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

 

 

Изменено пользователем TimaS
Ссылка на комментарий
Поделиться на другие сайты

для начала, я бы избавился от этой кучи вложенностей для улучшения читаемости кода. Примерно так (правильность кода не гарантирую, он демонстриует только идею):

 

Спойлер

void CreateHits()
{
  core::initialize();
  if (!core::pGameFramework) return;
  if (!(core::mActorSystem = core::pGameFramework->GetActorSystem())) return;
  if (!core::pGameFramework->GetClientActor(&core::mActor)) return;
  if (!(core::pEntityIterator = core::gEnv->GetEntitySystem()->GetEntityIterator())) return;
  
  for (; core::pEntity = core::pEntityIterator->EntityNext();) 
  {
    if (!(core::pActor = core::pGameFramework->GetActorSystem()->GetActor(core::pEntity->GetEntityId()))) continue;
    if (core::mActor == core::pActor) continue;
    if (!elimination_team(core::mActor, core::pActor)) continue;
    AABB aabb;
    core::pEntity->GetWorldBounds(aabb);
    Vec3 vBone = aabb.GetCenter();
    ICharacterInstance* pCharacter = core::pEntity->GetCharacter(0);
    ISkeletonPose* pSkeleton = pCharacter->GetSkeleton();
    const char* cName = core::pEntity->GetName();
    const char* cClassName = core::pEntity->GetEntityClass()->GetIClassName();
    int boneId = GetBonePositionByName(core::pEntity, pSkeleton, cClassName, cName);
    if (KillingEntity(core::pEntity, vBone, boneId, cName, cClassName))
    {
      int material = GetMaterialEnemy(core::pEntity, cName, cClassName);
      KillEnemy(core::mActor, core::pActor, vBone, 0, material);
    }
  }
}

 

То есть, инвертировать условие, и делать выход вместо выполнения.

Ссылка на комментарий
Поделиться на другие сайты

В 05.04.2020 в 15:11, Xipho сказал:

То есть, инвертировать условие, и делать выход вместо выполнения.

Спасибо большое, но это не как не помогло

Я решил данную проблему, переписав код для получения костей врагов

В прочем всё работает прекрасно

Ну в прочем за помощь всё равно спасибо

Можете закрывать топик

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, TimaS сказал:

Спасибо большое, но это не как не помогло

А я и не говорил, что это поможет. Я говорил, что это для улучшения читаемости кода.

Ссылка на комментарий
Поделиться на другие сайты

  • Xipho закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.