PDA

View Full Version : SWEL: Module Checker



Ikael
November 8th, 2017, 20:19
Savage Worlds Enhanced Library (SWEL) is community extension that provides several features creating and validating modules.
This introduction is about the validation part. It's recommended for all Savage Worlds content developers to validate your
product/conversion with the SWEL tool to identify possible issues in your work.

SWEL module checker is able to identify and report issues regarding links and record data in the module.

Installation

Download the SWEL extension (SW Enhanced Library_vX_Y.ext) from Fantasy Grounds forums (direct link (https://www.fantasygrounds.com/forums/showthread.php?19202-Savage-Worlds-Enhancement-Extensions&p=152731&viewfull=1#post152731) to the thread)
Put the .ext file into your Fantasy Grounds Application Data's extensions folder
Remove any previous/older version from the folder, you can identify the version from extension's file name
When you next time start Fantasy Grounds application you should find "SW Enhanced Library" entry in the FG's extensions list in launcher view; enable the extension
After campaign is loaded you can check that the extension is enabled by using /version command in chat; you should see the extension listed in extensions section

Usage, basics

Launch Savage Worlds campaign with SWEL extension
Open "Options" view

From "Enhanced Library" category set suitable check level in "Module Checker: Data" and "Module Checker: Links" options. By default these are on, but you can set each to either strict mode or to off. Strict mode will reveal all possible issue findings, which might be just unnecessary data but would not break anything


Open "Data Module Activation" view

Load module that you want to check and right click on it and select "Check Module"


You will get issue report in two ways:

Printed directly to chat
Text based report is wrote to your clipboard memory. To see the text based report, after module check is performed open your favorite text editor and in the text input area select "Paste" (or use CTRL+v)



Report output, basics
Report contains following information:

General information about the module

Name of the module
How many databasenodes it contains
How many of the database nodes are without actual value (could be removed to save disk space)


To which other modules your module is dependent (you have linked content that points to other module's data)
What windowclass definitions are used in your module
Link issues

Broken and suspicious link definitions, see further posts below


Data issues

Skills, Edges, Hindrances, Abilities, Gear and NPC attack & power data related issues, see further posts below



Tips & hints

If you get link issues and your module is dependent on other modules, make sure to load all dependent modules and re-run the check! Unloaded dependent module links are identified as broken!
You can perform module check from Library view as well; right click any loaded module from Library view and select "Check Module"
You can perform multiple module checking with slashcommand: /modules check

The command will check all currently loaded module
Issue report is only written into your clipboard memory; in chat you will only see note when the check is finished
Warning: if you use strict data checking level, be sure not to check too many modules at once or FG might run out of memory; in that case close and restart FG

Ikael
November 8th, 2017, 20:20
Link issues
Detailed information about the link issue report

Link [Node: XXX]: No [class] defined
The link does not contain windowclass definition and is a broken link

XXX marks the database path of the broken link in your module


Link [Node: XXX]: No [recordname] defined
The link does not contain recordname definition and is a broken link

XXX marks the database path of the broken link in your module


Link [Node: XXX]: No content [Recordname: YYY]
The link points to either non-existent or empty content. You need to update the link definitions. This issue might raise if checked module is linked to use other module which is not loaded in. Load all required modules and re-run the check!

XXX marks the database path of the broken link in your module
YYY marks the recordname that is used in the link

Link [Node: XXX]: Deprecated class [ZZZ]
The link is defined to have windowclass which is deprecated and should be replaced with new version.


XXX marks the database path of the link in your module
ZZZ is the deprecated windowclass defined in the link

In case of "mundaneitem" you should replace it with "item"
In case of "localreference" you should replace it with the most suitable one: "sw_referenceskill" (Skills) or "sw_referencefeat" (Edges, Hindrances and Special abilities)



Link [Node: XXX]: Suspicious class [ZZZ]
The link is defined to have windowclass which does not exist and should be replaced with actual existing windowclass


XXX marks the database path of the suspicious link in your module
ZZZ is the windowclass defined in the link


Record table source [Node: XXX]: No value
You have malformed reference_categorisedlist windowclass in you module. It either lacks source definition or it is empty

XXX marks the database path of the reference_categorisedlist definition in your module

To fix the issue, make sure that <source type="string">ZZZ</source> exists in the definition, where

ZZZ is the database path to record items


Record table source [Node: XXX]: No content [Recordname: YYY]
You have malformed reference_categorisedlist windowclass in you module. The source value points to database path which has no content


XXX marks the database path of the reference_categorisedlist definition in your module
YYY marks the recordname that is used in the source

To fix the issue, make sure that source definition points to existing database path

Record table source [Node: XXX]: Records could not be checked
You have malformed reference_categorisedlist windowclass in you module. Because of the source issue, list's records could not be checked properly


XXX marks the database path of the reference_categorisedlist definition in your module

Ikael
November 8th, 2017, 20:21
Data issues, part 1
Detailed information about the data issue report

Attacks

[YYY][ZZZ] Attack [Node: XXX]: No [traitype] defined
NPC's attack does not have required traittype definition.

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <traittype type="string">AAA</traittype> definition to attack

AAA is string representation of the trait type; one of the following:

Melee
Ranged
Thrown
Arcane
Bomb
Attack that is not associated to any trait type should have <traittype type="string"/> information




[YYY][ZZZ] Attack [Node: XXX]: No [armorpiercing] defined
NPC's attack does not have required armor piercing information although it is mentioned in notes


XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <armorpiercing type="number">AAA</armorpiercing> definition to attack

AAA is numeric armor piercing value


[YYY][ZZZ] Attack [Node: XXX]: No [damage] defined
NPC's attack does not have required string representation of damage information although damage dices are set

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <damage type="string">AAA</damage> definition to attack

AAA is string representation of the damage, such as Str+d6



[YYY][ZZZ] Attack [Node: XXX]: No [range] defined
NPC's attack does not have required range information although it is mentioned in notes

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <range type="string">AAA</range> definition to attack

AAA is string representation of the range, such as 10/20/40


[YYY][ZZZ] Attack [Node: XXX]: No [rof] defined
NPC's attack does not have required rate of fire information although it is mentioned in notes

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <rof type="string">AAA</rof> definition to attack

AAA is string representation of the rate of fire


[YYY][ZZZ] Attack [Node: XXX]: No [reach] defined
NPC's attack does not have required reach information although it is mentioned in notes

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <reach type="number">AAA</reach> definition to attack

AAA is numeric representation of the reach


[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [type], Use [traittype] instead
NPC's attack has deprecated type information which should be replaced with traittype

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, replace <type type="number"> information with corresponding <traittype type="string">AAA</traittype>

type=0 should be replaced with <traittype type="string">Melee</traittype>
type=1 should be replaced with <traittype type="string">Ranged</traittype>
type=3 should be replaced with <traittype type="string">Thrown</traittype>


[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [weaponnotes], Use [notes] instead
NPC's attack has deprecated weaponnotes information which should be replaced with notes

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, replace <weaponnotes type="string"> information with <notes type="string">

[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [wpweight], Use [weight] instead
NPC's attack has deprecated wpweight information which should be replaced with weight

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, replace <wpweight type="number"> information with <weight type="number">

[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [type], Remove it
NPC's attack has deprecated information that can be removed. Remove <type type="number"> information

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name


[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [weaponnotes], Remove it
NPC's attack has deprecated information that can be removed. Remove <weaponnotes type="string"> information

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name


[YYY][ZZZ] Attack [Node: XXX]: Deprecated data [wpweight]. Remove it
NPC's attack has deprecated information that can be removed. Remove <wpweight type="number"> information

XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name


[YYY][ZZZ] Attack [Node: XXX]: No [name] defined
NPC's attack does not have required name information


XXX marks the attack's databasenode path in your module
YYY is NPC's name
ZZZ is NPC attack's name

To fix the issue, add <name type="string">AAA</name> definition to attack

AAA is attack's name


Powers

[YYY][ZZZ] Power [Node: XXX]: No [traitype] defined
NPC's power does not have required traittype definition.

XXX marks the power's databasenode path in your module
YYY is NPC's name
ZZZ is NPC power's name

To fix the issue, add <traittype type="string">Arcane</traittype> definition to power
[YYY][ZZZ] Power [Node: XXX]: No [damage] defined
NPC's power does not have required string representation of damage information although damage dices are set

XXX marks the power's databasenode path in your module
YYY is NPC's name
ZZZ is NPC power's name

To fix the issue, add <damage type="string">AAA</damage> definition to power

AAA is string representation of the damage, such as Str+d6


[YYY][ZZZ] Power [Node: XXX]: Deprecated data [type], Use [traittype] instead
NPC's power has deprecated type information which should be replaced with traittype

XXX marks the power's databasenode path in your module
YYY is NPC's name
ZZZ is NPC power's name

To fix the issue, replace <type type="number"> information with corresponding <traittype type="string">AAA</traittype>

type=0 should be replaced with <traittype type="string">Melee</traittype>
type=1 should be replaced with <traittype type="string">Ranged</traittype>
type=3 should be replaced with <traittype type="string">Thrown</traittype>


[YYY][ZZZ] Power [Node: XXX]: Deprecated data [type], Remove it
NPC's power has deprecated information that can be removed. Remove <type type="number"> information

XXX marks the power's databasenode path in your module
YYY is NPC's name
ZZZ is NPC power's name


[YYY][ZZZ] Power [Node: XXX]: No [name] defined
NPC's power does not have required name information


XXX marks the power's databasenode path in your module
YYY is NPC's name
ZZZ is NPC power's name

To fix the issue, add <name type="string">AAA</name> definition to power

AAA is power's name

Ikael
November 30th, 2017, 20:55
Data issues, part 2
Detailed information about the data issue report

Skills

[YYY][ZZZ] Skill [Node: XXX]: Deprecated data [skillname], Use [name] instead
Skill has deprecated skillname information which should be replaced with name


XXX marks the skill's databasenode path in your module
YYY is skill owner's name
ZZZ is skill's name

To fix the issue, replace <skillname type="string"> information with <name type="string">

[YYY][ZZZ] Skill [Node: XXX]: Deprecated data [skillname], Remove it
Skill has deprecated information that can be removed. Remove <skillname type="name"> information


XXX marks the skill's databasenode path in your module
YYY is skill owner's name
ZZZ is skill's name


[YYY][ZZZ] Skill [Node: XXX]: No [name] defined
Skill does not have required name information


XXX marks the skill's databasenode path in your module
YYY is skill owner's name
ZZZ is skill's name

To fix the issue, add <name type="string">AAA</name> definition to skill


AAA is skill's name


Abilities (Edges, Hindrances, Special Abilities)

[YYY][ZZZ] Ability [Node: XXX]: Deprecated data [abilityname], Use [name] instead
Ability has deprecated abilityname information which should be replaced with name

XXX marks the ability's databasenode path in your module
YYY is ability owner's name
ZZZ is ability's name

To fix the issue, replace <abilityname type="string"> information with <name type="string">

[YYY][ZZZ] Ability [Node: XXX]: Deprecated data [abilitydescription], Use [description] instead
Ability has deprecated abilitydescription information which should be replaced with name

XXX marks the ability's databasenode path in your module
YYY is ability owner's name
ZZZ is ability's name

To fix the issue, replace <abilitydescription type="string"> information with <description type="string">

[YYY][ZZZ] Ability [Node: XXX]: Deprecated data [abilityname], Remove it
Ability has deprecated information that can be removed. Remove <abilityname type="name"> information

XXX marks the ability's databasenode path in your module
YYY is ability owner's name
ZZZ is ability's name


[YYY][ZZZ] Ability [Node: XXX]: Deprecated data [abilitydescription], Remove it
Ability has deprecated information that can be removed. Remove <abilitydescription type="name"> information

XXX marks the ability's databasenode path in your module
YYY is ability owner's name
ZZZ is ability's name


[YYY][ZZZ] Ability [Node: XXX]: No [name] defined
Ability does not have required name information

XXX marks the ability's databasenode path in your module
YYY is ability owner's name
ZZZ is ability's name

To fix the issue, add <name type="string">AAA</name> definition to ability

AAA is ability's name

Ikael
December 20th, 2017, 22:35
Data issues, part 3
Detailed information about the data issue report

Gear

todo...