Pesquisa resultou em 31 ocorrências

por Fabio
10 Jan 2019, 01:37
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

Re: GSX - Garage Save eXtender

Um_Geek escreveu:
09 Jan 2019, 22:17
Fabio escreveu:
09 Jan 2019, 20:14
Uma observação, não sei como está fazendo, mas quando for escrever strings é preciso colocar um null terminator (já deve ir com a string usada no call, então é só usar strlen(str) + 1) caso o tamanho não seja fixo, se estiver usando com tamanho conhecido (fixado por você ou informando ao strncpy usando get size do GSX), pode usar sem null terminator mesmo.

Estou usando o tamanho da ´#string´ como tamanho da memoria e uso o getDataToLoadSizedo gsx para pegar o tamanho na hora da leitura. tudo que é salvo por este recurso é colocado em uma table e convertida em json antes de ser salva, até agora não tive problemas.

Código: Selecionar tudo

local pNotifyCallbac = gsx.addNotifyCallback(function(c)
    local sid = string.format("SID%i",c.veh)
    if c.status==1 then
        local zdata = encodeJson(t_data[sid])
        if zdata ~= nil then
            local pdata = memory.strptr(zdata);
            pushDirectlyToSavedData(c.veh,i_data,#zdata,pdata);
        end
    else
        if dataToLoadExists(c.veh,i_data) == 1 then
            local pdata = getLoadDataByVehPtr(c.veh,i_data)
            local size = getDataToLoadSize(c.veh,i_data) 
            t_data[sid] = decodeJson(memory.tostring(pdata,size,false))
        end
    end
    loading = not c.status==1
end)

Parece tudo certo, entretanto, os endereços dos veículos podem repetir em momentos diferentes para veículos diferentes, pois são endereços de índices de uma pool. Quando o jogo destrói alguma entidade, ele marca em um outro array na pool que aquele lugar está livre, então outra entidade poderá ser armazenada nesse mesmo lugar. Digo isso por causa destas linhas especificamente:

Código: Selecionar tudo

local sid = string.format("SID%i",c.veh)


local zdata = encodeJson(t_data[sid])
        if zdata ~= nil then

É uma boa oportunidade para testar a _hash, lembrando que ela é um uint64_t, seria interessante converte-la para string de hex para usar de forma parecida a que você já está usando.
por Fabio
09 Jan 2019, 20:14
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

Re: GSX - Garage Save eXtender

Um_Geek escreveu:
09 Jan 2019, 15:44
estou testando isto, se der certo vou usar como ponte entre o gsx e o mod que eu esteja fazendo.
Usa 4 comandos set,get,serial e data.

no caso data armazena informações de coordenadas e data de onde e quando o carro foi salvo a primeira vez, alem do modelo do dono caso ele tenha sido roubado.

set e get salvam e recebe como string.
fiz um exemplo mais ou menos que vai junto.

Uma observação, não sei como está fazendo, mas quando for escrever strings é preciso colocar um null terminator (já deve ir com a string usada no call, então é só usar strlen(str) + 1) caso o tamanho não seja fixo, se estiver usando com tamanho conhecido (fixado por você ou informando ao strncpy usando get size do GSX), pode usar sem null terminator mesmo.
por Fabio
08 Jan 2019, 03:30
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

Re: GSX - Garage Save eXtender

Adicionado o valor reservado _hash aos dados nº1, ele é um inteiro de 64 bits (8 bytes).

Exemplo rápido em cleo (não é um exemplo que mostra com precisão o valor por não considerar o little endian):

Código: Selecionar tudo

{$CLEO}

0AA2: [email protected] = load_library "gsx.asi" // IF and SET  
0AA4: [email protected] = get_proc_address "getLoadDataByVehPtr" library [email protected] // IF and SET 

while true
   wait 0
   if 00DF:   actor $PLAYER_ACTOR driving
   jf continue
    
   0811: [email protected] = actor $PLAYER_ACTOR used_car
   0A97: [email protected] = car [email protected] struct 
   
   0AA7: call_function [email protected] num_params 2 pop 2 "_hash" [email protected] -> [email protected]   
   
   if [email protected] <> 0
   jf continue
   
   0A8D: [email protected] = read_memory [email protected] size 4 virtual_protect 0
   [email protected] += 4                                   
   0A8D: [email protected] = read_memory [email protected] size 4 virtual_protect 0
   0AD1: show_formatted_text_highpriority "%.8X %.8X" time 2000  [email protected] [email protected]
end
por Fabio
03 Jul 2018, 20:41
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Tem integração com o github, não precisa colar o código.
por Fabio
23 Mai 2018, 02:11
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Atualização:

Ao verificar o mod do @Um_Geek (/f5-scripts-codigos/t464-lua-pintar-veiculos-usando-cores-rgb), encontrei uma possível situação de crash no GSX.asi, já foi corrigida e o download está atualizado.
por Fabio
19 Mai 2018, 23:50
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu: Vi aqui agora, eu tinha baixado ontem a noite e só arrastei o gsx.asi para a pasta do jogo :facep:
estou tentando encaixar no mod que estou fazendo atualmente, se der certo vai ficar maneirinho.

Qualquer coisa avise por favor. :pacman:
por Fabio
19 Mai 2018, 18:34
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu: agora esta funcionando.

:herp:

Um_Geek escreveu: Você poderia até adicionar este lib gsx.lua no download do gsx.asi, assim não tem risco de quem faz outros mods lua acabar criando um próprio o que poderia estragar com outros mods por compatibilidade, assim também poderia o manter atualizado conforme atualizasse o gsx :peepo6:

Mas está lá no download @[email protected]

gsx\developers\API\moonloader\lib\
:hm:
por Fabio
19 Mai 2018, 16:31
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

0x56A23ADE lua_sethook+0x14e in lua51.dll (+0x23ade)

Esse erro estava acontecendo quando eu estava usando (void**) como tipo de CVehicle.

Como está seu lib/gsx.lua? Será que eu não fiz alguma coisa errada na hora de dar update? :hmm:

Deve estar assim:

Código: Selecionar tudo

local ffi = require 'ffi'

ffi.cdef[[

typedef uint32_t GSXCVehicle;

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 __attribute__((packed, aligned(1))) { GSXCVehicle veh; int32_t status; size_t when; } journalNews;
typedef struct __attribute__((packed, aligned(1))) { GSXCVehicle veh; int32_t status; } apiCarNotify;
typedef struct __attribute__((packed, aligned(1))) { GSXCVehicle veh; int32_t status; CStoredCar *gameStoredData; } externalCallbackStructure;
typedef void(__cdecl externalCbFun_t)(const externalCallbackStructure*);
int __cdecl addNotifyCallback(externalCbFun_t fun);
int __cdecl addNotifyTempCallback(externalCbFun_t fun);
void __cdecl removeNotifyCallback(int cbRef);
void __cdecl removeNotifyTempCallback(int cbRef);
int __cdecl getNewCarGrgForeach(size_t *i, apiCarNotify *out);
void __cdecl setDataToSaveLaterVehPtr(GSXCVehicle veh, const char *name, int size, void *ptr, bool forceCopyNow);
void __cdecl pushDirectlyToSavedData(GSXCVehicle veh, const char *name, int size, void *ptr);
int __cdecl dataToSaveLaterExists(GSXCVehicle veh, const char *name);
void __cdecl removeToLoadDataVehPtr(GSXCVehicle veh, const char *name);
void __cdecl removeToSaveLaterVehPtr(GSXCVehicle veh, const char *name);
int __cdecl dataToLoadExists(GSXCVehicle veh, const char *name);
void*  __cdecl getLoadDataByVehPtr(GSXCVehicle veh, const char *name);
const char*  __cdecl GSX_getCompileTime();
const char*  __cdecl GSX_getVersionString();
float __cdecl GSX_getVersionNum();
int __cdecl getDataToLoadSize(GSXCVehicle veh, const char *name);
int __cdecl getDataToSaveSize(GSXCVehicle veh, const char *name);
]]


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

return gsxAsi

Adicionado após 1 minuto 33 segundos:
Ao que parece o moonloader não registra as exceptions que ocorreram na biblioteca de Lua.
por Fabio
19 Mai 2018, 14:18
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Outra coisa estranha é: não existe sentido em mostrar ponteiro -1, ele é unsigned @[email protected]

Adicionado após 2 minutos 27 segundos:
Um_Geek escreveu:
19 Mai 2018, 14:16
Edit 1:
E no modloader.log?
Mesmo codigo que enviei la atras.

Se foi um call ao unknown, significa que a função chamada não existe mais, veja se não ficou códigos de testes antigos na pasta do moonloader.
por Fabio
19 Mai 2018, 14:14
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu: tinha atualizado minha resposta pouco antes da sua. bem, minha cota de crash por teste de mod bateu recorde, mas pelo que vi o exemplo que funciona ai não funciona aqui. seria bom uma terceira pessoa testando.

@[email protected]

Adicionei alguns prints no código que você enviou e aqui apareceu:

Código: Selecionar tudo

[14:13:34.277265] (debug)	New script: 05648E4C
[14:13:34.278265] (system)	Teste GSX: Loaded successfully.
[14:14:14.112544] (system)	Installing post-load hooks...
[14:14:14.112544] (system)	Hooks installed.
[14:14:24.246123] (script)	Teste GSX: c.veh 165997128
[14:14:24.246123] (script)	Teste GSX: getVehiclePointerHandle 2305
[14:14:24.246123] (script)	Teste GSX: getCarModel 571
[14:14:24.247123] (script)	Teste GSX: getNameOfVehicleModel KART
[14:14:24.256124] (script)	Teste GSX: c.veh 165999712
[14:14:24.256124] (script)	Teste GSX: getVehiclePointerHandle 2561
[14:14:24.256124] (script)	Teste GSX: getCarModel 601
[14:14:24.256124] (script)	Teste GSX: getNameOfVehicleModel SWATVAN
[14:14:30.508481] (system)	Unloading...

Código: Selecionar tudo

function callback(c) -- const externalCallbackStructure *c
    --if c.status==1 then
    local p = c.veh
    print("c.veh " .. p)
    local h = getVehiclePointerHandle(p)
    print("getVehiclePointerHandle " .. h)
    local m = getCarModel(h)
    print("getCarModel " .. m)
    local n = getNameOfVehicleModel(m)
    print("getNameOfVehicleModel " .. n)
    --end
end

Muito estranho, seu Moonloader está atualizado?

Adicionado após 28 segundos:
Um_Geek escreveu:
19 Mai 2018, 14:11
Não sai log, o jogo crasha só de chegar na garagem. quando leio o ponteiro fora retorna -1.

E no modloader.log?
por Fabio
19 Mai 2018, 14:09
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

O que está saindo no log?

Código: Selecionar tudo

    local p = c.veh
    local h = getVehiclePointerHandle(p)
Talvez esteja havendo algum problema de cast, usa só c.veh dentro do getVehiclePointerHandle pra ver.
por Fabio
19 Mai 2018, 12:09
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu:
19 Mai 2018, 11:16
Vi algo enquanto testava. E usei type(c.veh) do lua para ver o que realmente c.veh é, e retornou tipo "cdata", no lua pelo que notei pointer e handler de veículos e outras coisas são tipo "number", então não da para fazer isto.

Código: Selecionar tudo

local car = getVehiclePointerHandle(c.veh)
print ("GSX in lua: gears " .. getCarNumberOfGears(car))

Não é o que o meu log diz:

Código: Selecionar tudo

[02:34:43.885767] (debug)	New script: 05F1D5E4
[02:34:43.886767] (system)	Teste GSX: Loaded successfully.
[02:35:14.938543] (system)	Installing post-load hooks...
[02:35:14.938543] (system)	Hooks installed.
[02:35:26.095181] (script)	Teste GSX: GSX in lua: 91681888 status 0 x: 2503.4389648438 y: -1696.7362060547 z: 12.841711044312
[02:35:26.095181] (script)	Teste GSX: GSX in lua: gears 4
[02:35:26.104182] (script)	Teste GSX: GSX in lua: 91684472 status 0 x: 2507.1164550781 y: -1695.3375244141 z: 13.315396308899
[02:35:26.104182] (script)	Teste GSX: GSX in lua: gears 5
[02:35:30.761448] (script)	Teste GSX: GSX in lua: 91684472 status 1 x: 2507.1164550781 y: -1695.3375244141 z: 13.315396308899
[02:35:30.761448] (script)	Teste GSX: GSX in lua: gears 5
[02:35:30.761448] (script)	Teste GSX: GSX in lua: 91681888 status 1 x: 2503.4389648438 y: -1696.7354736328 z: 12.841711044312
[02:35:30.761448] (script)	Teste GSX: GSX in lua: gears 4
[02:35:33.139584] (system)	Teste GSX: Script terminated. (05F1D5E4)
[02:35:33.139584] (system)	Loading script 'C:\Program Files (x86)\Steam\SteamApps\common\Grand Theft Auto San Andreas\moonloader\testingGSX.lua'...
[02:35:33.139584] (debug)	New script: 05F1D5E4
[02:35:33.140584] (system)	Teste GSX: Loaded successfully.
[02:35:45.089268] (script)	Teste GSX: GSX in lua: 91674136 status 0 x: 2503.4389648438 y: -1696.7362060547 z: 12.841711044312
[02:35:45.089268] (script)	Teste GSX: GSX in lua: gears 4
[02:35:45.102269] (script)	Teste GSX: GSX in lua: 91676720 status 0 x: 2507.1164550781 y: -1695.3375244141 z: 13.315396308899
[02:35:45.102269] (script)	Teste GSX: GSX in lua: gears 5
[02:35:49.490520] (script)	Teste GSX: GSX in lua: 91676720 status 1 x: 2507.1164550781 y: -1695.3375244141 z: 13.315396308899
[02:35:49.490520] (script)	Teste GSX: GSX in lua: gears 5
[02:35:49.491520] (script)	Teste GSX: GSX in lua: 91674136 status 1 x: 2503.4389648438 y: -1696.7355957031 z: 12.841711044312
[02:35:49.491520] (script)	Teste GSX: GSX in lua: gears 4
[02:35:51.520636] (system)	Unloading...
[02:35:51.520636] (system)	Teste GSX: Script terminated. (05F1D5E4)
[02:35:51.579639] (system)	Session terminated.

c.veh é um inteiro de 32 bits, deve estar mostrando cdata porque é o tipo de coisas customizadas adicionadas via bibliotecas em C.

Se fosse problema identificar cdata, não conseguiria ler nem os floats.
por Fabio
18 Mai 2018, 23:33
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu:
18 Mai 2018, 22:47
esta atualização sera útil, eu estava só fazendo testes, mas tentarei usar em um mod que estou fazendo.

Vlw :herp:

Você pode salvar todos os dados relativos ao carro no próprio GSX, não precisa de database externa. :herp:

Um_Geek escreveu:
18 Mai 2018, 22:47
Sóum curiosidade, o gsx pode ser usado no samp sem problemas?

Não sei, provavelmente sim.
por Fabio
18 Mai 2018, 02:34
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Atualizei o download, mudanças foram:

  • Adição de retorno para funções de adicionar callback
  • Adição de funções para remover funções de callback

A API com as funções novas está no download.

De qualquer forma, as funções estão assim agora:

Código: Selecionar tudo

int __cdecl addNotifyCallback(externalCbFun_t fun);
int __cdecl addNotifyTempCallback(externalCbFun_t fun);
void __cdecl removeNotifyCallback(int cbRef);
void __cdecl removeNotifyTempCallback(int cbRef);

Adicionado após 3 minutos 53 segundos:
Estou testando com esse script:

Código: Selecionar tudo

script_name("Teste GSX")

local gsx = require "lib.gsx"
local ffi = require 'ffi'
local gsxCbRef = -1

function callback(c) -- const externalCallbackStructure *c
	print ("GSX in lua: " .. c.veh .. " status " .. c.status .. " x: " .. c.gameStoredData.pos.x .. " y: " .. c.gameStoredData.pos.y .. " z: " .. c.gameStoredData.pos.z)
	--printHelpString ("GSX in lua: " .. c.veh .. " status " .. c.status .. " x: " .. c.gameStoredData.pos.x .. " y: " .. c.gameStoredData.pos.y .. " z: " .. c.gameStoredData.pos.z)
	local car = getVehiclePointerHandle(c.veh)
	print ("GSX in lua: gears " .. getCarNumberOfGears(car))
end

function main()
	return 0
end

function onStartNewGame(mpackNumber)
	
end

function onLoadGame (saveData)
	
end

function onExitScript (quitGame)
	gsx.removeNotifyCallback(gsxCbRef)
end

gsxCbRef = gsx.addNotifyCallback(callback);
por Fabio
18 Mai 2018, 02:03
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4714
Gênero:

GSX - Garage Save eXtender

Um_Geek escreveu:
17 Mai 2018, 19:33
Fabio escreveu: Mas eu pedi o do modloader @[email protected]

Nem estava me lembrando, estava desativado até
SpoilerAbrir

Código: Selecionar tudo

Game version: GTA SA 1.0 US
Unhandled exception at 0x041C000C in GTA_SA.EXE: 0xC0000005: Access violation reading location 0xB0041B47.
    Register dump:
        EAX: 0x041C0000  EBX: 0x0022F208  ECX: 0x03250510  EDX: 0x0022F1E0  
        EDI: 0x03250520  ESI: 0x03250540  EBP: 0x0022F1C8  EIP: 0x041C000C  
        ESP: 0x0022F1C0  EFL: 0x00010246  CS: 0x0000001B   SS: 0x00000023   
        GS: 0x00000000   FS: 0x0000003B   ES: 0x00000023   DS: 0x00000023   
        
    Stack dump:
        [...]

    Backtrace (may be wrong):
        =>0x041C000C in unknown (+0x41c000c) (0x0022F1BC) 
          0x736DA44D in gsx.asi (+0xa44d) (0x0022F1C8) 
          0x736E054E GSX_getVersionNum+0x7e in gsx.asi (+0x1054e) (0x0022F1E4) 
          0x736E0AE7 getNewCarGrgForeach+0x307 in gsx.asi (+0x10ae7) (0x0022F230) 
          0x736E3D92 getNewCarGrgForeach+0x35b2 in gsx.asi (+0x13d92) (0x0022F240) 
          0x736E00B2 getDataToSaveSize+0x29f2 in gsx.asi (+0x100b2) (0x0022F258) 
          0x736E0023 getDataToSaveSize+0x2963 in gsx.asi (+0x10023) (0x0022F280) 
          0x00448292 in GTA_SA.EXE (+0x48292) (0x0022F2A0) 
          0x00837993 in GTA_SA.EXE (+0x437993) (0x0022F510) 
          0x6C1D7AA5 in SA_GPS.asi (+0x7aa5) (0x0022F560) 
          0x6C1D45E0 in SA_GPS.asi (+0x45e0) (0x0022F584) 
          0x6C1D3C98 in SA_GPS.asi (+0x3c98) (0x0022F680) 
          0x0053E986 in GTA_SA.EXE (+0x13e986) (0x0022F6E4) 
          0x674AFC02 in modloader.asi (+0x1fc02) (0x0022F714) 
          0x674B0246 in modloader.asi (+0x20246) (0x0022F888) 
          0x674B013C in modloader.asi (+0x2013c) (0x0022F9A0) 
          0x674AB83B in modloader.asi (+0x1b83b) (0x0022F9F4) 
          0x674AFBBB in modloader.asi (+0x1fbbb) (0x0022FA44) 
          0x674B07BB in modloader.asi (+0x207bb) (0x0022FBD0) 
OBS: Acredito que será preciso usar o callback de load do moonloader e o temp callback, parece que o moonloader recarrega o script quando dá reload, é isso?

Isto, por isto no mod do posto de combustível uso onExitScript para liberar a memoria alocada ao iniciar o script, ou iria perder referencia para aquela e alocar outra e assim por diante ao recarrega os scripts.


Deu um erro em =>0x041C000C in unknown (+0x41c000c) (0x0022F1BC), suponho que você tenha recarregado o jogo.

Preciso adicionar um retorno na função de callback (uma espécie de Ref) para você remover ela quando for necessário, não sei se a temp callback está funcionando no moonloader por causa da ordem que as funções são rodadas.

Voltar para “GSX - Garage Save eXtender”