1.15:修订间差异

来自RustedWarfare Wiki
添加的内容 删除的内容
无编辑摘要
无编辑摘要
第348行: 第348行:
<td>
<td>
'''Rusted Warfare - Alpha - v1.15p5'''
'''Rusted Warfare - Alpha - v1.15p5'''

<<  注意,游戏的测试版一旦更新到API 30后将无法降级到API 29,因此此次更新将先作为Alpha进行测试,您需要根据需求选择性地加入Alpha测试  >
<<  注意,游戏的测试版一旦更新到API 30后将无法降级到API 29,因此此次更新将先作为Alpha进行测试,您需要根据需求选择性地加入Alpha测试  >
*添加Android存储访问框架(Storage Access Framework,简称SAF)支持,即使游戏更新到Google Play要求的API30,SDK模组作者们也能愉快地继续制作mod
*添加Android存储访问框架(Storage Access Framework,简称SAF)支持,即使游戏更新到Google Play要求的API30,SDK模组作者们也能愉快地继续制作mod

2022年1月16日 (日) 21:45的版本

1.15版本的更新主要以Mod特性为主,暂时没有添加新单位。

1.15
测试版更新
当前类型 测试版
首次更新时间 2021-07-15 10:27:34
最后更新时间 2021-07-18
内部版本代码 1.15p4 160
1.15p3 159
1.15p2 158
已发布平台 Android、Steam

1.15p1

1.15p1是Rusted Warfare在1.15版本中的首次公开更新,仅支持PC版本

1.15p1更新日志

Rusted Warfare Beta - v1.15p1

• 在单人游戏遭遇战的高级选项和多人游戏中, 可以单独为某个玩家设置游戏选项, 例如:

    • 现在可以为每个AI玩家设置不同的难度等级。

    • 不同的玩家可以有不同的初始单位, 可以用来选择模组中的派系。

    • 可以为每个玩家分别覆盖不同的单位颜色。

   

• 为Android版添加"保存到内部存储"的选项, 让存档/模组/自定义地图功能可以在不授予存储权限的情况下正常运作。请注意, 在卸载时游戏时内部应用存储会被Android系统一并删除。

• 可以从模组设置界面中删除或导出模组。

• 可以从自定义地图界面导入新地图。

• 电脑版:添加实验性的-teamshaders命令开关。开启后将使用着色器为队伍颜色着色, 减少含大图片的模组的内存占用以及第一次应用着色时的卡顿。


• 添加类似于TA(横扫千军)、C&C(命令与征服)中的可编写模组的流式资源系统。

    • [core]streamingCost

       • 类似于价格, 但该单位在建造队列中或正在建造时需要消耗资金。若在建造该单位时资源耗尽, 则建造过程或建造队列将暂停。

    • [action]streamingCost

       • 类似于价格, 但该动作在队列中时需要消耗资金, 若在该动作在队列时资源耗尽, 排队将暂停。Flags可以用于暂停或解除触发器的暂停。类似于价格, 但在这个单位在建造队列或建造时支付费用。 如果在建造过程中资源耗尽, 建造或排队将暂停。标志可以用来暂停和解除触发器的暂停。

    • [core]switchPriceWithStreamingCost:boolean/[action]switchPriceWithStreamingCost:boolean

       • 快捷方式, 将streamingCost设置为price的值并清除价格。

       • 在all-units.template中增加[core]switchPriceWithStreamingCost, 以快速将mod切换到流式资源。

       

• 大幅修改动态逻辑布尔值, 新增动态数字、单位、字符串类型

    • 与其使用"autoTrigger: if self.energy(greaterThan=100)", 不如用"autoTrigger: if self.energy > 100"

   

• 逻辑布尔值与数字的数学运算: - + * /

    • 示例:"autoTrigger: if 2*self.energy + parent.energy-10 > 50"

   

• 动态文本, 例如: [action]text: 队伍:%{ self.teamName } 还剩 %{ parent.resource('gold') } 颗黄金。

    • 动态文本支持已经被添加到[action]text, [action]description, [action]setUnitMemory, [action]showMessageToPlayer, [action]showMessageToAllPlayers, [action]showMessageToAllEnemyPlayers, [action]showQuickWarLogToPlayer, [action]showQuickWarLogToAllPlayers, [action]debugMessagee中。

   

