Moonlight aims to make NosTale .NET Application developer life easier by giving them access to a complete & easy to use API allowing them to interact with (almost) everything in the game
Moonlight can be used with local client (injected .dll) or remote client (clientless)
- Create a C# .dll project targeting .NET Framework 4.7+
- Add Moonlight as submodule
- Install DllExport to your project and create your export function (cf. DllExport wiki)
- Build your project
- Create database.db using Moonlight.Toolkit CLI
- Copy previously generated database.db to a subfolder named Moonlight in your NosTale folder
- Copy your generated .dll & MoonlightCore to your NosTale folder
- Inject your .dll using an injector supporting custom export function.
Moonlight is a packet based lib, so if you want everything to work correctly using local client, it should be injected before character selection.
Example application can be found here : https://github.com/Roxeez/Moonlight.Example
private async Task BotLoop()
{
while (IsRunning)
{
IEnumerable<Monster> monsters;
Skill zoneSkill;
do
{
zoneSkill = Configuration.UsedSkills.FirstOrDefault(x => !x.IsOnCooldown);
monsters = Client.Character.Map.Monsters
.Where(x => x.Vnum == MonsterConstants.SoftPii)
.Where(x => x.Position.IsInRange(Client.Character.Position, Radius))
.OrderBy(x => x.Position.GetDistance(Client.Character.Position));
Monster closestPod = await GetClosestPod();
if (closestPod == null)
{
return;
}
await Client.Character.Attack(closestPod);
}
while ((monsters.Count() < 10 || zoneSkill == null) && IsRunning);
if (monsters.Count() < 10)
{
return;
}
await Client.Character.UseSkillOn(zoneSkill, monsters.First());
await Task.Delay(100);
}
}
private async Task<Monster> GetClosestPod()
{
Monster pod;
do
{
pod = Client.Character.Map.Monsters
.Where(x => x.Vnum == MonsterConstants.SoftPiiPod)
.Where(x => x.Position.IsInRange(Client.Character.Position, Radius))
.OrderBy(x => x.Position.GetDistance(Client.Character.Position))
.FirstOrDefault();
await Task.Delay(100);
}
while (pod == null && IsRunning);
return pod;
}
- .NET Framework 4.7
- Roxeez
- Pumba98 for helping me with some C++/RE related stuff
This project is licensed under the GPL-3.0 License - see the LICENSE.md file for details