private void ParsePreyData(Internal.ByteArray message) { int slot = message.ReadUnsignedByte(); var state = message.ReadEnum <PreySlotStates>(); switch (state) { case PreySlotStates.Locked: { message.ReadEnum <PreySlotUnlockType>(); break; } case PreySlotStates.Inactive: { break; } case PreySlotStates.Active: { string monsterName = message.ReadString(); var monsterOutfit = ReadCreatureOutfit(message); var bonusType = message.ReadEnum <PreyBonusTypes>(); int bonusValue = message.ReadUnsignedShort(); int bonusGrade = message.ReadUnsignedByte(); int timeLeft = message.ReadUnsignedShort(); break; } case PreySlotStates.Selection: { byte size = message.ReadUnsignedByte(); for (int i = 0; i < size; i++) { string monsterName = message.ReadString(); var monsterOutfit = ReadCreatureOutfit(message); } break; } case PreySlotStates.SelectionChangeMonster: { var bonusType = message.ReadEnum <PreyBonusTypes>(); int bonusValue = message.ReadUnsignedShort(); int bonusGrade = message.ReadUnsignedByte(); byte size = message.ReadUnsignedByte(); for (int i = 0; i < size; i++) { string monsterName = message.ReadString(); var monsterOutfit = ReadCreatureOutfit(message); } break; } default: break; } message.ReadUnsignedShort(); // timeUntilFreeListReroll if (OpenTibiaUnity.GameManager.ClientVersion >= 1190) { message.ReadUnsignedByte(); // preyWildCards } }
private void ParseChannelEvent(Internal.ByteArray message) { int channelId = message.ReadUnsignedShort(); var channel = ChatStorage.GetChannel(channelId); string playerName = message.ReadString(); var eventType = message.ReadEnum <ChannelEvent>(); switch (eventType) { case ChannelEvent.PlayerJoined: channel.PlayerJoined(playerName); break; case ChannelEvent.PlayerLeft: channel.PlayerLeft(playerName); break; case ChannelEvent.PlayerInvited: channel.PlayerInvited(playerName); break; case ChannelEvent.PlayerExcluded: channel.PlayerExcluded(playerName); break; case ChannelEvent.PlayerPending: channel.PlayerPending(playerName); break; } }
private void ParseSetInventory(Internal.ByteArray message) { var slot = message.ReadEnum <ClothSlots>(); var @object = ReadObjectInstance(message); OpenTibiaUnity.ContainerStorage.BodyContainerView.SetObject(slot, @object); }
private void ParseInspectionList(Internal.ByteArray message) { bool isPlayer = message.ReadBoolean(); int size = message.ReadUnsignedByte(); for (int i = 0; i < size; i++) { var @object = ReadObjectInstance(message); if (isPlayer) { var slot = message.ReadEnum <ClothSlots>(); } int imbuementSlots = message.ReadUnsignedByte(); for (int j = 0; j < imbuementSlots; j++) { int imbuementID = message.ReadUnsignedByte(); } int details = message.ReadUnsignedByte(); for (int j = 0; j < details; j++) { string name = message.ReadString(); string description = message.ReadString(); } } }
private void ParseUpdateLootContainers(Internal.ByteArray message) { byte unknown = message.ReadUnsignedByte(); int count = message.ReadUnsignedByte(); for (int i = 0; i < count; i++) { var type = message.ReadEnum <ObjectCategory>(); ushort objectId = message.ReadUnsignedShort(); } }
public static LoginserverMessageType ReadLoginType(this Internal.ByteArray message) { return(message.ReadEnum <LoginserverMessageType>()); }
private Creatures.Creature ReadCreatureInstance(Internal.ByteArray message, int type = -1, UnityEngine.Vector3Int?absolutePosition = null) { if (type == -1) { type = message.ReadUnsignedShort(); } if (type != AppearanceInstance.Creature && type != AppearanceInstance.OutdatedCreature && type != AppearanceInstance.UnknownCreature) { throw new System.Exception("ProtocolGame.ReadCreatureInstance: Invalid creature type"); } var gameManager = OpenTibiaUnity.GameManager; Creatures.Creature creature; switch (type) { case AppearanceInstance.UnknownCreature: case AppearanceInstance.OutdatedCreature: { if (type == AppearanceInstance.UnknownCreature) { uint removeID = message.ReadUnsignedInt(); uint newID = message.ReadUnsignedInt(); CreatureType creatureType; if (gameManager.ClientVersion >= 910) { creatureType = message.ReadEnum <CreatureType>(); } else { if (newID >= Constants.PlayerStartID && newID < Constants.PlayerEndID) { creatureType = CreatureType.Player; } else if (newID >= Constants.MonsterStartID && newID < Constants.MonsterEndID) { creatureType = CreatureType.Monster; } else { creatureType = CreatureType.NPC; } } if (newID == Player.ID) { creature = Player; } else { creature = new Creatures.Creature(newID); } creature = CreatureStorage.ReplaceCreature(creature, removeID); if (!creature) { throw new System.Exception("ProtocolGame.ReadCreatureInstance: Failed to append creature."); } creature.Type = creatureType; if (gameManager.ClientVersion >= 1120) { creature.SetSummonerID(creature.IsSummon ? message.ReadUnsignedInt() : 0); } creature.Name = message.ReadString(); } else { uint creatureId = message.ReadUnsignedInt(); creature = CreatureStorage.GetCreature(creatureId); if (!creature) { throw new System.Exception("ProtocolGame.ReadCreatureInstance: Outdated creature not found."); } } creature.SetSkill(SkillType.HealthPercent, message.ReadUnsignedByte()); creature.Direction = message.ReadEnum <Direction>(); creature.Outfit = ReadCreatureOutfit(message, creature.Outfit); if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GamePlayerMounts)) { creature.MountOutfit = ReadMountOutfit(message, creature.MountOutfit); } creature.Brightness = message.ReadUnsignedByte(); creature.LightColor = Colors.ColorFrom8Bit(message.ReadUnsignedByte()); creature.SetSkill(SkillType.Speed, message.ReadUnsignedShort()); creature.SetPKFlag(message.ReadEnum <PKFlag>()); creature.SetPartyFlag(message.ReadEnum <PartyFlag>()); if (gameManager.GetFeature(GameFeature.GameCreatureEmblems) && type == AppearanceInstance.UnknownCreature) { creature.SetGuildFlag(message.ReadEnum <GuildFlag>()); } if (gameManager.GetFeature(GameFeature.GameCreatureMarks)) { creature.Type = message.ReadEnum <CreatureType>(); if (gameManager.ClientVersion >= 1120) { creature.SetSummonerID(creature.IsSummon ? message.ReadUnsignedInt() : 0); } } if (gameManager.GetFeature(GameFeature.GameCreatureIcons)) { creature.SetSpeechCategory(message.ReadEnum <SpeechCategory>()); } if (gameManager.GetFeature(GameFeature.GameCreatureMarks)) { creature.Marks.SetMark(MarkType.Permenant, message.ReadUnsignedByte()); if (gameManager.GetFeature(GameFeature.GameInspectionWindow)) { message.ReadUnsignedByte(); // inspection state } if (gameManager.ClientVersion < 1185) { creature.NumberOfPvPHelpers = message.ReadUnsignedShort(); } } if (gameManager.ClientVersion >= 854) { creature.Unpassable = message.ReadUnsignedByte() != 0; } else { creature.Unpassable = true; } break; } case AppearanceInstance.Creature: { uint creatureId = message.ReadUnsignedInt(); creature = CreatureStorage.GetCreature(creatureId); if (!creature) { throw new System.Exception(string.Format("ProtocolGame.ReadCreatureInstance: Known creature not found ({0}).", creatureId)); } creature.Direction = message.ReadEnum <Direction>(); if (gameManager.ClientVersion >= 953) { creature.Unpassable = message.ReadUnsignedByte() != 0; } break; } default: throw new System.Exception("ProtocolGame.ReadCreatureInstance: unknown creature identity type."); } if (absolutePosition.HasValue) { creature.Position = absolutePosition.Value; } CreatureStorage.MarkOpponentVisible(creature, true); CreatureStorage.InvalidateOpponents(); return(creature); }
private DailyReward.DailyReward ReadDailyReward(Internal.ByteArray message) { var rewardState = message.ReadEnum <DailyRewardStates>(); var reward = new DailyReward.DailyReward(rewardState); switch (rewardState) { case DailyRewardStates.PickedItems: { reward.AllowedMaximumItems = message.ReadUnsignedByte(); int objectCount = message.ReadUnsignedByte(); for (int i = 0; i < objectCount; i++) { ushort objectId = message.ReadUnsignedShort(); string objectName = message.ReadString(); uint objectWeight = message.ReadUnsignedInt(); reward.AddItem(new DailyReward.Types.Object(objectId, objectName, objectWeight, -1)); } break; } case DailyRewardStates.FixedItems: { int itemsCount = message.ReadUnsignedByte(); for (int i = 0; i < itemsCount; i++) { var rewardType = message.ReadEnum <DailyRewardTypes>(); switch (rewardType) { case DailyRewardTypes.Object: { ushort objectId = message.ReadUnsignedShort(); string objectName = message.ReadString(); int objectAmount = message.ReadUnsignedByte(); reward.AddItem(new DailyReward.Types.Object(objectId, objectName, 0, objectAmount)); break; } case DailyRewardTypes.PreyBonusRerolls: { int amount = message.ReadUnsignedByte(); reward.AddItem(new DailyReward.Types.PreyBonusRerolls(amount)); break; } case DailyRewardTypes.FiftyPercentXpBoost: { ushort minutes = message.ReadUnsignedShort(); reward.AddItem(new DailyReward.Types.XpBoost(minutes)); break; } default: throw new System.Exception("ProtocolGame.ReadDailyReward: Invalid reward type " + (int)rewardType + "."); } } break; } } return(reward); }
private void ParseDeleteInventory(Internal.ByteArray message) { var slot = message.ReadEnum <ClothSlots>(); OpenTibiaUnity.ContainerStorage.BodyContainerView.SetObject(slot, null); }