Detecciуn de Q y E
#1

Hola, solo querнa pregunta acerca de ideas de como detectar la letra Q y E para saber si estб cambiando el arma de manera descendete o ascendente. Yo tenнa una idea, y de hecho la hice, pero se suele buguear algunas veces, en especial cuando pasas con la ruedita del ratуn muchas veces, es decir es como que muy sensible. Lo que hice para detectarla fue poner una Camara al jugador.. entonces cuando estaba la cбmara puesta significaba que habнa presionado la E y si ubicaba el Puсo no siendo el ultimo arma pues significaba que presionaba la Q, esto lo hice y funcionу de manera perfecta, si quieren aquн estб el cуdigo de como lo hice y si quieren me ayudan a hacerlo mбs eficiente (ya que confнo en sus talentos) (http://pastebin.com/pthe9MME), les explico un poco mбs xD.

Las armas se ordenaban asн.

Puсo - Arma que tocaba del slot del Inventario - Cбmara

A medida que iba avanzando con la cбmara se cambiaba el que estaba en medio, es decir el arma del slot del inventario. Tambiйn si ya pasaba el lнmite pues lo volvia a regresar al primero, y asн mismo con el puсo.
Todo esto lo hice dentro de la callback OnPlayerUpdate.

La cuestiуn de este post, es.. їHay una manera mejor de hacerla?

PD: si lo pasas muy rбpido con la ruedita te kickea por el actualizador de balas y el anticheat, hay un problema ahн. (pueden verlo en el cуdigo de pastebin)
Reply
#2

No sй cуmo quisiste hacer tu cуdigo pero creo que te complicas mucho cuando querйs lograr el objetivo principal, que es detectar cuando un jugador cambia de arma.

Acб va un cуdigo:
pawn Код:
static pLastWeapon[MAX_PLAYERS];

public OnPlayerUpdate(playerid)
{
    static weaponid;
    weaponid = GetPlayerWeapon(playerid);
   
    if(weaponid != pLastWeapon[playerid])
    {
        // Cambiу de arma
    }
   
    pLastWeapon[playerid] = weaponid;
    return 1;
}
Йso detectarнa cada vez que el jugador cambia de arma.
Era asн lo que pedнas?
Reply
#3

Mi objetivo no es detectar el cambio de arma, mi objetivo es saber si Presiona Q o E. En ese cуdigo solo detecta si cambia de arma, pero no sabrбs si presiono Q o E, si no que solo sabrбs que cambio de arma es decir que no sabes que tecla presionу.
Reply
#4

Lo que pasa es que SA-MP no detecta si un jugador presiona esas teclas en estado "On-Foot", por eso te dм ese cуdigo para maso menos resolver йso.
Reply
#5

Код:
static pLastWeapon[MAX_PLAYERS];

public OnPlayerUpdate(playerid)
{
	static weaponid;
	weaponid = GetPlayerWeapon(playerid);
	
	if(weaponid != pLastWeapon[playerid])
	{
	    if(GetWeaponSlot(weaponid) < GetWeaponSlot(pLastWeapon[playerid]))
            {
            //cambio hacia Q
            }
            else if(GetWeapondSlot(weaponid) > GetWeaponSlot(pLastWeapon[playerid]))
            {
             //cambio hacia E
            }
	}
	
	pLastWeapon[playerid] = weaponid;
	return 1;
}
stock GetWeaponSlot(weaponid)
{
new slot;
switch(weaponid)
{
case 0,1: slot = 0;
case 2 .. 9: slot = 1;
case 10 .. 15: slot = 10;
case 16 .. 18, 39: slot = 8;
case 22 .. 24: slot =2;
case 25 .. 27: slot = 3;
case 28, 29, 32: slot = 4;
case 30, 31: slot = 5;
case 33, 34: slot = 6;
case 35 .. 38: slot = 7;
case 40: slot = 12;
case 41 .. 43: slot = 9;
case 44 .. 46: slot = 11;
}
return slot;
}
proba asi
Reply
#6

no se entiende cual seria tu objetivo de detectar esas teclas.

PD: te estaba por poner el ejemplo como te puso FelipeBlanco, por que tal vez lo que tu quieres es detectar el slot/ranura/guardado donde se encuentra el arma.

saludos.
Reply
#7

A ver.. que el arma no se encuentra en el jugador puesta, estб en una variable simplemente, las armas unicamente que tiene el jugador es El puсo, el arma actual (que es en base a ese variable), y la cбmara. ( Lo que paso Felipe es aceptable, pero no es el funcioamiento que busco), mi objetivo es que por ejemplo en el inventario hay 2 (en la array de armas) Ak-47 o un arma perteneciente al mismo Slot del ak-47, pues lo que quiero es que si tiene repetida o son del mismo slot aъn asн la ponga, es decir hagamos un ejemplo.
Код:
ArrayDeArmas[] = {31, 31, 30, 10}; // Por ejemplo
ArrayDeArmasBalas = {100, 12, 20, 1); // Digamos que esas son las balas..
Y digamos que yo al dar Q y estando en el Slot 0, pues erнa una M4 y con 100 balas, al dar E, pues tendrнa una M4 y con 12 de balas y al dar Otra vez E tendrнa una Ak-47 con 20 balas.
Pues eso no se podrнa con lo que me pasу Fabian.. Mi codigo funciona y perfectamente, pero.. Al dar muchos cambios pues.. pasa algo extraсo.
Reply
#8

La verdad que no te entendi nada jajaja, lo que queres hacer es guardar armas en una variable (array) y poder cambiar las armas con q y e que se encuentran las variables, seria un metodo para poder tener varias armas con el mismo slot no?
Reply
#9

Lo que deberнas hacer es comprobar primero si el arma que tiene en mano estб entre algunas de las variables de las armas del jugador y luego actualizar las balas. Te debe detectar porque todo pasa muy rбpido y en alguna comprobaciуn no estбn sincronizadas las variables con lo que tiene el jugador en la mano.
Reply
#10

Quote:
Originally Posted by aoEXE
Посмотреть сообщение
Lo que deberнas hacer es comprobar primero si el arma que tiene en mano estб entre algunas de las variables de las armas del jugador y luego actualizar las balas. Te debe detectar porque todo pasa muy rбpido y en alguna comprobaciуn no estбn sincronizadas las variables con lo que tiene el jugador en la mano.
quizбs esa sea el problema realmente, quizбs especнficamente por las balas..

Quote:
Originally Posted by FelipeBlanco
Посмотреть сообщение
La verdad que no te entendi nada jajaja, lo que queres hacer es guardar armas en una variable (array) y poder cambiar las armas con q y e que se encuentran las variables, seria un metodo para poder tener varias armas con el mismo slot no?
exactamente eso..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)