• 增加了对多行的支持, 可以在ini的任何key上使用3个引号来开始和结束。示例:

copyFrom:""" ROOT:a.ini。 ROOT:b.ini, ROOT:c.ini """

• 添加 [attack]shootDelayMultiplier, 默认为1

• 添加 [action]setUnitStats, 允许动态地改变一些选定的字段而无需转换。 支持=/+=/-=,支持动态数字或逻辑. 可修改的字段有:maxHp, hp, maxShield, shield, shieldRegen, maxEnergy, energy, armour, mass, shootDelayMultiplier, moveSpeed, maxAttackRange.。示例: setUnitStats: maxHp+=self.energy+100, hp+=50, shieldRegen=0.5

• 添加 [action]resetUnitStats (布尔值)

• 添加 [action]convertTo_keepCurrentFields - 转换时不要更改这些字段, 配合setUnitStats食用更佳 (允许的字段: maxHp, maxShield, shieldRegen, maxEnergy, armour, mass, shootDelayMultiplier, moveSpeed, maxAttackRange.)

• 添加 [action]whenBuilding_temporarilyConvertTo_keepFields - 使用whenBuilding_temporarilyConvertTo或whenBuilding_temporarilyConvertFrom时请勿更改这些字段,配合setUnitStats食用更佳。

• 修复了whenBuilding_temporarilyConvertTo在单位类型之间闪烁的问题。

• 修复了沙盒模式中重载单位时临时标签被重置的问题。

• 修复了沙盒模式所有标签栏都会显示触发器调试的问题。


• 添加了[core]defineUnitMemory

    • 可为自定义存储给每个单位创建独一无二的变量。

       • 示例1:

       [core]defineUnitMemory: boolean nukeActive, boolean laserReady, float experience, unit nextTarget, unit homeBase, string customText

       • 示例2:

[action]setUnitMemory: """ customText=memory.customText+'hello', nukeActive=true。 experience=experience+attacking.hp, nextTarget=self.attacking.nearestUnit(withinRange=300, withTag='x', relation='enemy') """

• 新的逻辑布尔函数:readUnitMemory(name:string, type:string{boolean,unit,float,string}, [default])

    • 示例:parent.readUnitMemory('nukeCountdown', type='float') .如果该单位的存储不存在该数据或保存的数据类型是错误的, 则使用默认值。

   

• 新增逻辑布尔函数:memory(name), 它是读取当前defineUnitMemory类型的单位的快捷方式。

• 修复同一张图片使用不同模式时teamColoringMode的问题。

• 新的资源快捷方式。示例:self.resource.credits和self.resource('credits')


• 新增逻辑布尔/数字/单位/字符串函数

    • self.maxHp()

    • self.teamId() - 返回当前单位的队伍id。在单位和一些标记物上可用。 //译者注:原文疑似有误,此处已纠正

    • self.x() - 返回地图上的x坐标值。在单位和标记物上可用。

    • self.y() - 返回地图上的y坐标值。在单位和标记物上可用。

    • self.z() - 返回地图上的z坐标值。在单位和标记物上可用。

    • self.dir() - 返回该单位的朝向。在单位和标记上可用。

    • self.priceCredits() - 返回该单位的费用。

    • distance(x1,y1,x2,y2) - 计算两点之间的距离。比distanceSquared慢。

    • distanceSquared(x1,y1,x2,y2) - 更快地计算两点之间的距离, 但结果是平方。 //译者注:更适用于比较两点距离

    • distanceBetween(unit1, unit2) - 示例: distanceBetween(self, activeWaypointTarget) < 100

    • distanceBetweenSquared(unit1, unit2) - 比distanceBetween用起来快一点点...

    • int(x) - 移除一个数字的小数部分. 示例:int(4.2) == 4

    • select(bool, textA, textB) - 若为true则返回文本A, 否则返回文本B。

    • debug(logicBoolean) - 返回一个文本字符串, 帮助解释这个结果是怎么来的。可以看到嵌套逻辑、比较和运算符。

    • str(x) - 将数字、单位或布尔值转换成字符串. 示例:str(self.energy)+'x'=='100x'

    • substring(text,start,end) - 示例:substring('hello',0,2) == 'he'

    • length(string) - 以数字形式返回文本长度。

    • squareRoot(num) - 求一个数字的平方根。

    • min(num, min2) - 返回最小数, 示例: damage = min(self.hp, self.energy)

    • max(num, min2) - 返回最大值, 示例: max(5, 10) == 10

    • createMarker(x,y,[height],[teamId],[dir]) - 返回一个临时的单位标记。可以保存在自定义存储中或作为移动命令的参考, 等等。不影响游戏状态。如果不再被引用, 则自动删除。

    • globalSearchForFirstUnit(withTag=x, relation) - 返回找到的第一个与筛选器匹配的单位。

    • null/nullUnit - 一个空的/缺失的单位。在需要比较时很有用, 示例:self.customTarget2 != null

