Цинерарий-старатель (#64): дух добывает ископаемые
Урна necroCinerariumProspector (и ...Skull): в «Содержимом» череп и образец - один из девяти ресурсов (камень, глина, песок, древесина, железо, свинец, уголь, селитра, сланец), нить к ящику. Дух отлетает на соседнюю свободную клетку и уходит на 5 блоков под землю, растворяясь; раз в игровой час поднимается так же, кладёт добычу в ящик и уходит снова. За сутки: камень/глина/песок/древесина 30000, руды 18000, ходка ±20%. Из руды - шанс на алмаз, серебро, золото по шансам игры на каждый «блок» руды. Ящик полон - дух ждёт с добычей. Без зоны и вне лимита урн. Рецепт - кузня: латунь 40, прах 100, кости 10, кровь/сок, железная кирка; открывается с остальными урнами. Консоль necroprospector: on/off, trip, yield, spread, depth, состояние. Тексты - 13 языков; глава книги «Цинерарии» - лист Fig. VIII с шестой урной и фраза про prospektisto. Проверено в игре (test8): ходка железа 625 в ящике, спуск и подъём духа, лист и страница книги помещаются. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f1010f98b7
commit
0999fd3afc
@@ -10,6 +10,7 @@ namespace NecromancerTome
|
||||
/// в ячейке остаётся один череп, всё остальное (лишние черепа, чужие предметы) - назад в рюкзак, и урна узнаёт, есть ли
|
||||
/// в ней череп. Череп - обычный предмет (ItemClass): он уже в сейвах, менять ему класс на модификацию нельзя.
|
||||
/// У урны рабочего (18.10) ячеек две: вторая - образец (любой предмет, стопка целиком - сколько держать в запасе).
|
||||
/// У старателя (22.10) вторая ячейка - что добывать: один предмет из TEFeatureCinerarium.Ores, лишнее и чужое - назад.
|
||||
/// </summary>
|
||||
public static class CinerariumContents
|
||||
{
|
||||
@@ -31,12 +32,12 @@ namespace NecromancerTome
|
||||
}
|
||||
_urn = _u;
|
||||
_player = _p;
|
||||
_bag = new Bag(new Vector2i(_u.IsWorker ? 2 : 1, 1), XUiC_ItemStack.StackLocationTypes.LootContainer, null);
|
||||
_bag = new Bag(new Vector2i(_u.IsWorker || _u.IsProspector ? 2 : 1, 1), XUiC_ItemStack.StackLocationTypes.LootContainer, null);
|
||||
if (_u.HasSkull && skull != null && skull.type > 0)
|
||||
{
|
||||
_bag.SetSlot(0, new ItemStack(skull, 1));
|
||||
}
|
||||
if (_u.IsWorker && _u.Sample != null && !_u.Sample.IsEmpty())
|
||||
if ((_u.IsWorker || _u.IsProspector) && _u.Sample != null && !_u.Sample.IsEmpty())
|
||||
{
|
||||
_bag.SetSlot(1, _u.Sample.Clone());
|
||||
}
|
||||
@@ -59,7 +60,7 @@ namespace NecromancerTome
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_urn.IsWorker && _bag.ItemGrid.items.Length > 1)
|
||||
if ((_urn.IsWorker || _urn.IsProspector) && _bag.ItemGrid.items.Length > 1)
|
||||
{
|
||||
ItemStack smp = _bag.ItemGrid.items[1];
|
||||
ItemStack first = _bag.ItemGrid.items[0];
|
||||
@@ -70,6 +71,29 @@ namespace NecromancerTome
|
||||
_bag.SetSlot(1, ItemStack.Empty.Clone());
|
||||
smp = _bag.ItemGrid.items[1];
|
||||
}
|
||||
if (_urn.IsProspector && smp != null && !smp.IsEmpty())
|
||||
{
|
||||
// Старатель: образец - один предмет из списка добычи; чужое целиком, лишние штуки - назад.
|
||||
if (!TEFeatureCinerarium.IsOreSample(smp))
|
||||
{
|
||||
GiveBack(smp.Clone());
|
||||
_bag.SetSlot(1, ItemStack.Empty.Clone());
|
||||
if (_player != null)
|
||||
{
|
||||
GameManager.ShowTooltip(_player, Localization.Get("necroProspectorBadSample"));
|
||||
}
|
||||
}
|
||||
else if (smp.count > 1)
|
||||
{
|
||||
ItemStack back = smp.Clone();
|
||||
back.count = smp.count - 1;
|
||||
GiveBack(back);
|
||||
ItemStack one = smp.Clone();
|
||||
one.count = 1;
|
||||
_bag.SetSlot(1, one);
|
||||
}
|
||||
smp = _bag.ItemGrid.items[1];
|
||||
}
|
||||
_urn.SetSample(smp != null && !smp.IsEmpty() ? smp.Clone() : ItemStack.Empty.Clone());
|
||||
}
|
||||
ItemStack s = _bag.ItemGrid.items[0];
|
||||
|
||||
Reference in New Issue
Block a user