Метка «Жертвы» вешается до урона: работает и при убийстве с одного удара
Метка висела на onSelfAttackedOther, которое приходит после DamageEntity; при смертельном ударе добыча успевала разыграться без неё. Перенесена на onSelfPrimary/SecondaryActionRayHit (до урона, как лечение ножом), с гейтом Health GT 0 - трупы больше не метятся. Отзыв sanovskiy на Nexus. Проверено в игре на 3.3: три убийства с одного удара дали «Жертву». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
e8e21d5a58
commit
1c2e3f2cdf
+22
-9
@@ -1361,8 +1361,23 @@
|
|||||||
fast. 120 matches that same reference point. -->
|
fast. 120 matches that same reference point. -->
|
||||||
<passive_effect name="AttacksPerMinute" operation="base_set" value="120"/>
|
<passive_effect name="AttacksPerMinute" operation="base_set" value="120"/>
|
||||||
|
|
||||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroVictim">
|
<!-- МЕТКА ЖЕРТВЫ - ДО УРОНА, 2026-09-26 (1.5.0; отзыв sanovskiy на Nexus: «убил ножом с
|
||||||
|
одного удара - Жертвы нет, приходится бить дважды»). Раньше метка висела на
|
||||||
|
onSelfAttackedOther, а оно приходит ПОСЛЕ DamageEntity (ItemActionAttack.cs:838 в
|
||||||
|
3.3). На смертельном ударе внутри DamageEntity успевают пройти Kill ->
|
||||||
|
OnEntityDeath -> dropItemOnDeath (EntityAlive.cs:3050, 5470), и VictimPatch
|
||||||
|
разыгрывал добычу ещё без метки; метка потом ложилась уже на труп.
|
||||||
|
*ActionRayHit приходят ДО урона (ItemActionDynamic.cs:541, Hit - строка 598), как
|
||||||
|
у лечения ниже, поэтому метка оказывается на зомби раньше его смерти. Два триггера:
|
||||||
|
обычный и силовой удар, как было и с onSelfAttackedOther. Гейт Health GT 0 теперь
|
||||||
|
безопасен (здоровье до урона) и не даёт метить трупы при разделке. -->
|
||||||
|
<triggered_effect trigger="onSelfPrimaryActionRayHit" action="AddBuff" target="other" buff="buffNecroVictim">
|
||||||
<requirement name="EntityTagCompare" target="other" tags="zombie"/>
|
<requirement name="EntityTagCompare" target="other" tags="zombie"/>
|
||||||
|
<requirement name="StatCompareCurrent" target="other" stat="Health" operation="GT" value="0"/>
|
||||||
|
</triggered_effect>
|
||||||
|
<triggered_effect trigger="onSelfSecondaryActionRayHit" action="AddBuff" target="other" buff="buffNecroVictim">
|
||||||
|
<requirement name="EntityTagCompare" target="other" tags="zombie"/>
|
||||||
|
<requirement name="StatCompareCurrent" target="other" stat="Health" operation="GT" value="0"/>
|
||||||
</triggered_effect>
|
</triggered_effect>
|
||||||
<!-- ЛЕЧЕНИЕ СНЯТО С СИЛОВОГО УДАРА 2026-09-09 (пользователь: "лучше вообще не
|
<!-- ЛЕЧЕНИЕ СНЯТО С СИЛОВОГО УДАРА 2026-09-09 (пользователь: "лучше вообще не
|
||||||
лечить на силовом ударе"). Триггер сменён с onSelfAttackedOther на
|
лечить на силовом ударе"). Триггер сменён с onSelfAttackedOther на
|
||||||
@@ -1399,8 +1414,8 @@
|
|||||||
бафф в buffs.xml, а не из фактически нанесённого урона.
|
бафф в buffs.xml, а не из фактически нанесённого урона.
|
||||||
- Событие летит и при попадании по блоку, но там Other пуст, и
|
- Событие летит и при попадании по блоку, но там Other пуст, и
|
||||||
EntityTagCompare tags="zombie" такой вызов отсекает - как и раньше.
|
EntityTagCompare tags="zombie" такой вызов отсекает - как и раньше.
|
||||||
buffNecroVictim НЕ трогали: он остался на onSelfAttackedOther, то есть метка
|
buffNecroVictim тогда НЕ трогали (остался на onSelfAttackedOther). С 1.5.0 он
|
||||||
Жертвы по-прежнему вешается и обычным, и силовым ударом.
|
тоже на *ActionRayHit - см. комментарий у самой метки выше.
|
||||||
|
|
||||||
LIFESTEAL BUG FIXED 2026-09-07 (user report: "нож не подлечивает"). The old
|
LIFESTEAL BUG FIXED 2026-09-07 (user report: "нож не подлечивает"). The old
|
||||||
version did only "ModifyCVar medicalRegHealthAmount add @$necroKnifeHealCVar",
|
version did only "ModifyCVar medicalRegHealthAmount add @$necroKnifeHealCVar",
|
||||||
@@ -1439,12 +1454,10 @@
|
|||||||
Все они висят на *ActionRayHit, а это событие уходит ДО применения урона
|
Все они висят на *ActionRayHit, а это событие уходит ДО применения урона
|
||||||
(ItemActionDynamic.cs:541, ItemActionAttack.Hit вызывается в конце того же
|
(ItemActionDynamic.cs:541, ItemActionAttack.Hit вызывается в конце того же
|
||||||
метода) - значит у живой цели здоровье в этот момент ещё больше нуля, включая
|
метода) - значит у живой цели здоровье в этот момент ещё больше нуля, включая
|
||||||
смертельный удар. А buffNecroVictim сидит на onSelfAttackedOther, которое
|
смертельный удар. (До 1.5.0 buffNecroVictim сидел на onSelfAttackedOther, после
|
||||||
уходит ПОСЛЕ DamageEntity (ItemActionAttack.cs:838, сразу за строкой 827): на
|
DamageEntity, и потому был без гейта - на добивающем ударе здоровье там уже 0.
|
||||||
смертельном ударе зомби там уже мёртв и его здоровье 0, так что такой же гейт
|
Эта же поздняя метка и была причиной «Жертвы нет при убийстве с одного удара»:
|
||||||
снял бы метку ровно с добивающего удара - то есть отобрал бы мешок Жертвы у
|
добыча разыгрывалась до неё. С 1.5.0 метка тоже на *ActionRayHit и с гейтом.)
|
||||||
всех, кого убили с одного удара. Поэтому метка оставлена без гейта; повесить
|
|
||||||
её на уже мёртвого зомби безвредно - мешок для него всё равно уже разыгран.
|
|
||||||
|
|
||||||
AOE-эффекты "Мёртвой бури" гейтить не нужно: World/Chunk.GetLivingEntitiesInBounds
|
AOE-эффекты "Мёртвой бури" гейтить не нужно: World/Chunk.GetLivingEntitiesInBounds
|
||||||
(Chunk.cs:2920) сама отсеивает цели по !IsDead(), так что трупы в выборку не
|
(Chunk.cs:2920) сама отсеивает цели по !IsDead(), так что трупы в выборку не
|
||||||
|
|||||||
Reference in New Issue
Block a user