• 新的逻辑布尔/单位参照体系

    • 支持函数之间的链接, 示例: self.attachment(withTag='x').lastDamagedBy.getAsMarker()

    • self - 这是当前单位的现有参照(在以前的版本中是唯一选项)。示例:autoTrigger: if self.energy > 100

    • attachment([slot], [withTag])

    • attacking - 单位正在攻击的当前目标,不一定是当前的路径点目标。

    • lastDamagedBy - 攻击此单位的最后一个单位

    • parent - 父级 - 运输单位或附带单位的父级。 示例:autoTrigger: if parent.energy > 100

    • activeWaypointTarget 当前动作的路径点目标。包括攻击、运输、修复等动作。

    • customTarget1 - 自定义存储, 默认为建造此单位的单位。

    • customTarget2 - 自定义存储, 默认为空。

    • nearestUnit(withinRange=500, withTag='x', relation='any') - 按条件查找一个单位,该代码运行较慢,不建议在autoTrigger中使用

    • getAsMarker() - 立即在单位的当前位置创建临时标记。标记创建速度快并在不被引用时自动移除. 它不会链接到任何单位,并且在单位死亡时仍然存在,在创建源移动时仍然保持不变。

    • getOffsetAbsolute([x],[y],[height]) - 返回带有绝对偏移量的标记。

    • getOffsetRelative([x],[y],[height],[dirOffset]) - 返回带有相对偏移量的标记。

    • thisActionTarget - 在[action_NAME] / [hiddenAction_NAME]中使用,以获得动作的目标、位置、自动触发事件源等等。会根据动作触发源设置为单位、标记或空值。注意:当用于界面文本之类的字段时它将始终为空,因为该值只在动作事件上有效。如果你想让它显示在界面上,请将该值保存到自定义存储中。

    • thisActionTarget - 示例:fireTurretXAtGround: mainGun (thisActionTarget==带地面位置的标记)

    • autoTriggerOnEvent: tookDamage (thisActionTarget==造成伤害的单位)

    • autoTriggerOnEvent: killedAnyUnit (thisActionTarget==被摧毁的单位)

    • autoTriggerOnEvent: transportingNewUnit (thisActionTarget==被运输的单位)

    • autoTriggerOnEvent: transportUnloadedOrRemovedUnit (thisActionTarget==被卸载的单位)

    • autoTriggerOnEvent: queuedUnitFinished (thisActionTarget==被建造的新单位)

    • autoTriggerOnEvent: touchTargetSuccess (thisActionTarget==碰到的目标)

    • alsoTriggerAction: x (thisActionTarget==与原动作相同)

    • [turret]onShoot_triggerActions: x  (thisActionTarget==被击中的目标)

    • takeResources_triggerActionIfAnyCollected: x (thisActionTarget==带有资源的目标)

    • addWaypoint_triggerActionIfMatched: x (thisActionTarget == 移动动作的标记/攻击的目标等。注:如果只是想搜索,请使用addWaypoint_maxTime: 0)

