一只双眼皮 发表于 2020-11-28 11:21

【2020.11.28】Dawn Of Man 人类黎明 1.7.0 圣火令mod《封建v2.5稳定版》::16倍速,镜头高度,任务指派优化::

本帖最后由 一只双眼皮 于 2020-12-9 00:12 编辑

=================================
2020.12.08圣火令mod《封建v2.5》
已知机制:Unity引擎游戏,必须先放具有Structure属性的建筑物,才能使这个类及依附物生效,否则会报错退出。
因此:游牧模式开局,第一个建筑不能放矿井、站台等不具备Structure属性的建筑,建议先搭个火堆或房子的架子,哪怕不盖起来都行。
——从Stranded Deep、GreenHell 来的老玩家就不用我再提醒了。凡Unity必如此
已知机制:超过4倍速后(如原版的8倍速),远程打敌人会出现不掉血的现象。
这是Unity引擎的响应效率决定,因此最高给16倍速日常发展,来敌后吹角自动会切到4倍速。

=================================
最后更新:2020.12.08圣火令mod: 《封建 v2.5稳定版》
适用游戏版本:1.7
基于3dm-1.7英文版制作,可用于 Version 1.7 released | Cheese Update 官方正版
3dm本体链接:https://bbs.3dmgame.com/forum.ph ... 6orderby%3Ddateline
mod下载地址:https://pan.baidu.com/s/1gjh0ZPw87SJR0HHqv5gMnQ
提取码:**** Hidden Message *****
因要开始工作,未来上线会少,不会经常查看回复。有事站内信
=================================

mod缘起及命名:为实现拉起长城宅着发展,“封闭”式“建设”,mod起名为《封建》。
因此一切修改都是朝着起一圈墙,安心发展来制作的。
=================================
功能汇总:
★1、点科技无前置要求,不限时代;
★2、点科技需要的点数降低一半;
★3、建筑无损;
★4、不受时代限制解锁GUI动作(含冶炼、动作条);
★5、不受时代限制解锁主面板按钮(含种植等);
★6、矿井无限资源;
★7、每次钓鱼满包回家;
★8、每次挖泥满包回家;
★9、双倍泥土刷新速度;
★10、改1键为16倍速;
★11、兽栏过冬按动物只数储备食物;
★12、兽栏过冬按动物只数储备水;
★13、商人不空闲可点击;
★14、商人远程响应;
★15、直接在城市里刷流民;
★16、站台放置完全不受限;
★17、种植园允许重叠建筑,可放在水边;
★18、墙放置取消实体限制;
★19、建筑去除地型限制,允许重叠农田等;
★20、吹角后自动改速到4x;
★21、桥解除30码长度限制,解除附近10码内有其他桥限制;
★21、硬核模式下解除暂停限制;
★22、建筑速度10倍(拆解速度正常未改);
★23、水车上岸;
★23、水车上岸后自动寻找其他建筑方向;
★24、双倍最大镜头高度,这回可以观察远景了;
★25、任务指派系统大优化。(去除原版冗余代码,改变优先级)
=================================
以下是修改代码公开,适用于有动手能力的玩家。
经测兼容《大平原》等场景脚本,很可能不兼容1块肉变99那种BT

=================================
isUnlockable   ★1、点科技无前置要求,不限时代。 替换代码为
return this.getKnowledgeAmount() >= techType.getKnowledgeRequired();
getKnowledgeRequired   ★2、降低科技需要的点数到1/2      RoundToInt( *0.5f);
decayCondition★3、建筑不随时间流逝耐久,受敌攻击无损decay(amount * 0f)
guiModifier.setEnabled ★4、解锁GUI动作(含冶炼、动作条) 在第二行增加代码this.mEnabledState = EnabledState.Enabled;
addMainMenuButton ★5、解锁主面板按钮(含种植等)
element = new GuiModifier(element, false);
flag = false; 共四个,全改为true。
因涉及编译器生成,需用IL指令修改 37 40 58 61 行ldc.i4.0 全改 ldc.i4.1
BeingStateMiningUnderground.tick ★6、矿井无限资源   删除行value.decreaseResourceAmount();
bankHasFish ★7、每次钓鱼满包回家    return bank.getFishAmount() > 0.667f;
bankHasMud★8、每次挖泥满包回家    return bank.getMudAmount() > 0.667f;
BankManager.tick ★9、双倍泥土刷新时间   2400改1200
GameGuiManager.updateSpeedInputs ★10、更改速度快键,1键原为1倍速,现改为16倍速,其他键不变
未知原因需要通过IL改   13行1 改 16
getRequiredAnimalFood      ★11、兽栏过冬按动物只数储备食物
getRequiredAnimalWater    ★12、兽栏水储备               两处地址的 min 都改为 max
Trader.onSelected ★13、商人不空闲可点击 (直接替换成下方代码)

Trader trader = this.mTraderSaveState.ParentTrader.Value;
if (trader == null)
{
      trader = this;
}
if (!trader.isDone())
{
      TransientSingleton<GameGuiManager>.CurrentInstance.requestShowTradePanel(trader);
}

AiRuleGoSettlement.run ★14、商人远程响应铜器时代前走到第一个建筑后站定,铜器时代远距离站定

float num2;
if (TransientSingleton<KnowledgeManager>.CurrentInstance.getSuperEra() == SuperEra.MetalAge)
      {
      num2 = firstEntity.getMaxHalfSize() + 102f;
      }
else
      {
      num2 = firstEntity.getMaxHalfSize() + 2f;
      }

SettlementManager.spawnMigrantGroup ★15、直接在城市中刷流民          Vector3 行及之前代码改为

RandomGenerator instance = Singleton<RandomGenerator>.Instance;
Structure firstEntity =TransientSingleton<EntityManager>.CurrentInstance.getFirstEntity<Structure>(EntityFlags.Fireplace);
if (firstEntity == null)
{
      firstEntity = TransientSingleton<EntityManager>.CurrentInstance.getFirstEntity<Structure>(EntityFlags.Restplace);
}
if (firstEntity == null)
{
      firstEntity = TransientSingleton<EntityManager>.CurrentInstance.getFirstEntity<Structure>();
}
Vector3 a = firstEntity.getPosition();

EntityManager.isValidPlatformLocation ★16、站台放置删除 if (!flag) false; 到最后一行 return true之间的代码
isValidPlantLocation★17、种植放置

Bounds bounds = new Bounds(position, Constants.Vector3One * size);
new Bounds(bounds.center, bounds.size + Constants.Vector3One * 2f);
return !this.intersectsPlant(bounds) && GameUtil.floorPosition(position).y > TransientSingleton<TerrainManager>.CurrentInstance.getWaterHeight()-1.5f;

isValidWallLocation★18、墙放置

Bounds bounds = new Bounds(position, Constants.Vector3One);
new Bounds(bounds.center, bounds.size + Constants.Vector3One * 2f);
return !this.intersectsBlockedAiNodes(bounds) && !this.intersectsWall(bounds) && !this.intersectsOtherDoors(null, bounds) && !this.intersectsBridge(bounds);

isValidBuildableLocation ★19、建筑去除部分限制(修改项很多,建议直接复制替换整个方法的代码)

using System;
using System.Collections.Generic;
using MadrugaShared;
using UnityEngine;

namespace DawnOfMan
{
      public partial class EntityManager : TransientSingleton<EntityManager>, SelfSerializable
      {
                public bool isValidBuildableLocation(BuildableType buildableType, GameObject structureObject, bool flipped, List<int> blockedIndices)
                {
Bounds cellBounds = new Bounds(structureObject.transform.position, Constants.Vector3One);
StructureType structureType = buildableType as StructureType;
if (structureType != null)
{
      cellBounds = Structure.getCellBounds(structureObject, structureType, flipped);
}
float num = TransientSingleton<TerrainManager>.CurrentInstance.getWaterHeight() -1f;

Vector3 center = cellBounds.center;
float num2 = 20f;
Vector3 terrainSize = TransientSingleton<TerrainManager>.CurrentInstance.getTerrainSize();
if (center.x < num2 || center.z < num2 || center.x > terrainSize.x - num2 || center.z > terrainSize.z - num2)
{
      return false;
}
Vector3 vector = GameUtil.floorPosition(center + cellBounds.extents);
Vector3 vector2 = GameUtil.floorPosition(center - cellBounds.extents);
Vector3 vector3 = GameUtil.floorPosition(center + new Vector3(cellBounds.extents.x, 0f, -cellBounds.extents.z));
Vector3 vector4 = GameUtil.floorPosition(center + new Vector3(-cellBounds.extents.x, 0f, cellBounds.extents.z));
float num3 = Mathf.Min(Mathf.Min(vector.y, vector2.y), Mathf.Min(vector3.y, vector4.y));
float num4 = Mathf.Max(Mathf.Max(vector.y, vector2.y), Mathf.Max(vector3.y, vector4.y));
if (num3 < num)
{
      return false;
}
if (num4 - num3 > 1.5f)
{
      return true;
}
if (!buildableType.hasAnyFlag(EntityFlags.Gate) && this.intersectsWall(cellBounds))
{
      return false;
}
Bounds bounds = cellBounds;
bounds.extents += Constants.Vector3One * 0.5f;
if (this.intersectsPlant(bounds))
{
      return true;
}
if (this.intersectsUnbuiltTransports(cellBounds))
{
      return false;
}
if (this.intersectsBlockedAiNodes(cellBounds))
{
      return false;
}
Bounds bounds2 = cellBounds;
bounds2.extents += Constants.Vector3One;
if (TransientSingleton<TerrainManager>.CurrentInstance.treeIntersection(bounds2))
{
      return true;
}
EntityFlags exclusionFlags = buildableType.getExclusionFlags();
if (exclusionFlags != EntityFlags.None)
{
      Vector3 position = structureObject.transform.position;
      Structure structure = this.findNearestStructure(position, exclusionFlags);
      if (structure != null && Vector3.Distance(structure.getPosition(), position) < buildableType.getExclusionDistance())
      {
                return true;
      }
}
return true;
                }
      }
}

