Página 1 de 1

[GTA3script] Checar Tasks

Enviado: 08 Set 2019, 01:17
por FilipeS
Em determinados momentos quanto você está trabalhando com tarefas (TASKs) ou até sequencias delas em seu script, é crucial que você saiba se sua entidade esteja realizando uma determinada tarefa ou não, por isso eu vou ensinar a você a como checa-las e até te mostrar o que fazer, e o que não fazer quanto você estiver trabalhando com TASKS ou SEQUENCE_TASKS

O comando é GET_SCRIPT_TASK_STATUS com ele você pode checar se uma TASK ou SEQUENCE_TASK está ou não sendo executada através de seu opcode.

Basta preencher o comando com estes argumentos:

Código: Selecionar tudo

GET_SCRIPT_TASK_STATUS ped 1465 retorno
Entendendo:

ped: É a entidade que você deseja saber se está realizando ou não uma TASK

1465: Este é o opcode em decimal da TASK, no caso do comando TASK_PAUSE é 0x5B9 (ou 05B9), você pode obter ele através desta lista ou no aquivo "scrlog.ini" do mod.. "Scrlog"  '-'.. Então basta usar um conversor ou a própria calculadora no modo programador para converter o opcode que é em hexadecimal para decimal, ou seja: sendo 0x5B9 (hex) = 1465 (dec), você pode usar constantes para não se perder com os números!

retorno: Qualquer LVAR_INT, nela será retornado o valor 7 caso não esteja fazendo determinada TASK

Isso é muito importante para quando você precisar checar várias vezes alguma coisa e não aplicar a tarefa quando não necessário, evitando a sobrecarga de tarefas, fazendo a entidade ficar parada, um exemplo certo:

Eu quero que o ped entre no carro caso ele não esteja dentro de algum veículo

Código: Selecionar tudo

CONST_INT TASK_PASSENGER 1482 //Opcode convertido para decimal

WHILE TRUE
    WAIT 0

    IF NOT IS_CHAR_IN_ANY_CAR ped
        GET_SCRIPT_TASK_STATUS ped TASK_PASSENGER retorno
        IF retorno = 7 //Caso não esteja realizando esta tarefa de ir até o carro, abrir a porta e entrar
            TASK_ENTER_CAR_AS_PASSENGER ped car -1 -1 //faça isso
        ENDIF
    ENDIF
ENDWHILE
Já que está em loop, sem esta checagem, o ped teria um ataque epilético e não se moveria devido a quantidade de tarefas que seu programador mandou ele fazer de acordo com FPS do jogo! #CharsTambemSaumGent..

Isso também vale para SEQUENCE_TASK basta pegar o opcode do comando PERFORM_SEQUENCE_TASK, que é 0x618 (ou 0618) que  em decimal é 1560:

Código: Selecionar tudo

CONST_INT PERFORM_TASK 1560 //Opcode convertido para decimal

OPEN_SEQUENCE_TASK task_1
TASK_LOOK_ABOUT -1 3000
TASK_ENTER_CAR_AS_DRIVER ped car -1
CLOSE_SEQUENCE_TASK task_1

WHILE TRUE
    WAIT 0

    IF NOT IS_CHAR_IN_ANY_CAR ped
        GET_SCRIPT_TASK_STATUS ped PERFORM_TASK retorno
        IF retorno = 7
            PERFORM_SEQUENCE_TASK ped task_1
        ENDIF
    ENDIF

ENDWHILE

Com isso você pode parar de usar uma SEQUENCE_TASK para cada tarefa simples que precise ser aplicada em loop, pois apesar de funcionar, não é uma boa prática, além de aumentar o número de variáveis em determinadas situações em seu script. 

 

Re: [GTA3script] Checar Tasks

Enviado: 08 Set 2019, 01:18
por thalilmythos
Do you know how to do this in sanny builder?

Re: [GTA3script] Checar Tasks

Enviado: 08 Set 2019, 01:27
por FilipeS
thalilmythos escreveu:
08 Set 2019, 01:18
Do you know how to do this in sanny builder?
Can you use opcode 062E, i think..

Código: Selecionar tudo

062E: get_script_task_status 2@ task 1560 store_to 17@
if 17@ == 7 
    //do something
end
Sorry my bad english and sannybuilder lang..