Jump to content
Printedfinger

(Script) Locking/opening a door with specific item/by specific player

Recommended Posts

Hey people and thanks in advance!

 

Just wanted to add a lock/unlock (in this case unlock) function to my mission. When the mission initializes the specific door should be locked. Only the player that has the new key inventory item should be able to open the specific door.

 

Tried several things but nothing worked, game logic, nearestobject and so on. Also the building i want to have the action on doesn't seem to be a normal object, more like a basic terrain object i guess? Because even the 'edit map objects' module only shows it when i click on 'others'.

 

Quote

private _building = cursorObject; private _numberofdoors = getNumber(configFile >> "CfgVehicles" >> (typeOf _building) >> "numberOfDoors"); if(_numberofdoors == -1 OR _numberofdoors == 0) exitWith {}; //No entry (Not a compatible building)   for "_i" from 1 to _numberOfDoors do {     _building animate[format["door_%1_rot",_i],0];     _building setVariable[format["bis_disabled_Door_%1",_i],1,true]; };

 

This script seems to lock a door whenever your cursor is on it. Not really a solution in my case. If possible i'd like to combine the whole action with BIS_fnc_holdActionAdd.

To check if the player has a key or not i've used this here:

 

Quote

_items = items player;
if ("Keys" in _items) then {

// Script here
};

 

I'm kinda new when it comes to scripting - only looking for a solution to get the whole thing done.

 

Sry for deleting the post, re-added the whole text and explained my case.

 

Thanks,

Printedfinger

 

 

  • Sad 1

Share this post


Link to post
Share on other sites

Basic, but working:

 

place a trigger on you house (to identify it easily). Name it (trigHouse here)

 

[
  (nearestObjects [trigHouse, ["house"], 50])#0,
  "Lock unlock door",
  "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa",
  "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa",
  "
    call {
      private ['_intersects','_select_door'];  
      _intersects = ([cursorObject, 'VIEW'] intersect [ASLToATL eyepos player, (screentoworld [0.5,0.5])]);  
      _select_door = if (count _intersects > 0) then [{_intersects #0 #0},{''}];  
      if (_this distance _target < 15 && 'Keys' in magazines _this) then {  
        MGI_select_door = _select_door;  
        true  
      } else {
        false
      };  
    };  
    true  
  ",
  "true",
  {},
  {},
  {
    if ((_target getVariable [("bis_disabled_" + MGI_select_door),0]) == 0) then {
      _target setVariable ["bis_disabled_"+ MGI_select_door,1,true]  
    } else {  
      _target setVariable["bis_disabled_" + MGI_select_door,0,true]   
    };
  },  
  {},  
  [],  
  5,  
  nil,  
  false,  
  false  
] call BIS_fnc_holdActionAdd;

 

  • Like 2

Share this post


Link to post
Share on other sites

@Printedfinger

 

Dude, you're not in a private forum for a private service. When you ask for something, it's up to you changing your mind, but for clarity, and respect of people who answer, don't delete your question + title.

Not sure I will reply to any other of your question. :hmmm:

 

  • Haha 1
  • Confused 1

Share this post


Link to post
Share on other sites
5 minutes ago, pierremgi said:

@Printedfinger

 

Dude, you're not in a private forum for a private service. When you ask for something, it's up to you changing your mind, but for clarity, and respect of people who answer, don't delete your question + title.

Not sure I will reply to any other of your question. :hmmm:

 

 

Hey pierre. Didn't sleep this night, its a bit stressful rn. First of all, thanks for your time and answer! Sorry - i deleted my stuff like, pretty fast so nobody has to waste time on me. Didn't know anybody was about to react so fact. Please remember i'm just human, as all of you lol. Btw, i tried your script out. Placed a trigger and named it trigHouse, inserted your script. Give me a second to re-write my post so it doesn't look confusing.

 

Regards,

Printed

  • Like 1

Share this post


Link to post
Share on other sites

@pierremgi Thanks as well. So, in fact i should just place a trigger directly on the object (house) - activation by player and so on - and inside onActivation you want me to insert the script or either call it by execVM? And it doesn't matter if my house doesnt have a classname since its a terrain object?

 

Edit: Well, your script works flawless - it really seems to be this damn building i chose. Other buildings which behave as normal building (not terrain object, whatever) with the 'edit' map module work fine with your script.

Share this post


Link to post
Share on other sites

The code picks a first returned house by (nearestObjects [trigHouse, ["house"], 50]).

You can check in console watch line (preview) if  (nearestObjects [cursorobject, ["house"], 50])  returns something while pointing at the house.

If not, try with "Building" or even "tourism" (for Hotel).

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×