script/ai_diplomacy.lua
function DiploScore_LicenceTechnology(voAI, voActorTag, voRecipientTag, voObserverTag, action)
代码中涉及的 单位生产许可 逻辑主要围绕以下部分:
if not action:GetSubunit() then return 0end
这个判断语句检查 action 对象中是否包含了一个子单位(Subunit)。如果不存在,立即返回 0,表明无法进行许可评分。结合上下文,单位生产许可 的核心就是检查是否对特定子单位的技术许可进行评分。
从代码整体看,它处理了以下几种情况来计算许可评分:
关系判断:
如果双方关系值 (rel:GetValue():GetTruncated()) 小于 0 或者处于战争状态,则返回 0,表明不允许许可。
友好国家(联盟、同一派系、共同敌人)加分。
战争状态:
如果被许可方和行动方有共同敌人,则增加评分。
如果被许可方与行动方的敌人是朋友,评分直接归零。
对齐因子:
使用 CalculateAlignmentFactor 函数评估两国在三角关系中的距离,距离越远(即不对齐),分值下降。
威胁值:
关系的威胁程度(rel:GetThreat():Get())会影响评分,与对齐因子结合减少得分。
经济因素:
如果许可方支付的钱(action:GetMoney():Get())占被许可方金库的比例越高,评分越高;反之,支付过低时会扣分。
核心单位生产许可的关键点:
action:GetSubunit() 确定是否涉及子单位(单位生产)。
结合战争、联盟和经济等多重因素计算许可分数。
返回的分数(score)决定是否授予生产许可。
---
没有