Exemple #1
0
 void TimeLine_4()
 {
     NodeUtil.TakeDamageToPlayer(10f);
 }
Exemple #2
0
 public override void StartAction(Character owner)
 {
     base.StartAction(owner);
     NodeUtil.PlayAnim(Owner, "stun");
 }
 public override void StartAction(Character owner)
 {
     base.StartAction(owner);
     NodeUtil.PlayAnim(Owner, "idle");
     TimelineEvents.Add(new TimeLineEvent(3f, End));
 }
Exemple #4
0
    public void PopulateNodes()
    {
        _nodesWithLinksFrom = new Dictionary <string, HashSet <string> >();
        _nodesWithLinksTo   = new Dictionary <string, HashSet <string> >();
        if (_lines != null && _lines.Any())
        {
            Debug.Log("Deleting lines");
            foreach (var line in _lines.Values)
            {
                line.Destroy();
                Destroy(line.gameObject);
            }
        }

        if (_nodeButtons != null && _nodeButtons.Any())
        {
            Debug.Log("Deleting buttons");
            foreach (var button in _nodeButtons.Values)
            {
                Destroy(button.gameObject);
            }
        }

        if (_floatingNodeButtons != null && _floatingNodeButtons.Any())
        {
            Debug.Log("Deleting floating buttons");
            foreach (var floatingButton in _floatingNodeButtons.Values)
            {
                Destroy(floatingButton.gameObject);
            }
        }
        _nodeButtons = new Dictionary <string, Button>();
        _lines       = new Dictionary <string, LineHolder>();

        var files     = NodeUtil.GetAvailableNodes();
        var nodes     = new List <Tuple <string, StoryNode> >();
        var nodeNames = new HashSet <string>();

        foreach (var file in files)
        {
            var nName = NodeUtil.StripFileExtension(file);
            nodes.Add(new Tuple <string, StoryNode>(nName, NodeUtil.GetNodeData <StoryNode>(file)));
            if (!nodeNames.Contains(nName))
            {
                nodeNames.Add(nName);
            }
        }

        // Gets the dictionary of nodes with the nodes that link to it
        foreach (var(key, node) in nodes)
        {
            foreach (var nodeLink in node.nodes)
            {
                var link = NodeUtil.StripFileExtension(nodeLink.link);
                if (!nodeNames.Contains(link))
                {
                    continue;
                }

                if (!_nodesWithLinksFrom.ContainsKey(link))
                {
                    _nodesWithLinksFrom.Add(link, new HashSet <string>());
                }

                if (!_nodesWithLinksFrom[link].Contains(key))
                {
                    _nodesWithLinksFrom[link].Add(key);
                }
            }
        }

        // Gets the dictionary of nodes with the nodes that it links to
        foreach (var(key, node) in nodes)
        {
            if (!_nodesWithLinksTo.ContainsKey(key))
            {
                _nodesWithLinksTo.Add(key, new HashSet <string>());
            }

            var linksToDelete = new List <string>();
            foreach (var nodeLink in node.nodes)
            {
                var link = NodeUtil.StripFileExtension(nodeLink.link);
                if (!_nodesWithLinksFrom.ContainsKey(link))
                {
                    linksToDelete.Add(link);
                    continue;
                }

                if (!_nodesWithLinksTo[key].Contains(link))
                {
                    _nodesWithLinksTo[key].Add(link);
                }
            }

            // if there are any non-existing links, then update the node data
            if (linksToDelete.Any())
            {
                var correctedNode = new Node
                {
                    text  = node.text,
                    nodes = node.nodes.Where(n => !linksToDelete.Contains(NodeUtil.StripFileExtension(n.link))).ToArray()
                };

                NodeUtil.WriteNodeData(key, correctedNode);
            }
        }

        _connectedNodes      = new HashSet <string>();
        _floatingNodeButtons = new Dictionary <string, Button>();

        // if there is no entry node then make one
        if (!_nodesWithLinksTo.ContainsKey("entry"))
        {
            _nodesWithLinksTo.Add("entry", new HashSet <string>());
            NodeUtil.WriteNodeData("entry", new Node());
        }

        // This part creates all of the buttons for the tree starting from 'entry'
        AddNode("entry");

        // Construct the floating nodes list
        BuildFloatingNodesList(nodes);

        // This parts sets up the lines between nodes and the indicators for them
        BuildGraphButtonLinks();
    }
