[Ayuda] (Sistema de bolsillo-cargadores) Las armas se reinician al agotarse.

¿Tienes dudas sobre un código? Consúltalas aquí y aprende cómo se solucionan diferentes tipos de errores.

Moderador: Ayudantes

Reglas del Foro
  • A la hora de realizar su pregunta, especifique bien los detalles y tenga buena ortografía, de esa manera el resto de los usuarios podrán entender su pregunta.
  • Recuerde proporcionar el código que le trae problemas y sus respectivos errores utilizando el BBCode [Pawn]Código aquí[/Pawn] en su mensaje.
  • En esta sección, sólo podrás publicar preguntas asociadas a programación en PAWN ("¿Cuál es la diferencia entre new y static?"), más no temas relacionados a pedir códigos ("¿Me pueden pasar el sistema de 'X' servidor?"). (Ir a Pedidos para publicar estos temas).
  • Si tu pregunta es relacionada con un GM publicado en PawnScript, no crees tu pregunta en esta sección, créala en el mismo tema desde donde obtuviste el GameMode.
  • Evita colocar títulos como: "[Pregunta]", "[Duda]", "[Ayuda]", etc. Los títulos deben ser descriptivos.
  • Si la pregunta es respondida, no modifiques el título ni el contenido de los mensajes del tema. Quizás le pueda servir a alguien más en otro momento.
  • Si la pregunta es respondida, el tema será movido a "Preguntas Solucionadas".
  • Si la pregunta no cumple con alguna de las reglas antes mencionadas o con las Normas del foro, el tema será movido a "Preguntas Cerradas" o a la Papelera.
Responder
Avatar de Usuario
Strikeskp
Aprendiz
Aprendiz
Mensajes: 117
Registrado: 18 Jul 2015 19:26
Reputación: 1

24 Jun 2019 12:43

Bueno pues, como dice el título, es un problema que afecta a la Gamemode de Edinson Walker; Generation City. Sucede que si saco las armas del casillero de la PD y las agoto, estas se reinician y vuelven a tener la munición que tenían, por ende, son armas ilimitadas. ¿Cómo puedo hacer que las armas NO se reinicien?

Me fijé que cuando saco un arma del /equipo y las disparo, la munición del /bol no se actualiza, por lo que el arma se reinicia ilimitadamente.

No pongo el código porque creo que tendría que ponen todo el sistema de armas y sería algo muy tedioso y confuso. Si hay alguien que haya solventado eeste error o sepa como, porfavor le agradezco la ayuda, gracias de antemano.
Avatar de Usuario
BenjaScript
Senior
Senior
Mensajes: 521
Registrado: 07 Oct 2015 08:34
Reputación: 53

25 Jun 2019 15:00

Strikeskp escribió:
24 Jun 2019 12:43
estem.. bueno, en primer lugar podríamos ir al callback OnPlayerWeaponShot y colocar/arreglar esta parte, que quede de este modo:
 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

// ...

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
	if(IsPlayerConnectedEx(playerid))
	{
	    new idobj = user[playerid][jm_Derecha];
	    if(IsWeaponWithAmmo(weaponid))
		{
			if(user[playerid][jm_DerechaCant])
			{
				user[playerid][jm_DerechaCant]--;
			    if(GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) != 0 && GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) < user[playerid][jm_DerechaCant])
				{
			        user[playerid][jm_DerechaCant] = GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]);
			    }
				if(user[playerid][jm_DerechaCant] == 0)
				{
			    	ResetPlayerWeapons(playerid);
			    }
			}
			else
			{
			    // -- Aquí va el código para el que la esté chiteando (Disparando sin balas)
			    // -- Puedes poner advertencias, kicks, lo que tú quieras
			}
		}
	}
    return 1;
}
  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 30
potencia in progress
Avatar de Usuario
Strikeskp
Aprendiz
Aprendiz
Mensajes: 117
Registrado: 18 Jul 2015 19:26
Reputación: 1

25 Jun 2019 23:06

BenjaScript escribió:
25 Jun 2019 15:00
Strikeskp escribió:
24 Jun 2019 12:43
estem.. bueno, en primer lugar podríamos ir al callback OnPlayerWeaponShot y colocar/arreglar esta parte, que quede de este modo:
 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

// ...

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
	if(IsPlayerConnectedEx(playerid))
	{
	    new idobj = user[playerid][jm_Derecha];
	    if(IsWeaponWithAmmo(weaponid))
		{
			if(user[playerid][jm_DerechaCant])
			{
				user[playerid][jm_DerechaCant]--;
			    if(GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) != 0 && GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) < user[playerid][jm_DerechaCant])
				{
			        user[playerid][jm_DerechaCant] = GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]);
			    }
				if(user[playerid][jm_DerechaCant] == 0)
				{
			    	ResetPlayerWeapons(playerid);
			    }
			}
			else
			{
			    // -- Aquí va el código para el que la esté chiteando (Disparando sin balas)
			    // -- Puedes poner advertencias, kicks, lo que tú quieras
			}
		}
	}
    return 1;
}
  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 30
