DEK file format

From LOTR-TCG Wiki
Revision as of 06:58, 5 August 2020 by imported>IstariBot (IstariBot mass importing articles from the old DokuWiki instance.)

DEK File Format

The *.dek file format is used by the LackeyCCG program. Lackey is not a LotR-TCG-specific program, but rather a general program geared towards TCG/CCG games in general, and just so happens to have a LotR-TCG plugin. Like the SdA *.dck format, *.dek is XML. Unlike SdA's attempt, however, Lackey is organized very well with support for differentiating cards of the same title between different sets, as well as various meta information.

This comes at a cost, however, as Lackey has a complete reliance on card names; there is no support for any ID lookup. There is also no validation whatsoever on card quantities, etc due to its nature of generic CCG emulator.

A sample deck is given below:

<?xml version====="1.0" encoding====="ISO-8859-1"?> <!DOCTYPE deck SYSTEM "http://www.lackeyccg.com/deck.!dtd"> <deck version====="0.8">

 <meta>
   <title></title>
   <author></author>
   <email></email>
   <date></date>
   <game></game>
   <format></format>
   <note></note>
 </meta>
 <superzone name====="Deck">
   <card>
     <name id====="LOTR01311">Sam, Son of Hamfast</name>
     <set>Fellowship</set>
   </card>
   <card>
     <name id====="LOTR00013">Legolas, Greenleaf (P)</name>
     <set>Promotional</set>
   </card>
   <card>
     <name id====="LOTR06040">Gollum, Old Villain</name>
     <set>EntsOfFangorn</set>
   </card>
   <card>
     <name id====="LOTR06040">Gollum, Old Villain</name>
     <set>EntsOfFangorn</set>
   </card>
 </superzone>
 <superzone name====="Sites">
   <card>
     <name id====="LOTR07329">Dunharrow Plateau</name>
     <set>ReturnOfTheKing</set>
   </card>
 </superzone>
 <superzone name====="Starting">
   <card>
     <name id====="LOTR05111">Frodo, Master of the Precious</name>
     <set>BattleOfHelmsDeep</set>
   </card>
   <card>
     <name id====="LOTR07002">The One Ring, Such a Weight to Carry</name>
     <set>ReturnOfTheKing</set>
   </card>
 </superzone>

</deck>

As a quick reference, here is a walkthrough of the tags used:

deck

Root container for the entire file. Version always seems to be 0.8.

meta

Information about the deck's creation. Older files include all of the entries with empty text, newer files only contain entries that have been defined.

title

Name of the deck.

author

Original author of the deck.

email

Contact info for the author.

date

Date originally created.

game

Always "lotr" when defined.

format

Describes the tournament format this deck follows.

note

Any miscellaneous information.

superzone

Superzones are major sections of a deck; in the case of the LotR-TCG, the "name" attribute of the superzones can be one of: Deck, Sites, or Starting. Deck contains both Free Peoples and Shadow cards, Sites contains the adventure deck, and Starting contains the ring-bearer and the one ring.

card

Contained within superzones, each card is listed individually. The sub-tags are below:

name

Unlike the SdA *.dck format, the name is entirely how the card is identified, including the suffix (such as "(P)") if it has one. Names also do not have any accent marks. In fact, all the names are taken from [spreadsheet here], so reference that when in doubt.

An optional attribute of "id" can be included. This ID is not the collector's info, but the name of the card's image used by Lackey. It is in the format of "LOTRSSNNN", where SS is the zero-filled set number, and NNN is the zero-filled card number. For instance, The One Ring, Isildur's Bane has an ID of "LOTR01001". Tengwar cards have a T on the end as well.

set

The set is the name of the set the card comes from, and is used to disambiguate cards with the same title/subtitle. The format is CamelCaseSetNameWithNoSpacesOrPunctuation, for instance, ReturnOfTheKing or AgesEnd or TreacheryAndDeceit.

electronic platform table


