Detecciуn.
#1

Hola, quisiera saber como hago para actualizar la variable de vida y chaleco cuando el jugador cae, se incendia, recibe un golpe de un auto, disparos, entre otros. Las variables serian PlayerInfo[playerid][jVida] y jArmadura, se que tiene que ver algo con OnPlayerTakeDamage y OnPlayerUpdate, he hecho distintos tipos de metodos de actualizar dichas variable pero no cumplo. Saludos y gracias por leer.
Reply
#2

https://sampwiki.blast.hk/wiki/OnPlayerTakeDamage
https://sampwiki.blast.hk/wiki/Weapons

Tenemos que sersiorarnos de que issuerid es nulo, osea que no te daсo un jugador, y despues miramos en Weapons, al final sale los ID de las explosiones, caidas etc.. un ejemplo:
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{ //bodypart es la nueva funcion de partes del cuerpo
    if(issuerid == INVALID_PLAYER_ID )
    {
     switch(weaponid)
{
// 49 si te chocan
case 49: { Actualizar var }
// 54 si te caes
case 54: { Actualizar var }
}
     
    }
    return 1;
}
Reply
#3

Muy bien Escobar, ahora tengo un problema; consiste en que la variable de la vida se desiguala con la vida normal, me explico, estoy realizando un anticheat, lo cual si la variable no es identica a la vida, automaticamente expulse al jugador. Bien; en OnPlayerTakeDamage coloque algo asi (usando la stock de la vida): VidaPlayer(playerid,PlayerInfo[playerid][jVida]-amount): bien, el problema es el siguiente, usted sabe que SetPlayerHealth no asigna la vida la vida con valores de Float como (Ejemplo): 55.005600, bueno, cuando es llamado el public OnPlayerTakeDamage la variable se actualiza algo como: 55.005600 entonces cuando SetPlayerHealth trata de igualar la vida a la variable (Osea: SetPlayerHealth(playerid, PlayerInfo[playerid][jVida]).) La vida se asigna de forma redondeada, osea 55.000000 en vez de asignar 55.005600 y alli el anticheat actua: lo que necesitaria en este caso seria redondear la variable como 55.000000... Espero y entienda mi problema, gracias.
Reply
#4

pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{ //bodypart es la nueva funcion de partes del cuerpo
    if(issuerid == INVALID_PLAYER_ID )
    {
        new Float:health, Float:armour;
        GetPlayerHealth(playerid,health);
        GetPlayerArmour(playerid,armour);
        switch(weaponid)
        {
            // 49 si te chocan
            case 49: {
                variable vida = health;
                variable chaleco = armour;
            }
            // 54 si te caes
            case 54: {
                variable vida = health;
                variable chaleco = armour;
            }
        }
    }
    return 1;
}
utiliza las variables de las funciones, no la del call.
saludos.



pawn Код:
if(variable vida == health){
//es igual
}else{
//no es igual
}
pawn Код:
if(variable chaleco == armour){
//es igual
}else{
//no es igual
}
Reply
#5

Bien, no pude hacer lo que quize pero por lo menos consegui que la variable redondeara (controlando yo mismo cada magnitud de golpe de cada cosa) la unica cosa que me hace falta para terminar mi anticheat es la id de la candela que bota cuando un auto explota, que queda como una candelita y que cuando uno pasa por encima de ella se empieza a quemar, o por lo menos como detecto eso... Gracias.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)