• 向所有单位添加了customTarget1/customTarget2。可用于存储对另一个单元的引用。CustomTarget1默认为建造该单位的可移动单位或建筑物。适用于航空母舰、步兵小队、传送器链接等([core]defineUnitMemory还可用于添加更多内容)

    • 添加了 [action]takeResources_excludeUnitsWithoutCustomTarget1EqualTo

    • 添加了 [action]takeResources_saveFirstUnitToCustomTarget1

    • 添加了 [action]takeResources_saveFirstUnitToCustomTarget2

    • 添加了 [action]setCustomTarget1 - 单位参照

    • 添加了 [action]setCustomTarget2 - 单位参照

    • 添加了 [action]swapCustomTarget1And2 - 布尔值

    • 在动态逻辑中添加了self.customTarget1

    • 在动态逻辑中添加了self.customTarget2

• 添加了[action]setResourcesWithLogic/[action]addResourcesWithLogic

    • 示例: setResourcesWithLogic: hp=self.parent.hp - 10, energy = self.energy / 2

    • 示例: addResourcesWithLogic: hp = select( self.parent.energy>5, 10, 20 )

• 添加了[core]autoTriggerCheckRate 和 [core]autoTriggerCheckRate

    •  可用选项: everyFrame (默认值), every4Frames, every8Frames

    • 注: 所有的触发器,无论检查速率如何,都会在首次创建时和自动触发器冷却时间后进行检查。每4帧/每8帧的检查率是随机分布在各单位之间的,这样它们就不会全部出现在同一帧上,使其更流畅。对于具有复杂自动触发器的mods来说,在all-units.template中添加[core]autoTriggerCheckRate:every8Frames后会有很大的性能提升。通常自动触发器的性能会提高8倍。在极少数情况下,一些触发器可能仍然需要逐帧检查,所以这不是一个默认值。

• 新的单位生产/生成参数:

    • 添加了spawnSource(unitRef) - 影响位置和队伍。

       • 示例: [action]spawnUnits: tank(spawnSource=memory.lastLocation)  

    • 添加了copyWaypointsFrom(unitRef) - 将目标上的所有路点复制到创建的单位上。

       • 示例: spawnUnits: tank(copyWaypointsFrom=self)

• 向${}模板板块添加了系数操作符(%)

• [turret]unloadUpToXUnitsAndGiveAttackOrder - 在炮塔位置卸载单位(需要测试)

• 添加了 [core]borrowResourcesWhileBuilt

• 类似于[core]borrowResourcesWhileAlive但在单位建成后才会生效。主要对房屋之类的建筑有用,这些建筑有负的资源,可以加到单位上限等。

• 添加了 [action]takeResources_includeReference

    •  示例: [action]takeResources_includeReference: self.lastDamagedBy

• 添加了 [action]addWaypoint_target_fromReference - 单位参照

• 修复Android版自定义抛射体的imageShadow不显示的问题。

• 以及此处未列出的其它大量修复。

1.15p2

根据Luke在Discrod上的发言,1.15p2本在更新计划之中,但该版本却并没有正常发布。1.15p2不受官方支持或承认。

1.15p2更新日志
- 该版本没有更新日志 -

1.15p3

1.15p3首次更新于2021-07-18 16:58:45

1.15p3更新日志
Rusted Warfare Beta - v1.15p3
  • 添加[attack]shootDamageMultiplier
  • 添加[projectile]ignoreParentShootDamageMultiplier
  • setUnitStats现在可用于动态地修改shootDamageMultiplier
  • setUnitStats现在可用于动态地修改maxTurnSpeed
  • 添加[action]switchToTeam: {logicNumber} (起先没有加入到1.15p1)
  • 修复了"引用:正在攻击的目标单位"在1.15p1中丢失的bug
  • 修复了在地图加载生成大量建筑物单位时会有延迟的问题

1.15p4

1.15p4首次更新于2021-07-27 08:11:17

