SA-MP Forums Archive
IsPlayerInRangeOfPoint/Command problem - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: IsPlayerInRangeOfPoint/Command problem (/showthread.php?tid=156823)



IsPlayerInRangeOfPoint/Command problem - wofka13 - 24.06.2010

(Sry for bad English )
Hi all,
i have a problem,
this is my cmd:

Код:
if(strcmp(cmd,"/kaufen",true)==0)
	{
		for(new i=0;i<MAX_HOUSES;i++)
		{
		  if(IsPlayerInRangeOfPoint(playerid, 3.0, HausInfo[i][eX], HausInfo[i][eY], HausInfo[i][eZ]))
		  {
		    if(GetPlayerMoney(playerid) < HausInfo[i][Preis])
				{
		    	new Name[MAX_PLAYER_NAME];
			    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
					GivePlayerMoney(playerid, - HausInfo[i][Preis]);
					strmid(HausInfo[i][Besitzer], Name, 0, strlen(Name), 24);
					HausInfo[i][Vergeben] = 1;
					SendClientMessage(playerid, FARBE_WEIЯ,"Du hast das Haus gekauft, um Befehle anzusehen schreibe /hauscmds !");
					return 1;
				}
				else
				{
				  SendClientMessage(playerid,FARBE_WEIЯ,"Du hast zu wenig Geld, du musst zuerst das Geld auf der Hand haben.");
				  return 1;
			 	}
		  }
		  else
		  {
        SendClientMessage(playerid, FARBE_WEIЯ,"Du befindest dich nicht an einem Haus das zum Verkauf steht!");
        return 1;
   		}
		}
		return 1;
	}
It does not matter whether I have enough money or not at the house bin, there is always the last SendClientMessage.
What is the problem?


Re: IsPlayerInRangeOfPoint/Command problem - bajskorv123 - 24.06.2010

Ich weiЯ nicht, Ich kann nicht Deutsch sprechen
(Not very good xD)


Re: IsPlayerInRangeOfPoint/Command problem - KuHS - 24.06.2010

Simply the command checks for all houses within for() looping with returns, so it's wrong. Example: 1 house, it checks, and it's not found, it sends a message, when returns and don't check for 2 house... am i right? I suggest you to use continue; function in for() loops. In for() loops return stops looping, continue just ends variable looping.

BTW. If you want to send end message, send it before for() looping.

Код:
if(strcmp(cmd,"/kaufen",true)==0)
	{
		for(new i=0;i<MAX_HOUSES;i++)
		{
		  if(!IsPlayerInRangeOfPoint(playerid, 3.0, HausInfo[i][eX], HausInfo[i][eY], HausInfo[i][eZ])) continue;
		    if(GetPlayerMoney(playerid) < HausInfo[i][Preis])
				{
		    	new Name[MAX_PLAYER_NAME];
			    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
					GivePlayerMoney(playerid, - HausInfo[i][Preis]);
					strmid(HausInfo[i][Besitzer], Name, 0, strlen(Name), 24);
					HausInfo[i][Vergeben] = 1;
					SendClientMessage(playerid, FARBE_WEIЯ,"Du hast das Haus gekauft, um Befehle anzusehen schreibe /hauscmds !");
					return 1;
				}
				else
				{
				  SendClientMessage(playerid,FARBE_WEIЯ,"Du hast zu wenig Geld, du musst zuerst das Geld auf der Hand haben.");
				  return 1;
			 	}
		}
		return 1;
	}



Re: IsPlayerInRangeOfPoint/Command problem - wofka13 - 24.06.2010

Quote:
Originally Posted by KuHS
Simply the command checks for all houses within for() looping with returns, so it's wrong. Example: 1 house, it checks, and it's not found, it sends a message, when returns and don't check for 2 house... am i right? I suggest you to use continue; function in for() loops. In for() loops return stops looping, continue just ends variable looping.

BTW. If you want to send end message, send it before for() looping.

Код:
if(strcmp(cmd,"/kaufen",true)==0)
	{
		for(new i=0;i<MAX_HOUSES;i++)
		{
		  if(!IsPlayerInRangeOfPoint(playerid, 3.0, HausInfo[i][eX], HausInfo[i][eY], HausInfo[i][eZ])) continue;
		    if(GetPlayerMoney(playerid) < HausInfo[i][Preis])
				{
		    	new Name[MAX_PLAYER_NAME];
			    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
					GivePlayerMoney(playerid, - HausInfo[i][Preis]);
					strmid(HausInfo[i][Besitzer], Name, 0, strlen(Name), 24);
					HausInfo[i][Vergeben] = 1;
					SendClientMessage(playerid, FARBE_WEIЯ,"Du hast das Haus gekauft, um Befehle anzusehen schreibe /hauscmds !");
					return 1;
				}
				else
				{
				  SendClientMessage(playerid,FARBE_WEIЯ,"Du hast zu wenig Geld, du musst zuerst das Geld auf der Hand haben.");
				  return 1;
			 	}
		}
		return 1;
	}
Thanks for the answer, but I have still one error,
namely from here:

Код:
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
GivePlayerMoney(playerid, - HausInfo[i][Preis]);
strmid(HausInfo[i][Besitzer], Name, 0, strlen(Name), 24);
HausInfo[i][Vergeben] = 1;
SendClientMessage(playerid, FARBE_WEIЯ,"Du hast das Haus gekauft, um Befehle anzusehen schreibe /hauscmds !");
return 1;
The 2 lines are not running:

Код:
strmid(HausInfo[i][Besitzer], Name, 0, strlen(Name), 24);
HausInfo[i][Vergeben] = 1;
Whats here the problem?
Thx


Re: IsPlayerInRangeOfPoint/Command problem - KuHS - 24.06.2010

strmid(HausInfo[i][Besitzer], Name, 0, Besitzer_lenght);

Try this.


Re: IsPlayerInRangeOfPoint/Command problem - wofka13 - 24.06.2010

What do you mean?
The lenght is 24 yes or no? xD sry, im a newbie.
Код:
enum hInfo
{
	Float:eX,
	Float:eY,
	Float:eZ,
	Float:aX,
	Float:aY,
	Float:aZ,
	Preis,
	Besitzer[24],
	Vergeben,
	Miete,
};
new HausInfo[MAX_HOUSES][hInfo];
If I /kaufen write should actually refer to the house written file will be and as I have a loop have should the game text to change even as I the / kaufen command HausInfo[house] [Vergeben] = 1;
and my loop looks like from:

Код:
if(HausInfo[i][Vergeben] == 1)
				{
    			format(bString, 64, "Preis%d", i);
				 	HausInfo[i][Preis] = INI_ReadInt(bString);
				  	format(bString, 64, "Besitzer%d", i);
					INI_ReadString(HausInfo[i][Besitzer],bString,24);
					format(bString,sizeof(bString),"~g~.:Haus Informationen:.~n~~w~Mietkosten: %d ~y~~n~Besitzer: %s~n~~w~Tippe /mieten um ein Zimmer zu mieten ~b~",HausInfo[i][Preis],HausInfo[i][Besitzer]);
					GameTextForPlayer(playerid,bString,2500,3);
				}
  			else
				{
    			format(bString, 64, "Preis%d", i);
				 	HausInfo[i][Preis] = INI_ReadInt(bString);
				 	format(bString, 64, "Besitzer%d", i);
					INI_ReadString(HausInfo[i][Besitzer],bString,24);
		 		 	format(bString,sizeof(bString),"~g~.:Haus Informationen:.~n~~w~Haus Preis: %d ~y~~n~Besitzer: %s ~b~~n~~w~Tippe /kaufen um das Haus zu kaufen",HausInfo[i][Preis],HausInfo[i][Besitzer]);
					GameTextForPlayer(playerid,bString,2500,3);
  			}
But is it still HausInfo.....[Vergeben] == 0
My english is very bad i hope u understand it xD