Programación en Pawn - SAMP

Sistema de puertas dinamicas

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.
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].
  • 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".

Moderador: Ayudantes

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..
Excelente guía la estaba buscando.

¿Puedes pasar el de MySQL?

Gracias.
Buena!, lo probaré respetando creditos!!.

¿Quién está conectado?

En total hay 4 usuarios conectados :: 2 registrados, 0 ocultos y 2 invitados (basados en usuarios activos en los últimos 5 minutos)
La mayor cantidad de usuarios identificados fue 855 el 27 May 2018 00:03

Usuarios navegando por este Foro: Hectorxd, Untitled_ y 2 invitados