[Ajuda] Ativar Item ?
#1

Bom Galerra, vim aqui para pedir ajuda pra vocкs, estou fazendo um GM sobre zombies, jб indo bem, sem erros. Porйm gostaria de adicionar um funзгo chamada /perks, estб funзгo somente poderia ser ativada caso ele selecionasse um item.

Exemplo: ele selecionou o perk " high jump ", Entгo o cуdigo que estб no OnPlayerKeyStateChange seria ativado, e caso ele mudasse de perk, " selecionasse o " empty " que й vбzio, o perk " high jump" fosse desativado.

Apenas retirei as partes necessбrias para o funcionamento, obrigado por ajudar.



Код:
new Menu:perksz;

public OnGameModeInit()
{  
   AddMenuItem(perksz, 0, "High Jump");
   AddMenuItem(perksz, 0, "Empty");
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/perks", true) == 0)
	{
        if(gTeam[playerid] == ZOMBIE)
	    {
		    ShowMenuForPlayer(perksz, playerid); 
		    TogglePlayerControllable(playerid, false);  
		    SendClientMessage(playerid, 0xFFFFFFAA, "Select a perk !"); 
		    return 1;
	    }
	}
	return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{   
    if(newkeys & KEY_JUMP)
    {
         if(gTeam[playerid] == ZOMBIE)
         {
             new Float:SuperJump[3];
             GetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]);
             SetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]+5);
		 }
    }
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    new Menu:CurrentMenu = GetPlayerMenu(playerid);
	if(CurrentMenu == perksz) // Por isso essas linhas <
	{
		switch(row) // Agora й cada opзгo por si
		{
			case 0: // PERK JUMP
			{
                             if(gTeam[playerid] == 	ZOMBIE)
	                    {
                                 new Float:SuperJump[3];
                                 GetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]);
                                 SetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]+5);
		                 TogglePlayerControllable(playerid, 1);
			    }
			}
			case 1: 
			{
				TogglePlayerControllable(playerid, 1);
				SendClientMessage(playerid, 0xFFFFFFAA, "> You didn't choose any item !"); 
			}
		}
	}
        TogglePlayerControllable(playerid,1);	
	VerifyInventoryMenuRowSelected(playerid, row);
	DestroyPlayerInventoryMenu(playerid);
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
        TogglePlayerControllable(playerid, true);
	return 1;
}
Reply
#2

Utilize uma bool.

pawn Код:
//topo
new bool:p[MAX_PLAYERS];

//quando ele escolher high jump
p[playerid] = true;
//quando ele escolher empty
p[playerid] = false;

//troque o KEY_JUMP por esse
if(newkeys & KEY_JUMP && p[playerid])
Reply
#3

pawn Код:
new bool: Empty[MAX_PLAYERS];
new Menu: perksz;

public OnGameModeInit() {
    AddMenuItem(perksz, 0, "High Jump");
    AddMenuItem(perksz, 0, "Empty");
}

public OnPlayerCommandText(playerid, cmdtext[]) {
    if (strcmp(cmdtext, "/perks", true) == 0) {
        if (gTeam[playerid] == ZOMBIE) {
            ShowMenuForPlayer(perksz, playerid);
            TogglePlayerControllable(playerid, false);
            SendClientMessage(playerid, 0xFFFFFFAA, "Select a perk !");
            return 1;
        }
    }
    return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if (newkeys & KEY_JUMP) {
        if (gTeam[playerid] == ZOMBIE && !Empty[playerid]) {
            new Float: SuperJump[3];
            GetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]);
            SetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2] + 5);
        }
    }
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row) {
    new Menu: CurrentMenu = GetPlayerMenu(playerid);
    if (CurrentMenu == perksz) // Por isso essas linhas <
    {
        switch (row) // Agora й cada opзгo por si
        {
        case 0:
            // PERK JUMP
            {
                if (gTeam[playerid] == ZOMBIE) {
                    new Float: SuperJump[3];
                    GetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2]);
                    SetPlayerVelocity(playerid, SuperJump[0], SuperJump[1], SuperJump[2] + 5);
                    TogglePlayerControllable(playerid, 1);
                    Empty[playerid] = false;
                }
            }
        case 1:
            {
                TogglePlayerControllable(playerid, 1);
                SendClientMessage(playerid, 0xFFFFFFAA, "> You didn't choose any item !");
                Empty[playerid] = true;
            }
        }
    }
    TogglePlayerControllable(playerid, 1);
    VerifyInventoryMenuRowSelected(playerid, row);
    DestroyPlayerInventoryMenu(playerid);
    return 1;
}

public OnPlayerExitedMenu(playerid) {
    TogglePlayerControllable(playerid, true);
    return 1;
}
Prontinho, espero ter ajudado!
Reply
#4

Obrigado pessoal, Vocкs me iluminaram. Ambo levaram RESP+ pela ajuda, agora sim poderia adicionar mais perks.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)