Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
 public LingoHandler(ScriptChunk script)
     : base(script)
 {
     Arguments    = new List <short>();
     Locals       = new List <short>();
     BytesPerLine = new List <byte>();
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 public LingoArgument(ScriptChunk script, LingoHandler handler)
     : base(script)
 {
     _handler = handler;
 }
Ejemplo n.º 5
0
 protected LingoItem(ScriptChunk script)
 {
     Script = script;
 }
Ejemplo n.º 6
0
 public LingoLocal(ScriptChunk script)
     : base(script)
 {
 }