“Pere工作笔记”的版本间的差异

来自星际争霸重制版地图研究所
跳到导航 跳到搜索
(创建页面,内容为“test”)
 
(2021-06-07 16:40 笔记测试)
第1行: 第1行:
test
[Unlimiter]插件会导致被Create出来的Unit的+0x0C(sprite pointer)变成0,导致无法改unit颜色。所以CreateUnit的代码应该写在unlimiter代码生效之前,只能写在onPluginStart
 
使用epTrace来debug:
 
在[main]里面写:
 
debug: 1
 
然后编译地图后会生成一个out.scx.epmap,把它拖到epTrace.exe,然后进入游戏玩out.scx
 
退出游戏后,会生成out.scx.epmap.prof,用txt查看即可
 
教程:
 
<nowiki>https://cafe.naver.com/edac/63490</nowiki>
 
如何让scv以造建筑的形式造任何单位:
 
搞出相应的按钮,按钮的Condition: 3 (Always), Action: 29 (Build Terran Building), Action value是要造的unitID
 
然后把要造的unit在units.dat的requirement改成always use。(当然可以改mineral/gas数/人口数/BuildingDimension等)这样就可以让scv建造它时收到建造order了(order=30, buildQueue0=unitID)
 
此时可以检测scv的order和buildQueue然后CreateUnit
 
如果想让scv直接走过去造,则还需要:
 
Construction Animation改成0
 
如何进行“按钮 - 选择目标位置”的触发:
 
以scv为例子,首先把scv的5红AI-order全部设为2,Right-Click order设为6,然后有如下几种可行的方法:
 
1. 建造建筑的按钮
 
(1)给SCV一个按钮,Condition设为Always(或者Can Create Unit/Building,注意改需求),Action设为Create Building - Terran,然后随便设一个Action Value X,然后注意要让单位X的Requirement满足。
 
(2)检测到scv的order为30(建造)时,获取scv的orderTargetPosition
 
2. 基本指令按钮
 
(1)给SCV一个按钮,Condition设为Always,Action设为20 (Patrol)
 
(2)检测到scv的order为152(Patrol)时,获取scv的orderTargetPosition
 
注意,按钮Action设为Attack或者move时,由于Attack按钮点到空地和单位上分别会导致order=14(Attack Move)和order=10(Attack Unit)两种,所以检测order时要同时考虑10和14,同理Move点到空地和单位上分别会导致order 6(Ignore)和order 49(Follow)两种。
 
3. 施法,Tech use
 
(1)给SCV一个按钮,Condition设为Always,Action设为24 (Use Technology),Action Value设为14(Dark Swarm)
 
(2)将Dark Swarm所需要的能量设为0
 
(3)将TechData的14号(Dark Swarm)的Usage requirement改成Always use。注意:order的119号(Dark Swarm)不用动
 
(4)检测到scv的order为119(Dark Swarm)时,获取scv的orderTargetPosition
 
如何把Terran Civilian调出Attack按钮,并且能用它来给order并且给完order之后它原地不动:
 
DatEdit - Unit(Terran Civilian) - AI actions: Attack Unit = 10, Right-click Action = 3
 
FireGraft - Button Set - Terran Civilian - "Attack" button - Condition = 3 (Always)
 
注意,使用data dumper来强行改动stat_txt.tbl之后,会使自定义快捷键失效,所以除非万不得已,否则千万不要使用自定义stat_txt.tbl。另外,使用settbl或者settbl2函数也会使得自定快捷键失效。
 
按钮触发实现方法:
 
(1)方法一:build check法
 
EE3 - data edit - Button set - Terran Marine - 激活 button list - 右键 - New code - Train Unit - 随便选择一个value(最好选择英雄Unit,假设选择的unit是Jim Raynor),然后随便选一个图标和注释
 
然后data edit - Unit - Jim Raynor要修改两个:
 
default: Mineral和Vespene都改成0
 
Requirements: Always Use
 
然后就可以使用buildcheck和buildreset了
 
(2)方法二:order法
 
EE3 - data edit - Button set - Terran Marine - 激活 button list - 右键 - New code - Basic Command - confirm
 
删掉不需要的按钮,然后button work的condition改成Always,action改成Stop reaver
 
然后orders - Reaver stop - Requirements改成Always
 
注意,当同时选中两个兵时,右下角的按钮面板会变为244(Units)号Button Set。所以即使你把两个兵单独的button set改成了其他,那么当同时选中两个兵时,button set还是变为244,所以我们一般在改按钮之后还要把244号button set清空:
 
SetMemory(0x005187E8 + 12 * 244, SetTo, 0);
 
SetMemory(0x005187E8 + 12 * 244 + 4, SetTo, 0);
 
注意:
 
当一个兵的Right-Click order设为6时,选中它之后右键空地的效果是:出现⊙动画,但是兵原地不动;
 
当Right-Click order设为3时,单位将处于“Can't move”状态,选中之后右键空地不会出现⊙动画,同时也会导致很多order用不了(比如Patrol、Attack用不了)
 
所以,如果把单位的Right-Click order设为3,则需要将152号Order(Patrol)的requirement改成Always Use才能让单位对于Patrol有反应(单位的CUnit的order ID会变为152号)。注意,由于order requirement本身已经处于1316/1316的爆满状态,如果想更改order,可能首先需要将一些没用的order的requirement设为Don't Use
 
