欢迎访问

价格机制

游戏经济系统完全指南 | 开发者数值参考 | 价格模拟器 | 文档版本:v1.0

玩家快速入门

一句话理解价格机制:游戏中的商品价格由系统根据多种因素自动计算,但真实价格对你隐藏。你需要通过观察市场公告、分析NPC议价来判断合理定价。

观察市场

关注公告板的供需信息,了解哪些商品热门

理解议价

NPC留言议价意味着定价偏高,可参考议价调整

快速成交

商品快速卖出说明定价合理或偏低,可适当提价

使用模拟器

切换到"价格模拟器"标签,测试不同定价的效果

如何正确定价

第一步:上架商品

选择要出售的商品,设置一个你认为合理的价格。如果是第一次出售该商品,可以参考以下策略:

  • 试探法:先定一个中等偏高的价格,观察NPC反应
  • 保守法:先定一个较低的价格确保成交,了解市场后再调整

第二步:观察反馈

反馈类型 含义 建议操作
快速成交(15分钟内) 定价偏低或市场短缺 下次可适当提价10-20%
正常成交(1-2小时) 定价合理 保持当前定价策略
收到NPC议价 定价偏高 参考议价价格调整,或接受议价
长时间无人问津 定价严重过高 收摊后重新开摊定价(开摊后不可调价)

第三步:调整策略

根据反馈调整定价,逐步找到最优价格区间。

价格影响因素速查

品质影响

品质 价格系数 说明
普通1.0x基础价格
优秀1.2x品质较好
精良1.5x高品质
史诗2.0x稀有品质
传说3.0x顶级品质

时段影响

时段 价格系数 说明
凌晨 (0-6点)0.8x人流稀少
早晨 (6-9点)1.0x正常时段
中午 (12-14点)1.2x人流高峰
傍晚 (18-22点)1.3x黄金时段

定价小贴士

  • 新手建议:初次出售某商品时,先观察其他摊位的定价(如果有)
  • 时段策略:在傍晚黄金时段上架高价商品,凌晨时段适合上架低价快消品
  • 议价处理:收到议价不要急着拒绝,看看价格是否合理
  • 灵活调整:市场供需变化快,定期调整价格

常见问题

为什么看不到商品的真实市场价格?

这是游戏的核心设计之一。真实市场价格是隐藏的,玩家需要通过观察市场公告、分析NPC议价、参考成交速度来推断合理价格区间。这种设计增加了游戏的真实性和策略性。

NPC议价是什么意思?

当你的定价高于市场合理价格15%以上时,NPC会在留言板上发起议价,提出一个他们认为合理的价格。你可以:

  • 接受议价,按NPC提出的价格成交
  • 拒绝议价,继续等待其他买家
  • 参考议价价格,调整自己的定价

议价有效期为30分钟,过期自动失效。

如何判断我的定价是否合理?

可以通过以下几个信号判断:

  • 成交速度:15分钟内成交说明定价偏低;1-2小时成交说明定价合理;超过5小时未成交说明定价过高
  • NPC反馈:收到议价说明定价偏高;无人问津说明定价严重过高
  • 市场公告:关注供需信息,供过于求时适当降价,供不应求时适当提价
摊位位置和装饰真的会影响成交吗?

是的。摊位位置决定了人流量,中心区域人流量高,成交概率更高;装饰影响买家的购买意愿,多个装饰效果可叠加,毕业配置可提供高达96%的成交率加成。但这些只是辅助因素,价格仍然是最重要的决定因素。

装饰需要通过消耗凭证获得称号来解锁,共有36种装饰分为6个等级,玩家可以根据自身风格选择不同的搭配流派。

如何解锁更多装饰?

装饰通过称号系统解锁:

  • 消耗1000草创凭证获得"小商贩"称号,解锁草创期6个装饰
  • 消耗1500立业凭证获得"行商"称号,解锁立业期6个装饰
  • 消耗2000兴业凭证获得"富商"称号,解锁兴业期6个装饰
  • 消耗2500旺业凭证获得"巨贾"称号,解锁旺业期6个装饰
  • 消耗3000鸿业凭证获得"商业大亨"称号,解锁鸿业期6个装饰
  • 消耗4000传世凭证获得"大富翁"称号,解锁传世期6个装饰

