Problem With Server
#1

Hello i fixed stefans elite house system https://sampforum.blast.hk/showthread.php?tid=98767
and realized that the script using /enter /exit commands (As gl_Properties does. and i need to save my gl_properties file cuz dinner places and all is included in the file. but i cant either have 2 files wich does /enter /exit cuz then the command bugs so do you guys now how to do? maybe it works to delite /enter /exit from properties file or from elite house system? iam not a good scripter so could you guys take a look on it please? here is the scripts

"House System"

Код:
/*
 -------------------------------------------
|		  _____ _        __                 |
|		 / ____| |      / _|                |
|		| (___ | |_ ___| |_ __ _ _ __       |
|		 \___ \| __/ _ \  _/ _` | '_ \      |
|		 ____) | ||  __/ || (_| | | | |     |
|		|_____/ \__\___|_| \__,_|_| |_|     |
|                                           |
|        **   House System v1.0   **        |
|                                           |
 -------------------------------------------
      .:: Do not remove Credits ::.
*/

#include <a_samp>
#include <Dini>
#include <dudb>
#include <utils>

new FALSE = false;
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define SendFormattedMessage(%0,%1,%2) do{new _str[128]; format(_str,128,%2); SendClientMessage(%0,%1,_str);}while(FALSE)

#define COLOR_WHITE 			0xFFFFFFAA
#define COLOR_LIME		 		0x80FF00AA

#define MAX_HOUSES              100     // Max houses allowed to be created
#define PTP_RADIUS              2.0     // Radius of PlayerToPoint Function

forward SavePlayerHouse(houseid);
forward ReadPlayerHouseData(playerid);
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);

new Timer[1];

enum hInfo
{
	hName[24],
	hSellable,
	hSell,
	hRent,
	hLevel,
	hPickup,
	Float:hExitX,
	Float:hExitY,
	Float:hExitZ,
	hVirtualWorld,
	hLocked
};
new HouseInfo[MAX_HOUSES][hInfo];

new Float:HousesCoords[13][3] = {
{222.9534, 1287.7649, 1082.1406},   // Sml - 1 bedroom
{261.0827, 1284.6899, 1080.2578},   // Sml - 1 bedroom
{260.6734, 1237.7909, 1084.2578},   // Sml - 1 bedroom
{376.7426, 1417.3226, 1081.3281},   // Sml - 1 bedroom
{295.2874, 1473.2769, 1080.2578},   // Med - 2 bedroom
{327.9431, 1478.3801, 1084.4375}, // Med - 2 bedroom
{2270.1050, -1210.3917, 1047.5625},   // Med - 2 bedroom
{447.1211, 1397.8444, 1084.3047},   // Med - 2 bedroom
{2196.0063, -1204.6326, 1049.0234}, // Lrg - 3 bedroom
{235.3416, 1187.2882, 1080.2578},   // Lrg - 3 bedroom
{490.9987, 1399.4164, 1080.2578},   // Lrg - 3 bedroom
{227.1212, 1114.1840, 1080.9972},   // Lrg - 4 bedroom
{225.6624, 1022.5345, 1084.0145}    // Xlrg - 4 bedrooms
};

new HousesLevels[13][2] = {
{1, 2000},    // Sml - 1 bedroom
{4, 4500},    // Sml - 1 bedroom
{9, 7000},    // Sml - 1 bedroom
{15, 10000},  // Sml - 1 bedroom
{15, 17000},  // Med - 2 bedroom
{15, 23000},  // Med - 2 bedroom
{10, 34000},  // Med - 2 bedroom
{2, 62000},   // Med - 2 bedroom
{6, 102000},  // Lrg - 3 bedroom
{3, 156000},  // Lrg - 3 bedroom
{2, 188000},  // Lrg - 3 bedroom
{5, 235000},   // Lrg - 4 bedroom
{7, 295000}   // Xlrg - 4 bedrooms
};

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print("Stefan's House System");
	print("--------------------------------------\n");
	
	for(new i = 0; i <= MAX_PLAYERS; i++)
	{
	    Timer[0] = SetTimerEx("ReadPlayerHouseData", 1000, true, "%i", i);
	}
	for(new h = 0; h <= MAX_HOUSES; h++) // Player Homes
	{
	    LoadPlayerHouse(h);
	}
	return true;
}

public OnFilterScriptExit()
{
	KillTimer(Timer[0]);
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(househelp,9,cmdtext);
    dcmd(houseinfo,9,cmdtext);
	dcmd(enter,5,cmdtext);
	dcmd(exit,4,cmdtext);
	/*dcmd(evict,5,cmdtext);
	dcmd(renthouse,9,cmdtext);
	dcmd(unrenthouse,11,cmdtext);
	dcmd(tenants,7,cmdtext);*/
	dcmd(house,5,cmdtext);
	dcmd(lockhouse,9,cmdtext);
	dcmd(unlockhouse,11,cmdtext);
	dcmd(rentprice,9,cmdtext);
	dcmd(buyhouse,8,cmdtext);
	dcmd(sellhouse,9,cmdtext);
	dcmd(unsellhouse,11,cmdtext);
	dcmd(createhouse,11,cmdtext);
	dcmd(destroyhouse,12,cmdtext);
	
	return false;
}

///////////////////////////////////////
//	   Buisness + Homes Functions
//////////////////////////////////////

stock CreatePlayerHouse(playerid, sellprice, HouseLvl)
{
    if((ReturnNextUnusedHouseID()-1) >= MAX_HOUSES) return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: Maximum amount of houses on the server have been created.");
	new house[64], Float:X, Float:Y, Float:Z; GetPlayerPos(playerid, X, Y, Z);
	new NextHouseID = ReturnNextUnusedHouseID();
	new World = ReturnNextUnusedVirtualWorld();
	
	format(house, sizeof(house), "/Houses/%d.dini.save", NextHouseID);
	
	if(!dini_Exists(house)){
		dini_Create(house);
		dini_Set(house, "Name", "None");
		dini_IntSet(house, "For_Sell", 1);
		dini_IntSet(house, "Sell_Price", sellprice);
		dini_IntSet(house, "Rent_Price", 1000);
		dini_IntSet(house, "House_Level", HouseLvl);
 		dini_FloatSet(house,"Exit_Coord:X", X);
  		dini_FloatSet(house,"Exit_Coord:Y", Y);
    	dini_FloatSet(house,"Exit_Coord:Z", Z);
     	dini_IntSet(house, "VirtualWorld", World);
      	dini_IntSet(house, "Status", 0);
      	LoadPlayerHouse(NextHouseID);
       	SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: House has been Successfully created.");
	}
	return true;
}

