Esempio n. 1
0
        private void ParseStoreButtonIndicators(Internal.ByteArray message)
        {
            message.ReadBoolean(); // sale on items?
            message.ReadBoolean(); // new items on store?

            // TODO
        }
Esempio n. 2
0
        private void ParseLoginWait(Internal.ByteArray message)
        {
            string waitMessage = message.ReadString();
            int    waitTime    = message.ReadUnsignedByte();

            onLoginWait.Invoke(waitMessage, waitTime);
        }
Esempio n. 3
0
        private void ParseMarketEnter(Internal.ByteArray message)
        {
            ulong balance;

            if (OpenTibiaUnity.GameManager.ClientVersion >= 981)
            {
                balance = message.ReadUnsignedLong();
            }
            else
            {
                balance = message.ReadUnsignedInt();
            }

            int vocation = -1;

            if (OpenTibiaUnity.GameManager.ClientVersion < 950)
            {
                vocation = message.ReadUnsignedByte();
            }

            int offers     = message.ReadUnsignedByte();
            int depotCount = message.ReadUnsignedByte();

            for (int i = 0; i < depotCount; i++)
            {
                message.ReadUnsignedShort(); // objectId
                message.ReadUnsignedShort(); // objectCount
            }
        }
Esempio n. 4
0
        private void ParseBasicData(Internal.ByteArray message)
        {
            bool premium = message.ReadBoolean();

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GamePremiumExpiration))
            {
                uint premiumExpiration = message.ReadUnsignedInt();
            }

            byte vocation = message.ReadUnsignedByte();

            if (OpenTibiaUnity.GameManager.ClientVersion >= 1100)
            {
                bool hasReachedMain = message.ReadBoolean();
            }

            List <byte> spells      = new List <byte>();
            ushort      spellsCount = message.ReadUnsignedShort();

            for (int i = 0; i < spellsCount; i++)
            {
                spells.Add(message.ReadUnsignedByte());
            }

            if (Player)
            {
                //_player.PremiumStatus = premium;
                //_player.PremiumExpiration = premiumExpiration;
                //_player.Vocation = vocation;
                //_player.ReachedMain = hasReachedMain;
            }
        }
Esempio n. 5
0
        private void ParseDeleteInContainer(Internal.ByteArray message)
        {
            byte   containerId = message.ReadUnsignedByte();
            ushort slot;

            Appearances.ObjectInstance appendObject = null;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameContainerPagination))
            {
                slot = message.ReadUnsignedShort();
                ushort itemId = message.ReadUnsignedShort();

                if (itemId != 0)
                {
                    appendObject = ReadObjectInstance(message, itemId);
                }
            }
            else
            {
                slot = message.ReadUnsignedByte();
            }

            var containerView = ContainerStorage.GetContainerView(containerId);

            if (!!containerView)
            {
                containerView.RemoveObject(slot, appendObject);
            }
        }
Esempio n. 6
0
        private void ParseBuddyAdd(Internal.ByteArray message)
        {
            uint   creatureID  = message.ReadUnsignedInt();
            string name        = message.ReadString();
            string desc        = string.Empty;
            uint   icon        = 0;
            bool   notifyLogin = false;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameAdditionalVipInfo))
            {
                desc        = message.ReadString();
                icon        = message.ReadUnsignedInt();
                notifyLogin = message.ReadBoolean();
            }

            byte        status = message.ReadUnsignedByte();
            List <byte> groups;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameBuddyGroups))
            {
                int count = message.ReadUnsignedByte();
                groups = new List <byte>(count);
                for (int i = 0; i < count; i++)
                {
                    groups.Add(message.ReadUnsignedByte());
                }
            }
        }
Esempio n. 7
0
        private void ParseCreatureMarks(Internal.ByteArray message)
        {
            int length;

            if (OpenTibiaUnity.GameManager.ClientVersion >= 1035)
            {
                length = 1;
            }
            else
            {
                length = message.ReadUnsignedByte();
            }

            for (int i = 0; i < length; i++)
            {
                uint creatureId = message.ReadUnsignedInt();
                bool permenant  = message.ReadUnsignedByte() != 1;
                byte mark       = message.ReadUnsignedByte();

                var creature = CreatureStorage.GetCreature(creatureId);
                if (!!creature)
                {
                    creature.Marks.SetMark(permenant ? MarkType.Permenant : MarkType.OneSecondTemp, mark);
                    CreatureStorage.InvalidateOpponents();
                }
                else
                {
                    throw new System.Exception("ProtocolGame.ParseCreatureMarks: Unknown creature id: " + creatureId);
                }
            }
        }
