【研究】关于殖民地总资产的研究
rimworld吧
全部回复
仅看楼主
level 11
user19990313 楼主
贴吧里有人问殖民地总资产怎么计算、怎么贬值资产(防海盗),想想开游戏慢慢测试太麻烦,于是干脆祭出ILSpy...
...我们一点一点分析[滑稽]这可是源码级的研究哦[滑稽]
2017年04月05日 14点04分 1
level 11
user19990313 楼主
首先发一张标出所有重点的图片
2017年04月05日 14点04分 2
level 12
[喷]我刚上游戏把东西试完的发了个帖子,用图文表述,让你能看懂就看见你这个贴[喷]
2017年04月05日 14点04分 4
不过既然你有这么详细的研究[滑稽]这个重大任务就给你了
2017年04月05日 14点04分
level 13
[阴险]直播?搬个小板凳,等更新。
2017年04月05日 14点04分 5
level 11
user19990313 楼主
绿框先跳过不讲[滑稽]悬念
接下来是红框:
foreach (Pawn current in this.map.
mapPawns.FreeColonists){}
什么是FreeColonists呢?再翻代码可知这个变量
是你殖民地内所有殖民者的列表,
不包括囚犯,更不包含尸体
接下来就是计算列表里每一个Pawn(小人)身上装备和衣服的价值,加进殖民地物品价格里
2017年04月05日 15点04分 7
加油,RimWorld中文维基改版中,到时候可否收录你的研究结果?
2017年04月05日 15点04分
回复 风之起灵 :当然可以,记得注明出处[太开心]等全部更完一起收录吧[太开心]
2017年04月05日 15点04分
也就是用prison labor的囚犯干活可以压总资产?
2021年07月08日 03点07分
level 11
user19990313 楼主
色情信息吞贴?什么鬼[怒]
2017年04月05日 15点04分 8
@残暴荒淫无度 好想侵犯度娘呀[滑稽]
2017年04月06日 11点04分
圖片太黃了[滑稽]
2017年04月06日 14点04分
level 11
user19990313 楼主
好吧再发一遍[汗]
首先看蓝框的内容:
List list = this.map.listerThings.ThingsInGroup(
ThingRequestGroup.HaulableAlways);
也就是说计算殖民地物品时统计的是Haulable Always分类的物品。
那么什么是Haulable Always呢?简单来说就是你地图上所有的物品,
不管是你的玻璃钢,还是敌人掉落的武器,
还是货仓坠毁掉在地图上,
不管是否禁用,不管是否在贮存区里(这个索引与贮存区无关),都会被计算
2017年04月05日 15点04分 9
level 11
user19990313 楼主
那么物品计算基本结束
接下来是橙色框,计算建筑
if (thing2.Faction
== Faction.OfPlayer){}
即只有属于玩家的建筑才会被计算,地图生成的休眠仓和未占领的墙都不算(占领就是命令里的那个小红旗)
没什么可说的
2017年04月05日 15点04分 10
怎么算占领,居住区内吗[咦]
2017年04月06日 03点04分
回复 卧槽翼马 :地图生成的建筑,比如远古遗迹的墙,你点一下,下面工具栏有一个小红旗“占领”选项,说明这不是你的派系建造的,当然不是你的(而且不能修理);但是你如果点了占领,这个墙就是你的了,计算进资产,划上居住区也可以修理了
2017年04月06日 12点04分
level 11
user19990313 楼主
现在回到被略过的绿框
if(!thing.Position.Fogged(thing.Map)){}
这是相当重要的一条语句,证明了 地图迷雾下的物品不会被算在殖民地资产内!
这意味着如果你不打开远古遗迹,你就永远不用担心里面的魔鬼素会招来海盗,以及…[滑稽]
2017年04月05日 15点04分 11
回复 rsxx4488 :不知道战争迷雾是动态fog还是override 地图绘制函数,所以我也不知道[委屈]不太像是前面一种,因为记得袭击不会刷在迷雾里;如果是,敌人把你的银石抱走你也不知道[滑稽]真·资产缩水[滑稽]
2017年04月06日 12点04分
如果有战争迷雾MOD呢?视野范围外的物品不会计算在资产内吗
2017年04月06日 03点04分
level 11
user19990313 楼主
…以及一些错误用法[滑稽]
在展示之前,我在心中默念:本次使用开发者模式纯属掩饰功能,不赞成使用开发者模式作弊,不赞成大家效仿以下内容!(记某次没读吧规的往事[不高兴]
如图,我找了一个远古遗迹,已经打开并清掉了敌人(19个魔鬼素烧了…演示效果不太明显);现在用钢铁墙堵住缺口,现在遗迹是封闭的了,不难发现殖民地价值现在还基本不变(多了1是因为钢造了墙升值了[你懂的]
现在是用开发者工具里的refog map重新生成地图迷雾…可以看到这个遗迹因为内部无法到达而被fog,此时再查看财产就会发现遗迹里的钢、铀、黄金的价值都没有算在里面,总资产减少了,同时也验证了上面“出现在地图中的物品就算资产”的结论
最后再次默念:本次使用开发者模式纯属掩饰功能,不赞成使用开发者模式作弊,不赞成大家用refog藏私房钱!
2017年04月05日 16点04分 12
手机上传的图片就跟毛玻璃一样…哪天再补图吧[不高兴]
2017年04月05日 16点04分
人员列表是什么?
2017年04月05日 19点04分
回复 hdw727513118 :你是说屏幕上方的头像栏?这是原版自带的,右下角可以打开
2017年04月06日 12点04分
回复 user19990313 :不是,我说的是下面管制和方案之间的那个人员
2017年04月06日 12点04分
level 11
user19990313 楼主
基本原理介绍完毕,下面是更多细节,以及如何合法地利用游戏机制压缩资产(非作弊)[滑稽]
2017年04月05日 16点04分 13
level 11
user19990313 楼主
首先是另一张图,关于蓝框里ThingsInGroup函数的参数ThibgRequestGroup
2017年04月05日 16点04分 14
level 11
user19990313 楼主
首先注意到的就是HaulableAlways和紧邻的HaulableEver,这两个元素都表示可搬运的Thing,有什么区别呢?
ThingDef类里有一个成员变量:
public bool EverHaulable{
get{
return this.alwaysHaulable && this.designateHaulable;}}
可以看到这里出现了alwaysHaulable和另一个Haulable(designate翻译过来叫“指定”)
所以HaulableEver是指东西能不能被合理搬运,禁止互动会使designateHaulable为false,最终EverHaulable为false,不可搬运(到你的仓库里)
然而alwaysHaulable是不受禁止互动影响的,简单来说建筑的这项值为false而物品都为true,换句话说HaulableAlways过滤剩下的是所有物品,包括各种块堆(虽然价格为0)
所以最终计算的是所有的(地上的)物品,禁止互动和取消贮存区是没有用的[滑稽]
2017年04月05日 16点04分 15
不行了我要去睡觉了,明晚再更[滑稽]
2017年04月05日 16点04分
技术贴,坐等更新,学习了
2017年04月05日 23点04分
补充,designateHaulable不是物品禁用变量,而是命令菜单里的P键搬运指定,禁用与ListerHaulables.Notify_Unforbidden(t)和ListerHaulables.Notify_Forbidden(t)有关,禁用不对地图物品列表有任何影响
2017年04月07日 13点04分
补充,本楼代码敲错了,&&应为||,同时物品的alwaysHauable都为true
2017年04月07日 14点04分
level 9
[乖]
2017年04月05日 23点04分 17
1 2 3 尾页