diff --git a/HarmonySrc/NecroGrowCommand.cs b/HarmonySrc/NecroGrowCommand.cs
new file mode 100644
index 0000000..b2f4ca8
--- /dev/null
+++ b/HarmonySrc/NecroGrowCommand.cs
@@ -0,0 +1,93 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Scripting;
+
+namespace NecromancerTome
+{
+ ///
+ /// Подрастить растения вокруг игрока (16.10, для проверки работы духа урны на грядках): каждое растущее растение
+ /// (BlockPlantGrowing) в радиусе переходит на следующие стадии родным BlockPlantGrowing.ForceNextGrowStage.
+ ///
+ [Preserve]
+ public class ConsoleCmdNecroGrow : ConsoleCmdAbstract
+ {
+ public override bool IsExecuteOnClient => false;
+
+ public override bool AllowedInMainMenu => false;
+
+ public override string[] getCommands()
+ {
+ return new string[] { "necrogrow" };
+ }
+
+ public override string getDescription()
+ {
+ return "Necromancer's Tome: grow the plants around you by one or more stages (testing).";
+ }
+
+ public override string getHelp()
+ {
+ return "necrogrow [radius] [stages] - advance every growing plant within radius (default 8) by stages (default 9 = ripe)";
+ }
+
+ public override void Execute(List _params, CommandSenderInfo _senderInfo)
+ {
+ SdtdConsole con = SingletonMonoBehaviour.Instance;
+ World world = GameManager.Instance.World;
+ EntityPlayer player = null;
+ if (_senderInfo.RemoteClientInfo != null)
+ {
+ world.Players.dict.TryGetValue(_senderInfo.RemoteClientInfo.entityId, out player);
+ }
+ else
+ {
+ player = world.GetPrimaryPlayer();
+ }
+ if (player == null)
+ {
+ con.Output("necrogrow: no player");
+ return;
+ }
+ int radius = 8, stages = 9;
+ if (_params.Count >= 1)
+ {
+ int.TryParse(_params[0], out radius);
+ }
+ if (_params.Count >= 2)
+ {
+ int.TryParse(_params[1], out stages);
+ }
+ radius = Mathf.Clamp(radius, 1, 32);
+ Vector3i c = World.worldToBlockPos(player.GetPosition());
+ int plants = 0, steps = 0;
+ for (int dx = -radius; dx <= radius; dx++)
+ {
+ for (int dz = -radius; dz <= radius; dz++)
+ {
+ for (int dy = -4; dy <= 4; dy++)
+ {
+ Vector3i p = new Vector3i(c.x + dx, c.y + dy, c.z + dz);
+ BlockValue bv = world.GetBlock(p);
+ if (bv.ischild || !(bv.Block is BlockPlantGrowing))
+ {
+ continue;
+ }
+ plants++;
+ for (int s = 0; s < stages && bv.Block is BlockPlantGrowing g && !g.nextPlant.isair; s++)
+ {
+ BlockValue next = g.ForceNextGrowStage(world, p, bv);
+ if (next.type == bv.type)
+ {
+ break;
+ }
+ world.SetBlockRPC(p, next);
+ bv = next;
+ steps++;
+ }
+ }
+ }
+ }
+ con.Output("necrogrow: " + plants + " growing plant(s) within " + radius + ", " + steps + " stage(s) advanced");
+ }
+ }
+}