不同时期需要不同类型的凭证,凭证通过交易、任务、成就等途径获得。

系统架构

价格机制采用三层架构设计:

  • 隐藏层(Hidden Layer):系统内部计算真实市场价格,对玩家完全隐藏
  • 玩家层(Player Layer):玩家自主定价,系统不提供直接价格参考
  • 反馈层(Feedback Layer):通过NPC议价、成交速度等间接反馈引导玩家定价

数据结构设计

商品基础数据表

字段名 类型 说明 示例
item_idint商品唯一ID1001
item_namestring商品名称"火焰草"
base_valueint基础价值(文)100
item_typeenum商品类型草药/矿石/装备
quality_tierint品质等级1-5
price_sensitivityfloat价格敏感度系数1.0
base_trade_volumeint基础交易量100

摊位数据表

字段名 类型 说明 示例
stall_idint摊位唯一ID1
owner_idint摊主玩家ID10001
position_levelint位置等级1-3
decoration_listarray已购买装饰ID列表[1,2,3,4,5,6]
title_idint当前装备称号ID1-6
reputationfloat摊位声誉值1.0

市场动态数据表

字段名类型说明示例
market_idint记录ID1
item_idint商品ID1001
current_supplyint当前供应量50
current_demandint当前需求量80
time_phaseenum时段特性早晨/中午/傍晚/深夜
max_buy_probfloat最大成交概率0.7

算法实现

真实市场价格计算

CalculateRealMarketPrice 实现代码
public float CalculateRealMarketPrice(int itemId, int quality)
{
    // 1. 获取基础数据
    ItemBaseData item = GetItemData(itemId);
    
    // 2. 获取各系数
    float Q = GetQualityCoefficient(quality);           // 品质系数
    float S = GetSupplyDemandIndex(itemId);             // 供需指数
    float T = GetTimeCoefficient(item.time_phase);      // 时段系数
    float E = GetEventCoefficient(itemId);              // 事件系数
    float xi = Random.Range(0.95f, 1.05f);             // 随机波动
    
    // 3. 计算真实市场价格
    float realPrice = item.base_value * Q * S * T * E * xi;
    
    return realPrice;
}

供需指数计算

CalculateSupplyDemandIndex 实现代码
public float CalculateSupplyDemandIndex(int itemId)
{
    ItemBaseData item = GetItemData(itemId);
    MarketData market = GetMarketData(itemId);
    
    // 获取当前供需数据
    int demand = market.current_demand;
    int supply = market.current_supply;
    int baseVolume = item.base_trade_volume;
    float k = item.price_sensitivity;
    
    // 计算供需差值比例
    float diffRatio = (float)(demand - supply) / baseVolume * k;
    
    // 使用双曲正切函数限制范围
    float tanhValue = (float)Math.Tanh(diffRatio);
    
    // 计算最终供需指数
    float S = 1.0f + tanhValue;
    
    // 限制范围 [0.5, 2.0]
    return Mathf.Clamp(S, 0.5f, 2.0f);
}

成交概率计算

CalculateBuyProbability 实现代码
public float CalculateBuyProbability(int itemId, float playerPrice, 
    int stallId, int npcId)
{
    ItemBaseData item = GetItemData(itemId);
    StallData stall = GetStallData(stallId);
    NPCData npc = GetNPCData(npcId);
    
    // 1. 计算真实市场价格
    float marketPrice = CalculateRealMarketPrice(itemId, item.quality_tier);
    
    // 2. 计算价格偏离度
    float deviation = (playerPrice - marketPrice) / marketPrice;
    
    // 3. 计算基础成交概率(使用Sigmoid函数)
    float lambda = 2.0f;  // 价格敏感度参数
    float sigmoid = 1.0f / (1.0f + Mathf.Exp(-(-deviation * lambda)));
    
    // 4. 应用摊位系数
    float L = GetPositionCoefficient(stall.position_level);      // 位置系数
    float D = CalculateDecorationBonus(stall.decoration_list, stall.title_id);  // 装饰总加成
    float T_slot = GetTimeSlotMatch(itemId);                      // 时段匹配
    float R = Random.Range(0.9f, 1.1f);                          // 随机因子
    
    // 5. 计算最终成交概率
    float maxProb = item.max_buy_probability;
    float probability = maxProb * sigmoid * L * D * T_slot * R;
    
    // 6. 限制范围 [0, 1]
    return Mathf.Clamp(probability, 0.0f, 1.0f);
}

