first commit

This commit is contained in:
Beyhan Oğur
2026-09-03 04:45:36 +03:00
commit d5f52cc3d3
1038 changed files with 169579 additions and 0 deletions
+275
View File
@@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ClassicAssist.Shared;
using ClassicAssist.UO.Objects;
using Newtonsoft.Json;
namespace ClassicAssist.Data.Regions
{
public class Region
{
public RegionAttributes Attributes { get; set; }
public int Height => Y2 - Y1;
public int Map { get; set; }
public string Name { get; set; }
public int Priority { get; set; }
public int Width => X2 - X1;
public int X1 { get; set; }
public int X2 { get; set; }
public int Y1 { get; set; }
public int Y2 { get; set; }
public override bool Equals( object obj )
{
if ( !( obj is Region region ) )
{
return false;
}
return region.X1 == X1 && region.X2 == X2 && region.Y1 == Y1 && region.Y2 == Y2 && region.Map == Map &&
region.Priority == Priority;
}
protected bool Equals( Region other )
{
return X1 == other.X1 && Y1 == other.Y1 && X2 == other.X2 && Y2 == other.Y2 && Map == other.Map &&
Priority == other.Priority;
}
public override int GetHashCode()
{
unchecked
{
int hashCode = Name != null ? Name.GetHashCode() : 0;
hashCode = ( hashCode * 397 ) ^ X1;
hashCode = ( hashCode * 397 ) ^ Y1;
hashCode = ( hashCode * 397 ) ^ X2;
hashCode = ( hashCode * 397 ) ^ Y2;
hashCode = ( hashCode * 397 ) ^ Map;
hashCode = ( hashCode * 397 ) ^ Priority;
hashCode = ( hashCode * 397 ) ^ (int) Attributes;
return hashCode;
}
}
public override string ToString()
{
return $"{Name} - {Attributes}";
}
}
public class RegionList
{
public List<Region> Regions { get; set; } = new List<Region>();
}
public static class Regions
{
private static readonly Region[] _defaultRegions =
{
new Region
{
X1 = 0,
Y1 = 0,
X2 = 7168,
Y2 = 4096,
Map = 0,
Attributes = RegionAttributes.Wilderness,
Name = "Felucca",
Priority = -1
},
new Region
{
X1 = 0,
Y1 = 0,
X2 = 7168,
Y2 = 4096,
Map = 1,
Attributes = RegionAttributes.Wilderness,
Name = "Trammel",
Priority = -1
},
new Region
{
X1 = 0,
Y1 = 0,
X2 = 2304,
Y2 = 1600,
Map = 2,
Attributes = RegionAttributes.Wilderness,
Name = "Ilshenar",
Priority = -1
},
new Region
{
X1 = 0,
Y1 = 0,
X2 = 2560,
Y2 = 2048,
Map = 3,
Attributes = RegionAttributes.Wilderness,
Name = "Malas",
Priority = -1
},
new Region
{
X1 = 0,
Y1 = 0,
X2 = 1448,
Y2 = 1448,
Map = 4,
Attributes = RegionAttributes.Wilderness,
Name = "Tokuno",
Priority = -1
},
new Region
{
X1 = 0,
Y1 = 0,
X2 = 1280,
Y2 = 4096,
Map = 5,
Attributes = RegionAttributes.Wilderness,
Name = "TerMur",
Priority = -1
},
new Region
{
X1 = 5271,
Y1 = 1159,
X2 = 5311,
Y2 = 1191,
Map = 0,
Attributes = RegionAttributes.Jail,
Name = "Jail",
Priority = byte.MaxValue
},
new Region
{
X1 = 5271,
Y1 = 1159,
X2 = 5311,
Y2 = 1191,
Map = 1,
Attributes = RegionAttributes.Jail,
Name = "Jail",
Priority = byte.MaxValue
},
new Region
{
X1 = 2720,
Y1 = 2089,
X2 = 2726,
Y2 = 2094,
Map = 0,
Attributes = RegionAttributes.Jail,
Name = "OSI Unattended Macroing Jail",
Priority = byte.MaxValue
},
new Region
{
X1 = 2720,
Y1 = 2089,
X2 = 2726,
Y2 = 2094,
Map = 1,
Attributes = RegionAttributes.Jail,
Name = "OSI Unattended Macroing Jail",
Priority = byte.MaxValue
}
};
private static readonly Lazy<List<Region>> _regions = new Lazy<List<Region>>( LoadRegions );
private static List<Region> LoadRegions()
{
JsonSerializer serializer = new JsonSerializer();
using ( StreamReader sr =
new StreamReader( Path.Combine( Engine.StartupPath ?? Environment.CurrentDirectory, "Data",
"Regions.json" ) ) )
{
using ( JsonTextReader reader = new JsonTextReader( sr ) )
{
RegionList regionList = serializer.Deserialize<RegionList>( reader );
if ( regionList != null )
{
return regionList.Regions;
}
}
}
return new List<Region>( _defaultRegions );
}
public static void Add( Region region )
{
if ( !_regions.Value.Contains( region ) )
{
_regions.Value.Add( region );
}
}
public static bool Contains( string name )
{
return _regions.Value.FirstOrDefault( r => r.Name == name ) != null;
}
public static Region GetRegion( PlayerMobile player )
{
return GetRegion( player.X, player.Y, (int) player.Map );
}
public static Region GetRegion( int x, int y, int map )
{
IEnumerable<Region> matching =
_regions.Value.Where( r => x >= r.X1 && y >= r.Y1 && x <= r.X2 && y <= r.Y2 && map == r.Map );
List<Region> list = matching.ToList();
list.Sort( ( r1, r2 ) =>
{
if ( r1.Priority > r2.Priority )
{
return -1;
}
if ( r2.Priority > r1.Priority )
{
return 1;
}
int area1 = r1.Width * r1.Height;
int area2 = r2.Width * r2.Height;
if ( area1 < area2 )
{
return -1;
}
return area1 == area2 ? 0 : 1;
} );
return list.Count == 0 ? null : list[0];
}
public static Region GetRegion( this Entity entity )
{
PlayerMobile player = Engine.Player;
return player == null ? null : GetRegion( entity.X, entity.Y, (int) player.Map );
}
public static void Remove( Region region )
{
if ( _regions.Value.Contains( region ) )
{
_regions.Value.Remove( region );
}
}
}
}
@@ -0,0 +1,17 @@
using System;
namespace ClassicAssist.Data.Regions
{
[Flags]
public enum RegionAttributes
{
None = 0,
Guarded = 1 << 1,
Jail = 1 << 2,
Wilderness = 1 << 3,
Town = 1 << 4,
Dungeon = 1 << 5,
Special = 1 << 6,
Default = 1 << 7
}
}