[Pregunta] Como hago esto... -
JuliPera - 13.04.2012
Buenas a todos,
tengo una pregunta y es sobre las armas..
їComo puedo hacer para detectar cuando un usuario dispara un tiro?
Por ejemplo: Cuando un usuario dispara un tiro, salga un cartel a todos que diga: "El usuario DonPepe ha disparado un tiro con el arma Desert Deagle. Ahora tiene 230 balas."
Puse Desert Deagle como un ejemplo, pero que aparezca el arma que uso, y las balas que tiene despues de tirar el disparo.
Un saludo y espero que me ayuden,
JuliPera
Respuesta: [Pregunta] Como hago esto... -
TiNcH010 - 13.04.2012
OnPlayerGiveDamage
OnPlayerTakeDamage
Re: Respuesta: [Pregunta] Como hago esto... -
JuliPera - 13.04.2012
Quote:
Originally Posted by TiNcH010
|
Pero si disparo al aire?
Respuesta: [Pregunta] Como hago esto... -
TiNcH010 - 13.04.2012
Proba usando INVALID_PLAYER_ID
Re: [Pregunta] Como hago esto... -
JuliPera - 13.04.2012
No funciona, el codigo lo tengo asi:
pawn Код:
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
new Slot, Arma, Municion, String[128], ArmaNombre[24];
GetWeaponName(weaponid, ArmaNombre, sizeof(ArmaNombre));
Slot = GetWeaponSlot(weaponid);
GetPlayerWeaponData(playerid, Slot, Arma, Municion);
if(damagedid == INVALID_PLAYER_ID)
{
format(String, sizeof(String), "%s ha disparado al aire con su %s, ahora tiene %d balas.", NombreJugador(playerid), ArmaNombre, Municion);
SendClientMessageToAll(0xFFFFFFFF, String);
}
else
{
format(String, sizeof(String), "%s ha disparado a %s con su %s, ahora tiene %d balas.", NombreJugador(playerid), NombreJugador(damagedid), ArmaNombre, Municion);
SendClientMessageToAll(0xFFFFFFFF, String);
}
return 1;
}
Me parece que no detecta nada porque este callback detecta cuando hace daсo, y si disparas al aire no le estas haciendo daсo a nadie.
Respuesta: [Pregunta] Como hago esto... -
nagato.samp - 13.04.2012
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new Slot, Arma, Municion, String[128], ArmaNombre[24];
GetWeaponName(weaponid, ArmaNombre, sizeof(ArmaNombre));
Slot = GetWeaponSlot(weaponid);
GetPlayerWeaponData(inssuerid, Slot, Arma, Municion);
if(playerid != INVALID_PLAYER_ID)
{
format(String, sizeof(String), "%s ha disparado al aire con su %s, ahora tiene %d balas.", NombreJugador(inssuerid), ArmaNombre, Municion);
SendClientMessageToAll(0xFFFFFFFF, String);
}
else
{
format(String, sizeof(String), "%s ha disparado a %s con su %s, ahora tiene %d balas.", NombreJugador(inssuerid), NombreJugador(playerid), ArmaNombre, Municion);
SendClientMessageToAll(0xFFFFFFFF, String);
}
return 1;
}
creo que debe funcionar
Re: Respuesta: [Pregunta] Como hago esto... -
JuliPera - 13.04.2012
Quote:
Originally Posted by nagato.samp
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid) { new Slot, Arma, Municion, String[128], ArmaNombre[24]; GetWeaponName(weaponid, ArmaNombre, sizeof(ArmaNombre)); Slot = GetWeaponSlot(weaponid); GetPlayerWeaponData(inssuerid, Slot, Arma, Municion); if(playerid != INVALID_PLAYER_ID) { format(String, sizeof(String), "%s ha disparado al aire con su %s, ahora tiene %d balas.", NombreJugador(inssuerid), ArmaNombre, Municion); SendClientMessageToAll(0xFFFFFFFF, String); } else { format(String, sizeof(String), "%s ha disparado a %s con su %s, ahora tiene %d balas.", NombreJugador(inssuerid), NombreJugador(playerid), ArmaNombre, Municion); SendClientMessageToAll(0xFFFFFFFF, String); } return 1; }
creo que debe funcionar
|
No, es igual que con la otra.
Todavia no lo probe disparandole a otra persona, pero seguarmente funciona.
El problema es que si no le pegas a nada, no salta ningun mensaje.
Re: [Pregunta] Como hago esto... -
JuliPera - 13.04.2012
Lo pude hacer.
En OnPlayerKeyStateChange puse:
pawn Код:
if(oldkeys & KEY_FIRE)
{
new Slot, Arma, Municion, String[128], ArmaNombre[24];
Slot = GetWeaponSlot(GetPlayerWeapon(playerid));
GetPlayerWeaponData(playerid, Slot, Arma, Municion);
GetWeaponName(Arma, ArmaNombre, sizeof(ArmaNombre));
format(String, sizeof(String), "%s ha disparado con su %s, ahora tiene %d balas.", NombreJugador(playerid), ArmaNombre, Municion);
SendClientMessageToAll(0xFFFFFFFF, String);
return 1;
}
Entonces cuando termina de disparar dice el nombre, con que arma disparo y cuantas balas le quedan.
Pueden cerrar.
Respuesta: Re: [Pregunta] Como hago esto... -
nagato.samp - 13.04.2012
Quote:
Originally Posted by JuliPera
Lo pude hacer.
En OnPlayerKeyStateChange puse:
pawn Код:
if(oldkeys & KEY_FIRE) { new Slot, Arma, Municion, String[128], ArmaNombre[24]; Slot = GetWeaponSlot(GetPlayerWeapon(playerid)); GetPlayerWeaponData(playerid, Slot, Arma, Municion); GetWeaponName(Arma, ArmaNombre, sizeof(ArmaNombre)); format(String, sizeof(String), "%s ha disparado con su %s, ahora tiene %d balas.", NombreJugador(playerid), ArmaNombre, Municion); SendClientMessageToAll(0xFFFFFFFF, String); return 1; }
Edita en vez de hacer doble post y
Entonces cuando termina de disparar dice el nombre, con que arma disparo y cuantas balas le quedan.
Pueden cerrar.
|
seguro que te funciona? ahi no comprueba si esta apie o a vehiculo asi que intenta ahcerlo estando en 1 carro y veras.
Re: Respuesta: Re: [Pregunta] Como hago esto... -
JuliPera - 14.04.2012
Quote:
Originally Posted by nagato.samp
seguro que te funciona? ahi no comprueba si esta apie o a vehiculo asi que intenta ahcerlo estando en 1 carro y veras.
|
Si lo haces estando en un vehiculo, aparece el mensaje pero en arma no aparece nada, y en balas aparece 0.
Pero yo no lo quiero usar para el mensaje, ese es un ejemplo.
Re: [Pregunta] Como hago esto... -
Glimma - 05.11.2012
https://sampforum.blast.hk/showthread.php?tid=195439
Respuesta: [Pregunta] Como hago esto... -
TheChaoz - 05.11.2012
Aca te dejo un mini-script para hacer lo que tu quieres:
pawn Код:
#include <a_samp>
#define INTERVAL (500)
enum PD
{
Weapon[13],
Ammo[13],
Timer
};
new Info[MAX_PLAYERS][PD];
public OnPlayerConnect(playerid)
{
Info[playerid][Timer] = SetTimerEx("PlayerStatusChecker", INTERVAL, 1, "i", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
KillTimer(Info[playerid][Timer]);
return 1;
}
forward PlayerStatusChecker(playerid);
public PlayerStatusChecker(playerid)
{
new weapon, ammo;
for(new i; i<13; i++){
GetPlayerWeaponData(playerid, i, weapon, ammo);
if(Info[playerid][Weapon][i] == weapon){
if(Info[playerid][Ammo][i] > ammo){
CallLocalFunction("OnPlayerShot", "iii", playerid, weapon, (Info[playerid][Ammo][i] - ammo));
Info[playerid][Ammo][i] = ammo;
}
else if(Info[playerid][Ammo][i] < ammo)
Info[playerid][Ammo][i] = ammo;
}
else
{
Info[playerid][Weapon][i] = weapon;
Info[playerid][Ammo][i] = ammo;
}
}
}
forward OnPlayerShot(playerid, weapon, bullets);
public OnPlayerShot(playerid, weapon, bullets)
{
//Aqui pones las acciones a realizar cuando el jugador dispara 1 o mas balas
return 1;
}