Exemple #5
0
 public void Play(string ModID, string Path)
 {
     Player.Stream = NodeUtil.NewResource <AudioStream>(ModID, "Music", Path);
     Player.Play();
 }
 public void StopRun()
 {
     NodeUtil.ChangeAction(Owner, "GoblinDrunkIdleAction");
     isFinish = true;
 }
Exemple #7
0
 public void UpdateSelectedLink()
 {
     link.text           = NodeUtil.ValidateInput(link.text);
     _selectedInput.link = link.text;
 }
Exemple #8
0
 public void ValidateNodeName()
 {
     nodeName.text = NodeUtil.ValidateInput(nodeName.text);
 }
Exemple #9
0
 public void Delete()
 {
     NodeUtil.DeleteNode(GetFileName(nodeName.text));
     Cancel();
 }
Exemple #10
0
 private string GetMessageIdFromDocument()
 {
     return(NodeUtil.GetLocalOrTagName(this.document.DocumentElement));
 }
Exemple #11
0
        protected override Models.Team DoSetItem()
        {
            var(tpc, tp, t) = GetCollectionProjectAndTeam();
            var description      = GetParameter <string>(nameof(SetTeam.Description));
            var defaultTeam      = GetParameter <bool>(nameof(SetTeam.Default));
            var defaultAreaPath  = GetParameter <string>(nameof(SetTeam.DefaultAreaPath));
            var areaPaths        = GetParameter <IEnumerable <string> >(nameof(SetTeam.AreaPaths));
            var backlogIteration = GetParameter <string>(nameof(SetTeam.BacklogIteration));
            var iterationPaths   = GetParameter <IEnumerable <string> >(nameof(SetTeam.IterationPaths));
            var defaultIteration = GetParameter <string>(nameof(SetTeam.DefaultIterationMacro));

            var teamClient    = GetClient <TeamHttpClient>();
            var projectClient = GetClient <ProjectHttpClient>();
            var workClient    = GetClient <WorkHttpClient>();

            // Set description

            if (HasParameter("Description") && ShouldProcess(t, $"Set team's description to '{description}'"))
            {
                teamClient.UpdateTeamAsync(new WebApiTeam()
                {
                    Description = description ?? string.Empty
                }, tp.Id.ToString(), t.Id.ToString())
                .GetResult($"Error setting team '{t.Name}''s description to '{description}'");
            }

            // Set default team

            if (defaultTeam && ShouldProcess(tp, $"Set team '{t.Name} as default'"))
            {
                throw new NotImplementedException("Set team as default is currently not supported");
            }

            // Set Team Field / Area Path settings

            var ctx            = new TeamContext(tp.Name, t.Name);
            var teamFieldPatch = new TeamFieldValuesPatch();

            if (!string.IsNullOrEmpty(defaultAreaPath) &&
                ShouldProcess(t, $"Set team's default area path (team field) to '{defaultAreaPath}'"))
            {
                if (tpc.IsHosted)
                {
                    this.Log("Conected to Azure DevOps Services. Treating Team Field Value as Area Path");
                    defaultAreaPath = NodeUtil.NormalizeNodePath(defaultAreaPath, tp.Name, "Areas", includeTeamProject: true);
                }

                if (areaPaths == null)
                {
                    this.Log("AreaPaths is empty. Adding DefaultAreaPath (TeamFieldValue) to AreaPaths as default value.");

                    areaPaths = new string[] { defaultAreaPath };
                }

                var area = new { Node = defaultAreaPath };

                if (!TestItem <Models.ClassificationNode>(area))
                {
                    NewItem <Models.ClassificationNode>(area);
                }

                this.Log($"Setting default area path (team field) to {defaultAreaPath}");

                teamFieldPatch.DefaultValue = defaultAreaPath;
            }

            if (areaPaths != null &&
                ShouldProcess(t, $"Set {string.Join(", ", areaPaths)} as team's area paths"))
            {
                var values = new List <TeamFieldValue>();

                foreach (var a in areaPaths)
                {
                    values.Add(new TeamFieldValue()
                    {
                        Value           = NodeUtil.NormalizeNodePath(a.TrimEnd('\\', '*'), tp.Name, scope: "Areas", includeTeamProject: true),
                        IncludeChildren = a.EndsWith("*")
                    });
                }

                teamFieldPatch.Values = values;

                workClient.UpdateTeamFieldValuesAsync(teamFieldPatch, ctx)
                .GetResult("Error applying team field value and/or area path settings");
            }

            // Set backlog and iteration path settings

            bool isDirty        = false;
            var  iterationPatch = new TeamSettingsPatch();

            if (backlogIteration != null &&
                ShouldProcess(t, $"Set the team's backlog iteration to '{backlogIteration}'"))
            {
                this.Log($"Setting backlog iteration to {backlogIteration}");

                var iteration = GetItem <Models.ClassificationNode>(new
                {
                    Node           = backlogIteration,
                    StructureGroup = TreeStructureGroup.Iterations
                });

                iterationPatch.BacklogIteration     =
                    iterationPatch.DefaultIteration =
                        iteration.Identifier;

                isDirty = true;
            }

            if (!string.IsNullOrEmpty(defaultIteration) &&
                ShouldProcess(t, $"Set the team's default iteration to '{defaultIteration}'"))
            {
                this.Log($"Setting default iteration to '{defaultIteration}'");

                if (!defaultIteration.StartsWith("@"))
                {
                    var iteration = GetItem <Models.ClassificationNode>(new
                    {
                        Node           = defaultIteration,
                        StructureGroup = TreeStructureGroup.Iterations
                    });

                    iterationPatch.DefaultIteration = iteration.Identifier;
                }
                else
                {
                    iterationPatch.DefaultIteration      = null;
                    iterationPatch.DefaultIterationMacro = defaultIteration;
                }

                isDirty = true;
            }

            if (isDirty)
            {
                workClient.UpdateTeamSettingsAsync(iterationPatch, ctx)
                .GetResult("Error applying iteration and/or board settings");
            }

            // TODO: Finish migration

            //         if (BacklogVisibilities && ShouldProcess(Team, $"Set the team"s backlog visibilities to {_DumpObj {BacklogVisibilities}}"))
            //         {
            //             this.Log($"Setting backlog iteration to {BacklogVisibilities}");
            //             patch.BacklogVisibilities = _NewDictionary @([string], [bool]) BacklogVisibilities

            //             isDirty = true
            //         }

            //         if (DefaultIterationMacro && ShouldProcess(Team, $"Set the team"s default iteration macro to {DefaultIterationMacro}"))
            //         {
            //             this.Log($"Setting default iteration macro to {DefaultIterationMacro}");
            //             patch.DefaultIterationMacro = DefaultIterationMacro

            //             isDirty = true
            //         }

            //         if (WorkingDays && ShouldProcess(Team, $"Set the team"s working days to {_DumpObj {WorkingDays}}"))
            //         {
            //             this.Log($"Setting working days to {{WorkingDays}|ConvertTo=-Json -Compress}");
            //             patch.WorkingDays = WorkingDays

            //             isDirty = true
            //         }

            //         if(BugsBehavior && ShouldProcess(Team, $"Set the team"s bugs behavior to {_DumpObj {BugsBehavior}}"))
            //         {
            //             this.Log($"Setting bugs behavior to {_DumpObj {BugsBehavior}}");
            //             patch.BugsBehavior = BugsBehavior

            //             isDirty = true
            //         }

            //         if(isDirty)
            //         {
            //             task = client.UpdateTeamSettingsAsync(patch, ctx)
            //             result = task.Result; if(task.IsFaulted) { _throw new Exception("Error applying iteration settings" task.Exception.InnerExceptions })
            //         }

            //         if(Passthru.IsPresent)
            //         {
            //             WriteObject(t); return;
            //         }
            //     }
            // }

            return(GetItem <Models.Team>());
        }
