# 数据转换 `data.cdb` 中的数据为 JSON 格式,随着死亡细胞版本的升级,里面的内容格式也会发生变化,因此比较好的处理方式是从中抽取需要的数据,保存为 SQLite 数据库文件,便于管理,也比较稳定。 以下是 `data.cdb` 中数据的解析: - `sheets[1]["props"]["separatorTitles"]` 字符串数组,下面的 `group` 字段即为此数组的索引。 - `sheets[1]["lines"]` 对象数组,其中为武器、技能等。例: - 双向弩弓塔: ```json { "synergy": [], "props": { "duration2": 0.09, "targetable": true, "dps": [45], "life": 100, "count": 2, "effectCD": 0.4 }, "gameplayDesc": "Tire sur ::count:: ennemis proches à la fois, chaque tir infligeant ::+dps:: DPS.", "moneyCost": 1750, "group": 0, "castCD": 10, "id": "HorizontalTurret", "icon": { "x": 1, "y": 0, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [{ "affix": "SuperPierce" }], "name": "Auto-balète double", "droppable": true, "tags": [ { "tag": "Ranged" }, { "tag": "HasBullets" }, { "tag": "Deployable" }, { "tag": "NeedPower" }, { "tag": "UnlockInPublicEvent" } ], "tier1": "Tactic", "cellCost": 5 } ``` - 步兵手雷: ```json { "synergy": [], "props": { "range": 4.5, "coolDown": 0.6, "power": [90] }, "gameplayDesc": "Rapide à utiliser, mais inflige des dégâts modérés.", "moneyCost": 1250, "group": 1, "castCD": 4, "id": "FastGrenade", "icon": { "x": 6, "y": 8, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [{ "affix": "Oil" }], "name": "Grenade d'infanterie", "droppable": true, "tags": [ { "tag": "Ranged" }, { "tag": "Explosive" }, { "tag": "ShortCooldown" }, { "tag": "UnlockInPublicEvent" } ], "tier1": "Brutality", "cellCost": 0 } ``` - 稻草人装束:无瑕: ```json { "props": { "movePauseMul": 99999 }, "genTags": 544, "pfCost": 1, "blueprints": [], "maxPerRoom": 0, "group": 2, "canBeElite": false, "mobTags": [], "index": 107, "id": "Scarecrow", "weight": 500, "icon": { "x": 44, "y": 23, "file": "cardIcons.png", "size": 24 }, "life": 500000, "name": "Scarecrow", "minPfHeight": 0, "minPfSize": 0, "metaItems": [], "maxPerPlatform": 0, "score": 0, "flesh1": 11562569, "skill": [] } ``` - 死亡之球: ```json { "synergy": [], "props": { "speed": 0.11, "power": 50, "dps": 125, "count": 6, "distance": 25, "size": 2, "tick": 0.18, "duration": 12 }, "gameplayDesc": "Crée une orbe dévastatrice qui se déplace lentement.", "moneyCost": 1750, "group": 3, "castCD": 20, "id": "SlowOrb", "icon": { "x": 13, "y": 0, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [{ "affix": "DoubleSpeed" }], "name": "Orbe de mort", "droppable": true, "tags": [{ "tag": "Ranged" }], "tier1": "Survival", "cellCost": 50 } ``` - 生锈的刀 ```json { "synergy": [], "props": {}, "moneyCost": 1, "group": 4, "castCD": 0, "ambiantDesc": "Peut servir à tuer des gens.", "id": "StartSword", "icon": { "x": 18, "y": 0, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Epée rouillée", "droppable": false, "tags": [{ "tag": "NoCritical" }, { "tag": "RustyItem" }], "tier1": "Brutality", "cellCost": 0 } ``` - 初学者弓箭: ```json { "synergy": [], "props": { "ammo": 6 }, "gameplayDesc": "Les munitions reviennent quand vous achevez les ennemis.", "moneyCost": 1, "group": 5, "castCD": 0, "ambiantDesc": "C'est le jouet du fils du geolier. On doit bien pouvoir tuer quelques trucs avec ça.", "id": "StartBow", "icon": { "x": 0, "y": 1, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Arc du fils du geolier", "droppable": false, "tags": [ { "tag": "Ranged" }, { "tag": "NoCritical" }, { "tag": "HasBullets" }, { "tag": "LimitedAmmo" }, { "tag": "RustyItem" } ], "tier1": "Tactic", ``` - 老木盾: ```json { "synergy": [], "props": {}, "gameplayDesc": "Maintenir pour absorber une partie des dégâts.\nAppuyer brièvement pour tenter une {parade@PA} et annuler les dégâts.", "moneyCost": 1, "group": 6, "castCD": 0, "id": "StartShield", "icon": { "x": 0, "y": 3, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Vieux bouclier en bois", "droppable": false, "tags": [ { "tag": "Shield" }, { "tag": "NegligibleDamage" }, { "tag": "RustyItem" } ], "tier1": "Survival", "cellCost": 0 } ``` - 囚者颈环: ```json { "synergy": [], "props": {}, "moneyCost": 1, "group": 7, "castCD": 0, "ambiantDesc": "Rien de notable, si ce n'est une odeur persistante de rat crevé.", "id": "PrisonerCloth", "icon": { "x": 1, "y": 4, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Collier de prisonnier", "droppable": false, "tags": [{ "tag": "NoDamage" }], "cellCost": 0 } ``` - 钥匙: ```json { "synergy": [], "props": { "highActivationPriority": true }, "gameplayDesc": "Ouvre les portes verrouillées (original, non ?)", "moneyCost": 0, "group": 8, "castCD": 0, "id": "GenericKey", "icon": { "x": 0, "y": 0, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Clé", "droppable": false, "tags": [{ "tag": "Key" }], "cellCost": 0 } ``` - 藤蔓符文: ```json { "synergy": [], "props": {}, "gameplayDesc": "Cette rune {permanente@PE} permet de faire pousser des vignes grimpantes.", "moneyCost": 0, "group": 9, "castCD": 0, "id": "LadderKey", "icon": { "x": 5, "y": 3, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Rune des vignes", "droppable": false, "tags": [{ "tag": "MetaKey" }], "cellCost": 0 } ``` - 威力卷轴: ```json { "synergy": [], "props": { "highActivationPriority": true }, "gameplayDesc": "Améliore l'une de vos 3 caractéristiques au choix !", "moneyCost": 2500, "group": 10, "castCD": 0, "id": "AnyUp", "icon": { "x": 11, "y": 2, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Parchemin de puissance", "droppable": false, "tags": [{ "tag": "TierUpgrade" }], "cellCost": 0 } ``` - 贤者之石碎片: ```json { "synergy": [], "props": { "power": 75000, "disableFloatAnim": true, "chance": 0, "highActivationPriority": true }, "gameplayDesc": "Vous êtes officiellement la créature la plus riche de l'île. Ce petit bijou sans la moindre imperfection vaut ::$power::{iconCoin@img} !", "moneyCost": 0, "group": 11, "castCD": 0, "id": "LegendGem", "icon": { "x": 17, "y": 11, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Fragment de Pierre Philosophale", "droppable": false, "tags": [], "cellCost": 0 } ``` - 杀戮天性: ```json { "synergy": [], "props": { "scaledValueCap": 3, "actcdrIncPerTier": 0.11, "actcdr": 0.4 }, "gameplayDesc": "Réduit les délais de réutilisation des compétences de ::actcdr:: sec pour chaque ennemi tué au corps à corps.", "moneyCost": 0, "group": 12, "castCD": 0, "id": "P_CDR_Kill", "icon": { "x": 1, "y": 13, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Inspiration meurtrière", "droppable": true, "tags": [], "tier1": "Brutality", "cellCost": 0 } ``` - 经典装束: ```json { "synergy": [], "props": { "revealedAtStart": true }, "gameplayDesc": "Avec elle, vous avez fait (et ferez encore) les 400 coups.", "moneyCost": 0, "group": 13, "castCD": 0, "id": "PrisonerDefault", "icon": { "x": 13, "y": 14, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Tenue classique", "droppable": false, "tags": [], "cellCost": 0 } ``` - 饮血者: ```json { "synergy": [{ "tag": "Bleed", "trigger": false }], "props": { "prct": 0.03 }, "gameplayDesc": "Every hit against a bleeding target heals you for ::prct::% of your max health. ", "moneyCost": 0, "group": 14, "castCD": 0, "id": "ASP_BloodDrinker", "icon": { "x": 2, "y": 19, "file": "cardIcons.png", "size": 24 }, "legendAffixes": [], "name": "Blood Drinker", "droppable": true, "tags": [{ "tag": "NeedManualUnlock" }], "cellCost": 0 } ``` - `group` 为 15 的是 `BossRushStatueUnlock`,意义不明 先做近战武器。在 `melee.py` 中提取了所有近战数据。数据的 `name`、`gameplayDesc` 和 `ambiantDesc` 需要翻译。其中 `name` 一定存在,其余两者不一定存在;这两者有可能有多余的空格,所以需要去掉多余的空格;`gameplayDesc` 中有 `::duration::` 格式的部分,对应的值在 `props` 属性中,需要进行替换。双手武器只有一个的 `droppable` 为 `True`。掘金镐有两份数据,其中只有一份是可掉落的。