Something wrong with houses
#1

pawn Код:
#include <a_samp>                                                        
#include <SII>                                                          

#define FILTERSCRIPT
#define INVALID_HOUSE_ID            -255                                

#define MAX_HOUSES                  100                                  //Max houses
#define MAX_BUSINESSES              100                                  //Max stores
#define HOUSE_FILE                  "SasiHouses/Houses/HouseID%d.ini"
#define BIZ_FILE                    "SasiHouses/Stores/BizID%d.ini"      
#define PRINT_HOUSES
#define KEY_ENTER_PROPERTY             KEY_SPRINT                      

#define DIALOG_FORSALE_HOUSE        1500
#define DIALOG_OTHERS_HOUSE         1501
#define DIALOG_MY_HOUSE             1502
#define DIALOG_SELL_HOUSE           1503
#define DIALOG_FORSALE_STORE        1504
#define DIALOG_OTHERS_STORE         1505
#define DIALOG_MY_STORE             1506
#define DIALOG_SELL_STORE           1507
#define DIALOG_RENAME_STORE         1508

new HousePickup[MAX_HOUSES];
new BizPickup[MAX_BUSINESSES];

enum HouseInfo
{
  Name[24],
  Cost,
  Sell,
  Interior,
  VirtualWorld,
  Locked,
  Float:InteriorX,
  Float:InteriorY,
  Float:InteriorZ,
  Float:ExteriorX,
  Float:ExteriorY,
  Float:ExteriorZ,
}

new hInfo[MAX_HOUSES][HouseInfo];

enum BusinessInfo
{
  bName[24],
  bTitle[51],
  bCost,
  bSell,
  bInterior,
  bVirtualWorld,
  bLocked,
  Float:bInteriorX,
  Float:bInteriorY,
  Float:bInteriorZ,
  Float:bExteriorX,
  Float:bExteriorY,
  Float:bExteriorZ,
}

new bInfo[MAX_BUSINESSES][BusinessInfo];

