奥尔托丢弃经验值

奥尔托丢弃经验值

捐赠所有类型物品可获得经验值(不仅限于武器/护甲)。物品价值=经验值(原为35-300经验值)。捐赠加成效果使经验值翻倍。新增设置选项(模组*经验值,最大经验值)。支持版本v1.03-1.2.11。

游戏玩法

为丢弃经验值返还所有类型的物品(不仅限于武器和护甲)。

返回基础消耗(.Value)= XP(而非0级35xp - 3-6级300xp)。

TW在后期补丁中添加了这个...存根,尽管他们可以修复装备价值公式而不受影响。

捐赠福利使经验值加成翻倍(而非限制捐赠能力)。


Git:

https://github.com/Oltopeteeh/MB2_Olto_Discard


====

v1.1(自定义)

====

-- 添加设置(文件 settings.xml,位于模组文件夹):

经验值调整系数(默认值:1.0倍)。

最大经验值(默认值:10万)。

注意:边界并非严格限制,但会非常明显,因为当数值超过允许最大值时,会采用开平方根公式("MathF.Sqrt")进行计算)。

注:1 第纳尔(自费)= 20 经验值。

这意味着,如果物品价格为10d并提供200经验值,这是正常情况。

示例:精英(50天)= 新兵(20天)+ 升级(15天)+ 300经验(15天)。

-- 添加最低经验值(适用于武器和护甲,与原版一致)。

公式 = 37.5f * Pow(2, 等级F)。

注意:使用"TierF"(浮点数,最小值"-1.5",最大值"7.5")比"Tier"(整数,0-6)能获得更灵活的成本控制。

如果等级 <=0: 经验值 37 (~原版),一级=75,二级=150,三级=300,四级=600,以此类推。

数字序列不会像原始快速补丁中那样中断以捐赠经验值。


源代码(v1.1版):

剧透:显示

{

public class OltoMod_Discard_SubModule : MBSubModuleBase

{

    public static float 丢弃经验值修正;

    public static int 丢弃最大值;

    protected override void OnGameStart(Game game, IGameStarter gameStarterObject)

    {

        基础.游戏开始(游戏, 游戏启动对象);

        gameStarterObject.AddModel((GameModel)new OltoItemDiscardModel());

    }

    protected override void OnSubModuleLoad()

    {

        基础.子模块加载();

        this.loadSettings();

    }

    private void 加载设置()

    {

        Settings settings = new XmlSerializer(typeof(Settings)).Deserialize((Stream)File.OpenRead(Path.Combine(BasePath.Name, "Modules/OltoMod_Discard/settings.xml"))) as Settings;

        OltoMod_Discard_SubModule.discard_xp_mod = settings.discard_xp_mod;

        OltoMod_Discard_SubModule.discard_max = settings.discard_max;

    }

}

[可序列化]

public class Settings

{

    public float 丢弃经验修正;

    public int 最大弃牌数;

}

内部类 OltoItemDiscardModel : 默认物品丢弃模型

{

    public override bool PlayerCanDonateItem(ItemObject item) { return true; }

    重写丢弃物品时获取经验值奖励的方法

    {

        int num = 0;

        float num1 = item.Value * OltoMod_Discard_SubModule.discard_xp_mod;

        浮点数 num2 = 0;

        if (物品拥有武器组件 && 主队伍拥有特性(默认特性.管家.慷慨之手)) 数值1 *= 2;

        否则如果(物品具有护甲组件且移动队伍.主队伍拥有技能(默认技能.管家.承诺之酬,检查次要角色:真))数值1 *= 2;

        如果(物品拥有武器组件 || 物品拥有护甲组件)

            如果(物品.等级f ≥ 0)数值2 = 37.5f * 数学函数.幂次方(2,物品.等级f);

            否则 { 数值2 = 37; };

        num = (int)MathF.Round(MathF.Max(num1, num2));

        如果(数量 > OltoMod_Discard_SubModule.丢弃上限)数量 = (int)(OltoMod_Discard_SubModule.丢弃上限 + MathF.Sqrt(数量 - OltoMod_Discard_SubModule.丢弃上限));

        返回数量乘以金额;

    }

}

}


注:感谢来自Level的HP提供的"simple-add-settings"解决方案 :)


====

旧版本:

====

剧透:显示


v1(基础版)


模组版本差异(1.7.2与1.7.0)在于转换方式("using"),而非模组纯代码(感谢TW提供此信息)。

(两个版本)

使用 TaleWorlds.Core;

使用TaleWorlds.MountAndBlade;

170

使用 TaleWorlds.CampaignSystem; // 170

使用 TaleWorlds.CampaignSystem.SandBox.GameComponents; // 170

(172)

using TaleWorlds.CampaignSystem.CharacterDevelopment; // 172 // 丢弃经验值

使用 TaleWorlds.CampaignSystem.Party; // 172

using TaleWorlds.CampaignSystem.GameComponents; // 172


小型源代码(版本1.0):

public override bool PlayerCanDonateItem(ItemObject item) { return true; }

public override int GetXpBonusForDiscardingItem(ItemObject item, int amount = 1) {

    int num = item.Value;

    如果(物品拥有武器组件且主队伍拥有特性(默认特性.管家.慷慨之手))数量 *= 2;

    否则 if (item.HasArmorComponent && MobileParty.MainParty.HasPerk(DefaultPerks.Steward.PaidInPromise, checkSecondaryRole: true)) num *= 2;

    返回数量乘以金额; }

原版代码:

剧透:显示

public override bool PlayerCanDonateItem(ItemObject item)

{

    布尔结果 = 假;

    如果(物品拥有武器组件)

    {

        结果 = 移动队伍.主队伍.拥有特质(默认特质.管家.慷慨之手);

    }

    否则如果(物品具有装甲组件)

    {

        结果 = 移动部队.主部队.拥有特性(默认特性.管家.承诺报酬,检查次要角色: true);

    }

    返回结果;

}

public override int 获取丢弃物品的经验值奖励(物品对象 item,int 数量 = 1)

{

    int num = 0;

    if (玩家可以捐赠物品(item))

    {

        switch (item.Tier)

        {

            当物品等级为1级时:

                num = 75;

                中断;

            情况 物品对象.物品等级.等级2:

                num = 150;

                中断;

            情况 物品对象.物品等级.等级3:

                num = 250;

                中断;

            情况 物品对象.物品等级.四级:

            当物品等级为第5级时:

            当物品等级为6级时:

                num = 300;

                中断;

            默认:

                num = 35;

                中断;

        }

    }

    返回数量乘以金额;

}

注意:如果为此插件添加更多逻辑,

等级 0 = 37(对比 35),

等级 1 和 2 = 正常,

等级 3 = 300(对比 250),

等级 4 = 600,

等级 5 = 1200,

等级 6 = 2400(对比 300),

等级 7 = 4800(因为 tierF 中的钳位公式可能包含最大值 7.5f,而不仅是 6)。


====

安装模组:标准版。

解压模块中的存档。在启动器中启用。开始游戏 =)