What goes in the condition for the function (i.e. the bit that goes in '()' after the function name) changes for which function CALLED that function in the first place.
To explain, you used the AddTimer function, which adds a function 'callback'. The specific conditions for the callback function when created by the AddTimer function are (string &in asTimer)
void AddTimer(string& asName, float afTime, string& asFunction);
Creates a timer which calls a function when it expires.
Callback syntax:
void MyFunc(string &in asTimer)
asName - the name of the timer
afTime - time in seconds
asFunction - the function to call
The part you need to look at is the 'Callback syntax'. Now look at the function you used earlier,
SetEntityPlayerInteractCallback("key_2", "spawn_func", true);
void spawn_func(string &in item)
The correct 'Callback sytax' for this function is
(string &in asEntity)
void SetEntityPlayerInteractCallback(string& asName, string& asCallback, bool abRemoveOnInteraction);
Calls a function when the player interacts with a certain entity.
Callback syntax:
void MyFunc(string &in asEntity)
asName - internal name
asCallback - function to call
abRemoveOnInteraction - determines whether the callback should be removed when the player interacts with the entity
All this I've taken from the Engine Scripts page on the wiki,
http://wiki.frictionalgames.com/hpl2/amn..._functions
Hope this helps mate