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

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

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

Пару вопросов по движковой структуре SHit.

Hit.h:

SHit (float Power, Fvector &dir, CObject *who, u16 element, Fvector p_in_object_space, float impulse, ALife::EHitType hit_type, float ap = 0.0f, bool AimBullet=false);

Hit.cpp:

SHit::SHit(float aPower, Fvector &adir, CObject *awho, u16 aelement, Fvector ap_in_bone_space, float aimpulse, ALife::EHitType ahit_type, float aAP, bool AimBullet)

Названия аргументов в объявлении не совпадают с названиями в реализации. Я всегда думал, что должно совпадать ?

u16 element - косточка, по которой пришелся хит ? Не могу найти, где перечислены все возможные косточки, подскажите.

 

Класс CEntityCondition как я понимаю используется и для актера и для мобов. А как в этом классе определиться - "кто мы сейчас". Т.е., к примеру в ф-ции этого класса ConditionHit определить, для кого она сработала - для актера или не актера ?

Изменено пользователем AndreySol
Ссылка на комментарий

У меня вопрос по компиляции исходников СДК: делаю все по этому тутору. Когда подключаю package SDK\components\AlexMX\editor.bpl builder вылетает. Вот как подключаю

Потом выбираю SDK\components\AlexMX\editor.bpl Сначала ругалось на отсутствие rtl60.bpl, vcl60.bpl и т.д. Все нужные bpl нашел, и теперь вот вылетает. Из-за чего может вылетать? Или я неправильно подключаю новые package? Заранее спасибо!

  • Полезно 1
Ссылка на комментарий

Тут вот нашел такое в движке - в CEntityCondition::ConditionHit обработка хита:

      float hit_power_org = pHDS->damage();
      float hit_power = hit_power_org;
      hit_power = HitOutfitEffect(hit_power, pHDS->hit_type, pHDS->boneID, pHDS->ap);

далее:

float CEntityCondition::HitOutfitEffect(float hit_power, ALife::EHitType hit_type, s16 element, float AP)
{
....
      pOutfit->Hit(hit_power, hit_type);
....
}

далее в:

CCustomOutfit::Hit(float hit_power, ALife::EHitType hit_type)
{
      hit_power *= m_HitTypeK[hit_type];
      ChangeCondition(-hit_power);
}

Если я ничего не проглядел, то получается, что при получении к примеру телепатического(ну и радиационного до кучи) хита, происходит износ броника ?

Изменено пользователем AndreySol
Ссылка на комментарий

Здравствуйте.
Мне нужно выделить и удалить часть строки заключенную в круглые скобки. Например, строку "abc(def)" разделить на "abc" и "def".
У меня получился следующий код:

Скрытый текст

xr_string               str = array_str[i].c_str();
xr_string               part;

xr_string::size_type    bb = str.find( "(" );
xr_string::size_type    eb = str.find( ")" );
if ( bb != xr_string::npos && eb != xr_string::npos )
{
    part                = str.substr( bb + 1, eb - bb - 1 );
    str.resize          ( bb );
}

 

Всё работает, но подскажите, пожалуйста, может, есть более правильный способ или более простой?

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

Ссылка на комментарий

ТЧ 1.0007rc1. Такая вот задачка: при установке\смене броника в слот снимать предмет из другого слота. Сейчас сделал так:

Скрытый текст

 

в CCustomOutfit::OnMoveToSlot() добавил
 PIItem pRemItem = pActor->inventory().ItemFromSlot(NEWITEM_SLOT);
 if (pRemItem)
 {  
  CUIGameSP* pGameSP = NULL;
  CUI* ui = HUD().GetUI();
  if (ui && ui->UIGame())
  {
   pGameSP = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame());
   if (pGameSP)
   {
    if (pGameSP->MainInputReceiver() == pGameSP->InventoryMenu)
    {
     pGameSP->InventoryMenu->RemToBag(pRemItem); <- если окно инвентаря открыто
    }
    else
    {   
     pActor->inventory().Ruck(pRemItem); <- все остальные случаи
    }
   }
  }
 }
в UIInventoryWnd.h:
bool RemToBag(PIItem pItem);
CUIDragDropListEx* m_pUINewItemList;
в UIInventoryWnd.cpp:
m_pUINewItemList инициализируем аналогично m_pUIOutfitList например.
в CUIInventoryWnd::RemToBag(PIItem pItem)
{
 if (GetInventory()->CanPutInRuck(pItem))
 {
  CUICellItem* itm = m_pUINewItemList->ItemsCount() ? m_pUINewItemList->GetItemIdx(0) : NULL;
  CUIDragDropListEx* new_owner = m_pUIBagList;

  bool result = GetInventory()->Ruck(pItem);
  VERIFY(result);
  CUICellItem* i = m_pUINewItemList->RemoveItem(itm, false);

  new_owner->SetItem(i);

  SendEvent_Item2Ruck(pItem);
  return true;
 }

 return false;
}

 

Ни чего лучше не придумалось, но вроде работает. Собственно хочу спросить: кто нить решал подобную задачу и может ли предложить более лучший вариант ?
А то сдается мне, что мой вариант - гадкий и кривой костыль...

Изменено пользователем AndreySol
Ссылка на комментарий

[ТЧ 1.0007rc1]

Приветствую.

Думал в теме про C++ задать этот вопрос, но он (имхо) ближе к движку и поэтому здесь. Итак...

Начал разбираться в движке, и возник такой нубский вопрос по типах переменных (и не только по ним):

Скрытый текст

    Flags8, Flags16, Flags32      <--- Что это за флаги? Для чего используются?
    u8, u16, u32                          <--- Это 'unsigned _int8', 'unsigned _int16', 'unsigned _int32' или что то другое?
    s16, s32                                <--- Это тип 'string' 16ти и 32х битные или нет?
    f32,                                        <--- Это тип 'float' 32х-битный? Если да, то чем отличается от стандартного 'float' ?
    BOOL, TRUE / FALSE           <--- Почему типы 'boolean' в верхнем регистре? Есть ли отличие от просто 'bool', 'true', 'false' ?
    LPSTR                                   <--- Что это за строка, чем отличается, например, от 's16', 'string16', 'char' ?
    IC, ICF                                   <--- Что это за тип / класс / структура / шаблон...?
    string16, string32, string64, string128, string256, string1024       <--- Чем эти строки отличаются от других?

                                                                                                                Цифры означают битность или размер чего-либо?
    
    (CParticlesObject*&   pParticles)        <--- Это ссылка и указатель одновременно? До сих пор, путаю указатели и ссылки, а тут всё в одном флаконе =)

 

Что это за типы? Чем отличаются от стандарта C++?

 

Скрытый текст

Так же, буду благодарен за объяснения "авторских" типов из движка, которые здесь не указаны.

Кроме стандартных, разумеется. А может и стандартные у GSC перегружены / переписаны.

Если это, уже где-то "разжёвано", то, пожалуйста, покажите направление куда смотреть.

 

Заранее, признателен за ответы.

Ссылка на комментарий

How i can fix this bug with weapon strafe feature (LA)?

Russian:

Скрытый текст

Как я могу исправить эту ошибку c weapon strafe (LA)


https://www.youtube.com/watch?v=f2pbL4jNy08

Ссылка на комментарий
5 часов назад, DDamian724 сказал:

strafe feature

А причём тут движок ? Это же анимация. Вот нормальная анимация strafe: 

https://yadi.sk/d/3vxsfGnR3My6NV

правда для CoP. Не знаю подойдёт ли для LA.

Ссылка на комментарий
22 часа назад, Space.Marine сказал:

A gdzie jest silnik? To ta sama animacja. Oto normalna animacja strafeów: 

https://yadi.sk/d/3vxsfGnR3My6NV

prawda dla CoP. Nie wiem, czy nadaje się do LA.

I ported weapon strafe from LA. To my own revision of engine

Ссылка на комментарий

Вопрос по восприятию кода движка.

