Pesquisa resultou em 27 ocorrências

por Um_Geek
10 Jan 2019, 11:24
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

Re: GSX - Garage Save eXtender

Fabio escreveu:
10 Jan 2019, 01:37
É 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.

Não é bem o caso, este "sid" é usado como um endereço de índice de uma tabela. quando abre a garagem os dados são copiados do gsx para esta tabela e quando fecha ele passa da tabela para o gsx. com estes dados na tabela posso checar com mais frequência estes dados sem ficar solicitando do gsx.

Fabio escreveu:
10 Jan 2019, 01:37
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.

Fiz um pequeno "faxineiro" para remover as entradas de veículos inexistentes.
por Um_Geek
09 Jan 2019, 22:17
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

Re: GSX - Garage Save eXtender

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)
por Um_Geek
09 Jan 2019, 15:44
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

Re: GSX - Garage Save eXtender

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.
por Um_Geek
04 Jul 2018, 00:19
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

Fabio escreveu: Tem integração com o github, não precisa colar o código.
Notei isto quando colei o link do gist, mas eu só queria o link. eu devia ter editado como link mesmo em vez de por o link do gist no code para não aparecer o iframe do gist :philo:
por Um_Geek
02 Jul 2018, 13:39
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

Mais um mod usando o gsx, este salva danos das portas e pneus, alem de salvar se deixou a porta aberta.
Eu devo ter editado umas 5 vezes no gist por causa desta tabulação
SpoilerAbrir

Código: Selecionar tudo

script_author("Um_Geek");
script_url("https://gta-geek.blogspot.com.br/");
script_version_number(0.0);

local ffi = require "ffi";
local memory = require "memory";
local gsx = nil;
local gsxCbRef = -1;
local gsxStrData = "cardam"; 

-- #################################################################################################################
-- gsx.asi by Fabio
-- https://forum.mixmods.com.br/f5-scripts-codigos/t214-gsx-garage-save-extender
-- #################################################################################################################
function loadGSXLibrary()
	if doesFileExist(getGameDirectory().."\\gsx.asi") then 
		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);
		]]
		return ffi.load("gsx.asi");
	end 
	return nil;
end 
-- #################################################################################################################