Exemple #12
0
        public virtual Hl7PartSource CreatePartSourceForSpecificType(Relationship relationship, XmlElement currentElement, string
                                                                     type)
        {
            string resolvedType = (type == null ? this.context.ResolveType(relationship, NodeUtil.GetLocalOrTagName(currentElement)) :
                                   type);

            return(new Hl7PartSource(this, resolvedType, currentElement, relationship.Type));
        }
Exemple #13
0
        //test the save file for upgrades
        public override TestResult OnTest(ConfigNode node, LoadContext loadContext, ref string nodeName)
        {
            nodeName = NodeUtil.GetPartNodeName(node, loadContext);

            return(checkPart(node, loadContext));
        }
    public override void UpdateAction()
    {
        base.UpdateAction();

        if (NodeUtil.StateActionMacro(Owner))
        {
        }

        else
        {
            if (check1 == 1)
            {
                timer1 = timer1 + 1;

                if (timer1 == timer2)
                {
                    timer1 = 0;
                    timer2 = UnityEngine.Random.Range(40, 100);
                    check1 = UnityEngine.Random.Range(1, 3);
                    NodeUtil.StopMovement(Owner);
                }
                else
                {
                    NodeUtil.LookPlayer(Owner);
                    NodeUtil.RotationAnim(Owner, "run");

                    if (NodeUtil.PlayerInRange(Owner, 1f))
                    {
                        NodeUtil.ChangeAction(Owner, "CSlimeAttackAction");
                    }

                    else
                    {
                        NodeUtil.MoveToPlayer(Owner);
                    }
                }
            }

            else if (check1 == 2)
            {
                timer1 = timer1 + 1;

                if (timer1 == timer2)
                {
                    timer1 = 0;
                    timer2 = UnityEngine.Random.Range(40, 100);
                    check1 = UnityEngine.Random.Range(1, 3);
                }
                else
                {
                    NodeUtil.LookPlayer(Owner);
                    NodeUtil.RotationAnim(Owner, "idle");
                    NodeUtil.StopMovement(Owner);
                }
            }
            else if (check1 == 3)
            {
                timer1 = timer1 + 1;

                if (timer1 == timer2)
                {
                    timer1 = 0;
                    timer2 = UnityEngine.Random.Range(40, 100);
                    check1 = UnityEngine.Random.Range(1, 3);
                }
                else
                {
                    Owner.transform.rotation = Quaternion.LookRotation((Owner.transform.position - Player.CurrentPlayer.transform.position).normalized, Vector3.up);
                    NodeUtil.RotationAnim(Owner, "run");
                    NodeUtil.AvoidFormPlayer(Owner);
                }
            }
        }
    }
