-
Notifications
You must be signed in to change notification settings - Fork 37
Python library for processing EVE Online cache and bulkdata.
License
ntt/reverence
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Reverence - REVERse ENgineered Cache Explorer
Copyright (C)2003-2015 by Jamie "Entity" van den Berge
All rights reserved.
Reverence is an advanced EVE Online cache/bulkdata handling toolkit for Python.
LICENSE
=======
Reverence is distributed under the terms of the BSD license
(see the file LICENSE.txt included with the distribution).
FEATURES
========
- High-performance iterative cache/bulkdata decoder.
- 100% compatibility with all bulkdata, cache and settings files.
- Programmatic access to data tables.
- Transparent loading of bulkdata on accessing tables.
- Simultaneous handling of data from multiple EVE installations/versions.
- Container classes for all data items found in cache and bulkdata.
- Offline RemoteSvc calls, provided the relevant cachefiles exist. Note that
this software DOES NOT interact with the EVE Online client or server.
- EmbedFS (.stuff) file support.
- Various EVE related utility functions and constants.
- Supports localization.
- Supports Download-on-Demand.
REQUIREMENTS
============
- Windows (XP or later) or Linux. (untested on Mac)
- x86/x64 compatible processor.
- Python 2.7 or 2.6.
- PyYAML package
- An EVE Online installation.
Notes:
- A full EVE installation is not required in every case. It is perfectly
acceptable to have only the bulkdata and cache folders in the EVE root.
- On Windows, the location of the cache folder is automatically detected
(in Local AppData, or EVE's root when EVE is normally run with /LUA:OFF).
- On Linux, the EVE installation is assumed to be either a manually copied
install with the cache folder placed inside the EVE root, OR an installation
under WINE. In the latter case, the location of the cache folder is searched
for in the expected location in the ~/.wine dir, based on the root location
specified. If this directory cannot be found, the cache path needs to be
specified with the cachepath keyword when instantiating blue.EVE.
SECURITY WARNING
================
!!! DO NOT DECODE DATA FROM UNTRUSTED SOURCES WITH THIS LIBRARY !!!
The decoder component of this library is basically a glorified cPickle, and
in fact supports embedded python pickles. Decoding maliciously constructed
or erroneous data may compromise your system's security and/or stability.
INSTALLATION
============
Windows users can download an installer here:
https://www.dropbox.com/sh/xd6id81qi6jo0o9/jdAjrZU2wP
Linux users:
Download the source distribution from the same location as above, extract the
contents of the archive, cd to the project directory and run the following:
python setup.py install
USAGE
=====
Most of the stuff that matters has docstrings.
Using the toolkit is fairly easy, here is an example:
>>> from reverence import blue
>>> eve = blue.EVE(pathToEVE)
>>> cfg = eve.getconfigmgr()
You then have access to the associated EVE installation's bulkdata.
Note that you do not need to run EVE for this to work. The toolkit does not
interact with running EVE processes in any way.
For example, to get some basic properties of a raven:
>>> rec = cfg.invtypes.Get(638)
>>> print rec.name, rec.basePrice
Raven 108750000.0
The columns of a table can be obtained through the header attribute:
>>> print cfg.invmetatypes.header
('typeID', 'parentTypeID', 'metaGroupID')
The content of the tables is outside the scope of this document. Please refer
to an EVE Online database dump for more information on the database schema.
Below is a description of the different table types and a list of tables:
IndexRowset - these are simple keyed tables:
Getting a specific record:
>>> rec = cfg.invtypes.Get(638)
Iterating over records (inefficient):
>>> for row in cfg.eveunits:
... print row
...
Row(unitID:1,unitName:Length,displayName:)
Row(unitID:2,unitName:Mass,displayName:kg)
Row(unitID:3,unitName:Time,displayName:sec)
(etc)
Iterating over records (more efficient):
>>> for u, d in cfg.eveunits.Select("unitName", "displayName"):
... print u, d
...
Length
Mass kg
Time sec
(etc)
The following tables are in IndexRowset form:
TABLENAME PRIMARY KEY
--------------------------- ------------------
invcategories categoryID
invgroups groupID
invmetagroups metaGroupID
invtypes typeID
invbptypes blueprintTypeID
dgmattribs attributeID
dgmeffects effectID
evegraphics graphicID
eveunits unitID
eveowners ownerID
evelocations locationID
corptickernames corporationID
allianceshortnames allianceID
ramaltypes assemblyLineTypeID
ramactivities activityID
ramcompletedstatuses completedStatusID
mapcelestialdescriptions celestialID
certificates certificateID
certificaterelationships relationshipID
locationwormholeclasses locationID
FilterRowset - these are accessed as dicts, keyed on the table's "primary key",
and each value is a standard list or an IndexRowset containing the data rows
for the key.
Getting the attributes of a Raven:
>>> for row in cfg.dgmtypeattribs[638]:
... print row.attributeID, row.value
...
Or prettier:
>>> for row in cfg.dgmtypeattribs[638]:
... print cfg.dgmattribs.Get(row.attributeID).attributeName,"=",row.value
...
damage = 0.0
hp = 6641.0
powerOutput = 9500.0
lowSlots = 5.0
(etc)
The following tables are in FilterRowset form:
TABLENAME PRIMARY KEY
--------------------------- ------------------
dgmtypeeffects typeID
dgmtypeattribs typeID
invmetatypes typeID
invreactiontypes reactionTypeID
ramaltypesdetailpercategory assemblyLineTypeID
ramaltypesdetailpergroup assemblyLineTypeID
ramtyperequirements typeID
ramtypematerials typeID
The library supports loading of data in the SharedCache. There are a couple of
ways of doing this. The following example shows the EVE method of loading
the galaxy map hierarchy:
>>> f = blue.ResFile()
>>> f.Open("res:/UI/Shared/Maps/mapcache.dat")
>>> mapcache = blue.marshal.Load(f.Read())
Note that this requires that you have previously instantiated an EVE object,
as the blue module will assume the last instantiated EVE is where you want to
read the .stuff data from.
If you have instantiated multiple EVE objects, you can still access the
.stuff files of any instance by calling the ResFile() of that instance instead
of blue module:
>>> f = eve.ResFile()
A shortcut is also provided for loading data from the .stuff filesystem in a
more friendly manner:
>>> data = eve.readstuff("path goes here")
Reverence can use CCP's Download on Demand servers to acquire files in the
shared resource cache automatically if missing. To make use of this system,
you must provide a valid User-Agent and set the shared cache folder to a
specific location (Do not use EVE's SharedCache location in this case as it
could interfere with your game client's normal operation).
Here's an example:
>>> blue.set_user_agent("TestApplication/1.0")
>>> eve = blue.EVE("X:\EVE", sharedcachepath="X:\EVEResFiles")
It will then download any content required on attempting to access it.
Please do make sure to provide a valid User-Agent for your application.
ACKNOWLEDGEMENTS
================
This product contains code that emulates or copies aspects of the internal API
of EVE Online, with permission from CCP.
Thanks to CCP for granting permission for releasing this product.
EVE Online is a registered trademark of CCP hf.
About
Python library for processing EVE Online cache and bulkdata.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published