[Ayuda] Sistema de rampas
#1

Hola, queria ver si me ayudan con un pequeсo bug que tengo. aver les cuento


mira cree el sistema de rampas bien, /rampa se activa etc, al apretar ctrl sale la rampa chiquita y al apretar otra tecla tendria que salir una mas grande. Pero al apretar la tecla W o otras salen y cada ves que aprieto sale otra y otra y no para esta bug.
El problema cree que es al asignarle el valor a la variable gRampaGrande cuando teclea una tecla

Код:
if (PRESSED(KEY_ACTION)) gRampaGrande[playerid] = false;
else if (PRESSED(KEY_SECONDARY_ATTACK)) gRampaGrande[playerid] = true;

if (!gRampaGrande[playerid])
				{
				    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA, ......);
				    gEnRampa[playerid] = true;
				    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
				   
				}
				else if (gRampaGrande[playerid])
				{
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA_GRANDE, .....);
				    gEnRampa[playerid] = true;
				    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
				 
				}
No es todo el code pero creo que en la asginacion del valor a la variable gRampaGrande esta mal D:
por que la cosa es activar las rampas y si quieres rampa grande / chiquita aprietes la tecla que vos quieras.
Saludos
Reply
#2

en DestruirRampa tienes el gRampaGrande[playerid] = false; ?
pawn Код:
if (PRESSED(KEY_ACTION)) gRampaGrande[playerid] = false;
else if (PRESSED(KEY_SECONDARY_ATTACK)) gRampaGrande[playerid] = true;

if (!gRampaGrande[playerid])
                {
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA, ......);
                    gEnRampa[playerid] = true;
                                    gRampaGrande[playerid] = true;//activada
                    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
                   
                }else  
                {
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA_GRANDE, .....);
                    gEnRampa[playerid] = true;
                                    gRampaGrande[playerid] = false;//desactivada
                    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
                 
                }
Reply
#3

Quote:
Originally Posted by Mr.GeEk
Посмотреть сообщение
en DestruirRampa tienes el gRampaGrande[playerid] = false; ?
pawn Код:
if (PRESSED(KEY_ACTION)) gRampaGrande[playerid] = false;
else if (PRESSED(KEY_SECONDARY_ATTACK)) gRampaGrande[playerid] = true;

if (!gRampaGrande[playerid])
                {
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA, ......);
                    gEnRampa[playerid] = true;
                                    gRampaGrande[playerid] = true;//activada
                    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
                   
                }else  
                {
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA_GRANDE, .....);
                    gEnRampa[playerid] = true;
                                    gRampaGrande[playerid] = false;//desactivada
                    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
                 
                }
Si

Код:
public DestruirRampa(playerid)
{
	if (gRampaActivada[playerid] && gEnRampa[playerid] == true)
	{
	    DestroyDynamicObject(gIDRampa[playerid]);
	    KillTimer(gTimerDestRampa[playerid]);
	    gRampaGrande[playerid] = false;
	}
    return 1;
}
Reply
#4

Quote:
Originally Posted by Ari3l
Посмотреть сообщение
Hola, queria ver si me ayudan con un pequeсo bug que tengo. aver les cuento


mira cree el sistema de rampas bien, /rampa se activa etc, al apretar ctrl sale la rampa chiquita y al apretar otra tecla tendria que salir una mas grande. Pero al apretar la tecla W o otras salen y cada ves que aprieto sale otra y otra y no para esta bug.
El problema cree que es al asignarle el valor a la variable gRampaGrande cuando teclea una tecla

Код:
if (PRESSED(KEY_ACTION)) gRampaGrande[playerid] = false;
else if (PRESSED(KEY_SECONDARY_ATTACK)) gRampaGrande[playerid] = true;

if (!gRampaGrande[playerid])
				{
				    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA, ......);
				    gEnRampa[playerid] = true;
				    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
				   
				}
				else if (gRampaGrande[playerid])
				{
                    gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA_GRANDE, .....);
				    gEnRampa[playerid] = true;
				    gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
				 
				}
