internal StartUserProjectileServerMessage(TeraMessageReader reader) : base(reader) { OwnerId = reader.ReadEntityId(); reader.Skip(8); Id = reader.ReadEntityId(); }
internal SpawnProjectileServerMessage(TeraMessageReader reader) : base(reader) { Id = reader.ReadEntityId(); reader.Skip(37); OwnerId = reader.ReadEntityId(); }
internal LoginServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(10); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); Id = reader.ReadEntityId(); reader.Skip(4); PlayerId = reader.ReadUInt32(); reader.Skip(260); Name = reader.ReadTeraString(); }
internal SpawnUserServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(30); PlayerId = reader.ReadUInt32(); Id = reader.ReadEntityId(); reader.Skip(18); RaceGenderClass=new RaceGenderClass(reader.ReadInt32()); reader.Skip(208); Name = reader.ReadTeraString(); GuildName = reader.ReadTeraString(); }
internal EachSkillResultServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(4); Source = reader.ReadEntityId(); Target = reader.ReadEntityId(); reader.Skip(4); SkillId = reader.ReadInt32() & 0x3FFFFFF; reader.Skip(16); Amount = reader.ReadInt32(); Flags = (SkillResultFlags)reader.ReadInt32(); IsCritical = (reader.ReadByte() & 1) != 0; }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(6); Id = reader.ReadEntityId(); TargetId = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); NpcId = reader.ReadUInt32(); NpcType = reader.ReadUInt16(); ModelId = reader.ReadUInt32(); reader.Skip(31); OwnerId = reader.ReadEntityId(); }
internal ParsedMessage(TeraMessageReader reader) : base(reader.Message.Time, reader.Message.Direction, reader.Message.Data) { OpCodeName = reader.OpCodeName; }
internal UnknownMessage(TeraMessageReader reader) : base(reader) { }
public S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { CharacterList = new List <CharacterData>(); var count = reader.ReadInt16(); var next = reader.ReadInt16(); for (var i = 0; i < count; i++) { var c = new CharacterData(); reader.RepositionAt(next); reader.Skip(2); next = reader.ReadInt16(); reader.Skip(4); var nameOffset = reader.ReadInt16(); reader.Skip(8); //array offsets and counts var guildOffset = reader.ReadInt16(); c.Id = reader.ReadUInt32(); reader.Skip(4); //c.gender = reader.ReadInt32(); reader.Skip(4); //c.race = reader.ReadInt32(); c.CharClass = (Class)reader.ReadInt32(); c.Level = reader.ReadInt32(); reader.Skip(8); //c.hp = reader.ReadInt32(); reader.Skip(4); //c.mp = reader.ReadInt32(); //c.LastLocation = new Location(reader.ReadUInt32(), reader.ReadUInt32(), reader.ReadUInt32()); c.LastWorldId = reader.ReadUInt32(); c.LastGuardId = reader.ReadUInt32(); c.LastSectionId = reader.ReadUInt32(); c.LastOnline = reader.ReadInt64(); reader.Skip(reader.Factory.ReleaseVersion >= 8600 ? 367 : 359); c.Laurel = (Laurel)reader.ReadInt32(); c.Position = reader.ReadInt32(); c.GuildId = reader.ReadUInt32(); reader.RepositionAt(nameOffset); c.Name = reader.ReadTeraString(); try { reader.RepositionAt(guildOffset); c.GuildName = reader.ReadTeraString(); } catch { } CharacterList.Add(c); //CharacterList.Add(new Character(c.Name, (Class)c.CharClass, c.Id, c.Pos) //{ // GuildName = c.GuildName, // Laurel = (Laurel)c.Laurel, // Level = c.Level, // LastOnline = c.LastOnline, // LastLocation = new Location(c.LastLocation.World, c.LastLocation.Guard, c.LastLocation.Section) //}); } CharacterList = CharacterList.OrderBy(ch => ch.Position).ToList(); }
public S_ASK_BIDDING_RARE_ITEM(TeraMessageReader reader) : base(reader) { //needed only to setup the rolling phase, so not actually parsed }
public SkillId(TeraMessageReader reader) : this() { _version = reader.Factory.ReleaseVersion; _raw = _version >= 7401 ? reader.ReadUInt64() : reader.ReadUInt32(); }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(6); Id = reader.ReadEntityId(); }
internal S_GUILD_QUEST_LIST(TeraMessageReader reader) : base(reader) { //PrintRaw(); GuildQuests = new List <GuildQuest>(); var counter = reader.ReadUInt16(); var questOffset = reader.ReadUInt16(); var guildNameOffset = reader.ReadUInt16(); var guildMasterOffset = reader.ReadUInt16(); var guildId = reader.ReadUInt32(); var guildMasterId = reader.ReadInt32(); GuildLevel = reader.ReadUInt32(); GuildXpCurrent = reader.ReadUInt64(); GuildXpNextLevel = reader.ReadUInt64(); Gold = reader.ReadUInt64(); NumberCharacters = reader.ReadUInt32(); NumberAccount = reader.ReadUInt32(); GuildSize = (GuildSizeType)reader.ReadUInt32(); GuildCreationTime = UnixTimeStampToDateTime(reader.ReadUInt64()); NumberQuestsDone = reader.ReadUInt32(); NumberTotalDailyQuest = reader.ReadUInt32(); GuildName = reader.ReadTeraString(); GuildMaster = reader.ReadTeraString(); for (var i = 1; i <= counter; i++) { reader.BaseStream.Position = questOffset - 4; var pointer = reader.ReadUInt16(); Debug.Assert(pointer == questOffset);//should be the same var nextOffset = reader.ReadUInt16(); var countTargets = reader.ReadUInt16(); var offsetTargets = reader.ReadUInt16(); var countUnk2 = reader.ReadUInt16(); var offsetUnk2 = reader.ReadUInt16(); var countRewards = reader.ReadUInt16(); var offsetRewards = reader.ReadUInt16(); var offsetName = reader.ReadUInt16(); var offsetDescription = reader.ReadUInt16(); var offsetGuildName = reader.ReadUInt16(); var id = reader.ReadUInt32(); var questType2 = (GuildQuestType2)reader.ReadUInt32(); var questSize = (QuestSizeType)reader.ReadUInt32(); var unk3 = reader.ReadInt32(); //2 if rally var totalTime = reader.ReadInt32(); var active = reader.ReadInt32(); //0=not taken, 1= in progress, 2=completed //Debug.WriteLine(active.ToString("X")); var activeBool = active == 1; //in seconds var timeRemaining = reader.ReadUInt32(); var guildQuestType = (GuildQuestType)reader.ReadUInt32(); var unk5 = reader.ReadByte(); var unk6 = reader.ReadInt32(); var guildQuestDescriptionLabel = reader.ReadTeraString(); var guildQuestTitleLabel = reader.ReadTeraString(); var questguildname = reader.ReadTeraString(); //Debug.WriteLine( // ";unk3:" + unk3 + // ";unk4:" + unk4 + // ";unk5:" + unk5.ToString("X") + // ";unk6:" + unk6 + // ";unk7:" + BitConverter.ToString(unk7) + // ";countUnk2:" + countUnk2 + // ";offsetUnk2:" + offsetUnk2 // ); List <GuildQuestTarget> targets = new List <GuildQuestTarget>(); reader.BaseStream.Position = offsetTargets - 4; for (var j = 1; j <= countTargets; j++) { var currentPosition = reader.ReadUInt16(); var nextTargetOffset = reader.ReadUInt16(); var zoneId = reader.ReadUInt32(); var targetId = reader.ReadUInt32(); var countQuest = reader.ReadUInt32(); var totalQuest = reader.ReadUInt32(); targets.Add(new GuildQuestTarget(zoneId, targetId, countQuest, totalQuest)); } var nextUnk2Offset = offsetUnk2; for (var j = 1; j <= countUnk2; j++) { reader.BaseStream.Position = nextUnk2Offset - 4; var currentPosition = reader.ReadUInt16(); nextUnk2Offset = reader.ReadUInt16(); Debug.WriteLine("unk2:" + reader.ReadByte().ToString("X") + " ;" + j + "/" + countUnk2); } List <GuildQuestItem> rewards = new List <GuildQuestItem>(); reader.BaseStream.Position = offsetRewards - 4; for (var j = 1; j <= countRewards; j++) { var currentPosition = reader.ReadUInt16(); var nextRewardOffset = reader.ReadUInt16(); var item = reader.ReadUInt32(); var amount = reader.ReadUInt64(); rewards.Add(new GuildQuestItem(item, amount)); } questOffset = nextOffset; var quest = new GuildQuest( guildQuestType, questType2, guildQuestDescriptionLabel, guildQuestTitleLabel, questguildname, targets, activeBool, rewards, timeRemaining, questSize ); GuildQuests.Add(quest); } // Debug.WriteLine(ToString()); }
public S_CHANGE_RELATION(TeraMessageReader reader) : base(reader) { EntityId = reader.ReadEntityId(); Relation = reader.ReadInt32(); }
internal S_AVAILABLE_EVENT_MATCHING_LIST(TeraMessageReader reader) : base(reader) { reader.Skip(24); Badges = reader.ReadInt32(); Credits = reader.ReadInt32(); }
public S_BAN_PARTY(TeraMessageReader reader) : base(reader) { }
public S_RESULT_ITEM_BIDDING(TeraMessageReader reader) : base(reader) { //used only to end rolling phase, so not actually parsed }
public S_SYSTEM_MESSAGE(TeraMessageReader reader) : base(reader) { reader.Skip(2); Message = reader.ReadTeraString(); }
public C_REQUEST_GAMESTAT_PING(TeraMessageReader reader) : base(reader) { }
internal SUserStatus(TeraMessageReader reader) : base(reader) { User = reader.ReadEntityId(); Status = reader.ReadByte(); }
public UnknownMessage(TeraMessageReader reader) : base(reader) { }
public S_DESPAWN_NPC(TeraMessageReader reader) : base(reader) { Target = reader.ReadUInt64(); reader.Skip(3 * 4); Type = (DespawnType)reader.ReadUInt32(); }
public S_LOAD_TOPO(TeraMessageReader reader) : base(reader) { }
internal SpawnProjectileServerMessage(TeraMessageReader reader) : base(reader) { Id = reader.ReadEntityId(); }
public S_ABNORMALITY_END(TeraMessageReader reader) : base(reader) { TargetId = reader.ReadUInt64(); AbnormalityId = reader.ReadUInt32(); }
public S_RESPONSE_GAMESTAT_PONG(TeraMessageReader reader) : base(reader) { }
internal SpawnMeServerMessage(TeraMessageReader reader) : base(reader) { Id = reader.ReadEntityId(); }
internal SAbnormalityEnd(TeraMessageReader reader) : base(reader) { TargetId = reader.ReadEntityId(); AbnormalityId = reader.ReadInt32(); }
public S_FIELD_EVENT_ON_LEAVE(TeraMessageReader reader) : base(reader) { }
public new void Process(ParsedMessage message) { base.Process(message); if (IsKnown || OpcodeFinder.Instance.IsKnown(message.OpCode)) { return; } if (message.Payload.Count < 2 + 4 + 4 + 4 + 1 + 1 + 4 + 4) { return; } var nameOffset = Reader.ReadUInt16(); var unk = Reader.ReadUInt32(); var model = Reader.ReadUInt32(); if (model < 10101 || model > 11108) { return; //could me made more accurate by checking actual race/gender/class ranges } var level = Reader.ReadUInt32(); var hasParty = Reader.ReadByte(); var hasGuild = Reader.ReadByte(); var serverId = Reader.ReadUInt32(); if (level > 65) { return; } if (hasParty != 0 && hasParty != 1) { return; } if (hasGuild != 0 && hasGuild != 1) { return; } //assume it's a player from our same server if (BasicTeraData.Instance.Servers.GetServer(serverId) == null) { return; } string name; try { name = Reader.ReadTeraString(); if (message.Payload.Count != 2 + 4 + 4 + 4 + 1 + 1 + 4 + 2 + 2 * name.Length) { return; } } catch (Exception e) { return; } OpcodeFinder.Instance.SetOpcode(message.OpCode, OPCODE); for (int i = 0; i < 5; i++) { var msg = OpcodeFinder.Instance.GetMessage(OpcodeFinder.Instance.PacketCount - 1 - i); if (msg.Direction == MessageDirection.ClientToServer) { var tmr = new TeraMessageReader(msg); try { tmr.Skip(2 + 4 + 4); if (tmr.ReadTeraString() == name) { OpcodeFinder.Instance.SetOpcode(msg.OpCode, OpcodeEnum.C_ASK_INTERACTIVE); } } catch (Exception e) { continue; } } } //if (OpcodeFinder.Instance.GetMessage(OpcodeFinder.Instance.PacketCount - 1).OpCode == C_ASK_INTERACTIVE.PossibleOpcode) { C_ASK_INTERACTIVE.Confirm(); } }
public ParsedMessage Create(Message message) { var reader = new TeraMessageReader(message, PacketProcessor.OpCodeNamer, this, PacketProcessor.SystemMessageNamer); return(Instantiate(message.OpCode, reader)); }
public S_FIELD_EVENT_ON_ENTER(TeraMessageReader reader) : base(reader) { }
public S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { CharacterList = new List <Character>(); RawCharacters = new List <RawChar>(); count = reader.ReadInt16(); offset = reader.ReadInt16(); short nextAddr = offset; unkh1 = reader.ReadByte(); unkh2 = reader.ReadInt32(); maxChar = reader.ReadInt32(); unkh4 = reader.ReadInt32(); unkh5 = reader.ReadInt16(); unkh6 = reader.ReadInt32(); unkh7 = reader.ReadInt32(); unkh8 = reader.ReadInt32(); for (int i = 0; i < count; i++) { var c = new RawChar(); reader.BaseStream.Position = nextAddr - 4; reader.Skip(2); nextAddr = reader.ReadInt16(); c.unk1 = reader.ReadInt32(); c.nameOffset = reader.ReadInt16(); c.detailsOffset = reader.ReadInt16(); c.detailsCount = reader.ReadInt16(); c.details2offset = reader.ReadInt16(); c.details2count = reader.ReadInt16(); c.guildOffset = reader.ReadInt16(); c.id = reader.ReadInt32(); c.gender = reader.ReadInt32(); c.race = reader.ReadInt32(); c.charClass = reader.ReadInt32(); c.level = reader.ReadInt32(); c.unk2 = reader.ReadInt32(); c.unk3 = reader.ReadInt32(); c.loc1 = reader.ReadInt32(); c.loc2 = reader.ReadInt32(); c.loc3 = reader.ReadInt32(); c.lastOnline = reader.ReadInt64(); c.unk4 = reader.ReadByte(); c.unk5 = reader.ReadInt32(); c.unk6 = reader.ReadInt32(); c.unk7 = reader.ReadInt32(); c.unk8 = reader.ReadInt32(); c.earring1 = reader.ReadInt32(); c.earring2 = reader.ReadInt32(); c.chest = reader.ReadInt32(); c.gloves = reader.ReadInt32(); c.boots = reader.ReadInt32(); c.unk9 = reader.ReadInt32(); c.ring1 = reader.ReadInt32(); c.ring2 = reader.ReadInt32(); c.innerwear = reader.ReadInt32(); c.head = reader.ReadInt32(); c.face = reader.ReadInt32(); c.appearance = reader.ReadInt64(); c.unk10 = reader.ReadInt32(); c.unk11 = reader.ReadInt32(); c.unk12 = reader.ReadInt32(); c.unk13 = reader.ReadInt16(); c.unk14 = reader.ReadInt32(); c.unk15 = reader.ReadInt32(); c.unk16 = reader.ReadInt32(); c.unk17 = reader.ReadInt32(); c.unk18 = reader.ReadInt32(); c.unk19 = reader.ReadInt32(); c.unk20 = reader.ReadInt32(); c.unk21 = reader.ReadInt32(); c.unk22 = reader.ReadInt32(); c.unk23 = reader.ReadInt32(); c.unk24 = reader.ReadInt32(); c.unk25 = reader.ReadInt32(); c.unk26 = reader.ReadInt32(); c.unk27 = reader.ReadInt32(); c.unk28 = reader.ReadInt32(); c.chestDye = reader.ReadInt32(); c.glovesDye = reader.ReadInt32(); c.bootsDye = reader.ReadInt32(); c.unk29 = reader.ReadInt32(); c.unk30 = reader.ReadInt32(); c.unk31 = reader.ReadInt32(); c.unk32 = reader.ReadInt32(); c.unk33 = reader.ReadInt32(); c.unk33b = reader.ReadInt32(); c.unk33c = reader.ReadInt32(); c.headDecoration = reader.ReadInt32(); c.mask = reader.ReadInt32(); c.backDecoration = reader.ReadInt32(); c.weaponSkin = reader.ReadInt32(); c.costume = reader.ReadInt32(); c.unk35 = reader.ReadInt32(); c.weaponEnchant = reader.ReadInt32(); c.curRestExp = reader.ReadInt32(); c.maxRestExp = reader.ReadInt32(); c.unk38 = reader.ReadInt32(); c.unk39 = reader.ReadInt16(); c.rested = reader.ReadByte(); c.curRestExpPerc = reader.ReadInt32(); c.achiPoints = reader.ReadInt32(); c.laurel = reader.ReadInt32(); c.pos = reader.ReadInt32(); c.guildId = reader.ReadInt32(); c.name = reader.ReadTeraString(); //c.details = new byte[c.detailsCount]; //for (int j = 0; j < c.detailsCount; j++) //{ // c.details[j] = reader.ReadByte(); //} //c.details2 = new byte[c.details2count]; //for (int k = 0; k < c.details2count; k++) //{ // c.details2[k] = reader.ReadByte(); //} //c.guild = reader.ReadTeraString(); CharacterList.Add(new Character(c.name, (Class)c.charClass, (Laurel)c.laurel)); RawCharacters.Add(c); } }
public C_LOAD_TOPO_FIN(TeraMessageReader reader) : base(reader) { }
internal S_BAN_PARTY(TeraMessageReader reader) : base(reader) { }
public S_ACCOMPLISH_ACHIEVEMENT(TeraMessageReader reader) : base(reader) { reader.Skip(16); AchievementId = reader.ReadUInt32(); }
public ParsedMessage(TeraMessageReader reader) : base(reader.Message.Time, reader.Message.Direction, reader.Message.Data) { Raw = reader.Message.Payload.Array; OpCodeName = reader.OpCodeName; }