Exception when selecting Compare BB Entries Decorator

Using 4.2.

I get an exception when adding a “Compare BB Entries” decorator to a node in a behavior tree and then selecting it.

When indexing into the Names property of the EBlackBoardEntryComparison, it is using an index of 3 but there are only 3 entries causing the following to fail:

check(Names.IsValidIndex(NameIndex));

on Ln 350 of Enum.cpp.

Here’s the callstack:

 	UE4Editor-Core-Win64-Debug.dll!FDebug::AssertFailed(const char * Expr, const char * File, int Line, const wchar_t * Format, ...) Line 160	C++
>	UE4Editor-CoreUObject-Win64-Debug.dll!UEnum::HasMetaData(const wchar_t * Key, int NameIndex) Line 351	C++
 	UE4Editor-CoreUObject-Win64-Debug.dll!UEnum::GetDisplayNameText(int NameIndex) Line 285	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FPropertyValueImpl::GetPropertyValueString(FString & OutString, FPropertyNode * InPropertyNode, const bool bAllowAlternateDisplayValue) Line 73	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FPropertyValueImpl::GetValueAsDisplayString(FString & OutString) Line 577	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FPropertyHandleBase::GetValueAsDisplayString(FString & OutValue) Line 1493	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FPropertyEditor::GetValueAsDisplayString() Line 121	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SPropertyEditorCombo::GetDisplayValueAsString() Line 110	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TBaseSPMethodDelegateInstance_RetVal_NoParams_Const<SPropertyEditorCombo,FString,0>::Execute() Line 228	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TBaseDelegate_RetVal_NoParams<FString>::Execute() Line 1058	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TAttribute<FString>::Get() Line 147	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SPropertyComboBox::Construct(const SPropertyComboBox::FArguments & InArgs) Line 17	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!RequiredArgs::T0RequiredArgs::CallConstruct<SPropertyComboBox,SPropertyComboBox::FArguments>(const TSharedRef<SPropertyComboBox,0> & OnWidget, const SPropertyComboBox::FArguments & WithNamedArgs) Line 1002	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TDecl<SPropertyComboBox,RequiredArgs::T0RequiredArgs>::operator<<=(const SPropertyComboBox::FArguments & InArgs) Line 1239	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SPropertyEditorCombo::Construct(const SPropertyEditorCombo::FArguments & InArgs, const TSharedRef<FPropertyEditor,0> & InPropertyEditor) Line 83	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!RequiredArgs::T1RequiredArgs<TSharedRef<FPropertyEditor,0> >::CallConstruct<SPropertyEditorCombo,SPropertyEditorCombo::FArguments>(const TSharedRef<SPropertyEditorCombo,0> & OnWidget, const SPropertyEditorCombo::FArguments & WithNamedArgs) Line 1018	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TDecl<SPropertyEditorCombo,RequiredArgs::T1RequiredArgs<TSharedRef<FPropertyEditor,0> > >::operator<<=(const SPropertyEditorCombo::FArguments & InArgs) Line 1239	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SPropertyValueWidget::ConstructPropertyEditorWidget(TSharedPtr<FPropertyEditor,0> & PropertyEditor, TSharedPtr<IPropertyUtilities,0> InPropertyUtilities) Line 200	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SPropertyValueWidget::Construct(const SPropertyValueWidget::FArguments & InArgs, TSharedPtr<FPropertyEditor,0> PropertyEditor, TSharedPtr<IPropertyUtilities,0> InPropertyUtilities) Line 77	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!RequiredArgs::T2RequiredArgs<TSharedPtr<FPropertyEditor,0>,TSharedRef<IPropertyUtilities,0> >::CallConstruct<SPropertyValueWidget,SPropertyValueWidget::FArguments>(const TSharedRef<SPropertyValueWidget,0> & OnWidget, const SPropertyValueWidget::FArguments & WithNamedArgs) Line 1038	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TDecl<SPropertyValueWidget,RequiredArgs::T2RequiredArgs<TSharedPtr<FPropertyEditor,0>,TSharedRef<IPropertyUtilities,0> > >::operator<<=(const SPropertyValueWidget::FArguments & InArgs) Line 1239	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FDetailPropertyRow::MakeValueWidget(FDetailWidgetRow & Row, const TSharedPtr<FDetailWidgetRow,0> InCustomRow, bool bAddWidgetDecoration) Line 413	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FDetailPropertyRow::GetWidgetRow() Line 179	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FDetailLayoutCustomization::GetWidgetRow() Line 68	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SDetailSingleItemRow::Construct(const SDetailSingleItemRow::FArguments & InArgs, FDetailLayoutCustomization * InCustomization, bool bHasMultipleColumns, TSharedRef<IDetailTreeNode,0> InOwnerTreeNode, const TSharedRef<STableViewBase,0> & InOwnerTableView) Line 79	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!RequiredArgs::T4RequiredArgs<FDetailLayoutCustomization * __ptr64,bool,TSharedRef<FDetailItemNode,0>,TSharedRef<STableViewBase,0> >::CallConstruct<SDetailSingleItemRow,SDetailSingleItemRow::FArguments>(const TSharedRef<SDetailSingleItemRow,0> & OnWidget, const SDetailSingleItemRow::FArguments & WithNamedArgs) Line 1082	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TDecl<SDetailSingleItemRow,RequiredArgs::T4RequiredArgs<FDetailLayoutCustomization * __ptr64,bool,TSharedRef<FDetailItemNode,0>,TSharedRef<STableViewBase,0> > >::operator<<=(const SDetailSingleItemRow::FArguments & InArgs) Line 1239	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!FDetailItemNode::GenerateNodeWidget(const TSharedRef<STableViewBase,0> & OwnerTable, const FDetailColumnSizeData & ColumnSizeData, const TSharedRef<IPropertyUtilities,0> & PropertyUtilities) Line 151	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SDetailsView::OnGenerateRowForDetailTree(TSharedRef<IDetailTreeNode,0> InTreeNode, const TSharedRef<STableViewBase,0> & OwnerTable) Line 223	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TBaseSPMethodDelegateInstance_RetVal_TwoParams<SDetailsView,TSharedRef<ITableRow,0>,TSharedRef<IDetailTreeNode,0>,TSharedRef<STableViewBase,0> const & __ptr64,0>::Execute(TSharedRef<IDetailTreeNode,0> InParam1, const TSharedRef<STableViewBase,0> & InParam2) Line 228	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!TBaseDelegate_RetVal_TwoParams<TSharedRef<ITableRow,0>,TSharedRef<IDetailTreeNode,0>,TSharedRef<STableViewBase,0> const & __ptr64>::Execute(TSharedRef<IDetailTreeNode,0> InParam1, const TSharedRef<STableViewBase,0> & InParam2) Line 1058	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!STreeView<TSharedRef<IDetailTreeNode,0> >::GenerateNewWidget(TSharedRef<IDetailTreeNode,0> InItem) Line 487	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SListView<TSharedRef<IDetailTreeNode,0> >::GenerateWidgetForItem(const TSharedRef<IDetailTreeNode,0> & CurItem, int ItemIndex, int StartIndex) Line 853	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!SListView<TSharedRef<IDetailTreeNode,0> >::ReGenerateItems(const FGeometry & MyGeometry) Line 771	C++
 	UE4Editor-Slate-Win64-Debug.dll!STableViewBase::Tick(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 180	C++
 	UE4Editor-PropertyEditor-Win64-Debug.dll!STreeView<TSharedRef<IDetailTreeNode,0> >::Tick(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 397	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 241	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-SlateCore-Win64-Debug.dll!SWidget::TickWidgetsRecursively(const FGeometry & AllottedGeometry, const double InCurrentTime, const float InDeltaTime) Line 249	C++
 	UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::TickWindowAndChildren(TSharedRef<SWindow,0> WindowToTick) Line 607	C++
 	UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::TickWindowAndChildren(TSharedRef<SWindow,0> WindowToTick) Line 615	C++
 	UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::Tick() Line 935	C++
 	UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 2108	C++
 	UE4Editor-Win64-Debug.exe!EngineTick() Line 53	C++
 	UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 135	C++
 	UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 196	C++

Thanks for reporting this bug. Code fix should make into next hotfix update, until then you can change it by yourself:

Open file BTDecorator_CompareBBEntries.cpp and replace line 9

, Operator(EArithmeticKeyOperation::LessOrEqual)

with:

, Operator(EBlackBoardEntryComparison::Equal)