DBEditor:Spells
- Last edited 12 years ago by 192.168.100.1
The Spells Editor needed to be redesigned due to the 48,000 or so spells+tiers we're trying to manage, the old filters weren't displaying enough data, and were confusing. In this revamp, I've basically broken down the spells into "filters" based on SOE's types and classifications system.
Contents
Filter: Lookup
There are two ways to get at the spell data now... one is the Filters listed below, the other is a direct query of the Spell Names via a "Google-like" search suggestion script.
Simply type a few letters of the spell name into the Lookup field, and see the suggestions that are presented.
NOTE: You do not HAVE to use the Suggestions... you can type "Heal" into the box and just press Enter, and all *Heal* related spell names will be displayed.
Filter: Type
The second option is to Filter the data using Type, Classification and Class. When you first select Spells from the menu, you now must pick a "Type" - that being Spell, Art, Ability, Tradeskill or PC Innate --
Once you pick a Type, the Classifications option will appear, for further filtering. Note you do not have to filter further, all data should be available in the Types grid.
Spell Selection Grid
Take note of the information on the Spell Selection Grid:
Spell ID - this is EQ2Emulator's internal ID for the spell The [S], [W] and [Z] icons are shortcuts to SOE Data, Wikia and Zam for the given data row Name - the name of the dataset Description - I thought it might be helpful to see the full description of the spell, since many are named the same Type - this should be the type you selected Classification - More details below about what a Classification is AA - is this entry considered Alternate Advancement? Level - the character level required to use the spell/ability Active - is the spell available to players? Note: Inactive spells will not load at world start time! Last Auto Update - This is the last time we sync'd the entry with soe.data.com
There is now a "Hide" button to hide the spell from the grid. You can recover the hidden spells by selecting the "Show Hidden" checkbox.
You can begin to edit the spell data by clicking the Spell ID value on the left-most column.
Filter: Classification
Classifications are what we're calling the "given_by" data from soe.data.com. This is how the player acquires the spell, so it seemed a fitting category for limiting result sets. The list of Classifications are --
"alternateadvancement" "charactertrait" "class" "classtraining" "race" "racialinnate" "racialtradition" "spellscroll" "tradeskillclass" "warderspell"
Picking a Classification will limit the results even further. In this example, I will pick "race" classification to limit my result set.
As you see, a much more manageable list.
Filter: Class
Not to be confused with classification, Class is the actual player class itself -- Guardian, Templar, etc.
Note: When you select ALL types and ALL Classifications, you MUST pick a Class to filter the data in at least some way.
Observe that this list of Classes also include the Archetype, Class and Subclass options. This is so we can reduce the number of Spells entries in our database if more than 1 class of an Archetype or Class can use the spell. In the above screenshot, you can see the following:
1. The Fighter archetype, which includes 3 classes and 6 subclasses 2. The Warrior class, which includes only the 2 classes of warriors: Guardian and Berserker 3. And finally, the individual player class (subclass) itself
There is one special Class: All. This is a filter to show you all the spells/arts that ALL classes can utilize - and in our EQ2Emulator database, that is signified by the `spell_classes`.`adventure_class_id` = 255, for all classes. This is not a list of ALL spells, so do not be alarmed when you do not see many records. Another term for these might be "Commoner" abilities.
Spells Tab
I have cleaned up the layout of the Spells Editor tabs, making them actual tabs finally (after 5 years
). To enter the Spell Editor screen, click the link on the left-most column which is the EQ2Emulator Spell ID column - in the above example, that would be the number 8018.
You'll see a relatively familiar layout, only the Tabs have changed, and I have re-grouped the data more logically. A brief description of the screen areas --
1. Section Title bar, with shortcuts to SOE and Wikia, and Info and Links field set of read-only data 2. Editable items related to spell "text" 3. Other settings, mostly comboboxes relating to type and skills 4. The same old Appearances section 5. The same old Toggles section, only with added options - is_aa, is_deity, and moved is_active into the toggles 6. Save button 7. Resync items on this tab with SOE API data 8. NEW Re-Indexing (see below) 9. NEW Insert a spell or make a clone of an existing one (currently disabled) 10. NEW Delete a spell record that is no longer needed
Other new buttons not shown on screenshot -
11. NEW Split a spell at it's tier(s) into a new spell 12. NEW Clone a spell to a new spell ID 13. Resync items on this tab with RAW collected spell data
Spell Re-Indexing
The last thing I will cover for now is the Re-Indexing feature, as this will likely be used a lot. It is new, since the SOE data is not always forthcoming with accurate information on classes (they hook spells to player classes differently than we do), I had to come up with a way for you to "move" a spell from one range of ID's to another.
Example would be to move this Fighter spell to a common Abilities type because you realized it's actually a spell EVERYONE can use. So you select Pick destination range --
An ajax lookup is performed to fetch the next-highest spell_id in the "Abilities" range - which is 8000-8999. In this case, it is 8490.
OR, if you discover a spell that is under Fighter that should be Guardian-specific, you can move it to the Class by chosing Pick destination class --
Since Guardians are Class ID 3, and the spell range is thus 3 * 10,000, or 30,000 - 39,999, the ajax lookup finds the next highest spell ID to be 30276.
You then click the "Re-Index" button and the script moves the spell, cleaning up the player and other associated tables to the new ID, then drops you in the editor at the new spell_id.
Tiers Tab
The Tiers tab should be pre-populated with all known (SOE) tiers for each spell/ability. If there are no tiers defined, then SOE didn't have one (which is unlikely). You can insert/delete tiers here, or update existing ones since most SOE feeds do not contain the details we need to make spells work 100%.
SOE Sync
Pushing the SOE button will update the current tier with known SOE API data, which is not all the fields but most. The rest have to be manually entered, but mostly I find that "call_frequency" is the biggest one I have to touch. The SOE button not only checks the Spells collection, but does a query on Items for that spell's book data to get things like Range and Resistibility.
You can update each tier individually to carefully monitor you are getting the correct data. Also note that there are no Tier 1 "books", so to get Tier 1 Range/Resist, you simply have to click any of the Apprentice tiers and the script will update all 3 Apprentice tiers at once.
Data Tab
The Data Tab is where you configure the parameter data to be passed to the LUA script. This data is unavailable via any means from collected packets or SOE API, so I chose to parse the Spell Display Effects text as a solution. Alternatively, you can just use INSERT to add new rows as you see fit, if there is no data to parse.
Parse Data
Short video demonstrating Data Parsing
Clicking the Parse Data button will launch a new UI window, and a quick attempt to parse the Spell Display Effects text is displayed in Tier-by-tier format. An example of how parsing works, say the Tier 1 Effect is:
Interrupts Target Inflicts 9 - 12 mental damage on target
The display will find the 9, the 12, and the "mental" which gets converted to the damageTypeID (6) defined in EQ2Emu. You are presented with the following choices:
Things to note here: The parser found nothing to do with Interrupt Target, so that row does not need to be inserted. However, notice it found Mental, 9 and 12. Click Submit on Tier 1's submit button and refresh the Data tab, you will see your data inserted. This is all you need for this example spell, since you will hard-code Interrupt() as a function in the script.
Effects Tab
You generally do not have to do anything with this tab, except maybe fix the values displayed if they are not correct for any reason. This data comes directly from SOE API, and should reflect accurate game data.
Classes Tab
Classes are also derived from the SOE API - though in rare cases they are not very accurate (like all Fighter classes getting Summon Tamed Gator). The SOE API parser attempts to identify spells that ALL archetypes can use, and assign them to the archetype spell_id range (ie., if all 6 fighter classes can use Fighting Chance, it is not set with 6 classes, but 1 Fighter (base) class).
This is not critical, and only necessary to reduce the data redundancy in the database. The spells will work just fine if all 6 classes per archetype are configured.
Script Tab
This is the in-place, live LUA script editor. When you save changes here, they are written directly to the folders of the EQ2 DB Project server for immediate [reload and] testing. They are also marked for submission to the eq2content SVN in the weekly update.
You may use external LUA editors and paste the final script into this dialog, or if you are scripting your own server you can simply drop the LUA file into the proper folder for your world.
HOWEVER: In order for the LUA script to be attached to the Spell, you need to save/relink it on this dialog.
Re-Link
This button shows up if the LUA script exists on the drive, but is not linked to the spell in the database. Re-linking merely writes the path to the lua_script field in the spells table.
Rebuild
When spells were first migrated from Raw Data, I had pre-built a bunch of scripts based on what I felt I would need. After nuking that spell set for a new one, the definitions changed - requiring the designer to "Re-link" the current (old) script with the new spell data.
However, I am finding some of the REALLY old spell scripts (from 2008-2011) are way out of date, and it's a pain to go delete then from the test server and SVN, so I give you a Rebuild button. What this does is replace the current script with an empty one that just has the spell effects comments for building your spell LUA. Example of a Rebuild spell script:
Here you see a Rebuild spell script, which also looks just like a brand new script (if it was not found in the folders). You can now start building your spell LUA script.
Templates
I am freakish about automating things -- part of my career spanning 20 years
I hate redundant tasks when it's simple to script, or automate, something. That is what Script Templates are.
Refer to the picture above, to the right are a number of buttons, each labeled with a function or LUA call they can insert into the body of the current script. For example, in our Rebuild script I know I need 3 - 6 melee damage as well as a taunt component. I will start by clicking on the Damage button:
Note the "cast" block that was inserted, because most of the time my damage has a Type, a Min and Max value. So the damage component is done without typing anything additional! The only thing I have to add now is the Taunt component, which is a simple AddHate() line I can easily type into the cast block.
Other Cast types include adding control effects, spell bonuses, a heal and DoT function, etc. Mostly these got added because I got tired of typing.
In some spells, when the spell duration runs out, the effect is removed. Note there are a few "remove" template choices, mostly just Spell Bonus and Control Effect right now, because that's what I find I am using the most.
Lastly, there are some Misc options; a Say(Caster, "Blah") in case you want to simply insert something random... and a Not Implemented button. I recommend we insert this Not Implemented say statement in places where we cannot finish a spell without server functionality being added. This will keep us constantly aware we need to finish some coding.
AA Spell Tab
The AA Spell tab is new, and merely a quick lookup of the SOE API data for the AA. Currently it is read-only, but if it is determined we have to change this data, I will add updaters.
Trait Tab
Still in the design mode, the Trait tab appears when the current spell is classified as a "charactertrait" or "racialinnate". This is just a rough guess right now until we understand the data better, but basically what this screen is for is Inserting new or Updating existing tiers for Traits so they load properly and can be displayed on the Character Development tab in-game.
Here you see the trait "Attentive" is in the DB, but has no spell_traits configured. Without these entries, this trait will not appear. So in the case of new ones, we simply click Insert (you can also set up the other parameters, class, race, group, etc at insert). If one already exists, you can modify the values and Update.
Conclusion
Any spell configured MUST BE SET TO "is_active" OR IT WILL NOT BE LOADED BY EQ2World.exe!!! Just remember this when you are done, to set this flag on your way out
I'm hoping to make the editor handle more tasks automatically in the future, so we're not doing so much work manually. This is the first step. Also, at the time of this writing, the Spells tab is the only one re-designed - the other tabs still function as they did before.
Happy Spell Writing




