1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
using SharpPluginLoader.Core.Memory;
namespace SharpPluginLoader.Core.Entities
{
public class Animal : Entity
{
/// <summary>
/// Gets a list of all animals in the game
/// </summary>
/// <returns></returns>
public static Animal[] GetAllAnimals()
{
lock (_animals) return _animals.ToArray();
}
/// <summary>
/// Constructs a new Animal from a native pointer
/// </summary>
/// <param name="instance">The native pointer</param>
public Animal(nint instance) : base(instance) { }
// @TODO: Map to names.
public int Id => Get<int>(0x1AF8); // +0x294
public int OtherId => Get<int>(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<uGmAnimalCtor>(0x141D285C0, uGmAnimalCtorHook);
_uGmAnimalDestructor = Hook.Create<uGmAnimalDestructor>(0x141D289D0, uGmAnimalDestructorHook);
}
private delegate nint uGmAnimalCtor(nint unknownPtr, int unknownInt);
private delegate nint uGmAnimalDestructor(nint animalObject);
private static Hook<uGmAnimalCtor> _uGmAnimalCtor = null!;
private static Hook<uGmAnimalDestructor> _uGmAnimalDestructor = null!;
private static readonly List<Animal> _animals = [];
}
/// <summary>
/// Represents an animal id
/// </summary>
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
*/
}
}
|