public LingoHandler(ScriptChunk script, ShockwaveReader input) : this(script) { NameIndex = input.ReadBigEndian <short>(); HandlerVectorPosition = input.ReadBigEndian <short>(); Body = new LingoHandlerBody(this, input); _codeOffset = input.ReadBigEndian <int>(); Arguments.Capacity = input.ReadBigEndian <short>(); _argumentsOffset = input.ReadBigEndian <int>(); Locals.Capacity = input.ReadBigEndian <short>(); _localsOffset = input.ReadBigEndian <int>(); short unk1Length = input.ReadBigEndian <short>(); int unk1Offset = input.ReadBigEndian <int>(); int unk2Length = input.ReadBigEndian <int>(); int unk2Offset = input.ReadBigEndian <short>(); BytesPerLine.Capacity = input.ReadBigEndian <short>(); _lineOffset = input.ReadBigEndian <int>(); Body.StackHeight = input.ReadBigEndian <int>(); }
public LingoHandler(ScriptChunk script) : base(script) { Arguments = new List <short>(); Locals = new List <short>(); BytesPerLine = new List <byte>(); }
public ReplayInfo ReadReplayInfo(string path) { Stream stream; using (var fs = File.OpenRead(path)) { // decompress if needed if (path.ToLower().EndsWith("sdfz")) { stream = new GZipStream(fs, CompressionMode.Decompress); } else { stream = fs; } var br = new BinaryReader(stream); var header = br.ReadStruct <DemoFileHeader>(); var script = Encoding.UTF8.GetString(br.ReadBytes(header.scriptSize)); var chunks = ScriptChunk.ChunkifyScript(script); var mapName = Regex.Match(script, "mapname=([^;]+)", RegexOptions.IgnoreCase).Groups[1].Value; var gameName = Regex.Match(script, "gametype=([^;]+)", RegexOptions.IgnoreCase).Groups[1].Value; List <ReplayInfo.PlayerEntry> players = new List <ReplayInfo.PlayerEntry>(); foreach (var playerChunk in chunks.Where(x => x.Type == "player" || x.Type == "ai")) { players.Add(new ReplayInfo.PlayerEntry() { Name = playerChunk["name"], AllyTeam = chunks.Where(x => x.Type == "team" && x.Id.ToString() == playerChunk["team"]).Select(x => x["allyteam"]).FirstOrDefault().ToInt(), IsSpectator = playerChunk["spectator"] == "1", IsBot = playerChunk.Type == "ai" }); } var ret = new ReplayInfo() { Engine = header.versionString, Game = gameName, Map = mapName, StartScript = script, Date = header.unixTime.UnixToDateTime(), GameLengthRealtime = header.wallclockTime, GameLengthIngameTime = header.gameTime, GameID = header.gameID.ToHex(), Players = players }; return(ret); } }
public LingoArgument(ScriptChunk script, LingoHandler handler) : base(script) { _handler = handler; }
protected LingoItem(ScriptChunk script) { Script = script; }
public LingoLocal(ScriptChunk script) : base(script) { }