Hola a todos. Hoy les traigo un Tutorial de Cómo crear Sistema de Ganzúas y Puente. El Tutorial no es mío, de modo que no me incluiré en los créditos. No obstante, creo que es bastante útil para los Servidores RP.
Primero vamos a "new PlayerInfo[MAX_PLAYERS][pInfo]"; y definimos "pGanzua". *Esto es para definir pGanzua y que no nos de errores de compilación (Undefined Symbol).
Ahora vamos a "public OnPlayerConnect(playerid)" y volvemos a definir "pGanzuas". *Este paso es para que se guarden las ganzuas.
Una vez hecho, vamos a public "OnPlayerRegister" y ponemos esto:
Más abajo, en OnPlayerUpdate volvemos a definirlo.
Ahora buscamos "public OnPlayerLogin" y añadimos esto:
**Todo lo que hemos hecho hasta ahora es para definir las ganzúas y para que se guarden en las cuentas de los usuarios.
Bueno, ahora pasamos al comando /Puente.
*Esto es abajo es para que si no tienes ganzúas no te deje hacer el puente:
Ahora crearemos el comando para que las ganzúas las compren los mecánicos. *Pueden cambiar la ID de la Facción si desean que solo otra facción pueda comprar las Ganzúas. Aunque lo más lógico es que las compren los mecánicos.
Tan solo queda la segunda parte del /Puente. Primero, vamos a los "forward" y añadimos lo siguiente:
Cuando ya lo tenemos, vamos a los "public" e insertamos lo siguiente:
- Aquí pongo un comando para que podáis ver las ganzúas que teneis -
Si queieres que al poner /cuenta os salgan las ganzuas que tienes lo hacemos de esta manera.
Vamos al "ShowStats" y ponemos lo siguiente.
Esto sirve para definir ganzuas como pGanzua ya que con pGanzua nos daria error
Ahora vamos a donde tenemos todos los datos del /cuenta y añadimos esto
format(coordsstring, sizeof(coordsstring), " Ganzuas [%d]", ganzuas);
SendClientMessage(playerid, COLOR_GRAD1,coordsstring);
Bueno, eso es todo. Me parece que está todo bastante bien explicado, aunque si tenéis alguna duda, preguntadlo y os la intentaré resolver.
CRÉDITOS:
Un Saludo y Suerte
Primero vamos a "new PlayerInfo[MAX_PLAYERS][pInfo]"; y definimos "pGanzua". *Esto es para definir pGanzua y que no nos de errores de compilación (Undefined Symbol).
- Spoiler:
- enum pInfo
{
pGanzua,
//demas cosas
};
new PlayerInfo[MAX_PLAYERS][pInfo];
Ahora vamos a "public OnPlayerConnect(playerid)" y volvemos a definir "pGanzuas". *Este paso es para que se guarden las ganzuas.
- Spoiler:
- public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][pGanzua] = 0;
//demas cosas
Una vez hecho, vamos a public "OnPlayerRegister" y ponemos esto:
- Código:
format(var, 64, "Ganzuas=%d ",PlayerInfo[playerid][pGanzua]);fwrite(hFile, var);
Más abajo, en OnPlayerUpdate volvemos a definirlo.
- Código:
format(var, 64, "Ganzuas=%d ",PlayerInfo[playerid][pGanzua]);fwrite(hFile, var);
Ahora buscamos "public OnPlayerLogin" y añadimos esto:
- Spoiler:
- if( strcmp( key , "Ganzuas" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pGanzua] = strval( val ); }
**Todo lo que hemos hecho hasta ahora es para definir las ganzúas y para que se guarden en las cuentas de los usuarios.
Bueno, ahora pasamos al comando /Puente.
- Spoiler:
- if (strcmp(cmd, "/Puente", true) == 0)
{
if(PlayerInfo[playerid][pGanzua] == 0)//Esto es para definir si no tienen ganzuas.
{
SendClientMessage(playerid, COLOR_GREY, " No tienes ganzuas para hacer un puente!");//Este es el mensaje que saldrá si no las tienen
return 1;
}
if(!engineOn[GetPlayerVehicleID(playerid)])
{
if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
{
return 1;
}
if(CarInfo[idcar][cOwned]==0)
{
SendClientMessage(playerid, COLOR_GRAD2, "No puedes robar vehiculos en venta!");
return 1;
}
if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509)
{
return 1;
}
if(idcar == 59 || idcar == 60)
{
return 1;
}
if(idcar >= 135 && idcar <= 154)
{
return 1;
}
if(IsAPlane(idcar))
{
return 1;
}
if(IsAHarvest(idcar))
{
return 1;
}
if(IsADrugHarvest(idcar))
{
return 1;
}
if(IsASweeper(idcar))
{
return 1;
}
if(IsAGarbage(idcar))
{
return 1;
}
if(gEngine[playerid] == 1)
{
return 1;
}
new playerveh = GetPlayerVehicleID(playerid);
PutPlayerInVehicle(playerid, playerveh, 0);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s toma una ganzua del bolsillo", sendername);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
SetTimerEx("robovehiculo",3500,0,"i",playerid);
GameTextforPlayer(playerid, "/w/Robando Vehiculo...",3500,3);
PlayerInfo[playerid][pGanzua] -= 1;
gEngine[playerid] = 1;
}
return 1;
}
*Esto es abajo es para que si no tienes ganzúas no te deje hacer el puente:
- Spoiler:
- if(PlayerInfo[playerid][pGanzua] == 0)//Esto es para definir si no tienen ganzuas.
{
SendClientMessage(playerid, COLOR_GREY, " No tienes ganzuas para hacer un puente!");//Este es el mensaje que saldrá si no las tienen
return 1;
}
Ahora crearemos el comando para que las ganzúas las compren los mecánicos. *Pueden cambiar la ID de la Facción si desean que solo otra facción pueda comprar las Ganzúas. Aunque lo más lógico es que las compren los mecánicos.
- Spoiler:
- if(strcmp(cmdtext, "/comprarganzuas", true) == 0)
{
if(PlayerInfo[playerid][pMember] == 10||PlayerInfo[playerid][pLeader] == 10)//faccion que puede usar el cmd
{
GivePlayerMoney(playerid, - 500);//dinero que te quita
PlayerInfo[playerid][pGanzua] += 10;//cantidad de ganzuas que compras
format(string, sizeof(string), "* %s Compra 10 Ganzuas", sendername);//Mensaje que te saldra
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "No eres Mecanico");//mensaje que saldra si no eres de la faccion
}
return 1;
}
Tan solo queda la segunda parte del /Puente. Primero, vamos a los "forward" y añadimos lo siguiente:
- Código:
forward robovehiculo(playerid)
Cuando ya lo tenemos, vamos a los "public" e insertamos lo siguiente:
- Spoiler:
- public robovehiculo(playerid)
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerInAnyVehicle(playerid))
{
new RandomStart;
new string[256];
new sendername[MAX_PLAYER_NAME];
RandomStart = random(4);
switch(RandomStart)
{
case 0,1,2:
{
engineOn[GetPlayerVehicleID(playerid)] = true;
TogglePlayerControllable(playerid, true);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s Usa su ganzua e intenta encender el vehiculo y lo logra.", sendername);
ProxDetector(30.0, playerid, string, COLOR_GREEN,COLOR_GREEN,COLOR_GREEN,COLOR_GREEN,COLOR_GREEN);
format(string, sizeof(string), "* %s Enciende el motor del vehiculo.", sendername);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
format(string, sizeof(string), "* %s Guarda su ganzua en el bolsillo.", sendername);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
gEngine[playerid] = 0;
}
case 3:
{
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s Usa su ganzua e intenta encender el vehiculo y Falla.", sendername);
ProxDetector(30.0, playerid, string, COLOR_RED,COLOR_RED,COLOR_RED,COLOR_RED,COLOR_RED);
format(string, sizeof(string), "* %s Ha echo mucha fuerza y se ah roto la ganzua.", sendername);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
gEngine[playerid] = 0;
Alambre[playerid] = 0;
}
}
}
else
{
gEngine[playerid] = 0;
}
}
return 1;
}
- Aquí pongo un comando para que podáis ver las ganzúas que teneis -
- Spoiler:
- if(strcmp(cmd, "/verganzuas", true) == 0)
{
if(IsPlayerConnected(playerid))
{
format(string, sizeof(string), " Usted tiene $%d ganzuas en su poder.",PlayerInfo[playerid][pGanzua]);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
return 1;
}
Si queieres que al poner /cuenta os salgan las ganzuas que tienes lo hacemos de esta manera.
Vamos al "ShowStats" y ponemos lo siguiente.
- Spoiler:
- new ganzuas = PlayerInfo[targetid][pGanzua];
Esto sirve para definir ganzuas como pGanzua ya que con pGanzua nos daria error
Ahora vamos a donde tenemos todos los datos del /cuenta y añadimos esto
format(coordsstring, sizeof(coordsstring), " Ganzuas [%d]", ganzuas);
SendClientMessage(playerid, COLOR_GRAD1,coordsstring);
Bueno, eso es todo. Me parece que está todo bastante bien explicado, aunque si tenéis alguna duda, preguntadlo y os la intentaré resolver.
CRÉDITOS:
- Spoiler:
- Tutorial creado por: The-Crazzy-Boy.
Puesto en Espanol-Pawno por: Shiro_Hatuki
Un Saludo y Suerte