Brazilian Modding Studio
Olá, seja bem vindo à Comunidade BMS!

Para se registrar no fórum, siga os passos:

1 - Clique em "Registrar-se" aqui em baixo;
2 - Aceite os termos de serviço;
3 - Escolha um nome de usuário e senha;
4 - Realize o login no fórum clicando em "Conectar-se".

Compartilhe
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
  • Reputação da mensagem: 100% (5 votos)
em Seg 18 Dez 2017, 21:18
[EM FASE DE TESTES]
[TÓPICO INCOMPLETO]

Agora é possível adicionar mais informações nos carros que serão salvos nas garagens do jogo facilmente.



Para jogadores:
Agora será possível que outros mods salvem informações próprias nos carros que são salvos pela garagem, são possibilidades ilimitadas, por exemplo: mods de Auto Posto salvando quantidade de combustível, entre outras coisas.

O mod de salvar automaticamente placas dos carros foi feito como uma pequena demonstração do Garage Save eXtender.

Usos:
VehFuncs
Em andamento...


Para modders:
O GSX possui uma interface (aqui no sentido de programação do termo) para ser usada através de mods CLEO (feitos no Sanny Builder ou gta3script) e ASI.

É possível ser notificado de save/load de carros em garagens e então salvar ou carregar dados, pode ser através de scripts CLEO ou ASI.

O mod trabalha com "dois tipos de dados":

  1. Dados que já serão salvos no arquivo da forma como se apresentam e/ou já estavam salvos anteriormente (em caso de load game e/ou fechar e abrir garagem com um veículo).
  2. Dados que serão copiados para a memória específica do GSX no momento em que o carro for colocado em uma garagem e fechar a porta.


1. Esses dados já estão copiados para memória a própria do GSX e permanecerão os mesmos caso não sejam alterados pelos dados do 2º tipo ou não forem atualizados manualmente por algum script.

2. O GSX guarda apenas o endereço desse tipo de dado e o tamanho dele e quando o carro guardado, esse ponteiro (endereço de memória) será lido e a quantidade especificada no tamanho será copiada para a memória própria do GSX, caso já exista um dado pelo mesmo nome, será atualizado.

A identificação desses dados na memória do GSX é pelo nome atribuído a ele pelo scripter.






Explicando a API:

Explicando a API:


Código:
static const wchar_t *GSXPath = L"gsx.asi";

É o nome do arquivo do .asi, se preferir, pode inserir um arquivo de configuração que carrega esse nome, caso pense que alguém pode mudar o nome do .asi principal.

Código:
struct journalNews

É a struct interna que guarda registros de veículos salvos/carregados.

Código:
struct apiCarNotify

É a struct que deve ser enviada para a função getNewCarForeach para retornar um dos veículos recentemente adicionados ou carregados em uma garagem (veremos mais a frente).

Código:
struct externalCallbackStructure

É a struct que sua função de callback deve aceitar como parâmetro.

Código:
void(__cdecl externalCbFun_t)(const externalCallbackStructure*);

Forma de protótipo que sua função de callback deve ter.



As funções a seguir NÃO devem ser usadas na função WinMain.


Código:
void addNotifyCallback(externalCbFun_t fun);

Adiciona uma função sua na lista de callbacks do mod, será sempre chamada quando um carro for carregado ou salvo em uma garagem, é chamada uma vez por carro, então se sua garagem tiver dois carros, será chamada duas vezes e assim por diante.

Código:
void addNotifyTempCallback(externalCbFun_t fun);

Funcionamento quase igual a função acima, com a diferença que a lista de funções adicionadas por essa é limpa quando recarrega o save ou carrega outro save.

Código:
bool getNewCarForeach(size_t &i, apiCarNotify &out);

Caso não seja escolhida a forma de callbacks automáticos, pode usar esta que funciona sendo chamada manualmente e retorna um carro por vez (caso tenha algum mais recente que a última vez checada).

Código:
size_t i = 0;

...


void yourfunction()
{
 using namespace GSX;
 
 apiCarNotify out;
 while (GSXAPI::getNewCarForeach(i, out))
 {
 out.veh; // vehicle
 
 switch(out.status)
 {
 case GSX::LOAD_CAR:
 //
 break;
 
 case GSX::SAVE_CAR:
 //
 break;
 
 default:
 break;
 }
 }
}

void frameThings()
{
 ...
 yourfunction();
 ...
}

Código:
{$CLEO}

0AA2: 0@ = load_library "grgsaveextra.asi" // IF and SET                                                                                  
0AA4: 6@ = get_proc_address "getNewCarGrgForeach" library 0@ // IF and SET

const
   LOAD_CAR = 0
   SAVE_CAR = 1
end


while true
   wait 0        
  
   // Outras coisas
  
   0AC7: 13@ = var 16@ offset    // carInfo - 8 bytes
   0AC6: 14@ = label @positionRegister offset   // 8 bytes
   while true
       0AA7: call_function 6@ num_params 2 pop 2 13@ 14@ retorno 15@  // getNewCarGrgForeach / GSX::getNewCarForeach(i, out)
       if 15@ <> 0
       jf break
                                                                
       0AD0: show_formatted_text_lowpriority "Teste car %.8X status %d" time 1500 16@ 17@  // status: 0 carregado / 1 salvo      
       wait 2000
   end
  
  
   // Outras coisas
end

:carInfo
hex
   00 00 00 00  // veh ptr
   00 00 00 00  // status
end

:positionRegister
hex
    00 00 00 00 00 00 00 00
end


Código:
void setDataToSaveLater(CVehicle *veh, const char *name, int size, void *ptr, bool forceCopyNow);

Aqui precisa ser observado uma coisa, existem duas formas de salvar os dados no mod:
1ª - os dados serão salvos pelo GSX automaticamente quando o carro for salvo. Para isso acontecer, sempre que o carro for carregado é necessário chamar a função acima com o endereço atualizado do dado a ser salvo.
2ª - os dados são salvos instantaneamente, ficando disponível para as funções que testam se existe dado a ser carregado, etc. pode ser feito usando a função pushDirectlyToSavedData (explicação abaixo), ou usando true no parâmetro forceCopyNow.

