ACS_NamedExecuteWithResult

int ACS_NamedExecuteWithResult (string script, int s_arg1, int s_arg2, int s_arg3, int s_arg4)

Usage

Variant of ACS_ExecuteWithResult for named scripts.

There is both an ACS and a DECORATE version of this function. Both behave identically. The DECORATE version can also be called by the shorter alias CallACS in DECORATE expressions. Another alias for this function is ACS_ScriptCall, which introduces the ability for the function to be called by arbitrary actor objects as well as self object (see the second example below). This alias is exclusive to DECORATE and ZScript.

ACS_(Named)ExecuteWithResult has one small difference aside returning a value. They execute immediately once called, while the other types will usually wait a tic before acting.

However, it is not available as an action special: to call named scripts from a a line or thing special, you have to use the non-named variant (ACS_ExecuteWithResult) in UDMF, with the arg0str custom argument set to the name of the script this will override the first parameter.

Parameters

  • script: Name of the script to execute
  • s_arg1: First argument passed to the script
  • s_arg2: Second argument passed to the script
  • s_arg3: Third argument passed to the script
  • s_arg4: Fourth argument passed to the script

Return value

Returns the return value of the executed script. See SetResultValue.

Examples

This example shows an item similar to Hexen's Mystic Ambit item: Checks which player class uses an item and having a different effect.

Decorate Item:

Actor ClassBoost : CustomInventory
{
  Inventory.MaxAmount 25
  Inventory.InterHubAmount 25
  +INVENTORY.INVBAR
  Inventory.Icon "ARTIHRAD"
  States
  {
  Spawn:
    HRAD ABCDEFGHIJKLMNOP 4 Bright
    Loop
  Use:
    TNT1 A 0 A_JumpIf(CallACS("CheckPlayerClass", 0, 0, 0) == 0, "NormalPlayer")
    TNT1 A 0 A_JumpIf(CallACS("CheckPlayerClass", 0, 0, 0) == 1, "AlternatePlayer")
    Fail
  NormalPlayer:
    TNT1 A 0 A_RadiusGive("Health", 256, RGF_PLAYERS | RGF_GIVESELF, random(50, 90))
    Stop
  AlternatePlayer:
    TNT1 A 0 A_RadiusGive("PowerImproveDamage", 256, RGF_PLAYERS | RGF_GIVESELF, 1)
    Stop
  }
}

ACS Script:

script "CheckPlayerClass" (void)
{
  if(CheckActorClass(0, "DoomPlayer"))
  {
    SetResultValue(0);
    terminate;
  }
  else if(CheckActorClass(0, "AlternateDoomPlayer"))
  {
    SetResultValue(1);
    terminate;
  }
}


This example item demonstrates the use of ACS_ScriptCall. Upon pickup, its spawns a baron of hell and makes two ACS script calls: one which is done by the baron of hell itself, and another which is done by the actor which picked up the item.

class BaronSummoner : CustomInventory
{
    States
    {
    Spawn:
        SOUL ABCD 6 Bright;
        Loop;

    Pickup:
        TNT1 A 0
        {
            bool res;
            Actor mobj;
            [res, mobj] = A_SpawnItemEx("BaronOfHell", 100);

            if (res && mobj)
            {
                // Caller is the baron of hell object.
                // Using ACS_NamedExecuteWithResult, instead, is unacceptable here.
                mobj.ACS_ScriptCall("SomeScript");

                // Caller is the self object (the actor which picked the item up).
                // Using ACS_NamedExecuteWithResult, instead, is okay here.
                ACS_ScriptCall("SomeOtherScript");
            }
        }
        Stop;
    }
}
Script functions
ACS_ExecuteACS_NamedExecute
ACS_ExecuteWaitACS_NamedExecuteWait
ACS_ExecuteAlwaysACS_NamedExecuteAlways
ACS_ExecuteWithResultACS_NamedExecuteWithResult
ACS_LockedExecuteACS_NamedLockedExecute
ACS_LockedExecuteDoorACS_NamedLockedExecuteDoor
ACS_SuspendACS_NamedSuspend
ACS_TerminateACS_NamedTerminate
ScriptWaitNamedScriptWait
FS_ExecuteUsePuzzleItem
This article is issued from Zdoom. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.