IDE for database development [Idea, WIP]

I thought about it would be nice to develop an application that displays all creatures and gameobjects in a view (player, custom location)

to make it easier to edit creatures, add sai, edit & add waypoints and more.

Changes should be exported into a sql file to make the changes portable,

multiple editors for various tables should be included as well.

I developed an early example in Java so you can imagine what i’m thinking about:

http://abload.de/img/testsej1d.png

[SIZE=10px](similar screenshot added because imageshack is down - 11.12.2014).[/SIZE]

What do you think about such an IDE. Is it worth it?

If you want to contibute you may send me a PM.

I don’t see the point in this, unless it will be like truice (or quice) or one of the many SAI GUIs already around, but, I did notice one flaw in the source already

authDatabase = new DatabaseConnection("auth"); charDatabase = new DatabaseConnection("char_434"); worldDatabase = new DatabaseConnection("world_434");

Is this the working screenshot? Because it doesn’t really tell me much /emoticons/default_tongue.png

http://i.imagebanana.com/img/odjqk6us/wide.png

All in all it seems like to be very similar to Truice, Event Horizon… but it isn’t.

The basic idea is to support it to edit content through the visual interface (clicking, drag & drop)

and the IDE generates (mainly UPDATE) querys for you.

This can be very useful if you edit waypoints, formations random movement and more.

If we go a step further we can think about to implement multi selection to edit multiple npc in a single step.

I’m just thinking about those 40 npcs that kneel right in front of the last boss in the Stonecore (High Priest Azil).

It was a pain to add the emote to every npc.

Another point is that the existing tools are very limited in their use.

Truice and EventHorizon can only generate DELETE FROM & INSERT querys,

and you always need to readd and adapt the generated querys to your existing changes

because the querys doens’t fit to our current sql standards and are outdated.

All in all such a tool would speedup the whole database develop especially it is needed to develop the complex cataclysm content.

You are sorely misinformed about how content is “developed”

Maybe you may explain what you mean?

Probably my description was misleading,

i don’t want to support the creation of custom content but there is always the need

to edit the world in the way i descriped, even for sniffed content.

And its easier and faster to fix something by clicking instead to write the querys for it.

Are we talking a map overview of all mobs in a given area? That’s what I get from the image + your description.

We are talking about an editor (basically like Truice).

The Main View (like in the screenshot) shows objects (npcs, gobs…) at your current position (ingame bound to a character or a custom location).

Now you can edit those objects by a right-click or something similar.

And after that the tool parses update querys for you (no unnesessary delete/insert querys like Truice or Event Horizon).

Aha! Now I’m starting to like it, but I’m not yet seeing the greater advantage yet. Mind giving some examples or perhaps image drawings showing how you intend it to be when it’s done?

I mentioned long ago that one of the things this project needs is a visual set of tools, like when you edit a map for unreal tournament or doom or whatever, but, I have come to realize that it’s a waste of time as long as we are supporting only official data, however, if we can get TC to the point of being a framework for making your own mmorpg, or whatever, and also come up with either a generic client or set of clients that allow for creating your own game using the TC engine as the basis of your server, then, it would make more sense to have tools for editing things the way this would. to put a finer point on it, the forums are not currently setup to support funservers, only official data… and, official data is not implemented in this way.

As i said before, i only want to target the official content and don’t want to help any custom projects since i personally don’t like it.

Another point that you don’t see is that the data we can get from the official, needs a lot of rework,

sai, formations, addons & phasing for example.

So yes we don’t want to spawn the npcs & gobs by ourself or want to edit the wdb data of templates but maybe we want to add formations, phasing and mainly sai and conditions, because sniffs aren’t correct every time and we can’t retrieve ai actions (sai)

from sniffs because that are tc’s own systems.

So even retail content like quests needs a lot of rework.

If you don’t believe me just take a look at the fresh spawned Mount Hyjal or Azshara in TDB 4.3.4 .

It will take too much time to create example screenshots since i don’t have much time this week.

But i will try to summary the main advandages:

[ul][li]You don’t need to look for the entrys so you can just click through the world[/li][li]You see paths and formations that you can edit.[/li][li]You can create a fix by just clicking arround and set your values (-> good for beginners, faster for intermediate users)[/li][li]Changes are listed in a Property View so you can select and unselect changes, export or query it.[/li][li]All in all the objects are edited through a form that displays all values in the table and translates some fields to flag views, so you don’t need to look at the wiki or the header files each time you change a more complex value or flags.[/li][li]Maybe you can imagine a world editor, a better truice and event horizon but all merged together with better query support so you can just commit the created files.[/li][/ul]
I don’t know in detail how it will look like because i just want to create a helpful tool for everybodys use that increases the development speed.

So if you have any suggestions write it down please.

Would be good to see atleast example how you make something like you mention before:

'I’m just thinking about those 40 npcs that kneel right in front of the last boss in the Stonecore (High Priest Azil)."

Some video is good enought /emoticons/default_smile.png