Exemple #15
0
    void TimeLine_4()
    {
        if (NodeUtil.IsActivateAbility(Owner, 211))
        {
            NodeUtil.ChangeAction(NodeUtil.CreateEntity("GoblinDrunk", NodeUtil.VectorAdd(NodeUtil.GetPosition(Owner), NodeUtil.CreateVector3(0.4808326f, 0f, 0f))), "GoblinDrunkCreateAction");
        }

        else
        {
        }
    }
        //Upgrade the part
        private void upgradePart(ConfigNode part, LoadContext loadContext)
        {
            string partName = NodeUtil.GetPartNodeNameValue(part, loadContext).Split('_')[0];

            string[] attachementNodes = part.GetValues("attN");

            switch (partName)
            {
            case "KKAOSS.Storage.g":
            case "KKAOSS.Storage.mid.g":
            case "KKAOSS.Storage.size2.m":
            case "KKAOSS.Storage.size2.s":
                int left  = 1;
                int right = 1;
                for (int i = 0; i < attachementNodes.Length; i++)
                {
                    string[] values = attachementNodes[i].Split(',');
                    if (values[0] == "left")
                    {
                        part.SetValue("attN", "left" + left + "," + values[1], i, false);
                        left++;
                    }
                    else if (values[0] == "right")
                    {
                        part.SetValue("attN", "right" + right + "," + values[1], i, false);
                        right++;
                    }
                }
                break;

            case "KKAOSS.garage.front.g.2":
            case "KKAOSS.garage.struct.g.2":
            case "KKAOSS.gangway.2.adapter":
                int leg = 1;
                for (int i = 0; i < attachementNodes.Length; i++)
                {
                    string[] values = attachementNodes[i].Split(',');
                    if (values[0].StartsWith("node_leg"))
                    {
                        part.SetValue("attN", "leg" + leg + "," + values[1], i, false);
                        leg++;
                    }
                }
                break;

            case "KKAOSS.Service.g":
                int inner = 1;
                for (int i = 0; i < attachementNodes.Length; i++)
                {
                    string[] values = attachementNodes[i].Split(',');
                    if (values[0] == "inner")
                    {
                        if (inner == 1)
                        {
                            part.SetValue("attN", "innerbottom" + "," + values[1], i, false);
                        }
                        else
                        {
                            part.SetValue("attN", "innertop" + "," + values[1], i, false);
                        }
                        inner++;
                    }
                }
                break;

            case "KKAOSS.container.SEP":
                int front = 1;
                for (int i = 0; i < attachementNodes.Length; i++)
                {
                    string[] values = attachementNodes[i].Split(',');
                    if (values[0] == "front")
                    {
                        part.SetValue("attN", "front" + front + "," + values[1], i, false);
                        front++;
                    }
                }
                break;
            }
        }
