using SharpPluginLoader.Core.Memory;
namespace SharpPluginLoader.Core.Entities
{
public class Animal : Entity
{
///
/// Gets a list of all animals in the game
///
///
public static Animal[] GetAllAnimals()
{
lock (_animals) return _animals.ToArray();
}
///
/// Constructs a new Animal from a native pointer
///
/// The native pointer
public Animal(nint instance) : base(instance) { }
// @TODO: Map to names.
public int Id => Get(0x1AF8); // +0x294
public int OtherId => Get(0x1AF0);
private static nint uGmAnimalCtorHook(nint unknownPtr, int unknownInt)
{
nint animalObject = _uGmAnimalCtor.Original(unknownPtr, unknownInt);
lock (_animals) _animals.Add(new Animal(animalObject));
return animalObject;
}
private static nint uGmAnimalDestructorHook(nint animalObject)
{
lock(_animals)
{
for (int i = 0; i < _animals.Count; i++)
{
if (_animals[i].Instance == animalObject)
{
_animals.RemoveAt(i);
break;
}
}
}
return _uGmAnimalDestructor.Original(animalObject);
}
internal static void Initialize()
{
_uGmAnimalCtor = Hook.Create(0x141D285C0, uGmAnimalCtorHook);
_uGmAnimalDestructor = Hook.Create(0x141D289D0, uGmAnimalDestructorHook);
}
private delegate nint uGmAnimalCtor(nint unknownPtr, int unknownInt);
private delegate nint uGmAnimalDestructor(nint animalObject);
private static Hook _uGmAnimalCtor = null!;
private static Hook _uGmAnimalDestructor = null!;
private static readonly List _animals = [];
}
///
/// Represents an animal id
///
public enum AnimalType : uint
{
/*
Shepherd Hare = 1,
Pilot Hare = 1,
Woodland Pteryx = 2,
Forest Pteryx = 2,
Cobalt Flutterfly = 3,
Phantom Flutterfly = 3,
Climbing Joyperch = 4,
Forest Gekko = 5,
Wildspire Gekko = 5,
Gloom Gekko = 5,
Moonlight Gekko = 5,
Vaporonid = 6,
Scavantula = 6,
Revolture = 7,
Blissbill = 7,
Stonebill = 7,
Omenfly = 8,
Augurfly = 8,
Scalebat = 9,
Gold Scalebat = 9,
Dung Beetle = 10,
Bomb Beetle = 10,
Rime Beetle = 10,
Pink Parexus = 11,
Great Pink Parexus = 11,
Burst Arowana = 12,
Bomb Arowana = 12,
Great Burst Arowana = 12,
Great Bomb Arowana = 12,
Elegant Coralbird = 13,
Dapper Coralbird = 13,
Andangler = 14,
Downy Crake = 15,
Bristly Crake = 15,
Hopguppy = 16,
Petricanths = 17,
Paratoad = 18,
Sleeptoad = 18,
Nitrotoad = 18,
Wiggler = 19,
Wiggler Queen = 19,
Vigorwasp = 20,
Giant Vigorwasp = 20,
Flying Meduso = 21,
Carrier Ant = 22,
Hercudrome = 23,
Gold Hercudrome = 23,
Prism Hercudrome = 23,
Emperor Hopper = 24,
Tyrant Hopper = 24,
Flashfly = 25,
羽虫 = 26,
ハエ = 27,
ハチ = 28,
蛍 = 29,
Grandfather Mantagrell = 30,
Iron Helmcrab = 31,
Soldier Helmcrab = 31,
Emerald Helmcrab = 31,
Gold Helmcrab = 31,
Shiny Gold Helmcrab = 31,
苦蟲 = 32,
光蟲 = 32,
不死蟲 = 32,
雷光蟲 = 32,
佳餚蟲 = 32,
Whetfish = 33,
Great Whetfish = 33,
Gastronome Tuna = 34,
Great Gastronome Tuna = 34,
King Marlin = 35,
Great King Marlin = 35,
楔虫 = 36,
Goldenfish = 37,
Platinumfish = 37,
Great Goldenfish = 37,
Great Platinumfish = 37,
Goldenfry = 38,
Great Goldenfry = 38,
Sushifish = 39,
Great Sushifish = 39,
Gunpowderfish = 40,
Great Gunpowderfish = 40,
Copper Calappa = 41,
Gold Calappa = 41,
Tsuchinoko = 42,
Cactuar = 43,
Cactuar Cutting = 43,
Flowering Cactuar Cutting = 43,
Nekker = 44,
Pearlspring Macaque = 50,
Goldspring Macaque = 50,
Crowned Prawn = 51,
Moon Slug = 52,
Duffel Penguin = 53,
Arrowhead Gekko = 54,
Blue Diva = 55,
Sealord's Crestfish = 56,
Glass Parexus = 57,
Great Glass Parexus = 57,
Wintermoon Nettle = 58,
Moly = 59,
Mossy Moly = 59,
Rocky Moly = 59,
Fluffy Moly = 59,
Spiny Moly = 59,
Rowdy Moly = 59,
Frosty Moly = 59
*/
}
}