装饰加成计算

CalculateDecorationBonus 实现代码
public float CalculateDecorationBonus(int[] decorationList, int titleId)
{
    float totalBonus = 1.0f;
    
    // 1. 计算所有已购买装饰的加成
    foreach (int decoId in decorationList)
    {
        DecorationData deco = GetDecorationData(decoId);
        totalBonus += deco.trade_rate_bonus;  // 累加成交率加成
    }
    
    // 2. 加上当前称号的加成
    TitleData title = GetTitleData(titleId);
    totalBonus += title.trade_rate_bonus;
    
    // 3. 限制最大加成(防止过度膨胀)
    return Mathf.Min(totalBonus, 2.0f);  // 最高2倍加成
}

// 装饰数据结构
public class DecorationData
{
    public int id;
    public string name;
    public float trade_rate_bonus;      // 成交率加成(如0.01表示+1%)
    public float offline_income_bonus;  // 离线收益加成
    public float tax_reduction;         // 税费减免
    public int unlock_title_id;         // 解锁所需称号ID
    public int price;                   // 价格
}

NPC议价生成

GenerateBargainOffer 实现代码
public BargainOffer GenerateBargainOffer(int npcId, int saleItemId, float playerPrice)
{
    SaleItemData saleItem = GetSaleItemData(saleItemId);
    NPCData npc = GetNPCData(npcId);
    
    // 1. 计算真实市场价格
    float marketPrice = CalculateRealMarketPrice(
        saleItem.item_id, 
        saleItem.quality
    );
    
    // 2. 检查是否触发议价条件
    float deviation = (playerPrice - marketPrice) / marketPrice;
    if (deviation <= 0.15f)  // 偏离度小于15%不触发
        return null;
    
    // 3. 根据NPC性格计算议价价格
    float personalityFactor = GetNPCPersonalityFactor(npc.personality_type);
    float bargainPrice = marketPrice * personalityFactor;
    
    // 4. 生成议价信息
    BargainOffer offer = new BargainOffer
    {
        npc_id = npcId,
        npc_name = npc.name,
        sale_item_id = saleItemId,
        offer_price = (int)bargainPrice,
        message = GenerateBargainMessage(npc, saleItem, bargainPrice),
        expire_time = DateTime.Now.AddMinutes(30),
        status = OfferStatus.Pending
    };
    
    return offer;
}

接口定义

核心接口列表

接口名 功能 输入参数 返回值
CalculateRealMarketPrice 计算真实市场价格 itemId, regionId, quality float
CalculateBuyProbability 计算成交概率 itemId, playerPrice, stallId, npcId float
GenerateBargainOffer 生成NPC议价 npcId, saleItemId, playerPrice BargainOffer
ExecuteTransaction 执行交易 saleItemId, price, buyerId TransactionResult

测试方案

单元测试

  • 价格计算准确性测试
  • 供需指数边界测试
  • 议价触发条件测试

集成测试

  • 完整交易流程测试
  • 多玩家并发测试
  • 长时间稳定性测试

平衡性测试

  • 价格合理性验证(80%成交价在市场价±20%范围内)
  • 利润空间测试(普通商品10-30%,稀有商品30-100%)
  • 市场稳定测试(价格波动不超过基准价±50%)

价格模拟器

输入参数,模拟计算商品的市场价格和成交情况。

参数设置

计算结果

真实市场价格 --
你的定价 --
定价偏离度 --
成交概率 --
预计成交时间 --

价格分布图

-- -- -- --

系统建议

点击"开始计算"获取建议

批量模拟 - 不同定价对比

快速测试不同定价的成交情况:

点击上方按钮查看不同定价的对比结果