骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买霸主CDKEY 购买战帆CDKEY
查看: 25610|回复: 39

[MOD相关] 【mod】城镇粮食减损mod,随管理学加成效果

[复制链接]

8

主题

394

回帖

181

积分

见习骑士

Rank: 3

UID
2227377
第纳尔
4167
精华
0
互助
6
荣誉
3
贡献
0
魅力
2
注册时间
2014-10-9

衣谷首次众筹勋章 霸主正版勋章元老骑士勋章战帆正版勋章

QQ
鲜花(35) 鸡蛋(0)
发表于 2020-4-6 08:29:54 | 显示全部楼层 |阅读模式
本帖最后由 跳舞的花生 于 2020-4-7 13:31 编辑

前言:有汽油反馈城镇粮食容易降低,导致丢兵,故临时做此mod缓解。我打了两天还一直沉浸在跑商、单刷中,有点惭愧

mod功能:根据管理学技能级别,对所拥有城镇的粮食损失进行减损,级别越高减损效果越好。注意是减损不是增加,也就是如果城镇是预期增长粮食的,那么不会加成,只有发生损耗时针对性减损。



城镇粮食库存的计算方式:
通过代码看,城镇的粮食每天变化时根据  
1、驻军
2、繁荣
3、家族政策(HuntingRights,狩猎?还没玩到家族很多功能还不清楚)
4、是否被围城
5、周围村庄(会判断存在的状态加成)
6、城镇建筑物(判断是否有食物生产能力)
7、商店的商品消耗
QQ图片20200406124026.png

但是由于写法问题,导致我只能在外部事件做一些增量回补技巧,即获取粮食损失度并根据管理技能按效果回补粮食存量,不能直接真的修改消耗变少,所以游戏中城镇粮食存量括号里的数字依旧不变,但是每天晚上统计时,mod会根据技能效果减损。

1、减损效果规则公式:管理学技能级别 / 600 + 基础减损百分比,我大致认为300满级,满级效果是50% + 基础减损(可自定义配置,默认10%)
举个栗子:

本来萨哥特今日粮食负增长2.64,拥有该城镇的领主德瑟特的管理技能是163,那么经过减损后今日粮食实际损失则是:2.64 x (1 - (163 / 600 + 10%)) 1.65

QQ截图20200406052207.png

2、城镇被围攻时无法减损,管理学技能为0时无法减损,粮食本身增长时不会有加效果

3、注意:
- 大家可以自己根据需求调整减损基础百分率。默认10,也就是10%
- 可以设置参数只对玩家拥有的城镇有效!!!,默认对所有城镇有效
- 建议测试之后,关掉开发日志!!! - 不用开新档


配置文件(路径TownFoodBuff\ModuleData\config.xml):
<Config>
        <ShowDebugInfo>true</ShowDebugInfo>         <!-- 是否显示debug信息,开发调试用,建议关,设置为false   -->
        
        <OnlyPlayer>false</OnlyPlayer>                                <!-- 城镇食物减损 是否只对玩家有效,设置为false则对其他领主的城镇有效   -->
        <BaseFoodPercent>10</BaseFoodPercent>                <!-- 城镇食物存量减损基础百分比 -->
</Config>


安装方式和其他mod一样,不懂看我之前的帖子也行,http://bbs.mountblade.com.cn/forum.php?mod=viewthread&tid=2057163

TownFoodBuff.zip (5.46 KB, 下载次数: 1926)




看到有汽油想调整,发下修改细节:
第一种方式:
        思路:hook城镇的每日事件,也就是DailyTickTownEvent,将食物存量修正
     关键类Town,Town.Owner是城镇拥有者,Town.FoodChange是城镇食物预期变化(背后指向一个实时计算预期值的函数FoodChangeExplanation),Town.FoodStocks是当前真正的城镇食物库存。

第二种方式:
        思路:hook计算预期值的函数,因为当系统结算时会调用该函数计算食物变化,然后消耗或者增加食物,只要修改了那么也就生效了,同时地图上你点击查看的时候也显示的最新的(库存数字后面括号里的)。
        关键类:DefaultSettlementFoodModel,关键方法:CalculateTownFoodStocksChange,只要增加model,然后重写该类即可。因为是实时计算的,需要注意性能问题,这个函数用的地方很多,比如地图上我们查看城堡信息,这个值会通过这个函数实时计算,还有部分系统行为也会触发。我是两个方式都实现了,但开的是第一种方式。省计算。


评分

参与人数 1荣誉 +1 第纳尔 +10 互助 +1 收起 理由
Aomine Daiki + 1 + 10 + 1 原创内容,值得鼓励!

查看全部评分

鲜花鸡蛋

默默无意义  在2020-4-18 21:10  送朵鲜花  并说:大佬nb
luguokankan  在2020-4-6 16:19  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
a5225354  在2020-4-6 11:18  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

8

主题

394

回帖

181

积分

见习骑士

Rank: 3

UID
2227377
第纳尔
4167
精华
0
互助
6
荣誉
3
贡献
0
魅力
2
注册时间
2014-10-9

衣谷首次众筹勋章 霸主正版勋章元老骑士勋章战帆正版勋章

QQ
鲜花(35) 鸡蛋(0)
 楼主| 发表于 2020-4-6 12:40:56 | 显示全部楼层
temple910518 发表于 2020-4-6 12:08
哇,感谢大佬,请问哪里有MOD制作教程或者例程之类的吗?

之前有人发出mod结构,其他的就是怎么琢磨游戏的接口,功能函数了,我这儿主要用反编译工具能分析出函数功能,但比较累。
QQ图片20200406124026.png

8

主题

394

回帖

181

积分

见习骑士

Rank: 3

UID
2227377
第纳尔
4167
精华
0
互助
6
荣誉
3
贡献
0
魅力
2
注册时间
2014-10-9

衣谷首次众筹勋章 霸主正版勋章元老骑士勋章战帆正版勋章

QQ
鲜花(35) 鸡蛋(0)
 楼主| 发表于 2020-4-7 13:16:21 | 显示全部楼层
templeghost 发表于 2020-4-7 00:57
看楼主的数据是每50点繁荣和20驻军减一点粮食
能不能做个MOD改大点?
或者我们自己改,是哪个dll文件啊 ...

在 TaleWorlds.CampaignSystem里,我编辑下帖子,把相关代码细节写写

8

主题

394

回帖

181

积分

见习骑士

Rank: 3

UID
2227377
第纳尔
4167
精华
0
互助
6
荣誉
3
贡献
0
魅力
2
注册时间
2014-10-9

衣谷首次众筹勋章 霸主正版勋章元老骑士勋章战帆正版勋章

QQ
鲜花(35) 鸡蛋(0)
 楼主| 发表于 2020-4-7 13:39:55 | 显示全部楼层
高奉孝 发表于 2020-4-6 14:57
大佬呢个政策要怎么改啊,我想把狩猎的食物+2改成5

按我帖子最后的第二种思路,重写那部分代码即可
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-12-20 01:05 , Processed in 0.107850 second(s), 22 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表