|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Development::Tools 3rd Party Tools for EQEMu (DB management tools, front ends, etc...) |
|
|
|
06-04-2010, 04:54 AM
|
Sarnak
|
|
Join Date: Mar 2010
Posts: 38
|
|
Null Spell Editor
Greetings,
I started building this just as a clone of the Ailia & Bleh Editor (the GUI layout is almost identical) with a few minor changes to fit my needs. It kept evolving over a few months of work off and on to the point that I didn't feel embarrassed at the thought of releasing it. So here it is!
Screenshots
File Loading
Spell Editing
Features:
- Supports read/write directly from a Database or spells_us.txt (Titanium or SoF/SoD) and allows you to write back and forth between the two.
- Write the entire contents of the spell data in your editor to the database or only the spells that you have changed.
- Parses (Most) drop down values directly from spdat.h and skills.h which can be loaded directly from the SVN or locally. This means that you can select custom spell effects in your source directly in the editor or have them automatically updated as the project gets updated.
- The search field updates the spell list in real-time with search filters. You can also select that it only displays changes that you have made since the last save.
- Revert a single spell or the entire spell file back to the last save.
- Copy and Delete spells. Copied spells are appended to the bottom of the spell list and marks it as a new spell.
- Optional Spell Effect videos (thanks George!) that play in editor. Spell Effect videos that are added to the videos directory are automatically loaded in, so you can fill in missing videos yourself or replace existing ones.
- Icon Preview for new_icon field.
Install Directions- Download either NullSpellEdit.7z or NullSpellEdit_no_video.7z if you do not care about the videos.
- Extract its contents somewhere on your computer.
- If you want to access files remotely (like on the SVN) then run trustfall.bat which will add a security exception to your flash player for the directory that trustfall.bat is run from. This is entirely optional.
- Run NullSpellEditor.html and enjoy!
Known Issues- Spell Data loaded from the database will always write to a spells_us.txt as SoF format.
- A full database write takes a very long time...go get a sandwich long for SoF based files.
- Stock Everquest spell files that are loaded and then saved without any changes are slightly different then they started. This is because some values in the original files (mainly the SoF file) have blank entries. I replace these blanks with zeros if the value is a integer, but it shouldn't break your spell file.
Disclaimer
I have tested this pretty heavily but I do not guarantee that it wont hiccup or even explode. Please make backups before using this, and please post here if you have any problems.
|
|
|
|
06-04-2010, 05:33 AM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
Wow, that looks pretty amazing! Nice work and thanks for sharing that
I have your first bug report though; I am unable to load the skills.h file by browsing locally. It just seems to ignore it, or maybe it is loading for the spdat.h file instead when I try to load skills.h. The spdat.h file seems to load fine though. Also, the spell file itself loads fine.
It's awesome you set it to be that flexible as well as for it to be able to automatically adapt for the future.
EDIT: Another bug seems to be that it will not connect to my database either. I created a new user to test it out, and verified I could connect with that new user via Navicat, but your tool just times out.
Last edited by trevius; 06-04-2010 at 07:54 AM..
|
06-04-2010, 10:36 AM
|
Forum Guide
|
|
Join Date: Sep 2003
Location: California
Posts: 1,474
|
|
Just ran it briefly this morning, and it works very nicely.
You did a good job on incorporating the movies and editing in one package, and my hat is off to you - good job.
GeorgeS
|
06-04-2010, 11:06 AM
|
|
Demi-God
|
|
Join Date: May 2007
Location: b
Posts: 1,447
|
|
I stickied the thread for the time being. Haven't checked it out but it sounds nice from what is described here.
|
|
|
|
06-04-2010, 12:56 PM
|
Sarnak
|
|
Join Date: Mar 2010
Posts: 38
|
|
Thanks for the comments and I hope you get some good use out of it.
Quote:
Originally Posted by trevius
I have your first bug report though; I am unable to load the skills.h file by browsing locally. It just seems to ignore it, or maybe it is loading for the spdat.h file instead when I try to load skills.h. The spdat.h file seems to load fine though. Also, the spell file itself loads fine.
|
After you try to locally load all 3 files does the submit button still light up despite it saying that the skills.h file is needed? I might have just forgot to set the status for that file on a local load.
Quote:
EDIT: Another bug seems to be that it will not connect to my database either. I created a new user to test it out, and verified I could connect with that new user via Navicat, but your tool just times out.
|
Did you try running trustfall.bat? Is the database localhost or are you accessing it remotely? I am thinking it is either a flash sandbox issue (trustfall.bat will resolve this) or that my timeout is a little too militant for a remote database connect.
|
|
|
|
06-05-2010, 01:10 AM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
Yeah, the DB is on another PC on my LAN. I was finally able to get it all working by using IE instead of Firefox. I may still need to mess around with the Firefox settings to get it working properly. Either way, the tool is pretty impressive
|
06-05-2010, 02:10 AM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Wow this is very impressive. Thank you so much for this!
|
06-05-2010, 02:25 AM
|
Sarnak
|
|
Join Date: Mar 2010
Posts: 38
|
|
I fixed the local skills.h load and put up a new version, enjoy!
|
07-24-2010, 01:45 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Very very great editor once again. I do have one request though. An option to select a spell a reassign it to an id that is free of the lowest number (for the sake of Titanium clients). For example I weeded out spells that don't need to be used by us, but to be able to auto snap a new spell to a ID that is the lowest in the free range without conflicting and playing a guessing game would be awesome. Thanks tons Null!
|
07-24-2010, 05:39 PM
|
Sarnak
|
|
Join Date: Mar 2010
Posts: 38
|
|
v1.3
I have a new version up. If you pull your spdat.h from google code then you will need to use this version to get your pull downs populated correctly.
Changes- Updated the parsing for spdat.h on the latest enum formatting for google code. This change should work with the old way of formatting, so dont worry about your custom/outdated local files throwing up.
- Added 'Set to Lowest ID' to the Spells menu. This will move a spell file to the lowest possible unused ID. It works with revert so that if you accidentally press it or otherwise decide the old id was better, you can send it back. Thanks Akkadius for this idea.
- Did some minor text changes so that fields were a little more descriptive.
Download Links
Null Spell Editor v1.3
Null Spell Editor v1.3 (No Videos)
Enjoy the new build, and let me know if you have any issues or requests!
|
09-18-2010, 02:44 PM
|
|
Discordant
|
|
Join Date: Mar 2009
Location: Ottawa
Posts: 495
|
|
The problem with that insert query is 'range' is a reserved word in mysql 5.something (is for me using 5.1.41 anyway). If you quote your column names with ` , you can specify the column name.
It's failing for me, not sure if it's due to that reason though. I tell it to do a full write to the database and it pauses for 10 seconds or so then appears to finish, but the table just gets truncated. No error messages.
|
09-21-2010, 01:39 PM
|
Sarnak
|
|
Join Date: Mar 2010
Posts: 38
|
|
I don't remember what version of MySQL I am using at home, but so far it has not had an issue with the range field.
Typically it breaks when a field in the database gets renamed, I keep meaning to fix it so people don't need to wait for me to get around to fixing it every time this happens but I'm slammed at the moment time wise. If I could get blind inserts working this wouldn't be a problem, but I cant seem to get them to play nice.
I thought I added error checking for that insert (what version are you using?) but I might have missed one.
Either way, can you give me a dump of your database fields so I can check them against what I am targeting in code?
|
|
|
|
09-21-2010, 05:33 PM
|
|
Discordant
|
|
Join Date: Mar 2009
Location: Ottawa
Posts: 495
|
|
Quote:
Originally Posted by Null
I don't remember what version of MySQL I am using at home, but so far it has not had an issue with the range field.
Typically it breaks when a field in the database gets renamed, I keep meaning to fix it so people don't need to wait for me to get around to fixing it every time this happens but I'm slammed at the moment time wise. If I could get blind inserts working this wouldn't be a problem, but I cant seem to get them to play nice.
I thought I added error checking for that insert (what version are you using?) but I might have missed one.
Either way, can you give me a dump of your database fields so I can check them against what I am targeting in code?
|
I'm using 1.3, and it does have the error checking for that query, at least it tells you there's an error and doesn't just break.
Here's the table:
Code:
mysql> show columns in spells_new;
+----------------------+--------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+------------+-------+
| id | int(11) | NO | PRI | 0 | |
| name | varchar(64) | YES | | NULL | |
| player_1 | varchar(64) | YES | | BLUE_TRAIL | |
| teleport_zone | varchar(64) | YES | | NULL | |
| you_cast | varchar(120) | YES | | NULL | |
| other_casts | varchar(120) | YES | | NULL | |
| cast_on_you | varchar(120) | YES | | NULL | |
| cast_on_other | varchar(120) | YES | | NULL | |
| spell_fades | varchar(120) | YES | | NULL | |
| range | int(11) | NO | | 100 | |
| aoerange | int(11) | NO | | 0 | |
| pushback | int(11) | NO | | 0 | |
| pushup | int(11) | NO | | 0 | |
| cast_time | int(11) | NO | | 0 | |
| recovery_time | int(11) | NO | | 0 | |
| recast_time | int(11) | NO | | 0 | |
| buffdurationformula | int(11) | NO | | 7 | |
| buffduration | int(11) | NO | | 65 | |
| AEDuration | int(11) | NO | | 0 | |
| mana | int(11) | NO | | 0 | |
| effect_base_value1 | int(11) | NO | | 100 | |
| effect_base_value2 | int(11) | NO | | 0 | |
| effect_base_value3 | int(11) | NO | | 0 | |
| effect_base_value4 | int(11) | NO | | 0 | |
| effect_base_value5 | int(11) | NO | | 0 | |
| effect_base_value6 | int(11) | NO | | 0 | |
| effect_base_value7 | int(11) | NO | | 0 | |
| effect_base_value8 | int(11) | NO | | 0 | |
| effect_base_value9 | int(11) | NO | | 0 | |
| effect_base_value10 | int(11) | NO | | 0 | |
| effect_base_value11 | int(11) | NO | | 0 | |
| effect_base_value12 | int(11) | NO | | 0 | |
| effect_limit_value1 | int(11) | NO | | 0 | |
| effect_limit_value2 | int(11) | NO | | 0 | |
| effect_limit_value3 | int(11) | NO | | 0 | |
| effect_limit_value4 | int(11) | NO | | 0 | |
| effect_limit_value5 | int(11) | NO | | 0 | |
| effect_limit_value6 | int(11) | NO | | 0 | |
| effect_limit_value7 | int(11) | NO | | 0 | |
| effect_limit_value8 | int(11) | NO | | 0 | |
| effect_limit_value9 | int(11) | NO | | 0 | |
| effect_limit_value10 | int(11) | NO | | 0 | |
| effect_limit_value11 | int(11) | NO | | 0 | |
| effect_limit_value12 | int(11) | NO | | 0 | |
| max1 | int(11) | NO | | 0 | |
| max2 | int(11) | NO | | 0 | |
| max3 | int(11) | NO | | 0 | |
| max4 | int(11) | NO | | 0 | |
| max5 | int(11) | NO | | 0 | |
| max6 | int(11) | NO | | 0 | |
| max7 | int(11) | NO | | 0 | |
| max8 | int(11) | NO | | 0 | |
| max9 | int(11) | NO | | 0 | |
| max10 | int(11) | NO | | 0 | |
| max11 | int(11) | NO | | 0 | |
| max12 | int(11) | NO | | 0 | |
| icon | int(11) | NO | | 0 | |
| memicon | int(11) | NO | | 0 | |
| components1 | int(11) | NO | | -1 | |
| components2 | int(11) | NO | | -1 | |
| components3 | int(11) | NO | | -1 | |
| components4 | int(11) | NO | | -1 | |
| component_counts1 | int(11) | NO | | 1 | |
| component_counts2 | int(11) | NO | | 1 | |
| component_counts3 | int(11) | NO | | 1 | |
| component_counts4 | int(11) | NO | | 1 | |
| NoexpendReagent1 | int(11) | NO | | -1 | |
| NoexpendReagent2 | int(11) | NO | | -1 | |
| NoexpendReagent3 | int(11) | NO | | -1 | |
| NoexpendReagent4 | int(11) | NO | | -1 | |
| formula1 | int(11) | NO | | 100 | |
| formula2 | int(11) | NO | | 100 | |
| formula3 | int(11) | NO | | 100 | |
| formula4 | int(11) | NO | | 100 | |
| formula5 | int(11) | NO | | 100 | |
| formula6 | int(11) | NO | | 100 | |
| formula7 | int(11) | NO | | 100 | |
| formula8 | int(11) | NO | | 100 | |
| formula9 | int(11) | NO | | 100 | |
| formula10 | int(11) | NO | | 100 | |
| formula11 | int(11) | NO | | 100 | |
| formula12 | int(11) | NO | | 100 | |
| LightType | int(11) | NO | | 0 | |
| goodEffect | int(11) | NO | | 0 | |
| Activated | int(11) | NO | | 0 | |
| resisttype | int(11) | NO | | 0 | |
| effectid1 | int(11) | NO | | 254 | |
| effectid2 | int(11) | NO | | 254 | |
| effectid3 | int(11) | NO | | 254 | |
| effectid4 | int(11) | NO | | 254 | |
| effectid5 | int(11) | NO | | 254 | |
| effectid6 | int(11) | NO | | 254 | |
| effectid7 | int(11) | NO | | 254 | |
| effectid8 | int(11) | NO | | 254 | |
| effectid9 | int(11) | NO | | 254 | |
| effectid10 | int(11) | NO | | 254 | |
| effectid11 | int(11) | NO | | 254 | |
| effectid12 | int(11) | NO | | 254 | |
| targettype | int(11) | NO | | 2 | |
| basediff | int(11) | NO | | 0 | |
| skill | int(11) | NO | | 98 | |
| zonetype | int(11) | NO | | -1 | |
| EnvironmentType | int(11) | NO | | 0 | |
| TimeOfDay | int(11) | NO | | 0 | |
| classes1 | int(11) | NO | | 255 | |
| classes2 | int(11) | NO | | 255 | |
| classes3 | int(11) | NO | | 255 | |
| classes4 | int(11) | NO | | 255 | |
| classes5 | int(11) | NO | | 255 | |
| classes6 | int(11) | NO | | 255 | |
| classes7 | int(11) | NO | | 255 | |
| classes8 | int(11) | NO | | 255 | |
| classes9 | int(11) | NO | | 255 | |
| classes10 | int(11) | NO | | 255 | |
| classes11 | int(11) | NO | | 255 | |
| classes12 | int(11) | NO | | 255 | |
| classes13 | int(11) | NO | | 255 | |
| classes14 | int(11) | NO | | 255 | |
| classes15 | int(11) | NO | | 255 | |
| classes16 | int(11) | NO | | 255 | |
| CastingAnim | int(11) | NO | | 44 | |
| TargetAnim | int(11) | NO | | 13 | |
| TravelType | int(11) | NO | | 0 | |
| SpellAffectIndex | int(11) | NO | | -1 | |
| field124 | int(11) | NO | | 0 | |
| field125 | int(11) | NO | | 0 | |
| deities1 | int(11) | NO | | 0 | |
| deities2 | int(11) | NO | | 0 | |
| deities3 | int(11) | NO | | 0 | |
| deities4 | int(11) | NO | | 0 | |
| deities5 | int(11) | NO | | 0 | |
| deities6 | int(11) | NO | | 0 | |
| deities7 | int(11) | NO | | 0 | |
| deities8 | int(11) | NO | | 0 | |
| deities9 | int(11) | NO | | 0 | |
| deities10 | int(11) | NO | | 0 | |
| deities11 | int(11) | NO | | 0 | |
| deities12 | int(12) | NO | | 0 | |
| deities13 | int(11) | NO | | 0 | |
| deities14 | int(11) | NO | | 0 | |
| deities15 | int(11) | NO | | 0 | |
| deities16 | int(11) | NO | | 0 | |
| field142 | int(11) | NO | | 100 | |
| field143 | int(11) | NO | | 0 | |
| new_icon | int(11) | NO | | 161 | |
| spellanim | int(11) | NO | | 0 | |
| uninterruptable | int(11) | NO | | 0 | |
| ResistDiff | int(11) | NO | | -150 | |
| dot_stacking_exempt | int(11) | NO | | 0 | |
| deleteable | int(11) | NO | | 0 | |
| RecourseLink | int(11) | NO | | 0 | |
| field151 | int(11) | NO | | 0 | |
| field152 | int(11) | NO | | 0 | |
| field153 | int(11) | NO | | 0 | |
| short_buff_box | int(11) | NO | | -1 | |
| descnum | int(11) | NO | | 0 | |
| typedescnum | int(11) | YES | | NULL | |
| effectdescnum | int(11) | YES | | NULL | |
| field158 | int(11) | YES | | NULL | |
| field159 | int(11) | NO | | 0 | |
| field160 | int(11) | NO | | 0 | |
| field161 | int(11) | NO | | 0 | |
| bonushate | int(11) | NO | | 0 | |
| field163 | int(11) | NO | | 100 | |
| field164 | int(11) | NO | | -150 | |
| field165 | int(11) | NO | | 0 | |
| EndurCost | int(11) | NO | | 0 | |
| EndurTimerIndex | int(11) | NO | | 0 | |
| field168 | int(11) | NO | | 0 | |
| field169 | int(11) | NO | | 0 | |
| field170 | int(11) | NO | | 0 | |
| field171 | int(11) | NO | | 0 | |
| field172 | int(11) | NO | | 0 | |
| HateAdded | int(11) | NO | | 0 | |
| EndurUpkeep | int(11) | NO | | 0 | |
| field175 | int(11) | YES | | NULL | |
| numhits | int(11) | NO | | 0 | |
| pvpresistbase | int(11) | NO | | -150 | |
| pvpresistcalc | int(11) | NO | | 100 | |
| pvpresistcap | int(11) | NO | | -150 | |
| spell_category | int(11) | NO | | -99 | |
| field181 | int(11) | NO | | 7 | |
| field182 | int(11) | NO | | 65 | |
| field183 | int(11) | NO | | 0 | |
| field184 | int(11) | NO | | 0 | |
| can_mgb | int(11) | NO | | 0 | |
| nodispell | int(11) | NO | | -1 | |
| npc_category | int(11) | NO | | 0 | |
| npc_usefulness | int(11) | NO | | 0 | |
| field189 | int(11) | NO | | 0 | |
| field190 | int(11) | NO | | 0 | |
| field191 | int(11) | NO | | 0 | |
| field192 | int(11) | NO | | 0 | |
| nimbuseffect | int(11) | YES | | 0 | |
| field194 | int(11) | NO | | 0 | |
| field195 | int(11) | NO | | 0 | |
| field196 | int(11) | NO | | 0 | |
| field197 | int(11) | NO | | 0 | |
| field198 | int(11) | NO | | 0 | |
| field199 | int(11) | NO | | 1 | |
| field200 | int(11) | NO | | 0 | |
| field201 | int(11) | NO | | 0 | |
| field202 | int(11) | NO | | 0 | |
| field203 | int(11) | YES | | 0 | |
| field204 | int(11) | YES | | 0 | |
| field205 | int(11) | YES | | 0 | |
| field206 | int(11) | YES | | -1 | |
| spellgroup | int(11) | YES | | 0 | |
| field208 | int(11) | YES | | 0 | |
| field209 | int(11) | YES | | 0 | |
| field210 | int(11) | YES | | 1 | |
| field211 | int(11) | YES | | 0 | |
| allowrest | int(11) | YES | | 0 | |
| field213 | int(11) | YES | | 1 | |
| field214 | int(11) | YES | | 1 | |
+----------------------+--------------+------+-----+------------+-------+
215 rows in set (0.02 sec)
|
|
|
|
|
|
|
09-21-2010, 05:35 PM
|
|
Discordant
|
|
Join Date: Mar 2009
Location: Ottawa
Posts: 495
|
|
And here's the error reported by the editor:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'range, aoerange, pushback, pushup, cast_time, recovery_time, recast_time, buffdu' at line 1
When I put backticks (`) around 'range' from the query you posted earlier in this thread, it works.
edit: also, not exactly sure what you mean by blind inserts, but if I use
Code:
mysql> insert into blind values (1,'test','test',1);
Query OK, 1 row affected (0.24 sec)
with table
Code:
mysql> show columns in blind;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| col1 | varchar(45) | NO | | NULL | |
| col2 | varchar(45) | NO | | NULL | |
| col3 | int(10) unsigned | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
It works fine.
Code:
mysql> select * from blind;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
| 1 | test | test | 1 |
+----+------+------+------+
1 row in set (0.00 sec)
There's probably a better way to auto insert the index, though.
|
|
|
|
10-07-2010, 07:29 PM
|
Sarnak
|
|
Join Date: Jul 2010
Posts: 35
|
|
any word on this error? Im trying 1.3 and I get that range error msg before i can even get in and edit something. I get the msg on starting screen when i hit use spellfile from database. Also get the error if i load from local spell file and then try to write full to database.
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 12:20 AM.
|
|
|
|
|
|
|
|
|
|
|
|
|