注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

.

.

 
 
 

日志

 
 

武装突袭3 Mod 的制作.若干问题 (7)-player 使用死亡脚本 onPlayerKilled.sqf 不兼容的问题  

2015-04-02 17:40:04|  分类: 脚本和编辑 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
onPlayerKilled.sqf 的问题

根据 BIS 文档,可以在 mission 中使用  ext 文件.和 init 文件,用模板来使用

onPlayerKilled.sqf 文件放在 根目录下会自动得到执行.
但是. 在实际使用中会有些问题.
▼为了 实现变兔子的功能.这种方式很不灵活

而且,会产生一些.不兼容的随机 后果
1> 变兔子.屏幕变暗了

2>程序同步执行,随机出现不同结果.
     a.变兔子.
     b.程序mission 结束

【办法】

由于这些不同的结果.还是选择
使用 触发器,

player addEventHandler ["killed", {_this exec "mycommand\Mysqf\onPlayerKilled.sqf"}];

killed  句柄.会在 player 死亡的时候触发 执行  指定的 脚本.而非.自动执行根目录下 的
onPlayerKilled.sqf 脚本

【execVM 的问题】
这里会产生一个问题,当使用 execVM 时候,程序有时候仍然可以自己 结束任务.

而使用 exec 就可以避免,这种情况,可见 exec 是单线程的而 execVM,任务可以并行
【thomsonb 的办法 】
********************************************************************
thomsonb 的解决办法似乎好些但是会出现一些随机问题
他的办法可以使变成兔子后屏幕不变暗,但是兔子仍然无法.接受
onPlayerKilled.sqf :
fieldDressing = true;
deadBloke = _this select 0;
theKiller = _this select 1;
if(isNull theKiller)then{theKiller=deadBloke};

deadBloke removeAction comAct;

deadBloke removeAction dresAct;
_dir = [theKiller,deadBloke] call directionAfromB;
_an = "Rabbit";
_anString = "a Rabbit.";
setAccTime 1;
sleep 0.25;
if(!suicideBunnyUsed)then{cutText [DEATH_TEXT, "BLACK OUT", 0]};
sleep 3.25;
if(!suicideBunnyUsed)then{cutText ["", "BLACK IN", 5]}else{
waitUntil{(abs (((velocity deadBloke) select 0) + ((velocity deadBloke) select 1) +
((velocity deadBloke) select 2))) < 0.01};

cutText ["", "BLACK OUT", 0];
sleep 1;
};
selectPlayer createAgent [_an,[getPos player,_dir + 180,1] call PBD, [], 0, "none"];
player setDir _dir;


sleep 1;
Hint ("You are now " + _anString);



showRadio true;
player addWeapon "itemMap";
player addWeapon "itemCompass";
player addWeapon "itemGPS";
player addWeapon "nvGoggles";
sleep 1;

ACT_COM=player addAction ["MyCommand", "mycommand\Mysqf\DialogEnd.sqf", [], 11, false];

if(!(theKiller==deadBloke))then
{
player addAction ["Who got me?", "whoGotMe.sqf", [], 10, true]

};

player addAction ["Statistics", "animalStats.sqf", [], 9, true];
player addAction ["Respawn", "respawnAction.sqf", [], 8, true];
player addAction ["Suicide", "suicideBunny.sqf", [], 7, true];

if(GCAM_ACTIVE)then{player addAction ["GCam", "gcam\gcam.sqf", [], 6, true]};
player addAction ["End Mission", "animalEnd.sqf", [], 5, true];

在 他的代码中这一行是避免出现 暗屏幕的方式
waitUntil{(abs (((velocity deadBloke) select 0) + ((velocity deadBloke) select 1) + 
((velocity deadBloke) select 2))) < 0.01};
这个计算速度的 程序.就是为了避免屏幕变暗,和防止 mission end .
重复测试了几次.这个程序.并不是  100%能成功.
附带运行的几个  cutext [] 也成了速度快门,线程运行的成功的附带.确实不好用.
cutText [DEATH_TEXT, "BLACK OUT", 0]


▼我做的脚本,仍然没用解决 变兔子后屏幕变暗的问题
但是可以保证,任务不提前结束.
  评论这张
 
阅读(441)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017