private static void PutAnimationBlock(AnimationBlock block, MessageFrameBuilder builder) { var animation = block.Animation; builder.Put(MessageType.Short, DataOrder.Little, animation.Id); builder.Put(MessageType.Byte, DataTransformation.Negate, animation.Delay); }
public override MessageFrame ToMessage(IByteBufferAllocator alloc) { var bldr = new MessageFrameBuilder(alloc, 101); bldr.Put(MessageType.Byte, DataTransformation.Negate, _type << 2 | _orientation); bldr.Put(MessageType.Byte, _positionOffset); return(bldr.ToMessageFrame()); }
public override MessageFrame ToMessage(IByteBufferAllocator alloc) { MessageFrameBuilder builder = new MessageFrameBuilder(alloc, 151); builder.Put(MessageType.Byte, DataTransformation.Add, _positionOffset); builder.Put(MessageType.Short, DataOrder.Little, _id); builder.Put(MessageType.Byte, DataTransformation.Subtract, _type << 2 | _orientation); return(builder.ToMessageFrame()); }
public MessageFrame ToMessage(IByteBufferAllocator alloc) { MessageFrameBuilder bldr = new MessageFrameBuilder(alloc, 60, FrameType.VariableShort); Position basePos = _lastKnownRegion; bldr.Put(MessageType.Byte, _update.GetLocalY(basePos)); bldr.Put(MessageType.Byte, DataTransformation.Negate, _update.GetLocalX(basePos)); foreach (RegionUpdateMessage update in _messages) { var frame = update.ToMessage(alloc); bldr.Put(MessageType.Byte, frame.Id); bldr.PutBytes(frame.Payload); } return(bldr.ToMessageFrame()); }
protected override void Encode(IChannelHandlerContext context, ProtoMessage message, List <object> output) { var protoMessageCodec = _protoMessageCodecHandler.EncoderCodecs[message.Opcode]; var messageCodec = protoMessageCodec.MessageCodec; var fieldCodecs = protoMessageCodec.FieldCodec; Serilog.Log.Logger.Debug("Encoder Sent: {0} - {1} to {2}", message.Message, message.Message.Descriptor.ClrType.Name, message.Player.Username); var frameType = messageCodec.SizeType.GetFrameType(); var bldr = new MessageFrameBuilder(context.Allocator, message.Opcode, frameType); foreach (var field in fieldCodecs) { var isString = field.FieldCodec.Type == Models.FieldType.String; MessageType?messageType = isString ? null : field.FieldCodec.Type.GetMessageType(); var dataTransform = field.FieldCodec.Transform.GetDataTransformation(); var dataOrder = field.FieldCodec.Order.GetDataOrder(); object value = field.FieldDescriptor.Accessor.GetValue(message.Message); if (!isString) { long unboxedInt = field.ToUnboxedNumber(value); bldr.Put(messageType.Value, dataOrder, dataTransform, unboxedInt); } else { bldr.PutString((string)value); } } output.Add(bldr.ToMessageFrame()); }
public MessageFrame ToMessage(IByteBufferAllocator alloc) { var messageFrameBuilder = new MessageFrameBuilder(alloc, 238, FrameType.VariableShort); messageFrameBuilder.Put(MessageType.Int, Player.PingCount++ > 0xF42400 ? Player.PingCount = 1 : Player.PingCount); return(messageFrameBuilder.ToMessageFrame()); }
private void PutAppearanceBlock(AppearanceBlock block, MessageFrameBuilder builder) { Appearance appearance = block.Appearance; var playerProperties = new MessageFrameBuilder(builder.Alloc); playerProperties.Put(MessageType.Byte, (int)appearance.Gender); playerProperties.Put(MessageType.Byte, 0); playerProperties.Put(MessageType.Byte, 0); if (block.NpcId > 0) { playerProperties.Put(MessageType.Byte, 255); playerProperties.Put(MessageType.Byte, 255); playerProperties.Put(MessageType.Short, block.NpcId); } else { //Inventory equipment = block.getEquipment(); int[] style = appearance.Style; //Item item, chest, helm; for (int slot = 0; slot < 4; slot++) { playerProperties.Put(MessageType.Byte, 0); } playerProperties.Put(MessageType.Short, 0x100 + style[2]); //Chest playerProperties.Put(MessageType.Byte, 0); //Shield playerProperties.Put(MessageType.Short, 0x100 + style[3]); //Arms playerProperties.Put(MessageType.Short, 0x100 + style[5]); //Legs playerProperties.Put(MessageType.Short, 0x100 + style[0]); //Helm playerProperties.Put(MessageType.Short, 0x100 + style[4]); //Hands playerProperties.Put(MessageType.Short, 0x100 + style[6]); //Feet playerProperties.Put(MessageType.Short, 0x100 + style[1]); //Beard } int[] colors = appearance.Colors; foreach (int color in colors) { playerProperties.Put(MessageType.Byte, color); } playerProperties.Put(MessageType.Short, 0x328); // stand playerProperties.Put(MessageType.Short, 0x337); // stand turn playerProperties.Put(MessageType.Short, 0x333); // walk playerProperties.Put(MessageType.Short, 0x334); // turn 180 playerProperties.Put(MessageType.Short, 0x335); // turn 90 cw playerProperties.Put(MessageType.Short, 0x336); // turn 90 ccw playerProperties.Put(MessageType.Short, 0x338); // run playerProperties.Put(MessageType.Long, block.Name); playerProperties.Put(MessageType.Byte, block.Combat); playerProperties.Put(MessageType.Short, block.Skill); builder.Put(MessageType.Byte, DataTransformation.Add, playerProperties.GetLength()); builder.PutRawBuilder(playerProperties); }
private void PutBlocks(SynchronizationSegment segment, MessageFrameBuilder builder) { var blockSet = segment.BlockSet; if (blockSet.Size() > 0) { int mask = 0; if (blockSet.Contains <AnimationBlock>()) { mask |= 0x8; } if (blockSet.Contains <AppearanceBlock>()) { mask |= 0x10; } if (mask >= 0x100) { mask |= 0x20; builder.Put(MessageType.Byte, (mask & 0xFF)); builder.Put(MessageType.Byte, (mask >> 8)); } else { builder.Put(MessageType.Byte, mask); } if (blockSet.Contains <AnimationBlock>()) { PutAnimationBlock(blockSet.Get <AnimationBlock>(), builder); } if (blockSet.Contains <AppearanceBlock>()) { PutAppearanceBlock(blockSet.Get <AppearanceBlock>(), builder); } } }
public MessageFrame ToMessage(IByteBufferAllocator alloc) { var messageFrameBuilder = new MessageFrameBuilder(alloc, 61, FrameType.VariableShort); var playerPos = Player.Position; var clearRegion = false; var regionX = playerPos.RegionX; var regionY = playerPos.RegionY; var absoluteRegionX = (regionX + 6) / 8; var absoluteRegionY = (regionY + 6) / 8; if ( ((absoluteRegionX == 48 || absoluteRegionX == 49) && absoluteRegionY == 48) || (absoluteRegionX == 48 && absoluteRegionY == 148) ) { clearRegion = true; } messageFrameBuilder.Put(MessageType.Short, DataOrder.Little, DataTransformation.Add, playerPos.LocalY); messageFrameBuilder.Put(MessageType.Byte, playerPos.Height); messageFrameBuilder.Put(MessageType.Short, regionX + 6); for (int xCalc = regionX / 8; xCalc <= (regionX + 12) / 8; xCalc++) { for (int yCalc = regionY / 8; yCalc <= (regionY + 12) / 8; yCalc++) { int regionId = yCalc + (xCalc << 8); // 1786653352 if (clearRegion || yCalc != 49 && yCalc != 149 && yCalc != 147 && xCalc != 50 && (xCalc != 49 || yCalc != 47)) { messageFrameBuilder.Put(MessageType.Int, DataOrder.Little, 0); messageFrameBuilder.Put(MessageType.Int, DataOrder.Little, 0); messageFrameBuilder.Put(MessageType.Int, DataOrder.Little, 0); messageFrameBuilder.Put(MessageType.Int, DataOrder.Little, 0); } } } messageFrameBuilder.Put(MessageType.Short, DataOrder.Big, DataTransformation.Add, playerPos.LocalX); messageFrameBuilder.Put(MessageType.Short, regionY + 6); return(messageFrameBuilder.ToMessageFrame()); }