
奥尔托丢弃经验值
捐赠所有类型物品可获得经验值(不仅限于武器/护甲)。物品价值=经验值(原为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)。
====
安装模组:标准版。
解压模块中的存档。在启动器中启用。开始游戏 =)
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。