unciv吧 关注:4,403贴子:20,424
  • 16回复贴,共1

开一个新系列 版本更新解析 4.16.8 p1

只看楼主收藏回复



IP属地:云南1楼2025-05-10 15:10回复
    👀


    IP属地:北京来自iPhone客户端2楼2025-05-10 15:33
    回复
      2025-08-21 22:35:38
      广告
      不感兴趣
      开通SVIP免广告
      感谢华公公的邀请
      补完TradeEvaluation文档
      叠甲:并非科班出身 仅仅做一点科普工作


      IP属地:云南3楼2025-05-10 15:56
      收起回复
        1
        简单理解:
        这段代码的核心是模拟游戏中不同文明之间的交易行为,确保交易合理且符合游戏规则。
        它会根据交易的内容(比如金钱、资源、城市等)和双方的关系(比如敌对还是盟友)来计算交易的价值。


        IP属地:云南4楼2025-05-10 15:59
        收起回复
          isTradeValid方法
          trade: 表示交易的内容,包含双方的出价(例如城市、资源、金钱等)。
          offerer: 发起交易的一方(文明)。
          tradePartner: 接受交易的一方(文明)。
          返回值:
          返回一个布尔值,true 表示交易有效,false 表示交易无效。
          特殊事件
          如果发起交易的一方(offerer)或接收交易的一方(tradePartner)试图交易掉自己所有的城市(即城市数量等于交易中涉及的城市数量),则交易无效。
          这是为了避免游戏中某个文明通过交易直接被摧毁的情况。


          IP属地:云南5楼2025-05-10 16:12
          回复
            evaluateBuyCost 方法
            如果购买城市会导致文明的幸福度变为负值,则不允许交易。
            这是为了避免因为购买城市而导致文明陷入不利状态


            IP属地:云南6楼2025-05-10 16:29
            回复
              evaluateSellCost方法
              金钱
              Gold 类型:直接返回一次性支付的金额 amount。
              Gold_Per_Turn 类型:按回合数 (duration) 计算总金额
              条约
              和平条约 防御条约 研究协定 待定


              IP属地:云南7楼2025-05-10 16:37
              收起回复
                续上
                奢侈品资源
                如果有明确的最低出售价格(AiWillSellAt),直接返回该价格。
                如果资源数量大于 1,返回 250。
                如果文明有保留奢侈品幸福度的能力,计算一个折扣后的价格。
                否则,返回 600,表示出售最后一个奢侈资源的高价


                IP属地:云南8楼2025-05-10 17:47
                回复
                  2025-08-21 22:29:38
                  广告
                  不感兴趣
                  开通SVIP免广告
                  城市
                  TradeOfferType.City -> { // 1. 城市存在性校验 val city = civInfo.cities.firstOrNull { it.id == offer.name } ?: throw Exception("城市交易报价异常: ID ${offer.name} 不存在") // 2. 价格计算参数 val distanceBonus = distanceCityTradeModifier(civInfo, city) // 距离加成系数 val sumOfPop = city.population.population // 城市人口总数 val sumOfBuildings = city.cityConstructions.getBuiltBuildings().count() // 建筑物数量 // 3. 价格公式与兜底值 return ((sumOfPop * 4 + sumOfBuildings * 1 + 4 + distanceBonus) * 100) .coerceAtLeast(1000) // 最低价格1000


                  IP属地:云南9楼2025-05-10 17:48
                  收起回复
                    以上是华公的部分
                    我来写tj的部分


                    IP属地:云南10楼2025-05-10 18:18
                    回复
                      好耶!


                      IP属地:四川来自Android客户端11楼2025-05-10 22:34
                      回复


                        IP属地:广东来自Android客户端12楼2025-05-10 23:14
                        回复