Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

151
Ultima/SkillGroups.cs Normal file
View File

@@ -0,0 +1,151 @@
#region References
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
#endregion
namespace Ultima
{
public sealed class SkillGroup
{
public string Name { get; set; }
public SkillGroup(string name)
{
Name = name;
}
}
public sealed class SkillGroups
{
public static List<SkillGroup> List { get; private set; }
public static List<int> SkillList { get; private set; }
private static bool unicode;
static SkillGroups()
{
Initialize();
}
public static void Initialize()
{
string path = Files.GetFilePath("skillgrp.mul");
List = new List<SkillGroup>();
SkillList = new List<int>();
if (path != null)
{
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var bin = new BinaryReader(fs))
{
int start = 4;
int strlen = 17;
int count = bin.ReadInt32();
if (count == -1)
{
unicode = true;
count = bin.ReadInt32();
start *= 2;
strlen *= 2;
}
List.Add(new SkillGroup("Misc"));
for (int i = 0; i < count - 1; ++i)
{
int strbuild;
fs.Seek((start + (i * strlen)), SeekOrigin.Begin);
var builder2 = new StringBuilder(17);
if (unicode)
{
while ((strbuild = bin.ReadInt16()) != 0)
{
builder2.Append((char)strbuild);
}
}
else
{
while ((strbuild = bin.ReadByte()) != 0)
{
builder2.Append((char)strbuild);
}
}
List.Add(new SkillGroup(builder2.ToString()));
}
fs.Seek((start + ((count - 1) * strlen)), SeekOrigin.Begin);
try
{
while (bin.BaseStream.Length != bin.BaseStream.Position)
{
SkillList.Add(bin.ReadInt32());
}
}
catch // just for safety
{ }
}
}
}
}
public static void Save(string path)
{
string mul = Path.Combine(path, "skillgrp.mul");
using (var fs = new FileStream(mul, FileMode.Create, FileAccess.Write, FileShare.Write))
{
using (var bin = new BinaryWriter(fs))
{
if (unicode)
{
bin.Write(-1);
}
bin.Write(List.Count);
foreach (SkillGroup group in List)
{
if (group.Name == "Misc")
{
continue;
}
byte[] name;
if (unicode)
{
name = new byte[34];
}
else
{
name = new byte[17];
}
if (group.Name != null)
{
if (unicode)
{
byte[] bb = Encoding.Unicode.GetBytes(group.Name);
if (bb.Length > 34)
{
Array.Resize(ref bb, 34);
}
bb.CopyTo(name, 0);
}
else
{
byte[] bb = Encoding.Default.GetBytes(group.Name);
if (bb.Length > 17)
{
Array.Resize(ref bb, 17);
}
bb.CopyTo(name, 0);
}
}
bin.Write(name);
}
foreach (int group in SkillList)
{
bin.Write(group);
}
}
}
}
}
}