SetDeaths的单位如果是P9-P12的单位,则在非eud地图中不起任何作用
 
如果地图是eud图,则会起作用
 
星际判断一个单位是否在location中,仅跟该单位的Unit Size (Unit Dimension)有关,即内存0x6617C8

2021年6月7日 (一) 16:41的版本

[Unlimiter]插件会导致被Create出来的Unit的+0x0C(sprite pointer)变成0,导致无法改unit颜色。所以CreateUnit的代码应该写在unlimiter代码生效之前,只能写在onPluginStart

使用epTrace来debug:

在[main]里面写:

debug: 1

然后编译地图后会生成一个out.scx.epmap,把它拖到epTrace.exe,然后进入游戏玩out.scx

退出游戏后,会生成out.scx.epmap.prof,用txt查看即可

教程:

https://cafe.naver.com/edac/63490

如何让scv以造建筑的形式造任何单位:

搞出相应的按钮,按钮的Condition: 3 (Always), Action: 29 (Build Terran Building), Action value是要造的unitID

然后把要造的unit在units.dat的requirement改成always use。(当然可以改mineral/gas数/人口数/BuildingDimension等)这样就可以让scv建造它时收到建造order了(order=30, buildQueue0=unitID)

此时可以检测scv的order和buildQueue然后CreateUnit

如果想让scv直接走过去造,则还需要:

Construction Animation改成0

如何进行“按钮 - 选择目标位置”的触发:

以scv为例子,首先把scv的5红AI-order全部设为2,Right-Click order设为6,然后有如下几种可行的方法:

1. 建造建筑的按钮

(1)给SCV一个按钮,Condition设为Always(或者Can Create Unit/Building,注意改需求),Action设为Create Building - Terran,然后随便设一个Action Value X,然后注意要让单位X的Requirement满足。

(2)检测到scv的order为30(建造)时,获取scv的orderTargetPosition

2. 基本指令按钮

(1)给SCV一个按钮,Condition设为Always,Action设为20 (Patrol)

(2)检测到scv的order为152(Patrol)时,获取scv的orderTargetPosition

注意,按钮Action设为Attack或者move时,由于Attack按钮点到空地和单位上分别会导致order=14(Attack Move)和order=10(Attack Unit)两种,所以检测order时要同时考虑10和14,同理Move点到空地和单位上分别会导致order 6(Ignore)和order 49(Follow)两种。

3. 施法,Tech use

(1)给SCV一个按钮,Condition设为Always,Action设为24 (Use Technology),Action Value设为14(Dark Swarm)

(2)将Dark Swarm所需要的能量设为0

(3)将TechData的14号(Dark Swarm)的Usage requirement改成Always use。注意:order的119号(Dark Swarm)不用动

(4)检测到scv的order为119(Dark Swarm)时,获取scv的orderTargetPosition

如何把Terran Civilian调出Attack按钮,并且能用它来给order并且给完order之后它原地不动:

DatEdit - Unit(Terran Civilian) - AI actions: Attack Unit = 10, Right-click Action = 3

FireGraft - Button Set - Terran Civilian - "Attack" button - Condition = 3 (Always)

注意,使用data dumper来强行改动stat_txt.tbl之后,会使自定义快捷键失效,所以除非万不得已,否则千万不要使用自定义stat_txt.tbl。另外,使用settbl或者settbl2函数也会使得自定快捷键失效。

按钮触发实现方法:

(1)方法一:build check法

EE3 - data edit - Button set - Terran Marine - 激活 button list - 右键 - New code - Train Unit - 随便选择一个value(最好选择英雄Unit,假设选择的unit是Jim Raynor),然后随便选一个图标和注释

然后data edit - Unit - Jim Raynor要修改两个:

default: Mineral和Vespene都改成0

Requirements: Always Use

然后就可以使用buildcheck和buildreset了

(2)方法二:order法

EE3 - data edit - Button set - Terran Marine - 激活 button list - 右键 - New code - Basic Command - confirm

删掉不需要的按钮,然后button work的condition改成Always,action改成Stop reaver

然后orders - Reaver stop - Requirements改成Always

注意,当同时选中两个兵时,右下角的按钮面板会变为244(Units)号Button Set。所以即使你把两个兵单独的button set改成了其他,那么当同时选中两个兵时,button set还是变为244,所以我们一般在改按钮之后还要把244号button set清空:

SetMemory(0x005187E8 + 12 * 244, SetTo, 0);

SetMemory(0x005187E8 + 12 * 244 + 4, SetTo, 0);

注意:

当一个兵的Right-Click order设为6时,选中它之后右键空地的效果是:出现⊙动画,但是兵原地不动;

当Right-Click order设为3时,单位将处于“Can't move”状态,选中之后右键空地不会出现⊙动画,同时也会导致很多order用不了(比如Patrol、Attack用不了)

所以,如果把单位的Right-Click order设为3,则需要将152号Order(Patrol)的requirement改成Always Use才能让单位对于Patrol有反应(单位的CUnit的order ID会变为152号)。注意,由于order requirement本身已经处于1316/1316的爆满状态,如果想更改order,可能首先需要将一些没用的order的requirement设为Don't Use

SetDeaths的单位如果是P9-P12的单位,则在非eud地图中不起任何作用

如果地图是eud图,则会起作用

星际判断一个单位是否在location中,仅跟该单位的Unit Size (Unit Dimension)有关,即内存0x6617C8