|
声明:本插件只限于单英雄地图,因为一个玩家只能有一个物品栏(通常游戏也就一个英雄)
本插件实现了war3的物品栏效果,包括拾取、使用、丢弃、销毁(其实这些都是可以自定义的,例如我将销毁功能当成贩卖功能来用也是可以的)
演示地图:
5.scx
(38 KB, 下载次数: 4)
演示地图二: 血药,蓝药,护盾药,狂暴,自杀
1.scx
(39 KB, 下载次数: 0)
先说下配置中用到的一些概念
节点ID:0~n
玩家ID:0~11(0=玩家1,以此类推)
物品ID:0~n
下面开始进行插件配置
首先,先安装框架
然后,配置全局数据
最后,配置玩家数据
所有配置完成后,就是功能的实现了
插件功能
42号插件详解
介绍完毕
有看不懂的在后面发帖,我会及时更新教程
框架安装:
Comment("EH_\DH]125>;7OcODP2=58<?]d4HE[k80000EfHkaWD[3kM15<7P0XU5o8]5o6Y0J00@001@JP3o5BcACP0nXocODP0c`41OGU_9`fJ5`7DH3kM158\4QA1:I02;B725bG@2Rl690^_KRc:5mWD4<l3[e8]i48dD=h?h2Pn7X00008?h0GD8RT4DjMX10023n09e28Y15>VW0@00PoP3M@R:@ACY[04008?h17D8RT4DjK410023n0Ee4HX2<m8j@A@?U<:;`^UkooooPoP6M@b:0S?B>T4D3iG2jnR3n0Me3`nf0SQ151_0mmSYE_oooh?h27D83kH2>T4DjnZ3n0Ue3Pnf0SY151_0@>TfooooPoP:3hDZoooo3kH2>44DjnN3n1@?QiP0000?]dTD0lj3n0]e1hX1jB`10023n0ae1hX1jOX00023n0ee1hX1j@010023n0ie2HX2mRWY1P4008?h3gD;RP8cdSX1jDoooon3n11e2hX2<m8j0NUEooooPoPAM@X?]P8h0NUFooooPoPBM@X?]P8j0NU7ooooPoPCM@X?]P8j0NUIooooPoPD3hF;o_oo3kH2>07YA_oooh?h7WMS3kM958\<RhG93hBHo_oo0ln3n1D?Q5Cooon3n1H?Q5Oooon3n1L?Q5[ooon3n1P?Q5gooon3n1T?Q6;ooon3n1X?Q6Wooon3n1\?Q73ooon3n1`?Q7Kooon3n1edP8?h7^^8PoPOM@P?]d4DRP3[<H?h87D=3kM158X000;Yn_gooh?h8GD=3kM158X0:0;Yj?gooh?h8WD?3kM158X0mRZ80^WDoOooPoPSM@l?]d4DRPXcdSX8jCknoon3n2Ae3`ng@AB:2S?B>PSY@?kooh?h9GD=3kM158X:>0SY?_kooh?h9WD=3kM158X:>PSY;?kooh?h9gD=3kM158X:>PSY>okooh?h:0n5KOgoo`ng@AB:2SP8jBGnooo3", 0, 0, 42, 0, 1);
Comment("EH_\XOcODP23k31CEUN5`7D7<l3Yc0P000ng@ARjb00008U5h6Hk`WEO3kM158Y948U5g83i1WH5JPIIj`<?]\U[`0F9CNa[bAZ=D0B=Q0750000REGHRDGPRdGPJT1X0100051Z0?lE;=5>03jSn=mB06J;GMaV?XTHRUg\0dGH?XPHjET8002;=OSODP0?_`I[`0D?]U``18eC0f_B0hel<0F=@`:9OOR=?=N9ANR=14N9AOB;AN29MMR9GNB9OMaVPoQTMC<?_aJ;@@Pk`Pn330P006J;DA1[`0F=A304IXT@IX]A16J9D0::BAB8B0AVodH2jNL7001VPoQUMFH?]T48>dGX3hd4oooo3kI128YA48PDA`nf@@R:DAB8E4L13kM153?BIXTDAJQcJ`0?]d4DIXTDANRFJ`0c`0ngDAC6Q0:TR50000GT0000?B07001lj0ng@AC6P?QOJ`00jG\7002nUP0006HkaPn5>P8008]a2:7lge80R`B`P7Q=08U5e0n4QOkoo`nfP9@0001[`0b;P2`6D023IO00RDGX3kM150n_`P=5n8U5h8PHQM\?SRL7002=D0>9EOR;EOR:D_l?]W4DR5GoJOKT0000ReGh3kLBREG\ReG`0m:0OOl0REGd3kID>P6=]3:TR500M@[n2<H60>VI0@003km5k8]Ef6_01H=Uk0361P6=M104ReGD3kJBU00008]5m0nf13R1`Rj[1P1[dPb;4XGBOR^;ONR9OOB;OO@?]Slkn7@>odG\PdGd53UEk7cZj`f;ENQ[`1B=A13\RDG@IX\6ReG@IXU20PnoDQ2Q37YY00ng552=O082RaD<IF@03km60Pno1483`XYF18QEoS?BP7oo88U5k8UEm7<RI\L71U_6A`83RUOnP>;OR5L3JPMJI\M710IMaTL60XUEm8X0<oJ4`7@DSA`jR0@cRdG\AXX41XC0MO:;GNCfAOh13hBV0000S@@FaP@h2Xe45P7613P2SD@F0\H4>6>=A1H3aP@hKhe45PC613QeSD@F1LH4>6j=A1H6aP@hM8e45PO613PjSD@F2<H4>22=A1H9aP@h0`nfAOn9ANaZI9UKmo^3aPYZ2XC0M1>;GO@4<0?NR0@kRl:IFdKgnn\:Rl:IFoOkQ<1d2h]Em0@`0mI6R0@jRdG\VFX:FoOkSD8`ReGdSA`FR0@kRegTAX]5h0?baP@n08]mg?m5l8=5n0<iGO0?S1OnoooY<`D00;jG0000IS_63hFI0@00RdT8XOcODP2;=8R0OTd03hA0o?oo3kI6C8U5i0n_`P=5n8dDGh]mi6Woi0000<J6YP0001N:BP68COj9ENP?]U833kK9SH`iY8Q@08fl>ZB8D02:UYP00029CM20n^Ae2lH10LH70NWYnooo>UGnM0f;CNPjD@=d1@nfb^\KRdg@aP40aPL0RXjJ0000P?WT3hBonooo3kK9<on9CN25f`n>[o_ooh]=g44?]Q4iEN1d3DN3`@8kngc`jIKkoon3ool?Q8gkoon;EMQ[o`<3n0ngC`>9CN`?_lU[b@F:C148ReGXR4goRdgTJlT?0dgdaT4208U=l8Z>V00003Y:0GD^mTGo17DOaT010VJ;ENb;bf_90fJ9E042RUL2R5@11<I70P3[C8]=l<I10P;[@cY:0gDEmTGo27D6aT010n_;Rdg`aT420n\YmTGo0WDLIX]Ek8_;JlT3aT010FJ9E042aT@1107nC`;[1h]=l<I10P6;CO1[f`>:A0<4R076QYP0003TaXJJ0000i<J6Y000003YS0<00;jH0000IS_63hF?0000XOcODP1[f`>;L@R;=;0?]TI<3jo20dGhSD@31H<P08U5d8Y6CHC03hB1n_oo?34?QGWjoon;AUb5`0n4K_[oohY@C3YA50n5H_[oo`noN2d?_eH]3kmH<H]942_G3kmn<B_kQLUe0fY0F@n_o`n_dPn_b@?j>ll?S37joon;CM290H=VG036ATd3jNl2000cofHka`n4608006J3n04?Q0h2001VPoP2MD8?]g4DRd4@3job0gGh>ml?S[l20023aP9VRe48IS]F0GD<3kHF>m1m4R_2aPH0Ah?60c_kO>;YV@8002P6jI82001VPoP33hAW0@00IX?h10n4G@4006J3n0Ye>0ngLA@?[o83MOR:AP4j@A0?QI;ioom[f`>=G3<2IX\3IS]120n5O_Wooc?0aTH106J90nU00P00IX?h2gDW3kM150n_`X]En0nf110k`gD><l23NA013iC0jAd2000c`3Ui4>_aIX?h37E`3kMa50n_lP=en8_3Jl03SG``1H\7QL0?Q23ioon:D6@jD@P?QACiool?]QHkdgDD3kI158]=m6_03lI420<1jOWhoon39`2:T8l00024dWD5<m92j`<?]]8?]dTDRgGdJlT?R5@a0LI0I5[YW@4006J3n1Ae8`nfDA@?]T48Jm8?0eGd0l::43YA40n5[?SoolH00>Ud0@00IX?h5GDL3kI150nfD@Q[`0l3AOB;BA0?]P@2R@7YDP4006J3n1H?QDP1000?]U4D3kIa26_B3h]94:7lge800eGdR`B8RP`FR8R?0000jB41000?]g4D3job0gGhRe4@<on5fghM3kM928?60XUMf6HkCP5e1@nf7P?kPlH3odgHMNeVPoP3M@PknPn=h`0006J3n0@?Q@WhoolknPn>d@000>Wlmooo3kMa50n_lP=en6HkagD@3kI158]Em6_03hY4407[0hY148=Ul023con9OMR5fgiOSEH2REGhPoooMA2;EOR0>P1e28]ml8Umf>\cReGhRQ:8EOn4dW@WReGh3kMB0FHkD@Qe6X1moomd50nfEOl?]_P3eh7jo`0007hgRggHodG`PdGh0cUMl7b\PoooMBY[f`?6AP42IX]A26J9E3<2ReGdR4@c10nfBAA[b@n8117[6X]=n001ja=[o`>=53N8@P9VRd48IXU20oh6<l10GeiKbL?3", 0, 0, 44, 0, 1);
Comment("", 0, 0, 节点个数, 200, 42);
Comment("", 0, 物品栏个数, 物品种类, 200, 44);
先别在意42号插件是什么,后面会有解释
节点个数 : 按照插件的的最低配置来说,这里最好填16,需要调整的以后再说(后面解释)
物品栏个数: 每个玩家的物品栏拥有的格子数(最大为6),演示图中该值为6,如果填5,则玩家最多只能携带5种物品
物品种类 : 物品的种类数,例如我只想需要红药和蓝药这2种物品,那么这里填2就好了
配置全局数据:
1、按钮和需求
示例按钮:
button.btn
(19 KB, 下载次数: 0)
, 置入SMC后查看ID为202的按钮
按钮是用来做物品栏的,一共8个玩家,所以需要8份上述的按钮(ID:202~209,ID其实随意,我这里只是做个示范)
当然,需要几个物品栏就做几个,比如说玩家8是个电脑,根本不会用到,那实际上只需要7个
制作一个的按钮表(ID:202,下面称为bt1):
每个按钮表共有9个按钮(6个物品 + 丢弃 + 销毁 + 取消)
每个按钮都必须是创建单位,并且创建的单位不能相同(可以挑选一些你地图中不需要建造的单位),“黄色注释”ID也不能相同
要注意的是, “黄色注释”将用于显示物品名称和物品数量,所以需要的比较大的长度,
每个按钮取“黄色注释时”最好能跳过几个ID,不要取相邻的(可以参照示例按钮)
制作完bt1后就简单了,接下来7个按钮表(ID:203~209)
直接COPY bt1的(是的,全部copy,包括行动条件和行动数值)
然后每个按钮表只需要修改按钮的“黄色注释”(这里不能是已经使用过的)即可
最后就是改需求了,用哪个单位做物品栏,就将建造需求改成该单位
2、注册快捷键(可选)
前面说了每个按钮表共有九个按钮,每个按钮的黄色注释都不相同
现在就是为每个黄色注释添加快捷键,这个站内有教程,不再重复
以上是SMC的准备工作,现在开始进入44号插件的配置
3、注册物品
声明物品,包括显示的图标,字符串,还有物品的属性
Comment("名称", 物品ID, 图标ID, 属性, 100, 44);
物品ID:0~n
图标ID:这个不解释
属性:
0x0 无
0x1 显示物品数量
0x2 物品无法使用
0x4 物品无法丢弃
0x8 物品无法销毁
例如:
Comment("红药", 5, 1, 1, 100, 44); //声明一个新物品,ID为5,名称为“红药”,显示的图标为Ghost,并且如果在物品栏中显示数量
正常情况下,不同的物品都应该有不通的ID,如果声明了2个相同ID的物品,则后面的物品覆盖前面的
注意: 物品ID不能超过安装插件时设置的物品种类数
4、注册按钮
让插件知道你按了哪个按钮
Comment("", 按钮ID, 按钮位置, 单位ID, 101, 44);
按钮ID :0~n ( n=物品栏个数 +2,分别对应物品栏0~n)
按钮位置 :1~n (按钮在按钮表里面的位置)
单位ID :该按钮建造的单位ID
例如:
Comment("", 3, 4, 64, 101, 44); //当按了位置为4的按钮时,通知插件物品栏3位置的物品被玩家使用了
至此,全局配置完成
玩家配置
以下的配置,每个玩家都必须有单独的一份,不能共用配置
1、创建物品栏
CreateUnit(Number,Unit,Where,ForPlayer);//用触发创建一个单位用于做物品栏(必须用创建触发,预先摆在地图上的不行)
Comment("", 节点ID, 0, 玩家ID, 0, 42);
// 注册节点ID,该节点ID=物品栏,节点ID不能大于安装插件时预设的节点个数(每个玩家物品栏的节点ID不能相同)
//玩家ID=被创建单位的玩家ID
Comment("", 节点ID, 148, 按钮表ID, 1, 42);//节点ID就填写上面一天触发注册的节点ID,按钮表ID(202~209)
上述配置的作用就是将创建的单位作为物品栏,并将该单位的按钮替换成我们之前配置的按钮表
以下说到的节点ID,除非特殊说明,否则都将填写上面触发注册的节点ID
2、检测物品操作
包括使用、丢弃、销毁
Comment("", 节点ID, 0, 0, 151, 44);//检测,当检测到物品被操作时,执行下面触发
Comment("", 节点ID, 0, 0, 150, 44);//刷新物品栏
PreserveTrigger();//必须带循环触发
3、检测物品拾取
Comment("", 节点ID, 拾取的距离, 玩家ID, 152, 44);//这个就不是物品栏的节点ID了,而是英雄的节点ID
PreserveTrigger();//必须带循环触发
拾取的距离:任意,0为默认(地图编辑器中,一个格子的宽度为32)
玩家ID :单位可以被拾取的玩家ID,例如只允许玩家8的单位能够被捡取,则这里填7
如果要求多个玩家的单位都能被捡取,需要两外新建触发
注意:如果使用”检测物品拾取“,则必须创建下面的触发,否则,被捡取的单位将不会消失
玩家:all
条件:always
动作:
RemoveUnit(Unit 90, All Players);
PreserveTrigger();
至此,玩家配置完成,注意,每个玩家都需要进行同样的配置,但节点ID不能相同
1、刷新物品栏
Comment("", 物品栏节点ID, 0, 0, 150, 44);
任何对物品栏有操作,例如拾取和使用等,都应刷新物品栏
2、判断物品操作
Comment("", 物品ID, 操作类型, 玩家ID, 10, 44);
操作类型:
1=使用
2=丢弃
3=销毁
例如:
Comment("", 2, 1, 3, 10, 44);
DisplayText("加血100", 4);
PreserveTrigger();
//当玩家4使用了ID=2的物品时,显示字符串“加血100”
特殊,丢弃物品时,需要记录下丢弃的物品数量,这样才能在拾取物品时拾取到同样数量的物品(插件以单位的killCount作为物品数量)
Comment("", 0, 2, 0, 10, 44);//如果丢弃了ID=0的物品时
CreateUnit(1, Unit 7, Location 0, Player 2);//创建一个SCV给玩家2
Comment("", 节点ID, 0, 1, 0, 42);//给SCV设置一个节点ID
Comment("", 0, 节点ID, 玩家ID, 22, 44);//实现将SCV的KillCount改成丢弃的数量(该触发必须配合丢弃物品使用)
PreserveTrigger();
该功能不需要刷新物品栏
3、判断物品拾取
Comment("", 单位ID, 0, 玩家ID, 12, 44);//判断是否捡取了某单位
Comment("",物品ID, 0, 玩家ID, 0, 44);//将拾取的单位添加到物品栏,这条触发必须配合‘判断拾取“使用,否则无任何效果
例如:
Comment("", 7, 0, 2, 12, 44);//单位ID7=SCV
Comment("", 2, 0, 3, 0, 44);
//判断玩家3是否捡取了SCV,如果是则将ID=2的物品添加到玩家4的物品栏
注意,被拾取的单位的killCount 就是拾取的物品数量
4、检测标识信息
判断捡取物品时物品栏是否已满
Comment("", 3, 1, 玩家ID, 20, 44);
判断使用物品时物品是否无法使用
Comment("", 2, 1, 玩家ID, 20, 44);
判断丢弃 物品时物品是否无法丢弃
Comment("", 2, 2, 玩家ID, 20, 44);
判断销毁物品时物品是否无法销毁
Comment("", 2, 3, 玩家ID, 20, 44);
5、判断物品栏是否已满
Comment("", 0, 类型, 玩家ID, 11, 44);
类型:1=已满
类型:0=未满
6、添加物品
Comment("", 物品ID, 物品数量, 玩家ID, 1, 44);
例如:
Comment("", 5, 100, 0, 1, 44); //玩家1添加了100个ID=5的物品
注意,如果在添加物品时物品栏已满,则将添加的物品视为丢弃
7、删除物品
Comment("", 物品ID, 物品数量, 玩家ID, 2, 44);
例如:
Comment("", 5, 50, 0, 1, 44); //玩家1删除了50个ID=5的物品
~~~~
前面有提到,可以用42号插件给单位赋予一个节点ID,但其实作用不仅仅于此(记得前面的瞬间移动吗,就是用这个插件做的)
42号插件 -- 一字节的单位节点插件
完整的单位节点插件其实有3个
40号 --- 4字节的单位节点插件
Comment("EH_\DH]120ngDAQCRaglge80EXddPkS80000EfHkd7D[3kM15<7P0XU5o8]5o6Y0J00@001@JP3o5BcACP0nXocODP0c`41OGU_9`fJ5dWDH3kM158\4QA1:I02;B725bG@2Rl691^_KRcJ5mWD4<l3[e8]i48d4=h?j2Pn7[@0008?j0GD93kM95>WH0@00PoX2M@T?]dTDjJ<10023nP=e2@ngBACYY`4008?j17D93kM95>V[0@00PoX5MA8?]dTD<m8i20nD`X_2jGKooon3nPIe3@ngBA@cdST83iG2jnN3nPMe3@ngBA@cdST83io2jmF3nPQe3@ngBA@cdST83ic2jl>3nPUe3@ngBA@cdST83ig2jk63nPX?QB;oool?]dTD<m8i20nN`^^KPoXD3hNI00003kM950?>PoX;3hC[0000PoX<3hC_0000PoX=3hCh0000PoX>M@b;40n_4HT@jM[noon3nPme3X\0:`7gf1_0@>W:o_ooPoX@M@^;03?B>`7YDOoooh?j4GD;R`0cdS\1jE?ooon3nQ9e2h\0<m8k0NUEooooPoXCM@^;03?B>`7YEooooh?j50n5O_kooh\0<m8k0NUIooooPoXNMe<?]dTDR`b;QLT?Q8[nool3ch?j5GA6PoXFM4j3nQMdFh?j60n4Gooooh?j6@n4Iooooh?j6Pn4LOoooh?j6`n4N?oooh?j77B3PoXMM8j3nQk[Uh?j7gD83kM958\9jc:3nR1e3@ngBAB;2@48jOcmoon3nR5e3@ngBAB;2BT8jN[moon3nR9e40ngBAB;2@n_28T8jMGmoon3nR=e2@ngBACYl_kooh?j97D93kM95>Wgo_ooPoXUM@T?]dTDjOWnoon3nRIe2@ngBACYnokooh?j9gD93kM95>Wmo_ooPoXX3hF6oOoo3kM95>Woo_oo", 0, 0, 0, 0, 40);
41号 --- 2字节的单位节点插件
Comment("EH_\DH]120ngDAQCRaglge80EXddPkS80000EfHkd7D[3kM15<7P0XU5o8]5o6Y0J00@001@JP3o5BcACP0nXocODP0c`41OGU_9`fJ5dWDH3kM158\4QA1:I02;B725bG@2Rl691^_KRcJ5mWD4<l3[e8]i48d4=h?j2Pn7\`0008?j0GD9IX]95>We0@00PoX2M@UVRdTDjK\10023nP=e2FJ;BACY`@4008?j17D9IX]95>W70@00PoX5MA=VR`0cdVHk@A@?U<:;`^UeooooPoX6M@iVR`0cdVHk@A@?UL;[iX?j1gD>IX\0<m9V>d4D3io2jm>3nPQe3VJ;03?BIS]150nL`^_0PoX9M@iVR`0cdVHk@A@?WL;[[H?j2Pn57OooofJ;03?BIS]150nN`^^FPoXD3hNU00003kM950?>PoX;3hCk0000PoX<3h@00@00PoX=3h@;0@00PoX>M@mVRa1V3jlAIXT@jM7noon3nPme3FJ;03?BIS\1jD?ooon3nQ1e3FJ;03?BIS\1jDWooon3nQ5e3FJ;03?BIS\1jD[ooon3nQ9e3FJ;03?BIS\1jD_ooon3nQ=e3FJ;03?BIS\1jDcooon3nQ@?QFknoomVR`0cdVHk0NU=ooooPoXNMeL?]dTDR`b;QLT?Q7Snool3ch?j5GA:PoXFM5>3nQMdHX?j60n4Dooooh?j6@n4G_oooh?j6Pn4Iooooh?j6`n4L?oooh?j70n4NOoooh?j7GB6PoXNji63nQme2@ngBAAVR`W[>8?j87D?3kM956J;2FH12>WSoOooPoXQM@l?]dTDIX\9IRT8jLomoon3nR9e4`ngBAAVR`UV3jl8IXT8jKOmoon3nR=e2@ngBACYgOkooh?j97D93kM95>WQo_ooPoXUM@T?]dTDjNGnoon3nRIe2@ngBACYjOkooh?j9gD93kM95>W]o_ooPoXX3hEXoOoo3kM95>Wao_oo", 0, 0, 0, 0, 41);
42号 --- 1字节的单位节点插件
Comment("EH_\DH]125>;7OcODP2=58<?]d4HE[k80000EfHkaWD[3kM15<7P0XU5o8]5o6Y0J00@001@JP3o5BcACP0nXocODP0c`41OGU_9`fJ5`7DH3kM158\4QA1:I02;B725bG@2Rl690^_KRc:5mWD4<l3[e8]i48dD=h?h2Pn7X00008?h0GD8RT4DjMX10023n09e28Y15>VW0@00PoP3M@R:@ACY[04008?h17D8RT4DjK410023n0Ee4HX2<m8j@A@?U<:;`^UkooooPoP6M@b:0S?B>T4D3iG2jnR3n0Me3`nf0SQ151_0mmSYE_oooh?h27D83kH2>T4DjnZ3n0Ue3Pnf0SY151_0@>TfooooPoP:3hDZoooo3kH2>44DjnN3n1@?QiP0000?]dTD0lj3n0]e1hX1jB`10023n0ae1hX1jOX00023n0ee1hX1j@010023n0ie2HX2mRWY1P4008?h3gD;RP8cdSX1jDoooon3n11e2hX2<m8j0NUEooooPoPAM@X?]P8h0NUFooooPoPBM@X?]P8j0NU7ooooPoPCM@X?]P8j0NUIooooPoPD3hF;o_oo3kH2>07YA_oooh?h7WMS3kM958\<RhG93hBHo_oo0ln3n1D?Q5Cooon3n1H?Q5Oooon3n1L?Q5[ooon3n1P?Q5gooon3n1T?Q6;ooon3n1X?Q6Wooon3n1\?Q73ooon3n1`?Q7Kooon3n1edP8?h7^^8PoPOM@P?]d4DRP3[<H?h87D=3kM158X000;Yn_gooh?h8GD=3kM158X0:0;Yj?gooh?h8WD?3kM158X0mRZ80^WDoOooPoPSM@l?]d4DRPXcdSX8jCknoon3n2Ae3`ng@AB:2S?B>PSY@?kooh?h9GD=3kM158X:>0SY?_kooh?h9WD=3kM158X:>PSY;?kooh?h9gD=3kM158X:>PSY>okooh?h:0n5KOgoo`ng@AB:2SP8jBGnooo3", 0, 0, 0, 0, 42);
这三个插件的功能是一样,只是处理的数据长度不同
接下来说的功能我将直接用40号插件代替
1、安装 - 设定节点个数
Comment("", 0, 0, 节点个数, 200, 40);
这个触发必须在安装的时候执行,并且只能执行一次,再次执行话,以前的所有节点将会失效
及时同时装了40,41,42三个插件,也只需要使用其中一个进行设置就好了
设定成功后,节点个数将是3个插件公用的
2、赋予单位节点ID
Comment("", 节点ID, 0, 玩家ID, 0, 40);
必须跟在创建触发后面,否则无效
例如:
CreateUnit(1,Unit 0, where, Player 1);//用触发创建一个机枪兵给玩家1
Comment("", 1, 0, 0, 0, 42); //将刚创建的机枪兵赋予节点ID1
节点ID赋予后,就可以通过改变这个节点ID的属性,从而改变 节点ID对应单位 的属性
3、使用
Comment("", 节点ID, 属性地址, 值, 操作符, 40);
属性地址: 7楼查询(需转成10进制)
值:根据操作符的不同而不同
操作符:
n + 1 = 赋值
n + 2 = 加
n + 3 = 减
n + 4 = 乘以
n + 5 = 等于
n + 6 = 非等于
n + 7 = 大于
n + 8 = 小于
n + 9 = 大于等于
n + 10 = 小于等于
n = 0 时 ,值 = 用户设定的十进制数;当前节点ID指定属性地址的值 = 用户设定的值
n = 10时,值 = 另外一个属性地址 ;当前节点ID指定属性地址的值 = 当前节点另外一个属性地址的值
n = 20时,值 = 另外一个节点ID ;当前节点ID指定属性地址的值 = 另外一个节点ID相同属性地址的值
n = 30时,值 = 内存地址 ;当前节点ID指定属性地址的值 = 指定内存地址的值
例如:
配合44号插件做 “喝药加血” 效果
//判断物品被使用(如何判断看上面教程,这里不复述)
Comment("", 1, 8, 2560, 2, 40);//加血的地址是0X8,长度为4字节,所以用40号插件
效果:
喝了药后增加10点血量(血量 = 256 * n)
复制代码
功能非常强大,还可以制作技能哦
介绍完毕
单位节点结构
CUNIT = 4字节 ---- 40号插件修改
dword = 4字节 ---- 40号插件修改
word = 2字节 ---- 41号插件修改
byte = 1字节 ---- 42号插件修改
复制代码
+0x0 - CUNIT* Previous
+0x4 - CUNIT* Next
+0x8 - DWORD dwHP
+0xC - CSPRITE* Sprite
+0x10 - WORD wMoveToXPos
+0x12 - WORD wMoveToYPos
+0x14 - CUNIT* Target_1
+0x18 - WORD wCurrentXPos_?
+0x1A - WORD wCurrentYPos_?
+0x1C - WORD wX_?
+0x1E - WORD wY_?
+0x20 - BYTE bMovementFlags_?
2 - Making Building?
4 - Moving?
+0x22 - BYTE bFlingyTurnRadius
+0x23 - BYTE bCurrentDirection_?
+0x24 - WORD wFlingyID
+0x27 - BYTE bFlingyMovementType
+0x28 - WORD wCurrentXPos
+0x2A - WORD wCurrentYPos
+0x2C - DWORD dwX_Halt
+0x30 - DWORD dwY_Halt
+0x34 - DWORD dwFlingySpeed
+0x38 - DWORD dwUnknown_38_Speed
+0x3C - DWORD dwUnknown_3C_Speed
+0x48 - WORD wFlingyAcceleration
+0x4C - BYTE bPlayerID
+0x4D - BYTE bMainOrderID
+0x4E - BYTE bMainOrderState
+0x4F - BYTE bOrderSignal
+0x54 - BYTE bMainOrderTimer
+0x55 - BYTE bGroundWeaponCooldown
+0x56 - BYTE bAirWeaponCooldown
+0x57 - BYTE bSpellCooldown
+0x58 - WORD wOrderTargetX
+0x5A - WORD wOrderTargetY
+0x5C - CUNIT* Target_Order
+0x60 - DWORD dwShield
+0x64 - WORD wUnitID
+0x68 - CUNIT* PlayerPrevious
+0x6C - CUNIT* PlayerNext
+0x70 - CUNIT* Subunit
+0x74 - CORDER* OrderQueueHead
+0x78 - CORDER* OrderQueueTail
+0x80 - CUNIT* ConnectedUnit
+0x84 - BYTE bNumOfQueuedOrders
+0x85 - BYTE bUnknown_85_Order_Timer_Seperate
+0x88 - WORD wDisplayedUnitID?
+0x8E - BYTE bRankIncrease
+0x8F - BYTE bKillCount
+0x93 - BYTE bUnknownState?
+0x94 - BYTE bCurrentButtonSet
+0x98 - WORD wQueue1
+0x9A - WORD wQueue2
+0x9C - WORD wQueue3
+0x9E - WORD wQueue4
+0xA0 - WORD wQueue5
+0xA2 - WORD wEnergy
+0xA4 - BYTE bQueueSlot
+0xA6 - BYTE bSecondaryOrderID
-Cloak, Build, expand creep
+0xA8 - WORD bHPGainDuringBuild/Repair?
+0xAC - WORD wRemainingBuildTime
UNION
WORD
+0xC0 - BYTE bSpidermineCount
+0xC1 - BYTE bUnusedC1
+0xC2 - BYTE bUnusedC2
+0xC3 - BYTE bUnusedC3
CUNIT
+0xC0 - CUNIT* Unit_Unknown_1
IF Carrier/Reaver - First Hangar Unit
IF Scarab/Interceptor - Parent
IF Building - Addon
IF Worker - Powerup Carried
UNION
WORD
+0xC4 - WORD wAddonBuildID
+0xC6 - WORD wUpgradeResearchTime
CUNIT*
+0xC4 - CUNIT* Unit_Unknown_2
IF Scarab/Interceptor - Next Unit in Parent Hangar
UNION
BYTE
+0xC8 - BYTE bScarabCount/bTechID
+0xC9 - BYTE bInterceptorCount/bUpgradeID
+0xCA - BYTE bLarvaSpawnTimer
+0xCB - BYTE bIsLanding
CUNIT
+0xC8 - CUNIT* Unit_Unknown_2
IF Scarab/Interceptor - Previous in Parent's Hangar
+0xCC - BYTE b_Unknown
-IF Interceptor/Scarab - InHanger?
-IF CreepUnit - timer between creep expansions
-IF Repairing - decrease mineral timer
+0xCD - BYTE bUpgradeLevel
+0xCE - BYTE bIsCarryingSomething?/Going to carry something?/Targeting Resources?
+0xCF - BYTE bResourceAmount
UNION
WORD/BYTE
+0xD0 - WORD wResourceContained/wPowerupDropTargetX
+0xD2 - WORD wPowerupDropTargetY
+0xD2 - BYTE bResourceIscript
+0xD3 - BYTE bResourceCount?
DWORD
+0xD0 - CUNIT ResourceTarget/NydusConnected
+0xD0 - CSPRITE NukeDot
+0xDC - DWORD dwStatus
00000001(0x1) - Is Completed
00000010(0x2) - Is on ground? or is it is unit...
00000100(0x4) - Is in air
00001000(0x8) - Checked for disabled, if it is 00001000, then the unit is disabled(/unpowered?)
00010000(0x10) - Checked for burrowing purposes, if it is 00010000, then the unit is burrowed
00100000(0x20) - Unit is entering a building
01000000(0x40) - unit is entering a transport
10000000(0x80) -
00000001(0x100) - Checked for invisible purposes, if it is 00000001, then the unit requires a detector?
00000010(0x200) - checked for cloak?
00000100(0x400) - deals with doodad states? if set, is disabled
00001000(0x800) - Unit cloaking doesn't need energy decrease
00010000(0x1000) - Unit is in unbreakable code section? Cannot receive orders
00100000(0x2000) - Set by nobrkcodestart
01000000(0x4000) -
10000000(0x8000) - cannot attack if set
00000001(0x10000)
00000010(0x20000) - Is a Building?
00000100(0x4000000) - Invincible
00010000(0x10000000) - Speed upgrade
00100000(0x20000000) - cooldown upgrade
+0xE0 - BYTE bResouceType
+0xE1 - BYTE bWireframeRandomizer
+0xE2 - BYTE bSecondaryOrderState
+0xE3 - BYTE bUnknown_E3_Counter_Down
+0xEC - CUNIT* CurrentBuildUnit
UNION
WORD/CUNIT
+0xF8 - WORD wRallyX
+0xFA - WORD wRallyY
+0xFC - CUNIT* RallyUnit
CUNIT
+0xF8 - CUNIT* PreviousPsiProvider
+0xFC - CUNIT* NextPsiProvider
+0x100 - DWORD dwPath_Unknown
+0x106 - BYTE bUnused_106
+0x107 - BYTE bIsBeingHealed
+0x108 - WORD wX_Contours_1_Unknown
+0x10A - WORD wY_Contours_1_Unknown
+0x10C - WORD wX_Contours_2_Unknown
+0x10E - WORD wY_Contours_2_Unknown
+0x110 - WORD wRemoveTimer
Hallucination, DSwarm, DWeb, Broodling
+0x112 - WORD wDMatrixDamage
+0x114 - BYTE bDMatrixTimer
+0x115 - BYTE bStimTimer
+0x116 - BYTE bEnsnareTimer
+0x117 - BTYE bLockdownTimer
+0x118 - BYTE bIrradiateTimer
+0x119 - BYTE bStatisTimer
+0x11A - BYTE bPlagueTimer
+0x11B - BYTE bIsUnderStorm
Used to tell if a unit is under psi storm
+0x11C - CUNIT* IrradiatedBy
+0x120 - BYTE bIrradiatePlayerID
+0x121 - BYTE bParasiteFlags
Each bit corrisponds to the player who has parasited this unit
+0x122 - BYTE bCycleCounter
Runs updates 2 times per sec(about)
+0x123 - BYTE bIsBlind
+0x124 - BYTE bMaelstromCounter
+0x125 - bUnknown_Unreferenced
+0x126 - BYTE bAcidSporeCount
+0x127 - BYTE bAcidSpore1Time
+0x128 - BYTE bAcidSpore2Time
+0x129 - BYTE bAcidSpore3Time
+0x12A - BYTE bAcidSpore4Time
+0x12B - BYTE bAcidSpore5Time
+0x12C - BYTE bAcidSpore6Time
+0x12D - BYTE bAcidSpore7Time
+0x12E - BYTE bAcidSpore8Time
+0x12F - BYTE bAcidSpore9Time
+0x130 - WORD w3by3OffsetIndex
+0x132 - WORD wUnused_1325a
+0x134 - DWORD dwUnknown_134_CUNIT_AI
+0x138 - WORD wAirStrength(see equation below, 1 if has no air weapon but has a ground)
+0x13A - WORD wGroundStrength(see equation below, 1 if has no ground weapon but has an air)
+0x13C - DWORD dwTableID_Unknown_1
+0x140 - DWORD dwTableID_Unknown_2
+0x144 - DWORD dwTableID_Unknown_3
+0x148 - DWORD dwTableID_Unknown_4
+0x14C - BYTE bRepulse_Unknown_1
+0x14D - BYTE bRepulse_Unknown_2
+0x14E - BYTE bDriftPosX(mapsizex/1.5 max)
+0x14F - BYTE bDriftPosY(mapsizey/1.5 max) |
|