1.15p4更新日志
Rusted Warfare - Beta - v1.15p4
  • 添加了与"autoTriggerOnEvent"一同使用的"eventsource" (在1.15p1更新日志中thisActionTarget和并用autoTriggerOnEvent的示例是错的。改用eventSource即可达到目的)
  • 在[core]部分向defineUnitMemory添加了一个@memory快捷方式,用于快速创建单个内存变量。配合单位模板与copyFrom逻辑作为defineUnitMemory来覆盖也可以正常使用。 示例: @memory customText:string
  • 新增[action]fireTurretXAtGround_withTarget (采用单位或标记作为引用)
  • 新增[effect]pivotOffset —— 类似于dirOffset但也旋转所有相对的键,并产生子效果
  • 新增[effect]pivotOffsetRandom
  • Android版更新: 修复1.15beta版本中存档文件无法删除的bug
  • Android版更新: 修复1.15beta版本中存档文件无法重命名的bug
  • Android版更新: 修复多人游戏/遭遇战高级选项中用于选择地图的下拉列表无法准确选取地图的bug
  • Android版更新: 尝试修复在某些设备上播放大量音效时会出现音频故障的问题(如果成功修复,请告知luke)
  • 修复: DamagingBorder会对被运输的单位造成伤害的问题
  • 修复: 在水下由运输单位卸载的舰船不会浮起来的问题
  • 新增会影响heightSpeed的[projectile]trueGravity逻辑,[projectile]gravity只会直接更改高度而不会影响加速度
  • 修复模组中有空颜色字段时显示的错误提示过于迷惑的问题
  • 修复了convertToNeutralIfNotTransporting会导致游戏不同步的问题

1.15p5

1.15p5更新日志

Rusted Warfare - Alpha - v1.15p5