SettlementManager.setAlertLevel★20、吹角自动改速到4x   在声音播放代码下加内容
TransientSingleton<TimeManager>.CurrentInstance.setTimeScale(4f);
PlacedBridge.refresh ★21、桥解除30码限制,解除附近有桥限制min(num,30)改为num 删除 && num>30 多桥同列改true
GameModeHardcore.isPauseAllowed ★21、硬核模式,解除暂停限制。
Buildable.increaseBuildProgress ★22、建筑速度10倍
isValidWaterBuildableLocation ★23、水车上岸(直接复制替换代码)

Bounds cellBounds = Structure.getCellBounds(structureObject, (StructureType)buildableType, false);
Bounds bounds = cellBounds;
bounds.extents += Constants.Vector3One * 0.5f;
if (this.intersectsPlant(bounds))
{
      return true;
}
if (this.intersectsBlockedAiNodes(cellBounds))
{
      return false;
}
cellBounds.extents += Constants.Vector3One;
if (TransientSingleton<TerrainManager>.CurrentInstance.treeIntersection(cellBounds))
{
      return true;
}
if (this.intersectsDoors(structureObject, blockedIndices))
{
      return true;
}
if (!TransientSingleton<EntityManager>.CurrentInstance.getNavigationGraph().getNode(structureObject.transform.position).isActive())
{
      return false;
}
BankRef bankRef = TransientSingleton<BankManager>.CurrentInstance.findNearest(structureObject.transform.position);
if (bankRef != null)
{
      Vector3 normal = bankRef.getBank().getNormal(structureObject.transform.position);
      rotation = Quaternion.LookRotation(normal, Constants.Vector3Up).eulerAngles.y;
}
return true;

updateBuildableValidity★23、水车上岸寻址地面高度(配合上岸)。改原79行为

y = TransientSingleton<TerrainManager>.CurrentInstance.getWaterHeight();
position.y = Mathf.Max(position.y, y);

CameraModeInteractive.update ★24、设置最大镜头高度 原 8 30 改860可观察全景
EntityManager.assignTask ★25、任务指派系统优化          原成年人优先处开始改为
                if (human2.getAge() == Age.Young)
                {
num2 -= 33f;
                }
                if (human2.getAge() == Age.Old)
                {
num2 -= 25f;
                }
删除冗余的一次运输工具验证 Transport currentTransport = human2.getCurrentTransport();

=================================

一只双眼皮 发表于 2020-11-28 12:15

本帖最后由 一只双眼皮 于 2020-11-28 14:01 编辑

鉴于发现部分人非法售卖作品,代码不再发布。有兴趣交流代码的私信找我。

caodjj 发表于 2020-11-28 12:25

///////////////////////////

ljjwy168 发表于 2020-11-28 13:25

希望能种树 能修改桥的长度 建造跨海大桥 能修改地形 隧道什么的 小人饥渴度增加

一只双眼皮 发表于 2020-11-28 13:47

本帖最后由 一只双眼皮 于 2020-11-28 13:49 编辑

ljjwy168 发表于 2020-11-28 13:25
希望能种树 能修改桥的长度 建造跨海大桥 能修改地形 隧道什么的 小人饥渴度增加 ...

原版就可以种树啊。打上mod后在山上也可种。因为人类黎明是一格一格的设定,不像放逐是圈一块地放护林,随机生长。虽然能种,美观度一般。
桥长有限制吗?回头我造个试试。

隧道放逐之城 的产物。放逐之城是独立作品,不依赖引擎。人类黎明这种属于unity引擎制作的游戏。引擎本身只具备teleport机制(直接传送到另一端)
不确定能否实现放逐里的效果,研究研究试试。——加入在研

也许能做到让小人在空地上行动的速度快于田间、建筑间。
可能导致的问题:额外增加地型验证后,游戏会变卡顿。——加入在研

原版饥渴消耗速度是高了还是低了?目前觉得比较正常啊。你的想法?

yoyotv323 发表于 2020-11-28 13:49

支持一下

gu0x 发表于 2020-11-28 13:57

6666666666666666

ljjwy168 发表于 2020-11-28 13:59

一只双眼皮 发表于 2020-11-28 13:47
原版就可以种树啊。打上mod后在山上也可种。因为人类黎明是一格一格的设定,不像放逐是圈一块地放护林, ...