public OnFilterScriptInit()
{
  print("\n-------------FILTERSCRIPT----------------- ");
  print(" Sasinosoft Houses, Simple House/Store System");
  print("          By [GF]Sasino97 Loaded.            ");
  print("------------------------------------------\n ");
 
  //All Houses Here.
 
  //          ID,   extX,      extY,      extZ,     intX,    intY,       intZ,  price, sell, int,   vw
  CreateHouse(0, -2724.6768,-162.5500,4.3426, 234.6087, 1187.8195, 1080.2578, 1000, 900,   3,    0);
  CreateHouse(1,-2789.1719, -181.4645,   10.0625, -186.3214, -455.0243, 895.2078, 5,     0,    0,    1);
  CreateHouse(2,-2786.7571,-175.2252,10.0625, -186.3214, -455.0243, 895.2078, 5,     0,    0,    2);
  CreateHouse(3,-2790.2441,-168.2218,7.2020, -186.3214, -455.0243, 895.2078, 5,     0,    0,    3);
  CreateHouse(4,-2791.6799,-160.4692,10.0547, -186.3214, -455.0243, 895.2078, 5,     0,    0,    4);
  CreateHouse(5,-2792.8474,-153.1029,7.6260, -186.3214, -455.0243, 895.2078, 5,     0,    0,    5);
  CreateHouse(6,-2791.5898,-146.0174,7.8594, -186.3214, -455.0243, 895.2078, 5,     0,    0,    6);
  CreateHouse(7,-2791.8425,-134.4681,10.0547, -186.3214, -455.0243, 895.2078, 5,     0,    0,    7);
  CreateHouse(8,-2786.7632,-118.2724,10.0625, -186.3214, -455.0243, 895.2078, 5,     0,    0,    8);
  CreateHouse(9,-2790.9651,-110.9513,7.2020, -186.3214, -455.0243, 895.2078, 5,     0,    0,    9);
  CreateHouse(10,-2791.5854,-107.6296,7.8594, -186.3214, -455.0243, 895.2078, 5,     0,    0,    10);
  CreateHouse(11,-2791.6016,-94.7926,10.0547, -186.3214, -455.0243, 895.2078, 5,     0,    0,    11);
  CreateHouse(12,-2786.7668,-89.6357,10.0625, -186.3214, -455.0243, 895.2078, 5,     0,    0,    12);
  CreateHouse(13,-2790.2534,-82.8319,7.1953, -186.3214, -455.0243, 895.2078, 5,     0,    0,    13);
  CreateHouse(14,-2725.7461,-92.9078,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    14);
  CreateHouse(15,-2728.1563,-98.5590,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    15);
  CreateHouse(16,-2724.6721,-105.5122,4.3426, -186.3214, -455.0243, 895.2078, 5,     0,    0,    16);
  CreateHouse(17,-2722.9971,-113.3820,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    17);
  CreateHouse(18,-2721.9773,-120.6844,4.7044, -186.3214, -455.0243, 895.2078, 5,     0,    0,    18);
  CreateHouse(19,-2723.3350,-128.1512,5.0000, -186.3214, -455.0243, 895.2078, 5,     0,    0,    19);
  CreateHouse(20,-2721.5447,-146.7136,4.3359, -186.3214, -455.0243, 895.2078, 5,     0,    0,    20);
  CreateHouse(21,-2728.1565,-155.7590,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    21);
  CreateHouse(22,-2723.3230,-166.3382,5.0000, -186.3214, -455.0243, 895.2078, 5,     0,    0,    22);
  CreateHouse(23,-2722.8723,-179.0692,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    23);
  CreateHouse(24,-2728.1460,-184.3688,7.2031, -186.3214, -455.0243, 895.2078, 5,     0,    0,    24);
  CreateHouse(25,-2724.6719,-191.2401,4.3359, -186.3214, -455.0243, 895.2078, 5,     0,    0,    25);

  //All Stores Here.
 
  //             ID  Titolo Default     extX         extY      extZ     intX       intY       intz   buy    sell  int  vw
  CreateBusiness(0,   "Ammu Nation"  ,2145.7082, -1176.7008, 23.9921, 285.8361, -39.0166, 1001.5156, 1500, 500,    1,   0);
  return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
  switch(dialogid)
  {
    case DIALOG_FORSALE_HOUSE:
    {
      if(!response) return 1;
      if(GetPlayerMoney(playerid) < hInfo[GetHouseID(playerid)][Cost]) return ShowNoMoneyMessage(playerid);
      BuyHouse(playerid, GetHouseID(playerid));
      return 1;
    }
    case DIALOG_FORSALE_STORE:
    {
      if(!response) return 1;
      if(GetPlayerMoney(playerid) < bInfo[GetBizID(playerid)][bCost]) return ShowNoMoneyMessage(playerid);
      BuyBusiness(playerid, GetBizID(playerid));
      return 1;
    }
    case DIALOG_OTHERS_HOUSE:
    {
      if(!response) return 1;
      if(hInfo[GetHouseID(playerid)][Locked] == 1) return ShowLockedHouseMessage(playerid);
      EnterHouse(playerid, GetHouseID(playerid));
      return 1;
    }
    case DIALOG_OTHERS_STORE:
    {
      if(!response) return 1;
      if(bInfo[GetBizID(playerid)][bLocked] == 1) return ShowLockedStoreMessage(playerid);
      EnterBusiness(playerid, GetBizID(playerid));
      return 1;
    }
    case DIALOG_MY_HOUSE:
    {
      if(!response) return 1;
      switch(listitem)
      {
        case 0:
        {
          if(hInfo[GetHouseID(playerid)][Locked] == 1) return ShowLockedHouseMessage(playerid);
          EnterHouse(playerid, GetHouseID(playerid));
          return 1;
        }
        case 1:
        {
          if(hInfo[GetHouseID(playerid)][Locked] == 1)
          {
            hInfo[GetHouseID(playerid)][Locked] = 0;
            UnlockYourHouseMessage(playerid);
          }
          else
          {
            hInfo[GetHouseID(playerid)][Locked] = 1;
            LockYourHouseMessage(playerid);
          }
          return 1;
        }
        case 2:
        {
          new string[101];
          format(string,sizeof(string), "Do you really want to sell your house for $%d?", hInfo[GetHouseID(playerid)][Sell]);
          ShowPlayerDialog(playerid, DIALOG_SELL_HOUSE, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "Yes", "No");
          return 1;
        }
       
      }
      return 1;
    }
    case DIALOG_MY_STORE:
    {
      if(!response) return 1;
      switch(listitem)
      {
        case 0:
        {
          if(bInfo[GetBizID(playerid)][bLocked] == 1) return ShowLockedStoreMessage(playerid);
          EnterBusiness(playerid, GetBizID(playerid));
          return 1;
        }
        case 1:
        {
          if(bInfo[GetBizID(playerid)][bLocked] == 1)
          {
            bInfo[GetBizID(playerid)][bLocked] = 0;
            UnlockYourStoreMessage(playerid);
          }
          else
          {
            bInfo[GetBizID(playerid)][bLocked] = 1;
            LockYourStoreMessage(playerid);
          }
          return 1;
        }
        case 2:
        {
          ShowPlayerDialog(playerid, DIALOG_RENAME_STORE,DIALOG_STYLE_INPUT, "Write a new name for your store","You can make colors using {RRGGBB} codes", "OK", "Cancel");
          return 1;
        }
        case 3:
        {
          new string[256];
          format(string,sizeof(string), "Do you really want to sell your store for $%d?", bInfo[GetBizID(playerid)][bSell]);
          ShowPlayerDialog(playerid, DIALOG_SELL_STORE, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "Yes", "No");
          return 1;
        }

      }
      return 1;
    }
    case DIALOG_SELL_HOUSE:
    {
      if(!response) return 1;
      SellHouse(playerid, GetHouseID(playerid));
      return 1;
    }
    case DIALOG_SELL_STORE:
    {
      if(!response) return 1;
      SellBusiness(playerid, GetBizID(playerid));
      return 1;
    }
    case DIALOG_RENAME_STORE:
    {
      if(!response) return 1;
      if(strlen(inputtext) >= 51)
      {
        ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{FF0000}ERROR", "The max lenght is 50 characters", "OK", "");
        return 1;
      }
      new string[256];
      format(bInfo[GetBizID(playerid)][bTitle],51, inputtext);
      format(string, 256, BIZ_FILE, GetBizID(playerid));
      INI_Open(string);
      INI_WriteString("Title",bInfo[GetBizID(playerid)][bTitle]);
      INI_Save();
      INI_Close();
      return 1;
    }
  }
  return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  if(newkeys & KEY_ENTER_PROPERTY)
  {
    for(new i=0; i<MAX_HOUSES; i++)
    {
      if(IsPlayerNearPoint(2.0, playerid, hInfo[i][InteriorX], hInfo[i][InteriorY], hInfo[i][InteriorZ]))
      {
        ExitHouse(playerid, i);
      }
    }
    for(new i=0; i<MAX_BUSINESSES; i++)
    {
      if(IsPlayerNearPoint(2.0, playerid, bInfo[i][bInteriorX], bInfo[i][bInteriorY], bInfo[i][bInteriorZ]))
      {
        ExitBusiness(playerid, i);
      }
    }
    if(GetHouseID(playerid) != INVALID_HOUSE_ID)
    {
      OpenHouseDialog(playerid, GetHouseID(playerid));
      return 1;
    }
    else if(GetBizID(playerid) != INVALID_HOUSE_ID)
    {
      OpenBusinessDialog(playerid, GetBizID(playerid));
      return 1;
    }
   
  }
  return 1;
}

/*
                             CreateHouse
 Function: Creates a house.

 To use in: OnFilterScriptInit

 Arguments:
   -houseid: The ID of the house. Don't create 2 houses with the same ID.
   -eX, eY, eZ: La posizione esteriore della casa (L'entrata)
   -iX, iY, iZ: La posizione interiore della casa (L'uscita)
   -BuyPrice: Il costo della casa
   -SellPrice: La quantitа che viene data al proprietario quando la rivende
   -INT: L' ID dell'interior della casa
   -VW: Il mondo virtuale della casa (Usa 2 VW diversi se vuoi avere 2 case con lo stesso interior)

 Returns:
   -true(1): Quando la casa esisteva gia, ed и stata caricata
   -null(-1): Quando la casa non esisteva ed и stata creata
   -false(0): Quando и impossibile caricare o creare
*/


stock CreateHouse(houseid, Float:eX, Float:eY, Float:eZ, Float:iX, Float:iY, Float:iZ, BuyPrice, SellPrice, INT, VW)
{
  new housefile[51];
  format(housefile, sizeof(housefile), HOUSE_FILE, houseid);
  if(!INI_Exist(housefile)) //Se il file non esiste:
  {
    INI_Open(housefile);
    format(hInfo[houseid][Name], 24, "ForSale");
    INI_WriteString("Name", "ForSale");

    hInfo[houseid][Cost] = BuyPrice;
    INI_WriteInt("Cost", BuyPrice);

    hInfo[houseid][Sell] = SellPrice;
    INI_WriteInt("Sell", SellPrice);

    hInfo[houseid][Interior] = INT;
    INI_WriteInt("Interior", INT);

    hInfo[houseid][VirtualWorld] = VW;
    INI_WriteInt("VirtualWorld", VW);

    hInfo[houseid][Locked] = 1;
    INI_WriteInt("Locked", 1);

    hInfo[houseid][InteriorX] = iX;
    hInfo[houseid][InteriorY] = iY;
    hInfo[houseid][InteriorZ] = iZ;
    INI_WriteFloat("InteriorX", iX);
    INI_WriteFloat("InteriorY", iY);
    INI_WriteFloat("InteriorZ", iZ);

    hInfo[houseid][ExteriorX] = eX;
    hInfo[houseid][ExteriorY] = eY;
    hInfo[houseid][ExteriorZ] = eZ;
    INI_WriteFloat("ExteriorX", eX);
    INI_WriteFloat("ExteriorY", eY);
    INI_WriteFloat("ExteriorZ", eZ);

    HousePickup[houseid] = CreatePickup(1273, 23, eX, eY, eZ);
    Create3DTextLabel("Use Spacebar to open the menu", 0x33AA33AA, eX, eY, eZ+1, 20, 0, 1);
    Create3DTextLabel("Use Spacebar to exit the house", 0x33AA33AA, iX, iY, iZ+1, 20, VW, 1);

    #if defined PRINT_HOUSES
    print("------------Nuova Casa Creata------------");
    printf("- Houseid: %d", houseid);
    printf("- Costo: %d", BuyPrice);
    printf("- Ricavo Vendita: %d", SellPrice);
    printf("- Interior: %d", INT);
    printf("- Virtual World: %d", VW);
    print("-----------------------------------------");
    #endif
    INI_Save();
    INI_Close();
    return -1;
  }
  else if(INI_Exist(housefile))//altrimenti, se esiste il file
  {
    new destination[24];
   
    INI_Open(housefile);
   
    INI_ReadString(destination, "Name");
    format(hInfo[houseid][Name], 24, destination);
    hInfo[houseid][Locked] = INI_ReadInt("Locked");
   
    INI_Close();
   
    hInfo[houseid][Cost] = BuyPrice;
    hInfo[houseid][Sell] = SellPrice;

    hInfo[houseid][Interior] = INT;
    hInfo[houseid][VirtualWorld] = VW;
   
    hInfo[houseid][InteriorX] = iX;
    hInfo[houseid][InteriorY] = iY;
    hInfo[houseid][InteriorZ] = iZ;

    hInfo[houseid][ExteriorX] = eX;
    hInfo[houseid][ExteriorY] = eY;
    hInfo[houseid][ExteriorZ] = eZ;

    if(strcmp(hInfo[houseid][Name],"ForSale",true) == 0)
    {
      HousePickup[houseid] = CreatePickup(1273, 23, eX, eY, eZ);
    }
    else
    {
      HousePickup[houseid] = CreatePickup(1272, 23, eX, eY, eZ);
    }
    Create3DTextLabel("Use Spacebar to open the menu", 0x33AA33AA, eX, eY, eZ+1, 20, 0, 1);
    Create3DTextLabel("Use Spacebar to exit the house", 0x33AA33AA, iX, iY, iZ+1, 20, VW, 1);
    #if defined PRINT_HOUSES
    print("------------Casa Esistente Caricata------------");
    printf("- Houseid: %d", houseid);
    printf("- Costo: %d", BuyPrice);
    printf("- Ricavo Vendita: %d", SellPrice);
    printf("- Interior: %d", INT);
    printf("- Virtual World: %d", VW);
    print("----------------------------------------------");
    #endif
    return 1;
  }
  print("E Impossibile Creare Una Casa. Controlla Di Avere Le Seguenti Cartelle In Scriptfiles:");
  print("SasiHouses ------>");
  print("           Houses");
  print("           Stores");
  return 0;
}

/*
                             CreateBusiness
 Funzione: Crea Un Negozio.

 Da Usare Con: OnFilterScriptInit

 Parametri:
   -bizid: L'ID del negozio. Non creare 2 negozi con lo stesso ID.
   -defaultname: Il nome iniziale del negozio.
   -eX, eY, eZ: La posizione esteriore del negozio (L'entrata)
   -iX, iY, iZ: La posizione interiore del negozio (L'uscita)
   -BuyPrice: Il costo del negozio
   -SellPrice: La quantitа che viene data al proprietario quando lo rivende
   -INT: L'ID dell'interior del negozio
   -VW: Il mondo virtuale del negozio (Usa 2 VW diversi se vuoi avere 2 negozi con lo stesso interior)

 Riporta:
   -true(1): Quando il negozio esisteva gia, ed и stata caricata
   -null(-1): Quando il negozio non esisteva ed и stata creata
   -false(0): Quando и impossibile caricare o creare
*/


stock CreateBusiness(bizid, defaultname[51], Float:eX, Float:eY, Float:eZ, Float:iX, Float:iY, Float:iZ, BuyPrice, SellPrice, INT, VW)
{
  new bizfile[51];
  format(bizfile, sizeof(bizfile), BIZ_FILE, bizid);
  if(!INI_Exist(bizfile))
  {
    INI_Open(bizfile);
    format(bInfo[bizid][bName], 24, "ForSale");
    INI_WriteString("Owner", "ForSale");

    format(bInfo[bizid][bTitle], 51, defaultname);
    INI_WriteString("Title", defaultname);

    bInfo[bizid][bCost] = BuyPrice;
    INI_WriteInt("Cost", BuyPrice);

    bInfo[bizid][bSell] = SellPrice;
    INI_WriteInt("Sell", SellPrice);

    bInfo[bizid][bInterior] = INT;
    INI_WriteInt("Interior", INT);

    bInfo[bizid][bVirtualWorld] = VW;
    INI_WriteInt("VirtualWorld", VW);

    bInfo[bizid][bLocked] = 1;
    INI_WriteInt("Locked", 1);

    bInfo[bizid][bInteriorX] = iX;
    bInfo[bizid][bInteriorY] = iY;
    bInfo[bizid][bInteriorZ] = iZ;
    INI_WriteFloat("bInteriorX", iX);
    INI_WriteFloat("bInteriorY", iY);
    INI_WriteFloat("bInteriorZ", iZ);

    bInfo[bizid][bExteriorX] = eX;
    bInfo[bizid][bExteriorY] = eY;
    bInfo[bizid][bExteriorZ] = eZ;
    INI_WriteFloat("ExteriorX", eX);
    INI_WriteFloat("ExteriorY", eY);
    INI_WriteFloat("ExteriorZ", eZ);

    BizPickup[bizid] = CreatePickup(1318, 23, eX, eY, eZ);

    Create3DTextLabel("Use mouse cen to open the menu", 0x33AA33AA, eX, eY, eZ+1, 20, 0, 1);
    Create3DTextLabel("Use mouse cen to exit the store", 0x33AA33AA, iX, iY, iZ+1, 20, VW, 1);

    #if defined PRINT_HOUSES
    print("------------New Business Created------------");
    printf("- Business ID: %d", bizid);
    printf("- Buy Cost: %d", BuyPrice);
    printf("- Sell Cost: %d", SellPrice);
    printf("- Interior: %d", INT);
    printf("- Virtual World: %d", VW);
    print("--------------------------------------------");
    #endif
    INI_Save();
    INI_Close();
    return -1;
  }
  else if(INI_Exist(bizfile))
  {
    new destination[24];
    new dest2[24];

    INI_Open(bizfile);

    INI_ReadString(destination, "Name");
    INI_ReadString(dest2, "Title");
    format(bInfo[bizid][bName], 24, destination);
    format(bInfo[bizid][bTitle], 51, dest2);
    bInfo[bizid][bLocked] = INI_ReadInt("Locked");

    INI_Close();

    bInfo[bizid][bCost] = BuyPrice;
    bInfo[bizid][bSell] = SellPrice;

    bInfo[bizid][bInterior] = INT;
    bInfo[bizid][bVirtualWorld] = VW;

    bInfo[bizid][bInteriorX] = iX;
    bInfo[bizid][bInteriorY] = iY;
    bInfo[bizid][bInteriorZ] = iZ;

    bInfo[bizid][bExteriorX] = eX;
    bInfo[bizid][bExteriorY] = eY;
    bInfo[bizid][bExteriorZ] = eZ;

    BizPickup[bizid] = CreatePickup(1318, 23, eX, eY, eZ);
   
    Create3DTextLabel("Use mouse cen to open the menu", 0x33AA33AA, eX, eY, eZ+1, 20, 0, 1);
    Create3DTextLabel("Use mouse cen to exit the store", 0x33AA33AA, iX, iY, iZ+1, 20, VW, 1);
   
    #if defined PRINT_HOUSES
    print("------------Business Loaded------------");
    printf("- Business ID: %d", bizid);
    printf("- Buy Cost: %d", BuyPrice);
    printf("- Sell Cost: %d", SellPrice);
    printf("- Interior: %d", INT);
    printf("- Virtual World: %d", VW);
    print("---------------------------------------");
    #endif
    return 1;
  }
  print("E Impossibile Creare Un Negozio. Controlla Di Avere Le Seguenti Cartelle In Scriptfiles:");
  print("SasiHouses ------>");
  print("           Houses");
  print("           Stores");
  return 0;
}

/*
                             OpenHouseDialog
 Function: Shows the dialog.

 Parameters:
   -playerid: The ID of the player.
   -houseid: The ID of the house.

 Returns:
   -true(1): When the house is for sale.
   -null(-1): When the house is bought.
   -false(0): When the house is bought and playerid is the owner.
*/


stock OpenHouseDialog(playerid, houseid)
{
  if(strcmp(hInfo[houseid][Name], "ForSale",true) == 0)
  {
    new string[180];
    if(GetPlayerMoney(playerid) >= hInfo[houseid][Cost]) { format(string,sizeof(string),"{33AA33}Buy this house for $%d", hInfo[houseid][Cost]); }
    else { format(string,sizeof(string),"{FF0000}Buy this house for $%d", hInfo[houseid][Cost]); }
    ShowPlayerDialog(playerid, DIALOG_FORSALE_HOUSE, DIALOG_STYLE_LIST, "{33AA33}For Sale!", string, "OK", "Close");
    return 1;
  }
  else
  {
    new string2[180];
    new name[24];
    GetPlayerName(playerid,name,sizeof(name));
    if(strcmp(hInfo[houseid][Name], name, true) == 0)
    {
      ShowPlayerDialog(playerid, DIALOG_MY_HOUSE,DIALOG_STYLE_LIST, "{33AA33}Welcome back to your house", "{33AA33}Enter in your house\n{33AA33}Open/Close the door\n{33AA33}Sell your house", "OK", "Close");
      return 0;
    }
    else
    {
      if(hInfo[houseid][Locked] == 1) { format(string2, sizeof(string2), "{FF0000}Enter this house");}
      else { format(string2, sizeof(string2), "{33AA33}Enter this house"); }
      ShowPlayerDialog(playerid, DIALOG_OTHERS_HOUSE,DIALOG_STYLE_LIST, "{33AA33}House", string2, "OK", "Chiudi");
      return -1;
    }

  }
 
}

/*
                             OpenBusinessDialog
 Function: Shows the dialog.

 Parameters:
   -playerid: The ID of the player.
   -bizid: The ID of the business.

 Returns:
   -true(1): When the biz is for sale.
   -null(-1): When the biz is bought.
   -false(0): When the biz is bought and playerid is the owner.
*/


stock OpenBusinessDialog(playerid, bizid)
{
  if(strcmp(bInfo[bizid][bName], "ForSale",true) == 0)
  {
    new string[256];
    new str2[180];
    if(GetPlayerMoney(playerid) >= bInfo[bizid][bCost]) { format(string,sizeof(string),"{33AA33}Buy this store for $%d", bInfo[bizid][bCost]); }
    else { format(string,sizeof(string),"{FF0000}Buy this store for $%d", bInfo[bizid][bCost]); }
    format(str2,sizeof(str2),"{FF0000}\"%s\" {33AA33}Store For Sale!",bInfo[bizid][bTitle]);
    ShowPlayerDialog(playerid, DIALOG_FORSALE_STORE, DIALOG_STYLE_LIST, str2, string, "OK", "Close");
    return 1;
  }
  else
  {
    new string[180];
    new string2[180];
    new name[24];
    GetPlayerName(playerid,name,sizeof(name));
    if(strcmp(bInfo[bizid][bName], name, true) == 0)
    {
      new str[256];
      format(str,sizeof(str), "{33AA33}Welcome back to {FF0000}\"%s\"", bInfo[bizid][bTitle]);
      ShowPlayerDialog(playerid, DIALOG_MY_STORE, DIALOG_STYLE_LIST, str, "{33AA33}Enter your store\n{33AA33}Open/close the store\n{33AA33}Rename your store\n{33AA33}Sell your store", "OK", "Close");
      return 0;
    }
    else
    {
      format(string, sizeof(string), "%s\n{33AA33}Proprietario: %s", bInfo[bizid][bTitle], bInfo[bizid][bName]);
      if(bInfo[bizid][bLocked] == 1) { format(string2, sizeof(string2), "{FF0000}Enter this store");}
      else { format(string2, sizeof(string2), "{33AA33}Enter this store"); }
      ShowPlayerDialog(playerid, DIALOG_OTHERS_STORE, DIALOG_STYLE_LIST, string, string2, "OK", "Close");
      return -1;
    }

  }

}

/*
                             GetHouseID
 Function: Gets the house ID of the player.

 Parameters:
   -playerid: The ID of the player.

 Returns:
   -houseid(): When playerid is near to any house pickup
   -invalid(-255): When playerid isn't near to any house

*/


stock GetHouseID(playerid)
{
  for(new i=0; i<MAX_HOUSES; i++)
  {
    if(IsPlayerNearPoint(2.0, playerid, hInfo[i][ExteriorX], hInfo[i][ExteriorY], hInfo[i][ExteriorZ]))
    {
      return i;
    }
  }
  return INVALID_HOUSE_ID;
}

/*
                             GetBizID
 Function: Gets the biz ID of the player.

 Parameters:
   -playerid: The ID of the player.

 Returns:
   -bizid): When playerid is near to any biz pickup
   -invalid(-255): When playerid isn't near to any biz

*/


stock GetBizID(playerid)
{
  for(new i=0; i<MAX_HOUSES; i++)
  {
    if(IsPlayerNearPoint(2.0, playerid, bInfo[i][bExteriorX], bInfo[i][bExteriorY], bInfo[i][bExteriorZ]))
    {
      return i;
    }
  }
  return INVALID_HOUSE_ID;
}

/*
                             IsPlayerNearPoint
 Function: Returns wheter playerid is near a point

 Parameters:
   -radi: The radius of the sphere.
   -playerid: The ID of the player.
   -x, y, z: The coordinates of the second point

 Returns:
   -true: When playerid is connected and near x,y,z
   -false: When playerid is connected but isn't near x,y,z
   -null: When playerid isn't connected
*/