Необходимо понять условия для воспроизведения звука NPC: 

 

Подсказали, что нужно смотреть условия в исходном коде:
https://www.gameru.net/forum/index.php?s=&showtopic=69272&view=findpost&p=1623127

 

Ок. Вот и он:

 

eStalkerSoundDie и eStalkerSoundDieInAnomaly

 

 

 

    if (is_special_killer(who))
        sound().play                (eStalkerSoundDieInAnomaly);
    else
        sound().play                (eStalkerSoundDie);
 
 

eStalkerSoundInjuring

 

 

 

 

 

        if (entity_alive && !wounded()) {
            if (is_relation_enemy(entity_alive))
                sound().play        (eStalkerSoundInjuring);
//            else
//                sound().play        (eStalkerSoundInjuringByFriend);
        }
 
    if (object().memory().enemy().selected()) {
        u32                                    min_queue_size, max_queue_size, min_queue_interval, max_queue_interval;
        float                                distance = object().memory().enemy().selected()->Position().distance_to(object().Position());
        select_queue_params                    (distance,min_queue_size, max_queue_size, min_queue_interval, max_queue_interval);
        object().CObjectHandler::set_goal    (eObjectActionIdle,object().best_weapon(),min_queue_size, max_queue_size, min_queue_interval, max_queue_interval);
    }
    else
        object().CObjectHandler::set_goal    (eObjectActionIdle,object().best_weapon());

    object().sight().setup                    (CSightAction(SightManager::eSightTypeCurrentDirection,true,true));
    object().sound().play                    (eStalkerSoundInjuring);
}
 
 

eStalkerSoundHumming

 

 

 

 

 

void CStalkerActionSmartTerrain::execute                ()
{
    inherited::execute                    ();

    if (completed())
        object().CObjectHandler::set_goal        (eObjectActionStrapped,object().best_weapon());

    object().sound().play                        (eStalkerSoundHumming,60000,10000);

    CSE_ALifeHumanAbstract                        *stalker = smart_cast<CSE_ALifeHumanAbstract*>(ai().alife().objects().object(m_object->ID()));
    VERIFY                                        (stalker);
    VERIFY                                        (stalker->m_smart_terrain_id != 0xffff);

    CALifeSmartTerrainTask                        *task = stalker->brain().smart_terrain().task(stalker);
    THROW2                                        (task,"Smart terrain is assigned but returns no task");
 
    if (completed())
        object().CObjectHandler::set_goal        (eObjectActionStrapped,object().best_weapon());

    object().sound().play                        (eStalkerSoundHumming,60000,10000);
 
 

eStalkerSoundBackup

 

 

 

                if (object().memory().visual().visible_now(object().memory().enemy().selected()) && object().agent_manager().member().group_behaviour())
                    object().sound().play        (eStalkerSoundBackup,0,0,6000,4000);
    }
 
 

eStalkerSoundDetour и eStalkerSoundNeedBackup

 

 

 

 

 

    if (object().agent_manager().member().cover_detouring() && fire_make_sense()) {
//        object().sound().play        (eStalkerSoundDetour,3000,3000,10000,10000);
        object().sound().play        (eStalkerSoundNeedBackup,3000,3000,10000,10000);
        fire                        ();
    }
 
    if (object().memory().enemy().selected()->human_being() && object().agent_manager().member().group_behaviour())
//        object().sound().play            (eStalkerSoundNeedBackup);
        object().sound().play            (eStalkerSoundDetour);
//#endif
}
 
 

eStalkerSoundInjuringByFriend

 

 

 

        if (entity_alive && !wounded()) {
            if (is_relation_enemy(entity_alive))
                sound().play        (eStalkerSoundInjuring);
//            else
//                sound().play        (eStalkerSoundInjuringByFriend);
        }
 
 

eStalkerSoundPanicHuman и eStalkerSoundPanicMonster

 

 

 

void CStalkerActionCombatBase::play_panic_sound        (u32 max_start_time, u32 min_start_time, u32 max_stop_time, u32 min_stop_time, u32 id)
{
    object().sound().play    (
        object().memory().enemy().selected()->human_being() ?
        eStalkerSoundPanicHuman :
        eStalkerSoundPanicMonster,
        max_start_time,
        min_start_time,
        max_stop_time,
        min_stop_time,
        id
    );
}
 
 

eStalkerSoundTolls

 

 

 

    if (agent_manager().member().group_behaviour())
        sound().play            (StalkerSpace::eStalkerSoundTolls);

    reaction.clear                ();
}
 
 

eStalkerSoundGrenadeAlarm

 

 

 

        if (is_relation_enemy(initiator))
            sound().play        (StalkerSpace::eStalkerSoundGrenadeAlarm);
 
 

eStalkerSoundFriendlyGrenadeAlarm

 

 

 

            if (missile->Position().distance_to(Position()) < FRIENDLY_GRENADE_ALARM_DIST)
                sound().play    (StalkerSpace::eStalkerSoundFriendlyGrenadeAlarm);
    }
 
 

eStalkerSoundRunningInDanger и eStalkerSoundWalkingInDanger

 

 

 

            if    (
                    (eBodyStateStand == movement().body_state())
                    &&
                    (eMovementTypeRun == movement().movement_type())
                ) {
                sound().play    (eStalkerSoundRunningInDanger);
            }
            else {
//                sound().play    (eStalkerSoundWalkingInDanger);
            }
 
 

eStalkerSoundKillWounded

 

 

 

void CStalkerActionPrepareWounded::initialize                ()
{
    inherited::initialize    ();

    object().movement().set_desired_direction    (0);
    object().movement().set_path_type            (MovementManager::ePathTypeLevelPath);
    object().movement().set_detail_path_type    (DetailPathManager::eDetailPathTypeSmooth);
    object().movement().set_mental_state        (eMentalStateDanger);
    object().movement().set_body_state            (eBodyStateStand);
    object().movement().set_movement_type        (eMovementTypeStand);
    object().sound().play                        (eStalkerSoundKillWounded);
    object().CObjectHandler::set_goal            (eObjectActionAimReady1,weapon_to_kill(&object()),MIN_QUEUE,MAX_QUEUE,MIN_INTERVAL,MAX_INTERVAL);
}
 
 

eStalkerSoundEnemyCriticallyWounded

 

 

 

    if (!can_cry_enemy_is_wounded())
        return;

    sound().play                    (eStalkerSoundEnemyCriticallyWounded);
}
 
 

eStalkerSoundEnemyKilledOrWounded

 

 

 

void CAI_Stalker::on_enemy_wounded_or_killed    (const CAI_Stalker *wounded_or_killed)
{
    if (!can_cry_enemy_is_wounded())
        return;

    sound().play                    (eStalkerSoundEnemyKilledOrWounded);
}
 
 

eStalkerSoundAttackNoAllies и eStalkerSoundAttackAlliesSingleEnemy и eStalkerSoundAttackAlliesSeveralEnemies

 

 

 

void CStalkerActionCombatBase::play_attack_sound    (u32 max_start_time, u32 min_start_time, u32 max_stop_time, u32 min_stop_time, u32 id)
{
    if (!object().memory().enemy().selected()->human_being())
        return;

    if (!object().agent_manager().member().can_cry_noninfo_phrase())
        return;

    u32                        sound_type = eStalkerSoundAttackNoAllies;
#ifdef DEBUG
    if (object().agent_manager().member().combat_members().empty())
        Msg                    (
            "! I am in combat, but there is no combat members at all (including me), npc[%s],team[%d],squad[%d],group[%d]",
            *object().cName(),
            object().g_Team(),
            object().g_Squad(),
            object().g_Group()
        );
#endif // DEBUG

    if (object().agent_manager().member().combat_members().size() > 1) {
        if (object().agent_manager().enemy().enemies().size() > 1)
            sound_type        = eStalkerSoundAttackAlliesSeveralEnemies;
        else
            sound_type        = eStalkerSoundAttackAlliesSingleEnemy;
    }
    else
        sound_type            = eStalkerSoundAttackNoAllies;

    object().sound().play    (
        sound_type,
        max_start_time,
        min_start_time,
        max_stop_time,
        min_stop_time,
        id
    );
}
 
 

