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); }