NWScript:
int ACTION_QUEUE_UDEVENT_NUMBER = 3000;
void PushAction(int nAction, object oTarget=OBJECT_SELF) {
string sActions = GetLocalString(oTarget, "action_list");
if (GetStringLength(sActions) == 0) {
sActions = IntToString(nAction)+";";
} else {
sActions = sActions+IntToString(nAction)+";";
}
SetLocalString(oTarget, "action_list", sActions);
}
int GetActiveAction(object oTarget=OBJECT_SELF) {
string sAction = GetLocalString(oTarget, "activeaction");
if (sAction == "") {
string sActions = GetLocalString(oTarget, "action_list");
if (sActions == "") return 0;
int nIndex = FindSubString(sActions, ";");
sAction = GetStringLeft(sActions, nIndex);
if (sAction == "") {
return 0;
} else {
SetLocalString(oTarget, "activeaction", sAction);
}
}
return StringToInt(sAction);
}
void PopAction(object oTarget=OBJECT_SELF) {
string sActions = GetLocalString(oTarget, "action_list");
int nLen = GetStringLength(sActions);
int nIndex = FindSubString(sActions, ";")+1;
sActions = GetSubString(sActions, nIndex, nLen-nIndex);
SetLocalString(oTarget, "action_list", sActions);
DeleteLocalString(oTarget, "activeaction");
SignalEvent(oTarget, EventUserDefined(ACTION_QUEUE_UDEVENT_NUMBER));
}