Esempio n. 8
0
        private void ParseCancelWalk(Internal.ByteArray message)
        {
            int direction = message.ReadUnsignedByte();

            var absolutePosition = Player.Position;

            if (absolutePosition == _lastSnapback)
            {
                _snapbackCount++;
            }
            else
            {
                _snapbackCount = 0;
            }

            _lastSnapback.Set(absolutePosition.x, absolutePosition.y, absolutePosition.z);
            if (_snapbackCount >= 16)
            {
                Player.StopAutowalk(true);
                CreatureStorage.SetAttackTarget(null, false);
                SendCancel();
                _snapbackCount = 0;
            }

            Player.AbortAutowalk((Direction)direction);
        }
Esempio n. 9
0
        private void ParseOpenOwnChannel(Internal.ByteArray message)
        {
            int    channelId   = message.ReadUnsignedShort();
            string channelName = message.ReadString();
            var    channel     = ChatStorage.AddChannel(channelId, channelName, MessageModeType.Channel);

            channel.CanModerate = true;

            if (channel.IsPrivate)
            {
                ChatStorage.OwnPrivateChannelId = channelId;
            }

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameChannelPlayerList))
            {
                int joinedUsers = message.ReadUnsignedShort();
                for (int i = 0; i < joinedUsers; i++)
                {
                    channel.PlayerJoined(message.ReadString());
                }

                int invitedUsers = message.ReadUnsignedShort();
                for (int i = 0; i < invitedUsers; i++)
                {
                    channel.PlayerInvited(message.ReadString());
                }
            }
        }
Esempio n. 10
0
        public static uint CalculateAdler32Checksum(Internal.ByteArray byteArray, int offset = 0, int length = 0)
        {
            if (byteArray == null)
            {
                throw new ArgumentNullException("Adler32Checksum.CalculateAdler32Checksum: Invalid input.");
            }

            if (offset >= byteArray.Length)
            {
                throw new ArgumentOutOfRangeException("Adler32Checksum.CalculateAdler32Checksum: Invalid offset.");
            }

            uint a = 1;
            uint b = 0;
            int  i = 0;

            byteArray.Position = offset;
            while (byteArray.BytesAvailable > 0 && (length == 0 || i < length))
            {
                a = (a + byteArray.ReadUnsignedByte()) % ModAdler;
                b = (b + a) % ModAdler;
                i++;
            }

            a &= 65535;
            b &= 65535;
            return((b << 16) | a);
        }
Esempio n. 11
0
        private void SendProxyWorldNameIdentification()
        {
            var message = new Internal.ByteArray();

            message.WriteString(WorldName + "\n", 0, true);
            _connection.Send(message);
        }
Esempio n. 12
0
        private void ParsePlayerGoods(Internal.ByteArray message)
        {
            long money;

            if (OpenTibiaUnity.GameManager.ClientVersion >= 973)
            {
                money = message.ReadLong();
            }
            else
            {
                money = message.ReadInt();
            }

            var goods = new List <Container.InventoryTypeInfo>();

            int size = message.ReadUnsignedByte();

            for (int i = 0; i < size; i++)
            {
                ushort objectId = message.ReadUnsignedShort();
                int    amount   = message.ReadUnsignedByte();

                goods.Add(new Container.InventoryTypeInfo(objectId, 0, amount));
            }

            OpenTibiaUnity.ContainerStorage.PlayerGoods = goods;
            OpenTibiaUnity.ContainerStorage.PlayerMoney = money;
        }
Esempio n. 13
0
        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();
                }
            }
        }
Esempio n. 14
0
        private void ParseGmActions(Internal.ByteArray message)
        {
            int numViolationReasons = 20;
            var clientVersion       = OpenTibiaUnity.GameManager.ClientVersion;

            if (clientVersion >= 850)
            {
                numViolationReasons = 20;
            }
            else if (clientVersion >= 840)
            {
                numViolationReasons = 23;
            }
            else
            {
                numViolationReasons = 32;
            }

            List <byte> actions = new List <byte>();

            for (int i = 0; i < numViolationReasons; i++)
            {
                actions.Add(message.ReadUnsignedByte());
            }
        }
