Jump to content
  • 0

Cum pun bind pe o tasta la o comanda?


Question

Posted (edited)

Problema intalnita (descriere): Doresc sa pun bind pe o tasta la o comanda de exemplu " /enter ; /exit ; /lock " si multe alte comenzi . Intrebarea este unde ar trebui sa adaug ceva la aceasta comanda?
Ero(area / rile) / warning-(ul / urile): Nu am nici o eroare deoarece nu am incercat singur, pentru ca nu stiu ce trebuie sa modific
Liniile de cod / sursa / script-ul(obligatoriu): 
 

        if(strcmp(cmd, "/enter", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            for(new i = 0; i < housess; i++)
            {
                if (PlayerToPoint(3, playerid,HouseData[i][hEntrancex], HouseData[i][hEntrancey], HouseData[i][hEntrancez]))
                {
                    if(PlayerData[playerid][pPhousekey] == i || HouseData[i][hLock] == 0)
                    {
                        SetPlayerInterior(playerid,HouseData[i][hInt]);
                        SetPlayerVirtualWorld(playerid,HouseData[i][hWorld]);
                        SetPlayerPos(playerid,HouseData[i][hExitx],HouseData[i][hExity],HouseData[i][hExitz]);
                        GameTextForPlayer(playerid, "~w~Bine ai venit acasa", 5000, 1);
                        PlayerData[playerid][pInt] = HouseData[i][hInt];
                        PlayerData[playerid][pLocal] = i;
                        SetPlayerVirtualWorld(playerid,i);
                        InHouse[playerid] = i;
                    }
                    else
                    {
                        GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
                    }
                }
            }


Imagini / Video (optional): -.-
Ati incercat sa rezolvati singur?: Nu, nu stiu ce trebuie sa modific 

 

P.S: As vrea un raspuns explicit cum si unde trebuie sa modific.

Edited by Masodion
Schimbat comanda din /exit in /enter

16 answers to this question

Recommended Posts

  • 0
Posted (edited)

Uite poate te ajuta acest link !

http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange

 

Cred ca ar veni asa:

// PRESSED(keys)
#define PRESSED(%0) \
	(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_SECONDARY_ATTACK)) // Apesi tasta Enter
    {
		if(IsPlayerConnected(playerid))
		{
			for(new i = 0; i <  sizeof(HouseInfo); i++)
			{
				if (PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]) && InHouse[playerid] == i)
				{
					SetPlayerInterior(playerid,0);
					SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
					PlayerData[playerid][pInt] = 0;
					SetPlayerVirtualWorld(playerid, 0);
					PlayerData[playerid][pLocal] = 255;
					InHouse[playerid] = 0;
					if(HouseInfo[i][hHel] == 1)
					{
						new Float:tempheal;
						GetPlayerHealth(playerid,tempheal);
						if(tempheal < 100.0)
						{
							SetPlayerHealth(playerid,100.0);
						}
					}
				}
			}
		}
	}
	return 1;    
}

 

Edited by sRk7

"Mulţi programatori buni fac programare nu pentru că se aşteaptă să câştige bani sau să fie lăudaţi de public, ci pentru că e amuzant să programezi." - Linus Torvalds

  • 0
Posted

Nici eu nu stiu cum se foloseste bin-ul pe taste, euu doar ti-am dat un exemplu care la-am gasit pe wiki ... documenteazate si tu pe wki poate intelegi ceva !

  • Upvote 1

"Mulţi programatori buni fac programare nu pentru că se aşteaptă să câştige bani sau să fie lăudaţi de public, ci pentru că e amuzant să programezi." - Linus Torvalds

  • 0
Posted

Pentru a putea intra intr-o cladire apasand pe enter trebuie sa te folosesti de callback-ul OnPlayerKeyStateChanged, cum a fost aratat mai sus.

 

Practic trebuie sa-i pui urmatoarele conditii : Daca playerul se afla intr-o locatie unde se poate da /enter, /exit, etc. si daca playerul apasa pe tasta Enter sa execute codul de intrare.

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_SECONDARY_ATTACK)) // Daca playerul apasa tasta Enter
    {
		if(IsPlayerConnected(playerid)) // si daca playerul este conectat
		{
			if(IsPlayerInRangeOfPoint(playerid, x, y, z)) // si daca jucatorul se afla intr-o locatie de /enter sau /exit
			{
			    // Cod care baga playerul in cladire
			}
		}
    }
}

 

Posteaza comanda /enter si /exit din gamemode-ul tau aici.

 

  • 0
Posted

