Cleanup/Housekeeping (#242)
This commit is contained in:
parent
90ede0659f
commit
741e8d8300
228 changed files with 6292 additions and 2690 deletions
|
|
@ -1,23 +1,3 @@
|
|||
/***************************************************************************
|
||||
* MultiData.cs
|
||||
* -------------------
|
||||
* begin : May 1, 2002
|
||||
* copyright : (C) The RunUO Software Team
|
||||
* email : info@runuo.com
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Collections.Generic;
|
||||
|
|
@ -55,7 +35,10 @@ namespace Server
|
|||
|
||||
var vdPath = Core.FindDataFile("verdata.mul", false);
|
||||
|
||||
if (!File.Exists(vdPath)) return;
|
||||
if (!File.Exists(vdPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using var fs = new FileStream(vdPath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
var bin = new BinaryReader(fs);
|
||||
|
|
@ -92,11 +75,17 @@ namespace Server
|
|||
multiID &= 0x3FFF;
|
||||
|
||||
if (Components.ContainsKey(multiID))
|
||||
{
|
||||
mcl = Components[multiID];
|
||||
}
|
||||
else if (!UsingUOPFormat)
|
||||
{
|
||||
Components[multiID] = mcl = Load(multiID);
|
||||
}
|
||||
else
|
||||
{
|
||||
mcl = MultiComponentList.Empty;
|
||||
}
|
||||
|
||||
return mcl;
|
||||
}
|
||||
|
|
@ -108,10 +97,14 @@ namespace Server
|
|||
|
||||
// Head Information Start
|
||||
if (streamReader.ReadInt32() != 0x0050594D) // Not a UOP Files
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (streamReader.ReadInt32() > 5) // Bad Version
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Multi ID List Array Start
|
||||
UOPHash.BuildChunkIDs(out var chunkIds);
|
||||
|
|
@ -149,7 +142,9 @@ namespace Server
|
|||
index++;
|
||||
|
||||
if (offset == 0 || decompressedSize == 0 || filehash == 0x126D1E99DDEDEE0A) // Exclude housing.bin
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
chunkIds.TryGetValue(filehash, out var chunkID);
|
||||
|
||||
|
|
@ -160,7 +155,9 @@ namespace Server
|
|||
Span<byte> sourceData = new byte[compressedSize];
|
||||
|
||||
if (stream.Read(sourceData) != compressedSize)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Span<byte> data;
|
||||
|
||||
|
|
@ -221,7 +218,9 @@ namespace Server
|
|||
var length = m_IndexReader.ReadInt32();
|
||||
|
||||
if (lookup < 0 || length <= 0)
|
||||
{
|
||||
return MultiComponentList.Empty;
|
||||
}
|
||||
|
||||
m_StreamReader.BaseStream.Seek(lookup, SeekOrigin.Begin);
|
||||
|
||||
|
|
@ -279,14 +278,18 @@ namespace Server
|
|||
Tiles[x][y] = new StaticTile[toCopy.Tiles[x][y].Length];
|
||||
|
||||
for (var i = 0; i < Tiles[x][y].Length; ++i)
|
||||
{
|
||||
Tiles[x][y][i] = toCopy.Tiles[x][y][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List = new MultiTileEntry[toCopy.List.Length];
|
||||
|
||||
for (var i = 0; i < List.Length; ++i)
|
||||
{
|
||||
List[i] = toCopy.List[i];
|
||||
}
|
||||
}
|
||||
|
||||
public MultiComponentList(IGenericReader reader)
|
||||
|
|
@ -304,11 +307,14 @@ namespace Server
|
|||
var allTiles = List = new MultiTileEntry[length];
|
||||
|
||||
if (version == 0)
|
||||
{
|
||||
for (var i = 0; i < length; ++i)
|
||||
{
|
||||
int id = reader.ReadShort();
|
||||
if (id >= 0x4000)
|
||||
{
|
||||
id -= 0x4000;
|
||||
}
|
||||
|
||||
allTiles[i].ItemId = (ushort)id;
|
||||
allTiles[i].OffsetX = reader.ReadShort();
|
||||
|
|
@ -316,7 +322,9 @@ namespace Server
|
|||
allTiles[i].OffsetZ = reader.ReadShort();
|
||||
allTiles[i].Flags = (TileFlag)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < length; ++i)
|
||||
{
|
||||
allTiles[i].ItemId = reader.ReadUShort();
|
||||
|
|
@ -325,6 +333,7 @@ namespace Server
|
|||
allTiles[i].OffsetZ = reader.ReadShort();
|
||||
allTiles[i].Flags = (TileFlag)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
var tiles = new TileList[Width][];
|
||||
Tiles = new StaticTile[Width][][];
|
||||
|
|
@ -335,10 +344,13 @@ namespace Server
|
|||
Tiles[x] = new StaticTile[Height][];
|
||||
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
tiles[x][y] = new TileList();
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < allTiles.Length; ++i)
|
||||
{
|
||||
if (i == 0 || allTiles[i].Flags != 0)
|
||||
{
|
||||
var xOffset = allTiles[i].OffsetX + Center.m_X;
|
||||
|
|
@ -346,10 +358,15 @@ namespace Server
|
|||
|
||||
tiles[xOffset][yOffset].Add(allTiles[i].ItemId, (sbyte)allTiles[i].OffsetZ);
|
||||
}
|
||||
}
|
||||
|
||||
for (var x = 0; x < Width; ++x)
|
||||
{
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
Tiles[x][y] = tiles[x][y].ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MultiComponentList(BinaryReader reader, int count)
|
||||
|
|
@ -364,25 +381,37 @@ namespace Server
|
|||
allTiles[i].OffsetZ = reader.ReadInt16();
|
||||
|
||||
if (PostHSFormat)
|
||||
{
|
||||
allTiles[i].Flags = (TileFlag)reader.ReadUInt64();
|
||||
}
|
||||
else
|
||||
{
|
||||
allTiles[i].Flags = (TileFlag)reader.ReadUInt32();
|
||||
}
|
||||
|
||||
var e = allTiles[i];
|
||||
|
||||
if (i == 0 || e.Flags != 0)
|
||||
{
|
||||
if (e.OffsetX < m_Min.m_X)
|
||||
{
|
||||
m_Min.m_X = e.OffsetX;
|
||||
}
|
||||
|
||||
if (e.OffsetY < m_Min.m_Y)
|
||||
{
|
||||
m_Min.m_Y = e.OffsetY;
|
||||
}
|
||||
|
||||
if (e.OffsetX > m_Max.m_X)
|
||||
{
|
||||
m_Max.m_X = e.OffsetX;
|
||||
}
|
||||
|
||||
if (e.OffsetY > m_Max.m_Y)
|
||||
{
|
||||
m_Max.m_Y = e.OffsetY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -399,10 +428,13 @@ namespace Server
|
|||
Tiles[x] = new StaticTile[Height][];
|
||||
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
tiles[x][y] = new TileList();
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < allTiles.Length; ++i)
|
||||
{
|
||||
if (i == 0 || allTiles[i].Flags != 0)
|
||||
{
|
||||
var xOffset = allTiles[i].OffsetX + Center.m_X;
|
||||
|
|
@ -410,10 +442,15 @@ namespace Server
|
|||
|
||||
tiles[xOffset][yOffset].Add(allTiles[i].ItemId, (sbyte)allTiles[i].OffsetZ);
|
||||
}
|
||||
}
|
||||
|
||||
for (var x = 0; x < Width; ++x)
|
||||
{
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
Tiles[x][y] = tiles[x][y].ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MultiComponentList(List<MultiTileEntry> list)
|
||||
|
|
@ -433,13 +470,25 @@ namespace Server
|
|||
|
||||
if (i == 0 || e.Flags != 0)
|
||||
{
|
||||
if (e.OffsetX < m_Min.m_X) m_Min.m_X = e.OffsetX;
|
||||
if (e.OffsetX < m_Min.m_X)
|
||||
{
|
||||
m_Min.m_X = e.OffsetX;
|
||||
}
|
||||
|
||||
if (e.OffsetY < m_Min.m_Y) m_Min.m_Y = e.OffsetY;
|
||||
if (e.OffsetY < m_Min.m_Y)
|
||||
{
|
||||
m_Min.m_Y = e.OffsetY;
|
||||
}
|
||||
|
||||
if (e.OffsetX > m_Max.m_X) m_Max.m_X = e.OffsetX;
|
||||
if (e.OffsetX > m_Max.m_X)
|
||||
{
|
||||
m_Max.m_X = e.OffsetX;
|
||||
}
|
||||
|
||||
if (e.OffsetY > m_Max.m_Y) m_Max.m_Y = e.OffsetY;
|
||||
if (e.OffsetY > m_Max.m_Y)
|
||||
{
|
||||
m_Max.m_Y = e.OffsetY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -455,10 +504,14 @@ namespace Server
|
|||
tiles[x] = new TileList[Height];
|
||||
Tiles[x] = new StaticTile[Height][];
|
||||
|
||||
for (var y = 0; y < Height; ++y) tiles[x][y] = new TileList();
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
tiles[x][y] = new TileList();
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < allTiles.Length; ++i)
|
||||
{
|
||||
if (i == 0 || allTiles[i].Flags != 0)
|
||||
{
|
||||
var xOffset = allTiles[i].OffsetX + Center.m_X;
|
||||
|
|
@ -467,10 +520,15 @@ namespace Server
|
|||
|
||||
tiles[xOffset][yOffset].Add((ushort)itemID, (sbyte)allTiles[i].OffsetZ);
|
||||
}
|
||||
}
|
||||
|
||||
for (var x = 0; x < Width; ++x)
|
||||
{
|
||||
for (var y = 0; y < Height; ++y)
|
||||
{
|
||||
Tiles[x][y] = tiles[x][y].ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MultiComponentList()
|
||||
|
|
@ -514,7 +572,9 @@ namespace Server
|
|||
(TileData.ItemTable[oldTiles[i].ID & TileData.MaxItemValue].Flags & TileFlag.Roof) != 0;
|
||||
|
||||
if (newIsRoof == oldIsRoof)
|
||||
{
|
||||
Remove(oldTiles[i].ID, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -523,7 +583,9 @@ namespace Server
|
|||
var newTiles = new StaticTile[oldTiles.Length + 1];
|
||||
|
||||
for (var i = 0; i < oldTiles.Length; ++i)
|
||||
{
|
||||
newTiles[i] = oldTiles[i];
|
||||
}
|
||||
|
||||
newTiles[oldTiles.Length] = new StaticTile((ushort)itemID, (sbyte)z);
|
||||
|
||||
|
|
@ -533,7 +595,9 @@ namespace Server
|
|||
var newList = new MultiTileEntry[oldList.Length + 1];
|
||||
|
||||
for (var i = 0; i < oldList.Length; ++i)
|
||||
{
|
||||
newList[i] = oldList[i];
|
||||
}
|
||||
|
||||
newList[oldList.Length] = new MultiTileEntry(
|
||||
(ushort)itemID,
|
||||
|
|
@ -546,16 +610,24 @@ namespace Server
|
|||
List = newList;
|
||||
|
||||
if (x < m_Min.m_X)
|
||||
{
|
||||
m_Min.m_X = x;
|
||||
}
|
||||
|
||||
if (y < m_Min.m_Y)
|
||||
{
|
||||
m_Min.m_Y = y;
|
||||
}
|
||||
|
||||
if (x > m_Max.m_X)
|
||||
{
|
||||
m_Max.m_X = x;
|
||||
}
|
||||
|
||||
if (y > m_Max.m_Y)
|
||||
{
|
||||
m_Max.m_Y = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -577,10 +649,14 @@ namespace Server
|
|||
var newTiles = new StaticTile[oldTiles.Length - 1];
|
||||
|
||||
for (var j = 0; j < i; ++j)
|
||||
{
|
||||
newTiles[j] = oldTiles[j];
|
||||
}
|
||||
|
||||
for (var j = i + 1; j < oldTiles.Length; ++j)
|
||||
{
|
||||
newTiles[j - 1] = oldTiles[j];
|
||||
}
|
||||
|
||||
Tiles[vx][vy] = newTiles;
|
||||
|
||||
|
|
@ -600,10 +676,14 @@ namespace Server
|
|||
var newList = new MultiTileEntry[oldList.Length - 1];
|
||||
|
||||
for (var j = 0; j < i; ++j)
|
||||
{
|
||||
newList[j] = oldList[j];
|
||||
}
|
||||
|
||||
for (var j = i + 1; j < oldList.Length; ++j)
|
||||
{
|
||||
newList[j - 1] = oldList[j];
|
||||
}
|
||||
|
||||
List = newList;
|
||||
|
||||
|
|
@ -631,10 +711,14 @@ namespace Server
|
|||
var newTiles = new StaticTile[oldTiles.Length - 1];
|
||||
|
||||
for (var j = 0; j < i; ++j)
|
||||
{
|
||||
newTiles[j] = oldTiles[j];
|
||||
}
|
||||
|
||||
for (var j = i + 1; j < oldTiles.Length; ++j)
|
||||
{
|
||||
newTiles[j - 1] = oldTiles[j];
|
||||
}
|
||||
|
||||
Tiles[vx][vy] = newTiles;
|
||||
|
||||
|
|
@ -654,10 +738,14 @@ namespace Server
|
|||
var newList = new MultiTileEntry[oldList.Length - 1];
|
||||
|
||||
for (var j = 0; j < i; ++j)
|
||||
{
|
||||
newList[j] = oldList[j];
|
||||
}
|
||||
|
||||
for (var j = i + 1; j < oldList.Length; ++j)
|
||||
{
|
||||
newList[j - 1] = oldList[j];
|
||||
}
|
||||
|
||||
List = newList;
|
||||
|
||||
|
|
@ -683,9 +771,13 @@ namespace Server
|
|||
for (var y = 0; y < newHeight; ++y)
|
||||
{
|
||||
if (x < oldWidth && y < oldHeight)
|
||||
{
|
||||
newTiles[x][y] = oldTiles[x][y];
|
||||
}
|
||||
else
|
||||
{
|
||||
newTiles[x][y] = Array.Empty<StaticTile>();
|
||||
}
|
||||
|
||||
totalLength += newTiles[x][y].Length;
|
||||
}
|
||||
|
|
@ -702,6 +794,7 @@ namespace Server
|
|||
var index = 0;
|
||||
|
||||
for (var x = 0; x < newWidth; ++x)
|
||||
{
|
||||
for (var y = 0; y < newHeight; ++y)
|
||||
{
|
||||
var tiles = newTiles[x][y];
|
||||
|
|
@ -714,16 +807,24 @@ namespace Server
|
|||
var vy = y - Center.Y;
|
||||
|
||||
if (vx < m_Min.m_X)
|
||||
{
|
||||
m_Min.m_X = vx;
|
||||
}
|
||||
|
||||
if (vy < m_Min.m_Y)
|
||||
{
|
||||
m_Min.m_Y = vy;
|
||||
}
|
||||
|
||||
if (vx > m_Max.m_X)
|
||||
{
|
||||
m_Max.m_X = vx;
|
||||
}
|
||||
|
||||
if (vy > m_Max.m_Y)
|
||||
{
|
||||
m_Max.m_Y = vy;
|
||||
}
|
||||
|
||||
List[index++] = new MultiTileEntry(
|
||||
(ushort)tile.ID,
|
||||
|
|
@ -734,6 +835,7 @@ namespace Server
|
|||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Serialize(IGenericWriter writer)
|
||||
|
|
@ -771,7 +873,9 @@ namespace Server
|
|||
chunkIds = new Dictionary<ulong, int>();
|
||||
|
||||
for (var i = 0; i < maxId; ++i)
|
||||
{
|
||||
chunkIds[HashLittle2($"build/multicollection/{i:000000}.bin")] = i;
|
||||
}
|
||||
}
|
||||
|
||||
private static ulong HashLittle2(string s)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue