Duda: OnplayerDeath
#1

Tengo una duda con el resultado de un juego que hacia
estoy definiendo que si queda solo un jugador restante
ese usuario resulte ganador pero el problema es el siguiente, si el usuario muere a causa de otro jugador todo resulta bien el Killerid es anunciado como ganador y recibe lo suyo, pero si el playerid muere en forma de suicidio allн esta problema, ya que Killerid no es llamado y entonces el otro jugador no gana y continua en el juego solo
entonces procedн a usar foreach y asн mostrar al ganador, mas sin embargo al usar foreach si muere asesinado o si muere por suicidio alguno de los 2 restantes, los dos resultan ganadores, ya que se mandan 2 SendClientMessage de que los 2 ganaron, aunque solo a uno se le da la recompensa
y aquн tampoco puedo usar operadores miscelбneos para hacer la comprobaciуn



mi funcion en OnplayerDeath


PHP код:
if(Survival[Puesto_] == 1)
{
GameTextForPlayer( ? ,"Ganaste",3000,3); 

Reply
#2

OnPlayerDeath tiene un parбmetro que se llama reason, sirve para algo.
reason = https://sampwiki.blast.hk/wiki/Weapons

PHP код:
if(reason == 54// WEAPON_COLLISION
{
 
// el jugador a muerto por suicidio, hemos perdido una gran persona :D xD

saludos.



PHP код:
#include <a_samp>
new bool:jugando[MAX_PLAYERS];
new 
bool:evento;
public 
OnPlayerDeath(playeridkilleridreason){
    if(
evento == true){  // el evento esta activo
        // jugador muere
        
if(reason == 54){
            
// el jugador se suicido por cobarde o por boludo
            
jugando[killerid] = false;
        }else{
            
// el jugador se murio como un valiente ... pero  muy malo
            
jugando[killerid] = false;
        }
        
// buscando jugadores en el evento
        
new contarid;
        for(new 
player 0user GetPlayerPoolSize(); player <= userplayer++){
            if(
jugando[player] == truecontar++; id=player; break;
        }
        
// mensaje si encuentra a un solo jugador en el evento
        
if(contar == 1) return GameTextForPlayer(id ,"Ganaste",3000,3);
        else if(
contar == 0){
            
// todos los jugadores se murieron, suicidaron o se fueron a FenixZone. :D :(
        
}
    }
    return 
true;

Reply
#3

Quote:
Originally Posted by OTACON
Посмотреть сообщение
OnPlayerDeath tiene un parбmetro que se llama reason, sirve para algo.
reason = https://sampwiki.blast.hk/wiki/Weapons

PHP код:
if(reason == 54// WEAPON_COLLISION
{
 
// el jugador a muerto por suicidio, hemos perdido una gran persona :D xD

saludos.



PHP код:
#include <a_samp>
new bool:jugando[MAX_PLAYERS];
new 
bool:evento;
public 
OnPlayerDeath(playeridkilleridreason){
    if(
evento == true){  // el evento esta activo
        // jugador muere
        
if(reason == 54){
            
// el jugador se suicido por cobarde o por boludo
            
jugando[killerid] = false;
        }else{
            
// el jugador se murio como un valiente ... pero  muy malo
            
jugando[killerid] = false;
        }
        
// buscando jugadores en el evento
        
new contarid;
        for(new 
player 0user GetPlayerPoolSize(); player <= userplayer++){
            if(
jugando[player] == truecontar++; id=player; break;
        }
        
// mensaje si encuentra a un solo jugador en el evento
        
if(contar == 1) return GameTextForPlayer(id ,"Ganaste",3000,3);
        else if(
contar == 0){
            
// todos los jugadores se murieron, suicidaron o se fueron a FenixZone. :D :(
        
}
    }
    return 
true;

Tu cуdigo estб mal, pues si el jugador se ha suicidado no deberнas hacer:

PHP код:
if(reason == 54){
    
// el jugador se suicido por cobarde o por boludo
    
jugando[killerid] = false;

Pues, tomando en cuenta que la variable jugando[MAX_PLAYERS] tiene como mбximo 500 slots por defecto, si el jugador se suicidу killerid retornarб INVALID_PLAYER_ID y por ende estarнas accediendo accediendo a la variable en aquel нndice, lo cual estб mal.


Simplemente, para detectar si el jugador se suicidу podrнas hacer lo siguiente:


PHP код:
if(killerid == INVALID_PLAYER_ID)
{
    
//El jugador no muriу porque algъn otro jugador lo atacу.

Reply
#4

Gracias aunque esas funciones ya las tenia presentes y aplicadas de cierta forma no daba aъn asн el resultado que querнa, ademas de que querнa algo con menos cуdigo y ya lo solucione
si el usuario restante sea Killerid o Playerid obtiene lo suyo, solo use un operador racional
ya le probй y funciona perfecto
que fбcil no?
aclaro que este no es mi codigo completo solo la parte importante


PHP код:
if(Survival[Puesto_] == 1)
{
  if(
killerid != INVALID_PLAYER_ID || killerid == INVALID_PLAYER_ID)
  {
  
GameTextForPlayer(killerid || playerid,"Ganas",4000,3);
  }

Reply
#5

No creo que lo hayas solucionado con esa lуgica de cуdigo.

pawn Код:
if(Survival[Puesto_] == 1) {
    foreach(new i : Player) {
        if(JugadorEnMinijuego[i]) {
            GameTextForPlayer(i,"Ganaste",3000,3);
            break;
        }
    }
}
Reply
#6

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
No creo que lo hayas solucionado con esa lуgica de cуdigo.

pawn Код:
if(Survival[Puesto_] == 1) {
    foreach(new i : Player) {
        if(JugadorEnMinijuego[i]) {
            GameTextForPlayer(i,"Ganaste",3000,3);
            break;
        }
    }
}
Si de echo no estoy del todo convencido pero probй abriendo el Gta dos veces y suicidбndome en el evento por explosiуn, por fuego y asн, y el otro jugador salia ganador, despuйs probй, matбndolo y yo resultaba ganador, en otras palabras vi que funciono bien

Gracias por tu ayuda, aunque esa funciуn ya la habнa usado antes solo que un poco diferente
asн

PHP код:
foreach(new Player)
{
if(
Survival[Puesto_] == && PlayerInfo[i][EntroSurvival] == 1)
{
GameTextForPlayer(i,"Ganaste",3000,3);
format(string2sizeof(string2), "* Gana %s",PlayerName2(i));
SendClientMessageToAll(0x008000C8,string2);
}
break;

y el problema era que los dos finales resultaban ganador asi qu el mensaje de ganador se enviaba dos veces
mas sin embargo no puedo decir mucho de la forma en como ordenaste la funciуn porque no la probй asн
pero lo harй, aunque no se si funcione, pero gracias
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)