OBS: ao usar setDataToSaveLater SEM usar true no parâmetro forceCopyNow e salvar o carro, será considerado um dado temporário que estará disponível a próxima vez que o carro ser carregado, mas se não for renovado através de qualquer uma das funções de salvar dados, ele não será salvo de novo.

Use a função de forçar cópia do dado imediatamente com cuidado, principalmente se estiver mexendo com dados grandes.

Código:
void pushDirectlyToSavedData(CVehicle *veh, const char *name, int size, void *ptr);

Salva o dado diretamente nos dados que podem ser carregados através de funções de load (Não atualiza o arquivo de save, ele só é atualizado quando o salvar o jogo).


Em andamento...





Downloads:
Download do GSX - Garage Save eXtender
Mod salvar placas dos carros automaticamente (depende do gsx.asi)

Source do mod de salvar as placas dos carros automaticamente:
Spoiler:

Código:
//#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <injector\injector.hpp>
#include <injector\assembly.hpp>
#include <injector\calling.hpp>
#include <injector\saving.hpp>
#include <game_sa\CVehicle.h>
#include <game_sa\CMatrix.h>
#include <game_sa\RenderWare.h>
#include <string>
#include "CStoredCar.h"
#include "GSXAPI.h"

static auto getVehicleModelInfoByID = injector::cstd<CVehicleModelInfo*(int id)>::call<0x00403DA0>;
auto CustomCarPlate_TextureCreate = injector::thiscall<bool(CVehicle *, CVehicleModelInfo *)>::call<0x006D10E0>;

void callback(const GSX::externalCallbackStructure *test)
{
 using namespace GSX;

 if (test->veh)
 {
 switch (test->status)
 {
 case GSX::LOAD_CAR:
 {
 if (dataToLoadExists(test->veh, "carplate"))
 {
 const char *plateText = (const char *)getSavedData(test->veh, "carplate");

 if (plateText != nullptr)
 {
 CVehicleModelInfo *info = getVehicleModelInfoByID(test->veh->m_wModelIndex);

 strncpy(info->m_plateText, plateText, 8u);

 if (CustomCarPlate_TextureCreate(test->veh, info))
 {

 }
 else
 {
 //MessageBoxA(0, "error plate", "", 0);
 }
 }
 }

 break;
 }

 case GSX::SAVE_CAR:
 {
 if (test->veh->m_pCustomCarPlate)
 {
 setDataToSaveLater(test->veh, "carplate", 8, test->veh->m_pCustomCarPlate->name, true);
 }
 break;
 }

 default:
 break;
 }
 }
}

void onload(int id)
{
 static bool loaded = false;

 if (!loaded)
 {
 loaded = true;

 addNotifyCallback(callback);
 }
}

void inject()
{
 injector::save_manager::on_load(onload);
}

BOOL WINAPI DllMain(
 _In_  HINSTANCE hinstDLL,
 _In_  DWORD fdwReason,
 _In_  LPVOID lpvReserved
 ){
 if (fdwReason == DLL_PROCESS_ATTACH) inject();


 return true;
}

No download do GSX estão os arquivos da API para C++, Moonloader e alguns exemplos.

É possível usar em CLEO (exemplo bem simples, farei um melhor):
Código:
{$CLEO}

0AA2: 0@ = load_library "gsx.asi" // IF and SET
0AA4: 1@ = get_proc_address "dataToSaveLaterExists" library 0@ // IF and SET      
0AA4: 2@ = get_proc_address "dataToLoadExists" library 0@ // IF and SET
0AA4: 3@ = get_proc_address "getLoadDataByVehPtr" library 0@ // IF and SET    
0AA4: 4@ = get_proc_address "setDataPtrToSaveVehPtr" library 0@ // IF and SET                                                                                
0AA4: 5@ = get_proc_address "pushDirectlyToSavedData" library 0@ // IF and SET                                                                                
0AA4: 6@ = get_proc_address "getNewCarGrgForeach" library 0@ // IF and SET

while true
   wait 0        
  
  
   0AC7: 13@ = var 16@ offset    // carInfo - 8 bytes
   0AC6: 14@ = label @positionRegister offset   // 8 bytes
   while true
       0AA7: call_function 6@ num_params 2 pop 2 13@ 14@ retorno 15@
       if 15@ <> 0
       jf break
                                                             // status: 0 carregado / 1 salvo        
       0AD0: show_formatted_text_lowpriority "Teste car %.8X status %d" time 1500 16@ 17@    
       wait 2000
   end
                            
  
   if 0256: 0
   jf continue          
   if 00DF:   actor $PLAYER_ACTOR driving
   jf continue  
  
   0811: 8@ = actor $PLAYER_ACTOR used_car
   0A97: 9@ = car 8@ struct
  
   //0AA7: call_function 1@ num_params 2 pop 2 "carplate" 9@ retorno 11@  
   0AA7: call_function 2@ num_params 2 pop 2 "carplate" 9@ retorno 12@

   if 12@ <> 0
   then
       0AA7: call_function 3@ num_params 2 pop 2  "carplate" 9@ retorno 10@  
       0AD0: show_formatted_text_lowpriority "Teste %s opcode" time 10 10@
   end
end


0A93: end_custom_thread          

:buflicenseplate
hex
   00 00 00 00 00 00 00 00 00 00 00
end

:carInfo
hex
   00 00 00 00  // veh ptr
   00 00 00 00  // status
end

:positionRegister
hex
    00 00 00 00 00 00 00 00
end




Pequena documentação das funções exportadas pelo GSX.asi:

Observação: o arquivo de save do GSX só é atualizado quando o jogo é salvo.

Estruturas:


Código:

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


  • veh - ponteiro para estrutura do veículo.
  • status - status do veículo.

    • 0 Carregado
    • 1 Salvo

  • gameStoredData ponteiro para uma estrutura que o jogo usa nas garagens, na versão atual não recomendo usar elas, o hook do GSX funciona pouco antes de todos os dados do veículo serem aplicados a essa estrutura.




Código:

struct apiCarNotify
{
   CVehicle *veh;
   int32_t status;
};


  • veh - ponteiro para estrutura do veículo.
  • status - status do veículo.

    • 0 Carregado
    • 1 Salvo





Código:
void (__cdecl externalCbFun_t)(const externalCallbackStructure*)

Protótipo que uma função deve ter para ser enviada ao GSX, não possui retorno e recebe um ponteiro para uma estrutura constante externalCallbackStructure.



Código:
int __cdecl addNotifyCallback(externalCbFun_t fun)

Adiciona um callback que poderá ser chamado a qualquer momento enquanto o jogo estiver aberto, ideal para mods ASI e outros que não mudam de endereço ao recarregar o jogo.
Retorna referência para callback.


  • fun endereço da função.




Código:
void __cdecl removeNotifyCallback(int cbRef)

Remove um callback adicionado com a função addNotifyCallback.

  • cbRef referência do callback.




Código:
int __cdecl addNotifyTempCallback(externalCbFun_t fun)

Adiciona um callback que funciona como o anterior, entretanto ele é removido da lista quando o jogo recarrega.
Retorna referência para callback.

  • fun endereço da função.




Código:
void __cdecl removeNotifyTempCallback(int cbRef)

Remove um callback adicionado com a função addNotifyTempCallback.

  • cbRef referência do callback.




Código:
int __cdecl getNewCarGrgForeach(size_t *i, apiCarNotify *out)

O GSX guarda um pequeno histórico de veículos salvos e/ou carregados que pode ser conferido de um a um.


  • i ponteiro para uma variável que guardará o último item lido do histórico, recomendo deixar alocado 64 bits (8 bytes) para ela.
  • out envie o endereço para uma memória com tamanho de 8 bytes. O GSX gravará uma estrutura do tipo apiCarNotify nessa memória.


Essa função retorna 1 caso tenha veículo salvo/carregado, 0 caso não tenha.



Dados do tipo 2 (ponteiros para dados que serão copiados assim que o carro for guardado na garagem):
Código:
void __cdecl setDataToSaveLaterVehPtr(CVehicle *veh, const char *name, int size, void *ptr, bool forceCopyNow)

Adiciona um endereço para uma lista de dados a serem copiados quando o veículo for salvo em uma garagem.

ATENÇÃO: Tenha certeza que os dados estarão disponíveis no momento em que o carro estiver sendo salvo.


  • veh ponteiro para o veículo
  • name nome do dado a ser salvo (ATENÇÃO: substituirá dados com o mesmo nome)
  • size tamanho em bytes do dado.
  • ptr endereço do dado
  • forceCopyNow faz uma cópia interna do dado nesse exato momento para outra lista com os dados salvos.




Código:
int __cdecl getDataToSaveSize(CVehicle *veh, const char *name)

Retorna o tamanho de um dado adicionado com a função setDataToSaveLaterVehPtr.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o tamanho do dado caso encontrado, -1 caso não encontrado.



Código:
int __cdecl dataToSaveLaterExists(CVehicle *veh, const char *name)

Verifica se um dado com certo nome existe na lista de dados a serem copiados futuramente. (Dados adicionados com a função setDataToSaveLaterVehPtr)


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna true ou false.



Código:
void __cdecl removeToSaveLaterVehPtr(CVehicle *veh, const char *name)

Remove um dado adicionado pela função setDataToSaveLaterVehPtr.


  • veh ponteiro para o veículo
  • name nome do dado a ser removido




Dados do tipo 1 (dados que são copiados no momento em que a função é chamada):
Código:
void __cdecl pushDirectlyToSavedData(CVehicle *veh, const char *name, int size, void *ptr)

Copia o dado para a memória de dados salvos do GSX sobre o veículo.


  • veh ponteiro para o veículo
  • name nome do dado a ser salvo (ATENÇÃO: substituirá dados com o mesmo nome)
  • size tamanho em bytes do dado.
  • ptr endereço do dado




Código:
void __cdecl removeToLoadDataVehPtr(CVehicle *veh, const char *name)

Apaga dados que foram salvos anteriormente ou dados adicionados com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser removido




Código:
int __cdecl dataToLoadExists(CVehicle *veh, const char *name)

Verifica se existe um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna true ou false.



Código:
void* __cdecl getLoadDataByVehPtr(CVehicle *veh, const char *name)

Retorna o ponteiro de um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.

ATENÇÃO: Esse endereço pode mudar caso os dados sejam alterados, copie o conteúdo dele logo após a função retornar.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o endereço do dado caso sucesso ou 0 caso não encontrado.



Código:
int __cdecl getDataToLoadSize(CVehicle *veh, const char *name)

Retorna o tamanho de um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o tamanho do dado caso encontrado, -1 caso não encontrado.


ATENÇÃO: As funções abaixo podem não existir em versões de testes iniciais:



Código:
const char * __cdecl GSX_getCompileTime()

Retorna a data e a hora que o GSX.asi foi compilado em string.



Código:
const char * __cdecl GSX_getVersionString()

Retorna a versão do GSX.asi em string.



Código:
float __cdecl GSX_getVersionNum()

Retorna a versão do GSX.asi em float. Recomendo usar a versão em string.



Última edição por Fabio em Ter 22 Maio 2018, 01:34, editado 27 vez(es)

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Seg 18 Dez 2017, 22:40
Boa!
A ideia do mod é somente salvar a placa do carro ou outras infos também? Não ficou tão claro...
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 18 Dez 2017, 22:57
@Deadstroke escreveu:Boa!
A ideia do mod é somente salvar a placa do carro ou outras infos também?

O Garage Save eXtender foi feito para qualquer um salvar qualquer coisa. :) :) :)

Vou explicar melhor ainda e construir uma documentação explicando como usar o mod.

Spoiler:
@Deadstroke escreveu:Não ficou tão claro...

[TÓPICO INCOMPLETO]

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Seg 18 Dez 2017, 22:58
Hahahaahahhaha justo...
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 18 Dez 2017, 23:05
@Deadstroke escreveu:Hahahaahahhaha justo...

:v:

Seria bom se o máximo de pessoas baixasse o mod e testasse para ter certeza que tudo está funcionando corretamente. :) :)

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Ter 19 Dez 2017, 00:26
Crash ao logar num save game. Usei save game do Djjr e Scr Log não aponta nenhum mod.

Crash log:
Game version: GTA SA 1.0 US
Unhandled exception at 0x6830FD18 in CLEO.asi (+0x1fd18): 0xC0000005: Access violation reading location 0x00000008.
Register dump:
EAX: 0x00000000 EBX: 0x00000000 ECX: 0x0000007A EDX: 0x00000000
EDI: 0x28FD8BE8 ESI: 0x00A94B68 EBP: 0x0177F470 EIP: 0x6830FD18
ESP: 0x0177F428 EFL: 0x00010287 CS: 0x00000023 SS: 0x0000002B
GS: 0x0000002B FS: 0x00000053 ES: 0x0000002B DS: 0x0000002B

Stack dump:
0x0177F428: 28FD8BE8 68310500 28FD8D40 28FD8BE8 0046A220 714E21CC
0x0177F440: 06250884 0177F470 06250884 00000193 6F13BDE3 3CF5C28F
0x0177F458: 00000000 714CB2AF 70A2EBE0 00000000 00000000 0177F4F8
0x0177F470: 0177F488 70A25A4F 00000000 00000000 FFFFFFFF 0177F4F8
0x0177F488: 0177F4BC 0053BFCC 0397C868 0177F53C FFFFFFFF 4966A700
0x0177F4A0: 0177F4BC 68311E04 0053E986 64C0006A 0177F53C 64C00570
0x0177F4B8: 00000001 0177F504 64BFC0DD 0177F510 03979038 64C58AAC
0x0177F4D0: 0397C868 0000007F 00000000 00000024 00000001 00000000
0x0177F4E8: 00000000 00000070 0177F4CC 0177F4CC 0177F528 64C546C0
0x0177F500: 00000001 0177F518 64C00552 0397904C 00000001 0177F6BC
base: 0x01580000 top: 0x0177F428 bottom: 0x01780000

Backtrace (may be wrong):
=>0x6830FD18 in CLEO.asi (+0x1fd18) (0x0177F470)
0x70A25A4F in ped_spec.asi (+0x5a4f) (0x0177F488)
0x0053BFCC in gta_sa.exe (+0x13bfcc) (0x0177F4BC)
0x64BFC0DD in modloader.asi (+0x1c0dd) (0x0177F504)
0x64C00552 in modloader.asi (+0x20552) (0x0177F518)
0x64BFEBB7 in modloader.asi (+0x1ebb7) (0x0177F534)
0x64C00C06 in modl
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Ter 19 Dez 2017, 00:30
@Deadstroke escreveu:Crash ao logar num save game. Usei save game do Djjr e Scr Log não aponta nenhum mod.

Crash log:
Game version: GTA SA 1.0 US
Unhandled exception at 0x6830FD18 in CLEO.asi (+0x1fd18): 0xC0000005: Access violation reading location 0x00000008.
   Register dump:
       EAX: 0x00000000  EBX: 0x00000000  ECX: 0x0000007A  EDX: 0x00000000  
       EDI: 0x28FD8BE8  ESI: 0x00A94B68  EBP: 0x0177F470  EIP: 0x6830FD18  
       ESP: 0x0177F428  EFL: 0x00010287  CS: 0x00000023   SS: 0x0000002B  
       GS: 0x0000002B   FS: 0x00000053   ES: 0x0000002B   DS: 0x0000002B  
       
   Stack dump:
       0x0177F428:  28FD8BE8 68310500 28FD8D40 28FD8BE8 0046A220 714E21CC
       0x0177F440:  06250884 0177F470 06250884 00000193 6F13BDE3 3CF5C28F
       0x0177F458:  00000000 714CB2AF 70A2EBE0 00000000 00000000 0177F4F8
       0x0177F470:  0177F488 70A25A4F 00000000 00000000 FFFFFFFF 0177F4F8
       0x0177F488:  0177F4BC 0053BFCC 0397C868 0177F53C FFFFFFFF 4966A700
       0x0177F4A0:  0177F4BC 68311E04 0053E986 64C0006A 0177F53C 64C00570
       0x0177F4B8:  00000001 0177F504 64BFC0DD 0177F510 03979038 64C58AAC
       0x0177F4D0:  0397C868 0000007F 00000000 00000024 00000001 00000000
       0x0177F4E8:  00000000 00000070 0177F4CC 0177F4CC 0177F528 64C546C0
       0x0177F500:  00000001 0177F518 64C00552 0397904C 00000001 0177F6BC
       base: 0x01580000   top: 0x0177F428   bottom: 0x01780000
       
   Backtrace (may be wrong):
       =>0x6830FD18 in CLEO.asi (+0x1fd18) (0x0177F470)
         0x70A25A4F in ped_spec.asi (+0x5a4f) (0x0177F488)
         0x0053BFCC in gta_sa.exe (+0x13bfcc) (0x0177F4BC)
         0x64BFC0DD in modloader.asi (+0x1c0dd) (0x0177F504)
         0x64C00552 in modloader.asi (+0x20552) (0x0177F518)
         0x64BFEBB7 in modloader.asi (+0x1ebb7) (0x0177F534)
         0x64C00C06 in modl