No es todo el code pero creo que en la asginacion del valor a la variable gRampaGrande esta mal D:
por que la cosa es activar las rampas y si quieres rampa grande / chiquita aprietes la tecla que vos quieras.
Saludos
Aver ariel amigo lo que yo no entiendo es que tu activas una rampa al parecer "pequeсa" y al desactivar estas desactivando es una rampa "grande" segun veo por el define que le tienes ID_RAMPA - ID_RAMPA_GRANDE
no se si sea eso pero es lo mas probable y otro consejo si necesitas eso para q lo saques cuando este en auto ponle alguna otra tecla por que la W es tanto de conducir hacia adelante como ir a pie es un concejo
Reply
#5

pawn Код:
if (PRESSED(KEY_SUBMISSION)  && gRampaActivada[playerid] == true)
{
if(gRampaGrande[playerid] == false)
{
gRampaGrande[playerid] = true;
// Rampas grandes activadas
}
else gRampaGrande[playerid] = false;
// Rampas grandes desactivadas
return 1;
}

if(PRESSED(KEY_FIRE)   && gRampaActivada[playerid] == true && gEnRampa[playerid] == false)
{
      if(gRampaGrande[playerid] == true) // Si rampa grande activada
      {
      gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA_GRANDE, ......);
      gEnRampa[playerid] = true;
      gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
      return 1;
      }
      else // Si no esta activada
      {
      gIDRampa[playerid] = CreateDynamicObject(ID_RAMPA, ......);
      gEnRampa[playerid] = true;
      gTimerDestRampa[playerid] = SetTimerEx("DestruirRampa", TIEMPO_EN_DEST_RAMPA, false, "d", playerid);
      return 1;
      }

}

public DestruirRampa(playerid)
{
    if (gRampaActivada[playerid] && gEnRampa[playerid] == true)
    {
        DestroyDynamicObject(gIDRampa[playerid]);
        KillTimer(gTimerDestRampa[playerid]);      
            gEnRampa[playerid] = false;
    }
        return 1;
}
Ahy deveria funcionar, para activar las rampas grandes presiona el 2, para desactivarlas solo vuelve a presionar el 2 y para crear la rampa usa ALT, tambien le inclui para que si ya hay una rampa creada no se cree otra hasta que la actual sea borrada para evitar que queden rampas sin borrar.


NOTA: Es importante usar return 1 si se cumple un if para que los demas if no se continuen comprobando.
Reply
#6

Josta, una pregunta off-topic...
Que onda con tu firma? Que es eso de SendClientMessageEncoded? wtf
Reply
#7

Es un texto encriptado, busca haber si lo puedes desencriptar.
Y lo de SendClientMessageEncoded es inventado por mi xD
Reply
#8

Josta, el SendClientMessageEncoded se podria crear, vos usas
new string[] = "4f74726f206d617320646573656e6372697074616e646f206 d6920737472696e6720784444"
SendClientMessageEncoded(playerid,-1,string);

Y el "SendClientMessageEncoded" lo que hace es enviar el texto al jugador, pero DECODIFICADO. Se podria usar para el envio de, por ejemplo, "codigos" para abrir X puertas de un GM, y el jugador encontraria estos textos codificados en una computadora, y los decodificaria con algun programa en la misma. Seria mas facil hacer un random de posibilidades que le de la contraseсa al jugador dependiendo de si lo logra o no, pero esto seria algo mas detallado xD.
Reply
#9

Josta yo no quiero algo haci xD

mira mejor explicado. Las rampas se activan con /rampa. Luego al apretar x Tecle sale la rampa Chica y al apretar x Tecla (diferente) tendria que salir una diferente (grande en este caso). Pero al hacer lo que yo hice sale bug siempre sale la rampa Chica. El problema es al setear que rampa va a usar si "Grande" o "Chica" y se setea al ver que tecla aprieta.
Reply
#10

pawn Код:
if (PRESSED(KEY_ACTION)) // Si esta apretу KEY_ACTION la rampa grande se desabilitarб (false)
    gRampaGrande[playerid] = false;
else if (PRESSED(KEY_SECONDARY_ATTACK)) // Si esta apretу KEY_SECONDARY_ATTACKla rampa grande se habilitarб (true)
    gRampaGrande[playerid] = true;
else
    return 1; // De lo contrario termina el callback
Prueba con eso
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)