Página 1 de 10
Sugestões: CLEO+ / MoonLoader+
Enviado: 08 Set 2019, 12:19
por Junior_Djjr
Download
Você já pode baixá-lo aqui: CLEOPlus
Lista de todos os comandos atuais aqui:
f141-gta3script-cleo/t5206-como-criar-s ... m-cleoplus
Introdução
Já faz quase uma década desde que CLEO 4 foi lançada.
A Biblioteca CLEO, mesmo que seja uma das ferramentas mais usadas no modding do GTA SA, adiciona somente 100 novos comandos/opcodes.
Ainda assim nós sentimos a necessidade de partir para manipulação de memória, lendo e escrevendo endereços de memória para realizar ações básicas.
Exemplos:
Não existe comando para você checar o clima atual, por exemplo se está chovendo, só é possível lendo um endereço de memória.
Não existe comando para checar se tal pessoa ou veículo é criação/controlado por scripts/missões.
Não existe comando para checar se está mirando.
Não existe comando para renderizar sprites na tela com widescreen corrigido.
Não existe comando para criar objetos, ícones do radar etc sem ficar preso no jogo salvo.
Portanto eu estou iniciando o projeto CLEO+ e MoonLoader+, que cria novos comandos para serem adicionados na CLEO e MoonLoader.
À grosso modo, é como se fosse uma CLEO 5.
Estará disponível para GTA3script, Sanny Builder e MoonLoader, sendo inicialmente para GTA3script e Sanny Builder e depois convertido para MoonLoader.
No momento eu não estou com muita vontade de converter ao MoonLoader pois MoonLoader ainda não está satisfazendo bem o modding do GTA SA, já passou muito tempo e ainda não está evoluído como a CLEO. Eu acho que vale mais a pena usar o tempo de converter pro MoonLoader para na verdade criar algo assim pra CLEO do GTA III e VC.
Objetivo
É semelhante, mas não terá o mesmo foco do NewOpcodes.cleo.
O erro do NewOpcodes.cleo é que foi focado em adicionar comandos avançados, é sem sentido pois quem deseja criar mods avançados, irá preferir utilizar ASI em vez de CLEO.
É necessário foco, e o foco aqui será em
transformar a CLEO e MoonLoader em algo não mais potente, mas sim user friendly; fácil de usar, realizar ações básicas com código mais simples e limpo.
Assim,
estou criando este tópico para coletar ideias.
Atenção: Os nomes dos comandos citados neste tópico podem não ser os mesmos nomes finais, são só ideias.
Regras
- Não fuja do assunto.
- Siga o objetivo: somente dê sugestões que sejam úteis para mods simples.
- Prefira só responder se você já tenha algum conhecimento no assunto.
- Antes de dar alguma sugestão, veja se alguém já deu.
- Deixe o texto da sua sugestão em negrito para diferenciar a sugestão de alguma outra mensagem.
- Se quiser, abaixo da descrição, coloque um código de exemplo de como você gostaria que fosse, mas não é necessário. Veja abaixo como eu fiz.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 08 Set 2019, 12:19
por Junior_Djjr
Pegar clima atual (pronto)
GET_CURRENT_WEATHER (weatherID)
(sei que já tem no NewOpcodes.cleo mas seria legal ter separado neste projeto).
Pegar próximo clima(pronto)
GET_NEXT_WEATHER (nextWeatherID)
Escolher próximo clima(pronto)
SET_NEXT_WEATHER nextWeatherID
Pegar nível de chuva(pronto)
GET_RAIN_INTENSITY (rainIntensity)
Escolher nível de chuva(pronto)
SET_RAIN_INTENSITY rainIntensity
(eu sei que não é útil, mas se já tem como pegar, por que não colocar?)
Checar se é controlado por script/missão(pronto)
IF IS_CAR_SCRIPT_CONTROLLED car
IF IS_CHAR_SCRIPT_CONTROLLED char
IF IS_OBJECT_SCRIPT_CONTROLLED obj
Marcar como necessário / controlado por script/missão(pronto)
MARK_CAR_AS_NEEDED
MARK_CHAR_AS_NEEDED
MARK_OBJECT_AS_NEEDED
Checar se está mirando
IF IS_CHAR_AIMING char
Desenhar sprites e outras coisas 2D com widescreen corrigido. (provavelmente não fazer pois precisa tirar uma cópia de tudo, algo que pode causar incompatibilidade com outros mods que fazem patch nas funções originais, uma melhor solução é utilizar somente o GET_FIXED_XY_ASPECT_RATIO abaixo)
DISPLAY_TEXT_FIXED (e variantes)
DRAW_RECT_FIXED (e variantes)
SET_TEXT_SCALE_FIXED
DRAW_SPRITE_FIXED (e variantes)
DRAW_WINDOW_FIXED
(mais?)
Retornar valores XY corrigidos por base do aspect ratio do monitor (relacionado com a sugestão acima)
(pronto)
GET_FIXED_XY_ASPECT_RATIO x y (x y)
Retornar resolução atual(pronto)
GET_CURRENT_RESOLUTION (x y)
Criar objeto sem ficar preso no jogo salvo(pronto)
CREATE_OBJECT_NO_SAVE
Criar carro estacionado sem ficar preso no jogo salvo(pronto)
SET_CAR_GENERATOR_NO_SAVE
Checar movimento da roda do mouse (comandos de checar tecla não retornam)
(pronto)
IF IS_MOUSE_WHEEL_UP
IF IS_MOUSE_WHEEL_DOWN
Forçar botão ou tecla a ser pressionada
SET_KEY_PRESS VK_KEY_Y
SET_BUTTON_PRESS PAD1 TRIANGLE
Converter uma coordenada 3D para a tela 2D(pronto)
CONVERT_3D_TO_SCREEN_2D (
infos)
Retornar ângulo Z entre duas coordenadas(pronto)
GET_ANGLE_FROM_TWO_COORDS x1 y1 x2 y2 (angle) (
infos)
Retornar subclasse de veículo (se é moto, bicicleta, monster truck etc)(pronto)
GET_VEHICLE_SUBCLASS car (subClass)
(o padrão é usar CAR em vez de VEHICLE, mas neste caso seria muito estranho, pois ele será usado especificamente para checar se o tal veículo é um carro ou não, então achei melhor usar VEHICLE)
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 08 Set 2019, 12:40
por nadalao
Checar horas e minutos, seria algo como: IS_CURRENT_HOUR_GREATER e IS_CURRENT_MINUTE_GREATER; (não será feito: adicionado GET_CURRENT_HOUR e GET_CURRENT_MINUTE, é melhor colocar numa variável para fazer as checagens)
Retornar tipo de entidade;(pronto)
Criar ped com fade: CREATE_CHAR_ELEGANTLY;(pronto)
Checar missão, como no onMission, seria tipo:(pronto)
IS_MISSION_FLAG_ON;
Checar se o ped está caído, seria tipo:(pronto, IS_CHAR_FALLEN_ON_GROUND)
IS_CHAR_KNOCKED_OUT;
Converter SetCharPosSimple para um opcode;(pronto)
Setar tempo pra mudar para o próximo clima;
Checar se .dff e .txd estão instalados (útil pra criar special_character);
Ler variável global enviando id e retornando em LVAR retornar o valor, ponteiro, qualquer coisa assim já ajuda, escrever também seria bom; (não será feito: isto é tarefa pro compilador)
Opcode pra fazer o ped pular só uma vez (o TASK_JUMP é horrível);
Checar se um ped apanhou de outro sem que retorne em todos frames;
GET_CHAR_DECISION_MAKER
LOCATE_COORDS_ANY_MEANS_2D e LOCATE_COORDS_ANY_MEANS_3D (não será feito: isto é a mesma coisa de GET_DISTANCE_BETWEEN_COORDS_3D/2D)
Setar modo de câmera;
Retornar ângulo Y entre coordenadas(ângulo entre alturas);
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 08 Set 2019, 13:24
por Junior_Djjr
Criar BLIP no radar sem ficar preso no jogo salvo.(pronto)
ADD_BLIP_FOR_COORD_NO_SAVE (e variantes)
Retornar handle do BLIP de radar naquela coordenada. Assim você pode deletá-lo e alterá-lo.
GET_BLIP_AT_COORD
Retornar o reboque que o veículo está puxando.(pronto)
GET_TRAILER_FROM_CAR car (trailer)
(ou utilizar o nome GET_TRAILER_ATTACHED_TO_CAB que é um comando removido da versão final do jogo, mas não sei se tem algum problema de conflito).
Retornar o veículo que o reboque está sendo puxado.(pronto)
GET_CAR_FROM_TRAILER trailer (car)
Retornar o número de variações extras de um modelo de veículo.
GET_CAR_MODEL_MAX_EXTRAS model (numExtras)
Retornar a posição do dummy de um carro.(pronto)
GET_CAR_DUMMY_COORD car DUMMY_EXHAUST (x y z)
Checar se string é igual a string. Com suporte à enviar o ponteiro e size, sendo que enviar -1 no size irá utilizar o tamanho máximo automaticamente.
IF IS_STRING_EQUAL pStr1 pStr2 size
Retornar o tamanho da string.
GET_STRING_LENGTH pStr (len)
Transformar string em maiúscula.
STRING_UPPERCASE pStr1
Transformar string em minúscula.
STRING_LOWERCASE pStr1
Implementar o clipboard commands do Deji.
WRITE_CLIPBOARD pStr size
READ_CLIPBOARD pStr size
Checar se está no SAMP.(pronto)
IF IS_IN_SAMP
Pegar configuração global de volume dos efeitos e rádio.(pronto)
GET_AUDIO_SFX_VOLUME volume
GET_AUDIO_RADIO_VOLUME volume
Pegar configuração de sensibilidade do mouse.(pronto)
GET_MOUSE_SENSIBILITY
Copiar memória.(pronto)
MEMORY_COPY source dest size
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 01:57
por FilipeS
Checar se existe determinado player(já existe)
DOES_PLAYER_EXIST 1
Setar prioridade de entidades, para nao ser removida pelo jogo(pronto)
SET_VEHICLE_PRIORITY car PERMANENT_VEHICLE/MISSION_VEHICLE/RANDOM_VEHICLE(De acordo com o field "Createby") já escrevi valores lá e funciona.
Checar qual task está sendo realizada(pronto)
IS_PERFORMING_TASK(Roubei de alguém no discord)
Retornar e checar se o char pode fazer alguma animaçao (sem estar pulando ou atirando), remover determinada animaçao(pronto, IS_CHAR_DOING_ANY_IMPORTANT_TASK principalmente)
GET_CURRENT_SECCONDARY_ANIMATION ped string
GET_CURRENT_PRIMARY_ANIMATION ped string
IS_CAN_PLAY_ANIMS
CLEAR_CHAR_CURRENT_ANIM ped string
Retornar coordenada de um lado de acordo com a altura e largura 2D para facilitar a criação de menus
GET_2D_COORDS_FROM_SIZE (sprite_x sprite_y 20.0 20.0 LEFT_TOP/RIGHT_TOP) (x y)
Checar Pedtype(já existe)
IS_CHAR_PEDTYPE ped PEDTYPE_COP
Setar, Checar e retornar as ameaças de algum ped(pronto em partes, GET_CHAR_KILL_TARGET_CHAR)
GET_CHAR_CURRENT_THREAT ped threat
IS_CHAR_THREAT_BY_CHAR scplayer ped
HAS_CHAR_BEEN_THREATED ped
CLEAR_CHAR_THREATS ped
SET_CHAR_THREAT ped player
Checar veículo policial(já existe)
IS_POLICE_VEHICLE car
Só por enquanto...
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 12:18
por Junior_Djjr
FilipeS escreveu: ↑09 Set 2019, 01:57
Checar se existe determinado player
O player
sempre existe.
Para checar se o segundo player existe (está jogando em 2), é
IS_2PLAYER_GAME_GOING_ON
FilipeS escreveu: ↑09 Set 2019, 01:57
Setar prioridade de entidades, para nao ser removida pelo jogo
Ah, é mesmo, eu listei para checar mas esqueci que nem tem como botar.
Mas isto não é uma "prioridade", isto é só um "modo de que foi criado". Por exemplo veículos podem estar com o modo de "carro estacionado".
FilipeS escreveu: ↑09 Set 2019, 01:57
Retornar coordenada de um lado de acordo com a altura e largura 2D para facilitar a criação de menus
Não acho que precise, é uma matemática muito simples:
finalPosX = posX - (sizeX / 2)
Fazer isto no GTA3script precisa de duas linhas em vez de somente uma, mas daí é limitação do compilador, a qualquer momento alguém vai lá no source code do compilador e decide colocar suporte à isto.
FilipeS escreveu: ↑09 Set 2019, 01:57
Checar Pedtype
GET_PED_TYPE
FilipeS escreveu: ↑09 Set 2019, 01:57
Checar veículo policial
IS_EMERGENCY_SERVICES_VEHICLE
Também retorna ambulância e bombeiro, mas você pode checar manualmente.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 13:09
por Um_Geek
GET_ALL_VEHICLES (ptr) (size)
prt: ponteiro para primeira entidade, +4 é igual ao seguinte
size: numero de entidades
GET_ALL_PEDS, GET_ALL_OBJECTS, GET_ALL_PICKUPS
GET_FILE_SIZE (file_name) (size)
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 13:15
por Junior_Djjr
Um_Geek escreveu: ↑09 Set 2019, 13:09
GET_FILE_SIZE (file_name) (size)
Já tem, com o exato mesmo nome.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 14:14
por Um_Geek
Digitei no lua para ver se tinha antes e não mostrou, deve ser só no cleo
Se bem que no lua tem a lib ´lfs.lua´.
GET_MODEL_NAME_BY_ID (int model) -> (string name)
Útil para pegar a textura e outras coisas, como pegar o ícone de uma arma.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 14:42
por Kaneki-ken
Junior_Djjr escreveu: ↑08 Set 2019, 13:24
Criar BLIP no radar sem ficar preso no jogo salvo
Testado em massa?
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 14:43
por Junior_Djjr
Um_Geek escreveu: ↑09 Set 2019, 14:14
GET_MODEL_NAME_BY_ID (int model) -> (string name)
Útil para pegar a textura e outras coisas, como pegar o ícone de uma arma.
O jogo não guarda os nomes dos modelos.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 09 Set 2019, 21:51
por Um_Geek
Junior_Djjr escreveu: ↑09 Set 2019, 14:43
O jogo não guarda os nomes dos modelos.
o que poderia ser implementado de alguma forma
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 10 Set 2019, 03:14
por Junior_Djjr
Um_Geek escreveu: ↑09 Set 2019, 21:51
Junior_Djjr escreveu: ↑09 Set 2019, 14:43
O jogo não guarda os nomes dos modelos.
o que poderia ser implementado de alguma forma
Deve ser uma boa. Custaria nem meio MB de RAM.
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 18 Set 2019, 12:34
por GTAga3ie1
estava pensando se não teria como criar opcodes para timer que usasse variaveis locais ao invés de usar variaveis globais(pronto)
014E: set_timer_to $7234 type 1 // global_variable
014F: stop_timer $1923
03C3: set_timer_to $1923 type 1 GXT 'BB_19' // global_variable // Time
0890: enable_sound_when_timer $253 reach 3 seconds // global_variable
fazendo isso
set_timer_to 33@ type 1 // local_variable
stop_timer 33@
set_timer_to 33@ type 1 GXT 'BB_19' // local_variable // Time
enable_sound_when_timer 33@ reach 3 seconds // local_variable
Re: Sugestões: CLEO+ / MoonLoader+
Enviado: 30 Set 2019, 22:24
por LightVelox
consegue o dot product entre 2 ângulos, útil pra várias coisas como IA, mira, animação etc, basicamente se tu tiver de frente pra algo o valor é 1 e se estiver de costar o valor é -1.
ja sei que rotacionar bones em cleo não é uma boa idéia, mas poderia ter uma forma de pelo menos pegar e setar o tamanho/escala do bone, isso seria útil em coisas como desmembramento por exemplo, talvez pegar rotação e posição dos bones tb? (sem setar)