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ó.
Melhor ainda por enquanto, não vai ter gente reclamando de alguns bugs como se fosse o fim do mundo.
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.
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.
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(...)
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.
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(...)
Se entende c++ e cleo lua não deve ser problema pelo que fez. Alem de ter opções assim
(...)
onVehicleLoadSave
onVehicleSaveLoad
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.
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
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: ↑
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
Fabio escreveu: ↑17 Mai 2018, 18:02
Um_Geek escreveu: ↑
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.
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
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.
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
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?