Exemple #17
0
    public override void UpdateAction()
    {
        base.UpdateAction();

        timer1 += 1;

        if (NodeUtil.StateActionMacro(Owner))
        {
        }


        else
        {
            if (check1 == 1)
            {
                if (timer1 == timer2)
                {
                    timer1 = 0;
                    timer2 = UnityEngine.Random.Range(80, 120);
                    check1 = UnityEngine.Random.Range(1, 3);
                    RandomMove.Set(UnityEngine.Random.Range(-10, 10), 0, UnityEngine.Random.Range(-10, 10));
                    RandomMove = RandomMove + Owner.transform.position;
                    NodeUtil.StopMovement(Owner);
                    NodeUtil.RotationAnim(Owner, "idle");
                }
                else
                {
                    Owner.transform.rotation = Quaternion.LookRotation(RandomMove.normalized, Vector3.up);
                    NodeUtil.RotationAnim(Owner, "run");
                    Owner.NavAgent.destination = RandomMove.normalized;
                }
            }

            else if (check1 == 2)
            {
                timer2 = 200;

                if (timer1 == timer2)
                {
                    timer1 = 0;
                    timer2 = UnityEngine.Random.Range(80, 120);
                    check1 = UnityEngine.Random.Range(1, 3);
                    RandomMove.Set(UnityEngine.Random.Range(-10, 10), 0, UnityEngine.Random.Range(-10, 10));
                    RandomMove = RandomMove + Owner.transform.position;
                }
                else
                {
                    NodeUtil.LookPlayer(Owner);
                    NodeUtil.RotationAnim(Owner, "idle");
                    NodeUtil.StopMovement(Owner);
                }
            }

            if (IsAttack == false)
            {
                if (NodeUtil.PlayerInRange(Owner, 7f))
                {
                    NodeUtil.ChangeAction(Owner, "GoblinDrunkMoveAction");
                    return;
                }
            }
        }
    }
Exemple #18
0
    public override void UpdateAction()
    {
        base.UpdateAction();

        if (NodeUtil.IsLastFrame(Owner))
        {
            NodeUtil.ChangeAction(NodeUtil.CreateEntity("CSlime", NodeUtil.VectorAdd(NodeUtil.GetPosition(Owner), NodeUtil.CreateVector3(0.04f, 0f, 0.04f))), "CSlimeCreate1Action");
            NodeUtil.ChangeAction(NodeUtil.CreateEntity("CSlime", NodeUtil.VectorMinus(NodeUtil.GetPosition(Owner), NodeUtil.CreateVector3(0.04f, 0f, 0.04f))), "CSlimeCreate2Action");
            NodeUtil.DestroyEntity(Owner);
        }

        else
        {
        }
    }
Exemple #19
0
 public override void FinishAction()
 {
     base.FinishAction();
     NodeUtil.StopMovement(Owner);
 }
Exemple #20
0
 private bool IsSameElementName(XmlElement element, XmlElement nextElement)
 {
     return(StringUtils.Equals(element.NamespaceURI, nextElement.NamespaceURI) && StringUtils.Equals(NodeUtil.GetLocalOrTagName
                                                                                                         (element), NodeUtil.GetLocalOrTagName(nextElement)));
 }
Exemple #21
0
 public override void StartAction(Character owner)
 {
     base.StartAction(owner);
     TimelineEvents.Add(new TimeLineEvent(1f, TimeLine_4));
     NodeUtil.PlayAnim(Owner, "attack");
 }
 void TimeLine_4()
 {
     NodeUtil.ShootProjectile(Owner, "Bullet", NodeUtil.VectorMinus(Player.CurrentPlayer.transform.position, Owner.transform.position).normalized, 12f);
 }