我意思是树木生长太慢 而且只在初始位置长树 我想种树砍伐得到树干和树枝
原版种果树只给吃的
桥是不能建造太长的 有的地图有大湖 小人要不绕路 要不就是直接游泳
我想盖奇观 但是这游戏巨石太远 跑远了 小人就饿死渴死   AI太傻 要不就是可以造巨石 要不就是属性上把小人的饥渴加大点 不那么容易饿死 渴死

一只双眼皮 发表于 2020-11-28 14:03

ljjwy168 发表于 2020-11-28 13:59
我意思是树木生长太慢 而且只在初始位置长树 我想种树砍伐得到树干和树枝
原版种果树只给吃的
桥是不能建 ...

让我想想。再看看代码。
从引擎角度,部分功能可能可以实现。
运巨石属于游戏机制设定。有问题的是AI多人拉绳,如果主拉的人吃喝回家,其他人也会离开,会先尝试解决这个问题。(在我看来属于bug)

gu0x 发表于 2020-11-28 14:11

问一下,问啥我进去黑屏呢

gu0x 发表于 2020-11-28 14:20

不收地形限制咋改?

一只双眼皮 发表于 2020-11-28 14:22

gu0x 发表于 2020-11-28 14:11
问一下,问啥我进去黑屏呢

1、有用其他修改? assembly的修改除了仓库格子外,其他都是非侵入式的。针对过程的修改一般不会导致黑屏。但不保证兼容50格100肉那种...

2、版本?确定是1.7 ?可能无法向下兼容。

3、进游戏就黑屏?还是进存档时黑?如果进存档时黑,开个新档试一下。如果进游戏就黑,大概率版本不对。

ljjwy168 发表于 2020-11-28 14:26

一只双眼皮 发表于 2020-11-28 14:03
让我想想。再看看代码。
从引擎角度,部分功能可能可以实现。
运巨石属于游戏机制设定。有问题的是AI多人 ...

要不直接修改为可以人工造巨石 哪怕100石头一个巨石呢
以前那个巨古老的天启MOD是可以人工造 解决了这个BUG

gu0x 发表于 2020-11-28 14:27

一只双眼皮 发表于 2020-11-28 14:22
1、有用其他修改? assembly的修改除了仓库格子外,其他都是非侵入式的。针对过程的修改一般不会导致黑屏 ...

一进游戏就黑,有游戏鼠标指针,确认版本是1.7版本的,还原EN也没有用,进去还是黑屏,还原自己修改的ass文件还是启动黑屏

gu0x 发表于 2020-11-28 14:37

一只双眼皮 发表于 2020-11-28 14:22
1、有用其他修改? assembly的修改除了仓库格子外,其他都是非侵入式的。针对过程的修改一般不会导致黑屏 ...

找到原因了,我重新下了一遍3大妈的版本,可以了

一只双眼皮 发表于 2020-11-28 14:47

gu0x 发表于 2020-11-28 14:37
找到原因了,我重新下了一遍3大妈的版本,可以了

啥? 正版不能用? 一般3dm打包的都可以用在正版上啊

一只双眼皮 发表于 2020-11-28 14:50

gu0x 发表于 2020-11-28 14:20
不收地形限制咋改?

私信

一只双眼皮 发表于 2020-11-28 14:52

ljjwy168 发表于 2020-11-28 14:26
要不直接修改为可以人工造巨石 哪怕100石头一个巨石呢
以前那个巨古老的天启MOD是可以人工造 解决了这个 ...

已记录。回头研究一下。等下接小孩放学,有空再上来。

刘觉主 发表于 2020-11-28 16:20

666666666666666666666666666

124799548 发表于 2020-11-28 18:18

copper_orecopper_orecopper_orecopper_orecopper_orecopper_ore

ws459765 发表于 2020-11-28 18:40

asda asd asd

gu0x 发表于 2020-11-28 20:16

一只双眼皮 发表于 2020-11-28 14:50
私信

害,我原来用的某侠

、____往事不回 发表于 2020-11-28 21:08

66666666666

'lp[lkol 发表于 2020-11-28 21:20

6666666666

gu0x 发表于 2020-11-28 21:23

楼主啥时候回来啊!等着联系呢:)

老卢来了 发表于 2020-11-28 22:40

111111111111111111111

blowaa 发表于 2020-11-28 22:46

谢谢楼主

旧衣服与房间号 发表于 2020-11-29 18:28

ddddddddddddd

孤翼之凤 发表于 2020-11-29 20:53

太赞了2333

woslien01 发表于 2020-11-29 23:06

感谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【2020.11.28】Dawn Of Man 人类黎明 1.7.0 圣火令mod《封建v2.5稳定版》::16倍速,镜头高度,任务指派优化::