stock LoadPlayerHouse(houseid)
{
    new house[64]; format(house, sizeof(house), "/Houses/%d.dini.save", houseid);
    if(dini_Exists(house)){
        format(HouseInfo[houseid][hName], MAX_PLAYER_NAME, "%s", dini_Get(house, "Name"));
        HouseInfo[houseid][hSellable]  	  =  dini_Int(house, "For_Sell");
		HouseInfo[houseid][hSell]  	 	  =  dini_Int(house, "Sell_Price");
       	HouseInfo[houseid][hRent]  	 	  =  dini_Int(house, "Rent_Price");
       	HouseInfo[houseid][hLevel] 		  =  dini_Int(house, "House_Level");
       	HouseInfo[houseid][hExitX]  	  =  dini_Float(house, "Exit_Coord:X");
       	HouseInfo[houseid][hExitY]  	  =  dini_Float(house, "Exit_Coord:Y");
        HouseInfo[houseid][hExitZ]  	  =  dini_Float(house, "Exit_Coord:Z");
       	HouseInfo[houseid][hVirtualWorld] =  dini_Int(house, "VirtualWorld");
       	HouseInfo[houseid][hLocked] 	  =  dini_Int(house, "Status");
       	
       	if(HouseInfo[houseid][hSellable] == 1){
		    HouseInfo[houseid][hPickup] = CreatePickup(1273, 23, HouseInfo[houseid][hExitX], HouseInfo[houseid][hExitY], HouseInfo[houseid][hExitZ]); // not bought
		} else {
		    HouseInfo[houseid][hPickup] = CreatePickup(1272,23, HouseInfo[houseid][hExitX], HouseInfo[houseid][hExitY], HouseInfo[houseid][hExitZ]); // bought
		}
	}
	return true;
}

public SavePlayerHouse(houseid)
{
    new house[64]; format(house, sizeof(house), "/Houses/%d.dini.save", houseid);
    if(dini_Exists(house)){
        dini_Set(house, "Name", HouseInfo[houseid][hName]);
        dini_IntSet(house, "For_Sell", HouseInfo[houseid][hSellable]);
		dini_IntSet(house, "Sell_Price", HouseInfo[houseid][hSell]);
       	dini_IntSet(house, "Rent_Price", HouseInfo[houseid][hRent]);
	 	dini_IntSet(house, "House_Level", HouseInfo[houseid][hLevel]);
       	dini_FloatSet(house, "Exit_Coord:X", HouseInfo[houseid][hExitX]);
       	dini_FloatSet(house, "Exit_Coord:Y", HouseInfo[houseid][hExitY]);
        dini_FloatSet(house, "Exit_Coord:Z", HouseInfo[houseid][hExitZ]);
       	dini_IntSet(house, "VirtualWorld", HouseInfo[houseid][hVirtualWorld]);
	  	dini_IntSet(house, "Status", HouseInfo[houseid][hLocked]);
	}
	return true;
}

stock ReturnNextUnusedHouseID()
{
    new house[64];
	for(new h = 0; h <= MAX_HOUSES; h++){
		format(house, sizeof(house), "/Houses/%d.dini.save", h);
		if(!dini_Exists(house)) return h; }
	return true;
}

stock ReturnNextUnusedVirtualWorld()
{
    new house[64]; // Please do not make more then 255 houses because that is the Maximum Virtual Worlds. Or use as many as you want in 0.3
	format(house, sizeof(house), "/Houses/%d.dini.save", ReturnNextUnusedHouseID()-1);
	return dini_Int(house, "VirtualWorld")+1;
}

public ReadPlayerHouseData(playerid)
{
	new string[256], house[64];
	for(new h = 0; h <= MAX_HOUSES; h++){
		format(house, sizeof(house), "/Houses/%d.dini.save", h);
	    if(dini_Exists(house)){
			if(HouseInfo[h][hSellable] == 1){
	  			if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])) {
					format(string, sizeof(string), "~g~] House for Sale ]~n~~w~Owner:~y~ %s~n~~w~Level:~r~ %d~n~~w~Sell Price:~r~ %d~n~~w~Rent Cost:~r~ %d", HouseInfo[h][hName], HouseInfo[h][hLevel], HouseInfo[h][hSell], HouseInfo[h][hRent]);
					GameTextForPlayer(playerid,string, 1500, 3);
				}
			} else if(HouseInfo[h][hSellable] == 0){
				if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])) {
					format(string, sizeof(string), "~w~Owner:~y~ %s~n~~w~Level:~r~ %d~n~~w~Rent Cost:~r~ %d", HouseInfo[h][hName], HouseInfo[h][hLevel], HouseInfo[h][hRent]);
					GameTextForPlayer(playerid,string, 1500, 3);
				} } } }
}

stock DestroyPlayerHouse(playerid, houseid)
{
	new house[64];
    format(house, sizeof(house), "/Houses/%d.dini.save", houseid);
    if(dini_Exists(house)){
		dini_Remove(house);
		DestroyPickup(HouseInfo[houseid][hPickup]);
		SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: The given house has been destroyed.");
	} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: The given house id does not exsist so it cannot be destroyed.");
	return false;
}

///////////////////////////
//     Dcmd Commands
//////////////////////////

dcmd_househelp(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		SendClientMessage(playerid, COLOR_WHITE,"[HOUSE OWNER]: /(un)sellhouse, /(un)lockhouse, /rentprice, /tenants, /evict, /house (upgrade/downgrade)");
		SendClientMessage(playerid, COLOR_WHITE,"[HOUSE PLAYERS]: /houseinfo, /buyhouse, /(un)renthouse");
	}
	return true;
}

dcmd_houseinfo(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
			    new IsLocked[24];
			    if(HouseInfo[h][hLocked] == 1) { IsLocked = "True"; } else { IsLocked = "False"; }
			    SendClientMessage(playerid, COLOR_LIME,"HOUSE STATS ----------------------------------------------------------");
			    SendFormattedMessage(playerid, COLOR_WHITE, "Owner: %s - Level[%d] - RentCost[$%d] - SellPrice[$%d]", HouseInfo[h][hName], HouseInfo[h][hLevel], HouseInfo[h][hRent], HouseInfo[h][hSell]);
			    SendFormattedMessage(playerid, COLOR_WHITE, "IsLocked[%s] - HouseID[%d] - ExitCoords[X:%.4f, Y:%.4f, Z:%.4f]", IsLocked, h, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ]);
			    SendClientMessage(playerid, COLOR_LIME,"----------------------------------------------------------");
	  		} } }
	return true;
}

dcmd_enter(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
		    	new Level = HouseInfo[h][hLevel];
		    	if(HouseInfo[h][hLocked] == 1 && strcmp(HouseInfo[h][hName],GetName(playerid), false ) != 0) return SendClientMessage(playerid, COLOR_WHITE,  ".:: [HOUSE]: This house has been locked by the owner.");
	    		SetPlayerPos(playerid, HousesCoords[Level][0], HousesCoords[Level][1], HousesCoords[Level][2]);
	   			SetPlayerInterior(playerid, HousesLevels[Level][0]); SetPlayerVirtualWorld(playerid, HouseInfo[h][hVirtualWorld]);
	  		} } }
	return true;
}

dcmd_exit(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HousesCoords[HouseInfo[h][hLevel]][0], HousesCoords[HouseInfo[h][hLevel]][1], HousesCoords[HouseInfo[h][hLevel]][2])){
       		SetPlayerPos(playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ]);
	   		SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0);
		    } } }
}

/*dcmd_evict(playerid,params[]) { // This needs to be intergrated with your players .ini account
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		new giveplayerid;
		if(sscanf(params, "i", giveplayerid)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /evict [id]");
		if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_WHITE, "The given player does not exist");
		
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
				    if(PlayerInfo[giveplayerid][pHouse] != h) return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: This player is not renting your house.");
				    PlayerInfo[giveplayerid][pHouse] = -1; PlayerUpdate(giveplayerid);
				    SendFormattedMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You have evicted %s[%d] from your house.", GetName(giveplayerid), giveplayerid);
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
			} } }
	return true;
}

dcmd_tenants(playerid,params[]) { // This needs to be intergrated with your players .ini account
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new i = 0; i <= MAX_PLAYERS; i++){
		    for(new h = 0; h <= MAX_HOUSES; h++){
			    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
				    if(PlayerInfo[i][pHouse] == h){
						if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
							PlayerInfo[giveplayerid][pHouse] = -1;
							SendClientMessage(playerid, COLOR_LIME, "_---- Tenants ----");
							SendFormattedMessage(playerid, COLOR_WHITE, "%s[%d]", GetName(i), i);
						} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
					} } } } }
	return true;
}

dcmd_renthouse(playerid,params[]) { // This needs to be intergrated with your players .ini account
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
			    if(HouseInfo[h][hName] == "Name") return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: No one has bought this house so you cannot rent from here.");
		    	if(PlayerInfo[playerid][pHouse] != -1) return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: You are allready renting a house. Use /unrenthouse to stop renting there.");
			    PlayerInfo[playerid][pHouse] = h; PlayerUpdate(giveplayerid);
			    SendFormattedMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are now renting from %s.", HouseInfo[h][hName]);
			} } }
	return true;
}

dcmd_unrenthouse(playerid,params[]) { // This needs to be intergrated with your players .ini account
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		if(PlayerInfo[playerid][pHouse] == -1) return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: You are not renting a house.");
		PlayerInfo[playerid][pHouse] = -1; PlayerUpdate(giveplayerid);
		SendFormattedMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not renting from %s anymore.", HouseInfo[h][hName]);
		}
	return true;
}
*/

dcmd_buyhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
	    for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
		        if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) != 0){
		        	if(HouseInfo[h][hSellable] == 1){
			            if(GetPlayerMoney(playerid) < HouseInfo[h][hSell]) return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You do not have anough money to buy this house.");
			        	DestroyPickup(HouseInfo[h][hPickup]);
			        	HouseInfo[h][hPickup] = CreatePickup(1272,23, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ]); // bought
						HouseInfo[h][hSellable] = 0; GivePlayerMoney(playerid, -HouseInfo[h][hSell]);
			        	format(HouseInfo[h][hName], 24, "%s", GetName(playerid)); SavePlayerHouse(h);
          			} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: This house is not for sale.");
   				} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are cannot buy the house you are selling.");
		    } } }
	return true;
}

dcmd_rentprice(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		new Price;
		if(sscanf(params, "i", Price)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /rentprice [rentprice]");
		if(Price < 0 || Price > 10000) return SendClientMessage(playerid, COLOR_WHITE, "You cannot set the rent price below 0 or above 10k");
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
				    HouseInfo[h][hRent] = Price; SavePlayerHouse(h);
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
			} } }
	return true;
}

dcmd_house(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		new tmp[64];
		if(sscanf(params, "s", tmp)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /house (upgrade/downgrade)");
		SendFormattedMessage(playerid, COLOR_WHITE, "Houses: 0[%d], 1[%d], 2[%d], 3[%d], 4[%d], 5[%d], 6[%d]", HousesLevels[0][1], HousesLevels[1][1], HousesLevels[2][1], HousesLevels[3][1], HousesLevels[4][1], HousesLevels[5][1], HousesLevels[6][1]);
		SendFormattedMessage(playerid, COLOR_WHITE, "7[%d], 8[%d], 9[%d], 10[%d], 11[%d], 12[%d]", HousesLevels[7][1], HousesLevels[8][1], HousesLevels[9][1], HousesLevels[10][1], HousesLevels[11][1], HousesLevels[12][1]);
		if(strlen(tmp) == strlen("upgrade")){
			for(new h = 0; h <= MAX_HOUSES; h++){
			    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
					if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
					    if(HouseInfo[h][hLevel]+1 > 12) return SendClientMessage(playerid, COLOR_WHITE, "You cannot set your house lvl above 12");
					    new Level = HousesLevels[HouseInfo[h][hLevel]+1][1];
					    SendFormattedMessage(playerid, COLOR_WHITE, "You have added improvments to your house that costs $%d", Level);
					    HouseInfo[h][hLevel] = (HouseInfo[h][hLevel]+1); GivePlayerMoney(playerid, -Level);
						SavePlayerHouse(h);
	          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house."); } }
		}
	    if(strlen(tmp) == strlen("downgrade")){
		    for(new h = 0; h <= MAX_HOUSES; h++){
			    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
					if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
					    if(HouseInfo[h][hLevel]-1 < 0) return SendClientMessage(playerid, COLOR_WHITE, "You cannot set your house lvl below 0");
					    new Level = HousesLevels[HouseInfo[h][hLevel]-1][1];
					    SendFormattedMessage(playerid, COLOR_WHITE, "You have removed improvments done to your house and have been refunded $%d", Level);
					    HouseInfo[h][hLevel] = (HouseInfo[h][hLevel]-1); GivePlayerMoney(playerid, Level);
						SavePlayerHouse(h);
	          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house."); } }
		}
	}
	return true;
}

dcmd_lockhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
     				if(HouseInfo[h][hLocked] == 1) return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: This house is allready locked.");
				    HouseInfo[h][hLocked] = 1; SavePlayerHouse(h);
				    SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You house has been locked.");
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
		    } } }
	return true;
}

dcmd_unlockhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
     			    if(HouseInfo[h][hLocked] == 0) return SendClientMessage(playerid, COLOR_WHITE, ".:: [ERROR]: This house is allready unlocked.");
				    HouseInfo[h][hLocked] = 0; SavePlayerHouse(h);
				    SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You house has been unlocked.");
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
		    } } }
	return true;
}

dcmd_sellhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		new Sell;
		if(sscanf(params, "i", Sell)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /sellhouse [sellprice]");
		if(Sell < 0 || Sell > 5000000) return SendClientMessage(playerid, COLOR_WHITE, "You cannot set the sell price below 0 or above 5 Mill");
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
	        		DestroyPickup(HouseInfo[h][hPickup]);
	   				HouseInfo[h][hPickup] = CreatePickup(1273, 23, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ]); // not bought
				    HouseInfo[h][hSellable] = 1; HouseInfo[h][hSell] = Sell; SavePlayerHouse(h);
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
		    } } }
	return true;
}

dcmd_unsellhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		for(new h = 0; h <= MAX_HOUSES; h++){
		    if(PlayerToPoint(PTP_RADIUS, playerid, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ])){
     			if(strcmp(HouseInfo[h][hName],GetName(playerid), false ) == 0){
	        		DestroyPickup(HouseInfo[h][hPickup]);
		        	HouseInfo[h][hPickup] = CreatePickup(1272,23, HouseInfo[h][hExitX], HouseInfo[h][hExitY], HouseInfo[h][hExitZ]); // bought
				    HouseInfo[h][hSellable] = 0; SavePlayerHouse(h);
          		} else return SendClientMessage(playerid, COLOR_WHITE, ".:: [HOUSE]: You are not the owner of this house.");
			} } }
	return true;
}

dcmd_createhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		//if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid,COLOR_WHITE,"SERVER: Unknown command.");
		if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Only admins allowed to use this command");
		new Sell, lvl;
		if(sscanf(params, "ii", Sell, lvl)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /createhouse [sellprice] [HouseLvl]");
		if(Sell < 0 || Sell > 5000000) return SendClientMessage(playerid, COLOR_WHITE, "You cannot set the sell price below 0 or above 5 Mill");
		if(lvl < 0 || lvl > 12) return SendClientMessage(playerid, COLOR_WHITE, "You cannot create a house lvl that is below 0 or above 12");
		CreatePlayerHouse(playerid, Sell, lvl); }
	return true;
}

dcmd_destroyhouse(playerid,params[]) {
	#pragma unused params
	if(IsPlayerConnected(playerid)){
		//if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid,COLOR_WHITE,"SERVER: Unknown command.");
		if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Only admins allowed to use this command");
	  	new houseid;
		if(sscanf(params, "i", houseid)) return SendClientMessage(playerid, COLOR_WHITE, "[USAGE]: /destroyhouse [houseid]");
		DestroyPlayerHouse(playerid, houseid);}
	return true;
}

///////////////////////////
//   Standard Functions
//////////////////////////

stock GetName(playerid)
{
	new pname[MAX_PLAYER_NAME]; pname="Invalid PlayerID";
	if(IsPlayerConnected(playerid)) {
		GetPlayerName(playerid, pname, sizeof (pname));
	}
	return pname;
}

public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
	new Float:oldposx, Float:oldposy, Float:oldposz;
	new Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	tempposx = (oldposx -x); tempposy = (oldposy -y); tempposz = (oldposz -z);
	if(((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
	{ return true; }
	return false;
}
Gl_Properties file.

Код:
//-------------------------------------------------------
//
// GRAND LARCENY Property creation and management script
//
// by damospiderman 2008
//
//-------------------------------------------------------

#include <a_samp>
#include "../include/gl_common.inc"

#define FILTERSCRIPT
//#define USE_SQLITE

#define PROP_VW    		(10000)
#define MAX_INTERIORS	(146)
#define MAX_PROPERTIES  (1000)

#define PROPERTY_FOLDER	"properties" // Location of properties file
#define PROPERTY_UNIQID_FILE    "properties/uniqId.txt" // Location of Uniq Interior Info
#define DB_PROPERTIES   "properties/dbProperties.db" // Location of the properties Database

#define MAX_TYPES       (5)
#define TYPE_EMPTY      (0)
#define TYPE_HOUSE 		(1)
#define TYPE_BUSINESS	(2)
#define TYPE_BANK   	(3)
#define TYPE_COP        (4)

enum // Property Type Enum
	E_P_TYPES {
		tIcon,
		tName[32]
	}

enum // Uniq Interiors Enum
	E_INTERIORS {
		inIntID,
		Float:inExitX,
		Float:inExitY,
		Float:inExitZ,
		Float:inExitA,
		inName[64]
	};

enum // Properties Enum
	E_PROPERTIES {
		eInterior,
		eType,
		Float:eEntX,
		Float:eEntY,
		Float:eEntZ,
		Float:eEntA,
		eUniqIntId,
		eOwner,
		ePrice,
		ePname[64]
	};

//  [ uniq property id ]
new	unid;

//	[ Array of all the property interior info ]
new interiorInfo[MAX_INTERIORS][E_INTERIORS];

//	[ Pickup array with property id assigned via array slot ( pickupid ) ]
new propPickups[MAX_PROPERTIES] = {-1};

//	[ Handles for 3D text displayed at property entrances ]
new Text3D:propTextInfo[MAX_PROPERTIES];

// 	[ Mass array of all the properties and info about them ]
new properties[MAX_PROPERTIES][E_PROPERTIES];

//	[ The last pickup the player went through so they can do /enter command ]
new lastPickup[MAX_PLAYERS] = {-1};

//	[ Current property Unique Interior the player is in.. defaults to -1 when not in any property ]
new currentInt[MAX_PLAYERS] = {-1};

//	[ Player Position array to store the last place the player was before /view command so they can be teleported back ]
new Float:plPos[MAX_PLAYERS][3];

//	[ Players actual interior id used for /view /return command ]
new plInt[MAX_PLAYERS];

//  [ Array of property type iconid's and strings for property type ]
new propIcons[MAX_TYPES][E_P_TYPES] =	{
											{ 0, "" }, 					// TYPE_EMPTY ( not used )
											{ 1273, "House" }, 			// TYPE_HOUSE green house icon
											{ 1272, "Business" }, 		// TYPE_BUSINESS blue house icon
											{ 1274, "Bank" }, 			// TYPE_BANK dollar sign icon
											{ 1247, "Police Station" }	// TYPE_COP Bribe Star 1247
										};
										
new	propFile[MAX_TYPES][64] =   {
									{ "blank" },
		                            { "properties/houses.txt" },
		                            { "properties/businesses.txt" },
		                            { "properties/banks.txt" },
		                            { "properties/police.txt" }
							 	};
							 	
//  Keep track of what properties we've sent an /enter notification for
new gLastPropertyEnterNotification[MAX_PLAYERS];


/********************************
*   Interior Info Functions     *
********************************/
stock Float:GetInteriorExit( id, &Float:x, &Float:y, &Float:z ){
	if( id > MAX_INTERIORS ) return 0.0;
	else {
	    x = interiorInfo[id][inExitX];
	    y = interiorInfo[id][inExitY];
	    z = interiorInfo[id][inExitZ];
		return interiorInfo[id][inExitA];
	}
}

// Gets interior exit info from uniq Interior Id. Returns InteriorId or -1 if interior doesn't exist
stock GetInteriorExitInfo( uniqIntId, &Float:exitX, &Float:exitY, &Float:exitZ, &Float:exitA ){
	if( uniqIntId < MAX_INTERIORS ){
	    exitX = interiorInfo[uniqIntId][inExitX];
	    exitY = interiorInfo[uniqIntId][inExitY];
	    exitZ = interiorInfo[uniqIntId][inExitZ];
	    exitA = interiorInfo[uniqIntId][inExitA];
		return interiorInfo[uniqIntId][inIntID];
	}
	return -1;
}


stock GetInteriorIntID( id ){ // Gets the interior id of a uniq Interior Id :S
	if( id > MAX_INTERIORS ) return -1;
	else return interiorInfo[id][inIntID];
}

stock GetInteriorName( id )
{
	new tmp[64];
	if( id > MAX_PROPERTIES ) return tmp;

	else {
  		format( tmp, 64, "%s", interiorInfo[id][inName] );
		return tmp;
	}
}

/********************************************************
********************************************************/


/********************************
*  	 Property Functions  		*
********************************/

stock Float:GetPropertyEntrance( id, &Float:x, &Float:y, &Float:z ){
	if( id > MAX_PROPERTIES ) return 0.0;
	x = properties[id][eEntX];
	y = properties[id][eEntY];
	z = properties[id][eEntZ];
	return properties[id][eEntA];
}

stock Float:GetPropertyExit( id, &Float:x, &Float:y, &Float:z ){
	if( id > MAX_PROPERTIES ) return 0.0;
	return GetInteriorExit( properties[id][eUniqIntId], x, y, z );
}

stock GetPropertyInteriorFileId( id ){
	if( id > MAX_PROPERTIES ) return 0;
	else return properties[id][eUniqIntId];
}

stock GetPropertyInteriorId( id ){
	if( id > MAX_PROPERTIES ) return 0;
	else return GetInteriorIntID( properties[id][eUniqIntId] );
}

stock GetPropertyType( id ){
	if( id > MAX_PROPERTIES ) return 0;
	else return properties[id][eType];
}

stock GetPropertyOwner( id ){
	if( id > MAX_PROPERTIES ) return -1;
	else return properties[id][eOwner];
}

stock GetPropertyPrice( id ){
	if( id > MAX_PROPERTIES ) return -1;
	else return properties[id][ePrice];
}

stock GetPropertyName( id ){
	new tmp[64];
	if( id > MAX_PROPERTIES ) return tmp;
	else {
  		format( tmp, 64, "%s", properties[id][ePname] );
		return tmp;
	}
}

/********************************************************
********************************************************/

/********************************
*   	Database Functions	    *
********************************/

stock Float:dbGetPropertyEntrance( database[], uniqId, &Float:x, &Float:y, &Float:z ){
	new
	    DB:prop,
	    DBResult:query_result,
	    query[128],
		num;

	prop = db_open( database );
	format( query, 128,"SELECT entX, entY, enZ, entA FROM properties WHERE id = %d LIMIT 1", uniqId );

	query_result = db_query( prop, query );
	num = db_num_rows(query_result);
	if(!num) return -1.0;

	else {
		db_get_field_assoc( query_result, "entX", query, 128 );
		x = floatstr( query );
		db_get_field_assoc( query_result, "entY", query, 128 );
		y = floatstr( query );
		db_get_field_assoc( query_result, "entZ", query, 128 );
		z = floatstr( query );
		db_get_field_assoc( query_result, "entA", query, 128 );
		return floatstr( query );
	}
}

stock dbSetPropertyOwner( database[], uniqId, ownerId ){
}

stock dbSetPropertyPrice( database[], uniqId, price ){
}

stock dbDeleteProperty( database[], uniqId ){
}

stock dbCreateProperty( database[], uniqId, Float:entX, Float:entY, Float:entZ, Float:entA ){ // remember to add rest of params
}

stock dbLoadProperties( database[] )
{
	new
		    DB:prop,
		    DBResult:query_result,
		    query[128],
			num,
			i;

	prop = db_open( database );
	format( query, 128,"SELECT * FROM properties", uniqId );

	query_result = db_query( prop, query );
	num = db_num_rows(query_result);
	if(!num) return 0;
	else {
		while( i < num ){
		    db_get_field_assoc( query_result, "entX", query, 128 );
			x = floatstr( query );
			db_get_field_assoc( query_result, "entX", query, 128 );
			x = floatstr( query );
			db_get_field_assoc( query_result, "entY", query, 128 );
			y = floatstr( query );
			db_get_field_assoc( query_result, "entZ", query, 128 );
			z = floatstr( query );
			db_get_field_assoc( query_result, "entA", query, 128 );
			i++;
		}
	}

}
/********************************************************
********************************************************/

/*********************************
*   Property System Functions    *
*********************************/

ReadInteriorInfo( fileName[] )
{
	new
	    File:file_ptr,
	    buf[256],
	    tmp[64],
	    idx,
		uniqId;


	file_ptr = fopen( fileName, io_read );
	if( file_ptr ){
		while( fread( file_ptr, buf, 256 ) > 0){
		    idx = 0;

     		idx = token_by_delim( buf, tmp, ' ', idx );
			if(idx == (-1)) continue;
			uniqId = strval( tmp );

			if( uniqId >= MAX_INTERIORS ) return 0;

			idx = token_by_delim( buf, tmp, ' ', idx+1 );
		    if(idx == (-1)) continue;
		 	interiorInfo[uniqId][inIntID] = strval( tmp );

			idx = token_by_delim( buf, tmp, ' ', idx+1 );
		    if(idx == (-1)) continue;
			interiorInfo[uniqId][inExitX] = floatstr( tmp );

			idx = token_by_delim( buf, tmp, ' ', idx+1 );
		    if(idx == (-1)) continue;
			interiorInfo[uniqId][inExitY] = floatstr( tmp );

			idx = token_by_delim( buf, tmp, ' ', idx+1);
		    if(idx == (-1)) continue;
			interiorInfo[uniqId][inExitZ] = floatstr( tmp );

			idx = token_by_delim( buf, tmp, ' ', idx+1 );
		    if(idx == (-1)) continue;
			interiorInfo[uniqId][inExitA] = floatstr( tmp );

			idx = token_by_delim( buf, interiorInfo[uniqId][inName], ';', idx+1 );
		    if(idx == (-1)) continue;

			/*
			printf( "ReadInteriorInfo(%d, %d, %f, %f, %f, %f ( %s ))",
					uniqId,
					interiorInfo[uniqId][inIntID],
					interiorInfo[uniqId][inExitX],
					interiorInfo[uniqId][inExitY],
					interiorInfo[uniqId][inExitZ],
					interiorInfo[uniqId][inExitA],
					interiorInfo[uniqId][inName] );*/

		}
		//printf( "Interiors File read successfully" );
		fclose( file_ptr );
		return 1;
	}
	printf( "Could Not Read Interiors file ( %s )", fileName );
	return 0;
}

ReadPropertyFile( fileName[] )
{
	new  File:file_ptr,
	    tmp[128],
		buf[256],
		idx,
		Float:enX,
		Float:enY,
		Float:enZ,
		Float:enA,
		uniqIntId,
		p_type,
		pIcon;

	printf("Reading File: %s",fileName);

	file_ptr = fopen( fileName, io_read );

	if(!file_ptr )return 0;

 	while( fread( file_ptr, buf, 256 ) > 0){
 	    idx = 0;

 	    idx = token_by_delim( buf, tmp, ',', idx );
		if(idx == (-1)) continue;
		pIcon = strval( tmp );

 	    idx = token_by_delim( buf, tmp, ',', idx+1 );
		if(idx == (-1)) continue;
		enX = floatstr( tmp );

  		idx = token_by_delim( buf, tmp, ',', idx+1 );
		if(idx == (-1)) continue;
		enY = floatstr( tmp );

		idx = token_by_delim( buf, tmp, ',', idx+1 );
		if(idx == (-1)) continue;
		enZ = floatstr( tmp );

 		idx = token_by_delim( buf, tmp, ',', idx+1 );
		if(idx == (-1)) continue;
		enA = floatstr( tmp );

		idx = token_by_delim( buf, tmp, ',', idx+1 );
		if(idx == (-1)) continue;
		uniqIntId = strval( tmp );

		idx = token_by_delim( buf, tmp, ';', idx+1 );
		if(idx == (-1)) continue;
		p_type = strval( tmp );

		CreateProperty( uniqIntId, pIcon, enX, enY, enZ, enA, p_type  );
	}
	fclose( file_ptr );
	return 1;
}

PutPlayerInProperty( playerid, propId, propVW = 0 )
{
	new Float:x, Float:y, Float:z, Float:a;
	new intFileId;
	
    a = GetPropertyExit( propId, x, y, z );
	SetPlayerPos( playerid, x, y, z );
	SetPlayerFacingAngle( playerid, a );
	SetPlayerInterior( playerid, GetPropertyInteriorId( propId ));
	SetPlayerVirtualWorld( playerid, (propVW==0)? propId+PROP_VW:propVW );
	intFileId = GetPropertyInteriorFileId(propId);
	currentInt[playerid] = propId;
	
	//new dbgstring[128];
	//format(dbgstring,sizeof(dbgstring),"PutPlayerInProperty(%d): FileInt=%d",propId,intFileId);
	//SendClientMessage(playerid,0xFFFFFFFF,dbgstring);
	
	// the following will make the client shop scripts run if we tell it
	// the name of the shop.
	if(intFileId == 22) {
	    SetPlayerShopName(playerid,"FDPIZA");
	}
	else if(intFileId == 47) {
		SetPlayerShopName(playerid,"FDBURG");
	}
	else if(intFileId == 130) {
	    SetPlayerShopName(playerid,"FDCHICK");
	}
	else if(intFileId == 32) {
	    SetPlayerShopName(playerid,"AMMUN1");
	}
	else if(intFileId == 96) {
	    SetPlayerShopName(playerid,"AMMUN2");
	}
	else if(intFileId == 122) {
	    SetPlayerShopName(playerid,"AMMUN3");
	}
	else if(intFileId == 123) {
	    SetPlayerShopName(playerid,"AMMUN5");
	}
	
}

// Adds new property to property file
AddProperty( uniqIntId, Float:entX, Float:entY, Float:entZ, Float:entA, p_type, comment[]="" )
{
	new
	    Float:exitX,
	    Float:exitY,
	    Float:exitZ,
	    Float:exitA,
		interiorId,
		File:file_ptr,
		tmp[128];

	interiorId = GetInteriorExitInfo( uniqIntId, exitX, exitY, exitZ, exitA );

	if( interiorId != -1 ){
	    file_ptr = fopen( propFile[p_type], io_append );
	    if(file_ptr){
			format( tmp, 128, "%d, %f, %f, %f, %f, %d, %d ; //%s\r\n", propIcons[p_type][tIcon],entX, entY, entZ, entA, uniqIntId, p_type, comment );

			fwrite( file_ptr, tmp );
			fclose( file_ptr );
			printf( "PropDB - %s", tmp );
			return CreateProperty( uniqIntId, propIcons[p_type][tIcon], entX, entY, entZ, entA,  p_type );
		}
	}
	return -1;
}

CreateProperty( uniqIntId, iconId,  Float:entX, Float:entY, Float:entZ, Float:entA, p_type, name[64]="", owner=-1, price=0 )
{
	if( (unid+1) < MAX_PROPERTIES ){
		new Id = CreatePickup( iconId ,23, entX, entY, entZ, 0 );
		//printf( "CreateProperty(%d, %d, %f, %f, %f, %f, %d)", uniqIntId, iconId, entX, entY, entZ, entA, p_type );
		propPickups[Id] = unid;
		properties[unid][eEntX] 	= entX;
		properties[unid][eEntY] 	= entY;
		properties[unid][eEntZ] 	= entZ;
		properties[unid][eEntA] 	= entA;
		properties[unid][eUniqIntId] = uniqIntId;
		properties[unid][eOwner] 	= owner;
		properties[unid][ePrice] 	= price;
		properties[unid][eType] 	= p_type;
		format( properties[unid][ePname], 64, "%s", name );
		
		new text_info[256];
		
		propTextInfo[unid] = Text3D:INVALID_3DTEXT_ID;
		
		if(p_type == TYPE_HOUSE) {
		    format(text_info,256,"[House]");
		    propTextInfo[unid] = Create3DTextLabel(text_info,0x88EE88FF,entX,entY,entZ+0.75,20.0,0,1);
		}
		else if(p_type == TYPE_BUSINESS) {
		    format(text_info,256,"[Business]");
		    propTextInfo[unid] = Create3DTextLabel(text_info,0xAAAAFFFF,entX,entY,entZ+0.75,20.0,0,1);
		}
		else if(p_type == TYPE_BANK) {
		    format(text_info,256,"[Bank]");
		    propTextInfo[unid] = Create3DTextLabel(text_info,0xEEEE88FF,entX,entY,entZ+0.75,20.0,0,1);
		}
		else if(p_type == TYPE_COP) {
		    format(text_info,256,"[Police Station]");
		    propTextInfo[unid] = Create3DTextLabel(text_info,0xEEEE88FF,entX,entY,entZ+0.75,20.0,0,1);
		}

		return unid++;
	}
	else print( "Property Limit Reached" );
	return -1;
}

PropertyCommand( playerid, cmd[],cmdtext[],idx, p_type )
{
	new
	        Float:x,
	        Float:y,
	        Float:z,
	        Float:a,
	        tmp[256],
	        string[128],
			uniqId,
			id;

	if( GetPlayerInterior(playerid) != 0 || GetPlayerVirtualWorld(playerid)!= 0 ){
	    SendClientMessage(playerid, 0x550000FF, "You can only create properties in Interior 0 and VW 0" );
	    return 1;
	}

	GetPlayerPos( playerid, x, y, z );
	GetPlayerFacingAngle( playerid, a );

	tmp = strtok( cmdtext, idx );
	if(!strlen(tmp)){
	    format( string, 128, "Usage: %s [uniqInteriorId] [optional-comment]", cmd );
	    SendClientMessage( playerid, 0xFF00CC, string );
	    return 1;
	}
	if(!isNumeric(tmp)){
	    SendClientMessage(playerid, 0x550000, "Uniq Interior Id must be a number" );
	    return 1;
	}
	uniqId = strval( tmp );

	if( uniqId > MAX_INTERIORS || uniqId < 0 ){
		SendClientMessage( playerid, 0xFFFFCC, "Invalid Uniq Interior Id" );
		return 1;
	}

    idx = token_by_delim( cmdtext, tmp, '\0', idx );
 	if(idx){
 	    id = AddProperty( uniqId, x, y, z, a, p_type, tmp );
	}

	else {
		id = AddProperty( uniqId, x, y, z, a, p_type );
	}

	if( id != -1 ){
		format( tmp, 256, "Property Type ( %d ) Added Successfully: UniqId: %d Interior: %d IntName: %s",p_type, id, interiorInfo[uniqId][inIntID], interiorInfo[uniqId][inName] );
	    SendClientMessage( playerid, 0xCC7700, tmp );
	}else{
	    SendClientMessage( playerid, 0x00FF55, "Error: Something went wrong/Property Limit Reached" );
	}
	return 1;
}

LoadProperties()
{
	if( properties[0][eType] != TYPE_EMPTY ){
	    UnloadProperties();
	}
	unid = 0;
   	for( new i = 0; i < MAX_PROPERTIES; i++ ){
   	    properties[i][eType] = TYPE_EMPTY;
	}

	ReadInteriorInfo( "properties/interiors.txt" );

	for( new i = 0; i < MAX_TYPES; i++ ){
   		ReadPropertyFile( propFile[i] );
	}
	return 1;
}

UnloadProperties()
{
	new
	    p;
	for( new i = 0; i < MAX_PROPERTIES; i++ ){
		if( propPickups[i] != -1 ){
			DestroyPickup( i );
			p = propPickups[i];
			propPickups[i] = -1;
			properties[p][eInterior] = -1;
			properties[p][eType] = TYPE_EMPTY;
			properties[p][eOwner] = -1;
			properties[p][ePrice] = 0;
			properties[p][ePname][0] = '\0';
		}
	}
}

/********************************************************
********************************************************/


/************************************
*   		Callbacks			    *
************************************/


public OnFilterScriptInit()
{
	print("\n-----------------------------------");
	print("Grand Larceny Property Filterscript		");
	print("-----------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	UnloadProperties();
	return 1;
}

public OnGameModeInit()
{
	LoadProperties();
	return 1;
}

public OnGameModeExit()
{
	UnloadProperties();
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	if( newinteriorid == 0 ){
		currentInt[playerid] = -1;
		SetPlayerVirtualWorld( playerid, 0 );
	}
	return 1;
}

public OnPlayerSpawn( playerid )
{
	gLastPropertyEnterNotification[playerid] = -1;
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	//printf( "DEBUG: Player %d pickedup Pickup %d Prop Id %d", playerid, pickupid );
	lastPickup[playerid] = pickupid;
	new id = propPickups[pickupid];
	new pmsg[256];

	if( properties[id][eType] > 0 ){
	
	    if(gLastPropertyEnterNotification[playerid] != id){
	        gLastPropertyEnterNotification[playerid] = id;
          	switch( properties[id][eType] ){
		    	case TYPE_HOUSE:{
		        	format(pmsg,256,"* House: type /enter to enter");
		        	SendClientMessage( playerid, 0xFF55BBFF, pmsg );
		        	return 1;
				}

				case TYPE_BUSINESS:{
			   		format(pmsg,256,"* Business: type /enter to enter");
		        	SendClientMessage( playerid, 0xFF55BBFF, pmsg );
		        	return 1;
				}

				case TYPE_BANK:{
					format(pmsg,256,"* Bank: type /enter to enter");
		        	SendClientMessage( playerid, 0xFF55BBFF, pmsg );
		        	return 1;
				}

				case TYPE_COP:{
					format(pmsg,256,"* Police Station: type /enter to enter");
		        	SendClientMessage( playerid, 0xFF55BBFF, pmsg );
		        	return 1;
				}
		 	}
		}
	}
	else SendClientMessage( playerid, 0xFF9900FF, "This property doesn't exist :S" );

	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	new idx;
	new cmd[256];

	cmd = strtok(cmdtext, idx);
	
	// Public commands.
	if(strcmp("/enter", cmd, true) == 0) // enter property
	{
		if( lastPickup[playerid] != -1 || properties[lastPickup[playerid]][eType] > 0 ){
		    new
		        id = propPickups[lastPickup[playerid]],
		        Float:x,
		        Float:y,
		        Float:z;

			GetPropertyEntrance( id, x, y, z );
	    	if( IsPlayerInRangeOfPoint( playerid, 3.0, x, y, z )){
	    	    PutPlayerInProperty( playerid, id );
	    	    SendClientMessage( playerid, 0x55AADDFF, "* You have entered a property.. type /exit to leave" );
	    	    return 1;
			}
		}
		return 1;
	}
	else if(strcmp("/exit", cmd, true) == 0) // exit property
	{
	    if( currentInt[playerid] > -1 && GetPlayerInterior(playerid) == GetPropertyInteriorId( currentInt[playerid] )){

	        new id = currentInt[playerid];
	        new Float:x;
			new	Float:y;
			new	Float:z;
			new	Float:a;

			// make sure they're near the exit before allowing them to exit.
			GetPropertyExit( id, x, y, z );
			if(!IsPlayerInRangeOfPoint(playerid,4.5,x,y,z)) {
			    SendClientMessage(playerid,0xDDAA55FF,"* You must be near the property exit to /exit");
			    return 1;
			}

			a = GetPropertyEntrance( id, x, y, z );
			SetPlayerPos( playerid, x, y, z );
			SetPlayerFacingAngle( playerid, a );
			SetPlayerInterior( playerid, 0 );
			SetPlayerVirtualWorld( playerid, 0 );
		}
		currentInt[playerid] = -1;
		return 1;
	}
	
	// The rest of the commands here are for
	// property creation which is admin only.
	
	if(!IsPlayerAdmin(playerid)) return 0;

	if(strcmp("/chouse", cmd, true) == 0) // creates a house type property
	{
		PropertyCommand( playerid, cmd, cmdtext,idx, TYPE_HOUSE );
		return 1;
	}
	else if(strcmp("/cbus", cmd, true) == 0) // creates a business type property
	{
 	    PropertyCommand( playerid, cmd, cmdtext,idx, TYPE_BUSINESS );
 	    return 1;
	}
	else if(strcmp("/ccop", cmd, true) == 0) // creates a police station property
	{
		PropertyCommand( playerid, cmd, cmdtext,idx, TYPE_COP );
		return 1;
	}
	else if(strcmp("/cbank", cmd, true) == 0) // creates a bank type property
	{
		PropertyCommand( playerid, cmd, cmdtext,idx, TYPE_BANK );
		return 1;
	}
	else if(strcmp("/view", cmd, true) == 0) //Basically lets you view an interior from the interiors.txt file by id
	{

	    new
			tmp[256],
			string[128],
			uniqId,
			Float:x,
			Float:y,
			Float:z,
			Float:a;
		tmp = strtok( cmdtext, idx );
		if(!strlen(tmp)){
		    format( string, 128, "Usage: %s [uniqInteriorId]", cmd );
		    SendClientMessage( playerid, 0xFF00CC, string );

		    return 1;
		}
		if(!isNumeric(tmp)){
		    SendClientMessage(playerid, 0x550000, "Uniq Interior Id must be a number" );
		    return 1;
		}
		uniqId = strval( tmp );

		if( uniqId > MAX_INTERIORS || uniqId < 0 ){
			SendClientMessage( playerid, 0xFFFFCC, "Invalid Uniq Interior Id" );
			return 1;
		}
		if( GetPlayerInterior( playerid ) == 0 ){
			GetPlayerPos( playerid, plPos[playerid][0], plPos[playerid][1], plPos[playerid][2] );
			plInt[playerid] = GetPlayerInterior( playerid );
		}
		a = GetInteriorExit( uniqId, x, y, z );
		SetPlayerInterior( playerid, GetInteriorIntID( uniqId ) );
		SetPlayerPos( playerid, x, y, z );
		SetPlayerFacingAngle( playerid, a );
		format( string, 128, "UniqId: %d InteriorId: %d Name: %s | Use /return to go to last position", uniqId,GetInteriorIntID( uniqId ), GetInteriorName( uniqId ));
		SendClientMessage( playerid, 0x556600FF, string );
		return 1;
	}
	else if( strcmp( "/return", cmd, true ) == 0 ) // return from /view command to last position
	{
	    SetPlayerPos( playerid, plPos[playerid][0], plPos[playerid][1], plPos[playerid][2] );
	    SetPlayerInterior( playerid, plInt[playerid] );
		return 1;
	}

	return 0;
}

/***********************************************************************
***********************************************************************/

very nice of you guys if you could take a look on it thankz for now. :P
Reply
#2

Maybe by using /enter2 or TAB key or something. Or just "OnPlayerPickup()"
Reply
#3

I recommend you to use "OnPlayerPickup" and define every pickup. That's better, so players automatically get in the interior or wherever you want to send them.
Reply
#4

Why don't you make your own dynamic housing system? If your going to edit something, yet you come across errors don't you think its best to just make your own?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)