eStalkerSoundSearch1NoAllies и eStalkerSoundSearch1WithAllies

 

 

 

void CStalkerActionCombatBase::play_start_search_sound    (u32 max_start_time, u32 min_start_time, u32 max_stop_time, u32 min_stop_time, u32 id)
{
    if (!object().agent_manager().member().can_cry_noninfo_phrase())
        return;

#ifdef DEBUG
    if (object().agent_manager().member().combat_members().empty())
        Msg                    ("! I am in combat, but there is no combat members at all (including me), npc[%s],team[%d],squad[%d],group[%d]",
            *object().cName(),
            object().g_Team(),
            object().g_Squad(),
            object().g_Group()
        );
#endif // DEBUG

    bool                    search_with_allies = object().agent_manager().member().combat_members().size() > 1;

    object().sound().play    (
        search_with_allies ?
        eStalkerSoundSearch1WithAllies :
        eStalkerSoundSearch1NoAllies,
        max_start_time,
        min_start_time,
        max_stop_time,
        min_stop_time,
        id
    );
}
 
 

eStalkerSoundThrowGrenade

 

 

 

void CStalkerCombatActionThrowGrenade::initialize            ()
{
    inherited::initialize                    ();

    object().movement().set_mental_state    (eMentalStateDanger);

    const CInventoryItem                    *grenade = object().inventory().ItemFromSlot(GRENADE_SLOT);
    VERIFY                                    (grenade);
    m_grenade_id                            = grenade->object().ID();

    object().movement().set_movement_type    (eMovementTypeStand);
    object().movement().set_body_state        (eBodyStateStand);
    object().sound().play                    (eStalkerSoundThrowGrenade);
    m_storage->set_property                    (eWorldPropertyStartedToThrowGrenade, true);
}
 
 

