Skip to content
This repository has been archived by the owner on Jul 11, 2020. It is now read-only.
/ Moonlight Public archive

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

License

Notifications You must be signed in to change notification settings

Roxeez/Moonlight

Repository files navigation

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)

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.

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

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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages