Exemplo n.º 1
0
        Dictionary <byte, TodoStep> BuildTodo(Quest q, Dictionary <string, string> textdict, LuaParser lua, string QuestId)
        {
            var  ret       = new Dictionary <byte, TodoStep>();
            byte last      = 0;
            var  t         = 0;
            var  todoindex = new byte[25] {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
            };

            for (int c = 0; c < 64; c++)
            {
                var seq = (byte)q.GetRaw($"ActorSpawnSeq[{c}]");  //TODO{Sequence}
                if (seq == 0 && c > 0 && last > 0)
                {
                    break;
                }

                var task_index = (byte)q.GetRaw($"ActorDespawnSeq[{c}]");  //TODO{INDEX}  //task index
                if (task_index == 255)
                {
                    continue;
                }
                //i = last;
                else
                {
                    if (task_index != last)
                    {
                        last = task_index;
                        t    = 0;
                    }
                    else
                    {
                        t++;
                    }
                }

                if (!ret.ContainsKey(task_index))
                {
                    ret[task_index]          = new TodoStep();
                    ret[task_index]          = new TodoStep();
                    ret[task_index].Task     = todoindex[seq == 255 ? 24 : seq]++; // task_index;
                    ret[task_index].Sequence = seq;

                    var args = lua.GetTodoArgs(seq, task_index);
                    ret[task_index].Count = args.Item2;

                    if (task_index == 255)
                    {
                        ret[task_index].Description = $"Unknown";
                    }
                    else
                    {
                        ret[task_index].Description = textdict[$"TEXT_{QuestId}_TODO_{task_index:D2}"];
                    }
                }

                if (ret[task_index].Task > task_index)
                {
                    ret[task_index].Task = task_index;
                }


                var bnpc = (uint)q.GetRaw($"TODO{{BNpcName}}[{c}]");
                if (bnpc != 0)
                {
                    ret[task_index].BNpcNames.Add(bnpc);
                }

                if (c < 32)
                {
                    ret[task_index].QuestUInt8A.Add((byte)q.GetRaw($"QuestUInt8A[{c}]"));
                }
                else
                {
                    ret[task_index].QuestUInt8B.Add((byte)q.GetRaw($"QuestUInt8B[{c - 32}]"));
                }

                ret[task_index].UNK_B.Add((byte)q.GetRaw($"TODO{{UNK}}[{c}]"));             //405
                ret[task_index].UNK_D.Add((byte)q.GetRaw($"TODO{{UNK_B}}[{c}]"));           //533
                ret[task_index].UNK_E.Add((ushort)q.GetRaw($"TODO{{UNK_C}}[{c}]"));         //597

                ret[task_index].UNK_BOOL_A.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_A}}[{c}]")); //661
                ret[task_index].UNK_BOOL_B.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_B}}[{c}]")); //726
                ret[task_index].UNK_BOOL_C.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_C}}[{c}]")); //789

                ret[task_index].SetBitF.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_D}}[{c}]"));    //853  -- SetBitFlag ?

                ret[task_index].UNK_BOOL_E.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_E}}[{c}]")); //917
                ret[task_index].UNK_BOOL_F.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_F}}[{c}]")); //981
                ret[task_index].UNK_BOOL_G.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_G}}[{c}]")); //1045
                ret[task_index].UNK_BOOL_H.Add((bool)q.GetRaw($"TODO{{UNK_BOOL_H}}[{c}]")); //1109

                var obj = (uint)q.GetRaw($"ActorSpawn[{c}]");
                if (obj != 0)
                {
                    ret[task_index].RelatedObjects.Add(obj);
                    var handOver = lua.GetNpcTradeItemInfo(ret[task_index].Sequence, obj);
                    if (handOver != null)
                    {
                        ret[task_index].HandOver.AddRange(handOver);
                    }
                }
            }

            return(ret);
        }