示例#1
0
        public void CItemsChangeReq(GameSession session, CItemsChangeReqMessage message)
        {
            var plr = session.Player;

            Logger.Debug()
            .Account(session)
            .Message($"Item sync - {JsonConvert.SerializeObject(message.Unk1, Formatting.Indented)}")
            .Write();

            if (message.Unk2.Length > 0)
            {
                Logger.Warn()
                .Account(session)
                .Message($"Unk2: {JsonConvert.SerializeObject(message.Unk2, Formatting.Indented)}")
                .Write();
            }

            var @char = plr.CharacterManager.CurrentCharacter;
            var unk1  = new ChangeItemsUnkDto
            {
                AccountId = plr.Account.Id,
                Skills    = @char.Skills.GetItems().Select(item => item?.ItemNumber ?? 0).ToArray(),
                Weapons   = @char.Weapons.GetItems().Select(item => item?.ItemNumber ?? 0).ToArray(),
                Unk4      = message.Unk1.Unk4,
                Unk5      = message.Unk1.Unk5,
                Unk6      = message.Unk1.Unk6,
                HP        = plr.GetMaxHP(),
                Unk8      = message.Unk1.Unk8
            };

            plr.Room.Broadcast(new SItemsChangeAckMessage(unk1, message.Unk2));
        }
示例#2
0
        public void CItemsChangeReq(GameSession session, CItemsChangeReqMessage message)
        {
            var plr = session.Player;

            Logger.ForAccount(session)
            .Debug("Item sync - {unk1}", message.Unk1);

            if (message.Unk2.Length > 0)
            {
                Logger.ForAccount(session)
                .Warning("{unk2}", message.Unk2);
            }

            var @char = plr.CharacterManager.CurrentCharacter;
            var unk1  = new ChangeItemsUnkDto
            {
                AccountId = plr.Account.Id,
                Skills    = @char.Skills.GetItems().Select(item => item?.ItemNumber ?? 0).ToArray(),
                Weapons   = @char.Weapons.GetItems().Select(item => item?.ItemNumber ?? 0).ToArray(),
                Unk4      = message.Unk1.Unk4,
                Unk5      = message.Unk1.Unk5,
                Unk6      = message.Unk1.Unk6,
                HP        = plr.GetMaxHP(),
                Unk8      = message.Unk1.Unk8
            };

            plr.Room.Broadcast(new SItemsChangeAckMessage(unk1, message.Unk2));
        }
示例#3
0
        public Task <bool> OnHandle(MessageContext context, CItemsChangeReqMessage message)
        {
            var session = context.GetSession <Session>();
            var plr     = session.Player;
            var room    = plr.Room;
            var logger  = plr.AddContextToLogger(_logger);

            // Can only change items in lobby and when not ready
            if (plr.State != PlayerState.Lobby || plr.IsReady)
            {
                plr.Disconnect();
                return(Task.FromResult(true));
            }

            logger.Debug("Item sync unk1={Unk1}", message.Unk1);

            if (message.Unk2.Length > 0)
            {
                logger.Warning("Item sync unk2={Unk2}", (object)message.Unk2);
            }

            room.Broadcast(new SItemsChangeAckMessage(message.Unk1, message.Unk2));
            return(Task.FromResult(true));
        }