Página 1 de 1

Executar um programa a partir de um evento

Enviado: 21 Nov 2020, 09:36
por bisnaguitos
Queria invocar um .exe quando acontecesse algum evento específicio. A ideia meio é chamar esse exe quando o cj sofrer algum dano, existe algum comando pra isso?

Re: Executar um programa a partir de um evento

Enviado: 21 Nov 2020, 11:39
por Junior_Djjr
Por que você iria querer o seu mod abrindo um executável?

Re: Executar um programa a partir de um evento

Enviado: 21 Nov 2020, 14:38
por bisnaguitos
não precisa ser propriamente um .exe, pode ser um bath.
basicamente eu quero acender um led com um microcontrolador e depois implementar isso de alguma forma para aumentar a experiencia no jogo

Re: Executar um programa a partir de um evento  [RESOLVIDO]

Enviado: 21 Nov 2020, 14:45
por Junior_Djjr
bisnaguitos escreveu:
21 Nov 2020, 14:38
não precisa ser propriamente um .exe, pode ser um bath.
basicamente eu quero acender um led com um microcontrolador e depois implementar isso de alguma forma para aumentar a experiencia no jogo
Batch?
https://www.mixmods.com.br/2018/04/coor ... das-e.html
Ele usa batch para copiar a coordenada e ângulo. Você pode ver o código dele, como ele fez.
É basicamente carregar kernel32.dll, pegar o procedure WinExec, gerar a string cmd /c echo|set /p=%f %f %f|clip (pode botar ela num DUMP...ENDDUMP mesmo) e chamar o procedure enviando ela  e um 0 (que não sei o que é, lembrando que no CLEO é invertido, o 0 vem antes e depois o ponteiro pro buffer com a string).

Re: Executar um programa a partir de um evento

Enviado: 21 Nov 2020, 17:09
por bisnaguitos
Junior_Djjr escreveu:
21 Nov 2020, 14:45
bisnaguitos escreveu:
21 Nov 2020, 14:38
não precisa ser propriamente um .exe, pode ser um bath.
basicamente eu quero acender um led com um microcontrolador e depois implementar isso de alguma forma para aumentar a experiencia no jogo
Batch?
https://www.mixmods.com.br/2018/04/coor ... das-e.html
Ele usa batch para copiar a coordenada e ângulo. Você pode ver o código dele, como ele fez.
É basicamente carregar kernel32.dll, pegar o procedure WinExec, gerar a string cmd /c echo|set /p=%f %f %f|clip (pode botar ela num DUMP...ENDDUMP mesmo) e chamar o procedure enviando ela e um 0 (que não sei o que é, lembrando que no CLEO é invertido, o 0 vem antes e depois o ponteiro pro buffer com a string). 
Sim, batch. Foi erro de digitação mas acho que o forum passou por algum problema e eu nao consegui editar. Enfim, era exatamente isso que eu precisava. Muito obrigado!

Re: Executar um programa a partir de um evento

Enviado: 22 Nov 2020, 09:21
por Junior_Djjr
Ah e evento de dano o CLEO+ tem isso, SET_SCRIPT_EVENT_CHAR_DAMAGE (algo assim).
Ou só checa se a health do CJ abaixou comparado ao frame anterior, é de boa também, só não vai ter como detectar qual foi o tipo de dano.

Re: Executar um programa a partir de um evento

Enviado: 22 Nov 2020, 19:54
por bisnaguitos
Tentei adaptar o código para GTA3SCRIPT mas só crasha até agora, consegue me dizer o que está errado?

Código: Selecionar tudo

SCRIPT_START
{
    NOP
    LVAR_INT dll
    LVAR_INT proc
    LVAR_INT batch

    LVAR_INT procalloc
    LVAR_INT lib

    GET_LABEL_POINTER Dll (dll)
    GET_LABEL_POINTER Proc (proc)
    GET_LABEL_POINTER Batch (batch)

    main:
        WAIT 1000
        IF IS_KEY_PRESSED 49

            STRING_FORMAT (dll) "kernell32.dll"
            STRING_FORMAT (proc) "WinExec"

            LOAD_DYNAMIC_LIBRARY $dll lib
            GET_DYNAMIC_LIBRARY_PROCEDURE $proc lib procalloc

            STRING_FORMAT (batch) "cmd /c C:/"

            CALL_FUNCTION procalloc 0 2 $batch

            PRINT_STRING_NOW "Comando inserido com sucesso. " 5000

        ENDIF

    GOTO main
}

SCRIPT_END

Dll:
DUMP
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ENDDUMP

Proc:
DUMP
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ENDDUMP

Batch:
DUMP
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ENDDUMP

Re: Executar um programa a partir de um evento

Enviado: 23 Nov 2020, 01:08
por Junior_Djjr
bisnaguitos escreveu:
22 Nov 2020, 19:54
Tentei adaptar o código para GTA3SCRIPT mas só crasha até agora, consegue me dizer o que está errado?
https://www.mixmods.com.br/2020/09/scrlog.html

Re: Executar um programa a partir de um evento

Enviado: 23 Nov 2020, 12:37
por bisnaguitos
O scrlog aponta pro erro na chamada da função, o que eu já sabia porém ainda não identifiquei o problema
Imagem

Re: Executar um programa a partir de um evento

Enviado: 24 Nov 2020, 17:55
por bisnaguitos
algum help por favor?

Re: Executar um programa a partir de um evento

Enviado: 24 Nov 2020, 21:51
por Junior_Djjr
Você tá chamando errado (f141-gta3script-cleo/t5301-m-4-chamando-funcoes-call), não tem mistério, é só abrir o mod que te passei usando Sanny Builder e fazer igual.

Dica: ative o modo SCR (canto inferior direito) e descompile com esse modo ativado, o script ficará praticamente idêntico ao gta3script.

Re: Executar um programa a partir de um evento

Enviado: 24 Nov 2020, 22:42
por nadalao
que tal um mod que faz abrir o smartprocess?

Re: Executar um programa a partir de um evento

Enviado: 24 Nov 2020, 23:17
por Junior_Djjr
nadalao escreveu:
24 Nov 2020, 22:42
que tal um mod que faz abrir o smartprocess?
Por quê?
Se é porque você esquece de abrir, deixa ele para abrir minimizado no system tray quando inicia o Windows, você até esquece da existência.

Re: Executar um programa a partir de um evento

Enviado: 25 Nov 2020, 13:19
por bisnaguitos
Depois de um tempo quebrando a cabeça descobri que não é nenhum erro de sintaxe ou do código em si, só tinha um "L" a mais em kernel🤦‍♂️
Grato a ajuda

Re: Executar um programa a partir de um evento

Enviado: 01 Dez 2020, 21:05
por Fabio
bisnaguitos escreveu:
21 Nov 2020, 14:38
basicamente eu quero acender um led com um microcontrolador e depois implementar isso de alguma forma para aumentar a experiencia no jogo
Você poderia usar um ASI no jogo ao invés de um EXE separado para realizar essa função e evitar ficar abrindo o processo sempre, Não sei exato como está atualmente, mas até um tempo atrás o Windows não gostava de ficar abrindo e fechando processos e handles, o melhor seria manter carregado e chamar uma função do ASI, pode até fazer pelo script CLEO mesmo, só que ao invés de usar load no Kernel32.dll, você coloca o nome do seu ASI mesmo e usa o get proc address para pegar suas próprias funções exportadas com export "C" e __declspec(dllexport).