Ativa o menu
Alternar menu de preferências
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.

ACS_NamedExecuteWithResult

De Brdoom wiki
Revisão de 12h04min de 6 de março de 2026 por MegaManx3 (discussão | contribs) (Criou página com '{{DISPLAYTITLE:ACS_NamedExecuteWithResult}}__NOTOC__ int '''ACS_NamedExecuteWithResult''' (string ''script'', int ''s_arg1'', int ''s_arg2'', int ''s_arg3'', int ''s_arg4'') == Uso == Variante de ACS_ExecuteWithResult para named scripts. Há uma versão desta função em ACS e outra em DECORATE. Ambas se comportam de forma idêntica. A versão DECORATE também pode ser chamada pelo alias mais curto '''CallACS''' em DECORATE expressions. Outro alias...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

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

Uso

Variante de ACS_ExecuteWithResult para named scripts.

Há uma versão desta função em ACS e outra em DECORATE. Ambas se comportam de forma idêntica. A versão DECORATE também pode ser chamada pelo alias mais curto CallACS em DECORATE expressions. Outro alias para esta função é ACS_ScriptCall, que introduz a capacidade de a função ser chamada por objetos actor arbitrários, assim como pelo objeto self (veja o segundo exemplo abaixo). Este alias é exclusivo de DECORATE e ZScript.

ACS_(Named)ExecuteWithResult tem uma pequena diferença além de retornar um valor. Eles executam imediatamente assim que são chamados, enquanto os outros tipos geralmente esperam um tic antes de agir.

No entanto, ela não está disponível como um action special: para chamar scripts nomeados a partir de um special de line ou thing, você precisa usar a variante não nomeada (ACS_ExecuteWithResult) em UDMF, com o argumento customizado arg0str definido para o nome do script — isso sobrescreverá o primeiro parâmetro.

Parâmetros

  • script: Nome do script a executar
  • s_arg1: Primeiro argumento passado para o script
  • s_arg2: Segundo argumento passado para o script
  • s_arg3: Terceiro argumento passado para o script
  • s_arg4: Quarto argumento passado para o script

Valor de retorno

Retorna o valor de retorno do script executado. Veja SetResultValue.

Exemplos

Este exemplo mostra um item similar ao item Mystic Ambit de Hexen: verifica qual classe de jogador usa um item e aplica um efeito diferente.

Item em Decorate:

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, Predefinição:Const | Predefinição:Const, random(50, 90))
    Stop
  AlternatePlayer:
    TNT1 A 0 A_RadiusGive("PowerImproveDamage", 256, Predefinição:Const | Predefinição:Const, 1)
    Stop
  }
}

Script ACS:

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


Este item de exemplo demonstra o uso de ACS_ScriptCall. Ao ser pego, ele spawna um baron of hell e faz duas chamadas de script ACS: uma feita pelo próprio baron of hell, e outra feita pelo actor que pegou o 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)
            {
                // O chamador é o objeto baron of hell.
                // Usar ACS_NamedExecuteWithResult, em vez disso, é inaceitável aqui.
                mobj.ACS_ScriptCall("SomeScript");

                // O chamador é o objeto self (o actor que pegou o item).
                // Usar ACS_NamedExecuteWithResult, em vez disso, é aceitável aqui.
                ACS_ScriptCall("SomeOtherScript");
            }
        }
        Stop;
    }
}
Script functions
ACS_Execute ACS_NamedExecute
ACS_ExecuteWait ACS_NamedExecuteWait
ACS_ExecuteAlways ACS_NamedExecuteAlways
ACS_ExecuteWithResult ACS_NamedExecuteWithResult
ACS_LockedExecute ACS_NamedLockedExecute
ACS_LockedExecuteDoor ACS_NamedLockedExecuteDoor
ACS_Suspend ACS_NamedSuspend
ACS_Terminate ACS_NamedTerminate
ScriptWait NamedScriptWait
FS_Execute UsePuzzleItem