[Duda] Sobre las armas y su potencia.
#1

Buenas, realizo este post para consultar sobre las armas y su potencia de disparo(con potencia me refiero a la cantidad de HP que restan), quisiera saber como alterar esa cantidad (tengo entendido que es con onplayergivedamage/onplayertakedamage) pero no las entiendo concretamente.
Alguno podrнa explicarme como utilizar correctamente estas funciones?
Reply
#2

Aumentar el daсo de un arma al jugador no se puede (a menos que modifiques algъn cуdigo/archivo del cliente del gta) pero lo que si se puede es chequear el id del arma y tomar X acciуn, ejemplo:

pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
     if(issuerid != INVALID_PLAYER_ID)
     {
        static Float:SacarVida; // Definimos para sacar la vida.
        GetPlayerHealth(playerid, SacarVida); // Extraemos info. de la vida del PJ.
        if(weaponid == 24) // ID del arma, en este caso la deagle.
        {
        SetPlayerHealth(playerid, SacarVida-15); // NO SETEAMOS la vida del PJ sino la bajamos un 15%.
        }
     }
     return 1;
}
Reply
#3

Un ejemplo sencillo
pawn Код:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
    if(weapondid == id_de_tu_arma_a_modificar)
    {
        new Float:HH;
        GetPlayerHealth(playerid, HH);
        SetPlayerHealth(playerid, HH -10.0); // La cantidad de vida que perderб es lo que la bala le quita y 10 mбs aun
    }

}
EDIT: Me gano tincho al estar enviando el mensaje..
Reply
#4

