Hmmm I'll do some experimentation and I have an idea how to get it to remove the key once its used I'll try them out on my test map and see if I can't figure something out.
Edit: Alright this is what I was able to come up with.
void OnStart()
{
AddUseItemCallback("", "Right", "Castle", "UsedRightKeyOnDoor", true);
AddUseItemCallback("", "Wrong_1", "Castle", "UsedWrongKeyOnDoor", false);
AddUseItemCallback("", "Wrong_2", "Castle", "UsedWrongKeyOnDoor", false);
AddUseItemCallback("", "Wrong_3", "Castle", "UsedWrongKeyOnDoor", false);
AddUseItemCallback("", "Wrong_4", "Castle", "UsedWrongKeyOnDoor", false);
AddUseItemCallback("", "Wrong_5", "Castle", "UsedWrongKeyOnDoor", false);
}
void UsedRightKeyOnDoor (string &in asItem, string &in asEntity)
{
SetSwingDoorLocked("Castle", false, true);
RemoveItem("Right");
RemoveItem("Wrong_1");
RemoveItem("Wrong_2");
RemoveItem("Wrong_3");
RemoveItem("Wrong_4");
RemoveItem("Wrong_5");
AddDebugMessage("Works", false);
}
void UsedWrongKeyOnDoor (string &in asItem, string &in asEntity)
{
AddDebugMessage("Fail", false);
if (asItem == "Wrong_1")
{
RemoveItem("Wrong_1");
AddDebugMessage("Key should be gone", false);
}
if (asItem == "Wrong_2")
{
RemoveItem("Wrong_2");
AddDebugMessage("Key should be gone", false);
}
if (asItem == "Wrong_3")
{
RemoveItem("Wrong_3");
AddDebugMessage("Key should be gone", false);
}
if (asItem == "Wrong_4")
{
RemoveItem("Wrong_4");
AddDebugMessage("Key should be gone", false);
}
if (asItem == "Wrong_5")
{
RemoveItem("Wrong_5");
AddDebugMessage("Key should be gone", false);
}
}
Alright using this I was able to kind of get what you seem to be describing obviously changing and adding other things as necessary. Still requires a bunch of lines of code but it only uses 2 functions which is better than having 5 similar functions wasting space. It does require you to still create an AddUseItemCallback for each key but that's just copy and paste and a number change.