Arma 3 - 带有动态变量的addAction到特定的Object

时间:2017-09-29 01:34:04

标签: sqf

在Arma 3中使用自定义合成产生。我目前正在使用“LARs Composition Spawn Script”(https://forums.bistudio.com/forums/topic/191902-eden-composition-spawning/)来生成自定义合成。地图周围的产卵成分就像一个魅力。

在合成中有一个对象(AI),其中varname为“quest_giver”。对于这个特定的对象,我想添加一个Action。我目前的代码是:

    // SPAWN RANDOM COMPOSITION ON RANDOM POSITION
    _spawned_composition = [ _random_composition, _pos, [0,0,0], random 360 ] call LARS_fnc_spawnComp;

    // GET OBJECTS FROM THE SPAWNED COMP BACK (ARRAY)
    _objects = [_spawned_composition] call LARs_fnc_getCompObjects;

    // TRYING TO ITERATE THROUGH OBJECTS TO FIND "quest_giver" 
    // AND ADD ACTION TO IT. 
    {
        _type = typeName _x;
        if (_type == "GROUP") then {
            _units = units _x;
            {
                _var = missionNamespace getVariable ["name", _x];
                _name = typeOf _var;
                if (_name == "quest_giver") then {
                    player globalChat format["%1",_name];
                    //_speak = _x addAction ["Speak", {hint format ["Hello, it works !"]}];
                };
            } forEach _units;
        };
    } forEach _objects;

If(_name == "quest_giver")处的错误,其中_name是OBJECT,但“quest_giver”当然是STRING。所以我得到Error Generic error in expression

然而,_var = missionNamespace getVariable [“name”,_ x];返回“quest_giver”。但它作为一个OBJECT,因为typeOf _var返回“OBJECT”而不是STRING。

我猜不出这里最简单的事情。任何想法,如果这甚至可以在理论上起作用?

我想要实现的目标

  • 创建各种自定义合成,其中的Object始终是“quest_giver”。到目前为止工作。
  • 选择随机组合并在世界随机位置上生成它。到目前为止工作。
  • 向任务提供者添加动作,以便玩家可以与他交谈。文字弹出简单的文字,内容将随机任务ala带给我5 x水瓶。

我在添加操作部分之前和之后了解我的方法,但无法弄清楚如何向此特定对象添加操作。 ......

1 个答案:

答案 0 :(得分:1)

除非我弄错了,你似乎对如何获得该单位的名字感到困惑? 可能你想从单元的命名空间中获取名称var(如果你正在使用的东西确实把它放在那里):

_name = _x getVariable ["name" /*var name*/, "" /*default value*/]; 
if (_name == "quest_giver") then { 
//...

或更可能(如果它是关于通过编辑器设置的名称),名称为function:

if ((name _x) == "quest_giver") then {