diff --git a/Config/Localization.csv b/Config/Localization.csv index 63478d3..295f8ce 100644 --- a/Config/Localization.csv +++ b/Config/Localization.csv @@ -262,6 +262,7 @@ necroZombieBagWindowTitle,items,Item,,,,Zombie bag,,Zombietasche,Bolsa del zombi necroZombieBagWaypoint,items,Item,,,,Zombie bag,,Zombietasche,Bolsa del zombi,Sac du zombie,Borsa dello zombi,ゾンビの袋,좀비 가방,Torba zombie,Bolsa do zumbi,Сумка зомби,Zombi çantası,僵尸的包,殭屍的包 necroPossessHintZombieBag,items,Item,,,,"Tab - bag, E at a container, loot bag or item - into the bag",,"Tab - Tasche, E an Behälter, Beutel oder Gegenstand - in die Tasche","Tab: bolsa, E en un contenedor, saco o objeto: a la bolsa","Tab : sac, E sur un conteneur, un sac ou un objet : dans le sac","Tab - borsa, E su contenitore, sacca o oggetto - nella borsa","Tab: 袋、コンテナ・袋・アイテムにE: 袋へ","Tab - 가방, 상자·자루·물건에 E - 가방으로","Tab - torba, E na pojemniku, worku lub przedmiocie - do torby","Tab - bolsa, E em contêiner, saco ou item - para a bolsa","Tab - сумка, E на ящик, мешок или предмет - в сумку","Tab - çanta, kaba, torbaya veya eşyaya E - çantaya","Tab - 包,对容器、袋子或物品按E - 放入包","Tab - 包,對容器、袋子或物品按E - 放入包" necroPossessHintDoor,items,Item,,,,"E at a door or switch - use it",,"E an Tür oder Schalter - benutzen","E en una puerta o interruptor: usar","E sur une porte ou un interrupteur : utiliser","E su porta o interruttore - usare","ドアやスイッチにE: 使う","문이나 스위치에 E - 사용","E na drzwiach lub przełączniku - użyj","E em porta ou interruptor - usar","E на дверь или выключатель - открыть, включить","Kapıya veya şaltere E - kullan","对门或开关按E - 使用","對門或開關按E - 使用" +necroPossessTraderArea,items,Item,,,,"The trader's land does not accept the dead",,"Das Land des Händlers duldet keine Toten","La tierra del comerciante no acepta a los muertos","La terre du marchand ne tolère pas les morts","La terra del mercante non accoglie i morti","商人の土地は死者を受け入れない","상인의 땅은 죽은 자를 받아들이지 않는다","Ziemia handlarza nie przyjmuje martwych","A terra do comerciante não aceita os mortos","Земля торговца не принимает мёртвых","Tüccarın toprağı ölüleri kabul etmez","商人的土地不容死者","商人的土地不容死者" necroZombieBagTook,items,Item,,,,"Zombie bag ({1}/{2}): {0}",,"Zombietasche ({1}/{2}): {0}","Bolsa del zombi ({1}/{2}): {0}","Sac du zombie ({1}/{2}) : {0}","Borsa dello zombi ({1}/{2}): {0}","ゾンビの袋({1}/{2}):{0}","좀비 가방 ({1}/{2}): {0}","Torba zombie ({1}/{2}): {0}","Bolsa do zumbi ({1}/{2}): {0}","Сумка зомби ({1}/{2}): {0}","Zombi çantası ({1}/{2}): {0}","僵尸的背包({1}/{2}):{0}","殭屍的背包({1}/{2}):{0}" necroZombieBagFull,items,Item,,,,"The zombie bag is full ({1}/{2}): {0}",,"Die Zombietasche ist voll ({1}/{2}): {0}","La bolsa del zombi está llena ({1}/{2}): {0}","Le sac du zombie est plein ({1}/{2}) : {0}","La borsa dello zombi è piena ({1}/{2}): {0}","ゾンビの袋がいっぱい({1}/{2}):{0}","좀비 가방이 가득 찼습니다 ({1}/{2}): {0}","Torba zombie jest pełna ({1}/{2}): {0}","A bolsa do zumbi está cheia ({1}/{2}): {0}","Сумка зомби полна ({1}/{2}): {0}","Zombi çantası dolu ({1}/{2}): {0}","僵尸的背包已满({1}/{2}):{0}","殭屍的背包已滿({1}/{2}):{0}" necroZombieBagShow,items,Item,,,,"Zombie bag ({1}/{2}): {0}",,"Zombietasche ({1}/{2}): {0}","Bolsa del zombi ({1}/{2}): {0}","Sac du zombie ({1}/{2}) : {0}","Borsa dello zombi ({1}/{2}): {0}","ゾンビの袋({1}/{2}):{0}","좀비 가방 ({1}/{2}): {0}","Torba zombie ({1}/{2}): {0}","Bolsa do zumbi ({1}/{2}): {0}","Сумка зомби ({1}/{2}): {0}","Zombi çantası ({1}/{2}): {0}","僵尸的背包({1}/{2}):{0}","殭屍的背包({1}/{2}):{0}" diff --git a/HarmonySrc/Possession.cs b/HarmonySrc/Possession.cs index e97a74d..b58ab52 100644 --- a/HarmonySrc/Possession.cs +++ b/HarmonySrc/Possession.cs @@ -1559,6 +1559,27 @@ namespace NecromancerTome } _bodyCheck = 0.5f; DropAllyTargets(_world, _z); + // Территория торговца убивает одержимого зомби (указание 13.10: «пусть убивает одержимых, даже не сам, а + // территория, на которой он находится»; питомцев не касается). GetTraderAreaAt - настоящая территория, не + // IsWithinTraderArea (её мод подменяет внутри чертогов). Гибель - обычная: дух в тело, сумка мешком. + // Раз в TraderCheckTime (указание 13.10: «проверяй реже»), только готовая территория (IsInitialized, как у игры). + _traderCheck -= 0.5f; + if (!IsPet && _traderCheck <= 0f) + { + _traderCheck = TraderCheckTime; + TraderArea ta = _world.GetTraderAreaAt(World.worldToBlockPos(_z.position + Vector3.up * 0.5f)); + if (ta != null && ta.IsInitialized) + { + GameManager.ShowTooltip(_player, Localization.Get("necroPossessTraderArea")); + Debug.Log("[NecromancerTome] Possession: " + _z.EntityName + " на территории торговца - гибнет"); + _z.DamageEntity(new DamageSource(EnumDamageSource.Internal, EnumDamageTypes.Suicide), 99999, false, 1f); + if (!_z.IsDead()) + { + _z.Kill(DamageResponse.New(true)); + } + return; + } + } bool danger = false; Vector3 body = _player.position; float r2 = SnakeControl.BodyDangerRange * SnakeControl.BodyDangerRange; @@ -2183,6 +2204,8 @@ namespace NecromancerTome public const float UseReach = 6f; /// Ближе стольких метров зверь чует одержимого и не видя (Patch_EAIRunawayFromEntity_FindEnemy_Possession). public const float AnimalFearNear = 8f; + public const float TraderCheckTime = 2f; + static float _traderCheck; static float _promptNext; static string _prompt; // дальше луч не ищет; сама дальность - у блока (GetActivationDistanceSq)