Página 2 de 5

GSX - Garage Save eXtender

Enviado: 13 Mai 2018, 15:22
por Fabio
Junior_Djjr escreveu:
Fabio escreveu:
13 Mai 2018, 13:45
Atualizei o download, removi uma espécie de garbage collector que eu tinha feito. Por favor, testem o máximo que for possível.
Tudo depende do VehFuncs porque ninguém usa isso ainda kkkkk
Aproveitei a atualização para atualizar o GSX nele (se bem que ninguém usa VehFuncs também, quase não tem carro adaptado ainda)

Tem mais os postos de combustíveis Lua e o mod de salvar as placas dos carros, só. :fts:


Melhor ainda por enquanto, não vai ter gente reclamando de alguns bugs como se fosse o fim do mundo. :fts:

GSX - Garage Save eXtender

Enviado: 15 Mai 2018, 16:31
por Fabio
Testando API para usar com o Moonloader.

Coloque na pasta moonloader/lib
gsx.lua

Código: Selecionar tudo

local ffi = require 'ffi'

ffi.cdef[[

typedef void* CVehicle;

typedef struct { float x, y, z; } CVector;

typedef struct __attribute__((packed, aligned(1))) {
	CVector pos;
	uint32_t handling_flags;
	uint8_t flags;
	uint8_t field_11;
	uint16_t model;
	uint16_t carmods[15];
	uint8_t colour[4];
	uint8_t radio_station;
	uint8_t extra1;
	uint8_t extra2;
	uint8_t bomb_type;
	uint8_t paintjob;
	uint8_t nitro_count;
	uint8_t angleX;
	uint8_t angleY;
	uint8_t angleZ;
	uint8_t field_3F;
} CStoredCar;
typedef struct { void *veh; int32_t status; size_t when; } journalNews;
typedef struct { void *veh; int32_t status; } apiCarNotify;
typedef struct { CVehicle *veh; int32_t status; CStoredCar *gameStoredData; } externalCallbackStructure;
typedef void(__cdecl externalCbFun_t)(const externalCallbackStructure*);
void __cdecl addNotifyCallback(externalCbFun_t fun);
void __cdecl addNotifyTempCallback(externalCbFun_t fun);
int __cdecl getNewCarGrgForeach(size_t *i, apiCarNotify *out);
void __cdecl setDataToSaveLaterVehPtr(CVehicle *veh, const char *name, int size, void *ptr, bool forceCopyNow);
void __cdecl pushDirectlyToSavedData(CVehicle *veh, const char *name, int size, void *ptr);
int __cdecl dataToSaveLaterExists(CVehicle *veh, const char *name);
void __cdecl removeToLoadDataVehPtr(CVehicle *veh, const char *name);
void __cdecl removeToSaveLaterVehPtr(CVehicle *veh, const char *name);
int __cdecl dataToLoadExists(CVehicle *veh, const char *name);
void*  __cdecl getLoadDataByVehPtr(CVehicle *veh, const char *name);
const char*  __cdecl GSX_getCompileTime();
const char*  __cdecl GSX_getVersionString();
float __cdecl GSX_getVersionNum();
int __cdecl getDataToLoadSize(CVehicle *veh, const char *name);
int __cdecl getDataToSaveSize(CVehicle *veh, const char *name);
]]


local gsxAsi = ffi.load("gsx.asi")

return gsxAsi





Script para testes:

Código: Selecionar tudo

script_name("Teste GSX")

local gsx = require "lib.gsx"
local ffi = require 'ffi'

function callback(c) -- const externalCallbackStructure *c
	print ("GSX in lua: status " .. c.status .. " x: " .. c.gameStoredData.pos.x .. " y: " .. c.gameStoredData.pos.y .. " z: " .. c.gameStoredData.pos.z)
	printHelpString ("GSX in lua: status " .. c.status .. " x: " .. c.gameStoredData.pos.x .. " y: " .. c.gameStoredData.pos.y .. " z: " .. c.gameStoredData.pos.z)
end

function main()
	
	return 0
end

function onStartNewGame(mpackNumber)
	
end

function onLoadGame (saveData)
	
end

gsx.addNotifyCallback(callback);

GSX - Garage Save eXtender

Enviado: 15 Mai 2018, 22:03
por Um_Geek
se isto funcionar vai ficar mais fácil usar em lua, posso tentar usar em um script pequeno, eu só tenho duvidas se ffi.load funciona com* arquivos asi. o MoonAdditions é uma dll, deve dar para fazer um 'require' do gsx semelhante, só que deve tomar tempo.

GSX - Garage Save eXtender

