private void ModifyAbc(DoABCTag abcTag) { CPoolInfo constants = abcTag.ABCData.ConstantPool; StatusTxt.SetDotAnimation("Squeezing ({0})", abcTag.Name); for (int i = 1; i < constants.Strings.Length; i++) { string constant = constants.Strings[i]; if (constant.Length > 256 || constant.Length < 2) continue; if (constant.Length > 2 && constant.Length < 6) { ushort possiblePort = 0; if (ushort.TryParse(constant, out possiblePort)) { if (!_possiblePorts.Contains(possiblePort)) _possiblePorts.Add(possiblePort); if (constant != "10001") continue; } } constants.Strings[i] = ReplaceConstant(constant); } }
private void ReplaceABC(DoABCTag abcTag) { bool foundModInABC = false; bool containedDefaultExpInABC = false; CPoolInfo cPool = abcTag.ABCData.ConstantPool; StatusTxt.SetDotAnimation("Squeezing ({0})", abcTag.Name); var ignorePorts = new List<string>(); var possiblePorts = new List<ushort>(); for (int i = 1; i < cPool.Strings.Length; i++) { string cString = cPool.Strings[i]; if (cString.Length > 256 || cString.Length < 2) continue; if (cString.Length > 2 && cString.Length < 6) { ushort possiblePort = 0; if (ushort.TryParse(cString, out possiblePort)) { if (!possiblePorts.Contains(possiblePort) && !ignorePorts.Contains(cString)) { possiblePorts.Add(possiblePort); } } } if (cPool.Strings[i].Length == 256) { foundModInABC = true; if (string.IsNullOrWhiteSpace(MainUI.HandshakeMngr.RealModulus)) { MainUI.HandshakeMngr.RealModulus = cString; cPool.Strings[i] = HandshakeManager.FAKE_MODULUS; } } else if (cString == "10001") { containedDefaultExpInABC = true; cPool.Strings[i] = HandshakeManager.FAKE_EXPONENT.ToString(); } else if (_ipMatcher.Match(cString).Success) { MainUI.GameData.Host = cString; cPool.Strings[i] = "127.0.0.1"; } else if (cString == "localhost") { cPool.Strings[i] = "tsohlacol"; } } if (foundModInABC && !containedDefaultExpInABC && MainUI.IsRetro) { MainUI.HandshakeMngr.RealExponent = 3; } if (_hasCorrectPort) return; possiblePorts.Insert(0, (ushort)MainUI.GameData.Port); foreach (ushort possiblePort in possiblePorts) { if (AttemptConnect(possiblePort, ignorePorts)) { _hasCorrectPort = true; MainUI.GameData.Port = possiblePort; break; } } }
protected virtual FlashTag ReadTag(FlashReader reader, TagRecord header) { FlashTag tag = null; switch (header.TagType) { default: tag = new UnknownTag(Reader, header); break; case FlashTagType.DoABC: tag = new DoABCTag(Reader, header); break; case FlashTagType.DefineBitsLossless2: tag = new DefineBitsLossless2Tag(Reader, header); break; case FlashTagType.DefineBinaryData: tag = new DefineBinaryDataTag(Reader, header); break; } var character = (tag as ICharacter); if (character != null) { // Add ICharacter tag to the global dictionary. Dictionary.Characters[ character.CharacterId] = character; } return tag; }