public IPubFile <EIFRecord> LoadPubFromExplicitFile(string fileName) { var fileBytes = File.ReadAllBytes(fileName); var pub = new EIFFile(); pub.DeserializeFromByteArray(fileBytes, _numberEncoderService); return(pub); }
public async Task <IPubFile> RequestFile(InitFileType fileType) { var request = new PacketBuilder(PacketFamily.Welcome, PacketAction.Agree) .AddChar((byte)fileType) .Build(); var response = await _packetSendService.SendEncodedPacketAndWaitAsync(request); if (!PacketIsValid(response)) { throw new EmptyPacketReceivedException(); } var responseFileType = (InitReply)response.ReadChar(); var extraByte = response.ReadChar(); if (extraByte != 1) { throw new MalformedPacketException("Missing extra single byte in file transfer packet", response); } IPubFile retFile; switch (responseFileType) { case InitReply.ItemFile: retFile = new EIFFile(); break; case InitReply.NpcFile: retFile = new ENFFile(); break; case InitReply.SpellFile: retFile = new ESFFile(); break; case InitReply.ClassFile: retFile = new ECFFile(); break; default: throw new EmptyPacketReceivedException(); } var responseBytes = response.ReadBytes(response.Length - response.ReadPosition) .ToArray(); retFile.DeserializeFromByteArray(responseBytes, _numberEncoderService); return(retFile); }
public ISpriteSheet GetShieldTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.ShieldGraphic == 0) { return(new EmptySpriteSheet()); } var type = ArmorShieldSpriteType.Standing; var offset = GetBaseOffsetFromDirection(characterRenderProperties.Direction); //front shields have one size gfx, back arrows/wings have another size. if (!EIFFile.IsShieldOnBack(characterRenderProperties.ShieldGraphic)) { if (characterRenderProperties.CurrentAction == CharacterActionState.Walking) { switch (characterRenderProperties.WalkFrame) { case 1: type = ArmorShieldSpriteType.WalkFrame1; break; case 2: type = ArmorShieldSpriteType.WalkFrame2; break; case 3: type = ArmorShieldSpriteType.WalkFrame3; break; case 4: type = ArmorShieldSpriteType.WalkFrame4; break; } } else if (characterRenderProperties.CurrentAction == CharacterActionState.Attacking) { switch (characterRenderProperties.AttackFrame) { case 1: type = ArmorShieldSpriteType.PunchFrame1; break; case 2: type = ArmorShieldSpriteType.PunchFrame2; break; } } else if (characterRenderProperties.CurrentAction == CharacterActionState.SpellCast) { type = ArmorShieldSpriteType.SpellCast; } else if (characterRenderProperties.CurrentAction == CharacterActionState.Sitting) { return(new EmptySpriteSheet()); } offset *= GetOffsetBasedOnState(type); } else { //different gfx numbering scheme for shield items worn on the back: // Standing = 1/2 // Attacking = 3/4 // Extra = 5 (unused?) if (characterRenderProperties.CurrentAction == CharacterActionState.Attacking) { type = ArmorShieldSpriteType.ShieldItemOnBack_AttackingWithBow; } } var gfxFile = characterRenderProperties.Gender == 0 ? GFXTypes.FemaleBack : GFXTypes.MaleBack; var baseShieldValue = GetBaseShieldGraphic(characterRenderProperties.ShieldGraphic); var gfxNumber = baseShieldValue + (int)type + offset; return(new SpriteSheet(_gfxManager.TextureFromResource(gfxFile, gfxNumber, true))); }