Revisé el callback y el que tiene es este, intenté colocar el tuyo pero tira demasiados errores.
 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

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
	new idobj = user[playerid][jm_Derecha];/* balas = GetPlayerAmmo(playerid);*/
	if(IsPlayerConnectedEx(playerid))
	{
		if(IsWeaponWithAmmo(weaponid))
		{
			if (InfoObjeto[idobj][IDArma] != weaponid && user[playerid][jNivel] <= 1) // "armas invisibles"
			{
			    new text_[144];
				format(text_, sizeof(text_), "{FF6347}Administración: %s fue expulsado. Razón:[Arma no sincronizada (posible whitebug o cheat)]", nombre_pj(playerid));
				MensajeAdmin(text_);
				_Expulsar(playerid, 0, "Arma no sincronizada");
				return 1;
			} // el viejo sistema lo borré a la [MALSONANTE], este de abajo es el efectivo.
			if(user[playerid][jm_DerechaCant])
			{
       			user[playerid][jm_DerechaCant]--;
				//fix para que no se le cedan balas extras al jugador
			    if(GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) != 0 && GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]) < user[playerid][jm_DerechaCant])
			    {
			        user[playerid][jm_DerechaCant] = GetPlayerWeaponAmmo(playerid, InfoObjeto[idobj][IDArma]);
			    }
				if(user[playerid][jm_DerechaCant] == 0) // remueve arma si no tienes balas, si continua disparando abajo está el check para dar kick <-
				{
				    ResetPlayerWeapons(playerid);
				}
			}
			else
			{
			    Anti[playerid][BalasW]++;
			    ResetPlayerWeapons(playerid);
			   	if(Anti[playerid][BalasW] == 3 && AntiG[Balas]) // 3 advertencias de tolerancia ^^
			    {
   					new text_[144];
					format(text_, sizeof(text_), "{FF6347}Administración: %s fue expulsado y limpiado. Razón:[Cheat de munición]", nombre_pj(playerid));
					_MensajeOOC(0xFF6347FF, text_);
					format(text_, sizeof(text_), "%s ha utilizado cheat de munición. [%s]", nombre_pj(playerid), InfoObjeto[user[playerid][jm_Derecha]][NombreObjeto]);
					Log("Registros/cheatsbalas.log", text_);
					QuitarManos(playerid);
					_Expulsar(playerid, 0, "Munición desincronizada con el servidor");
					return 1;
				}
			}
		}
	}
	if(hittype == BULLET_HIT_TYPE_VEHICLE)
	{
		if(fX > 20.0 || fX < -20.0 || fY > 20.0 || fY < -20.0 || fZ > 20.0 || fZ < -20.0)
		{
			return 0b0;
		}
		new Float:VehVida;
		GetVehicleHealth(hitid, VehVida);
		if(VehVida > 400)
		{
			switch(weaponid)
			{
				case 22: SetExVehicleHealth(hitid, VehVida - 20); // 45. Colt
				case 23: SetExVehicleHealth(hitid, VehVida - 25); // Silenced 45. Colt
				case 24: SetExVehicleHealth(hitid, VehVida - 30); // Deagle
				case 25: SetExVehicleHealth(hitid, VehVida - 50); // Escopeta
				case 26: SetExVehicleHealth(hitid, VehVida - 55); // Escopeta recortada
				case 27: SetExVehicleHealth(hitid, VehVida - 70); // Escopeta de combate
				case 28: SetExVehicleHealth(hitid, VehVida - 15); // Uzi
				case 29: SetExVehicleHealth(hitid, VehVida - 20); // MP5K
				case 30: SetExVehicleHealth(hitid, VehVida - 30); // M4
				case 31: SetExVehicleHealth(hitid, VehVida - 30); // AK-47
				case 32: SetExVehicleHealth(hitid, VehVida - 15); // Tec-9
				case 33: SetExVehicleHealth(hitid, VehVida - 25); // Rifle de caza
				case 34: SetExVehicleHealth(hitid, VehVida - 50); // Sniper Rifle
				case 35: SetExVehicleHealth(hitid, 0); // RPG
				case 36: SetExVehicleHealth(hitid, 0); // HS Rocket
				case 38: SetExVehicleHealth(hitid, VehVida - 200); // Minigun
				default: SetExVehicleHealth(hitid, VehVida);
			}
		}
	}
	if(hittype==BULLET_HIT_TYPE_PLAYER)
	{
		if(!(-100.0<=fX<=100.0)||!(-1000.0<=fY<=100.0)||!(-100.0<=fZ<=100.0))
		{
           //kickorbanthecrasher
			return 0b0;
		}
	}
	if(user[playerid][jm_Derecha] == 40 && weaponid == 23){TaserRecarga[playerid] = 1; SetTimerEx("RecargarTaser", 5000, false, "i", playerid);} //Sistema de recarga de taser
    return 1;
}
  Cantidad de llaves: Abiertas(18)-Cerradas(18) | Lineas Totales: 89
Responder