[Guia] Como crear una facción?

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
JoseJoaquinZc
Avanzado
Avanzado
Mensajes: 1286
Registrado: 07 Jul 2014 10:32
Reputación: 40

22 Nov 2014 12:22

Ok traigo este aporte ya que mucha gente me lo a pedido y quiero decir (escribir :P) antes de empezar que este aporte no está dedicado para ninguna base como ZenonCity o Ciudad Prohibida sino que para GM's de 0 (claro que la puede utilizar para Bases pero tendrían que relacionarla con al gm)

Ok primero ¿qué es una facción?
Una facción es sin más un manejo de variables para manipularlas según la facción.

Vale comenzamos creando una variable (Tu debes de tener tu enum por así decirle)
 Codigo Pawno:
1
2
3
4
5
6
7

enum NombreDeTuEnum
{
//... resto de código
pFaccion,
pRango
};
new PlayerInfo[MAX_PLAYERS][NombreDeTuEnum];
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Crearemos otra variable para saber el id de los autos de la facción.
 Codigo Pawno:
1

new AutosFac[1]; // el [1] es el número de autos de la facción (recuerda que el 0 se cuenta y se debe de dejar un número más)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora aremos unas funciones para facilitar nuestro uso en la gm como por ejemplo identificar de que facción es y saber si el auto en que está subiendo es de la facción y para enviar mensajes a la facción.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Faccion1(playerid) //recuerda que puedes llamarla como tu desees.
{
if(PlayerInfo[playerid][pFaccion] == 1) // el id de la facción
{
return 1;
}
return 0;
}

VehiculoFaccion1(a)
{
for(new i = 0; i < sizeof(AutosFac); i++)
{
if(a == AutosFac[i]) {return 1;}
}
return 0;
}

stock EnviarMensajeFacc(idfac, color, texto[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pFaccion] == idfac)
{
SendClientMessage(i, color, texto);
}
}
}
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 31
Vale ahora podemos crear los autos con MTA y transferirlos a pawn (puedes buscar en google como hacerlo) y ubicar los en OnGameModeInit()
ejemplo:
 Codigo Pawno:
1
2
3
4
5
6

public OnGameModeInit()
{
//Autos de la facción #1
AutosFac[0] = AddStaticVehicleEx(451, 0.0, 0.0, 0.3, 0.0, 1, 0, 10000000000); // recuerda ponerle 10000000000 para que no se respawneé cada x minuto (puesto en ese parámetro) cada vez que se movido de su lugar
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Ahora lo que faltaría es crear los comandos para hacer miembro a una faccion (LOS ADMINISTRATIVOS)
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

zcmd(hacerlider, playerid, params[])
{
new id, faccion, nombrefac[40];
if(sscanf(params, "dd", id, faccion)) return SendClientMessage(playerid, -1, "/hacerlider [id][facción-id]");
if(PlayerInfo[playerid][TuVariableDeAdmin] != rango mayor)) return SendClientMessage(playerid, -1, "No eres Admin Dueño");
if(IsPlayerConnected(id))
{
new string[120];
switch(faccion)
{
case 0: nombrefac = "Ninguna";
case 1: nombrefac = "Faccion1 "; //Aqui haces para que en vez de números sean los nombre de la facción ejemplo en este caso es 1 y la faccion se llama Faccion1
}
format(string, 120, -1, "%s te dio la facción %s", TUFUNCIONDENOMBRE(playerid), nombrefac);
SendClientMessage(id, -1, string);
PlayerInfo[id][pFaccion] = faccion;
PlayerInfo[id][pRango] = 6; // líder
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 21
PD: tu puedes hacerlo mejor el comando.

Ahora los comandos para los líderes de la facción como por ejemplo subir el rango y expulsar de la facción.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

zcmd(subirrango, playerid, params[])
{
new id, rango;
if(PlayerInfo[playerid][pRango] == 6 && PlayerInfo[playerid][pFaccion] >= 1))
{
if(sscanf(params. "dd", id, rango)) return SendClientMessage(playerid, -1, "/subirrango [id][rango]");
if(IsPlayerConnected(id))
{
// Ahora por cuestión de seguridad hacemos estás 2 validaciones
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a tu faccion
{
if(PlayerInfo[id][pRango] != 6) // le decimos que cumple la condición siempre y cuando no sea el líder el jugador especificado
{
if(rango >= 1 && rango <= 6) // le decimos que cumpla siempre y cuando si el rango es mayor o igual a 1 o si es menor o igual a 6
{
new string[120];
format(string, 120, "El Líder de la facción %s te dio el rango %d", TUFUNCIONDENOMBRE(playerid), rango);
SendClientMessage(playerid, -1, string);
format(string, 120, "Le diste rango %d al miembro de tu facción %s", rango, TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pRango] = rango; // y le damos el rango indicado
}
else SendClientMessage(playerid, -1, "Solo se permiten rangos del 1 al 6");
}
else SendClientMessage(playerid, -1, "Ese Jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no pertenece a tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 33
Ahora hacemos el comando de despedir que sin más solo será poner los valores de pRango y pFaccion en 0 y hacemos un par de validaciones
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

zcmd(expulsarfaccion, playerid, params[])
{
new id;
if(PlayerInfo[playerid][pFaccion] >= 1 && PlayerInfo[playerid][pRango] == 6)
{
if(sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "/expulsarfaccion [id]");
if(IsPlayerConnected(id)) // decimos que si está conectado
{
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a la tuya
{
if(PlayerInfo[id][pRango] != 6) // le decimos que si el jugador no es líder haga lo que está entre "{" "}"
{
new string[120];
format(string, 120, "El Líder de la facción %s te expulso de la facción", TUFUNCIONDENOMBRE(playerid));
SendClientMessage(playerid, -1, string);
format(string, 120, "Sacas de la facción al miembro %s", TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pFaccion] = 0;
PlayerInfo[id][pRango] = 0;
}
else SendClientMessage(playerid, -1, "Ese jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no es miembro de tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado.");
}
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 28
Ahora creo lo que faltaría fuera el de contratar
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

zcmd(contratar, playerid, params[])
{
new id;
if(PlayerInfo[playerid][pFaccion] >= 1 && PlayerInfo[playerid][pRango] == 6)
{
if(sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "/contratar [id]");
if(IsPlayerConnected(id))
{
if(PlayerInfo[id][pFaccion] == 0) //decimos que si el jugador no tiene facción haga lo que esta entre "{" "}"
{
//Lo vamos a hacer con Dialogs
ShowPlayerDialog(id, 600, DIALOG_STYLE_MSGBOX, "Contrato", "Lo que vosotros queréis ponerle\nSalto de línea", "Aceptar", "Rechazar");
//Ahora damos variables al jugador para que sepa que facción trata de contartarlo
SetPVarInt(id, "FaccionC", PlayerInfo[playerid][pFaccion]); //esto es como crear una variable si no que aquí especifico a que jugador quiero ponérselo
SetPVarInt(id, "IdF", playerid); // Aqui almaceno la id mia para el otro jugador
}
else SendClientMessage(playerid, -1, "Ese jugador ya tiene facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado.");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}

//Ahora nos vamos a nuestro OnDialogResponse y ubicamos esto:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext)
{
//..resto de código
switch(dialogid)
{
case 600:
{
if(response)
{
SendClientMessage(playerid, -1, "Aceptaste el contrato");
SendClientMessage(GetPVarInt(playerid, "IdF"), -1, "Acepto el contrato");
PlayerInfo[playerid][pFaccion] = GetPVarInt(playerid, "FaccionC"); // Aqui cojo el valor de la variable FaccionC y la pongo como facción del jugador
PlayerInfo[playerid][pRango] = 1; // y le doy el rango inicial
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 43
ahora como toda las facciones tiene un /f pues también lo aremos.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

zcmd(f, playerid, params[])
{
if(PlayerInfo[playerid][pFaccion] >= 1) // le decimos que si tiene una facción mayor o igual a 1
{
new texto[120];
if(sscanf(params, "s", texto)) return SendClientMessage(playerid, -1, "/f [texto OOC de la facción]");
if(Faccion1(playerid)) // decimos que si pertenece a la facción 1 (nuestra función)
{
new rangoname[40];
switch(PlayerInfo[playerid][pRango]) //hacemos un interruptor del rango que tenemos
{
case 1: rangoname = "Nada1"; // si es 1 el rango se llamará Nada1
case 2: rangoname = "Nada2";
case 3: rangoname = "Nada3";
case 4: rangoname = "Nada4";
case 5: rangoname = "Nada5";
case 6: rangoname = "Líder";
}
new string[200];
format(string, 200, "%s %s: %s", rangoname, TUFUNCIONDENOMBRE(playerid), texto);
EnviarMensajeFacc(PlayerInfo[playerid][pFaccion], -1, string);
}
}
else SendClientMessage(playerid, -1, "No eres miembro de ninguna facción");
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 26
Ok creo que con eso ya estría solo que falta hacer que solo los miembros de la facción se suban al auto.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public OnPlayerStateChange(playerid, newstate, oldstate) // usamos esta callback porque está es la que retorna los estado
{
    if(newstate == PLAYER_STATE_DRIVER) // aqui decimos que si está de conductor
    {
            new idv = GetPlayerVehicleID(playerid); // aquí cogemos el id del auto en el que está subido el jugador
        if(VehiculoFaccion1(idv)) //decimos que si está en unos de los autos de la facción 1
        {
            if(!Faccion1(playerid)) // si no es miembro haga esto
            {
                RemovePlayerFromVehicle(playerid); // lo saca del vehiculo
                SendClientMessage(playerid, -1, "No tienes las llaves de este auto");
            }
                    else {return 1;}
        }
    }
    return 1;
}
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 17
Y eso sería todo espero que les aya gustado alguna duda o error díganmelo por un comentario.
Captus123
Aprendiz
Aprendiz
Mensajes: 697
Registrado: 28 Sep 2014 09:19
Reputación: 4

22 Nov 2014 13:41

Una pregunta que es eso de la funcion de nombre?
Próximamente un nuevo DM

N4HU3L
Aprendiz
Aprendiz
Mensajes: 186
Registrado: 27 Sep 2014 07:39
Reputación: 4

22 Nov 2014 20:21

Estaba Buscando esto! ;D Gracias -thumbup -good

+Rep -dance4

Cada día se aprende algo nuevo.

JoseJoaquinZc
Avanzado
Avanzado
Mensajes: 1286
Registrado: 07 Jul 2014 10:32
Reputación: 40

22 Nov 2014 22:57

Captus123 escribió:Una pregunta que es eso de la funcion de nombre?
ejemplo:
 Codigo Pawno:
1
2
3
4
5
6

stock TUFUNCIONDENOMBRE(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Captus123
Aprendiz
Aprendiz
Mensajes: 697
Registrado: 28 Sep 2014 09:19
Reputación: 4

23 Nov 2014 04:11

Gracias ahora si entendí jaja
Próximamente un nuevo DM

Captus123
Aprendiz
Aprendiz
Mensajes: 697
Registrado: 28 Sep 2014 09:19
Reputación: 4

23 Nov 2014 23:00

Man me salen 2 errores:
 Codigo Pawno:
1
2

C:\Users\MARTIN\Desktop\Samp-Server\gamemodes\GM0.pwn(2582) : error 029: invalid expression, assumed zero
C:\Users\MARTIN\Desktop\Samp-Server\gamemodes\GM0.pwn(2609) : error 029: invalid expression, assumed zero
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
En las lineas:
 Codigo Pawno:
1
2

if(Info[playerid][pRango] == 6 && Info[playerid][pFaccion] >= 1))
else SendClientMessage(playerid, -1, "No eres líder de una facción");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Del comando:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

zcmd(subirrango, playerid, params[])
{
new id, rango;
if(PlayerInfo[playerid][pRango] == 6 && PlayerInfo[playerid][pFaccion] >= 1))
{
if(sscanf(params. "dd", id, rango)) return SendClientMessage(playerid, -1, "/subirrango [id][rango]");
if(IsPlayerConnected(id))
{
// Ahora por cuestión de seguridad hacemos estás 2 validaciones
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a tu faccion
{
if(PlayerInfo[id][pRango] != 6) // le decimos que cumple la condición siempre y cuando no sea el líder el jugador especificado
{
if(rango >= 1 && rango <= 6) // le decimos que cumpla siempre y cuando si el rango es mayor o igual a 1 o si es menor o igual a 6
{
new string[120];
format(string, 120, "El Líder de la facción %s te dio el rango %d", TUFUNCIONDENOMBRE(playerid), rango);
SendClientMessage(playerid, -1, string);
format(string, 120, "Le diste rango %d al miembro de tu facción %s", rango, TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pRango] = rango; // y le damos el rango indicado
}
else SendClientMessage(playerid, -1, "Solo se permiten rangos del 1 al 6");
}
else SendClientMessage(playerid, -1, "Ese Jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no pertenece a tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 33
Ayudame por fa
Próximamente un nuevo DM

JoseJoaquinZc
Avanzado
Avanzado
Mensajes: 1286
Registrado: 07 Jul 2014 10:32
Reputación: 40

23 Nov 2014 23:35

Captus123 escribió:Man me salen 2 errores:
 Codigo Pawno:
1
2

C:\Users\MARTIN\Desktop\Samp-Server\gamemodes\GM0.pwn(2582) : error 029: invalid expression, assumed zero
C:\Users\MARTIN\Desktop\Samp-Server\gamemodes\GM0.pwn(2609) : error 029: invalid expression, assumed zero
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
En las lineas:
 Codigo Pawno:
1
2

if(Info[playerid][pRango] == 6 && Info[playerid][pFaccion] >= 1))
else SendClientMessage(playerid, -1, "No eres líder de una facción");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Del comando:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

zcmd(subirrango, playerid, params[])
{
new id, rango;
if(PlayerInfo[playerid][pRango] == 6 && PlayerInfo[playerid][pFaccion] >= 1))
{
if(sscanf(params. "dd", id, rango)) return SendClientMessage(playerid, -1, "/subirrango [id][rango]");
if(IsPlayerConnected(id))
{
// Ahora por cuestión de seguridad hacemos estás 2 validaciones
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a tu faccion
{
if(PlayerInfo[id][pRango] != 6) // le decimos que cumple la condición siempre y cuando no sea el líder el jugador especificado
{
if(rango >= 1 && rango <= 6) // le decimos que cumpla siempre y cuando si el rango es mayor o igual a 1 o si es menor o igual a 6
{
new string[120];
format(string, 120, "El Líder de la facción %s te dio el rango %d", TUFUNCIONDENOMBRE(playerid), rango);
SendClientMessage(playerid, -1, string);
format(string, 120, "Le diste rango %d al miembro de tu facción %s", rango, TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pRango] = rango; // y le damos el rango indicado
}
else SendClientMessage(playerid, -1, "Solo se permiten rangos del 1 al 6");
}
else SendClientMessage(playerid, -1, "Ese Jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no pertenece a tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 33
Ayudame por fa
esto:
 Codigo Pawno:
1

if(Info[playerid][pRango] == 6 && Info[playerid][pFaccion] >= 1))
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
remplaza lo por esto:
 Codigo Pawno:
1

if(Info[playerid][pRango] == 6 && Info[playerid][pFaccion] >= 1)//)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Captus123
Aprendiz
Aprendiz
Mensajes: 697
Registrado: 28 Sep 2014 09:19
Reputación: 4

23 Nov 2014 23:47

Gracias ya se me soluciono
Próximamente un nuevo DM

Adrian_Valera
Aprendiz
Aprendiz
Mensajes: 25
Registrado: 08 Jun 2014 23:52
Ubicación: Colombia, Barranquilla.
Reputación: 0

23 Dic 2014 04:33

Errores que me manda:

[ Imagen Externa ]

[ Imagen Externa ]

Línea:
 Codigo Pawno:
1

AutosSAPD(a)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
De:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

SAPD(playerid) //recuerda que puedes llamarla como tu desees.
{
if(DatosPJ[playerid][pFaccion] == 1) // el id de la facción
{
return 1;
}
return 0;
}
AutosSAPD(a)
{
for(new i = 0; i < sizeof(AutosFac); i++)
{
if(a == AutosFac[i]) {return 1;}
}
return 0;
}

stock EnviarMensajeFacc(idfac, color, texto[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(DatosPJ[i][pFaccion] == idfac)
{
SendClientMessage(i, color, texto);
}
}
}
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 30
Spoiler:
Scripter 5%
Spoiler:
Mapper 80%
Spoiler:
WebMaster 3%

APRENDIENDO PARA TRATAR SER UNO DE LOS MEJORES SCRIPTER's MAPPERS DE SA:MP.
Luke_Wayne
Aprendiz
Aprendiz
Mensajes: 48
Registrado: 09 Dic 2014 10:45
Reputación: 0

30 Dic 2014 21:11

JoseJoaquinZc escribió:Ok traigo este aporte ya que mucha gente me lo a pedido y quiero decir (escribir :P) antes de empezar que este aporte no está dedicado para ninguna base como ZenonCity o Ciudad Prohibida sino que para GM's de 0 (claro que la puede utilizar para Bases pero tendrían que relacionarla con al gm)

Ok primero ¿qué es una facción?
Una facción es sin más un manejo de variables para manipularlas según la facción.

Vale comenzamos creando una variable (Tu debes de tener tu enum por así decirle)
 Codigo Pawno:
1
2
3
4
5
6
7

enum NombreDeTuEnum
{
//... resto de código
pFaccion,
pRango
};
new PlayerInfo[MAX_PLAYERS][NombreDeTuEnum];
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Crearemos otra variable para saber el id de los autos de la facción.
 Codigo Pawno:
1

new AutosFac[1]; // el [1] es el número de autos de la facción (recuerda que el 0 se cuenta y se debe de dejar un número más)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora aremos unas funciones para facilitar nuestro uso en la gm como por ejemplo identificar de que facción es y saber si el auto en que está subiendo es de la facción y para enviar mensajes a la facción.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Faccion1(playerid) //recuerda que puedes llamarla como tu desees.
{
if(PlayerInfo[playerid][pFaccion] == 1) // el id de la facción
{
return 1;
}
return 0;
}

VehiculoFaccion1(a)
{
for(new i = 0; i < sizeof(AutosFac); i++)
{
if(a == AutosFac[i]) {return 1;}
}
return 0;
}

stock EnviarMensajeFacc(idfac, color, texto[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pFaccion] == idfac)
{
SendClientMessage(i, color, texto);
}
}
}
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 31
Vale ahora podemos crear los autos con MTA y transferirlos a pawn (puedes buscar en google como hacerlo) y ubicar los en OnGameModeInit()
ejemplo:
 Codigo Pawno:
1
2
3
4
5
6

public OnGameModeInit()
{
//Autos de la facción #1
AutosFac[0] = AddStaticVehicleEx(451, 0.0, 0.0, 0.3, 0.0, 1, 0, 10000000000); // recuerda ponerle 10000000000 para que no se respawneé cada x minuto (puesto en ese parámetro) cada vez que se movido de su lugar
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Ahora lo que faltaría es crear los comandos para hacer miembro a una faccion (LOS ADMINISTRATIVOS)
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

zcmd(hacerlider, playerid, params[])
{
new id, faccion, nombrefac[40];
if(sscanf(params, "dd", id, faccion)) return SendClientMessage(playerid, -1, "/hacerlider [id][facción-id]");
if(PlayerInfo[playerid][TuVariableDeAdmin] != rango mayor)) return SendClientMessage(playerid, -1, "No eres Admin Dueño");
if(IsPlayerConnected(id))
{
new string[120];
switch(faccion)
{
case 0: nombrefac = "Ninguna";
case 1: nombrefac = "Faccion1 "; //Aqui haces para que en vez de números sean los nombre de la facción ejemplo en este caso es 1 y la faccion se llama Faccion1
}
format(string, 120, -1, "%s te dio la facción %s", TUFUNCIONDENOMBRE(playerid), nombrefac);
SendClientMessage(id, -1, string);
PlayerInfo[id][pFaccion] = faccion;
PlayerInfo[id][pRango] = 6; // líder
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 21
PD: tu puedes hacerlo mejor el comando.

Ahora los comandos para los líderes de la facción como por ejemplo subir el rango y expulsar de la facción.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

zcmd(subirrango, playerid, params[])
{
new id, rango;
if(PlayerInfo[playerid][pRango] == 6 && PlayerInfo[playerid][pFaccion] >= 1))
{
if(sscanf(params. "dd", id, rango)) return SendClientMessage(playerid, -1, "/subirrango [id][rango]");
if(IsPlayerConnected(id))
{
// Ahora por cuestión de seguridad hacemos estás 2 validaciones
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a tu faccion
{
if(PlayerInfo[id][pRango] != 6) // le decimos que cumple la condición siempre y cuando no sea el líder el jugador especificado
{
if(rango >= 1 && rango <= 6) // le decimos que cumpla siempre y cuando si el rango es mayor o igual a 1 o si es menor o igual a 6
{
new string[120];
format(string, 120, "El Líder de la facción %s te dio el rango %d", TUFUNCIONDENOMBRE(playerid), rango);
SendClientMessage(playerid, -1, string);
format(string, 120, "Le diste rango %d al miembro de tu facción %s", rango, TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pRango] = rango; // y le damos el rango indicado
}
else SendClientMessage(playerid, -1, "Solo se permiten rangos del 1 al 6");
}
else SendClientMessage(playerid, -1, "Ese Jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no pertenece a tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 33
Ahora hacemos el comando de despedir que sin más solo será poner los valores de pRango y pFaccion en 0 y hacemos un par de validaciones
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

zcmd(expulsarfaccion, playerid, params[])
{
new id;
if(PlayerInfo[playerid][pFaccion] >= 1 && PlayerInfo[playerid][pRango] == 6)
{
if(sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "/expulsarfaccion [id]");
if(IsPlayerConnected(id)) // decimos que si está conectado
{
if(PlayerInfo[id][pFaccion] == PlayerInfo[playerid][pFaccion]) // le decimos que si la faccion del jugador es igual a la tuya
{
if(PlayerInfo[id][pRango] != 6) // le decimos que si el jugador no es líder haga lo que está entre "{" "}"
{
new string[120];
format(string, 120, "El Líder de la facción %s te expulso de la facción", TUFUNCIONDENOMBRE(playerid));
SendClientMessage(playerid, -1, string);
format(string, 120, "Sacas de la facción al miembro %s", TUFUNCIONDENOMBRE(id));
SendClientMessage(playerid, -1, string);
PlayerInfo[id][pFaccion] = 0;
PlayerInfo[id][pRango] = 0;
}
else SendClientMessage(playerid, -1, "Ese jugador es líder de la facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no es miembro de tu facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado.");
}
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 28
Ahora creo lo que faltaría fuera el de contratar
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

zcmd(contratar, playerid, params[])
{
new id;
if(PlayerInfo[playerid][pFaccion] >= 1 && PlayerInfo[playerid][pRango] == 6)
{
if(sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "/contratar [id]");
if(IsPlayerConnected(id))
{
if(PlayerInfo[id][pFaccion] == 0) //decimos que si el jugador no tiene facción haga lo que esta entre "{" "}"
{
//Lo vamos a hacer con Dialogs
ShowPlayerDialog(id, 600, DIALOG_STYLE_MSGBOX, "Contrato", "Lo que vosotros queréis ponerle\nSalto de línea", "Aceptar", "Rechazar");
//Ahora damos variables al jugador para que sepa que facción trata de contartarlo
SetPVarInt(id, "FaccionC", PlayerInfo[playerid][pFaccion]); //esto es como crear una variable si no que aquí especifico a que jugador quiero ponérselo
SetPVarInt(id, "IdF", playerid); // Aqui almaceno la id mia para el otro jugador
}
else SendClientMessage(playerid, -1, "Ese jugador ya tiene facción");
}
else SendClientMessage(playerid, -1, "Ese jugador no está conectado.");
}
else SendClientMessage(playerid, -1, "No eres líder de una facción");
return 1;
}

//Ahora nos vamos a nuestro OnDialogResponse y ubicamos esto:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext)
{
//..resto de código
switch(dialogid)
{
case 600:
{
if(response)
{
SendClientMessage(playerid, -1, "Aceptaste el contrato");
SendClientMessage(GetPVarInt(playerid, "IdF"), -1, "Acepto el contrato");
PlayerInfo[playerid][pFaccion] = GetPVarInt(playerid, "FaccionC"); // Aqui cojo el valor de la variable FaccionC y la pongo como facción del jugador
PlayerInfo[playerid][pRango] = 1; // y le doy el rango inicial
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 43
ahora como toda las facciones tiene un /f pues también lo aremos.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

zcmd(f, playerid, params[])
{
if(PlayerInfo[playerid][pFaccion] >= 1) // le decimos que si tiene una facción mayor o igual a 1
{
new texto[120];
if(sscanf(params, "s", texto)) return SendClientMessage(playerid, -1, "/f [texto OOC de la facción]");
if(Faccion1(playerid)) // decimos que si pertenece a la facción 1 (nuestra función)
{
new rangoname[40];
switch(PlayerInfo[playerid][pRango]) //hacemos un interruptor del rango que tenemos
{
case 1: rangoname = "Nada1"; // si es 1 el rango se llamará Nada1
case 2: rangoname = "Nada2";
case 3: rangoname = "Nada3";
case 4: rangoname = "Nada4";
case 5: rangoname = "Nada5";
case 6: rangoname = "Líder";
}
new string[200];
format(string, 200, "%s %s: %s", rangoname, TUFUNCIONDENOMBRE(playerid), texto);
EnviarMensajeFacc(PlayerInfo[playerid][pFaccion], -1, string);
}
}
else SendClientMessage(playerid, -1, "No eres miembro de ninguna facción");
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 26
Ok creo que con eso ya estría solo que falta hacer que solo los miembros de la facción se suban al auto.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public OnPlayerStateChange(playerid, newstate, oldstate) // usamos esta callback porque está es la que retorna los estado
{
    if(newstate == PLAYER_STATE_DRIVER) // aqui decimos que si está de conductor
    {
            new idv = GetPlayerVehicleID(playerid); // aquí cogemos el id del auto en el que está subido el jugador
        if(VehiculoFaccion1(idv)) //decimos que si está en unos de los autos de la facción 1
        {
            if(!Faccion1(playerid)) // si no es miembro haga esto
            {
                RemovePlayerFromVehicle(playerid); // lo saca del vehiculo
                SendClientMessage(playerid, -1, "No tienes las llaves de este auto");
            }
                    else {return 1;}
        }
    }
    return 1;
}
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 17
Y eso sería todo espero que les aya gustado alguna duda o error díganmelo por un comentario.

Me aparece esto
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(4851) : warning 204: symbol is assigned a value that is never used: "string"
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(35359) : warning 204: symbol is assigned a value that is never used: "string"
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(55013) : error 029: invalid expression, assumed zero
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(55013) : error 017: undefined symbol "cmd_hacerlider"
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(55013) : error 029: invalid expression, assumed zero
C:\Users\gpsistemas\Downloads\All-Stars RolePlay\All-Stars\gamemodes\All-Stars.pwn(55013) : fatal error 107: too many error messages on one line
Miguelcarp
Aprendiz
Aprendiz
Mensajes: 412
Registrado: 20 Jul 2014 13:16
Reputación: 5

09 Ene 2015 12:15

me da error en la parte de el comando de /makeleader este es

Linea 366 ademas te doy las lineas de atras
 Codigo Pawno:
1
2
3
4

new id, faccion, nombrefac[40];
if(sscanf(params, "dd", id, faccion)) return SendClientMessage(playerid, -1, "Uso, /hacerlider [ID/Jugador] [ID/Facción]");
if(Info[playerid][jAdmin] ! = 6)) return SendClientMessage(playerid, -1, "No tienes permisos para usar ese comando.");
if(IsPlayerConnected(id))
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4


error:

C:\Users\Alumno\FREEROAM\gamemodes\sanandreas.pwn(366) : error 001: expected token: ")", but found "!"
C:\Users\Alumno\FREEROAM\gamemodes\sanandreas.pwn(366) : error 029: invalid expression, assumed zero
C:\Users\Alumno\FREEROAM\gamemodes\sanandreas.pwn(366) : warning 215: expression has no effect
C:\Users\Alumno\FREEROAM\gamemodes\sanandreas.pwn(366) : error 001: expected token: ";", but found ")"
C:\Users\Alumno\FREEROAM\gamemodes\sanandreas.pwn(366) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
Yo no soy lo que la gente dice que soy, yo soy lo que Dios dice que soy.
JeyzenAshford
Aprendiz
Aprendiz
Mensajes: 8
Registrado: 09 Ene 2015 14:59
Reputación: 0

12 Feb 2015 08:24

Con esta guía me pude "Guiar" para hacer una facción, pero como creo la HQ?.
[ Imagen Externa ]
[pawn] Copyright in signature © JeyzenAshford™ All right reserved - 2015[/pawn]

Pony Negro
Baneado
Baneado
Mensajes: 439
Registrado: 19 Dic 2014 16:55
Ubicación: Cargando...
Contactar:
Reputación: 30

09 Mar 2015 20:27

Me da este error

Código: Seleccionar todo

C:\Users\usuario\Desktop\Union Latina Desde 0 By Edinson Walker\gamemodes\UL-RP.pwn(2280) : error 035: argument type mismatch (argument 3)"
En la linea

Código: Seleccionar todo

format(string, 120, -1, "%s te dio la facción %s", PlayerName(playerid), nombrefac);
que hago :s
La nueva generacion comienza.
(Aires de navidad - Hector Lavoe*-*)

Generación Gamer roleplay


Responder