Debug data:
  • Start request GET /index.php?oldid=223&title=DEK_file_format
    IP: 216.73.217.93
    HTTP HEADERS:
    X-FORWARDED-FOR: 216.73.217.93
    HOST: localhost:1450
    CONNECTION: close
    ACCEPT: */*
    USER-AGENT: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
    ACCEPT-ENCODING: gzip, br, zstd, deflate
    (end headers)
  • [session] SessionManager using store APCUBagOStuff
  • [localisation] LocalisationCache using store LCStoreCDB
  • [session] SessionBackend "124r60n18pvb377u5boao689lkht0325" is unsaved, marking dirty in constructor
  • [session] SessionBackend "124r60n18pvb377u5boao689lkht0325" save: dataDirty=1 metaDirty=1 forcePersist=0
  • [cookie] already deleted setcookie: "wiki_db_session", "", "1746307192", "/", "", "", "1", ""
  • [cookie] already deleted setcookie: "wiki_dbUserID", "", "1746307192", "/", "", "", "1", ""
  • [cookie] already deleted setcookie: "wiki_dbToken", "", "1746307192", "/", "", "", "1", ""
  • [cookie] already deleted setcookie: "forceHTTPS", "", "1746307192", "/", "", "", "1", ""
  • [session] SessionBackend "124r60n18pvb377u5boao689lkht0325" data dirty due to dirty(): MediaWiki\Session\SessionManager->getSessionForRequest/MediaWiki\Session\SessionManager->getInitialSession/MediaWiki\Session\Session->getToken/MediaWiki\Session\Session->set/MediaWiki\Session\SessionBackend->dirty
  • [session] SessionBackend "124r60n18pvb377u5boao689lkht0325" save: dataDirty=1 metaDirty=0 forcePersist=0
  • [error] [7dea948f419e82f827c23d90] /index.php?oldid=223&title=DEK_file_format PHP Deprecated: Use of PrefixSearchBackend hook (used in TitleKey::prefixSearchBackend) was deprecated in MediaWiki 1.27. [Called from MediaWiki\HookContainer\HookContainer::register]
  • [rdbms] Wikimedia\Rdbms\DatabaseMySQL::open [0s] wiki_db: SET group_concat_max_len = 262144, `sql_mode` = ''
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reallyOpenConnection: opened new connection for 0/wiki_db
  • [rdbms] Wikimedia\Rdbms\Database::beginIfImplied (MediaWiki\Revision\RevisionStore::fetchRevisionRowFromConds) [0s] wiki_db: BEGIN
  • [rdbms] MediaWiki\Revision\RevisionStore::fetchRevisionRowFromConds [0.001s] wiki_db: SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,actor_rev_user.actor_user AS `rev_user`,actor_rev_user.actor_name AS `rev_user_text`,rev_actor,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `revision` JOIN `actor` `actor_rev_user` ON ((actor_rev_user.actor_id = rev_actor)) JOIN `comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = rev_comment_id)) JOIN `page` ON ((page_id = rev_page)) LEFT JOIN `user` ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE rev_id = 223 LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] WikiPage::pageData [0.001s] wiki_db: SELECT page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model FROM `page` WHERE page_namespace = 0 AND page_title = 'DEK_file_format' LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::fetchRevisionRowFromConds [0.001s] wiki_db: SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,actor_rev_user.actor_user AS `rev_user`,actor_rev_user.actor_name AS `rev_user_text`,rev_actor,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `revision` JOIN `actor` `actor_rev_user` ON ((actor_rev_user.actor_id = rev_actor)) JOIN `comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = rev_comment_id)) JOIN `page` ON ((page_id = rev_page)) LEFT JOIN `user` ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE rev_id = 36601 LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::loadSlotRecordsFromDb [0.001s] wiki_db: SELECT slot_revision_id,slot_content_id,slot_origin,slot_role_id,content_size,content_sha1,content_address,content_model FROM `slots` JOIN `content` ON ((slot_content_id = content_id)) WHERE slot_revision_id = 36601
  • ParserFactory: using default preprocessor
  • [ContentHandler] Registered handler for wikitext: WikitextContentHandler
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::fetchRevisionRowFromConds [0.001s] wiki_db: SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,actor_rev_user.actor_user AS `rev_user`,actor_rev_user.actor_name AS `rev_user_text`,rev_actor,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `revision` JOIN `actor` `actor_rev_user` ON ((actor_rev_user.actor_id = rev_actor)) JOIN `comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = rev_comment_id)) JOIN `page` ON ((page_id = rev_page)) LEFT JOIN `user` ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE rev_id = 223 LIMIT 1
  • [MessageCache] MessageCache using store APCUBagOStuff
  • [MessageCache] MessageCache::loadUnguarded: Loading en... local cache is empty, got from global cache
  • Unstubbing $wgLang on call of $wgLang::getDatePreferenceMigrationMap from Language->internalUserTimeAndDate
  • [localisation] LocalisationCache::loadCoreData: got localisation for en from source
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::getRelativeRevision [0.001s] wiki_db: SELECT rev_id FROM `revision` IGNORE INDEX (rev_timestamp) WHERE rev_page = 50 AND (rev_timestamp < '20200805065806' OR (rev_timestamp = '20200805065806' AND (rev_id < 223))) ORDER BY rev_timestamp DESC,rev_id DESC LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::fetchRevisionRowFromConds [0.001s] wiki_db: SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,actor_rev_user.actor_user AS `rev_user`,actor_rev_user.actor_name AS `rev_user_text`,rev_actor,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `revision` JOIN `actor` `actor_rev_user` ON ((actor_rev_user.actor_id = rev_actor)) JOIN `comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = rev_comment_id)) JOIN `page` ON ((page_id = rev_page)) LEFT JOIN `user` ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE rev_id = 222 LIMIT 1
  • [ParserCache] Creating ParserCache instance for pcache
  • [ParserCache] Creating RevisionOutputCache instance for rcache
  • Article::generateContentOutput: doing uncached parse
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Revision\RevisionStore::loadSlotRecordsFromDb [0.001s] wiki_db: SELECT slot_revision_id,slot_content_id,slot_origin,slot_role_id,content_size,content_sha1,content_address,content_model FROM `slots` JOIN `content` ON ((slot_content_id = content_id)) WHERE slot_revision_id = 223
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Storage\SqlBlobStore::fetchBlobs [0.001s] wiki_db: SELECT old_id,old_text,old_flags FROM `text` WHERE old_id = 219
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Page\PageStore::getPageByNameViaLinkCache [0.001s] wiki_db: SELECT page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_touched,page_links_updated,page_latest,page_len,page_content_model FROM `page` WHERE page_namespace = 0 AND page_title = 'electronic_platform_table' LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Page\PageStore::getPageByNameViaLinkCache [0.001s] wiki_db: SELECT page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_touched,page_links_updated,page_latest,page_len,page_content_model FROM `page` WHERE page_namespace = 4 AND page_title = 'Main' LIMIT 1
  • ContextSource::getContext (MediaWiki\Skin\Timeless\SkinTimeless): called and $context is null. Using RequestContext::getMain()
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Page\PageProps::getProperties [0.001s] wiki_db: SELECT pp_page,pp_propname,pp_value FROM `page_props` WHERE pp_page = 50 AND pp_propname = 'templatedata'
  • [SQLBagOStuff] MainObjectStash using store ReplicatedBagOStuff
  • [rdbms] MediaWiki::preOutputCommit [0s] wiki_db: COMMIT
  • MediaWiki::preOutputCommit: primary transaction round committed
  • [DeferredUpdates] DeferredUpdates::run: started MWCallableUpdate_WikiPage->doViewUpdates #930
  • [DeferredUpdates] DeferredUpdates::run: ended MWCallableUpdate_WikiPage->doViewUpdates #930, processing time: 0.00015592575073242
  • MediaWiki::preOutputCommit: pre-send deferred updates completed
  • MediaWiki::preOutputCommit: session changes committed
  • [rdbms] Wikimedia\Rdbms\ChronologyProtector::persistSessionReplicationPositions: no primary positions data to save
  • [rdbms] Wikimedia\Rdbms\LBFactory::shutdown: finished ChronologyProtector shutdown
  • [rdbms] LBFactory shutdown completed
  • MediaWiki\Output\OutputPage::haveCacheVaryCookies: no cache-varying cookies found
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] Wikimedia\Rdbms\Database::beginIfImplied (PageImages\PageImages::fetchPageImage) [0s] wiki_db: BEGIN
  • [rdbms] PageImages\PageImages::fetchPageImage [0.001s] wiki_db: SELECT pp_value FROM `page_props` WHERE pp_page = 50 AND pp_propname IN ('page_image','page_image_free') ORDER BY pp_propname LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] LinkBatch::doQuery (for Skin::preloadExistence) [0s] wiki_db: SELECT page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_latest,page_touched,page_len,page_content_model FROM `page` WHERE ((page_namespace = 1 AND page_title = 'DEK_file_format'))
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Permissions\RestrictionStore::loadRestrictions [0.001s] wiki_db: SELECT pr_type,pr_expiry,pr_level,pr_cascade FROM `page_restrictions` WHERE pr_page = 50
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Page\PageProps::getProperties [0.001s] wiki_db: SELECT pp_page,pp_propname,pp_value FROM `page_props` WHERE pp_page = 50 AND pp_propname IN ('PFDefaultForm','SFDefaultForm')
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] PFValuesUtils::getCategoriesForPage [0s] wiki_db: SELECT DISTINCT cl_to FROM `categorylinks` WHERE cl_from = 50
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\Page\PageStore::getPageByNameViaLinkCache [0s] wiki_db: SELECT page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_touched,page_links_updated,page_latest,page_len,page_content_model FROM `page` WHERE page_namespace = 14 AND page_title = 'Electronic_Platforms' LIMIT 1
  • [rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wiki_db
  • [rdbms] MediaWiki\User\TalkPageNotificationManager::dbCheckNewUserMessages [0.001s] wiki_db: SELECT user_ip FROM `user_newtalk` WHERE user_ip = '216.73.217.93' LIMIT 1