Frictional Games Forum (read-only)
[SCRIPT] Multipul Keys - Printable Version

+- Frictional Games Forum (read-only) (https://www.frictionalgames.com/forum)
+-- Forum: Amnesia: The Dark Descent (https://www.frictionalgames.com/forum/forum-6.html)
+--- Forum: Custom Stories, TCs & Mods - Development (https://www.frictionalgames.com/forum/forum-38.html)
+---- Forum: Development Support (https://www.frictionalgames.com/forum/forum-39.html)
+---- Thread: [SCRIPT] Multipul Keys (/thread-23738.html)



Multipul Keys - 3gamers - 10-29-2013

Hey again, I'm trying to get it so that a door only opens when all three keys are used but it keeps giving me a fatal error: unexpected end of script. I'm not sure if my script even works but it wont even load so I can test it. Please someone look over it Smile


void OnStart()
{
AddUseItemCallback("", "key1", "MD1", "Keyfunction1", true);
AddUseItemCallback("", "key2", "MD2", "Keyfunction2", true);
AddUseItemCallback("", "key3", "MD3", "Keyfunction3", true);
AddUseItemCallback("", "key4", "level_wood_3", "Keyfunction4", true);

SetLocalVarInt("Var1", 0);
SetEntityPlayerInteractCallback("dungeonkey1", "func1", true);
SetEntityPlayerInteractCallback("dungeonkey2", "func2", true);
SetEntityPlayerInteractCallback("dungeonkey3", "func3", true);

void OnEnter()
{

}

void OnLeave()
{

}
void Keyfunction1(string &in item, string &in door)
{
SetSwingDoorLocked("MD1", false, true);
PlayGuiSound("unlock_door.snt", 100);
RemoveItem("key1");
}

void Keyfunction2(string &in item, string &in door)
{
SetSwingDoorLocked("MD2", false, true);
PlayGuiSound("unlock_door.snt", 100);
RemoveItem("key2");
}

void Keyfunction3(string &in item, string &in door)
{
SetSwingDoorLocked("MD3", false, true);
PlayGuiSound("unlock_door.snt", 100);
RemoveItem("key3");
}

void Keyfunction4(string &in item, string &in door)
{
SetLevelDoorLocked("level_wood_3", false);
PlayGuiSound("unlock_door.snt", 100);
RemoveItem("key4");
}

void func1(string &in asEntity)
{
AddLocalVarInt("Var1", 1);
func4();

}

void func2(string &in asEntity)
{
AddLocalVarInt("Var1", 1);
func4();
}

void func3(string &in asEntity)
{
AddLocalVarInt("Var1", 1);
func4();
}

void func4()
{
if(GetLocalVarInt("Var1") == 3)
{
SetLevelDoorLocked("level_wood_2", false);
PlayGuiSound("unlock_door.snt", 100);
RemoveItem("dungeonkey1");
RemoveItem("dungeonkey2");
RemoveItem("dungeonkey3");
}
}


RE: Multipul Keys - i3670 - 10-29-2013

You have not closed you OnStart

void OnStart()
{
AddUseItemCallback("", "key1", "MD1", "Keyfunction1", true);
AddUseItemCallback("", "key2", "MD2", "Keyfunction2", true);
AddUseItemCallback("", "key3", "MD3", "Keyfunction3", true);
AddUseItemCallback("", "key4", "level_wood_3", "Keyfunction4", true);

SetLocalVarInt("Var1", 0);
SetEntityPlayerInteractCallback("dungeonkey1", "func1", true);
SetEntityPlayerInteractCallback("dungeonkey2", "func2", true);
SetEntityPlayerInteractCallback("dungeonkey3", "func3", true);

}


RE: Multipul Keys - 3gamers - 10-29-2013

Thank you very much! Only it was a moot point as the code itself doesn't do what I want it too. Which brings up my next question: does anyone know how to code a level door so that it requires three keys to work?


RE: Multipul Keys - Omenapuu - 10-29-2013

(10-29-2013, 05:51 PM)3gamers Wrote: Thank you very much! Only it was a moot point as the code itself doesn't do what I want it too. Which brings up my next question: does anyone know how to code a level door so that it requires three keys to work?

This seems a bit complicated, and I'm not sure does it work, but it should:

-----------------------
void OnStart()
{
AddUseItemCallback("doorpuzzle1", "key1", "door1", "key1", true);
AddUseItemCallback("doorpuzzle2", "key2", "door1", "key2", true);
AddUseItemCallback("doorpuzzle3", "key3", "door1", "key3", true);
SetLocalVarInt("doorpuzzle", 0);
}
void OnEnter()
{

}
void OnLeave()
{

}
void key1(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key2(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key3(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
------------------------------
That basically says, everytime you use 1 of these keys, it checks the VarInt. If it's already 2 (=you used 2 keys already and this is last) it unlocks the door. If it isn't 2 yet (=you haven't used 2 yet) it just adds one to the VarInt. So it's simple as that. And also, you can find codes here: wiki.frictionalgames.com/hpl2/amnesia/script_functions


RE: Multipul Keys - 3gamers - 10-29-2013

(10-29-2013, 09:43 PM)Omenapuu Wrote:
(10-29-2013, 05:51 PM)3gamers Wrote: Thank you very much! Only it was a moot point as the code itself doesn't do what I want it too. Which brings up my next question: does anyone know how to code a level door so that it requires three keys to work?

This seems a bit complicated, and I'm not sure does it work, but it should:

-----------------------
void OnStart()
{
AddUseItemCallback("doorpuzzle1", "key1", "door1", "key1", true);
AddUseItemCallback("doorpuzzle2", "key2", "door1", "key2", true);
AddUseItemCallback("doorpuzzle3", "key3", "door1", "key3", true);
SetLocalVarInt("doorpuzzle", 0);
}
void OnEnter()
{

}
void OnLeave()
{

}
void key1(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key2(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key3(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
------------------------------
That basically says, everytime you use 1 of these keys, it checks the VarInt. If it's already 2 (=you used 2 keys already and this is last) it unlocks the door. If it isn't 2 yet (=you haven't used 2 yet) it just adds one to the VarInt. So it's simple as that. And also, you can find codes here: wiki.frictionalgames.com/hpl2/amnesia/script_functions

I put in your code and had to fix a couple of things like missing parathesis but now its giving me an error that I'm not sure how to fix or even what it means. I included a picture of the errors.

Thank you so much for your help, I REALLY appreciate it. Smile
And I checked out the wiki and have been using it for other codes but I just couldn't find anything on this.


RE: Multipul Keys - Omenapuu - 10-29-2013

(10-29-2013, 10:53 PM)3gamers Wrote:
(10-29-2013, 09:43 PM)Omenapuu Wrote:
(10-29-2013, 05:51 PM)3gamers Wrote: Thank you very much! Only it was a moot point as the code itself doesn't do what I want it too. Which brings up my next question: does anyone know how to code a level door so that it requires three keys to work?

This seems a bit complicated, and I'm not sure does it work, but it should:

-----------------------
void OnStart()
{
AddUseItemCallback("doorpuzzle1", "key1", "door1", "key1", true);
AddUseItemCallback("doorpuzzle2", "key2", "door1", "key2", true);
AddUseItemCallback("doorpuzzle3", "key3", "door1", "key3", true);
SetLocalVarInt("doorpuzzle", 0);
}
void OnEnter()
{

}
void OnLeave()
{

}
void key1(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key2(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
void key3(string &in asItem, string &in asEntity)
{
if(GetLocalVarInt("doorpuzzle" == 2)
{
SetLevelDoorLocked("door1", false);
}
else if(GetLocalVarInt("doorpuzzle" != 2)
{
AddLocalVarInt("doorpuzzle", 1);
}
}
------------------------------
That basically says, everytime you use 1 of these keys, it checks the VarInt. If it's already 2 (=you used 2 keys already and this is last) it unlocks the door. If it isn't 2 yet (=you haven't used 2 yet) it just adds one to the VarInt. So it's simple as that. And also, you can find codes here: wiki.frictionalgames.com/hpl2/amnesia/script_functions

I put in your code and had to fix a couple of things like missing parathesis but now its giving me an error that I'm not sure how to fix or even what it means. I included a picture of the errors.

Thank you so much for your help, I REALLY appreciate it. Smile
And I checked out the wiki and have been using it for other codes but I just couldn't find anything on this.

Oh, instead of
----
if(GetLocalVarInt("doorpuzzle" == 2)
----
type if(GetLocalVarInt("doorpuzzle") == 2
and
----
else if(GetLocalVarInt("doorpuzzle" != 2)
----
type if(GetLocalVarInt("doorpuzzle") != 2)

That should help.
But going to sleep now, hope it worked.


RE: Multipul Keys - 3gamers - 10-29-2013

It worked beautifully thank you very very much!