[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
#2

Creo que esto ya es repetitivo, igualmente se agradece tu aporte!
Reply
#3

Quote:
Originally Posted by Goss
Посмотреть сообщение
Creo que esto ya es repetitivo, igualmente se agradece tu aporte!
Es repetido eso sн, pero no te preocupes que lo irй actualizando, igual muchas gracias!
Reply
#4

Buena guнa
Reply
#5

їDedicado a personas que comienzan a programar?
Desde mi perspectiva no tiene sentido, pues bien: es muy repetido йste tipo de temas, los cuales siempre te dejan con preguntas como "їpara quй sirve esto?". Innumerables veces se ha visto la publicaciуn y publicaciуn de lнneas que en ningъn momento te dan una clara explicaciуn.

No quito mйrito a lo que intentas hacer, incluso, me alegra que lo hagas. Esto que hago es una crнtica constructiva, tambiйn dedicada para usuarios que hacen lo mismo.

A quй quiero llegar, pues bien:
"Expliquen cada funciуn que ponen para que la entiendan mejor. Hagan algo nuevo, no pongan las mismas variables o definiciones que en cientos de "gamemodes". QUE TODO SEA UN VERDADERO TUTORIAL"
Reply
#6

Buena guнa, Kap.
Reply
#7

muy buena guнa, les servirб mucho a los que empiezan
Reply
#8

Quote:
Originally Posted by Kaponi
Посмотреть сообщение
Es repetido eso sн, pero no te preocupes que lo irй actualizando, igual muchas gracias!
hola amigo muy buen aporte xD oiye pero me sale este error yestoy confundido
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(195) : error 003: declaration of a local variable must appear in a compound block
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(195) : error 010: invalid function or declaration
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(200) : error 010: invalid function or declaration
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(202) : error 010: invalid function or declaration
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(202 -- 205) : error 010: invalid function or declaration
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(202 -- 210) : error 021: symbol already defined: "SetPlayerPos"
C:\Users\richard\Desktop\GM yo\gamemodes\CityCrazy.pwn(202 -- 210) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


7 Errors.
que debo hacer? para solucionarlo?
Reply
#9

Buena kap'
Reply
#10

PHP код:
#define PATH "/Cuentas/%.ini" 
en %, te falto poner la s.

PHP код:
#define PATH "/Cuentas/%s.ini" 
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)