Compilou o script que eu deixei? Lembro de ter testado ele só nos carros já com placa salva.

SCRLOG com a opção de FLUSH ON WRITE?

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Censurando since 2011
Mensagens : 22701
Reputação : 727
Desde : 03/05/2012
Idade : 23
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br
em Qua 20 Dez 2017, 04:19
Casos de uso:

Tuning Mod: Salvar informações de peças instaladas, editadas, novas funcionalidades, tuning etc

VehFuncs: Salvar o novo sistema de peças extras
VehFuncs: Salvar dígitos do odômetro (kms rodados)

GTA Brasil: Salvar informações dos documentos do carro (ou seja, se você é proprietário ou é roubado)

______________________________
BMS agora em nova plataforma:
Forum.MixMods.com.br
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 25 Dez 2017, 01:02
Atualizei o download do GSX, tem alguns exemplos dentro do download dele.

@Junior_Djjr escreveu:Casos de uso:

Tuning Mod: Salvar informações de peças instaladas, editadas, novas funcionalidades, tuning etc

VehFuncs: Salvar o novo sistema de peças extras
VehFuncs: Salvar dígitos do odômetro (kms rodados)

GTA Brasil: Salvar informações dos documentos do carro (ou seja, se você é proprietário ou é roubado)

:v:

@Fabio escreveu:
@Deadstroke escreveu:Crash ao logar num save game. Usei save game do Djjr e Scr Log não aponta nenhum mod.

Crash log:
Game version: GTA SA 1.0 US
Unhandled exception at 0x6830FD18 in CLEO.asi (+0x1fd18): 0xC0000005: Access violation reading location 0x00000008.
   Register dump:
       EAX: 0x00000000  EBX: 0x00000000  ECX: 0x0000007A  EDX: 0x00000000  
       EDI: 0x28FD8BE8  ESI: 0x00A94B68  EBP: 0x0177F470  EIP: 0x6830FD18  
       ESP: 0x0177F428  EFL: 0x00010287  CS: 0x00000023   SS: 0x0000002B  
       GS: 0x0000002B   FS: 0x00000053   ES: 0x0000002B   DS: 0x0000002B  
       
   Stack dump:
       0x0177F428:  28FD8BE8 68310500 28FD8D40 28FD8BE8 0046A220 714E21CC
       0x0177F440:  06250884 0177F470 06250884 00000193 6F13BDE3 3CF5C28F
       0x0177F458:  00000000 714CB2AF 70A2EBE0 00000000 00000000 0177F4F8
       0x0177F470:  0177F488 70A25A4F 00000000 00000000 FFFFFFFF 0177F4F8
       0x0177F488:  0177F4BC 0053BFCC 0397C868 0177F53C FFFFFFFF 4966A700
       0x0177F4A0:  0177F4BC 68311E04 0053E986 64C0006A 0177F53C 64C00570
       0x0177F4B8:  00000001 0177F504 64BFC0DD 0177F510 03979038 64C58AAC
       0x0177F4D0:  0397C868 0000007F 00000000 00000024 00000001 00000000
       0x0177F4E8:  00000000 00000070 0177F4CC 0177F4CC 0177F528 64C546C0
       0x0177F500:  00000001 0177F518 64C00552 0397904C 00000001 0177F6BC
       base: 0x01580000   top: 0x0177F428   bottom: 0x01780000
       
   Backtrace (may be wrong):
       =>0x6830FD18 in CLEO.asi (+0x1fd18) (0x0177F470)
         0x70A25A4F in ped_spec.asi (+0x5a4f) (0x0177F488)
         0x0053BFCC in gta_sa.exe (+0x13bfcc) (0x0177F4BC)
         0x64BFC0DD in modloader.asi (+0x1c0dd) (0x0177F504)
         0x64C00552 in modloader.asi (+0x20552) (0x0177F518)
         0x64BFEBB7 in modloader.asi (+0x1ebb7) (0x0177F534)
         0x64C00C06 in modl

Compilou o script que eu deixei? Lembro de ter testado ele só nos carros já com placa salva.

SCRLOG com a opção de FLUSH ON WRITE?

philosoraptor philosoraptor

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 529
Reputação : 42
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário
em Seg 25 Dez 2017, 11:29
Sobre o outro log, deconsidere por enquanto, tinha outros mods que estavam atrapalhando.
Agora tenho tido esse em toda vez que vou salvar o jogo.

Crash log:
Game version: GTA SA 1.0 US
Unhandled exception at 0x00576DA4 in gta_sa.exe (+0x176da4): 0xC0000005: Access violation reading location 0x000005BF.
Register dump:
EAX: 0x0000002B EBX: 0x00000000 ECX: 0x00000594 EDX: 0x0005A599
EDI: 0x0000002B ESI: 0x00BA6748 EBP: 0x0177F4BC EIP: 0x00576DA4
ESP: 0x0177F480 EFL: 0x00010202 CS: 0x00000023 SS: 0x0000002B
GS: 0x0000002B FS: 0x00000053 ES: 0x0000002B DS: 0x0000002B

Stack dump:
0x0177F480: 00000000 00000000 FFFFFFFF 0053BF49 038FC848 0177F53C
0x0177F498: FFFFFFFF 00000000 0177F4BC 6F501E04 0053E986 0F1E006A
0x0177F4B0: 0177F53C 0F1E0570 00000001 0177F504 0F1DC0DD 0177F510
0x0177F4C8: 038F86D8 0F238AAC 038FC848 6F4FF275 00020F82 00000102
0x0177F4E0: 0000001B 00010001 00000102 00010001 0177F4CC 0177F4CC
0x0177F4F8: 0177F528 0F2346C0 00000001 0177F518 0F1E0552 038F86EC
0x0177F510: 00000001 0177F6BC 0177F534 0F1DEBB7 0177F53C 0177F6BC
0x0177F528: 0177F69C 0F2346D8 00000000 0177F6A8 0F1E0C06 0F2389B4
0x0177F540: 038FC848 08BCBA3C 0177F5E8 00000000 0177F69C 0F234965
0x0177F558: FFFFFFFF 0177F6A8 00000000 0177F6BC 14986794 0177F780
base: 0x01580000 top: 0x0177F480 bottom: 0x01780000

Backtrace (may be wrong):
=>0x00576DA4 in gta_sa.exe (+0x176da4) (0x0177F4BC)
0x0F1DC0DD in modloader.asi (+0x1c0dd) (0x0177F504)
0x0F1E0552 in modloader.asi (+0x20552) (0x0177F518)
0x0F1DEBB7 in modloader.asi (+0x1ebb7) (0x0177F534)
0x0F1E0C06 in modloader.asi (+0x20c06) (0x0177F6A8)
0x0F1E0AFC in modloader.asi (+0x20afc) (0x0177F6B4)
0x0FAD6720 in imfx.asi (+0x16720) (0x0177F6C0)
0x0FACBA71 in imfx.asi (+0xba71) (0x0177F6F4)
0x0FAD93D7 in imfx.asi (+0x193d7) (0x0177F744)
0x0FAD8801 in imfx.asi (+0x18801) (0x0177F750)
0x0FACFB74 in imfx.asi (+0xfb74) (0x0177F778)
0x0FACE236 in imfx.asi (+0xe236) (0x0177F87C)
0x0FACCBDE in imfx.asi (+0xcbde) (0x0177F88C)
0x0053ECC2 in gta_sa.exe (+0x13ecc2) (0x0177F894)
0x00619B71 in gta_sa.exe (+0x219b71) (0x0177F8A8)
0x00748DA0 in gta_sa.exe (+0x348da0) (0x0177F948)
0x0F1E0504 in modloader.asi (+0x20504) (0x0177F968)
0x0F1DE756 in modloader.asi (+0x1e756) (0x0177F998)
0x0F1DC01F in modloader.asi (+0x1c01f) (0x0177F9EC)




Shutting down Mod Loader...
Shutting down filesystem watcher...
Shutting down menu...
Unloading plugin "gta3.std.fx"
Unloading plugin "gta3.std.asi"
Unloading plugin "gta3.std.bank"
Unloading plugin "gta3.std.data"
Unloading plugin "gta3.std.movies"
Unloading plugin "gta3.std.scm"
Unloading plugin "gta3.std.text"
Unloading plugin "gta3.std.tracks"
Unloading plugin "gta3.std.sprites"
Unloading plugin "gta3.std.stream"
Mod Loader has been shutdown.
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 25 Dez 2017, 13:04
Está usando ele instalado no modloader? Só testei ele na pasta principal. philosoraptor

Eu não mexi em nesse nesse endereço, será que não é algum outro mod? philosoraptor

Que mods você está usando? Já testou tirando um por um? philosoraptor


Modifiquei uma coisa relacionada ao set de directory do user documents e atualizei o download. philosoraptor

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 22 Jan 2018, 18:41
Um dos usos é para essa gambiarra que chamo de protótipo da nova versão do Auto Posto Realista:

https://drive.google.com/file/d/1DyQ37Ix6xMyy2wjXIK3hMtrtB4N9OyJT/view?usp=sharing


______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 6
Reputação : 0
Desde : 24/08/2014
Ver perfil do usuário
em Dom 28 Jan 2018, 05:33
This usually works, but not always..
2Fabio, what do you think about this?
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Dom 28 Jan 2018, 09:54
@Recoil escreveu:This usually works, but not always..
2Fabio, what do you think about this?
Spoiler:

May be incompatibility with other mods.

What mods do you have installed?

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 6
Reputação : 0
Desde : 24/08/2014
Ver perfil do usuário
em Dom 28 Jan 2018, 10:33
I deleted all the plugins and scripts except cleo.asi (plugin without scripts) gsx.asi and saveLicensePlate.asi
after a while, the front (only front) number plate has changed.
If you need more video?

previously installed:
tweaksa;
AssetAutocollector.asi
CustomClothes.asi
III.VC.SA.LimitAdjuster.asi
imfx.asi
LODLinker.asi
MobileHud.asi
noDEP.asi
Police_Siren.asi
weaptxd.asi
SirenExtender.asi
driverview.asi
RagDoll_physics.asi
modloader.asi
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Dom 28 Jan 2018, 10:44
@Recoil escreveu:
after a while, the front (only front) number plate has changed.

It seems to be a problem with the game's built-in function that creates the plates. I'll look for another function that creates plates.

@Recoil escreveu:
If you need more video?

I think it's okay for now, thank you very much.

@Recoil escreveu:
previously installed:
tweaksa;
AssetAutocollector.asi
CustomClothes.asi
III.VC.SA.LimitAdjuster.asi
imfx.asi
LODLinker.asi
MobileHud.asi
noDEP.asi
Police_Siren.asi
weaptxd.asi
SirenExtender.asi
driverview.asi
RagDoll_physics.asi
modloader.asi

I do not know all of them, I'll do a search and install

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 05 Fev 2018, 17:52
I did not find the problem yet.

But I modified the code to create log with each mod task: https://drive.google.com/file/d/1qW8bk11vTqeoAz773zLDHPlP-rTZ0kIq/view?usp=sharing

When the game is open, log is cleaned.

Please test the ASI and post the log file (saveLicensePlate.log) contents here.

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Produtor de vídeos - Avançado
Produtor de vídeos - Avançado
Mensagens : 17152
Reputação : 162
Desde : 03/06/2012
Ver perfil do usuáriohttp://playgamemods.blogspot.com.br/
em Seg 05 Fev 2018, 18:38
Ele é capaz de salvar partes danificadas dos veículos?

______________________________
http://playgamemods.blogspot.com.br/




