mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-07-25 00:34:56 -04:00
Added FSO.Files for use with the API server
Don't ask me. FreeSO is the prime example of dependency hell.
This commit is contained in:
parent
4b5e584eeb
commit
8fec258215
104 changed files with 14653 additions and 163 deletions
117
server/tso.files/Formats/IFF/Chunks/NGBH.cs
Executable file
117
server/tso.files/Formats/IFF/Chunks/NGBH.cs
Executable file
|
@ -0,0 +1,117 @@
|
|||
using FSO.Files.Utils;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace FSO.Files.Formats.IFF.Chunks
|
||||
{
|
||||
/// <summary>
|
||||
/// This chunk type contains general neighbourhood data within a neighbourhood.iff file.
|
||||
/// The only thing this was used for initially was tracking the tutorial.
|
||||
///
|
||||
/// As of hot date, it also includes inventory data, which was added as something of an afterthought.
|
||||
/// </summary>
|
||||
public class NGBH : IffChunk
|
||||
{
|
||||
public short[] NeighborhoodData = new short[16];
|
||||
public Dictionary<short, List<InventoryItem>> InventoryByID = new Dictionary<short, List<InventoryItem>>();
|
||||
|
||||
public uint Version;
|
||||
|
||||
/// <summary>
|
||||
/// Reads a NGBH chunk from a stream.
|
||||
/// </summary>
|
||||
/// <param name="iff">An Iff instance.</param>
|
||||
/// <param name="stream">A Stream object holding a OBJf chunk.</param>
|
||||
public override void Read(IffFile iff, Stream stream)
|
||||
{
|
||||
using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN))
|
||||
{
|
||||
io.ReadUInt32(); //pad
|
||||
Version = io.ReadUInt32(); //0x49 for latest game
|
||||
string magic = io.ReadCString(4); //HBGN
|
||||
|
||||
for (int i=0; i<16; i++)
|
||||
{
|
||||
NeighborhoodData[i] = io.ReadInt16();
|
||||
}
|
||||
|
||||
if (!io.HasMore) return; //no inventory present (yet)
|
||||
var count = io.ReadInt32();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (io.ReadInt32() != 1) { }
|
||||
var neighID = io.ReadInt16();
|
||||
var inventoryCount = io.ReadInt32();
|
||||
var inventory = new List<InventoryItem>();
|
||||
|
||||
for (int j=0; j<inventoryCount; j++)
|
||||
{
|
||||
inventory.Add(new InventoryItem(io));
|
||||
}
|
||||
InventoryByID[neighID] = inventory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Write(IffFile iff, Stream stream)
|
||||
{
|
||||
using (var io = IoWriter.FromStream(stream, ByteOrder.LITTLE_ENDIAN))
|
||||
{
|
||||
io.WriteInt32(0);
|
||||
io.WriteInt32(0x49);
|
||||
io.WriteCString("HBGN", 4);
|
||||
|
||||
for (int i=0; i<NeighborhoodData.Length; i++)
|
||||
{
|
||||
io.WriteInt16(NeighborhoodData[i]);
|
||||
}
|
||||
|
||||
io.WriteInt32(InventoryByID.Count);
|
||||
foreach (var item in InventoryByID)
|
||||
{
|
||||
io.WriteInt32(1);
|
||||
io.WriteInt16(item.Key);
|
||||
io.WriteInt32(item.Value.Count);
|
||||
foreach (var invent in item.Value)
|
||||
{
|
||||
invent.SerializeInto(io);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class InventoryItem
|
||||
{
|
||||
public int Type;
|
||||
public uint GUID;
|
||||
public ushort Count;
|
||||
|
||||
public InventoryItem() { }
|
||||
|
||||
public InventoryItem(IoBuffer io)
|
||||
{
|
||||
Type = io.ReadInt32();
|
||||
GUID = io.ReadUInt32();
|
||||
Count = io.ReadUInt16();
|
||||
}
|
||||
|
||||
public void SerializeInto(IoWriter io)
|
||||
{
|
||||
io.WriteInt32(Type);
|
||||
io.WriteUInt32(GUID);
|
||||
io.WriteUInt16(Count);
|
||||
}
|
||||
|
||||
public InventoryItem Clone()
|
||||
{
|
||||
return new InventoryItem() { Type = Type, GUID = GUID, Count = Count };
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "Type: "+Type+", GUID: "+GUID+", Count: "+Count;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue