The Matrix Online Server Emulator
Complete list of game items - Printable Version

+- The Matrix Online Server Emulator (//mxoemu.info/forum)
+-- Forum: The Matrix Online (//mxoemu.info/forum/forumdisplay.php?fid=3)
+--- Forum: MxO General Discussion (//mxoemu.info/forum/forumdisplay.php?fid=4)
+--- Thread: Complete list of game items (/showthread.php?tid=1033)



Complete list of game items - Vesuveus - 29-08-2012

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.


RE: Complete list of game items - Vesuveus - 29-08-2012

Ok, i see a project in my future.Smile


RE: Complete list of game items - QuiDormit - 29-08-2012

There is one... somewhere.

It's called the global objects list, I think. It's a .csv. It's posted somewhere around here.


RE: Complete list of game items - rajkosto - 30-08-2012

you can just use goprops i guess
mxoemu.info/goprops.txt


RE: Complete list of game items - Vesuveus - 30-08-2012

Thanks


RE: Complete list of game items - rajkosto - 30-08-2012

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


RE: Complete list of game items - Vesuveus - 14-10-2012

I'll give this a try. I'll post back when I need help

Big Grin


RE: Complete list of game items - Vesuveus - 16-10-2012

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.


RE: Complete list of game items - Static - 16-10-2012

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