"Usaremos o idiota útil na linha de frente. Incitaremos o ódio entre as classes. Destruiremos sua base moral, a família e a espiritualidade. Comerão as migalhas que caírem de nossas mesas. O Estado será deus. Nossa minoria organizada irá sempre derrotar a maioria desorganizada" (Vladmir Lenin 1870 - 1924)

"Os fascistas do futuro chamarão a si mesmos de antifascistas." (Winston Churchill)

“Toda verdade passa por três estágios. Primeiro, ela é ridicularizada. Segundo, ela é violentamente resistida. Terceiro, ela é aceita como sendo autoevidente” (Arthur Schopenhauer, 1788-1860)"

“Se pudesse ser demonstrada a existência de qualquer órgão complexo que não poderia ter sido formado por numerosas, sucessivas e ligeiras modificações, minha teoria desmoronaria por completo.” (Charles Darwin, 1872)
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Seg 05 Fev 2018, 18:41
@Hue escreveu:Ele é capaz de salvar partes danificadas dos veículos?

É possível salvar qualquer coisa praticamente, no caso, precisa fazer em outro mod um sistema para ler as partes danificadas ao salvar e aplicar ao reabrir a garagem.
.
Digamos que os dados que são salvos e carregados são de certa forma manuais, o GSX apenas se encarrega de ligar o dado ao carro na hora de salvar e carregar.

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Produtor de vídeos - Avançado
Produtor de vídeos - Avançado
Mensagens : 17152
Reputação : 162
Desde : 03/06/2012
Ver perfil do usuáriohttp://playgamemods.blogspot.com.br/
em Seg 05 Fev 2018, 22:28
é muita molezinha guardar o carro na garagem e ter ele reparado. O jogo seria muito mais realista se tivéssemos que pagar o reparo lá no paint spray. E digo mais: O preço do reparo deveria ser de acordo com o dano. Se o carro tivesse muito ferrado, o valor seria mais alto.

Pense nisso com carinho ;-;

______________________________
http://playgamemods.blogspot.com.br/




"Usaremos o idiota útil na linha de frente. Incitaremos o ódio entre as classes. Destruiremos sua base moral, a família e a espiritualidade. Comerão as migalhas que caírem de nossas mesas. O Estado será deus. Nossa minoria organizada irá sempre derrotar a maioria desorganizada" (Vladmir Lenin 1870 - 1924)

"Os fascistas do futuro chamarão a si mesmos de antifascistas." (Winston Churchill)

“Toda verdade passa por três estágios. Primeiro, ela é ridicularizada. Segundo, ela é violentamente resistida. Terceiro, ela é aceita como sendo autoevidente” (Arthur Schopenhauer, 1788-1860)"

“Se pudesse ser demonstrada a existência de qualquer órgão complexo que não poderia ter sido formado por numerosas, sucessivas e ligeiras modificações, minha teoria desmoronaria por completo.” (Charles Darwin, 1872)
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Ter 06 Fev 2018, 13:49
@Hue escreveu:é muita molezinha guardar o carro na garagem e ter ele reparado. O jogo seria muito mais realista se tivéssemos que pagar o reparo lá no paint spray. E digo mais: O preço do reparo deveria ser de acordo com o dano. Se o carro tivesse muito ferrado, o valor seria mais alto.

Pense nisso com carinho ;-;

Parece interessante. philosoraptor

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Produtor de vídeos - Avançado
Produtor de vídeos - Avançado
Mensagens : 17152
Reputação : 162
Desde : 03/06/2012
Ver perfil do usuáriohttp://playgamemods.blogspot.com.br/
em Ter 06 Fev 2018, 14:15
:) :) :)

______________________________
http://playgamemods.blogspot.com.br/




"Usaremos o idiota útil na linha de frente. Incitaremos o ódio entre as classes. Destruiremos sua base moral, a família e a espiritualidade. Comerão as migalhas que caírem de nossas mesas. O Estado será deus. Nossa minoria organizada irá sempre derrotar a maioria desorganizada" (Vladmir Lenin 1870 - 1924)

"Os fascistas do futuro chamarão a si mesmos de antifascistas." (Winston Churchill)

“Toda verdade passa por três estágios. Primeiro, ela é ridicularizada. Segundo, ela é violentamente resistida. Terceiro, ela é aceita como sendo autoevidente” (Arthur Schopenhauer, 1788-1860)"

“Se pudesse ser demonstrada a existência de qualquer órgão complexo que não poderia ter sido formado por numerosas, sucessivas e ligeiras modificações, minha teoria desmoronaria por completo.” (Charles Darwin, 1872)
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 6
Reputação : 0
Desde : 24/08/2014
Ver perfil do usuário
em Ter 06 Fev 2018, 14:57
@Fabio, I tested the latest version, now everything works very well.
Thank you very much for your hard work.
Excellent asi plugin!
log
ASI date/time: Feb  5 2018 17:46:42
154930816 GSX carplate not exists
154930816 saving license plate UU86 5DJ
154977328 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154977328 saving license plate UU86 5DJ
154959240 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154959240 saving license plate UU86 5DJ
154959240 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154959240 saving license plate UU86 5DJ
154995416 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154995416 saving license plate UU86 5DJ
154990248 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154990248 saving license plate UU86 5DJ
154998000 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ

p.s. for complete happiness there is not enough opportunity to put in the garage more than 4 cars (TONGUE)
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
em Ter 06 Fev 2018, 15:27
@Recoil escreveu:@Fabio, I tested the latest version, now everything works very well.
Thank you very much for your hard work.

You are welcome

@Recoil escreveu:
Excellent asi plugin!
log
ASI date/time: Feb  5 2018 17:46:42
154930816 GSX carplate not exists
154930816 saving license plate UU86 5DJ
154977328 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154977328 saving license plate UU86 5DJ
154959240 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154959240 saving license plate UU86 5DJ
154959240 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154959240 saving license plate UU86 5DJ
154995416 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154995416 saving license plate UU86 5DJ
154990248 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ
154990248 saving license plate UU86 5DJ
154998000 GTA SA function CustomCarPlate_TextureCreate: OK  UU86 5DJ

