The Matrix Online Server Emulator

Full Version: Complete list of game items
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
My memory is failing me, but isn't there a list (complete or nearly complete) of items that were in MxO? Can anyone point me in the right direction?

Thanks in advance.
Ok, i see a project in my future.Smile
There is one... somewhere.

It's called the global objects list, I think. It's a .csv. It's posted somewhere around here.
you can just use goprops i guess
mxoemu.info/goprops.txt
Thanks
You can write a script that parses the stringtables and replaces the IDs in that file with the text, for the name and description, if you want
I'll give this a try. I'll post back when I need help

Big Grin
Can anyone point me in the direction of a tutorial for writing such a script?

I actually had trouble viewing that file because it is so large. I also have no idea what all those values are for all those items. It makes me figure that reverse engineering this game is a major job. Another /tiphat.
To make sense of the goprops.txt file, you have to write tons of filters, mostly to try to group objects together, then find all common properties, remove some properties that have no useful information etc.

Here are some of things that I have done:

1. Don't use fullgoprops.txt - it is missing a lot of properties, use the other file goprops.txt, it has all properties.

2. Best language to use for extrating and manipulating data from files is perl. You don't need to write a lot of code to read/write files and its regular expression make it easy to grab data, manipulate it and process it. Perfect for quick and dirty extraction jobs.

I have attached a sample parser I wrote that will read goprop.txt and write out a tab delimited file.

Easy route:

The easiest way would be just to modify the perl script and put specific condition as to which objects and properties to write to a file. Then you could create a ".csv" file and load it into excel.

Hard route:

3. My approach for grouping everything was to create a database, with tables that had following schema:

Code:
(
    ID NUMERIC,
   PROP CHAR(60),
   VAL CHAR(60))
)

ID would be your object number,
PROP would be the property name
VAL value of that property.

Then you could write a query like

SELECT VAL from ALL_TABLE where ID = 12 and PROP = 'objName' which would return you the name of the object

or

SELECT ID from ALL_TABLE where PROP = 'RSIArticleId' which would return you a list of IDs that have property RSIArticleId

Initially I had one table, where I put all the objects. Then I tried to separate objects into groups. For this you would need to write a filter in your script/code to insert the objects into different tables based on your filtering criteria. Clothes for example all have the following property : RSIArticleID. so right away, when you see that property on an object, you know you are working with a clothing object.

I then created similar tables for CODES, ABILITIES, CLOTHING etc and imported only the objects that belong there.

Note : Abilities can be easily detected by the object name, if it ends with Ability, it is an ability.

I think it would be very helpful as well, once you group similar objects together to look at GoCategoryId, as most of the interesting objects are already grouped by the GoCategoryId, there is already a topic in Development section about what each gocategoryId means.

In the end the process is pretty boring and time consuming. Your goal is to keep separating objects, looking for similar properties and try to figure out which ones are useful and which ones are not. You may sometimes have properties that have zeroes for all objects (no variance) which makes them kind of useless to look at.

If you want, I have a hypersql database with all the objects loaded, string table and go categories, so all you need to do is quick setup and then the rest is writing tedious queries and filters.

PS: Also use Notepad++ or Textpad for viewing large files.

Here is a query that I wrote to try to group interesting abilities together:



Code:
select * from (
select
    ID,
    TRIM((select val from ABILITIES where PROP = 'AbilityID' and ID = ab.id))        AS AbilityID,
    TRIM((select val from ABILITIES where PROP = 'objName' and ID = ab.id))          AS NAME,
    TRIM((select val from ABILITIES where PROP = 'GOCategoryID' and ID = ab.id))     AS GO_Category,    
    TRIM((select val from ABILITIES where PROP = 'MemCost' and ID = ab.id))          AS MEM,
    TRIM((select val from ABILITIES where PROP = 'InventoryMemCost' and ID = ab.id)) AS INVENTORY_MEM,
    TRIM((select val from ABILITIES where PROP = 'BufferSize' and ID = ab.id))       AS BUFFER,

    CONVERT(TRIM((select val from ABILITIES where PROP = 'VendorPrice' and ID = ab.id)), INT)      AS COST,
    
                                
    TRIM((select val from ABILITIES where PROP = 'ReqCharLevel' and ID = ab.id))              AS LEV,                                            
    
    TRIM((select val from ABILITIES where PROP = 'ReqAbilityID'    and ID = ab.id))           AS R1,
    TRIM((select val from ABILITIES where PROP = 'objName'         and ID =
         (select val from ABILITIES where prop = 'ReqAbilityID' and ID = ab.id)))             AS R1_NAME,
    (select CONVERT(val, INT) from ABILITIES where PROP = 'ReqAbilityLevel' and ID = ab.id)   AS RL1,
    
    TRIM((select val from ABILITIES where PROP = 'ReqAbilityID 2' and ID = ab.id))            AS R2,
    TRIM((select val from ABILITIES where PROP = 'objName'        and ID =
         (select val from ABILITIES where prop = 'ReqAbilityID 2' and ID = ab.id)))           AS R2_NAME,
    (select CONVERT(val, INT) from ABILITIES where PROP = 'ReqAbilityLevel 2' and ID = ab.id) AS RL2,

    TRIM((select val from ABILITIES where PROP = 'ReqAbilityID 3' and ID = ab.id))            AS R3,
    TRIM((select val from ABILITIES where PROP = 'objName'        and ID =
         (select val from ABILITIES where prop = 'ReqAbilityID 3' and ID = ab.id)))           AS R3_NAME,
    (select CONVERT(val, INT) from ABILITIES where PROP = 'ReqAbilityLevel 3' and ID = ab.id) AS RL3,

    TRIM((select val from ABILITIES where PROP = 'ReqAbilityID 4' and ID = ab.id))  AS R4,
    --TRIM((select str from STRING_TABLE ss where uint32 = (select val from ABILITIES where ID = ab.id and PROP = 'IconID'))) AS IconID,
    TRIM((select str from STRING_TABLE ss where uint32 = (select val from ABILITIES where ID = ab.id and PROP = 'InfoID'))) AS InfoID,
    TRIM((select str from STRING_TABLE ss where uint32 = (select val from ABILITIES where ID = ab.id and PROP = 'AbilityID'))) AS AbilityID,
    TRIM((select str from STRING_TABLE ss where uint32 = (select val from ABILITIES where ID = ab.id and PROP = 'MoreInfoID'))) AS MoreInfoID,
    1 AS END
from
    ABILITIES ab
where prop = 'objName'
/*
and ID not in (2148521984)
and ID not in (select id from ABILITIES where PROP = 'objName' and VAL like 'NPC%')
and ID not in (select id from ABILITIES where PROP = 'OrganizationID')*/
)
order by COST ASC