[Tutorial] Cosas bбsicas para empezar un GM (Actualizando)
#1

ЎHola! mucha gente me estaba pidiendo йste tutorial por el ******** y йste tutorial va dedicado a aquellas personas que estбn empezando a programar. Bien empezemos.

Primero tenemos que tener definido los includes (Yo usarй 'a_samp' y 'YSI')

PHP код:
#include <a_samp>
#include <YSI\y_ini> 
Ahora definimos los siguientes dialogos (registro, logueo)

PHP код:
#define DREGISTER 1
#define DLOGIN 2 
Despuйs de los pasos anteriores definiremos la direcciуn donde se guardarбn las cuentas

PHP код:
#define PATH "/Cuentas/%s.ini" 
Ahora procederemos a crear el enum (variables) del jugador

PHP код:
enum jInfo
{
      
Contra[64],
      
Dinero,
      
Administrador,
      
Float:PosX,
      
Float:PosY,
      
Float:PosZ,
}
new 
PlayersData[MAX_PLAYERS[jInfo]; 
Ahora bajaremos abajo de todo el modo de juego y aсadiremos la funciуn que cargarб los datos de los jugadores

PHP код:
forward LoadAccount_data(playeridname[], value[]);
public 
LoadAccount_data(playeridname[], value])
{
        
INI_Int("Contraseсa"PlayersData[playerid][Contra]);
        
INI_Int("Dinero"PlayersData[playerid][Dinero]);
        
INI_Int("Administrador"PlayersData[playerid][Administrador]);
        
INI_Float("Pos_X"PlayersData[playerid][PosX]);
        
INI_Float("Pos_Y"PlayersData[playerid][PosY]);
        
INI_Float("Pos_Z"PlayersData[playerid][PosZ]);

Ahora haremos la funciуn que va a extraer la direcciуn exacta de la cuenta del jugador que ingrese en el servidor

PHP код:
stock UserPath(playerid)
{
      new 
string[128],PlayerNameFix[MAX_PLAYER_NAME];
      
GetPlayerName(playeridPlayerNameFix,sizeof(PlayerNameFix))
      
format(string,sizeof(string),PATH,PlayerNameFix);
      return 
string;

Lo siguiente que haremos serб aсadir el dialogo del logueo y registro, iremos al CALLBACK "OnPlayerRequestClass" ahora procederemos a aсadir lo siguiente:

PHP код:
if(fexist(playerid))

      
INI_ParseFile(UserPath(playerid)), "LoadAccount_%s", .bExtra true, .extra playerid);
      
ShowPlayerDialog(playeridDLOGINDIALOG_STYLE_INPUT"Panel de logueo""Estб cuenta se encuentra registrada en nuestra base de datos, por favor ingrese una contraseсa para ingresar""Entrar""Salir");
}
else 
//Йsto verб si el jugador no estб registrado, si el jugador no estб registrada le enviarб el dialogo de registro
{
      
ShowPlayerDialog(playeridDREGISTERDIALOG_STYLE_INPUT,"Panel de registro""Estб cuenta no se encuentra registrada en nuestra base de datos, por favor ingrese una nueva contraseсa para registrarse""Entrar""Salir");

En el Callback "OnDialogResponse", aсadiremos las funciones de los dialogos de registro y logueo

PHP код:
if(dialogid DREGISTER)
{
      if (!
response) return Kick(playerid); //El 'Kick' es si le da en salir, lo expulse del servidor automaticamente
      
if(response)
      {
           if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDREGISTERDIALOG_STYLE_INPUT"Error en el registro""Hubo un error en el registro, por favor ingrese su contraseсa de nuevo""Registrar""Salir");
           new 
INI:File INI_Open(UserPath(playerid));
           
INI_SetTag(File,"data");
           
INI_WriteString(File,"Contrasena",inputtext);
           
INI_WriteInt(File,"Dinero",8000);
           
INI_WriteInt(File,"Admin",0);
           
INI_WriteFloat(File,"Pos_X",1958.33);
           
INI_WriteFloat(File,"Pos_Y",1343.12);
           
INI_WriteFloat(File,"Pos_Z",15.36);
           
INI_Close(File);
           
PlayersData[playerid][Dinero]=8000;
           
PlayersData[playerid][Administrador]=0;
           
PlayersData[playerid][PosX]=1958.33;
           
PlayersData[playerid][PosY]=1343.12;
           
PlayersData[playerid][PosZ]=15.36;
           
SetPlayerSkin(playerid26);
           
SpawnPlayer(playerid);
      }
}
if(
dialogid== DLOGIN)
{
       if (!
response) return Kick(playerid);
       if(
response)
       {
           if(
strcmp(inputtextPlayersData[playerid][Contra], true) == 0)
           {
                  
INI_ParserFile(UserPath(playerid), "LoadAccount_%s", .bExtra true, .extra playerid);
                  
GivePlayerMoney(playeridPlayersData[playerid][Dinero]);
                  
SpawnPlayer(playerid);
            }
            else
            {
                  
ShowPlayerDialog(playeridDLOGINDIALOG_STYLE_INPUT"Erro en el ingreso""Hubo un error en el ingreso por favor ingrese su contraseсa para entrar""Entrar""Salir");
             }
             return 
1;
       }

Ahora abajo del GM procederemos a aсadir el stock para que guarde la cuenta

PHP код:
stock SaveAccount(playerid)
{
     new 
INI:File INI_Open(UserPath(playerid));
     
INI_SetTag(File,"data");
     
INI_WriteString(File"Contraseсa"PlayersData[playerid][Contra]);
     
INI_WriteInt(File,"Dinero"PlayersData[playerid][Dinero]);
     
INI_WriteInt(File,"Administrador"PlayersData[playerid][Administrador]);
     
GetPlayerPos(playeridPlayersData[playerid][PosX], PlayersData[playerid][PosY], PlayersData[playerid][PosZ]);
     
INI_WriteFloat(File,"Pos_X",PlayersData[playerid][PosX]);
     
INI_WriteFloat(File,"Pos_Y",PlayersData[playerid][PosY]);
     
INI_WriteFloat(File,"Pos_Z",PlayersData[playerid][PosZ]);
     
INI_Close(File);
     return 
1;

Ahora en el CALLBACK "OnPlayerDisconnect" pondremos el stock que guardarнa la cuenta de nuestro PJ

PHP код:
SaveAccount(playerid); 
Por lo momento eso serнa lo bбsico, mбs adelante pondrй como quitar las entradas que viene del GTA:SA predeterminado, la bonificaciуn, Text3DLabel e incluso como hacer mini-sistemas en el propio GM, cualquier duda u algo avisadmen

PD:Cualquier error que vean en el tutorial avisadme colegas
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)