Enviado: 15 Mai 2018, 22:09
por Israel
Um_Geek escreveu:
15 Mai 2018, 22:03
eu só tenho duvidas se ffi.load funciona com* arquivos asi
Arquivos .asi são só DLLs renomeadas.

GSX - Garage Save eXtender

Enviado: 15 Mai 2018, 22:20
por Um_Geek
Israel escreveu:
Um_Geek escreveu:
15 Mai 2018, 22:03
eu só tenho duvidas se ffi.load funciona com* arquivos asi
Arquivos .asi são só DLLs renomeadas.
É que no log do moonloader as libs que ele aceita são luac, lua, dll, mas só testando para conferir. quando fiz eu usei loadDynamicLibrary então não chequei isto.

GSX - Garage Save eXtender

Enviado: 16 Mai 2018, 00:14
por Fabio
Um_Geek escreveu:
15 Mai 2018, 22:03
se isto funcionar vai ficar mais fácil usar em lua, posso tentar usar em um script pequeno, eu só tenho duvidas se ffi.load funciona com* arquivos asi. o MoonAdditions é uma dll, deve dar para fazer um 'require' do gsx semelhante, só que deve tomar tempo.

Eu testei antes de postar e estava funcionando, mas me avise caso qualquer erro, acho que precisa de melhorias o arquivo lua do GSX, foi o primeiro que eu fiz para o Moonloader. :fts:

Deve ser um load library do kernel do Windows internamente, não existe problema em dar load múltiplas vezes em uma dll/asi(que é dll), porque o Windows vê que já está carregada e fornece a handle já existente.

GSX - Garage Save eXtender

Enviado: 16 Mai 2018, 11:49
por Um_Geek
Fabio escreveu: Eu testei antes de postar e estava funcionando, mas me avise caso qualquer erro, acho que precisa de melhorias o arquivo lua do GSX, foi o primeiro que eu fiz para o Moonloader. :fts:

Deve ser um load library do kernel do Windows internamente, não existe problema em dar load múltiplas vezes em uma dll/asi(que é dll), porque o Windows vê que já está carregada e fornece a handle já existente.

Funcionou de boa aqui, é até interessante que adiciona mais um evento no moonloader onVehicleSave(...) :5!!:
Se entende c++ e cleo lua não deve ser problema pelo que fez. Alem de ter opções assim(...)

GSX - Garage Save eXtender

Enviado: 16 Mai 2018, 12:16
por Fabio
Um_Geek escreveu:
Fabio escreveu: Eu testei antes de postar e estava funcionando, mas me avise caso qualquer erro, acho que precisa de melhorias o arquivo lua do GSX, foi o primeiro que eu fiz para o Moonloader. :fts:

Deve ser um load library do kernel do Windows internamente, não existe problema em dar load múltiplas vezes em uma dll/asi(que é dll), porque o Windows vê que já está carregada e fornece a handle já existente.

Funcionou de boa aqui, é até interessante que adiciona mais um evento no moonloader onVehicleSave(...) :5!!:
Se entende c++ e cleo lua não deve ser problema pelo que fez. Alem de ter opções assim(...)

onVehicleLoadSave
onVehicleSaveLoad
:fts: :philo:

A função é chamada tanto quando é carregado, quanto é salvo. (você pode verificar isso pelo membro status da estrutura)

É chamada antes de salvar e após carregar, entretanto, peço que não confie totalmente nos valores do gameStoredData, eles não foram totalmente lidos pelo jogo quando o GSX chama a função.

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 13:40
por Um_Geek
Eu estava vendo a lista de funções do moonloader e achei isto.

Código: Selecionar tudo

string str = memory.tostring(uint address, [uint size], [bool unprotect=false])
uint address = memory.strptr(string str)

Assim deve dar para usar o gsx no moonloader sem precisar alocar memoria. :philo:

SpoilerAbrir
Eu estava testando isto, mas parece que pelo que disse não deve funcionar.

Código: Selecionar tudo

local gsx = require 'gsx'
local ffi = require 'ffi'
local memory = require 'memory'

function callback(c)
	local x,y,z= c.gameStoredData.pos.x,c.gameStoredData.pos.y,c.gameStoredData.pos.z;
	local res,veh = findAllRandomVehiclesInSphere(x,y,z,1.0,false,false)
	if res then 
		local ptr = getCarPointer(veh)
		if c.status==1 then -- save 

		else 
			if gsx.dataToLoadExists(ptr,"SERIALCODE")==1 then 
				printHelpString("Testando!")
			end
		end
	end
end
gsx.addNotifyCallback(callback) 

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 16:37
por Fabio
Falta a main com return 0, ao que me parece o Moonloader finaliza o script sem ela.

Outra coisa, você já tem o ponteiro do veículo, c.veh

Código: Selecionar tudo

struct externalCallbackStructure
{
	CVehicle *veh;
	int32_t status;
	CStoredCar *gameStoredData;
};

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 17:57
por Um_Geek
SpoilerAbrir
Fabio escreveu: Falta a main com return 0, ao que me parece o Moonloader finaliza o script sem ela.

Outra coisa, você já tem o ponteiro do veículo, c.veh

Código: Selecionar tudo

struct externalCallbackStructure
{
	CVehicle *veh;
	int32_t status;
	CStoredCar *gameStoredData;
};

Tem mais coisas no script, mas só coloquei os require's e a função callback, eu tinha tentado usar c.veh, as vezes crasha.

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 18:02
por Fabio
Um_Geek escreveu:
SpoilerAbrir
Fabio escreveu: Falta a main com return 0, ao que me parece o Moonloader finaliza o script sem ela.

Outra coisa, você já tem o ponteiro do veículo, c.veh

Código: Selecionar tudo

struct externalCallbackStructure
{
	CVehicle *veh;
	int32_t status;
	CStoredCar *gameStoredData;
};

Tem mais coisas no script, mas só coloquei os require's e a função callback, eu tinha tentado usar c.veh, as vezes crasha.

Printe o valor que estiver recebendo nele por favor.

Você estava usando o c.veh direto, certo? Ele já é o ponteiro para o veículo, não precisa do getCarPointer, por exemplo.

Acredito que não seja problema no GSX.asi porque o .asi de salvar placas utiliza esse sistema, talvez tenha sido algo que eu fiz errado na lib, precisamos ver que valores estão sendo retornados para ter certeza.

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 18:22
por Um_Geek
SpoilerAbrir
Fabio escreveu:
17 Mai 2018, 18:02
Um_Geek escreveu:
SpoilerAbrir
Fabio escreveu: Falta a main com return 0, ao que me parece o Moonloader finaliza o script sem ela.

Outra coisa, você já tem o ponteiro do veículo, c.veh

Código: Selecionar tudo

struct externalCallbackStructure
{
	CVehicle *veh;
	int32_t status;
	CStoredCar *gameStoredData;
};

Tem mais coisas no script, mas só coloquei os require's e a função callback, eu tinha tentado usar c.veh, as vezes crasha.

Printe o valor que estiver recebendo nele por favor.

Você estava usando o c.veh direto, certo? Ele já é o ponteiro para o veículo, não precisa do getCarPointer, por exemplo.

Acredito que não seja problema no GSX.asi porque o .asi de salvar placas utiliza esse sistema, talvez tenha sido algo que eu fiz errado na lib, precisamos ver que valores estão sendo retornados para ter certeza.

no caso o crash vem no dataToLoadExists, serialCode é o que vou gravar, creio que terei que usar memory.strptr, tamanho 16 no minimo.

SpoilerAbrir

Código: Selecionar tudo

function callback(c)
	if c.status==1 then -- save 
		local d = os.date("*t")
		local serialCode = tonumber(string.format("%i%i%i%i%i%i",d.day,d.month,d.year,d.hour,d.min,d.sec))
		printHelpString(serialCode)
	else 
		if gsx.dataToLoadExists(c.veh,"SERIALCODE")==1 then 
			printHelpString("Testando!")
		end
	end
end
gsx.addNotifyCallback(callback) 

Edit 1:

Valor que retorna quando a garagem abre

Código: Selecionar tudo

(script)	Gsx Tests: garage open > cdata<void **>: 0x097429f0

Tentei usar isto para ver se o veiculo existe e veio mais crash

Código: Selecionar tudo

local car = getVehiclePointerHandle(c.veh)

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 18:52
por Fabio
Tem log do modloader?

GSX - Garage Save eXtender

Enviado: 17 Mai 2018, 19:01
por Um_Geek
Quando crasha desta forma não gera nada no log do moonloader,só se for erro no script, só sei que assim funciona.

SpoilerAbrir

Código: Selecionar tudo

function callback(c)
	local x,y,z,ress= c.gameStoredData.pos.x,c.gameStoredData.pos.y,c.gameStoredData.pos.z;
	local res,veh = findAllRandomVehiclesInSphere(x,y,z,1.0,false,false)
	if c.status==0 then -- abrindo garagem 
		explodeCar(veh)
	end
end

Assim crasha

SpoilerAbrir

Código: Selecionar tudo

function callback(c)
	if c.status==0 then  -- abrindo garagem 
		local car = getVehiclePointerHandle(c.veh)
		explodeCar(car)
	end

No caso se c.veh é pointer para o veiculo não deveria retornar um handle como getVehiclePointerHandle?