Guest User

aHouse

a guest
Jun 13th, 2010
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 31.65 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dudb>
  3. #include <dini>
  4.  
  5. #define FILTERSCRIPT
  6.  
  7. #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
  8. //----------------------------
  9. //----------------------------
  10. //  Full house script by Antironix!
  11. //  Just don't remove the credits!
  12. //----------------------------
  13. //----------------------------
  14. #define MAX_DISTANCE_TO_PROP 1.5
  15. #define MAX_HOUSES 25
  16. #define MAX_RENTCOST 100000
  17. #define MIN_RENTCOST 500
  18. #define MAX_BUY_CARS 8
  19. #define CAR_DELIVER_TIME 1 //The time that it takes that your car will be delivered. In hours.
  20.  
  21. //buyable cars
  22. enum CarInfo {CarModel,CarName[24],CarCost};
  23. new Buyable_Cars[MAX_BUY_CARS][CarInfo] =
  24. {
  25.     {411,"Infernus",50000},
  26.     {522,"NRG-500",50000},
  27.     {451,"Turismo",50000},
  28.     {541,"Bullet",50000},
  29.     {415,"Cheetah",50000},
  30.     {429,"Banshee",50000},
  31.     {494,"Hotring",50000},
  32.     {556,"Monster",50000}
  33. };
  34. //----------------------------
  35. //----------------------------
  36. #define c_y 0xFFFF00AA
  37. #define c_r 0xAA3333AA
  38. new HousePickup[MAX_HOUSES];
  39. new playerinterior[MAX_PLAYERS]=-1;
  40. new Float:housex, Float:housey, Float:housez;
  41. new housemapicon[MAX_PLAYERS];
  42. new playerworld[MAX_PLAYERS];
  43. new bool:KillVeh[MAX_VEHICLES] = false;
  44. forward rentfee();
  45. forward newcar();
  46. forward KillVehicle(carid);
  47.  
  48. enum HouseInfo
  49. {
  50.     Name[24],
  51.     Renter[24],
  52.     Rentable,
  53.     Rentcost,
  54.     Cost,
  55.     Sell,
  56.     Interior,
  57.     Virtualworld,
  58.     Locked,
  59.     Float:InteriorX,
  60.     Float:InteriorY,
  61.     Float:InteriorZ,
  62.     Float:iconx,
  63.     Float:icony,
  64.     Float:iconz,
  65.     Rentfee
  66. }
  67. new hInfo[MAX_HOUSES][HouseInfo];
  68.  
  69. enum HouseCarInfo
  70. {
  71.     HouseCar,
  72.     GotCar,
  73.     Houseid,
  74.     CarModel,
  75.     Float:CarX,
  76.     Float:CarY,
  77.     Float:CarZ,
  78.     CarColor1,
  79.     CarColor2,
  80.     Respawn_Delay,
  81.     NewCar
  82. }
  83. new cInfo[MAX_HOUSES][HouseCarInfo];
  84.  
  85. #define FILTERSCRIPT
  86. #if defined FILTERSCRIPT
  87.  
  88. public OnFilterScriptInit()
  89. {
  90.     AddHouse(0, 2524.708007, -1658.585571, 15.824020, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 96); //Small house
  91.     AddHouse(1, 2523.258544, -1679.322387, 15.496999, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 200);//Medium House
  92.     AddHouse(2, 2514.306396, -1691.628173, 14.046038, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 147); //Small house
  93.     AddHouse(3, 2486.474121, -1644.539794, 14.077178, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 254);//Medium House
  94.     AddHouse(4, 2469.367675, -1646.346313, 13.780097, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 31); //Small house
  95.     AddHouse(5, 2452.079833, -1641.410888, 14.066207, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 42);//Medium House
  96.     AddHouse(6, 2459.347412, -1691.663696, 13.547404, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 165);//Medium House
  97.     AddHouse(7, 2409.027343, -1674.929199, 14.375000, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 60); //Small house
  98.     AddHouse(8, 2413.904785, -1646.787353, 14.011916, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 28); //Small house
  99.     AddHouse(9, 2393.170898, -1646.039550, 13.905097, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 208); //Small house
  100.     AddHouse(10, 2384.562500, -1675.832397, 15.245691, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 62);//Medium House
  101.     AddHouse(11, 2362.864990, -1643.193481, 14.351562, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 165);//Medium House
  102.     AddHouse(12, 2368.354248, -1675.343750, 14.168166, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 64);//Medium House
  103.     AddHouse(13, 2326.885253, -1681.938720, 14.929687, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 238); //Small house
  104.     AddHouse(14, 2326.760986, -1716.704223, 14.237878, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 123);//Medium House
  105.     AddHouse(15, 2308.929443, -1714.336669, 14.980066, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 116);//Medium House
  106.     AddHouse(16, 2022.940307, -1120.264282, 26.421045, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 126);//Medium House
  107.     AddHouse(17, 2000.065063, -1114.055419, 27.125000, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 209);//Medium House
  108.     AddHouse(18, 1955.515747, -1115.504272, 27.830497, 2496.65, -1696.55, 1014.74, 10000, 90000, 3, 216);//Medium House
  109.     AddHouse(19, 1939.205078, -1114.483276, 27.452295, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 40); //Small house
  110.     AddHouse(20, 1921.306396, -1115.236816, 27.088310, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 78); //Small house
  111.     AddHouse(21, 1906.116821, -1112.945556, 26.664062, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 157); //Small house
  112.     AddHouse(22, 1885.888427, -1113.511718, 26.275810, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 145); //Small house
  113.     AddHouse(23, 1895.496215, -2068.915771, 15.668893, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 213); //Small house
  114.     AddHouse(24, 1124.1958,-2036.2874,69.8852, 2251.85, -1138.16, 1050.63, 50000, 49000, 9, 76); //casa branca
  115.     AddHouseCar(1, 429, 1975.3328,-1709.8126,15.9688, 0, 0, 5*60*1000);//5 min respawn delay
  116.     SetTimer("rentfee", 1*60*60*1000, 1);//1 hour
  117.     SetTimer("newcar", CAR_DELIVER_TIME*60*10*1000,1);//1 hour
  118.     return 0;
  119. }
  120.  
  121. public OnFilterScriptExit()
  122. {
  123.     for(new i=0;i<MAX_HOUSES;i++)
  124.     {
  125.          DestroyVehicle(cInfo[i][HouseCar]);
  126.     }
  127.     return 0;
  128. }
  129.  
  130. #else
  131. #endif
  132.  
  133. public OnPlayerCommandText(playerid, cmdtext[])
  134. {
  135.     dcmd(comprarcasa,11,cmdtext);
  136.     dcmd(vendercasa,10,cmdtext);
  137.     dcmd(entrar,6,cmdtext);
  138.     dcmd(sair,4,cmdtext);
  139.     dcmd(fechar,6,cmdtext);
  140.     dcmd(abrir,5,cmdtext);
  141.     dcmd(home,4,cmdtext);
  142.     dcmd(setaluguel,10,cmdtext);
  143.     dcmd(alugar,6,cmdtext);
  144.     dcmd(desalugar,9,cmdtext);
  145.     dcmd(comandoscasa,12,cmdtext);
  146.     dcmd(statuscasa,10,cmdtext);
  147.     dcmd(recebera,8,cmdtext);
  148.     dcmd(pagara,6,cmdtext);
  149.     dcmd(veiculocasa,11,cmdtext);
  150.     return 0;
  151. }
  152.  
  153. AddHouse(houseid, Float:iconX, Float:iconY, Float:iconZ, Float:interiorX, Float:interiorY, Float:interiorZ, Costa, Sella, Interiora, virtualworld)
  154. {
  155.     new house[256];
  156.     format(house, sizeof(house), "Houses/houseid%d",houseid);
  157.     if(!dini_Exists(house))
  158.     {
  159.         dini_Create(house);
  160.         format(hInfo[houseid][Name], 24, "ForSale");
  161.         dini_Set(house, "Nome", "ForSale");
  162.         format(hInfo[houseid][Renter], 24, "ForRent");
  163.         dini_Set(house, "Inquilino", "ForRent");
  164.         hInfo[houseid][Rentable] = 0;
  165.         dini_IntSet(house, "Alugavel", 0);
  166.         hInfo[houseid][Rentcost] = 0;
  167.         dini_IntSet(house, "CustoAluguel", 0);
  168.         hInfo[houseid][Cost] = Costa;
  169.         dini_IntSet(house, "Valor", Costa);
  170.         hInfo[houseid][Sell] = Sella;
  171.         dini_IntSet(house, "Vendida", Sella);
  172.         hInfo[houseid][Interior] = Interiora;
  173.         dini_IntSet(house, "Interior", Interiora);
  174.         dini_IntSet(house, "Virtualworld", virtualworld);
  175.         hInfo[houseid][Virtualworld] = virtualworld;
  176.         hInfo[houseid][Locked] = 1;
  177.         dini_IntSet(house, "Fechada", 1);
  178.         hInfo[houseid][InteriorX] = interiorX;
  179.         hInfo[houseid][InteriorY] = interiorY;
  180.         hInfo[houseid][InteriorZ] = interiorZ;
  181.         dini_FloatSet(house, "X", interiorX);
  182.         dini_FloatSet(house, "Y", interiorY);
  183.         dini_FloatSet(house, "Z", interiorZ);
  184.         dini_IntSet(house, "AluguelPago", 0);
  185.         dini_IntSet(house, "AluguelRecebido", 0);
  186.         cInfo[houseid][HouseCar] = 429;
  187.         dini_IntSet(house, "VeiculoCasa", 0);
  188.         cInfo[houseid][CarModel] = 429;
  189.         dini_IntSet(house, "MVeiculoCasa", 0);
  190.         cInfo[houseid][CarX] = 0;
  191.         cInfo[houseid][CarY] = 0;
  192.         cInfo[houseid][CarZ] = 0;
  193.         dini_FloatSet(house, "CarX", 0);
  194.         dini_FloatSet(house, "CarY", 0);
  195.         dini_FloatSet(house, "CarZ", 0);
  196.         cInfo[houseid][CarColor1] = 0;
  197.         cInfo[houseid][CarColor2] = 0;
  198.         dini_IntSet(house, "CarColor1", 0);
  199.         dini_IntSet(house, "CarColor2", 0);
  200.         cInfo[houseid][GotCar] = 0;
  201.         print("-");
  202.         print("--------------House Created--------------");
  203.         printf("- CasaId: %d", houseid);
  204.         printf("- Valor da Compra: %d", Costa);
  205.         printf("- Valor da Venda: %d", Sella);
  206.         printf("- Interior: %d", Interiora);
  207.         printf("- VirtualWorld: %d", virtualworld);
  208.         print("-----------------------------------------");
  209.         print("-");
  210.     }
  211.     else
  212.     {
  213.         format(hInfo[houseid][Name], 24, dini_Get(house, "Nome"));
  214.         format(hInfo[houseid][Renter], 24, dini_Get(house, "Inquilino"));
  215.         hInfo[houseid][Rentable] = dini_Int(house, "Alugavel");
  216.         hInfo[houseid][Rentcost] = dini_Int(house, "CustoAluguel");
  217.         hInfo[houseid][Cost] = dini_Int(house, "Valor");
  218.         hInfo[houseid][Sell] = dini_Int(house, "Vendida");
  219.         hInfo[houseid][Interior] = dini_Int(house, "Interior");
  220.         hInfo[houseid][Locked] = dini_Int(house, "Fechada");
  221.         hInfo[houseid][InteriorX] = dini_Float(house, "X");
  222.         hInfo[houseid][InteriorY] = dini_Float(house, "Y");
  223.         hInfo[houseid][InteriorZ] = dini_Float(house, "Z");
  224.         hInfo[houseid][Virtualworld] = dini_Int(house, "Virtualworld");
  225.     }
  226.     hInfo[houseid][iconx]=iconX;
  227.     hInfo[houseid][icony]=iconY;
  228.     hInfo[houseid][iconz]=iconZ;
  229.     format(house, sizeof(house), "Houses/CasaId%d",houseid);
  230.     if(strcmp(hInfo[houseid][Name],"ForSale",true)==0)
  231.     {
  232.         HousePickup[houseid] = CreatePickup(1273, 1, iconX, iconY, iconZ);//not bought
  233.     }
  234.     else
  235.     {
  236.         HousePickup[houseid] = CreatePickup(1272,1, iconX, iconY, iconZ);//bought
  237.     }
  238. }
  239.  
  240. AddHouseCar(houseid, modelid, Float:Carx, Float:Cary, Float:Carz, color1, color2, respawn_delay)
  241. {
  242.     new house[256];
  243.     format(house, sizeof(house), "Houses/CasaId%d",houseid);
  244.     if(dini_Exists(house))
  245.     {
  246.         cInfo[houseid][GotCar] = 1;
  247.         if(dini_Int(house, "MVeiculoCasa")==0)
  248.         {
  249.             dini_IntSet(house, "MVeiculoCasa", modelid);
  250.             cInfo[houseid][CarModel] = modelid;
  251.             cInfo[houseid][CarX] = Carx;
  252.             cInfo[houseid][CarY] = Cary;
  253.             cInfo[houseid][CarZ] = Carz;
  254.             dini_FloatSet(house, "CarX", Carx);
  255.             dini_FloatSet(house, "CarY", Cary);
  256.             dini_FloatSet(house, "CarZ", Carz);
  257.             cInfo[houseid][CarColor1] = color1;
  258.             cInfo[houseid][CarColor2] = color2;
  259.             dini_IntSet(house, "CarColor1", color1);
  260.             dini_IntSet(house, "CarColor2", color2);
  261.             dini_IntSet(house, "Respawn_Delay", respawn_delay);
  262.             cInfo[houseid][Respawn_Delay] = respawn_delay;
  263.             cInfo[houseid][HouseCar] = CreateVehicle(cInfo[houseid][CarModel], Carx, Cary, Carz, 0.0, color1, color2, respawn_delay);
  264.             print("-");
  265.             print("--------------Car Created--------------");
  266.             printf("- Veiculo CasaID: %d", houseid);
  267.             printf("- ModeloID: %d", modelid);
  268.             printf("- Color 1: %d", color1);
  269.             printf("- Color 2: %d", color2);
  270.             printf("- Respawn Delay: %d", respawn_delay);
  271.             print("---------------------------------------");
  272.             print("-");
  273.         }
  274.         else
  275.         {
  276.             cInfo[houseid][CarModel] = dini_Int(house, "MVeiculoCasa");
  277.         }
  278.         cInfo[houseid][CarX] = dini_Int(house, "CarX");
  279.         cInfo[houseid][CarY] = dini_Int(house, "CarY");
  280.         cInfo[houseid][CarZ] = dini_Int(house, "CarZ");
  281.         cInfo[houseid][CarColor1] = dini_Int(house, "CarColor1");
  282.         cInfo[houseid][CarColor2] = dini_Int(house, "CarColor2");
  283.         cInfo[houseid][Respawn_Delay] = dini_Int(house, "Respawn_Delay");
  284.         cInfo[houseid][HouseCar] = CreateVehicle(cInfo[houseid][CarModel], Carx, Cary, Carz, 0.0, color1, color2, respawn_delay);
  285.     }
  286. }
  287.  
  288. stock SpawnPlayerAtHouse(playerid)
  289. {
  290.     new str1[256],pname[24],str[256];
  291.     GetPlayerName(playerid, pname, sizeof(pname));
  292.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  293.     if (dini_Exists(str1))
  294.     {
  295.         if(dini_Int(str1,"CasaId")!=-255)
  296.         {
  297.             new Float:x,Float:y,Float:z;
  298.             str = dini_Get(str1,"SpawnInt");
  299.             SetPlayerInterior(playerid, strval(str));
  300.             playerinterior[playerid] = strval(str);
  301.             x = dini_Float(str1,"SpawnX");
  302.             y = dini_Float(str1,"SpawnY");
  303.             z = dini_Float(str1,"SpawnZ");
  304.             SetPlayerPos(playerid, x, y, z);
  305.         }
  306.     }
  307.     return 1;
  308. }
  309.  
  310. public OnPlayerSpawn(playerid)
  311. {
  312.     SpawnPlayerAtHouse(playerid);
  313. }
  314.  
  315. stock GetHouseStats(playerid, hid)
  316. {
  317.     new str2[256];
  318.     format(str2, sizeof(str2), "Dono da Casa: %s", hInfo[hid][Name]);
  319.     SendClientMessage(playerid, c_y, str2);
  320.     if(strcmp(hInfo[hid][Renter],"ForRent",true))
  321.     {
  322.         format(str2, sizeof(str2), "Alugado Por: %s", hInfo[hid][Renter]);
  323.         SendClientMessage(playerid, c_y, str2);
  324.     }
  325.     format(str2,sizeof(str2),"Valor: %i",hInfo[hid][Cost]);
  326.     SendClientMessage(playerid, c_y, str2);
  327. }
  328.  
  329. dcmd_vendercasa(playerid,params[])
  330. {
  331.     #pragma unused params
  332.     new str[255],str1[256],pname[24],housenumber;
  333.     housenumber = GetHouseID(playerid);
  334.     GetPlayerName(playerid, pname, 24);
  335.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  336.     if (strcmp(hInfo[housenumber][Name],pname,false)) return SendClientMessage(playerid, c_r, "This house isn't yours!");
  337.     SendClientMessage(playerid, c_y, "You have sold your house!");
  338.     format(str, sizeof(str), "%s has sold houseid 0",pname);
  339.     print(str);
  340.     GivePlayerMoney(playerid, hInfo[housenumber][Sell]);
  341.     dini_Set(str1, "Nome", "ForSale");
  342.     hInfo[housenumber][Locked] = dini_IntSet(str1,"Fechada",1);
  343.     format(hInfo[housenumber][Name],255,"ForSale");
  344.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  345.     if (!dini_Exists(str1)) dini_Create(str1);
  346.     dini_IntSet(str1, "CasaId", -255);
  347.     DestroyPickup(HousePickup[housenumber]);
  348.     HousePickup[housenumber] = CreatePickup(1273, 1, hInfo[housenumber][iconx], hInfo[housenumber][icony], hInfo[housenumber][iconz]);
  349.     RemovePlayerMapIcon(playerid, housemapicon[playerid]);
  350.     return 1;
  351. }
  352.  
  353. dcmd_comprarcasa(playerid,params[])
  354. {
  355.     #pragma unused params
  356.     new str[255],str1[255],pname[24], housenumber;
  357.     housenumber = GetHouseID(playerid);
  358.     if(housenumber == -1) return SendClientMessage(playerid, c_r, "You are not in a house icon!");
  359.  
  360.     GetPlayerName(playerid, pname, 24);
  361.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  362.     if(dini_Exists(str1))
  363.     {
  364.         if (dini_Int(str1, "CasaId")!=-255) return SendClientMessage(playerid, c_r, "You can only buy one house!");
  365.     }
  366.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  367.     if (strcmp(hInfo[housenumber][Name],"ForSale",true)) return SendClientMessage(playerid, c_r, "This house isn't for sale!");
  368.     if(GetPlayerMoney(playerid)<hInfo[housenumber][Cost]) return SendClientMessage(playerid, c_r, "Not enough money!");
  369.     SendClientMessage(playerid, c_y, "You have bought the house!");
  370.     format(str, sizeof(str), "%s has bought houseid 0",pname);
  371.     print(str);
  372.     GivePlayerMoney(playerid, -hInfo[housenumber][Cost]);
  373.     dini_Set(str1, "Nome", pname);
  374.     hInfo[housenumber][Name]=pname;
  375.     hInfo[housenumber][Locked] = dini_IntSet(str1,"Fechada",0);
  376.  
  377.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  378.     if (!dini_Exists(str1)) dini_Create(str1);
  379.     new Float:sy, Float:sx, Float:sz;
  380.     dini_IntSet(str1, "CasaId", housenumber);
  381.     if(!dini_Isset(str1,"Rentid"))
  382.     {
  383.         dini_IntSet(str1, "Rentid", -255);
  384.     }
  385.     GetPlayerPos(playerid, sx,sy,sz);
  386.     dini_FloatSet(str1, "SpawnX", sx);
  387.     dini_FloatSet(str1, "SpawnY", sy);
  388.     dini_FloatSet(str1, "SpawnZ", sz);
  389.     dini_IntSet(str1, "SpawnInt", GetPlayerInterior(playerid));
  390.     DestroyPickup(HousePickup[housenumber]);
  391.     HousePickup[housenumber] = CreatePickup(1272, 23, hInfo[housenumber][iconx], hInfo[housenumber][icony], hInfo[housenumber][iconz]);
  392.     return 1;
  393. }
  394.  
  395. dcmd_fechar(playerid,params[])
  396. {
  397.     #pragma unused params
  398.     new str1[256],pname[24],housenumber;
  399.     housenumber = GetHouseID(playerid);
  400.     GetPlayerName(playerid, pname, 24);
  401.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  402.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  403.     {
  404.         SendClientMessage(playerid, c_y, "You have locked your house!");
  405.         dini_IntSet(str1,"Fechada",1);
  406.         hInfo[housenumber][Locked] = 1;
  407.     }
  408.     else if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  409.     {
  410.         SendClientMessage(playerid, c_y, "You have locked your house!");
  411.         dini_IntSet(str1,"Fechada",1);
  412.         hInfo[housenumber][Locked] = 1;
  413.     }
  414.     else
  415.     {
  416.         SendClientMessage(playerid, c_r, "This house isn't yours!");
  417.     }
  418.     return 1;
  419. }
  420.  
  421. dcmd_abrir(playerid,params[])
  422. {
  423.     #pragma unused params
  424.     new str1[256],pname[24],housenumber;
  425.     housenumber = GetHouseID(playerid);
  426.     GetPlayerName(playerid, pname, 24);
  427.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  428.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  429.     {
  430.         SendClientMessage(playerid, c_y, "You have unlocked your house!");
  431.         dini_IntSet(str1,"Fechada",0);
  432.         hInfo[housenumber][Locked] = 0;
  433.     }
  434.     else if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  435.     {
  436.         SendClientMessage(playerid, c_y, "You have unlocked your house!");
  437.         dini_IntSet(str1,"Fechada",0);
  438.         hInfo[housenumber][Locked] = 0;
  439.     }
  440.     else
  441.     {
  442.         SendClientMessage(playerid, c_r, "This house isn't yours!");
  443.     }
  444.     return 1;
  445. }
  446.  
  447. dcmd_entrar(playerid,params[])
  448. {
  449.     #pragma unused params
  450.     new str1[255],pname[24],housenumber;
  451.     housenumber = GetHouseID(playerid);
  452.     GetPlayerPos(playerid, housex, housey, housez);
  453.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  454.     GetPlayerName(playerid, pname, 24);
  455.     if(hInfo[housenumber][Locked]==1) return SendClientMessage(playerid, c_r, "This house is locked!");
  456.     playerworld[playerid] = GetPlayerVirtualWorld(playerid);
  457.     SendClientMessage(playerid, c_y, "You entered the house!");
  458.     SetPlayerVirtualWorld(playerid, hInfo[housenumber][Virtualworld]);
  459.     SetPlayerInterior(playerid, hInfo[housenumber][Interior]);
  460.     SetPlayerPos(playerid, hInfo[housenumber][InteriorX], hInfo[housenumber][InteriorY], hInfo[housenumber][InteriorZ]);
  461.     playerinterior[playerid] = hInfo[housenumber][Interior];
  462.     return 1;
  463. }
  464.  
  465. dcmd_sair(playerid,params[])
  466. {
  467.     #pragma unused params
  468.  
  469.     if(GetPlayerInterior(playerid)==playerinterior[playerid])
  470.     {
  471.         SetPlayerPos(playerid, housex, housey, housez);
  472.         SetPlayerInterior(playerid, playerworld[playerid]);
  473.     }
  474.     else
  475.     {
  476.         SendClientMessage(playerid, c_r, "You have not entered a house!");
  477.     }
  478.     return 1;
  479. }
  480.  
  481. dcmd_home(playerid,params[])
  482. {
  483.     #pragma unused params
  484.     new str1[256],pname[24];
  485.     GetPlayerName(playerid, pname, 24);
  486.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  487.     if(!dini_Exists(str1)) return SendClientMessage(playerid, c_r, "You don't own a house!");
  488.     if(dini_Int(str1, "CasaId")!=-255)
  489.     {
  490.         housemapicon[playerid] = SetPlayerMapIcon(playerid,31,hInfo[dini_Int(str1, "CasaId")][iconx], hInfo[dini_Int(str1, "CasaId")][icony], hInfo[dini_Int(str1, "CasaId")][iconz],31,c_y);
  491.     }
  492.     else if (dini_Int(str1, "Rentid")!=-255)
  493.     {
  494.         housemapicon[playerid] = SetPlayerMapIcon(playerid,31,hInfo[dini_Int(str1, "Rentid")][iconx], hInfo[dini_Int(str1, "Rentid")][icony], hInfo[dini_Int(str1, "Rentid")][iconz],31,c_y);
  495.     }
  496.     else
  497.     {
  498.         SendClientMessage(playerid, c_r, "You don't own a house!");
  499.     }
  500.     return 1;
  501. }
  502.  
  503. dcmd_setaluguel(playerid,params[])
  504. {
  505.     new str[256],str1[256],pname[24],housenumber;
  506.     housenumber = GetHouseID(playerid);
  507.     GetPlayerName(playerid, pname, 24);
  508.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  509.     str = dini_Get(str1,"Nome");
  510.     if (strcmp(str,pname,true)) return SendClientMessage(playerid, c_r, "This house isn't yours!");
  511.     new rentcost, rentable;
  512.     if (sscanf(params, "dd", rentable, rentcost)) return SendClientMessage(playerid, c_r, "USAGE: /setaluguel [0/1] [Rentcost]");
  513.     else if (rentcost<MIN_RENTCOST)
  514.     {
  515.         format(str, sizeof(str), "The minimum rentcost is $%i.", MIN_RENTCOST);
  516.         SendClientMessage(playerid, c_r, str);
  517.         return 1;
  518.     }
  519.     else if (rentcost>MAX_RENTCOST)
  520.     {
  521.         format(str, sizeof(str), "The maximum rentcost is $%i.", MAX_RENTCOST);
  522.         SendClientMessage(playerid, c_r, str);
  523.         return 1;
  524.     }
  525.     else if(rentable==1)
  526.     {
  527.         SendClientMessage(playerid, c_y, "Your house is now rentable!");
  528.         hInfo[housenumber][Rentable] = 1;
  529.         dini_IntSet(str1, "Alugavel", 1);
  530.         hInfo[housenumber][Rentcost] = rentcost;
  531.         dini_IntSet(str1, "CustoAluguel", rentcost);
  532.         return 1;
  533.     }
  534.     else if(rentable==0)
  535.     {
  536.         SendClientMessage(playerid, c_y, "Your house is now not rentable!");
  537.         hInfo[housenumber][Rentable] = 0;
  538.         dini_IntSet(str1, "Alugavel", 0);
  539.         hInfo[housenumber][Rentcost] = rentcost;
  540.         dini_IntSet(str1, "CustoAluguel", rentcost);
  541.         return 1;
  542.     }
  543.     return 1;
  544. }
  545.  
  546. dcmd_alugar(playerid,params[])
  547. {
  548.     #pragma unused params
  549.     new str[255],str1[256],str5[255],pname[24],housenumber;
  550.     housenumber = GetHouseID(playerid);
  551.     GetPlayerName(playerid, pname, 24);
  552.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  553.     format(str5, sizeof(str5), "Houses/Users/%s", udb_encode(pname));
  554.     if(dini_Isset(str5, "Rentid"))
  555.     {
  556.         if (dini_Int(str5, "Rentid")!=-255) return SendClientMessage(playerid, c_r, "You can only rent one house at a time!");
  557.     }
  558.     format(str, sizeof(str), dini_Get(str1,"Nome"));
  559.     if (strcmp(str,"ForSale",true)==0) return SendClientMessage(playerid, c_r, "This house has no owner!");
  560.     if(hInfo[housenumber][Rentable]==0 || strcmp(hInfo[housenumber][Renter], "ForRent", true)) return SendClientMessage(playerid, c_r, "This house is not rentable!");
  561.     if(GetPlayerMoney(playerid)<hInfo[housenumber][Rentcost]) return SendClientMessage(playerid, c_r, "Not enough money!");
  562.     dini_Set(str1, "Inquilino", udb_encode(pname));
  563.     format(hInfo[housenumber][Renter], 24, udb_encode(pname));
  564.     dini_IntSet(str5, "Rentid", housenumber);
  565.     format(str1, sizeof(str1), "You have rented this house, it will cost you $%i an hour!", hInfo[housenumber][Rentcost]);
  566.     SendClientMessage(playerid, c_y, str1);
  567.     return 1;
  568. }
  569.  
  570. dcmd_desalugar(playerid,params[])
  571. {
  572.     #pragma unused params
  573.     new str1[256],pname[24],housenumber;
  574.     housenumber = GetHouseID(playerid);
  575.     GetPlayerName(playerid, pname, 24);
  576.     format(str1, sizeof(str1), "Houses/CasaId%d", housenumber);
  577.     if(strcmp(hInfo[housenumber][Renter], pname, true)) return SendClientMessage(playerid, c_r, "You aren't renting this house!");
  578.  
  579.     dini_Set(str1, "Inquilino", "ForRent");
  580.     format(hInfo[housenumber][Renter], 24, "ForRent");
  581.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  582.     dini_IntSet(str1, "Rentid", -255);
  583.     SendClientMessage(playerid, c_y, "You have unrented this house!");
  584.     return 1;
  585. }
  586.  
  587. dcmd_comandoscasa(playerid,params[])
  588. {
  589.     #pragma unused params
  590.     SendClientMessage(playerid, c_y, "------------------------------------------");
  591.     SendClientMessage(playerid, c_y, "Comandos da casa");
  592.     SendClientMessage(playerid, c_y, "/setaluguel [0/1] [Cost] - Dono");
  593.     SendClientMessage(playerid, c_y, "/veiculocasa [CarName]   - Dono");
  594.     SendClientMessage(playerid, c_y, "/recebera              - Dono");
  595.     SendClientMessage(playerid, c_y, "/fechar                 - Dono/Inquilino");
  596.     SendClientMessage(playerid, c_y, "/abrir               - Dono/Inquilino");
  597.     SendClientMessage(playerid, c_y, "/pagara              - Dono/Inquilino");
  598.     SendClientMessage(playerid, c_y, "/desalugar               - Dono/Inquilino");
  599.     SendClientMessage(playerid, c_y, "/alugar                 - Guest");
  600.     SendClientMessage(playerid, c_y, "------------------------------------------");
  601.     return 1;
  602. }
  603.  
  604. dcmd_statuscasa(playerid,params[])
  605. {
  606.     #pragma unused params
  607.     new str[256],housenumber;
  608.     housenumber = GetHouseID(playerid);
  609.     format(str, sizeof(str), "Dono: %s", hInfo[housenumber][Name]);
  610.     SendClientMessage(playerid, c_y, str);
  611.     format(str, sizeof(str), "Valor: $%d", hInfo[housenumber][Cost]);
  612.     SendClientMessage(playerid, c_y, str);
  613.     format(str, sizeof(str), "Inquilino: %s", hInfo[housenumber][Renter]);
  614.     SendClientMessage(playerid, c_y, str);
  615.     format(str, sizeof(str), "CustoAlgeul $%d / hour", hInfo[housenumber][Rentcost]);
  616.     SendClientMessage(playerid, c_y, str);
  617.     return 1;
  618. }
  619.  
  620. dcmd_recebera(playerid,params[])
  621. {
  622.     #pragma unused params
  623.     new pname[24],housenumber;
  624.     housenumber = GetHouseID(playerid);
  625.     GetPlayerName(playerid, pname, 24);
  626.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  627.     {
  628.         new str[255];
  629.         SendClientMessage(playerid, c_y, "You collected the money of the renter!");
  630.         format(str, sizeof(str), "Houses/CasaId%d", housenumber);
  631.         GivePlayerMoney(playerid, dini_Int(str, "AluguelRecebido"));
  632.         dini_IntSet(str, "AluguelRecebido", 0);
  633.     }
  634.     else
  635.     {
  636.         SendClientMessage(playerid, c_r, "This house isn't yours!");
  637.     }
  638.     return 1;
  639. }
  640.  
  641. dcmd_pagara(playerid,params[])
  642. {
  643.     #pragma unused params
  644.     new pname[24],housenumber;
  645.     housenumber = GetHouseID(playerid);
  646.     GetPlayerName(playerid, pname, 24);
  647.     if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  648.     {
  649.         new str[255];
  650.         format(str, sizeof(str), "Houses/CasaId%d", housenumber);
  651.         if(GetPlayerMoney(playerid)<dini_Int(str, "AluguelPago")) return SendClientMessage(playerid, c_r, "You don't have enough money to pay the house owner!");
  652.         SendClientMessage(playerid, c_y, "You have payed the money to the owner!");
  653.         GivePlayerMoney(playerid, -dini_Int(str, "AluguelPago"));
  654.         dini_IntSet(str, "AluguelPago", 0);
  655.     }
  656.     else
  657.     {
  658.         SendClientMessage(playerid, c_r, "You aren't renting this house!");
  659.     }
  660.     return 1;
  661. }
  662.  
  663. dcmd_veiculocasa(playerid,params[])
  664. {
  665.     #pragma unused params
  666.     new pname[24],housenumber;
  667.     housenumber = GetHouseID(playerid);
  668.     GetPlayerName(playerid, pname, 24);
  669.     if(cInfo[housenumber][GotCar]==0) return SendClientMessage(playerid, c_r, "This house can't order a car!");
  670.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  671.     {
  672.         new carname[40];
  673.         if (sscanf(params, "s", carname))
  674.         {
  675.             SendClientMessage(playerid, c_r, "USAGE: /veiculocasa [CarName]");
  676.         }
  677.         else
  678.         {
  679.             new str[256], abc;
  680.             for(new i=0;i<MAX_BUY_CARS;i++)
  681.             {
  682.                 if(strcmp(carname,Buyable_Cars[i][CarName],true)==0)
  683.                 {
  684.                     if(GetPlayerMoney(playerid)<Buyable_Cars[i][CarCost]) return SendClientMessage(playerid, c_r, "Not enough money!");
  685.                     GivePlayerMoney(playerid, -Buyable_Cars[i][CarCost]);
  686.                     cInfo[housenumber][CarModel] = Buyable_Cars[i][CarModel];
  687.                     format(str, sizeof(str), "Houses/CasaId%d", housenumber);
  688.                     dini_IntSet(str, "MVeiculoCasa", Buyable_Cars[i][CarModel]);
  689.                     format(str, sizeof(str), "You have ordered the %s for $%d!", carname, Buyable_Cars[i][CarCost]);
  690.                     SendClientMessage(playerid, c_y, str);
  691.                     SendClientMessage(playerid, c_y, "It will take some time when your car will be delivered.");
  692.                     cInfo[housenumber][NewCar] = 1;
  693.                     abc = 1;
  694.                 }
  695.             }
  696.             if(abc==0)
  697.             {
  698.                 SendClientMessage(playerid, c_r, "Wrong vehicle name!");
  699.                 abc=0;
  700.             }
  701.  
  702.         }
  703.     }
  704.     else
  705.     {
  706.         SendClientMessage(playerid, c_r, "This house isn't yours!");
  707.     }
  708.     return 1;
  709. }
  710.  
  711.  
  712.  
  713. public newcar()
  714. {
  715.     for(new carid=0;carid<MAX_HOUSES;carid++)
  716.     {
  717.         if(cInfo[carid][NewCar]==1)
  718.         {
  719.             cInfo[carid][NewCar]=0;
  720.             KillVehicle(cInfo[carid][HouseCar]);
  721.             cInfo[carid][HouseCar] = CreateVehicle(cInfo[carid][CarModel], cInfo[carid][CarX], cInfo[carid][CarY], cInfo[carid][CarZ], 0.0, cInfo[carid][CarColor1], cInfo[carid][CarColor2], cInfo[carid][Respawn_Delay]);
  722.         }
  723.     }
  724. }
  725.  
  726. public KillVehicle(carid)
  727. {
  728.     for (new i=0;i<MAX_PLAYERS;i++)
  729.     {
  730.         if(IsPlayerInVehicle(i, carid))
  731.         {
  732.             RemovePlayerFromVehicle(i);
  733.             KillVeh[carid] = true;
  734.             SetVehicleToRespawn(carid);
  735.             SendClientMessage(i, c_r, "System: Your car has been destroyed.");
  736.             SendClientMessage(i, c_r, "Reason: House system.");
  737.         }
  738.         else
  739.         {
  740.             KillVeh[carid] = true;
  741.             SetVehicleToRespawn(carid);
  742.         }
  743.     }
  744. }
  745.  
  746. public OnVehicleSpawn(vehicleid)
  747. {
  748.     for(new i=0;i<MAX_HOUSES;i++)
  749.     {
  750.         if(KillVeh[cInfo[i][HouseCar]]==true)
  751.         {
  752.             KillVeh[cInfo[i][HouseCar]] = false;
  753.             DestroyVehicle(cInfo[i][HouseCar]);
  754.         }
  755.     }
  756. }
  757.  
  758. public rentfee()
  759. {
  760.     new str[255],str2[255],pname[24];
  761.     for(new houseid=0;houseid<MAX_HOUSES;houseid++)
  762.     {
  763.         format(str, sizeof(str), "Houses/CasaId%d", houseid);
  764.         if(strcmp(hInfo[houseid][Renter], "ForRent", true))
  765.         {
  766.             for(new ii=0;ii<MAX_PLAYERS;ii++)
  767.             {
  768.                 if(IsPlayerConnected(ii))
  769.                 {
  770.                     GetPlayerName(ii, pname, 24);
  771.                     if(strcmp(hInfo[houseid][Renter], pname, true)==0)
  772.                     {
  773.                         format(str2, sizeof(str2), "You have to pay $%d for the hour you have rented the hous!", hInfo[houseid][Rentcost]);
  774.                         SendClientMessage(ii, c_y, str2);
  775.                         dini_IntSet(str, "AluguelRecebido", dini_Int(str, "AluguelRecebido")+hInfo[houseid][Rentcost]);
  776.                         dini_IntSet(str, "AluguelPago", dini_Int(str, "AluguelPago")+hInfo[houseid][Rentcost]);
  777.                         hInfo[houseid][Rentfee]=1;
  778.                     }
  779.                 }
  780.             }
  781.             if(hInfo[houseid][Rentfee]==0)
  782.             {
  783.                     if(strcmp(hInfo[houseid][Renter],"ForRent"))
  784.                     {
  785.                         dini_IntSet(str, "AluguelRecebido", dini_Int(str, "AluguelRecebido")+hInfo[houseid][Rentcost]);
  786.                         dini_IntSet(str, "AluguelPago", dini_Int(str, "AluguelPago")+hInfo[houseid][Rentcost]);
  787.                     }
  788.             }
  789.             hInfo[houseid][Rentfee]=0;
  790.         }
  791.     }
  792. }
  793.  
  794. public OnPlayerPickUpPickup(playerid, pickupid)
  795. {
  796.     if(GetHouseID(playerid) != -255) GetHouseStats(playerid, GetHouseID(playerid));
  797.     return 0;
  798. }
  799.  
  800. stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
  801. {
  802.     if(IsPlayerConnected(playerid))
  803.     {
  804.         new Float:oldposx, Float:oldposy, Float:oldposz;
  805.         new Float:tempposx, Float:tempposy, Float:tempposz;
  806.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  807.         tempposx = (oldposx -x);
  808.         tempposy = (oldposy -y);
  809.         tempposz = (oldposz -z);
  810.         if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  811.         {
  812.             return 1;
  813.         }
  814.     }
  815.     return 0;
  816. }
  817.  
  818. stock GetHouseID(playerid)
  819. {
  820.     for(new i=0; i<MAX_HOUSES; i++)
  821.     {
  822.         if(PlayerToPoint(MAX_DISTANCE_TO_PROP, playerid, hInfo[i][iconx], hInfo[i][icony], hInfo[i][iconz]))
  823.         {
  824.             return i;
  825.         }
  826.     }
  827.     return -255;
  828. }
  829.  
  830. stock sscanf(string[], format[], {Float,_}:...)
  831. {
  832.     new
  833.         formatPos = 0,
  834.         stringPos = 0,
  835.         paramPos = 2,
  836.         paramCount = numargs();
  837.     while (paramPos < paramCount && string[stringPos])
  838.     {
  839.         switch (format[formatPos++])
  840.         {
  841.             case '\0':
  842.             {
  843.                 return 0;
  844.             }
  845.             case 'i', 'd':
  846.             {
  847.                 new
  848.                     neg = 1,
  849.                     num = 0,
  850.                     ch = string[stringPos];
  851.                 if (ch == '-')
  852.                 {
  853.                     neg = -1;
  854.                     ch = string[++stringPos];
  855.                 }
  856.                 do
  857.                 {
  858.                     stringPos++;
  859.                     if (ch >= '0' && ch <= '9')
  860.                     {
  861.                         num = (num * 10) + (ch - '0');
  862.                     }
  863.                     else
  864.                     {
  865.                         return 1;
  866.                     }
  867.                 }
  868.                 while ((ch = string[stringPos]) && ch != ' ');
  869.                 setarg(paramPos, 0, num * neg);
  870.             }
  871.             case 'h', 'x':
  872.             {
  873.                 new
  874.                     ch,
  875.                     num = 0;
  876.                 while ((ch = string[stringPos++]))
  877.                 {
  878.                     switch (ch)
  879.                     {
  880.                         case 'x', 'X':
  881.                         {
  882.                             num = 0;
  883.                             continue;
  884.                         }
  885.                         case '0' .. '9':
  886.                         {
  887.                             num = (num << 4) | (ch - '0');
  888.                         }
  889.                         case 'a' .. 'f':
  890.                         {
  891.                             num = (num << 4) | (ch - ('a' - 10));
  892.                         }
  893.                         case 'A' .. 'F':
  894.                         {
  895.                             num = (num << 4) | (ch - ('A' - 10));
  896.                         }
  897.                         case ' ':
  898.                         {
  899.                             break;
  900.                         }
  901.                         default:
  902.                         {
  903.                             return 1;
  904.                         }
  905.                     }
  906.                 }
  907.                 setarg(paramPos, 0, num);
  908.             }
  909.             case 'c':
  910.             {
  911.                 setarg(paramPos, 0, string[stringPos++]);
  912.             }
  913.             case 'f':
  914.             {
  915.                 new tmp[25];
  916.                 strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2);
  917.                 setarg(paramPos, 0, _:floatstr(tmp));
  918.             }
  919.             case 's', 'z':
  920.             {
  921.                 new
  922.                     i = 0,
  923.                     ch;
  924.                 if (format[formatPos])
  925.                 {
  926.                     while ((ch = string[stringPos++]) && ch != ' ')
  927.                     {
  928.                         setarg(paramPos, i++, ch);
  929.                     }
  930.                     if (!i) return 1;
  931.                 }
  932.                 else
  933.                 {
  934.                     while ((ch = string[stringPos++]))
  935.                     {
  936.                         setarg(paramPos, i++, ch);
  937.                     }
  938.                 }
  939.                 stringPos--;
  940.                 setarg(paramPos, i, '\0');
  941.             }
  942.             default:
  943.             {
  944.                 continue;
  945.             }
  946.         }
  947.         while (string[stringPos] && string[stringPos] != ' ')
  948.         {
  949.             stringPos++;
  950.         }
  951.         while (string[stringPos] == ' ')
  952.         {
  953.             stringPos++;
  954.         }
  955.         paramPos++;
  956.     }
  957.     while (format[formatPos] == 'z') formatPos++;
  958.     return format[formatPos];
  959. }
  960.  
  961. /*public OnVehicleMod(vehicleid, componentid)
  962. {
  963.     new house[256];
  964.     for(new i=0; i<MAX_HOUSES; i++)
  965.     {
  966.         format(house, sizeof(house), "Houses/houseid%d",i);
  967.         if(!dini_Isset(house, "MVeiculoCasa")) continue;
  968.         if(
  969.     }
  970.     return 1;
  971. }*/
Advertisement
Add Comment
Please, Sign In to add comment