public ActorInit(uint id, TextNode textNode) { ID = id; Position = textNode.Convert <CPos>(); var node = new ActorNode(id, Position, textNode.Children); Type = node.Type; Team = node.Team; IsPlayer = node.IsPlayer; IsBot = node.IsBot; var list = new List <TextNode>(); var order = (short)(textNode.Order + 1); list.Add(new TextNode("ActorInit", order, "Team", node.Team)); list.Add(new TextNode("ActorInit", order, "Type", ActorCache.Types[node.Type])); if (node.IsBot) { var parent = new TextNode("ActorInit", order, "BotPart", string.Empty); list.Add(parent); parent.Children.Add(new TextNode("ActorInit", (short)(order + 1), "TargetPosition", node.BotTarget)); } if (node.IsPlayer) { list.Add(new TextNode("ActorInit", order, "PlayerPart", string.Empty)); } if (node.Health != 1f) { if (Type.PartInfos.FirstOrDefault(p => p is Parts.HealthPartInfo) is Parts.HealthPartInfo health) { var parent = new TextNode("ActorInit", order, "HealthPart", string.Empty); list.Add(parent); parent.Children.Add(new TextNode("ActorInit", (short)(order + 1), "Health", node.Health * health.MaxHealth)); } } if (node.IsPlayerSwitch) { var parent = new TextNode("ActorInit", order, "PlayerSwitchPart", string.Empty); list.Add(parent); parent.Children.Add(new TextNode("ActorInit", (short)(order + 1), "RelativeHP", node.RelativeHP)); parent.Children.Add(new TextNode("ActorInit", (short)(order + 1), "ActorType", ActorCache.Types[node.ToActor])); parent.Children.Add(new TextNode("ActorInit", (short)(order + 1), "CurrentTick", node.Duration)); } Nodes = list; }