Jump to content
  • 0

Cum pun bind pe o tasta la o comanda?


Masodion

Question

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
Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

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.

 

Link to comment
Share on other sites

  • 0

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;
				}
			}

 

 

 

Link to comment
Share on other sites

  • 0
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.

Link to comment
Share on other sites

  • 0

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.

 

Link to comment
Share on other sites

  • 0
  • 0

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

Link to comment
Share on other sites

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.