Page 1 of 1

Accessing global JS object for create DFN entries

Posted: Tue Jun 29, 2021 7:10 pm
by Xuri
This post contains an example of how to access item entries and their properties from the create DFNs via the JS engine.

First, assume that the create DFNs contains an entry defined as such:
[ITEM 7]
{
NAME=gloves
ID=0x13f2
RESOURCE=METAL 10
SKILL=7 120 620
ADDITEM=0x13f2
MINRANK=1
MAXRANK=10
SOUND=0x002A
}
By fetching a reference to a specific create entry from a global JS object (CreateEntries) created for this purpose, similar to how spells can be accessed for the global Spells object, the properties can be accessed from a script like this:
function onUseUnChecked( pUser, iUsed )
{
    // fetch reference to create DFNs entry 7 from global JS object
    var createEntry = CreateEntries[7];

    // Fetch properties of create entry
    var createName = createEntry.name; // name of the create entry
    var addItem = createEntry.addItem; // section header of item to craft
    var sound = createEntry.sound; // sound to play when crafting item
    var delay = createEntry.delay; // how long it takes to craft the item
    var spell = createEntry.spell; // spell requirement to craft the item
    var resources = createEntry.resources; // list of resources needed
    var skills = createEntry.skills; // list of skill requirements
    var avgMinSkill = createEntry.avgMinSkill; // average min skill required to smelt an item
    var avgMaxSkill = createEntry.avgMaxSkill; // average max skill required to smelt an item

    // List out basic create entry properties
    pUser.TextMessage( "Item to craft: " + createName + " (" + addItem + ")" );
    pUser.TextMessage( "Crafting sound: " + sound.toString() + ", Delay: " + delay.toString() );
    pUser.TextMessage( "Average Skill Min/Max: " + avgMinSkill.toString() + "/" + avgMaxSkill.toString() );

    // List out resource requirements
    for( var i = 0; i < resources.length; i++ )
    {
        var resource = resources[i];
        var amountNeeded = resource[0];
        var resourceColour = resource[1];
        var resourceIDs = resource[2];
        var resourcesNeeded = "Amount: " + amountNeeded.toString() + ", Colour: " + resourceColour.toString() + ", resource IDs:";
        for( var j = 0; j < resourceIDs.length; j++ )
        {
            resourcesNeeded += (" " + resourceIDs[j] );
        }
        pUser.TextMessage( resourcesNeeded );
    }

    // List out skill requirements
    for( var i = 0; i < skills.length; i++ )
    {
        var skillReq = skills[i];
        var skillNumber = skillReq[0];
        var minSkill = skillReq[1];
        var maxSkill = skillReq[2];
        var skillRequirements = "SkillNumber: " + skillNumber.toString() + ", minSkill: " + minSkill.toString() + ", maxSkill: " + maxSkill.toString();
        pUser.TextMessage( skillRequirements );
    }
    return false;
}
Output of above TextMessages:
Item to craft: gloves (0x13f2)
Crafting sound: 42, Delay: 0
Average Skill Min/Average Skill Max: 120/620
Amount: 10, Colour: 0, resource IDs: 7154, 7151
SkillNumber: 7, minSkill: 120, maxSkill: 620