Comanda /enter

 

	if(strcmp(cmd, "/enter", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
		{
			for(new i = 0; i < housess; i++)
			{
				if (PlayerToPoint(3, playerid,HouseData[i][hEntrancex], HouseData[i][hEntrancey], HouseData[i][hEntrancez]))
				{
					if(PlayerData[playerid][pPhousekey] == i || HouseData[i][hLock] == 0)
					{
						SetPlayerInterior(playerid,HouseData[i][hInt]);
						SetPlayerVirtualWorld(playerid,HouseData[i][hWorld]);
						SetPlayerPos(playerid,HouseData[i][hExitx],HouseData[i][hExity],HouseData[i][hExitz]);
						GameTextForPlayer(playerid, "~w~Bine ai venit acasa", 5000, 1);
						PlayerData[playerid][pInt] = HouseData[i][hInt];
						PlayerData[playerid][pLocal] = i;
						SetPlayerVirtualWorld(playerid,i);
						InHouse[playerid] = i;
					}
					else
					{
						GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
					}
				}
			}

 

Comanda /exit 

 

 

	if(strcmp(cmd, "/exit", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
		{
			for(new i = 0; i <  housess; i++)
			{
				if (PlayerToPoint(3, playerid,HouseData[i][hExitx], HouseData[i][hExity], HouseData[i][hExitz]) && InHouse[playerid] == i)
				{
					SetPlayerInterior(playerid,0);
					SetPlayerPos(playerid,HouseData[i][hEntrancex],HouseData[i][hEntrancey],HouseData[i][hEntrancez]);
					PlayerData[playerid][pInt] = 0;
					PlayerData[playerid][pLocal] = 255;
					SetPlayerVirtualWorld(playerid,0);
					InHouse[playerid] = 0;
					if(HouseData[i][hHel] == 1)
					{
						new Float:tempheal;
						GetPlayerHealth(playerid,tempheal);
						if(tempheal < 100.0)
						{
							SetPlayerHealth(playerid,100.0);
						}
					}
					return 1;
				}
			}

 

 

 

  • 0
Posted
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_SECONDARY_ATTACK)) // Daca playerul apasa tasta Enter
    {
		if(IsPlayerConnected(playerid)) // si daca playerul este conectat
		{
            for(new i = 0; i < housess; i++)
			{
				if (PlayerToPoint(3, playerid,HouseData[i][hEntrancex], HouseData[i][hEntrancey], HouseData[i][hEntrancez]))
				{
					if(PlayerData[playerid][pPhousekey] == i || HouseData[i][hLock] == 0)
					{
						SetPlayerInterior(playerid,HouseData[i][hInt]);
						SetPlayerVirtualWorld(playerid,HouseData[i][hWorld]);
						SetPlayerPos(playerid,HouseData[i][hExitx],HouseData[i][hExity],HouseData[i][hExitz]);
						GameTextForPlayer(playerid, "~w~Bine ai venit acasa", 5000, 1);
						PlayerData[playerid][pInt] = HouseData[i][hInt];
						PlayerData[playerid][pLocal] = i;
						SetPlayerVirtualWorld(playerid,i);
						InHouse[playerid] = i;
					}
					else
					{
						GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
					}
				}
			}
		}
    }
}

 

Pentru intrare ar fi ceva de genul. Dar trebuie sa te gandesti cum faci scriptul sa stie daca un jucator intra sau iese. Trebuie sa te folosesti de niste PlayerVariables. Cauta pe google cum sa folosesti player variables.

  • 0
Posted

Oh, am uitat sa le postez.

C:\Users\Mihai\Desktop\GameMode SA-MP RPG\gamemodes\GM.PWN(63024) : error 021: symbol already defined: "OnPlayerKeyStateChange"
C:\Users\Mihai\Desktop\GameMode SA-MP RPG\gamemodes\GM.PWN(63025) : error 017: undefined symbol "PRESSED"
C:\Users\Mihai\Desktop\GameMode SA-MP RPG\gamemodes\GM.PWN(63052) : warning 209: function "OnPlayerKeyStateChange" should return a value
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

 

  • 0
  • 0
Posted

Si sterge unul din callback-urile OnPlayerKeyStateChange, trebuie sa ai doar unul. La sfarsit trebuie sa aiba return 1;

  • 0
Posted

Multumes tuturor care mi-au raspuns. Dar mai am o problema, cand incerc la /exit nu merge cu tasta F sau ENTER.

 

Cum ar trebui sa fie la comanda /exit? 

 

La /enter e :

 

{
    if (PRESSED(KEY_SECONDARY_ATTACK)) // Daca playerul apasa tasta Enter
    {
		if(IsPlayerConnected(playerid)) // si daca playerul este conectat
		{
            for(new i = 0; i < housess; i++)
			{
				if (PlayerToPoint(3, playerid,HouseData[i][hEntrancex], HouseData[i][hEntrancey], HouseData[i][hEntrancez]))
				{
					if(PlayerData[playerid][pPhousekey] == i || HouseData[i][hLock] == 0)
					{
						SetPlayerInterior(playerid,HouseData[i][hInt]);
						SetPlayerVirtualWorld(playerid,HouseData[i][hWorld]);
						SetPlayerPos(playerid,HouseData[i][hExitx],HouseData[i][hExity],HouseData[i][hExitz]);
						GameTextForPlayer(playerid, "~w~Bine ai venit acasa", 5000, 1);
						PlayerData[playerid][pInt] = HouseData[i][hInt];
						PlayerData[playerid][pLocal] = i;
						SetPlayerVirtualWorld(playerid,i);
						InHouse[playerid] = i;
					}
					else
					{
						GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
					}
				}
			}
		}
    }
}

 

 

Si as mai vrea /exit si /enter la biz, am incercat sa modific HouseData si tot ce tine de House cu alea care le am eu la biz, si nu merge as compilez

  • 0
Posted

Ti-am spus ca mai sus care este faza cu /exit . Daca tu astepti cod gata facut ma tem ca nu se poate.

  • 0
Posted

Te rugam sa faci putin research legat de problema. Daca tot nu reusesti te rugam sa revii cu un topic separat! Multumim

Topic closed.

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.