Exemple #23
0
        public virtual NullFlavor ParseNullNode()
        {
            string     attributeValue = GetAttributeValue(node, NULL_FLAVOR_ATTRIBUTE_NAME);
            NullFlavor nullFlavor     = CodeResolverRegistry.Lookup <NullFlavor>(attributeValue);

            if (ConformanceLevelUtil.IsMandatory(this.conformanceLevel, null))
            {
                xmlToModelResult.AddHl7Error(Hl7Error.CreateMandatoryAttributeIsNullError(NodeUtil.GetLocalOrTagName((XmlElement)node), GetAttributeValue
                                                                                              (node, NULL_FLAVOR_ATTRIBUTE_NAME), (XmlElement)node));
            }
            else
            {
                //      RM #15431 - strictly speaking, nullFlavors are not allowed for REQUIRED fields. However, jurisdictions often ignore this restriction.
                //      FIXME:  TM (see RM18424) - once MB has error levels implemented, this can be reinstated as a warning
                //		} else if (this.conformanceLevel != null && this.conformanceLevel == ConformanceLevel.REQUIRED) {
                //			xmlToModelResult.addHl7Error(Hl7Error.createRequiredAttributeIsNullError(
                //					NodeUtil.getLocalOrTagName((Element) node),
                //					getAttributeValue(node, NULL_FLAVOR_ATTRIBUTE_NAME),
                //					(Element) node));
                if (this.isAssociation && !StringUtils.Equals(GetAttributeValue(node, NULL_FLAVOR_XSI_NIL_ATTRIBUTE_NAME), "true"))
                {
                    if (!Ca.Infoway.Messagebuilder.BooleanUtils.ValueOf(Runtime.GetProperty(Ca.Infoway.Messagebuilder.Marshalling.HL7.Parser.NullFlavorHelper
                                                                                            .MB_SUPPRESS_XSI_NIL_ON_NULLFLAVOR)))
                    {
                        xmlToModelResult.AddHl7Error(Hl7Error.CreateNullFlavorMissingXsiNilError(NodeUtil.GetLocalOrTagName((XmlElement)node), (XmlElement
                                                                                                                                                )node));
                    }
                }
            }
            return(nullFlavor);
        }
 void TimeLine_4()
 {
     NodeUtil.ShootProjectile(Owner, "Bullet", NodeUtil.VectorMinus(des, Owner.transform.position).normalized, 6.5f);
 }
Exemple #25
0
 /// <summary>Obtains the message's interaction id.</summary>
 /// <remarks>Obtains the message's interaction id.</remarks>
 /// <returns>the message's interaction id</returns>
 /// <exception cref="TransportLayerException">if the message's interaction id could not be determined</exception>
 /// <exception cref="Ca.Infoway.Messagebuilder.Transport.TransportLayerException"></exception>
 public virtual string GetInteractionId()
 {
     return(NodeUtil.GetLocalOrTagName(this.document.DocumentElement));
 }
Exemple #26
0
 public static Ca.Infoway.Messagebuilder.Error.Hl7Error CreateUnknownChildElementError(XmlElement element)
 {
     return(new Ca.Infoway.Messagebuilder.Error.Hl7Error(Hl7ErrorCode.SYNTAX_ERROR, System.String.Format("Unknown child element \"{0}\" will be ignored."
                                                                                                         , NodeUtil.GetLocalOrTagName(element)), element));
 }
Exemple #27
0
 public override void StartAction(Character owner)
 {
     base.StartAction(owner);
     NodeUtil.PlayAnimOneSide(Owner, "idle_135");
 }
