SkillAgentSearch skills...

Moonlight

Moonlight is made for easily create .NET application for NosTale using an easy to use API.

Install / Use

/learn @Roxeez/Moonlight
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Moonlight

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) <br><br> Codacy grade AppVeyor AppVeyor tests GitHub commit activity GitHub

Getting Started

  • 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.

<sub><sup>Moonlight is a packet based lib, so if you want everything to work correctly using local client, it should be injected before character selection.</sub></sup>

Example

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;
}

Prerequisites

  • .NET Framework 4.7

Contributors

  • Roxeez

Special thanks

  • Pumba98 for helping me with some C++/RE related stuff

License

This project is licensed under the GPL-3.0 License - see the LICENSE.md file for details

Related Skills

View on GitHub
GitHub Stars12
CategoryDevelopment
Updated8mo ago
Forks4

Languages

C#

Security Score

87/100

Audited on Aug 1, 2025

No findings