<<  注意,游戏的测试版一旦更新到API 30后将无法降级到API 29,因此此次更新将先作为Alpha进行测试,您需要根据需求选择性地加入Alpha测试  >

  • 添加Android存储访问框架(Storage Access Framework,简称SAF)支持,即使游戏更新到Google Play要求的API30,SDK模组作者们也能愉快地继续制作mod
  • 在没有SAF的情况下,Android API 30 禁用了所有跨App的正常直接文件访问(例:使用文本编辑器编写mod中的ini文件),这会让在Android手机上写Mod变得毫无体验,因为如果不添加SAF,你每修改一次Mod都需要打包一个".rwmod"再导入才能运行。
  • SAF是一种在Android上让应用访问外部文件的方式,但这种方式在处理文件的内部过程上与传统的方式完全不同, 所以请玩家们测试一下所有与文件相关的系统(存档、自定义地图、导入文件、回放、读取mods等),因为后端系统已经大幅改变了,所以有任何问题请都向"我"(Luke)反馈。
  • 但不幸的是,SAF的性能比原来的直接文件访问慢得多,可能会导致未打包的模组加载速度大幅减慢,所以在沙盒模式中新增了一个"Quick Reload"按钮来尝试在Android上解决此问题,这样能减少加载时间。(这只会重新加载地图上处于活动状态的单位的数据,目前这可能会错过一些过渡单位)
    • 注意导入的.rwmod模组的加载时间应该基本不受影响,甚至有时还会更快,这个问题主要影响Mod作者
  • 大幅加快了所有平台上游戏的模组加载速度,对大量使用copyFrom的场景速度有大幅提升
  • 修复Windows 64位版本上的DPI缩放问题
  • 修复PC版1.15p4引入的界面缩放时的bug
  • 缓存mod-info.txt数据以避免在Mod被禁用的情况下提取zip中的文件,以加快加载速度
  • setUnitStats现在可以动态地改变fogOfWarSightRange
  • setUnitStats现在可以动态地改变nanoRange
  • 修复了Android系统上实验性OpenGL模式的崩溃问题
  • 修复${}静态块中的换行符问题
  • 修复Android上多人游戏列表会水平滚动的问题
  • 修复在Android Beta版上删除和重命名存档或回放时的问题
  • 所有随机逻辑都更加随机。并且每场游戏都会创建一个共享的随机种子,用于随机开局生成、资源放置等。
  • 添加了用于生成能同步的随机浮点数的rnd(min,max) 逻辑布尔值。例如: [action]requireConditional: if rnd(0,1)<0.6 (这个动作将有60%的概率有效)
  • 为某些设备修复了PC版实验性队伍颜色渲染
  • 修复了沙盒模式中回放模式无法使用Mod单位的问题
  • 修复了add/setResourcesWithLogic将所有输入转换为小写的bug
  • 添加了lowercase(string)和uppercase(string)逻辑函数
  • 添加了cos()和sin()逻辑函数
  • 添加了direction(x1,y1,y2,x2)和directionBetween(unit1, unit2)逻辑函数
  • 添加了autoTriggerOnEvent添加了enteredTransport和leftTransport两个动作(event),其中eventSource为被运输的单位
  • 修复了copyWaypointFrom在单位有unitsSpawnedOnDeath时对自己不起作用的问题
  • 修复了unloadUpToXUnits和GiveAttackOrder在附属单位中不能正常工作的问题
  • 在单位生成时可以添加aggressiveTeam选项
  • 添加了[action]sendMessageTo:unitRef , [action]sendMessageWithData:variableList, [action]sendMessageWithTags:tagList
    • 使用autoTriggerOnEvent:newMessage(withTag=x)来读取目标单位上的消息,eventData(name, type, [default])这个逻辑函数用于读取已发送的数据
    • autoTriggerOnEvent:tookDamage的用法支持可选的(withTag=x)参数,可用于读取判断抛射体标签. 例如: autoTriggerOnEvent:tookDamage(withTag=fire)
  • readUnitMemory/eventData读取的类型指定为字符串时会自动转换其它的非字符串数据类型以便于调试
  • nearestUnit()默认范围调整为500 (而不是0)
  • takeResources_includeReference, setCustomTarget1/2支持默认参照(例如:从单位内存变量、逻辑函数等)
  • 修复了setCustomTarget2的bug
  • 修复了测试版更新引入的builtFrom_x_isLockedMessage为空时使用builtFrom_x_isLocked游戏会崩溃的问题
  • builtFrom_x_isLocked现在可以对陆地工厂等旧式单位(即写在dex中而不是使用ini格式的单位)使用
  • substring函数现在支持动态起始和结束数字
  • 修复了单位快速降低高度时炮弹(抛射体)会穿过单位的问题
  • 添加了[core]nanoReclaimSpeed(建造单位回收普通单位的速度,默认为nanoRepairSpeed*5.1)以符合旧版本的行为
  • 添加了[core]resourceReclaimMultiplier - 建造单位回收资源的速度(默认为1)
  • 添加了[core]nanoUnbuildSpeed - 建造单位回收未完成单位(俗称"蓝影")的速度(默认为1)
  • 如果初始单位有canNotDirectlyBeAttacked属性且可能会导致游戏开局就秒输时,Mod作者会看到警告消息
  • 修复攻击地面UI炮塔数量不同时使用showActionsWithMixedSelectionIfOtherUnitsHaveTag会崩溃的问题
  • 现在当守卫的敌方单位隐身时会停止守卫
  • 修复了teamTagDetect地图触发器提示missing team错误的问题
  • 修复了nearestUnit逻辑查找时忽略中立单位的bug
  • 地图脚本中的globalMessage现在支持globalMessage_LANG了
  • 修复了addWaypoint_target_randomUnit丢失某些目标的问题
  • 现在游戏中的旁观者和回放模式可以看到隐形单位
  • 修复了放置单位时可以利用光标探测敌人位置的bug
  • 当项目(item)添加/删除失败时queueItemAdded和queueItemCancelled会停止触发
  • 现在fogOfWarSightRange动态改变时会刷新迷雾了
  • 添加了[action]refundAllQueuedItems (布尔值)
  • 添加了[action]removeAllQueuedItemsWithoutRefund (布尔值)
  • Android版新增'save logs'(保存日志)调试选项

你知道吗

  • 1.15p1版本有两次更新,其中第二次更新于2021-07-16 19:39:05并解决了玩家选项界面的崩溃问题。
在32位Oracle JRE中运行的Rusted Warfare 1.15p1的bug,若是在游戏自带的OpenJDK中运行则会立即崩溃。第二次更新修复了此问题。
  • 在Google Play商店曾短暂发布过存在问题的Android版1.15p2,经测试该版本有概率会出现严重问题,主要表现为大部分地图无法加载,甚至主界面的背景也会出现黑屏和拖影。
    正常情况与出错情况下的1.15p2