Skip to main content

About

This repository contains code for a python3 library that is capable of editing various DBC files. The library was only tested with 3.3.5a DBCs and a TrinityCore server. If this library dose not fit your use case, please consider using pywowlib. Although pywowlib's README states that reading/writing DBCs is not possible, the features seem to be already implemented.

Instalation

pip install dbcpy

Records

dbcpy dose NOT use WoWDBDefs to parse the DBCs. DBC representations must be added manually, for a list of supported DBCs see records

Adding records

Adding a record is easy. Just pick a copy-paste the definition from here into a python dictionary and define a new dataclass. See this for a reference implementation.

Examples

Modifying an existing items' display_ids (will take ~1 second)
#!/usr/bin/env python3
from dbcpy.dbc_file import DBCFile
from dbcpy.records.item_record import ItemRecord

def change_display_ids(item_record):
    # entry: new_display_id
    new_display_ids = {
        1501: 37388,
        15534: 27083,
    }
    try:
        item_record.display_id = new_display_ids[item_record.entry]
        return item_record
    except KeyError:
        return item_record

if __name__ == '__main__':
    with open('Item.dbc', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, ItemRecord)
        some_item = dbc_file.records.find(873)
        some_item.entry = 56807
        some_item.display_id = 20300
        with open('Item.dbc.new', 'w+b') as ff:
            dbc_file.write_to_file(change_display_ids, ff)

    with open('Item.dbc.new', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, ItemRecord)
        print(dbc_file.records.find(1501).display_id)
        print(dbc_file.records.find(15534).display_id)
Adding a Spell.dbc entry (will take >1 second):
#!/usr/bin/env python3
from dbcpy.dbc_file import DBCFile
from dbcpy.records.spell_record import SpellRecord

if __name__ == '__main__':
    with open('Spell.dbc', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, SpellRecord)
        some_spell = dbc_file.records.find(116)
        some_spell.name.en_us = 'New spell name'
        some_spell.entry = 80865
        dbc_file.records.append(some_spell)

    with open('Spell.dbc', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, SpellRecord)
        the_spell = dbc_file.records.find(80865)
        print(the_spell.name.en_us)
Modyfing an existing spells' names (will take ~30 seconds)
#!/usr/bin/env python3
from dbcpy.dbc_file import DBCFile
from dbcpy.records.spell_record import SpellRecord

def rename_spell(spell_record):
    new_names = {
        8716: 'i love',
        37263: 'long',
        37290: 'discussions',
    }
    try:
        spell_record.name.en_us = new_names[spell_record.entry]
        return spell_record
    except KeyError:
        return spell_record

if __name__ == '__main__':
    with open('Spell.dbc', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, SpellRecord)
        with open('Spell.dbc.new', 'w+b') as ff:
            dbc_file.write_to_file(rename_spell, ff)

    with open('Spell.dbc.new', 'r+b') as f:
        dbc_file = DBCFile.from_file(f, SpellRecord)
        print(dbc_file.records.find(8716).name.en_us)
        print(dbc_file.records.find(37263).name.en_us)
        print(dbc_file.records.find(37290).name.en_us)

Why dose modifying an existing record takes so long?

Well, not always. In order to modify an existing record, we must rewrite the whole DBC file, because of the string block. The SpellRecord is especially large and the RecordReader.read_record method is not suited for reading large records like that. It handles smaller records (like ItemRecord) well enough (~1 second). The simplest fix would be to implement a SpellRecord specific RecordReader.

How to contribute?

  1. Ensure that your commits have meaningful comments
  2. If your contribution is small (e.g it fixes a minor bug) increment revision (the last digit of version) in setup.py
  3. Provide test-cases

Legal Note

World of Warcraft is a registered trademark of Blizzard Entertainment and/or other respective owners. This software is not created by Blizzard Entertainment or its affiliates, and is for purely educational and research purposes. This software is not intended for the use and production of cheating (hacking) software or modifications that can disrupt World of Warcraft's gameplay. It is your sole responsibility to follow copyright law, game's ToS and EULA. The creators hold no responsibility for the consequences of use of this software.

The code is licensed under LGPL 3.0.

Metadata

Release files for dbcpy 1.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dbcpy 1.0.9
File Size Uploaded
dbcpy-1.0.9.tar.gz 12.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dbcpy 1.0.9
File Interpreter ABI Platform
dbcpy-1.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 27.8 kB

Release files / dbcpy-1.0.9.tar.gz

Download URL dbcpy-1.0.9.tar.gz
Size 12.6 kB
Tags Source
SHA-256 checksum
How to use checksums
860366474c74e6206725ba17da9643b0ab73f4998f8ca7d5253e6503458e375b
BLAKE2b-256 checksum
How to use checksums
e7b94e542e73a36ca05c2e05c358cce429a1888286a7a6c41534d9c8197b63f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.4

Release files / dbcpy-1.0.9-py3-none-any.whl

Download URL dbcpy-1.0.9-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
333138aedf948d7ee0569ec6772a9fb5add99fb68cb1e8c0795151dd7cccef5f
BLAKE2b-256 checksum
How to use checksums
b0b183d275a02cc8a15c82da1da652df45848adf921ede80831efb451c503a3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.4

Release history Release notifications | RSS feed

This release

1.0.9 This release

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page