stock IsPlayerNearPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
  if(IsPlayerConnected(playerid))
  {
      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 1;
      }
      return 0;
  }
  return -1;
}

/*
                             BuyHouse
 Function: The player buys the house

 Parameters:
   -playerid: The ID of the player.
   -houseid: The ID of the house.

 Returns:
   -true(1): When bought successfully
   -false(0): When an error has occurred
*/


stock BuyHouse(playerid, houseid)
{
  new string2[256];
  new name[24];
  GetPlayerName(playerid, name, sizeof(name));
  #if defined PRINT_HOUSES
    printf("%s Bought House ID %d", name, houseid);
  #endif
  GivePlayerMoney(playerid, -hInfo[houseid][Cost]);
  format(string2,sizeof(string2), HOUSE_FILE, houseid);
  INI_Open(string2);
  INI_WriteString("Name", name);
  INI_WriteInt("Locked", 0);
  INI_Save();
  INI_Close();
  hInfo[houseid][Name] = name;
  hInfo[houseid][Locked] = 0;
  DestroyPickup(HousePickup[houseid]);
  HousePickup[houseid] = CreatePickup(1272, 23, hInfo[houseid][ExteriorX], hInfo[houseid][ExteriorY], hInfo[houseid][ExteriorZ]);
  ShowBoughtHouseMessage(playerid);
  return 1;
}

/*
                             BuyBusiness
 Function: The player buys the biz

 Parameters:
   -playerid: The ID of the player.
   -bizid: The ID of the biz.

 Returns:
   -true(1): When bought successfully
   -false(0): When an error has occurred
*/


stock BuyBusiness(playerid, bizid)
{
  new string2[256];
  new name[24];
  GetPlayerName(playerid, name, sizeof(name));
  #if defined PRINT_HOUSES
    printf("%s Bought Store ID %d", name, bizid);
  #endif
  GivePlayerMoney(playerid, -bInfo[bizid][bCost]);
  format(string2,sizeof(string2), BIZ_FILE, bizid);
  INI_Open(string2);
  INI_WriteString("Name", name);
  INI_WriteInt("Locked", 0);
  INI_Save();
  INI_Close();
  bInfo[bizid][bName] = name;
  bInfo[bizid][bLocked] = 0;
  ShowBoughtStoreMessage(playerid);
  return 1;
}

/*
                             SellHouse
 Function: The player sells the house

 Parameters:
   -playerid: The ID of the player.
   -houseid: The ID of the house.

 Returns:
   -true(1): When sold successfully
   -false(0): When an error has occurred
*/


stock SellHouse(playerid, houseid)
{
  new string[256];
  new name[24];
  GetPlayerName(playerid, name, sizeof(name));
  format(string,sizeof(string),HOUSE_FILE, houseid);
  INI_Open(string);
  INI_WriteString("Name","ForSale");
  INI_WriteInt("Locked", 1);
  INI_Save();
  INI_Close();
  #if defined PRINT_HOUSES
    printf("%s Sold House ID %d", name, houseid);
  #endif
  GivePlayerMoney(playerid, hInfo[houseid][Sell]);
  hInfo[houseid][Locked] = 1;
  format(hInfo[houseid][Name], 255, "ForSale");
  DestroyPickup(HousePickup[houseid]);
  HousePickup[houseid] = CreatePickup(1273, 23, hInfo[houseid][ExteriorX], hInfo[houseid][ExteriorY], hInfo[houseid][ExteriorZ]);
  ShowSoldHouseMessage(playerid);
  return 1;
}

/*
                             SellBusiness
 Function: The player sells the business

 Parameters:
   -playerid: The ID of the player.
   -bizid: The ID of the biz.

 Returns:
   -true(1): When sold successfully
   -false(0): When an error has occurred
*/


stock SellBusiness(playerid, bizid)
{
  new string[256];
  new name[24];
  GetPlayerName(playerid, name, sizeof(name));
  format(string,sizeof(string),BIZ_FILE, bizid);
  INI_Open(string);
  INI_WriteString("Name","ForSale");
  INI_WriteInt("Locked", 1);
  INI_Save();
  INI_Close();
  #if defined PRINT_HOUSES
    printf("%s Sold Store ID %d", name, bizid);
  #endif
  GivePlayerMoney(playerid, bInfo[bizid][bSell]);
  bInfo[bizid][bLocked] = 1;
  format(bInfo[bizid][bName], 255, "ForSale");
  ShowSoldStoreMessage(playerid);
  return 1;
}

/*
                             EnterHouse
 Function: The player enters the house

 Parameters:
   -playerid: The ID of the player.
   -houseid: The ID of the house.

 Returns:
   -true(1): Everyway
*/


