public static TriggerFunctionParameter Parse(Stream stream, TriggerData triggerData, MapTriggersFormatVersion formatVersion, bool leaveOpen) { var parameter = new TriggerFunctionParameter(); using (var reader = new BinaryReader(stream, new UTF8Encoding(false, true), leaveOpen)) { parameter._type = reader.ReadInt32 <TriggerFunctionParameterType>(); parameter._value = reader.ReadChars(); var haveFunction = reader.ReadBool(); if (haveFunction) { if (parameter._type != TriggerFunctionParameterType.Function) { throw new InvalidDataException($"Parameter must be of type '{TriggerFunctionParameterType.Function}' to have a function."); } parameter._function = TriggerFunction.Parse(stream, triggerData, formatVersion, false, true); } var haveArrayIndexer = reader.ReadBool(); if (haveArrayIndexer) { if (parameter._type != TriggerFunctionParameterType.Variable) { throw new InvalidDataException($"Parameter must be of type '{TriggerFunctionParameterType.Variable}' to have an array indexer."); } parameter._arrayIndexer = Parse(stream, triggerData, formatVersion, true); } } return(parameter); }
internal void ReadFrom(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) { Id = reader.ReadInt32(); Name = "<DELETED>"; ParentId = -1; }
public static TriggerFunction Parse(Stream stream, TriggerData triggerData, MapTriggersFormatVersion formatVersion, bool isChildFunction, bool leaveOpen) { var function = new TriggerFunction(); using (var reader = new BinaryReader(stream, new UTF8Encoding(false, true), leaveOpen)) { function._type = reader.ReadInt32 <TriggerFunctionType>(); function._branch = isChildFunction ? reader.ReadInt32() : -1; function._name = reader.ReadChars(); function._isEnabled = reader.ReadBool(); var parameterCount = triggerData.GetParameterCount(function._type, function._name); for (var i = 0; i < parameterCount; i++) { function._parameters.Add(TriggerFunctionParameter.Parse(stream, triggerData, formatVersion, true)); } if (formatVersion >= MapTriggersFormatVersion.Tft) { var nestedfunctionCount = reader.ReadInt32(); if (nestedfunctionCount > 0) { for (var i = 0; i < nestedfunctionCount; i++) { function._nestedFunctions.Add(Parse(stream, triggerData, formatVersion, true, true)); } } } } return(function); }
internal void ReadFrom(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) { Id = reader.ReadInt32(); Name = reader.ReadChars(); if (formatVersion >= MapTriggersFormatVersion.Tft) { IsComment = reader.ReadBool(); } if (subVersion is not null) { Unk = reader.ReadInt32(); ParentId = reader.ReadInt32(); } }
public static TriggerData ParseStream(Stream stream, bool leaveOpen = false) { var result = new TriggerData(); using var reader = new StreamReader(stream, leaveOpen: leaveOpen); Dictionary <string, string[]>?target = null; var argumentsOffset = -1; while (!reader.EndOfStream) { var line = reader.ReadLine(); if (string.IsNullOrWhiteSpace(line) || line.StartsWith("//", StringComparison.Ordinal)) { continue; } if (line.StartsWith('[') && line.EndsWith(']')) { target = line[1..^ 1] switch
internal void ReadFrom(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) { Name = reader.ReadChars(); Type = reader.ReadChars(); Unk = reader.ReadInt32(); IsArray = reader.ReadBool(); if (formatVersion >= MapTriggersFormatVersion.Tft) { ArraySize = reader.ReadInt32(); } IsInitialized = reader.ReadBool(); InitialValue = reader.ReadChars(); if (subVersion is not null) { Id = reader.ReadInt32(); ParentId = reader.ReadInt32(); } }
internal TriggerDefinition(BinaryReader reader, TriggerItemType triggerItemType, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) : base(triggerItemType) { ReadFrom(reader, triggerData, formatVersion, subVersion); }
internal MapTriggers(BinaryReader reader, TriggerData triggerData) { ReadFrom(reader, triggerData); }
internal VariableDefinition(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) { ReadFrom(reader, triggerData, formatVersion, subVersion); }
internal TriggerFunctionParameter(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion) { ReadFrom(reader, triggerData, formatVersion, subVersion); }
public static TriggerData ParseStream(Stream stream, bool leaveOpen = false) { var result = new TriggerData(); using var reader = new StreamReader(stream, leaveOpen: leaveOpen); object? target = null; MethodInfo? addMethod = null; ConstructorInfo?constructor = null; while (!reader.EndOfStream) { var line = reader.ReadLine(); if (string.IsNullOrWhiteSpace(line) || line.StartsWith("//", StringComparison.Ordinal)) { continue; } if (line.StartsWith('[') && line.EndsWith(']')) { target = line switch { "[TriggerTypes]" => result._triggerTypes, "[TriggerTypeDefaults]" => result._triggerTypeDefaults, "[TriggerEvents]" => result._triggerEvents, "[TriggerConditions]" => result._triggerConditions, "[TriggerActions]" => result._triggerActions, "[TriggerCalls]" => result._triggerCalls, _ => null, }; if (target is not null) { // Get Dictionary<string, T> add method and constructor. addMethod = target.GetType().GetMethod("Add"); constructor = target.GetType().GetGenericArguments()[1].GetConstructors().Single(); } continue; } if (line.StartsWith('_')) { continue; } if (target is not null) { var split = line.Split('='); if (split.Length != 2) { split = line.Split('-'); if (split.Length != 2) { throw new InvalidDataException(line); } } var key = split[0]; var values = split[1].Split(',', StringSplitOptions.RemoveEmptyEntries); addMethod !.Invoke(target, new[] { key, constructor !.Invoke(new object[] { key, values }) });
internal TriggerFunction(BinaryReader reader, TriggerData triggerData, MapTriggersFormatVersion formatVersion, MapTriggersSubVersion?subVersion, bool isChildFunction) { ReadFrom(reader, triggerData, formatVersion, subVersion, isChildFunction); }