I like the idea, but please, please for the love of everything that is righteous, don’t make another stand-alone project that will take ages to complete, @Discover- has a cool .NET SAI Editor that you could extend with your idea if you guys worked together, you could also plug it into the already-existing Truice if you don’t like .NET (You’d have to like Delphi, tho), please don’t come up with the cross-platform excuse because .NET can be run on Linux with Mono.

Oh, but, he’s doing it in the second best language there is (PHP being the first, of course) JAVA!

I see the problem in creating another editor but it makes no sense to plug an ide into an existing sai editor since i prefer a scheme free implementation.

So its the best to create a basement where you can plug into with a plugin interface to make it portable (.jar plugins for example).

I don’t see a problem in creating another editor as this is a learning project. Throw in your own idea’s and do your thing. /emoticons/default_smile.png

I’m not going to study Delphi. If I’d work on Truice, that would be converting it to C#.

In the last month i developed further on this framework/tool.
It already includes Database Mapping (targeting wow entities, flags, enums), DBC Storages now.

Source is available at: Github

I changed the main target of this Project from a GUI tool to a framework where an enviroment is provided that allows you to edit database entities.
And in addition a GUI editor based on the framework will follow that include tools like visual dbc viewer, template, addon, condition, sai editor & more.

The storage framework already supports client/ database storages and can handle data correctly,
an [B]output [/B]of the TestScript shows how strong the database mapping system is because we don’t use an open-source mapping framework like hibernate (see flag handling).

[entry=78, name=“Janos Hammerknuckle”, unit_flags=UNIT_FLAG_IMMUNE_TO_PC, UNIT_FLAG_IMMUNE_TO_NPC, unit_class=CLASS_PALADIN(1)]
[entry=79, name=“Narg the Taskmaster”, unit_flags=UNIT_FLAG_UNK_6, unit_class=CLASS_PALADIN(1)]
[entry=89, name=“Infernal”, unit_flags=UNIT_FLAG_UNK_15, unit_class=CLASS_PALADIN(1)]

The SQL output querys (thats where im currently working on) will make heavily use of sql variables like:

SET @SPELL_DEATH_TOUCH := 5;
SET @SPELL_SUICIDE := 7;
SET @SPELL_BLIZZARD := 10;
SET @SPELL_SWIM_SPEED_TEST := 13;

Every time where it is possible that a variable might be used the SQLBuilder will replace magic constants by variables, for example:

SET @MAP_KALIMDOR := 1;

SET @GOB_BLOODTHISTLE := 181166;

SET @NPC_MALORIAK := 41378;

This will make SQL querys clean and easy to read.

Another point is that WIde already includes small tasks called “scripts” that are callable by console.

Good examples for scripts are: hello world, dbc to sql converter, dbc console viewer (already included → printdbc command)
or tasks that require an scripting enviroment to access data stores or where sql querys are too weak.

If you like the idea to build a modular application that will support visual database editing,
an advanced scripting enviroment and amazing clean sql output consider to contribute with pullrequests please.

If you like to contact me because there are questions remaining or you are looking for part to work on the application im on Skype (naios-dev).

First Query parsed today, everything that was needed to produce the query was this little piece of code:

http://abload.de/img/screenshot_27vj4q.png

Output:

SET @CLASS_ROGUE := 2;

SET @NPC_BROG_HAMFIST := 151;
SET @NPC_MALORIAK := 41378;
SET @NPC_QUARTERMASTER_LEWIS := 491;

-- test comment
UPDATE `creature_template` SET `unit_class` = @CLASS_ROGUE WHERE (`entry` = @NPC_BROG_HAMFIST);
UPDATE `creature_template` SET `name` = "blub" WHERE `entry` IN(@NPC_MALORIAK, @NPC_QUARTERMASTER_LEWIS);

Support of flags added. Flags are set relative to the database (it checks for changed flags and add/ removes only changed flags).

http://abload.de/img/screenshot_32pbtm.png

SET @CLASS_ROGUE := 2;

SET @NPC_BROG_HAMFIST := 151;
SET @NPC_MALORIAK := 41378;
SET @NPC_QUARTERMASTER_LEWIS := 491;

SET @UNIT_FLAG_IMMUNE_TO_NPC := 0x200;
SET @UNIT_FLAG_NOT_SELECTABLE := 0x2000000;
SET @UNIT_FLAG_UNK_6 := 0x40;

-- test comment
UPDATE `creature_template` SET `unit_class` = @CLASS_ROGUE WHERE (`entry` = @NPC_BROG_HAMFIST);
UPDATE `creature_template` SET `name` = "blub" WHERE `entry` IN(@NPC_MALORIAK, @NPC_QUARTERMASTER_LEWIS);

/*
 * some flag tests
 * adds some strange flags to maloriak
 * it only updates flags that have changed
 */
UPDATE `creature_template` SET `unit_flags` = (`unit_flags` &~ (@UNIT_FLAG_UNK_6)) | @UNIT_FLAG_IMMUNE_TO_NPC | @UNIT_FLAG_NOT_SELECTABLE WHERE (`entry` = @NPC_MALORIAK);

Insert / Delete querys finished. The Test Script (L221) produces following output now: GIST link

I’m still looking for contributors, if you like the idea and want to help, don’t hesitate to contact me!