eStalkerSoundWounded

 

 

 

    if (agent_manager().member().group_behaviour()) {
        if (!reaction.m_member->g_Alive())
            sound().play        ( StalkerSpace::eStalkerSoundTolls, 3000, 2000 );
 
 

eStalkerSoundEnemyLostNoAllies и eStalkerSoundEnemyLostWithAllies

 

 

 

void CStalkerActionCombatBase::play_enemy_lost_sound    (u32 max_start_time, u32 min_start_time, u32 max_stop_time, u32 min_stop_time, u32 id)
{
    if (!object().agent_manager().member().can_cry_noninfo_phrase())
        return;

#ifdef DEBUG
    if (object().agent_manager().member().combat_members().empty())
        Msg                    ("! I am in combat, but there is no combat members at all (including me), npc[%s],team[%d],squad[%d],group[%d]",
            *object().cName(),
            object().g_Team(),
            object().g_Squad(),
            object().g_Group()
        );
#endif // DEBUG

    bool                    search_with_allies = object().agent_manager().member().combat_members().size() > 1;

    object().sound().play    (
        search_with_allies ?
        eStalkerSoundEnemyLostWithAllies :
        eStalkerSoundEnemyLostNoAllies,
        max_start_time,
        min_start_time,
        max_stop_time,
        min_stop_time,
        id
    );
}
 


Не нашел вообще:

sound_attack
sound_search
Изменено пользователем aka_sektor
  • Согласен 1
Ссылка на комментарий
 


sound_death и sound_anomaly_death - тут в общем-то понятно, что звук воспроизводится при смерти NPC.
Вопрос ток в том, как он понимает, что умер в аномалии. Думаю оператор "else", зависит от "(who)".

Скрытый текст


notify_on_wounded_or_killed		(who);

 

sound_hit - тут говорится, если жив и ранен. Или "wounded" следует понимать как получил ранение? (второй код не ясен) Судя по звуку, именно так.

sound_humming - тут чет про смарт-террейн, и то что объект привязан. В скобках некие цифры, наверное задержка. Во втором коде, если что-то выполнено, и опять же привязан. Судя по звуку, эт бездействие. Что вроде как сходится, сидит у костра говорит, сразу после боя, точнее после фразы "ну что передохнём маленько..." начинает стоять рассказывать "про сапоги хреновые".

sound_alarm - вроде разобрали уже, эт когда обнаружил врага. 

sound_backup -  тут что-то похожее на предыдущий. Тоже, если видит врага, поведение в группе. Судя по звукам, там говорится "На получи! или Ты труп мужик!"
Даже не знаю, как-то непонятно что тут служит условием. Видимо тоже обнаружение врага, но без проверки человек ли это. Видать и на монстров чтобы кричали. Что странно, учитывая фразу про мужика... хотя... вроде наблюдал такое, когда на монстра так кричали.

sound_detour - если враг человек, поведение в группе. Судя по звуку, "просит прикрыть", а также как у предыдущего, кричит "На получи!" или Ты труп мужик!".

sound_need_backup - если cover_detouring и fire_make_sense. Типа если "можно обойти" и "стрельба имеет смысл". Судя по звуку, кричит "Рви! Я его прижал!".

sound_friendly_fire - это похоже то же что и sound_hit, но закомментировано. Плюс проверка (условие) какое-то насчет отношения (наверное типа друг/враг).

sound_panic_human и sound_panic_monster - тут не очень понятно. Похоже они оба завязаны на боёвку, с тем условием что если враг человек. По звукам, то что говорит NPC убегая от врага NPC или монстра. Уже не знаю, делает ли игра разницу, кто враг. Думается что нет...

sound_tolls - тут просто, поведение в группе. А по звуку, говорит "Тут нашего убили". Эт явно не случайно. Но условий для этого чет не вижу в коде. Хотя... тут наверное следует смотреть полный код:

Скрытый текст


void CAI_Stalker::react_on_member_death	()
{
	CMemberOrder::CMemberDeathReaction	&reaction = agent_manager().member().member(this).member_death_reaction();
	if (!reaction.m_processing)
		return;

	if (Device.dwTimeGlobal < reaction.m_time + TOLLS_INTERVAL)
		return;

	if (agent_manager().member().group_behaviour())
		sound().play			(StalkerSpace::eStalkerSoundTolls);

	reaction.clear				();
}

 

Реакция на смерть союзника. Ток не пойму, как NPC это определяет? По коду? Или сам видел как убили? Или нашёл тело?
Здесь некий интервал, задержка времени видимо. Думаю, тут по коду, данные из боя приходят, через некоторое время NPC воспроизводит звук.
sound_grenade_alarm - тоже непонятное, просто: если отношение враг. Также надо полный код:

Скрытый текст


void CAI_Stalker::react_on_grenades		()
{
	CMemberOrder::CGrenadeReaction	&reaction = agent_manager().member().member(this).grenade_reaction();
	if (!reaction.m_processing)
		return;

	if (Device.dwTimeGlobal < reaction.m_time + GRENADE_INTERVAL)
		return;

//	u32							interval = AFTER_GRENADE_DESTROYED_INTERVAL;
	const CMissile				*missile = smart_cast<const CMissile*>(reaction.m_grenade);
//	if (missile && (missile->destroy_time() > Device.dwTimeGlobal))
//		interval				= missile->destroy_time() - Device.dwTimeGlobal + AFTER_GRENADE_DESTROYED_INTERVAL;
//	m_object->agent_manager().add_danger_location(reaction.m_game_object->Position(),Device.dwTimeGlobal,interval,GRENADE_RADIUS);

	if (missile && agent_manager().member().group_behaviour()) {
//		Msg						("%6d : Stalker %s : grenade reaction",Device.dwTimeGlobal,*m_object->cName());
		CEntityAlive			*initiator = smart_cast<CEntityAlive*>(Level().Objects.net_Find(reaction.m_grenade->CurrentParentID()));
		if (is_relation_enemy(initiator))
			sound().play		(StalkerSpace::eStalkerSoundGrenadeAlarm);
		else
			if (missile->Position().distance_to(Position()) < FRIENDLY_GRENADE_ALARM_DIST)
				sound().play	(StalkerSpace::eStalkerSoundFriendlyGrenadeAlarm);
	}

	reaction.clear				();
}

 

Реакция на гранату, missile (ракета? снаряд? Наверное имеется ввиду полет гранаты), поведение в группе. Судя по звуку, сообщает NPC, что рядом с ним граната упала.

sound_friendly_grenade_alarm - а тут как у предыдущего, с поправкой на дистанцию. Видимо, NPC бросил гранату, слишком близко к союзникам.
P.S. Не помню таких фраз в игре. Может очень редки.sound_running_in_danger и sound_walking_in_danger - тут что-то про тип передвижения, если стоит на месте или бежит. Второй, который walking, закомментирован.
Как-то непонятно, надо снова полный код:

Скрытый текст


void CAI_Stalker::UpdateCL()
{
	START_PROFILE("stalker")
	START_PROFILE("stalker/client_update")
	VERIFY2						(PPhysicsShell()||getEnabled(), *cName());

	if (g_Alive()) {
		if (g_mt_config.test(mtObjectHandler) && CObjectHandler::planner().initialized()) {
			fastdelegate::FastDelegate0<>								f = fastdelegate::FastDelegate0<>(this,&CAI_Stalker::update_object_handler);
#ifdef DEBUG
			xr_vector<fastdelegate::FastDelegate0<> >::const_iterator	I;
			I	= std::find(Device.seqParallel.begin(),Device.seqParallel.end(),f);
			VERIFY							(I == Device.seqParallel.end());
#endif
			Device.seqParallel.push_back	(fastdelegate::FastDelegate0<>(this,&CAI_Stalker::update_object_handler));
		}
		else {
			START_PROFILE("stalker/client_update/object_handler")
			update_object_handler			();
			STOP_PROFILE
		}

		if	(
				(movement().speed(character_physics_support()->movement()) > EPS_L)
				&& 
				(eMovementTypeStand != movement().movement_type())
				&&
				(eMentalStateDanger == movement().mental_state())
			) {
			if	(
					(eBodyStateStand == movement().body_state())
					&&
					(eMovementTypeRun == movement().movement_type())
				) {
				sound().play	(eStalkerSoundRunningInDanger);
			}
			else {
//				sound().play	(eStalkerSoundWalkingInDanger);
			}
		}
	}

 

Тут ещё говорится про eMentalStateDanger. Мол в состоянии опасности.
Судя по звуку, эт сильная отдышка. Наверное и правда, когда NPC на сильном шухере, носится туда сюда.

[sound_kill_wounded - тут с условиями не очень понятно. Судя по звуку, NPC говорит его, перед тем, как добить раненного.

sound_enemy_critically_wounded - если враг мог получить ранение. Судя по звуку, NPC кричит что попал во врага.

sound_enemy_killed_or_wounded - похоже тоже, что и предыдущий, только с поправкой на то, что добил. И звук сходится.

sound_attack_no_allies - если враг человек, если может говорить, ну и вторая часть, что-то про кол-во участников боя. По звуку, кричит "Получи гад!" или "От меня не уйдешь!"

sound_attack_allies_single_enemy - код соответствует второй части предыдущего. По звуку, кричит "Размолотим!" или "Мочи его!" или снова "Получи гад!".

sound_attack_allies_several_enemies - код аналогично предыдущему, с той разницей, что звук "Мочи его!" заменен на "Мочи всех!".

sound_search1_no_allies - если может говорить, что-то про кол-во участников боя. По звуку, как у sound_attack_no_allies, "От меня не уйдешь!".

sound_search1_with_allies - как и предыдущий, но звуки уже другие: "Вылезай, не прячься..." , "Куда ж он спрятался, а?".

ЧН и ЗП параметр:
sound_throw_grenade - что-то про состояние опасности, слот инвентаря, и состояние eWorldPropertyStartedToThrowGrenade. Очевидно, что воспроизводит звук NPC, когда готовится кинуть гранату. Звук подтверждает: "Получи гранату!"

ЗП параметры:
sound_wounded - поведение в бою, реакция на союзника если выжил. По звуку, "Нашего зацепило!".

sound_enemy_lost_no_allies - по коду, это копия sound_search1_no_allies . Звук не указан.

sound_enemy_lost_with_allies - по коду, это копия sound_search1_with_allies. Звук один из тех же двух, т.е.: "Куда ж он спрятался, а?".

Изменено пользователем aka_sektor
Ссылка на комментарий

Приветствую.

Собираю исходники ТЧ 1.0007rc1 от xp-dev (ревизии 188 и 201). Всё собирается и запускается.

Но, есть небольшая проблема: в игре при окончании разговора с НПС (кликаю в диалоге "До свидания.") - вылет.

Вылетает только(!) с тем НПС, которые в конце диалога что-нибудь выдают актору. С другими всё в порядке.

Например, в начале игры: Сидор - выдает нож в начале игры; Волк - выдает пистолет, патроны, аптечку; Шустрый - выдает флэшку для Сидора.

Каждый диалог заканчивается таким вылетом:(лог разбил на две части, для удобства восприятия текста)

Скрытый текст

[10/03/17 21:09:05]    * Detected CPU: GenuineIntel Intel(R) Celeron(R) CPU          925  @ 2.30GHz, F6/M23/S10
[10/03/17 21:09:05]    * CPU Features: RDTSC, MMX, SSE, SSE2, SSE3
[10/03/17 21:09:05]    
[10/03/17 21:09:05]    Initializing File System...
[10/03/17 21:09:05]    !WARNING: CLocatorAPI::check_for_file not found file fsgame.ltx in files list (size = 26)
[10/03/17 21:09:05]    !WARNING: CLocatorAPI::check_for_file not found file d:\games\s.t.a.l.k.e.r\bin\fsgame.ltx in files list (size = 26)
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db0
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db1
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db2
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db3
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db4
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db5
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db6
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db7
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db8
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.db9
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.dba
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.dbb
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.dbc
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\gamedata.dbd
[10/03/17 21:09:05]    using fs-ltx fsgame.ltx
[10/03/17 21:09:05]    --found external arch mp_military_2.xdb0
[10/03/17 21:09:05]    CLocatorAPI::ProcessArchive, path = d:\games\s.t.a.l.k.e.r\mods\mp_military_2.xdb0
[10/03/17 21:09:05]    FS: 28833 files cached, 4271Kb memory used.
[10/03/17 21:09:05]    Init FileSystem 2.171648 sec
[03.10.17 21:09:05.223] 'xrCore' build 6815, Oct  3 2017
[03.10.17 21:09:05.223]
[03.10.17 21:09:05.738] Initializing Engine...
[03.10.17 21:09:05.738] Loading  config for renderer
[03.10.17 21:09:05.738] Executing config-script "user.ltx"...
[03.10.17 21:09:05.769] [d:\games\s.t.a.l.k.e.r\stalker-shoc\user.ltx] successfully loaded.
[03.10.17 21:09:05.769] Starting INPUT device...
[03.10.17 21:09:06.081] Loading DLL: xrRender_R1.dll
[03.10.17 21:09:06.581] Loading DLL: xrGame.dll
[03.10.17 21:09:06.986] * [win32]: free[2012212 K], reserved[18520 K], committed[66356 K]
[03.10.17 21:09:06.986] * [ D3D ]: textures[0 K]
[03.10.17 21:09:06.986] * [x-ray]: crt heap[5991 K], process heap[647 K], game lua[0 K], engine lua[0 K], render[0 K]
[03.10.17 21:09:06.986] * [x-ray]: economy: strings[1032 K], smem[0 K]
[03.10.17 21:09:07.017] Executing config-script "d:\games\s.t.a.l.k.e.r\gamedata\config\default_controls.ltx"...
[03.10.17 21:09:07.080]  cant convert dik_name for dik[144], prop=[
[03.10.17 21:09:07.111] [d:\games\s.t.a.l.k.e.r\gamedata\config\default_controls.ltx] successfully loaded.
[03.10.17 21:09:07.111] Executing config-script "user.ltx"...
[03.10.17 21:09:07.127] Executing config-script "d:\games\s.t.a.l.k.e.r\gamedata\config\rspec_minimum.ltx"...
[03.10.17 21:09:07.142]  Unknown command:  r__dtex_range
[03.10.17 21:09:07.142]  Unknown command:  r__ssa_glod_end
[03.10.17 21:09:07.142]  Unknown command:  r__ssa_glod_start
[03.10.17 21:09:07.142]  Unknown command:  rs_detail
[03.10.17 21:09:07.142]  Unknown command:  rs_skeleton_update
[03.10.17 21:09:07.142]  Unknown command:  vid_bpp
[03.10.17 21:09:07.142] [d:\games\s.t.a.l.k.e.r\gamedata\config\rspec_minimum.ltx] successfully loaded.
[03.10.17 21:09:07.142] Executing config-script "d:\games\s.t.a.l.k.e.r\gamedata\config\default_controls.ltx"...
[03.10.17 21:09:07.142] [d:\games\s.t.a.l.k.e.r\gamedata\config\default_controls.ltx] successfully loaded.
[03.10.17 21:09:07.173] [d:\games\s.t.a.l.k.e.r\stalker-shoc\user.ltx] successfully loaded.
[03.10.17 21:09:07.236] SOUND: OpenAL: enumerate devices...
[03.10.17 21:09:07.236] SOUND: OpenAL: EnumerationExtension Present
[03.10.17 21:09:07.345] devices Generic Hardware
[03.10.17 21:09:07.361] SOUND: OpenAL: system  default SndDevice name is Generic Hardware
[03.10.17 21:09:07.361] SOUND: OpenAL: default SndDevice name set to Generic Software
[03.10.17 21:09:07.860] SOUND: OpenAL: All available devices:
[03.10.17 21:09:07.860] 1. Generic Software, Spec Version 1.1 (default)
[03.10.17 21:09:07.860] 2. Generic Software, Spec Version 1.1 (default)
[03.10.17 21:09:07.860] SOUND: OpenAL: SelectBestDevice is Generic Software 1.1
[03.10.17 21:09:07.910] SOUND: OpenAL: Required device: Generic Software. Created device: Generic Software.
[03.10.17 21:09:07.910] * sound: EAX 2.0 extension: absent
[03.10.17 21:09:07.910] * sound: EAX 2.0 deferred: absent
[03.10.17 21:09:07.938] * sound : cache: 49155 kb, 5707 lines, 8820 bpl
[03.10.17 21:09:07.942] Starting RENDER device...
[03.10.17 21:09:08.248] * GPU [vendor:8086]-[device:2A42]: Mobile Intel(R) 4 Series Express Chipset Family
[03.10.17 21:09:08.248] * GPU driver: 8.15.10.2869
[03.10.17 21:09:11.867] * CREATE: DeviceREF: 1
[03.10.17 21:09:11.867] * Vertex Processor: PURE HARDWARE
[03.10.17 21:09:11.947] *     Texture memory: 817 M
[03.10.17 21:09:11.947] *          DDI-level: 9.0
[03.10.17 21:09:13.137] * GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
[03.10.17 21:09:13.152] * GPU vertex cache: recognized, 32
[03.10.17 21:09:13.243] * DVB created: 4096K
[03.10.17 21:09:13.243] * DIB created: 512K
[03.10.17 21:09:15.618] count of .thm files=4
[03.10.17 21:09:15.835] load time=826 ms
[03.10.17 21:09:15.882] * distortion: used, dev(30),need(14)
[03.10.17 21:09:15.882] * SSample: 1280x768
[03.10.17 21:09:16.569] * SSample: enabled
[03.10.17 21:09:16.916] Script debugger succesfully restarted.
[03.10.17 21:09:17.448] Starting engine...
[03.10.17 21:09:19.629] Loading DLL: xrGameSpy.dll
[03.10.17 21:09:26.248] * DVB created: 4096K
[03.10.17 21:09:26.248] * DIB created: 512K
[03.10.17 21:09:26.248] * SSample: 1280x768
[03.10.17 21:09:26.260] * SSample: enabled
[03.10.17 21:09:26.260] * GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
[03.10.17 21:09:26.260] * GPU vertex cache: recognized, 32
[03.10.17 21:09:26.260] *** RESET [119 ms]
[03.10.17 21:09:26.305] "d:\games\s.t.a.l.k.e.r\bin\xr_3da.exe" -nointro
[03.10.17 21:09:26.307] * phase time: 0 ms
[03.10.17 21:09:26.309] * phase cmem: 84278 K
[03.10.17 21:09:26.309] Кэширование объектов...
[03.10.17 21:09:26.359] Loading objects...
[03.10.17 21:09:26.359] Loading models...
[03.10.17 21:09:43.513] * [prefetch] time:    17146 ms
[03.10.17 21:09:43.513] * [prefetch] memory:  82621Kb
[03.10.17 21:09:43.636] * phase time: 17328 ms
[03.10.17 21:09:43.645] * phase cmem: 163007 K
[03.10.17 21:09:43.645] Сервер: Старт...
[03.10.17 21:09:43.996] * phase time: 359 ms
[03.10.17 21:09:44.005] * phase cmem: 158431 K
[03.10.17 21:09:44.005] Сервер: Загрузка симуляции жизни...
[03.10.17 21:09:44.052] * phase time: 56 ms
[03.10.17 21:09:44.062] * phase cmem: 158431 K
[03.10.17 21:09:44.062] Загрузка игры "day_01_time_07_00_l01_escape.sav"...
[03.10.17 21:09:44.109] SE_DBG: CALifeSimulatorBase 'alife' ->m_objects = 0x0C79A680
[03.10.17 21:09:44.155] * Loading spawn registry...
[03.10.17 21:09:45.616] * 8641 spawn points are successfully loaded
[03.10.17 21:09:45.616] * Loading objects...
[03.10.17 21:09:46.260] * 17209 objects are successfully loaded
[03.10.17 21:09:48.588] * Game day_01_time_07_00_l01_escape is successfully loaded from file 'd:\games\s.t.a.l.k.e.r\stalker-shoc\savedgames\day_01_time_07_00_l01_escape.sav' (4.583s)
[03.10.17 21:09:48.588] * phase time: 4536 ms
[03.10.17 21:09:48.599] * phase cmem: 190379 K
[03.10.17 21:09:48.599] Сервер: Соединяемся...
[03.10.17 21:09:48.629] MaxPlayers = 32
[03.10.17 21:09:48.700] * phase time: 111 ms
[03.10.17 21:09:48.715] * phase cmem: 190411 K
[03.10.17 21:09:48.715] Клиент: Соединение с localhost...
[03.10.17 21:09:48.716]  Player not found. New player created.
[03.10.17 21:09:48.746] * client : connection accepted - <>
[03.10.17 21:09:48.770] * phase time: 70 ms
[03.10.17 21:09:48.780] * phase cmem: 190459 K
[03.10.17 21:09:48.780] Открытие потока...
[03.10.17 21:09:48.823] * phase time: 53 ms
[03.10.17 21:09:48.833] * phase cmem: 190459 K
[03.10.17 21:09:48.833] Загрузка формы объектов...
[03.10.17 21:09:54.522] * phase time: 5699 ms
[03.10.17 21:09:54.535] * phase cmem: 263128 K
[03.10.17 21:09:54.535] Загрузка шейдеров...
[03.10.17 21:09:56.749] * phase time: 2226 ms
[03.10.17 21:09:56.759] * phase cmem: 264610 K
[03.10.17 21:09:56.759] Загрузка геометрии...
[03.10.17 21:09:56.992] * [Loading VB] 65532 verts, 2047 Kb
[03.10.17 21:10:00.203] * [Loading VB] 65525 verts, 2047 Kb
[03.10.17 21:10:00.237] * [Loading VB] 65535 verts, 2047 Kb
[03.10.17 21:10:00.272] * [Loading VB] 65466 verts, 2045 Kb

 ...

Скрытый текст

 ...

[03.10.17 21:10:01.592] * [Loading IB] 1048575 indices, 2047 Kb
[03.10.17 21:10:01.632] * [Loading IB] 228285 indices, 445 Kb
[03.10.17 21:10:01.694] * phase time: 4944 ms
[03.10.17 21:10:01.704] * phase cmem: 264965 K
[03.10.17 21:10:01.704] Загрузка базы пространств...
[03.10.17 21:10:05.610] * phase time: 3916 ms
[03.10.17 21:10:05.621] * phase cmem: 269003 K
[03.10.17 21:10:05.621] Загрузка детальных объектов...
[03.10.17 21:10:05.756] * [DETAILS] VertexConsts(256), Batch(61)
[03.10.17 21:10:05.757] * [DETAILS] 40687 v(20), 26352 p
[03.10.17 21:10:05.757] * [DETAILS] Batch(61), VB(794K), IB(154K)
[03.10.17 21:10:05.760] * phase time: 150 ms
[03.10.17 21:10:05.771] * phase cmem: 269062 K
[03.10.17 21:10:05.771] Загрузка секторов и порталов...
[03.10.17 21:10:05.826] * Loading HOM: d:\games\s.t.a.l.k.e.r\gamedata\levels\l01_escape\level.hom
[03.10.17 21:10:05.865] * phase time: 104 ms
[03.10.17 21:10:05.875] * phase cmem: 269203 K
[03.10.17 21:10:05.875] Загрузка ИИ объектов...
[03.10.17 21:10:06.094] - Loading music tracks from 'l01_escape_musics'...
[03.10.17 21:10:06.211] * phase time: 346 ms
[03.10.17 21:10:06.222] * phase cmem: 269258 K
[03.10.17 21:10:06.222] Клиент: Создание...
[03.10.17 21:10:06.373] - Game configuring : Started
[03.10.17 21:10:06.419] - Game configuring : Finished
[03.10.17 21:10:07.305] * phase time: 1094 ms
[03.10.17 21:10:07.318] * phase cmem: 284949 K
[03.10.17 21:10:07.318] Загрузка текстур...
[03.10.17 21:10:13.352] * t-report - base: 864, 47944 K
[03.10.17 21:10:13.352] * t-report - lmap: 10, 10241 K
[03.10.17 21:10:13.352] ***FATAL***: Too many lmap-textures (limit: 8 textures or 32M).
[03.10.17 21:10:13.381]         Reduce pixel density (worse) or use more vertex lighting (better).
[03.10.17 21:10:13.382] * phase time: 6076 ms
[03.10.17 21:10:13.394] * phase cmem: 284950 K
[03.10.17 21:10:13.394] Клиент: Синхронизация...
[03.10.17 21:10:13.459] * phase time: 76 ms
[03.10.17 21:10:13.471] * phase cmem: 284950 K
[03.10.17 21:10:13.536] * [win32]: free[1362276 K], reserved[58760 K], committed[676052 K]
[03.10.17 21:10:13.536] * [ D3D ]: textures[58185 K]
[03.10.17 21:10:13.536] * [x-ray]: crt heap[284950 K], process heap[6470 K], game lua[22400 K], engine lua[168 K], render[0 K]
[03.10.17 21:10:13.536] * [x-ray]: economy: strings[3729 K], smem[28221 K]
[03.10.17 21:10:13.814] * phase time: 432 ms
[03.10.17 21:10:13.825] * phase cmem: 284973 K
[03.10.17 21:10:13.826] st_actor_netspawn...
[03.10.17 21:10:14.076] * phase time: 231 ms
[03.10.17 21:10:14.088] * phase cmem: 285019 K
[03.10.17 21:10:14.151] * [win32]: free[1361380 K], reserved[58688 K], committed[677020 K]
[03.10.17 21:10:14.151] * [ D3D ]: textures[58191 K]
[03.10.17 21:10:14.151] * [x-ray]: crt heap[285019 K], process heap[6470 K], game lua[23294 K], engine lua[168 K], render[0 K]
[03.10.17 21:10:14.151] * [x-ray]: economy: strings[3818 K], smem[28221 K]
[03.10.17 21:10:30.069] * MEMORY USAGE: 303628 K
[03.10.17 21:11:06.961] *** break by StackWalk ***
[03.10.17 21:11:06.961] DEBUG CONTEXT DUMP:
[03.10.17 21:11:06.961]  [21:10:50.766]. $#CONTEXT: cl remove [641][28064790] esc_zone_witches_galantine_0006, from v = 0C9D7B24, v.size = 335
[03.10.17 21:11:06.961]  [21:10:48.614]. $#CONTEXT: cl remove [155][1AFED0F8] vodka0155, from v = 0C9D7B34, v.size = 637
[03.10.17 21:11:06.961]  [21:10:44.626]. $#CONTEXT: cl remove [635][280631A0] esc_zone_witches_galantine_0000, from v = 0C9D7B24, v.size = 335
[03.10.17 21:11:06.961]  [21:10:42.260]. $#CONTEXT: cl remove [850][24C0B510] esc_trup_bratka, from v = 0C9D7B24, v.size = 336
[03.10.17 21:11:06.961]  [21:10:38.184]. $#CONTEXT: cl remove [850][24C0B510] esc_trup_bratka, from v = 0C9D7B34, v.size = 636
[03.10.17 21:11:06.961]  [21:10:33.465]. $#CONTEXT: cl remove [472][17B56910] wpn_ak74u0472, from v = 0C9D7B34, v.size = 637
[03.10.17 21:11:06.961]  [21:10:33.465]. $#CONTEXT: cl remove [472][17B56910] wpn_ak74u0472, from v = 0C9D7B24, v.size = 335
[03.10.17 21:11:06.961]  [21:10:33.414]. $#CONTEXT: cl remove [497][17B582A0] wpn_ak74u0497, from v = 0C9D7B34, v.size = 637
[03.10.17 21:11:06.961]  [21:10:33.414]. $#CONTEXT: cl remove [497][17B582A0] wpn_ak74u0497, from v = 0C9D7B24, v.size = 335
[03.10.17 21:11:06.961]  [21:10:33.259]. $#CONTEXT: cl remove [639][28064040] esc_zone_witches_galantine_0004, from v = 0C9D7B24, v.size = 336
[03.10.17 21:11:06.961]  [21:10:33.044]. $#CONTEXT: cl remove [429][17B53E60] wpn_ak74u0429, from v = 0C9D7B34, v.size = 636
[03.10.17 21:11:06.961]  [21:10:33.044]. $#CONTEXT: cl remove [429][17B53E60] wpn_ak74u0429, from v = 0C9D7B24, v.size = 336
[03.10.17 21:11:06.961]  [21:10:32.741]. $#CONTEXT: cl remove [480][17B57190] wpn_ak74u0480, from v = 0C9D7B34, v.size = 636
[03.10.17 21:11:06.961]  [21:10:32.741]. $#CONTEXT: cl remove [480][17B57190] wpn_ak74u0480, from v = 0C9D7B24, v.size = 336
[03.10.17 21:11:06.961]  [21:10:32.389]. $#CONTEXT: cl remove [439][17B546F0] wpn_ak74u0439, from v = 0C9D7B34, v.size = 636
[03.10.17 21:11:06.961] Unhandled exception stack trace:
[03.10.17 21:11:06.961]
[03.10.17 21:11:06.998] 001B:522A3260 (0x0018C300 0x2896B6BC 0x2896B748 0x0018C328) xrGame.dll, CVertex<CPhrase *,shared_str,CGraphAbstract<CPhrase *,float,shared_str> >::add_edge, x:\trunk\xray\xr_3da\xrgame\graph_vertex_inline.h, 68
[03.10.17 21:11:06.998] 001B:522A302A (0x280A5C60 0x0018C300 0x24E2AF90 0x52D6A1E0) xrGame.dll, CGraphAbstract<CPhrase *,float,shared_str>::add_edge(), x:\trunk\xray\xr_3da\xrgame\graph_abstract_inline.h, 59
[03.10.17 21:11:06.998] 001B:524C6B9B (0x24E2AF90 0x00000000 0x2896B740 0x0018C318) xrGame.dll, CPhraseDialog::AddPhrase(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 271
[03.10.17 21:11:06.998] 001B:522A39FA (0x03BF23D0 0x03D72B18 0x00D183F0 0xFFFFD8F0) xrGame.dll, CPhraseDialog::AddPhrase_script(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.h, 132
[03.10.17 21:11:06.998] 001B:522A4075 (0x522A3980 0x00000000 0x6E192A4D 0x0A905100) xrGame.dll, luabind::detail::returns<CPhrase *>::call<CPhraseDialog,CPhraseDialog,luabind::detail::null_type,char const *,char const *,char const *,int>(), x:\trunk\xray\luabind\luabind\detail\call.hpp, 161
[03.10.17 21:11:06.998] 001B:522A3EED (0x0A905100 0x04420018 0x0A901CC8 0x6E1D74DD) xrGame.dll, boost::detail::function::function_obj_invoker1<luabind::detail::mem_fn_callback<CPhrase * (__thiscall CPhraseDialog::*)(char const *,char const *,char const *,int),CPhraseDialog,luabind::detail::null_type>,int,lua_State *>::invoke(), x:\trunk\3rd party\boost\boost\function\function_template.hpp, 117
[03.10.17 21:11:06.998] 001B:6E192A4D (0x04420018 0x00000000 0x0E7DD8B0 0x04420018) luabind.dll, luabind::detail::overload_rep::call(), x:\trunk\xray\luabind\luabind\detail\overload_rep_impl.hpp, 35
[03.10.17 21:11:06.998] 001B:6E19A91F (0x04420018 0x0BC304F0 0xFFFFFFFF 0x04420018) luabind.dll, luabind::detail::class_rep::function_dispatcher(), x:\trunk\xray\luabind\src\class_rep.cpp, 694
[03.10.17 21:11:06.998] 001B:6E1C62D3 (0xFFFFFFFF 0x0E7DD850 0x04420018 0x00000070) lua5.1.dll, luaJIT_run(), x:\trunk\xray\luajit\src\ljit_core.c, 223
[03.10.17 21:11:06.998] 001B:6E1CFE29 (0x04420018 0x0E7DD7F0 0x00000000 0x04420018) lua5.1.dll, luaD_precall(), x:\trunk\xray\luajit\src\ldo.c, 282
[03.10.17 21:11:06.998] 001B:6E1D00A4 (0x04420018 0x0E7DD7F0 0x00000000 0x6E1CF8AA) lua5.1.dll, luaD_call(), x:\trunk\xray\luajit\src\ldo.c, 384
[03.10.17 21:11:06.998] 001B:6E1D7E55 (0x04420018 0x0018C598 0x04420018 0x00000001) lua5.1.dll, f_call(), x:\trunk\xray\luajit\src\lapi.c, 795
[03.10.17 21:11:06.998] 001B:6E1CF8AA (0x04420018 0x6E1D7E40 0x0018C598 0x00000000) lua5.1.dll, luaD_rawrunprotected(), x:\trunk\xray\luajit\src\ldo.c, 120
[03.10.17 21:11:06.998] 001B:6E1D0258 (0x6E1D7E40 0x0018C598 0x00000050 0x04420018) lua5.1.dll, luaD_pcall(), x:\trunk\xray\luajit\src\ldo.c, 465
[03.10.17 21:11:06.998] 001B:6E1D81D1 (0x04420018 0x00000001 0x00000000 0x00000000) lua5.1.dll, lua_pcall(), x:\trunk\xray\luajit\src\lapi.c, 816
[03.10.17 21:11:06.998] 001B:6E199736 (0x04420018 0x00000001 0x00000000 0x0AB8DB40) luabind.dll, luabind::detail::pcall(), x:\trunk\xray\luabind\src\pcall.cpp, 40
[03.10.17 21:11:06.998] 001B:522A2BF8 (0x14B11120 0x24E2AF90 0x0018C61C 0x52D5A3B0) xrGame.dll, luabind::detail::proxy_functor_void_caller<boost::tuples::tuple<CPhraseDialog * const *,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> >::~proxy_functor_void_caller<boost::tuples::tuple<CPhraseDialog * const *,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type(), x:\trunk\xray\luabind\luabind\functor.hpp, 284
[03.10.17 21:11:06.998] 001B:524C7220 (0x00000000 0x524C6A58 0x0AB71FC0 0x24E2AF90) xrGame.dll, CPhraseDialog::load_shared(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 223
[03.10.17 21:11:06.998] 001B:522A2B99 (0x0AB71FC0 0x24E2AF90 0x524C6335 0x0AB71FC0) xrGame.dll, CSharedClass<SPhraseDialogData,shared_str,0>::load_shared(), x:\trunk\xray\xr_3da\xrgame\shared_data.h, 101
[03.10.17 21:11:06.998] 001B:524C6A58 (0x0AB71FC0 0x00000002 0x24BDDC00 0x14B1111C) xrGame.dll, CPhraseDialog::Load(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 185
[03.10.17 21:11:06.998] 001B:524C6335 (0x0AB71FC0 0x0C7BCE38 0x1B0DC4DC 0x0C4F6100) xrGame.dll, CPhraseDialogManager::AddAvailableDialog(), x:\trunk\xray\xr_3da\xrgame\phrasedialogmanager.cpp, 110
[03.10.17 21:11:06.998] 001B:524EEF47 (0x0C7BCE38 0x1B0DC4DC 0x24B85EA0 0x0018C6B4) xrGame.dll, CActor::UpdateAvailableDialogs(), x:\trunk\xray\xr_3da\xrgame\actor_communication.cpp, 195
[03.10.17 21:11:06.998] 001B:523D5B6D (0x280AA930 0x523E260F 0x00000006 0x01036400) xrGame.dll, CUITalkWnd::UpdateQuestions(), x:\trunk\xray\xr_3da\xrgame\ui\uitalkwnd.cpp, 130
[03.10.17 21:11:06.998] 001B:523D624F (0x00000006 0x01036400 0x00F70BDE 0x01036240) xrGame.dll, CUITalkWnd::Update(), x:\trunk\xray\xr_3da\xrgame\ui\uitalkwnd.cpp, 229
[03.10.17 21:11:06.998] 001B:523E260F (0x01036240 0x00FB303C 0x01036534 0x01036414) xrGame.dll, CDialogHolder::OnFrame(), x:\trunk\xray\xr_3da\xrgame\uidialogholder.cpp, 213
[03.10.17 21:11:06.998] 001B:00F70BDE (0x01036534 0x01036414 0x00000000 0x01036240) XR_3DA.exe, CRegistrator<pureRender>::Process(), x:\trunk\xray\xr_3da\pure.h, 77
[03.10.17 21:11:06.998] 001B:00FB303C (0x69402AD0 0x0018E804 0x0018C730 0x00000000) XR_3DA.exe, CRenderDevice::FrameMove(), x:\trunk\xray\xr_3da\device.cpp, 426
[03.10.17 21:11:06.998] 001B:00FB35C1 (0x01041048 0x0018E804 0x0018C748 0x00000000) XR_3DA.exe, CRenderDevice::Run(), x:\trunk\xray\xr_3da\device.cpp, 275
[03.10.17 21:11:06.998] 001B:00FDCDD9 (0x01041048 0x002124F0 0x00000000 0x00000000) XR_3DA.exe, Startup(), x:\trunk\xray\xr_3da\x_ray.cpp, 300
[03.10.17 21:11:06.998] 001B:00FDD5C4 (0x00F30000 0x00000000 0x002124F0 0x00000001) XR_3DA.exe, WinMain_impl(), x:\trunk\xray\xr_3da\x_ray.cpp, 745
[03.10.17 21:11:06.998] 001B:00FDD7A3 (0x00F30000 0x00000000 0x002124F0 0x00000001) XR_3DA.exe, WinMain(), x:\trunk\xray\xr_3da\x_ray.cpp, 805
[03.10.17 21:11:06.998] 001B:00F8BEF7 (0x7FFDB000 0x0018FB8C 0x770337EB 0x7FFDB000) XR_3DA.exe, __tmainCRTStartup(), f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c, 547
[03.10.17 21:11:06.998] 001B:7628ED6C (0x7FFDB000 0x7752B0AB 0x00000000 0x00000000) kernel32.dll, BaseThreadInitThunk()
[03.10.17 21:11:06.999] 001B:770337EB (0x00F8C03A 0x7FFDB000 0x00000000 0x00000000) ntdll.dll, RtlInitializeExceptionChain()
[03.10.17 21:11:06.999] 001B:770337BE (0x00F8C03A 0x7FFDB000 0x00000000 0x00000000) ntdll.dll, RtlInitializeExceptionChain()

 

Что делал:

Скрытый текст

Отслеживал работу скриптов - ставил лог-сообщения. Скрипты отрабатываю нормально: выдают, определяют кто есть кто.

С этим вроде все нормально. Хотя, до конца не уверен.

Сравнивал файлы, которые указаны в логе (типа: ...\xrgame\graph_vertex_inline.h, 68 и т.д.) с другими исходниками (не от xp-dev)

Изменений нет. Сам ничего не правил в этих файлах.

Число в конце строки (например: 68) - это, наверное строка в файле (например: xrgame\graph_vertex_inline.h,) ???

Если так, то номер строки обычно ничего не проясняет (для меня)

  - он, обычно, указывает на пустую строку, либо на закрывающую фигурную скобку, либо на что-либо ещё мало информативное (для меня).

Уже раз 8 пере-собирал исходники с нуля с разными дэфайнами из build_config_defines.h - результат тот же.

 

Исходные данные:

    Win7 x86 Ultimate, VS2010_sp1, WinSDK_7.1, DX_SDK_Aug_2007, DX_SDK_June_2010 - инклуды и либы прописаны.

Исходники:

    X-Ray 1.0007rc1 от репо XP-DEV (by alpet, KD) - собирал ревизии 188 и 201.

Если нужно выложу логи сборки движка.

Буду рад любой инфе по этой теме. У кого-либо было что-то подобное, если да, как "лечили эту болезнь"?

 

И ещё вопрос: так как я сам не-программист, то очень интересует,

как грамотно разбирать такие логи с адресами памяти,

когда нет привычного сообщения в стиле "FATAL ERROR: bla_bla_bla"?

Ссылка на комментарий
2 часа назад, Shkiper2012 сказал:

xray\xr_3da\xrgame graph_vertex_inline.h, 68

Так что у тебя в этой строке?

 

Цитата

[03.10.17 21:11:06.998] 001B:522A3260 (0x0018C300 0x2896B6BC 0x2896B748 0x0018C328) xrGame.dll, CVertex<CPhrase *,shared_str,CGraphAbstract<CPhrase *,float,shared_str> >::add_edge, x:\trunk\xray\xr_3da\xrgame\graph_vertex_inline.h, 68
[03.10.17 21:11:06.998] 001B:522A302A (0x280A5C60 0x0018C300 0x24E2AF90 0x52D6A1E0) xrGame.dll, CGraphAbstract<CPhrase *,float,shared_str>::add_edge(), x:\trunk\xray\xr_3da\xrgame\graph_abstract_inline.h, 59
[03.10.17 21:11:06.998] 001B:524C6B9B (0x24E2AF90 0x00000000 0x2896B740 0x0018C318) xrGame.dll, CPhraseDialog::AddPhrase(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 271
[03.10.17 21:11:06.998] 001B:522A39FA (0x03BF23D0 0x03D72B18 0x00D183F0 0xFFFFD8F0) xrGame.dll, CPhraseDialog::AddPhrase_script(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.h, 132
Здесь из скрипта вызвали функцию создания скриптового диалога, вернулись в движок. И что-то пошло не так.
...
Здесь ушли в скрипты. В phrasedialog.cpp, 223 можно посмотреть какая скриптовая функция вызвалась. Дальше изучаешь скрипты.
[03.10.17 21:11:06.998] 001B:524C7220 (0x00000000 0x524C6A58 0x0AB71FC0 0x24E2AF90) xrGame.dll, CPhraseDialog::load_shared(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 223
[03.10.17 21:11:06.998] 001B:522A2B99 (0x0AB71FC0 0x24E2AF90 0x524C6335 0x0AB71FC0) xrGame.dll, CSharedClass<SPhraseDialogData,shared_str,0>::load_shared(), x:\trunk\xray\xr_3da\xrgame\shared_data.h, 101
[03.10.17 21:11:06.998] 001B:524C6A58 (0x0AB71FC0 0x00000002 0x24BDDC00 0x14B1111C) xrGame.dll, CPhraseDialog::Load(), x:\trunk\xray\xr_3da\xrgame\phrasedialog.cpp, 185
[03.10.17 21:11:06.998] 001B:524C6335 (0x0AB71FC0 0x0C7BCE38 0x1B0DC4DC 0x0C4F6100) xrGame.dll, CPhraseDialogManager::AddAvailableDialog(), x:\trunk\xray\xr_3da\xrgame\phrasedialogmanager.cpp, 110
[03.10.17 21:11:06.998] 001B:524EEF47 (0x0C7BCE38 0x1B0DC4DC 0x24B85EA0 0x0018C6B4) xrGame.dll, CActor::UpdateAvailableDialogs(), x:\trunk\xray\xr_3da\xrgame\actor_communication.cpp, 195
[03.10.17 21:11:06.998] 001B:523D5B6D (0x280AA930 0x523E260F 0x00000006 0x01036400) xrGame.dll, CUITalkWnd::UpdateQuestions(), x:\trunk\xray\xr_3da\xrgame\ui\uitalkwnd.cpp, 130
[03.10.17 21:11:06.998] 001B:523D624F (0x00000006 0x01036400 0x00F70BDE 0x01036240) xrGame.dll, CUITalkWnd::Update(), x:\trunk\xray\xr_3da\xrgame\ui\uitalkwnd.cpp, 229

 

 

А геймдата у тебя кстати от шестого патча?

Изменено пользователем abramcumner
  • Спасибо 1
Ссылка на комментарий

@abramcumner

5 часов назад, abramcumner сказал:

в этой строке?

В этой строчке '{'

Скрытый текст

 

5 часов назад, abramcumner сказал:

геймдата

Да от 6-го, но добавлены файлы из папки 'resources' (те, что в репо xp-dev).

Ссылка на комментарий

Shkiper2012 Попробуй удали у непися с которым разговариваешь скриптовые диалоги из его профиля (что-то вроде tm_job и тп) и еще раз проверь. Похоже, что спотыкается при инициализации скриптовых диалогов (а они как раз после основной фазы активируются), да и дело скорее всего в скриптах, а не движке (копай в dialogs.script или task_manager.script).

  • Спасибо 1
Ссылка на комментарий

Начали биться сейвы с чем это может быть связанно? в логе ищут строки в виде Can't open section 'ZJRЄЄЄЄяя' 

и они постоянно меняются, можно ли как то вылечить это?

Ссылка на комментарий

Скорее всего, на мой взгляд, вылет связан с моделями. Смотри у оружия - не менялся ли класс.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...