| namespace SilkroadBot.Domain.Models; |
|
|
| |
| |
| |
| public record struct WorldPosition(short RegionId, float X, float Y, float Z) |
| { |
| public double DistanceTo(WorldPosition other) |
| { |
| if (RegionId != other.RegionId) return double.MaxValue; |
| var dx = X - other.X; |
| var dy = Y - other.Y; |
| var dz = Z - other.Z; |
| return Math.Sqrt(dx * dx + dy * dy + dz * dz); |
| } |
|
|
| public override string ToString() => $"[{RegionId}] ({X:F1}, {Y:F1}, {Z:F1})"; |
| } |
|
|
| |
| |
| |
| public class GameEntity |
| { |
| public uint UniqueId { get; set; } |
| public uint ModelId { get; set; } |
| public string Name { get; set; } = string.Empty; |
| public WorldPosition Position { get; set; } |
| public int Level { get; set; } |
| public bool IsAlive { get; set; } = true; |
| public EntityType Type { get; set; } |
| } |
|
|
| public enum EntityType |
| { |
| Player, |
| NPC, |
| Monster, |
| Pet, |
| Item, |
| Structure |
| } |
|
|
| |
| |
| |
| public class CharacterState |
| { |
| public string Name { get; set; } = string.Empty; |
| public int Level { get; set; } |
| public long Experience { get; set; } |
| public long MaxExperience { get; set; } |
| public int HP { get; set; } |
| public int MaxHP { get; set; } |
| public int MP { get; set; } |
| public int MaxMP { get; set; } |
| public WorldPosition Position { get; set; } |
| public uint Gold { get; set; } |
| public int SkillPoints { get; set; } |
| public int StatPoints { get; set; } |
| public byte Speed { get; set; } |
| public bool IsInCombat { get; set; } |
| public bool IsDead => HP <= 0; |
| |
| public double HPPercentage => MaxHP > 0 ? (double)HP / MaxHP * 100 : 0; |
| public double MPPercentage => MaxMP > 0 ? (double)MP / MaxMP * 100 : 0; |
| } |
|
|
| |
| |
| |
| public class InventoryItem |
| { |
| public byte Slot { get; set; } |
| public uint ItemId { get; set; } |
| public string Name { get; set; } = string.Empty; |
| public ushort Quantity { get; set; } |
| public byte Enhancement { get; set; } |
| public Enums.InventorySlot SlotType { get; set; } |
| } |
|
|
| |
| |
| |
| public class Skill |
| { |
| public uint SkillId { get; set; } |
| public string Name { get; set; } = string.Empty; |
| public byte Level { get; set; } |
| public bool IsPassive { get; set; } |
| public int CooldownMs { get; set; } |
| public DateTime LastUsed { get; set; } = DateTime.MinValue; |
| |
| public bool IsOnCooldown => (DateTime.UtcNow - LastUsed).TotalMilliseconds < CooldownMs; |
| } |
|
|
| |
| |
| |
| public class PartyMember |
| { |
| public uint UniqueId { get; set; } |
| public string Name { get; set; } = string.Empty; |
| public int Level { get; set; } |
| public int HP { get; set; } |
| public int MaxHP { get; set; } |
| public WorldPosition Position { get; set; } |
| } |
|
|