1.7.0: охрана питомцами, один питомец за раз, прицел книг, гео-оссуарий
Питомцы: - охрана хозяина: враг ближе 20 м (в режиме змеи - к телу) атакуется сам, поводок 40 м, охраняют все кроме крысы; приказ прицелом охрана не перебивает - IsFoe исключает существ мода (necro*): питомец выбирал целью себя - призыв нового спутника отзывает прежнего - прицел книг призыва - как у арбалета, краснеет на годной цели Гео-оссуарий (necroGeoOssuary): станция добычи на кровавой сфере - основа - коллектор росы; в 3 ячейки модов любой из 5 ресурсов (камень, уголь, селитра, железо, сланец), 1 сфера = стак 6000 за 5-8 ч - работает без открытого неба; верстак, Подмастерье (ур. 25) - своя модель (бандл necroossuary): кости, корни, сосуды, клыки, черепа с глазами-углями; шейдер и теги коллайдера берутся у ванильного коллектора Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b737dd43d0
commit
f2dfeed126
@@ -133,6 +133,11 @@ namespace NecromancerTome
|
||||
/// таких питомцев выключается - две системы на одно и то же дёргали бы питомца в
|
||||
/// разные стороны.</summary>
|
||||
public bool UsesFollowTask;
|
||||
|
||||
/// <summary>Охраняет ли питомец хозяина сам (PetFollowPatch.Guard) - указание 30.09.2026:
|
||||
/// «охраняют все, кроме крысы». Рой сюда не входит: он не спутник, а разовое заклинание
|
||||
/// со своим поиском целей.</summary>
|
||||
public bool Guards;
|
||||
}
|
||||
|
||||
public static readonly Dictionary<string, PetInfo> LimitedPets = new Dictionary<string, PetInfo>
|
||||
@@ -153,6 +158,7 @@ namespace NecromancerTome
|
||||
// AlreadyActiveKey у всех четверых теперь не читается никогда.
|
||||
CommandsAttack = true,
|
||||
NoTargetKey = "necroPetNoTarget",
|
||||
Guards = true,
|
||||
UsesFollowTask = true,
|
||||
}
|
||||
},
|
||||
@@ -199,6 +205,7 @@ namespace NecromancerTome
|
||||
// AlreadyActiveKey у всех четверых теперь не читается никогда.
|
||||
CommandsAttack = true,
|
||||
NoTargetKey = "necroPetNoTarget",
|
||||
Guards = true,
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -217,6 +224,7 @@ namespace NecromancerTome
|
||||
// AlreadyActiveKey у всех четверых теперь не читается никогда.
|
||||
CommandsAttack = true,
|
||||
NoTargetKey = "necroPetNoTarget",
|
||||
Guards = true,
|
||||
UsesFollowTask = true,
|
||||
}
|
||||
},
|
||||
@@ -236,6 +244,7 @@ namespace NecromancerTome
|
||||
// AlreadyActiveKey у всех четверых теперь не читается никогда.
|
||||
CommandsAttack = true,
|
||||
NoTargetKey = "necroPetNoTarget",
|
||||
Guards = true,
|
||||
UsesFollowTask = true,
|
||||
}
|
||||
},
|
||||
@@ -340,10 +349,48 @@ namespace NecromancerTome
|
||||
}
|
||||
return false;
|
||||
}
|
||||
RecallOtherCompanions(holdingEntity, __instance.entityToSpawn, tooltips);
|
||||
summonAllowedThisCall = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>ОДИН ПИТОМЕЦ ЗА РАЗ - указание 30.09.2026: «за один раз можно было призвать только
|
||||
/// одного питомца. А то слишком жирно сразу и собаку, и крысу, и стервятника, и медведя».
|
||||
/// Раньше предел был по одному НА ВИД, и все пятеро могли ходить вместе.
|
||||
///
|
||||
/// Сделано заменой, а не отказом: призыв нового сам отзывает прежнего. Игроку не надо
|
||||
/// искать в поясе другую книгу, чтобы отозвать, и новых строк перевода не нужно - о прежнем
|
||||
/// сообщает его же готовая надпись «… отозван».
|
||||
///
|
||||
/// Спутник - это вид с отзывом (RecalledKey). Рой Жуков не спутник: он разовое заклинание
|
||||
/// без отзыва, сам никого не вытесняет, и его не вытесняют.</summary>
|
||||
public static void RecallOtherCompanions(EntityAlive _owner, string _summoned, PetInfo _summonedInfo)
|
||||
{
|
||||
if (_summonedInfo.RecalledKey == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (KeyValuePair<string, PetInfo> entry in LimitedPets)
|
||||
{
|
||||
if (entry.Key == _summoned || entry.Value.RecalledKey == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int classId = EntityClass.GetId(entry.Key);
|
||||
if (classId == -1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
List<OwnedEntityData> others = _owner.GetOwnedEntities(classId);
|
||||
for (int i = others.Count - 1; i >= 0; i--)
|
||||
{
|
||||
Debug.Log("[NecromancerTome] SummonPatch: один питомец за раз - " + entry.Key + " " + others[i].Id +
|
||||
" отозван ради " + _summoned);
|
||||
RecallPet(_owner, others[i].Id, entry.Value.RecalledKey, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>ДОБАВЛЕНО 2026-09-18, после чтения ItemActionSpawnEntity.Spawn целиком.
|
||||
/// Последней строкой ваниль делает вот что:
|
||||
///
|
||||
@@ -634,7 +681,7 @@ namespace NecromancerTome
|
||||
// Поэтому результат передаётся в Register, и тик повторяет попытку до успеха.
|
||||
bool collisionIgnored = PetFollowPatch.TryIgnoreCollisionWithOwner(owner, __result);
|
||||
PetFollowPatch.Register(owner, __result, petInfo.UsesFollowTask, collisionIgnored, petInfo.LitEyes,
|
||||
petInfo.FlyingHomeRadius);
|
||||
petInfo.FlyingHomeRadius, petInfo.Guards);
|
||||
AttachFollowTask(owner, __result, petInfo);
|
||||
// Полупрозрачность больше НЕ делается здесь. Бывший ApplyGhostlyTransparency ставил
|
||||
// альфу в material.color и не работал ни разу: шейдеры моделей мобов альфу не
|
||||
|
||||
Reference in New Issue
Block a user