
Cataclysm-DDA 灾变后价格体系实战指南price_postapoc 从货币锚点到实战配置【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA你正在写第一个模组给自制的抗生素填灾变后价格——填多少这几乎是每个 CDDACataclysm-DDA模组作者绕不开的问题price_postapoc字段决定了物品在灾后经济里的全部身价。本文直接从仓库里的真实配置与引擎源码出发回答三件事postapoc 定价的尺子从哪来、引擎如何把这个数字算成屏幕上显示的价格、以及你给新物品定价时怎样不出错。如果你想边读边翻源码可以先拉一份仓库只读参考即可git clone https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA先造一把尺子250 cent 的货币锚点结论先行CDDA 的灾后定价有一把统一的市尺——自由商人本票merch 一片肉干 250 cent。所有物品的price_postapoc都是围绕这把尺子换算的就像菜市场的斤两必须先统一单位。那为什么偏偏是肉干依据写在 doc/design-balance-lore/POSTAPOC_PRICE_GUIDE.md 里一片肉干能保鲜24 天、含347 卡路里——耐放、顶饱、好携带是天然的硬通货等价物。文档还给幸存者经济划了两条参考线每天带回2000 cent约 8 片肉干等值货物 → 勉强维持温饱每天带回4000 cent→ 已经过得不错。设计任务奖励或商人库存时用这两条线反推玩家需要的搜刮劳动量就是一个现成的平衡校准器。仓库里 data/json/items/generic/currency.json 实现了多种派系货币压缩成一张对照表单位 cent1 USD 100 centid名称灾变前价灾变后价发行方FMCNotemerch50 USD250 1 片肉干自由商人避难所中心RobofacCoinHub 01 金币900 USD5000 20 张 merchHub 01约一盎司低纯度金FlatCoinFlatCoin5 cent250校园交换代币压扁的米奇币signed_chitchit5 cent250个人/机构签名纸片iconicon2 USD250新英格兰教会社区规律一目了然除了 Hub 01 金币靠实体黄金撑起 5000 cent 的高位其余社区货币全部锚定 250 cent——一张票 一片肉干。去中心化的末日里各自印钱但单位是同一把尺换算才不会被毁掉。而 FMCNote 的注释把这套哲学说得最直白price: 50 USD, price_postapoc: 2 USD 50 cent, //: $50 bills have substantial pre-Cataclysm value, but are worth 1 meat jerky同一张 50 美元大钞灾后只值 1 片肉干——票面金额失效购买力接管定价。CDDA 物品价格档位可得性 × 实用性的定价区间表给定尺子之后一个物品具体值多少设计文档的答案是两个旋钮可得性常见/稀有× 实用性无用/理论用途/实用。各档位区间cent可得性实用性价格区间直觉理解常见原材料~0–25/kg要么白送要么只能大宗批发常见无实用0遍地都是的杂物 废品常见有理论用途~10好像有点用常见实用~250–2000日常真正用得上的东西稀有无实用~10–50难得但没用的纪念品稀有有理论用途~100–500稀有且可能派上用场稀有有相当大用途~1000–15000稀有硬货价差最大表里还藏着一条硬性红线任何物品不得超过 15000 cent。为什么设上限文档的理由很朴素游戏里的经济规模是小社区级别的15000基本就是任何人愿意为单件物品支付的极限。没有这条红线天价物品会让 NPC 交易、任务奖励等系统直接失衡——对模组作者来说它同时也是一道清晰的自查边界。食品另有一套三因子模型卡路里 × 保存性 × 营养度肉干250、高热量罐装高能食品可达500、低卡易腐的垃圾食品低至50。这个保存性因子不是玄学引擎层面真的有对应实现下面细说。price_postapoc 引擎实现字段定义、回退与动态折价配置写得再对最终也是引擎在替你算账。这一节从源码走读四个关键点看完你就知道物品信息界面显示的价格是怎么来的。price 与 price_postapoc 字段定义默认堆叠语义src/itype.h 里两个字段的注释信息量很大/** Value before the Cataclysm. Price given is for a default-sized stack. */ units::money price 0_cent; /** Value after the Cataclysm, dependent upon practical usages. Price given is for a default-sized stack. */ units::money price_post -1_cent;两个关键点价格永远针对默认堆叠尺寸给出后面堆叠换算全靠这一句price_post的初值-1_cent表示未指定。JSON 侧的解析在 src/item_factory.cppoptional( jo, was_loaded, price, price, not_negative_money, 0_cent ); optional( jo, was_loaded, price_postapoc, price_post, not_negative_money, -1_cent );也就是说JSON 里键名是price_postapoc缺省时记为 -1。未填 price_postapoc 会发生什么不是报错而是悄悄回退到灾变前价格。还是 src/item_factory.cpp// use pre-Cataclysm price as default if post-cataclysm price unspecified if( obj.price_post 0_cent ) { obj.price_post obj.price; }所以不写也是一种设计选择物品按灾变前价值参与交易。但对大多数模组物品来说这恰恰是最常见的疏漏——一张忘了改价的 160 USD 棒球棒在避难所黑市上会被当奢侈品卖正确做法见下一节实战走查。按 charges / stack_size 折算整箱价与单瓶价整箱价与单瓶价是理解堆叠换算最好的类比JSON 里写的是整箱价交易时按你手里还剩几瓶折算。src/item.cpp 的price_no_contents里if( count_by_charges() || made_of( phase_id::LIQUID ) ) { // price from json data is for default-sized stack price * charges / static_cast double ( type-stack_size ); }一瓶stack_size: 200的药只用了 15 剂量实际价格就是整箱价的 15/200。腐烂、损坏与污秽动态折价设计文档强调食品要看保存性因为引擎真的会按新鲜度动态扣钱同样是 src/item.cppif( rotten() ) { return 0; // 彻底腐烂一文不值 } ... if( damage() 0 ) { // maximal damage level is 5, maximal reduction is 80% of the value. price - price * static_castdouble( std::max( 0, damage_level() - 1 ) ) / 5; } ... // Nominal price for perfectly fresh food, decreasing linearly as it gets closer to expiry if( is_food() ) { price * ( 1.0 - get_relative_rot() ); // 越接近过期越便宜线性衰减 } if( is_filthy() ) { price std::max( price - PRICE_FILTHY_MALUS, 0 ); // PRICE_FILTHY_MALUS 100 cent }三条规则各管一事腐烂get_relative_rot()从 0新鲜到 1烂透线性扣价归零前食品的实际交易价值会一路缩水——这就是易腐食品别填高价的引擎依据损坏5 级损坏最多打到 2 折80% 减值污秽固定扣 100 cent 且下限为 0。满地都是的脏衣物直接归零贵重装备只掉一成——源码注释里解释得很直白common clothing ends up with no value (itseverywhere)。最后src/item.cpp 的item::price()会用visit_items递归累加所有内容物容器里的物品、枪械/工具模组装满补给的背包是逐层加出来的总价而 src/item_info.cpp 在物品信息界面同时展示两个价格const int price_preapoc price( false ) * batch; const int price_postapoc price( true ) * batch;practical参数为false走price、为true走price_post。所以游戏里对照看一眼两个数字如果两者一模一样多半就是没填price_postapoc触发了回退。CDDA 模组定价实战从判断稀缺性到写出 JSON 配置方法论走完挑仓库里两件真实物品完整走一遍先常见武器后稀缺药品。实战一铝制棒球棒bat_metal真实配置在 data/json/items/melee/bludgeons.json{ id: bat_metal, name: { str: aluminum bat }, price: 160 USD, price_postapoc: 12 USD 50 cent, melee_damage: { bash: 22 }, qualities: [ [ HAMMER, 1 ] ], flags: [ DURABLE_MELEE, BELT_CLIP ] }定价走查可得性球场、公园、体育用品店随处可搜刮 →常见实用性22 点钝击伤害 敲砸锤品质是实打实的武器兼工具 →实用落档常见 × 实用 250–2000 cent 区间12 USD 50 cent1250 cent落在区间上沿对一件耐用的近战武器完全合理注意灾变前价格是 160 USD如果这里漏写price_postapoc引擎回退后这根球棒会在避难所按 16000 cent 的天价出售——直接击穿 15000 上限。你可以直接抄走这个模板{ id: my_mod_item, type: TOOL, name: { str: my tool }, price: 灾变前价, price_postapoc: 先按档位表选档再落数 }实战二抗生素antibiotics真实配置在 data/json/items/comestibles/med.json{ id: antibiotics, type: ITEM, subtypes: [ COMESTIBLE ], comestible_type: MED, name: { str_sp: antibiotics }, weight: 611 mg, volume: 1 ml, price: 45 cent, price_postapoc: 2 USD, use_action: [ ANTIBIOTIC ], flags: [ NPC_SAFE, IRREPLACEABLE_CONSUMABLE, WATER_DISSOLVE, NO_TEMP ] }这件物品值得拆开看三层单价锚定这是单片药611 mg、1 ml2 USD 200 cent/剂。而设计文档里那个经典基准——400 USD 一组 200 剂量的抗生素——换算下来单价正好也是 200 cent/剂。文档示例与线上真实配置殊途同归说明 200 cent/剂就是救命药的手感基准档位核对处方药灾变后无法生产落在稀有 × 有相当大用途档下沿与常见实用物品250–2000衔接不突兀标志补全IRREPLACEABLE_CONSUMABLE已经在列——药品属于存量只减不增的不可再生消耗品这个标志的用途见结尾。踩坑清单price_postapoc 常见错误自查提交你的物品 JSON 之前过一遍这张清单 ⚠️整组价误当单价JSON 价格针对默认堆叠尺寸。设了stack_size的物品先除以堆叠数反算单价确认它落在合理档位400 USD 一组 ≠ 400 USD 一剂。漏写 price_postapoc引擎会静默回退到灾变前价物品界面两个价格会一模一样——看到相同数值就是信号。突破 15000 cent 上限再好的物品也不该超过150 美元。该加 IRREPLACEABLE_CONSUMABLE 没加药品、不可装填的弹药、咖啡茶叶等灾变前消耗品都应带上它在 data/json/flags.json 中正式注册type: json_flag。易腐食品填了天价引擎会按新鲜度线性折价放三天的罐头和满新鲜度的不是一个价。便宜物品被污秽打零100 cent 的固定污秽扣减对低价物品是致命的50 cent 的脏物 → 0。食品没按三因子卡路里 × 保存性 × 营养度——肉干 250、罐装高能 ~500、垃圾食品 ~50先对标这三档。结语一个正在等待接线的涨价钩子把price_postapoc想成灾变后世界的秤250 cent 的肉干锚定单位可得性与实用性两个旋钮决定落档引擎再叠上堆叠折算、腐烂衰减与污秽扣减最终得出交易价。照着档位表选数、用清单自查你的模组物品就能无缝嵌入这套经济。还有一个值得留意的伏笔设计文档末尾明确写着未来会实现一个让IRREPLACEABLE_CONSUMABLE物品随时间自动涨价的机制——存量的抗生素与弹药会越来越贵。今天给不可再生消耗品打上这个标志就是提前为那条尚未接线的通胀曲线占好位。【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考