ACS_NamedExecuteWithResult
Mais ações
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; } }