Esempio n. 15
0
        private void ParseClientCheck(Internal.ByteArray message)
        {
            // TODO
            uint something = message.ReadUnsignedInt();

            message.Skip((int)something);
        }
Esempio n. 16
0
 public void WriteKey(Internal.ByteArray message)
 {
     message.WriteUnsignedInt(_key[0]);
     message.WriteUnsignedInt(_key[1]);
     message.WriteUnsignedInt(_key[2]);
     message.WriteUnsignedInt(_key[3]);
 }
Esempio n. 17
0
        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;
            }
        }
Esempio n. 18
0
        private void ParseDeath(Internal.ByteArray message)
        {
            var deathType = DeathType.DeathTypeRegular;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameDeathType))
            {
                deathType = (DeathType)message.ReadUnsignedByte();
            }

            int penalty = 100;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GamePenalityOnDeath) && deathType == DeathType.DeathTypeRegular)
            {
                penalty = message.ReadUnsignedByte();
            }

            bool useDeathRedemption = false;

            if (OpenTibiaUnity.GameManager.ClientVersion >= 1120)
            {
                useDeathRedemption = message.ReadBoolean();
            }

            // TODO death actions...
            //LocalPlayer.OnDeath(deathType, penalty);
        }
Esempio n. 19
0
        private void ParseSetInventory(Internal.ByteArray message)
        {
            var slot    = message.ReadEnum <ClothSlots>();
            var @object = ReadObjectInstance(message);

            OpenTibiaUnity.ContainerStorage.BodyContainerView.SetObject(slot, @object);
        }
Esempio n. 20
0
        private void ParseResourceBalance(Internal.ByteArray message)
        {
            byte  type    = message.ReadUnsignedByte();
            ulong balance = message.ReadUnsignedLong();

            switch (type)
            {
            case (int)ResourceTypes.BankGold:
                //_player.BankGold = balance;
                break;

            case (int)ResourceTypes.InventoryGold:
                //_player.InventoryGold = balance;
                break;

            case (int)ResourceTypes.PreyBonusRerolls:
                if (!OpenTibiaUnity.GameManager.GetFeature(GameFeature.GamePrey))
                {
                    throw new System.Exception("ProtocolGame.ParseResourceBalance: Invalid resource type: " + type + ".");
                }
                //PreyManager.Insance.BonusRerollAmount = balance;
                break;

            case (int)ResourceTypes.CollectionTokens:
                if (!OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameRewardWall))
                {
                    throw new System.Exception("ProtocolGame.ParseResourceBalance: Invalid resource type: " + type + ".");
                }
                break;

            default:
                throw new System.Exception("ProtocolGame.ParseResourceBalance: Invalid resource type: " + type + ".");
            }
        }
Esempio n. 21
0
        private int ReadFloor(Internal.ByteArray message, int z, int skip)
        {
            for (int x = 0; x <= Constants.MapSizeX - 1; x++)
            {
                for (int y = 0; y <= Constants.MapSizeY - 1; y++)
                {
                    if (skip > 0)
                    {
                        skip--;
                    }
                    else
                    {
                        skip = ReadField(message, x, y, z);
                    }

                    UnityEngine.Vector3Int mapPosition      = new UnityEngine.Vector3Int(x, y, z);
                    UnityEngine.Vector3Int absolutePosition = WorldMapStorage.ToAbsolute(mapPosition);

                    if (absolutePosition.z == MiniMapStorage.PositionZ)
                    {
                        WorldMapStorage.UpdateMiniMap(mapPosition);
                        uint color = WorldMapStorage.GetMiniMapColour(mapPosition);
                        int  cost  = WorldMapStorage.GetMiniMapCost(mapPosition);
                        MiniMapStorage.UpdateField(absolutePosition, color, cost, false);
                    }
                }
            }

            return(skip);
        }
Esempio n. 22
0
        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
            }
        }
Esempio n. 23
0
        private void ParseTextEffect(Internal.ByteArray message)
        {
            var    position = message.ReadPosition();
            int    color    = message.ReadUnsignedByte();
            string text     = message.ReadString();

            WorldMapStorage.AddTextualEffect(position, color, text);
        }
Esempio n. 24
0
        private void ParseChallange(Internal.ByteArray message)
        {
            uint timestamp = message.ReadUnsignedInt();
            byte challange = message.ReadUnsignedByte();

            SendLogin(timestamp, challange);
            SetConnectionState(ConnectionState.ConnectingStage2, false);
        }
Esempio n. 25
0
 private void ParsePreyPrices(Internal.ByteArray message)
 {
     message.ReadUnsignedInt(); // rerollPrice in gold
     if (OpenTibiaUnity.GameManager.ClientVersion >= 1190)
     {
         message.ReadUnsignedByte(); // unknown
         message.ReadUnsignedByte(); // selectCreatureDirectly in preyWildCards
     }
 }
Esempio n. 26
0
        private void ParseCreateOnMap(Internal.ByteArray message)
        {
            var absolutePosition = message.ReadPosition();

            if (!WorldMapStorage.IsVisible(absolutePosition, true))
            {
                throw new System.Exception("ProtocolGame.ParseCreateOnMap: Co-ordinate " + absolutePosition + " is out of range.");
            }

            var mapPosition = WorldMapStorage.ToMap(absolutePosition);
            int stackPos    = 255;

            if (OpenTibiaUnity.GameManager.ClientVersion >= 841)
            {
                stackPos = message.ReadUnsignedByte();
            }

            int typeOrId = message.ReadUnsignedShort();

            Appearances.ObjectInstance @object;
            if (typeOrId == Appearances.AppearanceInstance.Creature || typeOrId == Appearances.AppearanceInstance.OutdatedCreature || typeOrId == Appearances.AppearanceInstance.UnknownCreature)
            {
                var creature = ReadCreatureInstance(message, typeOrId, absolutePosition);
                if (creature.Id == Player.Id)
                {
                    Player.StopAutowalk(true);
                }

                @object = AppearanceStorage.CreateObjectInstance(Appearances.AppearanceInstance.Creature, creature.Id);
            }
            else
            {
                @object = ReadObjectInstance(message, typeOrId);
            }

            if (stackPos == 255)
            {
                WorldMapStorage.PutObject(mapPosition, @object);
            }
            else
            {
                if (stackPos > Constants.MapSizeW)
                {
                    throw new System.Exception("ProtocolGame.ParseCreateOnMap: Invalid stack position (" + stackPos + ").");
                }

                WorldMapStorage.InsertObject(mapPosition, stackPos, @object);
            }

            if (absolutePosition.z == MiniMapStorage.PositionZ)
            {
                WorldMapStorage.UpdateMiniMap(mapPosition);
                uint color = WorldMapStorage.GetMiniMapColour(mapPosition);
                int  cost  = WorldMapStorage.GetMiniMapCost(mapPosition);
                MiniMapStorage.UpdateField(absolutePosition, color, cost, false);
            }
        }
Esempio n. 27
0
        private void ParseAmbientLight(Internal.ByteArray message)
        {
            int intensity = message.ReadUnsignedByte();
            int rawColor  = message.ReadUnsignedByte();

            var color = Colors.ColorFrom8Bit(rawColor);

            WorldMapStorage.SetAmbientLight(color, intensity);
        }
Esempio n. 28
0
        private void ParseMarketStatistics(Internal.ByteArray message)
        {
            int count = message.ReadUnsignedShort();

            for (int i = 0; i < count; i++)
            {
                ushort objectId    = message.ReadUnsignedShort();
                uint   objectPrice = message.ReadUnsignedInt();
            }
        }
Esempio n. 29
0
 private void ParseUnjustifiedPoints(Internal.ByteArray message)
 {
     message.ReadUnsignedByte(); // dailyProgress
     message.ReadUnsignedByte(); // dailyRemaining
     message.ReadUnsignedByte(); // weeklyProgress
     message.ReadUnsignedByte(); // weeklyRemaining
     message.ReadUnsignedByte(); // monthlyProgress
     message.ReadUnsignedByte(); // monthlyRemaining
     message.ReadUnsignedByte(); // skullDuration
 }
Esempio n. 30
0
        private void ParsePremiumTrigger(Internal.ByteArray message)
        {
            int triggers = message.ReadUnsignedByte();

            for (int i = 0; i < triggers; i++)
            {
                message.ReadUnsignedByte(); // trigger
                // TODO
            }
        }