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

.

.

 
 
 

日志

 
 

武装突袭3 Mod 的制作.若干问题 (9),如何改变对 CVI 城市单位的 阵营关系,以及一些问题  

2015-04-08 20:14:21|  分类: 脚本和编辑 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

【阵营设置】
opfor setFriend [blufo, 0];  //opfor 阵营对  blufo 敌对!
blufo setFriend [opfor, 0];


opfor setFriend [civilian , 0];
blufo setFriend [civilian , 0];

但是对 civilian  城市单位这样设置是无效的.(为什么?)
civilian  setfriend [opfor, 0];
civilian  setfriend [blufo, 0];
不论有没有以上二行设置
在 A3 的原始civ 单位 默认设定中.只要.civ 单位获得武器,
会认为 opfor 为敌对随之射杀.然而. 不论 opfor 或者 blufo 都不会
把 civ 单位当作 敌对.即使civ 射杀 opfor/blufo  单位,

下面是BI 上,一个设定 针对 civ 单位射杀  opfor/blufo 单位,opfor/blufo 单位相应做出反击的脚本
不过这个脚本有个缺陷.如果,把几个 civ 单位编为一组,(或者放在一起),civ 射杀blufo 单位
后,会被其他 civ 单位视同敌人.随之被其他 civ 单位击毙



{ // forEach block start

// only if the unit is blufor
// _x is the magic variable referring to the current forEach unit
if (side _x == blufor) then
{

// add an eventhandler for getting hit
_x addEventHandler ["Hit",
{
// Object the event is attached to is the first variable passed
_unit = _this select 0;
// Object that caused the damage is the second variable passed
_causedBy = _this select 1;

if (side _causedBy == civilian) then
{
_causedBy addRating -2500;
_unit removeAllEventHandlers "Hit";
// or
//[_causedBy] joinSilent someOpforGroup;
};

}];

// add an eventhandler for if the unit is killed
_x addEventHandler ["Killed",
{
// Object the event is attached to is the first variable passed
_unit = _this select 0;
// Object that caused the damage is the second variable passed
_causedBy = _this select 1;

if (side _causedBy == civilian) then
{
_causedBy addRating -2500;
_unit removeAllEventHandlers "Killed";
// or
//[_causedBy] joinSilent someOpforGroup;
};

}];

};


} forEach allUnits; // cycle through all units in the mission

if (side _x ==opfor ) then
{

// add an eventhandler for getting hit
_x addEventHandler ["Hit",
{
// Object the event is attached to is the first variable passed
_unit = _this select 0;
// Object that caused the damage is the second variable passed
_causedBy = _this select 1;

if (side _causedBy == civilian) then
{
_causedBy addRating -2500;
_unit removeAllEventHandlers "Hit";
// or
//[_causedBy] joinSilent someOpforGroup;
};

}];

// add an eventhandler for if the unit is killed
_x addEventHandler ["Killed",
{
// Object the event is attached to is the first variable passed
_unit = _this select 0;
// Object that caused the damage is the second variable passed
_causedBy = _this select 1;

if (side _causedBy == civilian) then
{
_causedBy addRating -2500;
_unit removeAllEventHandlers "Killed";
// or
//[_causedBy] joinSilent someOpforGroup;
};

}];

};


} forEach allUnits; // cycle through all units in the mission

hint "ok start 2";


【解释一下】

   addEventHandler 函数是一个全局事件句柄.

   addRating //当单位 的 rating 值设定到 -2000 后.单位将被所有的单位 敌对.
        BI 文书:
                  When the rating gets below -2000, the unit's side switches to "ENEMY" (sideEnemy) and the unit is attacked by everyone.(see Rating Values)
    
     allUnits  这是一个所有单位的数组.
  评论这张
 
阅读(452)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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