stock EnterHouse(playerid, houseid)
{
  SetPlayerPos(playerid, hInfo[houseid][InteriorX], hInfo[houseid][InteriorY], hInfo[houseid][InteriorZ]);
  SetPlayerInterior(playerid, hInfo[houseid][Interior]);
  SetPlayerVirtualWorld(playerid, hInfo[houseid][VirtualWorld]);
  return 1;
}

/*
                             EnterBusiness
 Function: The player enters the business

 Parameters:
   -playerid: The ID of the player.
   -bizid: The ID of the biz.

 Returns:
   -true(1): Everyway
*/


stock EnterBusiness(playerid, bizid)
{
  SetPlayerPos(playerid, bInfo[bizid][bInteriorX], bInfo[bizid][bInteriorY], bInfo[bizid][bInteriorZ]);
  SetPlayerInterior(playerid, bInfo[bizid][bInterior]);
  SetPlayerVirtualWorld(playerid, bInfo[bizid][bVirtualWorld]);
  new string[180];
  format(string,sizeof(string),"Welcome to %s!", bInfo[bizid][bTitle]);
  ShowPlayerDialog(playerid,1499,DIALOG_STYLE_MSGBOX, string, "", "OK", "");
  return 1;
}

/*
                             ExitHouse
 Function: The player exits the house

 Parameters:
   -playerid: The ID of the player.
   -houseid: The ID of the house.

 Returns:
   -true(1): Everyway
*/


stock ExitHouse(playerid, houseid)
{
  SetPlayerPos(playerid, hInfo[houseid][ExteriorX], hInfo[houseid][ExteriorY], hInfo[houseid][ExteriorZ]);
  SetPlayerInterior(playerid, 0);
  SetPlayerVirtualWorld(playerid, 0);
  return 1;
}

/*
                             ExitBusiness
 Function: The player exits the business

 Parameters:
   -playerid: The ID of the player.
   -bizid: The ID of the biz.

 Returns:
   -true(1): Everyway
*/


stock ExitBusiness(playerid, bizid)
{
  SetPlayerPos(playerid, bInfo[bizid][bExteriorX], bInfo[bizid][bExteriorY], bInfo[bizid][bExteriorZ]);
  SetPlayerInterior(playerid, 0);
  SetPlayerVirtualWorld(playerid, 0);
  return 1;
}

//MESSAGES

stock ShowLockedHouseMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{FF0000}ERROR","This house is locked!","OK","");
  return 1;
}

stock ShowLockedStoreMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{FF0000}ERROR","Sorry, this store is closed. Come later.","OK","");
  return 1;
}

stock ShowNoMoneyMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{FF0000}ERROR","You don't have enough money!","OK","");
  return 1;
}

stock ShowSoldHouseMessage(playerid)
{
  new string[51];
  format(string,sizeof(string),"House sold for $%d!", hInfo[GetHouseID(playerid)][Sell]);
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "OK", "");
  return 1;
}

stock ShowSoldStoreMessage(playerid)
{
  new string[51];
  format(string,sizeof(string),"Store sold for $%d!", hInfo[GetHouseID(playerid)][Sell]);
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "OK", "");
  return 1;
}

stock ShowBoughtHouseMessage(playerid)
{
  new string[51];
  format(string,sizeof(string),"House bought for $%d!", hInfo[GetHouseID(playerid)][Cost]);
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "OK", "");
  return 1;
}

stock ShowBoughtStoreMessage(playerid)
{
  new string[51];
  format(string,sizeof(string),"Store bought for $%d!", hInfo[GetHouseID(playerid)][Cost]);
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND", string, "OK", "");
  return 1;
}

stock LockYourHouseMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND","House closed!","OK","");
  return 1;
}

stock LockYourStoreMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND","Store closed!","OK","");
  return 1;
}

stock UnlockYourHouseMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND","House open!","OK","");
  return 1;
}

stock UnlockYourStoreMessage(playerid)
{
  ShowPlayerDialog(playerid, 1499, DIALOG_STYLE_MSGBOX, "{33AA33}COMMAND","Store open!","OK","");
  return 1;
}
Guys this is the Fs for houses I wanted to ask you all that when I exit any house it spawns me at 1 house in every case where as if I enter some other house also.
Reply
#2

In OnPlayerKeyStateChange() you did not return code execution after ExitHouse() and ExitBusiness() so do:

if(IsPlayerNearPoint(2.0, playerid, hInfo[i][InteriorX], hInfo[i][InteriorY], hInfo[i][InteriorZ])) {
ExitHouse(playerid, i);
return 1;
}

and do:

if(IsPlayerNearPoint(2.0, playerid, bInfo[i][bInteriorX], bInfo[i][bInteriorY], bInfo[i][bInteriorZ])) {
ExitBusiness(playerid, i);
return 1;
}

See what happends in your script after these changes. This also makes your script faster because unnecessary for loops are cut out in the code execution.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)