From 7ff79a14979c89470b705c9fb308e8a4c12554da Mon Sep 17 00:00:00 2001 From: Tom Herbert <18316812+taherbert@users.noreply.github.com> Date: Fri, 13 Mar 2026 23:01:36 -0700 Subject: [PATCH] [DH] Fix sigil expression crash when spell is not known Sigil expressions (placed, activation_time, delay) throw "No expression found" at init when the sigil spell is not talented. The inner sigil action is only created when the talent is active, so create_expression falls through to the parent which doesn't handle sigil-specific names. Return constant 0 when the sigil is null. Fixes all five sigil types. --- engine/class_modules/sc_demon_hunter.cpp | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index d0b1f77db36..ea0c0978aaa 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -4440,6 +4440,11 @@ struct sigil_of_flame_t : public demon_hunter_spell_t if ( auto e = sigil->create_sigil_expression( name ) ) return e; } + else if ( util::str_compare_ci( name, "placed" ) || util::str_compare_ci( name, "sigil_placed" ) || + util::str_compare_ci( name, "activation_time" ) || util::str_compare_ci( name, "delay" ) ) + { + return expr_t::create_constant( name, 0 ); + } return demon_hunter_spell_t::create_expression( name ); } @@ -5379,6 +5384,11 @@ struct sigil_of_spite_t : public demon_hunter_spell_t if ( auto e = sigil->create_sigil_expression( name ) ) return e; } + else if ( util::str_compare_ci( name, "placed" ) || util::str_compare_ci( name, "sigil_placed" ) || + util::str_compare_ci( name, "activation_time" ) || util::str_compare_ci( name, "delay" ) ) + { + return expr_t::create_constant( name, 0 ); + } return demon_hunter_spell_t::create_expression( name ); } @@ -5527,6 +5537,11 @@ struct sigil_of_misery_t : public demon_hunter_spell_t if ( auto e = sigil->create_sigil_expression( name ) ) return e; } + else if ( util::str_compare_ci( name, "placed" ) || util::str_compare_ci( name, "sigil_placed" ) || + util::str_compare_ci( name, "activation_time" ) || util::str_compare_ci( name, "delay" ) ) + { + return expr_t::create_constant( name, 0 ); + } return demon_hunter_spell_t::create_expression( name ); } @@ -5573,6 +5588,11 @@ struct sigil_of_silence_t : public demon_hunter_spell_t if ( auto e = sigil->create_sigil_expression( name ) ) return e; } + else if ( util::str_compare_ci( name, "placed" ) || util::str_compare_ci( name, "sigil_placed" ) || + util::str_compare_ci( name, "activation_time" ) || util::str_compare_ci( name, "delay" ) ) + { + return expr_t::create_constant( name, 0 ); + } return demon_hunter_spell_t::create_expression( name ); } @@ -5619,6 +5639,11 @@ struct sigil_of_chains_t : public demon_hunter_spell_t if ( auto e = sigil->create_sigil_expression( name ) ) return e; } + else if ( util::str_compare_ci( name, "placed" ) || util::str_compare_ci( name, "sigil_placed" ) || + util::str_compare_ci( name, "activation_time" ) || util::str_compare_ci( name, "delay" ) ) + { + return expr_t::create_constant( name, 0 ); + } return demon_hunter_spell_t::create_expression( name ); }