Muchas gracias, me sirviу.
Y de una vez, aprovecho este topic para realizar otra duda... Supongamos que mi guardado de datos es como los del tнpico Godfather, y estos se guardan al desconectarse (onplayerdisconnect), bien, entonces yo quiero modificar las variables al usuario (el tнpico giveplayerid) en la callback OnDialogResponse (giveplayerid la asigno creando un dialogo estilo imput para insertar el nombre del usuario y de ahн obtener la id con ReturnUser [el resultado se asigna a giveplayerid], el problema reside en que si defino giveplayerid asн: new giveplayerid; al inicio del callback al ejecutar el guardado ( el ultimo dialogo del callback) giveplayerid pasa a ser 0, por lo tanto no le aplica las variables al jugador.
Sin embargo; si la creo como variable estбtica, al final si guarda los datos, PERO, si por ejemplo se editan dos archivos a la vez, los datos se guardan a la primera id colocada( la que se guardo en la variable estбtica primero), lo que me interesa saber es como evitar que esto ocurra. No se si me di a explicar correctamente ( ya que estoy desde el iPod) si no es asн, cuando llegue a casa su o unos ejemplos y tal.
Reply
#5

Sin embargo no te entendн nada de lo que queres hacer... si podrнas explicarte mejor podrнamos resolver el problema de mejor manera..
Reply
#6

Quote:
Originally Posted by GROVE22
Посмотреть сообщение
Sin embargo no te entendн nada de lo que queres hacer... si podrнas explicarte mejor podrнamos resolver el problema de mejor manera..
El problema ya lo resolviу, lo que el querнa era que el arma tuviese mas "potencia" entonces lo que improvise era que al recibir el daсo el jugador compruebe el arma y le saque la cantidad de vida que el quiera.
Reply
#7

Quote:
Originally Posted by TiNcH010
Посмотреть сообщение
El problema ya lo resolviу, lo que el querнa era que el arma tuviese mas "potencia" entonces lo que improvise era que al recibir el daсo el jugador compruebe el arma y le saque la cantidad de vida que el quiera.
Si pero despuйs bien dijo ya aprovecho este topic para pregunta... blablabla y lo que no entendн fue lo que pregunto despuйs no lo que ya resolviу ¬¬
Reply
#8

Quote:
Originally Posted by GROVE22
Посмотреть сообщение
Si pero despuйs bien dijo ya aprovecho este topic para pregunta... blablabla y lo que no entendн fue lo que pregunto despuйs no lo que ya resolviу ¬¬
Entonces utiliza la cita xq me confundi ¬¬
Reply
#9

Se los dejo mбs explicitamente;
- Tengo un guardado de datos manejandolo con el clбsico fread, etc; y quй se guardan cuando es llamada OnPlayerDisconnect.
Ejemplo (para guardar un dato):
pawn Код:
//Tomamos el nombre, lo metemos en una variable y despuйs formateamos todo el archivo de esta forma:
format(var, 256, "Variable1=%i\n", OnlineInfo[playerid][Carid]); fwrite(Archivo, var);
Bien, entonces yo me puse a hacer un 'sistema' vнa dialogo, para modificar el archivo del usuario (Quй tiene que estar ON) y a la vez aplicarle la variable IG (Para quй al desconectarse la variable no se vaya a modificar).
El comando lanzarб un dialogo tipo INPUT para insertar el nombre del usuario (Aquн es donde entra OnDialogResponse, quй esta asн:
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    static Cliente[MAX_PLAYER_NAME], Usuario[MAX_PLAYER_NAME + 5], giveplayerid; //El problema en Giveplayerid

    if(dialogid == NombreArchivo)
    {
        if(!response) return SendClientMessage(playerid, COLOR_RED, "Has salido del menu de Tuning"), true;
        if(response)
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, IncersionCliente, DIALOG_STYLE_INPUT, "|**| Menu de Tuneo |**|"," ЎTienes que insertar el nombre del Dueсo! ", "Seleccionar", "Salir");
            strmid(Cliente,inputtext,false,strlen(inputtext),sizeof(Cliente));
            format(Usuario, sizeof(Usuario), "%s.ini", Cliente);
            giveplayerid = ReturnUser(inputtext);
            if (fexist(Usuario))
            {
                if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_RED, "Error: El usuario debe de estar Online"),true;
                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST,"|**| Datos |**| Cuenta de Usuario", " Aquн las opciones", "Aceptar", "Salir");
            } else if(!fexist(Usuario)) return SendClientMessage(playerid, -1, "Error: Has escrito un nombre erroneo o el Archivo no existe!"), true;
        } return true;
    }
    return true;
}
Como pueden observar ahн, para almacenar la ID del usuario ( Quй es tomada con ReturnUser(inputtext); ) se almacena en la variable llamada 'giveplayerid' (Declarada como variable estбtica).
Bien, hasta aquн todo bien; cuando selecciono otra opciуn de otro dialogo (Por ejemplo, selecciono la opciуn N°1 de la lista) y la modifico asн:
pawn Код:
if(dialogid == 1) {
        if(!response) return SendClientMessage(playerid, -1, "_"), true;
        if(response) {
            switch ( listitem ) {
                case 0: {
                    OnlineInfo[giveplayerid][Carid] = 311;
                                GuardadoCuentas(giveplayerid);
                    PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
                    SendClientMessage(playerid, C_DBlue, "Mensaje bla bla bla");
                }
            }
        }
        return true;
    }
Eso me asigna la variable como yo quiero y guarda el archivo y tal (ESTANDO giveplayerid como variable Estбtica), el problema viene cuando se quieren modificar 2 o mбs cuentas a la vez, ya quй al ser estбtica esta almacena la ID y al acabar de guardar una cuenta, la ID, como queda almacenada; se le guardan los datos de La cuenta que se esta editando y eso me causa el lio.
Quiero ver como sustituir esa variable (giveplayerid) para que deje de ser estбtica y funcione correctamente al editar 2 o mбs cuentas.
Sн sustituyo Giveplayerid por 'new giveplayerid;' se asigna el id del usuario a editar (para verificar si el usuario esta online o no) pero cuando comienzo a modificar las variables, estas se asignan al ID 0, es como sн la variable se vaciara automбticamente....
Ese es el problema, esa fucking variable...
Reply
#10

Falta un SetPlayerTeam ya que la vida bajarнa dos veces, una cuando el tiro impacta en el objetivo y despuйs cuando el server procesa el tiro. Al estar todos en un mismo equipo, el server solamente procesarнa la vida, y el tiro que impactу no le bajarнa vida.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)