Exemple #28
0
        protected override IEnumerable <ClassificationNode> DoGetItems()
        {
            var node           = GetParameter <object>(nameof(GetClassificationNode.Node));
            var structureGroup = GetParameter <TreeStructureGroup>("StructureGroup");

            var(_, tp) = this.GetCollectionAndProject();
            bool   done = false;
            string path = null;

            while (!done)
            {
                switch (node)
                {
                case WorkItemClassificationNode n:
                {
                    yield return(new ClassificationNode(n, tp.Name, null));

                    yield break;
                }

                case string s when s.Equals("\\") || s.Equals("/"):
                {
                    path = "\\";
                    done = true;
                    break;
                }

                case string s when !string.IsNullOrEmpty(s) && s.IsWildcard():
                {
                    path = NodeUtil.NormalizeNodePath(s, tp.Name, structureGroup.ToString().TrimEnd('s'), true, false, true, false, true);
                    done = true;
                    break;
                }

                case string s when !string.IsNullOrEmpty(s):
                {
                    path = NodeUtil.NormalizeNodePath(s, tp.Name, structureGroup.ToString().TrimEnd('s'), false, false, true, false, false);
                    done = true;
                    break;
                }

                default:
                {
                    throw new ArgumentException($"Invalid or non-existent node {node}");
                }
                }
            }

            var client = GetClient <WorkItemTrackingHttpClient>();
            int depth  = 1;

            if (path.IsWildcard())
            {
                depth = 2;
                Logger.Log($"Preparing to recursively search for pattern '{path}'");

                var root = new ClassificationNode(client.GetClassificationNodeAsync(tp.Name, structureGroup, "\\", depth)
                                                  .GetResult($"Error retrieving {structureGroup} from path '{path}'"),
                                                  tp.Name, client);

                foreach (var n in root.GetChildren(path, true))
                {
                    yield return(n);
                }

                yield break;
            }

            Logger.Log($"Getting {structureGroup} under path '{path}'");

            yield return(new ClassificationNode(client.GetClassificationNodeAsync(tp.Name, structureGroup, path, depth)
                                                .GetResult($"Error retrieving {structureGroup} from path '{path}'"), tp.Name, null));
        }
 public override void StartAction(Character owner)
 {
     base.StartAction(owner);
     NodeUtil.LookPlayer(Owner);
     NodeUtil.PlayAnim(Owner, "hit");
 }
    public override void UpdateAction()
    {
        base.UpdateAction();

        if (NodeUtil.StateActionMacro(Owner))
        {
        }

        else
        {
            // 5M 이내로 진입할때 까지 movetoplayer
            if (NodeUtil.PlayerInRange(Owner, 5))
            {
                if (pandan == 1 || pandan == 6)//공격
                {
                    NodeUtil.LookPlayer(Owner);
                    NodeUtil.ChangeAction(Owner, "GoblinSlingAttackAction");
                }
                else if (pandan == 2)//이동->플레이어
                {
                    timer2 += 0.1f;

                    if (timer2 <= timer1) // 2m내에 있으면 판단 변수 재지정 아니면 이동
                    {
                        NodeUtil.LookPlayer(Owner);
                        NodeUtil.RotationAnim(Owner, "run");
                        NodeUtil.MoveToPlayer(Owner);
                    }
                    else
                    {
                        pandan = UnityEngine.Random.Range(min, max);
                        timer2 = 0f;
                        timer1 = UnityEngine.Random.Range(6, 10);;
                    }
                }
                else if (pandan == 3)//대기
                {
                    NodeUtil.StopMovement(Owner);
                    timer2 += 0.1f;

                    if (timer2 <= timer1)
                    {
                        NodeUtil.LookPlayer(Owner);
                        NodeUtil.RotationAnim(Owner, "idle");
                    }
                    else
                    {
                        pandan = UnityEngine.Random.Range(min, max);
                        timer2 = 0f;
                        timer1 = UnityEngine.Random.Range(6, 10);
                    }
                }
                else if (pandan == 4 || pandan == 5)//랜덤 장소로 이동
                {
                    timer2 += 0.05f;

                    if (timer2 <= timer1)
                    {
                        NodeUtil.RotationAnim(Owner, "run");
                        if (chamgo == 0)
                        {
                            chamgo = 1;
                            xx     = UnityEngine.Random.Range(-1f, 1f);
                            zz     = UnityEngine.Random.Range(-1f, 1f);
                            DesPos = Owner.transform.position + new Vector3(xx, 0, zz);
                            Owner.transform.rotation = Quaternion.LookRotation((DesPos - Owner.transform.position).normalized, Vector3.up);
                        }
                        DesPos = Owner.transform.position + new Vector3(xx, 0, zz);
                        NodeUtil.MoveToPpsition(Owner, DesPos);
                    }
                    else
                    {
                        pandan = UnityEngine.Random.Range(min, max);
                        timer2 = 0f;
                        chamgo = 0;
                        timer1 = UnityEngine.Random.Range(6, 10);
                    }
                }
                else //도망
                {
                    timer2 += 0.1f;

                    if (timer2 <= timer1) // 7m내에 PC가 없으면 재지저
                    {
                        Owner.transform.rotation = Quaternion.LookRotation((Owner.transform.position - Player.CurrentPlayer.transform.position).normalized, Vector3.up);
                        NodeUtil.RotationAnim(Owner, "run");
                        NodeUtil.AvoidFormPlayer(Owner);
                    }
                    else
                    {
                        pandan = UnityEngine.Random.Range(min, max);
                        timer2 = 0f;
                        timer1 = UnityEngine.Random.Range(6, 10);
                    }
                }
            }
            else
            {
                NodeUtil.LookPlayer(Owner);
                NodeUtil.RotationAnim(Owner, "run");
                NodeUtil.MoveToPlayer(Owner);
            }
        }
    }