Sistema de puertas dinamicas

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
Avatar de Usuario
flopjack
Junior
Junior
Mensajes: 288
Registrado: 08 May 2016 20:24
Ubicación: Mexico Guanajuato
Reputación: 18

22 Mar 2018 01:33

Les compartire un sistema que se me hace muy bueno, se que existe y lo han hecho antes pero es mi primera guia y pues el sistema lo hice de 0 especial para ustedes,este sistema lo tengo adaptado para MYSQL pero como la mayoria de nuevos en esto, no saben usar MYSQL solo los confundiria mas -nosweat asi que mejor lo subire sin sistema de guardado

COMENZEMOS


Utilizaremos los siguientes includes

#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <streamer>


Definimos el maximo de puertas que emplearemos estos casi siempre se agrega hasta arriba
 Codigo Pawno:
1

#define MAX_PUERTAS  100
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Seguidamente agregamos lo que se conoce como variables para los textos y almacenar las ids
 Codigo Pawno:
1
2
3
4
5

new Puuertas;
new Text3D:PuertaTexto[MAX_PUERTAS];
new Text3D:PuertaTexto1[MAX_PUERTAS];
new PickUpPueta[MAX_PUERTAS];
new PickUpPueta1[MAX_PUERTAS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 5
Aqui algunas de las variables que utilizaremos para la creacion
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

enum PuertasLocas
{
 PuertaID,
 PuertaNombre[100],
 Float:PuertaX,
 Float:PuertaY,
 Float:PuertaZ,
 PuertaNombre2[100],
 Float:PuertaXa,
 Float:PuertaYa,
 Float:PuertaZa,
 PuertaCreada,
 PuertaVirtualW,
 PuertaInterior,
 PuertaConInterior
}
new Puerta[MAX_PUERTAS][PuertasLocas];
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 17
Aqui comenzamos a agregar los comandos
 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

CMD:crearpuerta(playerid,params[])
{
 if(cuenta[playerid][admin] > 6)//Su Variable de admin
 {
  new Name[100],Float:F[4];
  if(sscanf(params,"s[100]",Name))return SendClientMessage(playerid, -1,"{454e4f}Uso: /crearpuerta [Nombre]");
  GetPlayerPos(playerid,F[0],F[1],F[2]);
  Puuertas++;
  Puerta[Puuertas][PuertaID] = Puuertas;
  Puerta[Puuertas][PuertaX] = F[0];
  Puerta[Puuertas][PuertaY] = F[1];
  Puerta[Puuertas][PuertaZ] = F[2];
  Puerta[Puuertas][PuertaXa] = 0;
  Puerta[Puuertas][PuertaYa] = 0;
  Puerta[Puuertas][PuertaZa] = 0;
  Puerta[Puuertas][PuertaNombre] = Name;
  Puerta[Puuertas][PuertaVirtualW] = GetPlayerVirtualWorld(playerid);
  Puerta[Puuertas][PuertaInterior] = GetPlayerInterior(playerid);
  Puerta[Puuertas][PuertaCreada] = 1;
  Puerta[Puuertas][PuertaConInterior] = 0;
  new result[120];
  format(result,sizeof(result), "Pulsa la tecla Y para ingresar a {da2442}%s{ffffff}.",Name);
  PuertaTexto[Puuertas] = CreateDynamic3DTextLabel( result, -1, F[0], F[1], F[2], 10.0);
  PickUpPueta[Puuertas] = CreateDynamicPickup(1318, 1, F[0], F[1], F[2], 0, 0);
 }else return 0;
 return 1;
}

CMD:editarpuerta(playerid,params[])
{
 if(cuenta[playerid][admin] > 6)//Su variable de admin
 {
  new opcion[60],ID;
  if(sscanf(params,"s[60]d",opcion,ID))return SendClientMessage(playerid, -1,"{454e4f}Uso: /editarpuerta [interior/mover/borrar]");
  if(Puerta[Puuertas][PuertaCreada] == 1)
  {
   if(strcmp(opcion,"interior",true) == 0)
   {
    Puerta[ID][PuertaConInterior] = 1;
    new Float:F[3],result[120];
    GetPlayerPos(playerid,F[0],F[1],F[2]);
    Puerta[ID][PuertaXa] = F[0];
    Puerta[ID][PuertaYa] = F[1];
    Puerta[ID][PuertaZa] = F[2];
    format(result,sizeof(result), "Pulsa la tecla Y para salir a {da2442}%s{ffffff}.",Puerta[ID][PuertaNombre]);
    PuertaTexto1[ID] = CreateDynamic3DTextLabel( result, -1, Puerta[ID][PuertaXa], Puerta[ID][PuertaYa], Puerta[ID][PuertaZa], 10.0);
    PickUpPueta1[ID] = CreateDynamicPickup(1318, 1, Puerta[ID][PuertaXa], Puerta[ID][PuertaYa], Puerta[ID][PuertaZa], 0, 0);
    SendClientMessage(playerid, -1,"{dad824}[PUERTA] Se a agregado correctamente el interior.");
   }
   if(strcmp(opcion,"mover",true) == 0)
   {
    DestroyDynamicPickup(PickUpPueta[ID]);
    DestroyDynamic3DTextLabel(PuertaTexto[ID]);
    new Float:F[3],result[120];
    GetPlayerPos(playerid,F[0],F[1],F[2]);
    Puerta[ID][PuertaX] = F[0];
    Puerta[ID][PuertaY] = F[1];
    Puerta[ID][PuertaZ] = F[2];
    format(result,sizeof(result), "Pulsa la tecla Y para ingresar a {da2442}%s{ffffff}.",Puerta[ID][PuertaNombre]);
    PuertaTexto[ID] = CreateDynamic3DTextLabel( result, -1, F[0], F[1], F[2], 10.0);
    PickUpPueta[ID] = CreateDynamicPickup(1318, 1, F[0], F[1], F[2], 0, 0);
    SendClientMessage(playerid, -1,"{dad824}[PUERTA] Se a movido correctamente de posicion.");
   }
   if(strcmp(opcion,"eliminar",true) == 0)
   {
    Puerta[ID][PuertaCreada] = 0;
    Puerta[ID][PuertaConInterior] = 0;
    Puerta[ID][PuertaX] = 0;
    Puerta[ID][PuertaY] = 0;
    Puerta[ID][PuertaZ] = 0;
    Puerta[ID][PuertaXa] = 0;
    Puerta[ID][PuertaYa] = 0;
    Puerta[ID][PuertaZa] = 0;
    DestroyDynamicPickup(PickUpPueta[ID]);
    DestroyDynamic3DTextLabel(PuertaTexto[ID]);
    DestroyDynamicPickup(PickUpPueta1[ID]);
    DestroyDynamic3DTextLabel(PuertaTexto1[ID]);
    SendClientMessage(playerid, -1,"{dad824}[PUERTA] Se a borrado correctamente la puerta");
   }
  }else SendClientMessage(playerid, -1,"{dad824}[ERROR] La puerta seleccionado no existe.");
 }else return 0;
 return 1;
}

CMD:veridpuerta(playerid,params[])
{
 if( cuenta[playerid][admin] > 6)//Su variable de admin
 {
  for (new i=0; i<MAX_PUERTAS; i++)
  {
   if(IsPlayerInRangeOfPoint(playerid,3,Puerta[i][PuertaX],Puerta[i][PuertaY],Puerta[i][PuertaZ]))
   {
    new result[120];
    format(result,sizeof(result), "[PUERTA] El ID de esta puerta es: {21b1c0}%d{ffffff}.",Puerta[i][PuertaID]);
    SendClientMessage(playerid, -1,result);
   } 
 }else return 0;
 return 1;
}

CMD:irpuerta(playerid,params[])
{
 if( cuenta[playerid][admin] > 6)//Su variable de admin
 {
  new i;
  if(sscanf(params,"i", i))return SendClientMessage(playerid, -1,"{454e4f}Uso: /irpuerta [ID]");
  SetPlayerInterior(playerid,0);
  SetPlayerVirtualWorld(playerid,0);
  SetPlayerPos(playerid,Puerta[i][PuertaX],Puerta[i][PuertaY],Puerta[i][PuertaZ]);
 }else return 0;
 return 1;
}

CMD:entrar(playerid)
{
 for (new i=0; i<MAX_PUERTAS; i++)
  {
   if(IsPlayerInRangeOfPoint(playerid,3,Puerta[i][PuertaX],Puerta[i][PuertaY],Puerta[i][PuertaZ]))
   {
	if(Puerta[i][PuertaConInterior] == 1)
	{
     SetPlayerInterior(playerid,Puerta[i][PuertaInterior]);
     SetPlayerVirtualWorld(playerid,Puerta[i][PuertaVirtualW]);
     SetPlayerPos(playerid,Puerta[i][PuertaXa],Puerta[i][PuertaYa],Puerta[i][PuertaZa]);
	}else SendClientMessage(playerid, -1,"{dad824}[ERROR] La puerta no tiene interior.");
   }
  }
 return 1;
}

CMD:salir(playerid)
{
 for (new i=0; i<MAX_PUERTAS; i++)
  {
   if(IsPlayerInRangeOfPoint(playerid,3,Puerta[i][PuertaXa],Puerta[i][PuertaYa],Puerta[i][PuertaZa]))
   {
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerPos(playerid,Puerta[i][PuertaX],Puerta[i][PuertaY],Puerta[i][PuertaZ]);
   }
  }
 return 1;
}
  Cantidad de llaves: Abiertas(37)-Cerradas(36) | Lineas Totales: 143
Ahora si quieren que ingrese al interio o salga con alguna tecla...
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
 if(newkeys == KEY_YES)
 {
    cmd_entrar(playerid);
    cmd_salir(playerid);
 }
 return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 9
Cualquier duda o conflicto con el codigo notifiquenlo, asi los ayudo..
¿Necesitas ayuda? Mándame MP te resolveré la duda o apoyare en algún script por medio de MP lo mas rápido posible.
Si te ayude dale +rep
Mis aportes


Sacar provecho de un buen consejo exige más sabiduría que darlo. "John Churton Collins"
Avatar de Usuario
mag1k_
Junior
Junior
Mensajes: 165
Registrado: 07 Dic 2017 20:43
Ubicación: México
Contactar:
Reputación: 10

22 Mar 2018 09:10

Excelente guía la estaba buscando.

¿Puedes pasar el de MySQL?

Gracias.
Evilp
Aprendiz
Aprendiz
Mensajes: 59
Registrado: 29 Mar 2018 09:43
Ubicación: Venezuela
Contactar:
Reputación: 1

30 Mar 2018 20:45

Buena!, lo probaré respetando creditos!!.
𝔼𝕍𝕀𝕃ℙ🐺

Responder