function callback(c)
	local dataToLoadExists = ffi.cast("int (*)(int,const char*)",gsx.dataToLoadExists);
	local getDataToLoadSize = ffi.cast("int (*)(int,const char*)",gsx.getDataToLoadSize);
	local getLoadDataByVehPtr = ffi.cast("int (*)(int,const char*)",gsx.getLoadDataByVehPtr);
    local pushDirectlyToSavedData = ffi.cast("int (*)(int,const char*,int,int)",gsx.pushDirectlyToSavedData);
	if c.status==1 then
        local Json = store(c);
        if Json~=nil then
			local size = {}; 
			local Str = Json;
            for j = 1, #Str do size[j] = Str:sub(j,j) end;
            local pStr = memory.strptr(Json);
            pushDirectlyToSavedData(c.veh,gsxStrData,#size,pStr);
		end
	else
		if dataToLoadExists(c.veh,gsxStrData)==1 then
			local ptr = getLoadDataByVehPtr(c.veh,gsxStrData);
			local size = getDataToLoadSize(c.veh,gsxStrData);
			restore(c,memory.tostring(ptr,size,false)); 
		end
	end
end

function store(c)
	local h = getVehiclePointerHandle(c.veh);
	if isThisModelACar(getCarModel(h)) then
		local t = {
			healt = getCarHealth(h),
			tires={},
			doors={},
			doorsdam = {}
		};
		for i=0, 6 do if isCarTireBurst(h,i) then t.tires[i] = i end end;
		for i=2, 5 do 
			t.doors[i] = isCarDoorFullyOpen(h,i); 
			t.doorsdam[i] = isCarDoorDamaged(h,i);
		end
		return encodeJson(t);
	end 
	return nil
end

function restore(c,s)
	local h = getVehiclePointerHandle(c.veh);
	if isThisModelACar(getCarModel(h)) then
		local t = decodeJson(s);
		setCarHealth(h,t.healt);
		for i=0, 3 do 
			if t.tires[i]  then 
				memory.write(c.veh+(1445+i),1,1,false);
			end 
		end
		for i=2, 5 do 
			if t.doorsdam[i]==true then damageCarDoor(h,i) end;
			if t.doors[i]==true then openCarDoor(h,i) end;
		end
	end
end

function onExitScript()
	if gsxCbRef~=-1 then gsx.removeNotifyCallback(gsxCbRef);gsxCbRef=-1; end;
end

function onScriptTerminate()
	if gsxCbRef~=-1 then gsx.removeNotifyCallback(gsxCbRef);gsxCbRef=-1; end;
end 

function main()
	gsx = loadGSXLibrary();
	gsxCbRef = gsx.addNotifyCallback(callback);
	while true do wait(80) end;
end

Código: Selecionar tudo

https://gist.github.com/UmGeek/6fdff6e506b8b9ec85a49d033474443f
por Um_Geek
19 Mai 2018, 19:33
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

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.
por Um_Geek
19 Mai 2018, 18:24
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

Código: Selecionar tudo

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

Era isto mesmo
Antes:

Código: Selecionar tudo

typedef void* CVehicle;

Agora:

Código: Selecionar tudo

typedef uint32_t GSXCVehicle;

agora esta funcionando. 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:
por Um_Geek
19 Mai 2018, 14:51
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

may be wrong
Deixei só modloader,gsx e moonloader ativo. Pelo que parece é algo aqui.

SpoilerAbrir

Código: Selecionar tudo

Game version: GTA SA 1.0 US
Unhandled exception at 0x753F812F in KERNELBASE.dll (+0x812f): 0xE24C4A02: NO_DESCRIPTION.
    Register dump:
        EAX: 0x0022F208  EBX: 0x088601C0  ECX: 0x088601C0  EDX: 0xE24C4A02  
        EDI: 0x0889D9A8  ESI: 0x088601C0  EBP: 0x0022F258  EIP: 0x753F812F  
        ESP: 0x0022F208  EFL: 0x00200246  CS: 0x0000001B   SS: 0x00000023   
        GS: 0x00000000   FS: 0x0000003B   ES: 0x00000023   DS: 0x00000023   
        
    Stack dump:
        [...]

    Backtrace (may be wrong):
        =>0x753F812F RaiseException+0x54 in KERNELBASE.dll (+0x812f) (0x0022F258) 
          0x56A23ADE lua_sethook+0x14e in lua51.dll (+0x23ade) 
por Um_Geek
19 Mai 2018, 14:16
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

Código: Selecionar tudo

MoonLoader v.026.2-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team
http://blast.hk/moonloader/

Por isto parece ter algo mais ai, vou vistoriar se tem algo dando conflito.

Edit 1:
E no modloader.log?
Mesmo codigo que enviei la atras.
por Um_Geek
19 Mai 2018, 14:11
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

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.

Edit1:
Não sai log, o jogo crasha só de chegar na garagem. quando leio o ponteiro fora retorna -1.
por Um_Geek
19 Mai 2018, 12:20
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

Eu esperava receber um pointer apenas, mas estava me perguntando se na garagem tivesse mais de um veiculo, e por isto não da certo pegar diretamente (nem com printStringNow), só printando no log mostra todos os itens que estão em c.veh. deve dar para jogar os itens de c.veh em uma table, para usar, vou ver se dar certo.

Edit 1:
Deve ter mais algo ai porque este simples exemplo também crasha aqui, os ponteiros retornam -1. Detalhe que estou testando a ultima versão do gsx e coloquei as novas funções no 'lib\gsx.lua'. alguma diferença entre meu jogo e o seu ou o pc, ali no log mostra que seu jogo é steam.

Edit 2:
Isto aqui deveria funcionar, porem não funciona. pelo que parece aplicar algum dado no veiculo ao abrir a garagem fica meio complicado aqui.
SpoilerAbrir

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
    --if c.status==1 then
    local p = c.veh
    local h = getVehiclePointerHandle(p)
    local m = getCarModel(h)
    local n = getNameOfVehicleModel(m)
    print(n)
    --end
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);

Opção 2, até adiciona os ponteiros na table, mas todos são -1 aqui.

Código: Selecionar tudo

script_name("Teste GSX")

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

function callback(c) -- const externalCallbackStructure *c
    if c.status==1 then
        table.insert(callbacks,c.veh)
    else 
        callbacks = {}
    end
end

function main()
    printStringNow(#callbacks,1000)
    return 0
end

function onStartNewGame(mpackNumber)
	
end

function onLoadGame(saveData)
	
end

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

gsxCbRef = gsx.addNotifyCallback(callback);
por Um_Geek
19 Mai 2018, 11:16
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

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))
por Um_Geek
18 Mai 2018, 22:47
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

esta atualização sera útil, eu estava só fazendo testes, mas tentarei usar em um mod que estou fazendo. Sóum curiosidade, o gsx pode ser usado no samp sem problemas?
por Um_Geek
17 Mai 2018, 19:33
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

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.
por Um_Geek
17 Mai 2018, 19:01
Fórum: Scripts & Códigos
Tópico: GSX - Garage Save eXtender
Respostas: 59
Exibições: 4743
Gênero:

GSX - Garage Save eXtender

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?

Voltar para “GSX - Garage Save eXtender”