Seems ok now, thank you very much for reporting the bug.

@Recoil escreveu:
p.s. for complete happiness there is not enough opportunity to put in the garage more than 4 cars (TONGUE)

 (TONGUE)


______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18228
Reputação : 384
Desde : 04/05/2012
Idade : 21
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
  • Reputação da mensagem: 100% (1 votos)
em Seg 30 Abr 2018, 00:56
Pequena documentação das funções exportadas pelo GSX.asi:

Observação: o arquivo de save do GSX só é atualizado quando o jogo é salvo.

Estruturas:


Código:

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


  • veh - ponteiro para estrutura do veículo.
  • status - status do veículo.

    • 0 Carregado
    • 1 Salvo

  • gameStoredData ponteiro para uma estrutura que o jogo usa nas garagens, na versão atual não recomendo usar elas, o hook do GSX funciona pouco antes de todos os dados do veículo serem aplicados a essa estrutura.




Código:

struct apiCarNotify
{
   CVehicle *veh;
   int32_t status;
};


  • veh - ponteiro para estrutura do veículo.
  • status - status do veículo.

    • 0 Carregado
    • 1 Salvo





Código:
void (__cdecl externalCbFun_t)(const externalCallbackStructure*)

Protótipo que uma função deve ter para ser enviada ao GSX, não possui retorno e recebe um ponteiro para uma estrutura constante externalCallbackStructure.



Código:
void __cdecl addNotifyCallback(externalCbFun_t fun)

Adiciona um callback que poderá ser chamado a qualquer momento enquanto o jogo estiver aberto, ideal para mods ASI e outros que não mudam de endereço ao recarregar o jogo.


  • fun endereço da função.




Código:
void __cdecl addNotifyTempCallback(externalCbFun_t fun)

Adiciona um callback que funciona como o anterior, entretanto ele é removido da lista quando o jogo recarrega.

  • fun endereço da função.




Código:
int __cdecl getNewCarGrgForeach(size_t *i, apiCarNotify *out)

O GSX guarda um pequeno histórico de veículos salvos e/ou carregados que pode ser conferido de um a um.


  • i ponteiro para uma variável que guardará o último item lido do histórico, recomendo deixar alocado 64 bits (8 bytes) para ela.
  • out envie o endereço para uma memória com tamanho de 8 bytes. O GSX gravará uma estrutura do tipo apiCarNotify nessa memória.


Essa função retorna 1 caso tenha veículo salvo/carregado, 0 caso não tenha.



Código:
void __cdecl setDataToSaveLaterVehPtr(CVehicle *veh, const char *name, int size, void *ptr, bool forceCopyNow)

Adiciona um endereço para uma lista de dados a serem copiados quando o veículo for salvo em uma garagem.

ATENÇÃO: Tenha certeza que os dados estarão disponíveis no momento em que o carro estiver sendo salvo.


  • veh ponteiro para o veículo
  • name nome do dado a ser salvo (ATENÇÃO: substituirá dados com o mesmo nome)
  • size tamanho em bytes do dado.
  • ptr endereço do dado
  • forceCopyNow faz uma cópia interna do dado nesse exato momento para outra lista com os dados salvos.




Código:
int __cdecl getDataToSaveSize(CVehicle *veh, const char *name)

Retorna o tamanho de um dado adicionado com a função setDataToSaveLaterVehPtr.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o tamanho do dado caso encontrado, -1 caso não encontrado.



Código:
int __cdecl dataToSaveLaterExists(CVehicle *veh, const char *name)

Verifica se um dado com certo nome existe na lista de dados a serem copiados futuramente. (Dados adicionados com a função setDataToSaveLaterVehPtr)


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna true ou false.



Código:
void __cdecl removeToSaveLaterVehPtr(CVehicle *veh, const char *name)

Remove um dado adicionado pela função setDataToSaveLaterVehPtr.


  • veh ponteiro para o veículo
  • name nome do dado a ser removido




Código:
void __cdecl pushDirectlyToSavedData(CVehicle *veh, const char *name, int size, void *ptr)

Copia o dado para a memória de dados salvos do GSX sobre o veículo.


  • veh ponteiro para o veículo
  • name nome do dado a ser salvo (ATENÇÃO: substituirá dados com o mesmo nome)
  • size tamanho em bytes do dado.
  • ptr endereço do dado




Código:
void __cdecl removeToLoadDataVehPtr(CVehicle *veh, const char *name)

Apaga dados que foram salvos anteriormente ou dados adicionados com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser removido




Código:
int __cdecl dataToLoadExists(CVehicle *veh, const char *name)

Verifica se existe um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna true ou false.



Código:
void* __cdecl getLoadDataByVehPtr(CVehicle *veh, const char *name)

Retorna o ponteiro de um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.

ATENÇÃO: Esse endereço pode mudar caso os dados sejam alterados, copie o conteúdo dele logo após a função retornar.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o endereço do dado caso sucesso ou 0 caso não encontrado.



Código:
int __cdecl getDataToLoadSize(CVehicle *veh, const char *name)

Retorna o tamanho de um dado salvo anteriormente ou com a função pushDirectlyToSavedData ou com a setDataToSaveLaterVehPtr usando forceCopyNow como true.


  • veh ponteiro para o veículo
  • name nome do dado a ser procurado


Retorna o tamanho do dado caso encontrado, -1 caso não encontrado.


ATENÇÃO: As funções abaixo podem não existir em versões de testes iniciais:



Código:
const char * __cdecl GSX_getCompileTime()

Retorna a data e a hora que o GSX.asi foi compilado em string.



Código:
const char * __cdecl GSX_getVersionString()

Retorna a versão do GSX.asi em string.



Código:
float __cdecl GSX_getVersionNum()

Retorna a versão do GSX.asi em float. Recomendo usar a versão em string.


______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
Conteúdo patrocinado
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum