[Tutorial] SA-MP 0.3.8: Adicionando skins, objetos e usando Redirect()
#1

SA-MP 0.3.DL
Tutoriais de como adicionar skin, objeto e utilizar o Redirect()
Й necessбrio estб utilizando o SA-MP 0.3.DL
  • Como usar o adicionar skins server-side
    • Vocк deverб abrir a pasta models dentro do seu sa-mp server.

    • Ao abrir tal pasta vocк deverб adicionar o .dff e .txd da skin desejada.

    • Apуs coloca-los na pasta models do seu sa-mp server, vocк deverб editar o arquivo artconfig.txt, localizado nesta mesma pasta.

      Use o parametro AddCharModel(baseid, newid, dffname[], txdname[]); dentro do artconfig.txt.
      • baseid - Serб a skin que ele irб copiar os movimentos e falas, dentre as 311 skins disponнveis (0-311).
      • newid - Deverб ser o novo ID da skin, entre 20000 e 30000 (ex: 20012).
      • dffname[] - Deverб ser o caminho do arquivo .dff desta skin a partir da pasta models dentro do seu sa-mp server.
      • txdname[] - Deverб ser o caminho do arquivo .txd desta skin a partir da pasta models dentro do seu sa-mp server.
      Ex:
      pawn Код:
      AddCharModel(280, 25000, "police_asiatic.dff", "police_asiatic.txd");

    • Apуs configurar o artconfig.txt vб atй o server.cfg e coloque o seguinte parвmetro no final do arquivo (caso ainda nгo tenha feito):
      pawn Код:
      useartwork 1
    • Ligue seu sa-mp server e entre no servidor.
    • As skins serгo baixadas assim que adentrar dentro do servidor.

    • Todas as skins sгo baixadas pelo client-side e serгo colocadas na pasta GTA San Andreas User Files\SAMP\cache\IP_Do_Servidor\ do jogador. Os arquivos possuem nomes diferentes que sгo definidos pelo prуprio SA-MP server, utilizando alguma criptografia para defini-los.
  • Como usar o adicionar objetos no server-side
    • Vocк deverб abrir a pasta models dentro do seu sa-mp server.

    • Ao abrir tal pasta vocк deverб adicionar o .dff e .txd do objeto desejado.

    • Apуs coloca-los na pasta models do seu sa-mp server, vocк deverб editar o arquivo artconfig.txt, localizado nesta mesma pasta.

      Use o parametro AddSimpleModel(virtualworld, baseid, newid, dffname[], txdname[]); dentro do artconfig.txt.
      • virtualworld - Serб o virtual world onde esse objeto estarб disponнvel. Vocк poderб colocar como -1 para ser disponнvel em qualquer virtual world.
      • baseid - Й o id do objeto que terб os parвmetros nativos copiados para o novo objeto.
      • newid - Й o novo id do objeto a ser inserido no jogo, que deverб estб entre -1000 e -30000 (ex: -24121).
      • dffname[] - Deverб ser o caminho do arquivo .dff deste objeto a partir da pasta models dentro do seu sa-mp server.
      • txdname[] - Deverб ser o caminho do arquivo .txd deste objeto a partir da pasta models dentro do seu sa-mp server.
      Ex:
      pawn Код:
      AddSimpleModel(-1, 18865, -1000, "AxomCamPOLICE1.dff", "AxomCamPOLICE1.txd");

    • Apуs configurar o artconfig.txt vб atй o server.cfg e coloque o seguinte parвmetro no final do arquivo (caso ainda nгo tenha feito):
      pawn Код:
      useartwork 1
    • Ligue seu sa-mp server e entre no servidor.
    • Os objetos serгo baixadas assim que adentrar dentro do servidor.

    • Todos os objetos sгo baixadas pelo client-side e serгo colocadas na pasta GTA San Andreas User Files\SAMP\cache\IP_Do_Servidor\ do jogador. Os arquivos possuem nomes diferentes que sгo definidos pelo prуprio SA-MP server, utilizando alguma criptografia para defini-los.
  • Como usar o Redirect()
    • Todos os arquivos utilizados no Redirect deverгo ser iguais aos arquivos na pasta models/ no sa-mp server.
    • Vocк deverб abrir o cуdigo fonte (gamemode) de seu servidor.
    • Posicione a funзгo OnPlayerRequestDownload(playerid, type, crc) em alguma posiзгo do gamemode, sugiro acima do OnGameModeInit para facilitar.
      pawn Код:
      public OnPlayerRequestDownload(playerid, type, crc)
                  {
                 
                      return 1;
                  }
    • Crie uma variбvel global sem tamanho definido, acima da public com o nome SERVER_DOWNLOAD.
      pawn Код:
      new SERVER_DOWNLOAD[];
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                 
                      return 1;
                  }
    • Declare o URL do local onde estгo os arquivos do seu servidor em seu site na variбvel criada. Para o exemplo, utilizarei o seguinte URL http://www.dev-wil.com/downloads/038/models.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                 
                      return 1;
                  }
    • Agora, crie os parвmetros do seu OnPlayerRequestDownload para que ele substitua o download via sa-mp server pelo do seu site. Coloque uma condiзгo para checar se o jogador estб conectado. Crie condiзхes com os types DOWNLOAD_REQUEST_TEXTURE_FILE e DOWNLOAD_REQUEST_MODEL_FILE para definir a funзгo que irб buscar a textura ou o arquivo de modelo, respectivamente.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          {}
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          {}
                      return 1;
                  }
    • Adicione as funзхes FindTextureFileNameFromCRC(crc, retstr[], retstr_size) e FindModelFileNameFromCRC(crc, retstr[], retstr_size)[/b] para o sa-mp server escrever o nome dos arquivos de textura e modelo, respectivamente, a serem encontrados no servidor de web dentro das condiзхes com o type.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          FindTextureFileNameFromCRC(crc, retstr[], retstr_size);
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          FindModelFileNameFromCRC(crc, retstr[], retstr_size);
                      return 1;
                  }
    • Crie uma variбvel local para substituir o retstr[] e altere o retstr_size para sizeof(nome da variavel)..
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                         
                      new filename[64];
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          FindTextureFileNameFromCRC(crc, filename, sizeof(filename));
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          FindModelFileNameFromCRC(crc, filename, sizeof(filename));
                         
                      return 1;
                  }
    • As funзхes de FindTextureFileNameFromCRC e FindModelFileNameFromCRC irгo retornar um valor 1 para caso seja achada ou 0 para caso nгo seja, crie uma variбvel para identificar tal aзгo e prossiga para o prуximo passo. Lembre-se de colocar a variбvel para ser igual a funзгo de localizar os arquivos.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                         
                      new filename[64], filefound;
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          filefound = FindTextureFileNameFromCRC(crc, filename, sizeof(filename));
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          filefound = FindModelFileNameFromCRC(crc, filename, sizeof(filename));
                         
                      return 1;
                  }
    • Agora crie uma condiзгo para que caso a variбvel tenha o valor 1 ela prossiga com algumas informaзхes.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                         
                      new filename[64], filefound;
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          filefound = FindTextureFileNameFromCRC(crc, filename, sizeof(filename));
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          filefound = FindModelFileNameFromCRC(crc, filename, sizeof(filename));
                         
                      if(filefound)
                          {}
                     
                      return 1;
                  }
    • Declare uma variбvel local para texto com o tamanho de 256. Essa variбvel serб responsбvel por armazenar a URL final do arquivo, contendo a URL principal e a localizaзгo do arquivo nesse endereзo. Crie uma formtaзгo para tal variбvel, inserindo o SERVER_DOWNLOAD e o filename no texto.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                         
                      new filename[64], filefound, url_final[256];
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          filefound = FindTextureFileNameFromCRC(crc, filename, sizeof(filename));
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          filefound = FindModelFileNameFromCRC(crc, filename, sizeof(filename));
                         
                      if(filefound)
                      {
                          format(url_final, sizeof(url_final), "%s/%s", SERVER_DOWNLOAD, filename);
                      }
                     
                      return 1;
                  }
    • Agora abaixo da formataзгo insira a funзгo RedirectDownload(playerid, url[]), onde o url[] й a variбvel que formatamos.
      pawn Код:
      new SERVER_DOWNLOAD[] = "http://www.dev-wil.com/downloads/038/models";
                  public OnPlayerRequestDownload(playerid, type, crc)
                  {
                      if(!IsPlayerConnected(playerid))
                          return 0;
                         
                      new filename[64], filefound, url_final[256];
                     
                      if(type == DOWNLOAD_REQUEST_TEXTURE_FILE)
                          filefound = FindTextureFileNameFromCRC(crc, filename, sizeof(filename));
                      else if(type == DOWNLOAD_REQUEST_MODEL_FILE)
                          filefound = FindModelFileNameFromCRC(crc, filename, sizeof(filename));
                         
                      if(filefound)
                      {
                          format(url_final, sizeof(url_final), "%s/%s", SERVER_DOWNLOAD, filename);
                          RedirectDownload(playerid, url_final);
                      }
                      return 1;
                  }
    • Ligue o SA-MP Server e entre no jogo, vocк notarб que os arquivos serгo baixados mais rapidamente pelo client-side dessa forma.
    • Caso ocorra que no lugar da porcentagem apareзa o erro (22) HTTP Response co... significarб que o caminho indicado para o arquivo estб errado ou diferente do sa-mp server. Faзa um debug e descubra o erro.
Se vocк tiver alguma dъvida, comente no tуpico. Se vocк encontrar algum erro comente ou envie via MP.
Reply
#2

Parabйns pelo tutorial.

Acho que deve-se adicionar uma nota, que os servidores que utilizam parвmetros de login/registro em OnPlayerConnect, devem altera-los para serem chamados apуs a realizaзгo dos Downloads (OnPlayerFinishedDownloading).

Tambйm, nгo realizar comandos quando estiver realizando um download. Eu fiz uma include temporбria, da qual estou aguardando outras funзхes para ter mais acesso a informaзхes de Download. https://github.com/BrasilMegaTrucker/IncludeDownload
Reply
#3

Уtima explicaзгo, otimizou bastante o tutorial, ficou excepcional. Uso de imagens sempre auxiliando й bom para quem tem mais dificuldade.
Reply
#4

pica.

+REP
Reply
#5

Excelente, gostei do passo a passo.
Reply
#6

Tutorial com gosto de ver, уtimo REP+
Reply
#7

Muito bom tutorial, bem explicado !

Sу uma dica, edite e troque a TAG [CODE] por [PHP]. Faz anos que essa TAG estб bugada
Reply
#8

Muito bom tutorial, bem explicado !
Reply
#9

Gostei, muito obrigado aprendi oque eu queria
Reply
#10

Sу uma observaзгo.
Deve-se retornar 0 quando utiliza redirecionamento. Se nгo utilizar o redirecionamento, a callback deve retornar 1.

Jб tive problemas por conta deste simples retorno.

Alйm disto, o Kalcor jб chegou a comentar sobre isto.
Reply
#11

Alguйm pode me dizer se as Hosts, vгo continuar com a 0.3.8, ou com a 0.3.7?
Quem puder me responder agradeзo !!
Reply
#12

Quote:
Originally Posted by SnowBorn
View Post
Alguйm pode me dizer se as Hosts, vгo continuar com a 0.3.8, ou com a 0.3.7?
Quem puder me responder agradeзo !!
Sempre que lanзa uma nova versгo, elas disponibilizam a atualizaзгo, no caso se vocк usar a hospedagem paga. Jб em VPS, vocк precisa atualizar manualmente.
Reply
#13

Quote:
Originally Posted by Locky_
View Post
Sу uma observaзгo.
Deve-se retornar 0 quando utiliza redirecionamento. Se nгo utilizar o redirecionamento, a callback deve retornar 1.

Jб tive problemas por conta deste simples retorno.

Alйm disto, o Kalcor jб chegou a comentar sobre isto.
Valeu, irei atualizar o tуpico em breve.


Obrigado pelos feedbacks positivos.
Reply
#14

Obrigado pelo tutorial vocк me ajudou muito.
Reply
#15

Tнtulo alterado para a versгo definitiva.

Quote:
Originally Posted by ThinAir
View Post
Obrigado pelo tutorial vocк me ajudou muito.
Obrigado pelo feedback positivo.
Reply
#16

Boa Wilzera
Reply
#17

Passei o tutorial para o inglкs e adicionei ele na board internacional tambйm.
Reply
#18

Posso usar o me-dia-fi-re para baixar os arquivos ou qual pбgina vocк recomenda?
Reply
#19

Solution?

sa-mp-219.png

Captura.PNG

Captura1.PNG

Captura2.PNG

PHP Code:
new SERVER_DOWNLOAD[] = "http://github.com/SapMan/ServerModels/tree/master/models/";
public 
OnPlayerRequestDownload(playeridtypecrc)
{
    if(!
IsPlayerConnected(playerid)) return 0;
    
    new 
filename[64], filefoundurl_final[256];
    
    if(
type == DOWNLOAD_REQUEST_TEXTURE_FILE)
        
filefound FindTextureFileNameFromCRC(crcfilenamesizeof(filename));
    else if(
type == DOWNLOAD_REQUEST_MODEL_FILE)
        
filefound FindModelFileNameFromCRC(crcfilenamesizeof(filename));
    if(
filefound)
    {
        
format(url_finalsizeof(url_final), "%s/%s"SERVER_DOWNLOADfilename);
        
RedirectDownload(playeridurl_final);
    }
    return 
1;

Reply
#20

Quote:
Originally Posted by SapMan
View Post
Solution?

Attachment 11821

Attachment 11822

Attachment 11823

Attachment 11824

PHP Code:
new SERVER_DOWNLOAD[] = "http://github.com/SapMan/ServerModels/tree/master/models/";
public 
OnPlayerRequestDownload(playeridtypecrc)
{
    if(!
IsPlayerConnected(playerid)) return 0;
    
    new 
filename[64], filefoundurl_final[256];
    
    if(
type == DOWNLOAD_REQUEST_TEXTURE_FILE)
        
filefound FindTextureFileNameFromCRC(crcfilenamesizeof(filename));
    else if(
type == DOWNLOAD_REQUEST_MODEL_FILE)
        
filefound FindModelFileNameFromCRC(crcfilenamesizeof(filename));
    if(
filefound)
    {
        
format(url_finalsizeof(url_final), "%s/%s"SERVER_DOWNLOADfilename);
        
RedirectDownload(playeridurl_final);
    }
    return 
1;

This is a private repository? If yes, try to change this to a public and check.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)