中国虚拟军事网(VME)- 专注于武装突袭系列虚拟军事游戏

 找回密码
 加入VME

QQ登录

只需一步,快速开始

搜索
楼主: ZDS5206

[讨论] 求救,如何用触发器实现某一单位“弹药无限”的效果?

  [复制链接]
发表于 2011-4-9 14:05:48 | 显示全部楼层
ZDS5206 发表于 2011-4-8 12:16
this addEventHandler ["fired",{(vehicle this) addMagazine "Heat125"}];
这条语句直接写在T-80的Init那 ...

那改成
  1. this addEventHandler ["fired",{(vehicle player) addMagazine "Heat125"}];
复制代码
_AmmoNumber你可以随便取名,_AN,_xx,_number,_ammo .........
只要注意变量前有"_"的,为局部变量,局部变量只会被其所在的脚本认可而不会得到其他脚本的认可,所以在用局部变量之前要用Private [];声明。

如果你用全局变量,就没有"_"。比如AmmoNumber,它可以得到任务本身即其他所有脚本的全部认可并且不能用Private [];做局部声明。
发表于 2011-4-9 14:13:23 | 显示全部楼层
本帖最后由 FFUR2007SLX2_5 于 2011-4-10 09:09 编辑

PS

如果还不行,就用脚本:sqf = [] execVM "test.sqf";

test.sqf
  1. private ["_AmmoNumber"]; //声明局部变量,以防止变量重复使用
  2. _AmmoNumber = (vehicle player) ammo "Heat125"; //确定载具弹药初始数
  3. while {true} do {
  4.     if (_AmmoNumber < (vehicle player) ammo "Heat125") then {
  5.         (vehicle player) addMagazine "Heat125";
  6.     } else {
  7.     };
  8.     sleep 1;
  9. };  //每隔1秒循环,一旦现有炮弹数小于初始炮弹数,便增加一发炮弹
复制代码
头像被屏蔽
 楼主| 发表于 2011-4-10 01:13:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-4-10 09:08:36 | 显示全部楼层
ZDS5206 发表于 2011-4-10 01:13
等等……
你确定sqf = []exec "****.sqf"这个语句能在闪点里面使用?

你可以试一下,由于我是在ARMA2中测试的。

所以不清楚OFP是否支持sqf = [] execVM "Script.sqf"; 当然,更推荐用execVM,因为使用exec执行sqf脚本可能会出错。
头像被屏蔽
 楼主| 发表于 2011-4-10 15:43:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-4-10 16:23:35 | 显示全部楼层
闪点老了能用的语句太少,不过我猜用强大的addEventHandler语句应该能实现弹药无限的效果吧,等晚上有空看一下闪电支持的语句有没有,搞个通用型的弹药无限....
如果不支持sqf就用sqs嘛,sqf的长处也就是能模块化脚本可以进行预加载处理,要用时可以快速载入,一般的小脚本sqs也不错。
发表于 2011-4-10 20:12:48 | 显示全部楼层
本帖最后由 FFUR2007SLX2_5 于 2011-4-10 22:15 编辑
ZDS5206 发表于 2011-4-10 15:43
不行……
sqf = [] exec "****.sqf"
sqf = [] execVM "****.sqf"


好吧,那就换成sqs,不过同样需要你的测试。

  1. private ["_AmmoNumber"];
  2. _AmmoNumber = (vehicle player) ammo "Gun125"
  3. #loop
  4. @(((vehicle player) ammo "Gun125") < _AmmoNumber)
  5. (vehicle player) RemoveMagazines "Heat125"
  6. ~0.1
  7. (vehicle player) addmagazine "Heat125"
  8. goto "loop"
复制代码
[] exec "Script.sqs";
发表于 2011-4-10 20:20:35 | 显示全部楼层
this addEventHandler ["fired",{_wp = _this select 1;_mg = magazines (_this select 0);_ammo =(_this select 0) ammo _wp;if(_ammo <= 1)then{{(_this select 0) removeMagazine _x}forEach _mg;{(_this select 0) addMagazine _x}forEach _mg ;};}];
将上面那段代码粘帖到车辆或者单位的初始化框里(for ofp1.96 only)。看上去很明显有个bug打完一个弹夹,所有的武器使用前都要有个填蛋过程。当然可以完善但脚本会比较长..所以就偷懒了..应该可以满足一般要求了。最好不要滥用小心游戏崩溃..  :-D   试试看吧..
发表于 2011-4-10 22:56:11 | 显示全部楼层
就我所知由于代码限制,在OFP中弹药似乎只能一弹夹一弹夹补充,不能一发一发补充子弹。
头像被屏蔽
 楼主| 发表于 2011-4-12 13:35:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-4-12 20:58:31 | 显示全部楼层
ZDS5206 发表于 2011-4-12 13:35
23楼的果然不行,游戏直接崩溃……
22楼的脚本代码拿来使用,似乎也没效果……

我会抽空改下脚本的,不过由于近几日较忙,可能要等几天。

大概16号以后我会回来。
头像被屏蔽
 楼主| 发表于 2011-4-12 23:33:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-4-18 22:26:57 | 显示全部楼层
ZDS5206 发表于 2011-4-12 23:33
拜托你了= =

你可以试试这串:
  1. this addeventhandler ["fired",{(vehicle (_this select 0)) addmagazine ((magazines (_this select 0)) select 0);}];
复制代码
直接放到你所要坦克的init里,测试结果是主炮炮弹打不光而且越打越多。
发表于 2011-4-19 15:51:56 | 显示全部楼层
本帖最后由 ccddwind 于 2011-4-19 16:06 编辑

YOU addEventHandler ["fired",{_this exec "YOU_fire1.sqs"}]
YOU = 你希望增加“弹”的人物或载具的名称。如你希望从外部嵌入调用程序则可用:
(units _YOU select 0) addEventHandler ["fired",{_this exec "YOU_fire1.sqs"}]
一旦此程序侦察到你定义的“units _YOU”单位开火,程序便自动运行 YOU_fire1.sqs。于是你还得建立YOU_fire1.sqs文件
在该文件中你可执行units _YOU addmagazine "弹药名称"  如此便可实现无限弹药方案。
----------------------------------------------
问题是:比如是坦克配备有不止一样武器!它开火也可能是机枪,此刻也去增枚炮弹显然是不合武器定义规矩很可能形成游戏崩溃!
如何判断它的开火是发射什么?也可通设计某程序来实现,这样便能选择什么时候该增加弹药什么时候又不了。
---------------------------------------------------------------------------------------------------------------------------------
有趣的是(units _YOU select 0) addEventHandler ["fired",{_this exec "YOU_fire1.sqs"}]此功能可绑定在一群坦克或战士身上。这样此支部队就不愁弹药补给问题了
头像被屏蔽
 楼主| 发表于 2011-4-22 15:42:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 加入VME

本版积分规则

小黑屋|中国虚拟军事网

GMT+8, 2024-4-17 07:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表