Guest User

Simple House System by Antironix edit by GStyler

a guest
Apr 25th, 2010
740
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 28.34 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dudb>
  3.  
  4. #pragma tabsize 0
  5.  
  6. #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
  7. //----------------------------
  8. //----------------------------
  9. //  Full house script by Antironix!
  10. //  Edited by GStyler
  11. //  Just don't remove the credits!
  12. //----------------------------
  13. //----------------------------
  14. #define MAX_DISTANCE_TO_PROP 1.5
  15. #define MAX_HOUSES 100
  16. #define MAX_RENTCOST 1000
  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. {  //Modelid, Buy Name, Price
  25.     {411,"Infernus",400000},
  26.     {522,"NRG-500",450000},
  27.     {451,"Turismo",370000},
  28.     {541,"Bullet",310000},
  29.     {415,"Cheetah",200000},
  30.     {429,"Banshee",360000},
  31.     {494,"Hotring",450000},
  32.     {556,"Monster",500000}
  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.     print("\n--------------------------------------");
  91.     print(" Simple House System by Antironix");
  92.     print("--------------------------------------\n");
  93.     AddHouse(0, 1442.9769,-629.5287,95.7186, 2317.8201,-1024.7500,1050.2109, 0, 0, 9, 0);
  94.     AddHouse(1, 1980.9896,-1719.0171,17.0304, 328.1465, 1478.4457,1084.4375, 0, 0, 15, 0);
  95.     SetTimer("rentfee", 1*60*60*1000, 1);//1 hour
  96.     SetTimer("newcar", CAR_DELIVER_TIME*60*10*1000,1);//1 hour
  97.     return 0;
  98. }
  99.  
  100. public OnFilterScriptExit()
  101. {
  102.     for(new i=0;i<MAX_HOUSES;i++)
  103.     {
  104.         DestroyPickup(HousePickup[i]);
  105.         DestroyVehicle(cInfo[i][HouseCar]);
  106.     }
  107.     return 0;
  108. }
  109.  
  110. #else
  111. #endif
  112.  
  113. public OnPlayerCommandText(playerid, cmdtext[])
  114. {
  115.     dcmd(kaufen,3,cmdtext);
  116.     dcmd(verkaufen,4,cmdtext);
  117.     dcmd(rein,5,cmdtext);
  118.     dcmd(raus,4,cmdtext);
  119.     dcmd(zu,4,cmdtext);
  120.     dcmd(auf,6,cmdtext);
  121.     dcmd(home,4,cmdtext);
  122.     dcmd(mietesetzen,7,cmdtext);
  123.     dcmd(mieten,4,cmdtext);
  124.     dcmd(einmieten,6,cmdtext);
  125.     dcmd(hausstatus,10,cmdtext);
  126.     dcmd(mieteholen,7,cmdtext);
  127.     dcmd(mietezahlen,7,cmdtext);
  128.     dcmd(hauscar,8,cmdtext);
  129.     return 0;
  130. }
  131.  
  132. AddHouse(houseid, Float:iconX, Float:iconY, Float:iconZ, Float:interiorX, Float:interiorY, Float:interiorZ, Costa, Sella, Interiora, virtualworld)
  133. {
  134.     new house[256];
  135.     format(house, sizeof(house), "Houses/houseid%d",houseid);
  136.     if(!dini_Exists(house))
  137.     {
  138.         dini_Create(house);
  139.         format(hInfo[houseid][Name], 24, "Zu Verkaufen");
  140.         dini_Set(house, "Name", "Zu Verkaufen");
  141.         format(hInfo[houseid][Renter], 24, "Zu Mieten");
  142.         dini_Set(house, "Mieter", "Zu Mieten");
  143.         hInfo[houseid][Rentable] = 0;
  144.         dini_IntSet(house, "Zummieten", 0);
  145.         hInfo[houseid][Rentcost] = 0;
  146.         dini_IntSet(house, "Mietkosten", 0);
  147.         hInfo[houseid][Cost] = Costa;
  148.         dini_IntSet(house, "Kosten", Costa);
  149.         hInfo[houseid][Sell] = Sella;
  150.         dini_IntSet(house, "Verkaufen", Sella);
  151.         hInfo[houseid][Interior] = Interiora;
  152.         dini_IntSet(house, "Interior", Interiora);
  153.         dini_IntSet(house, "Virtualworld", virtualworld);
  154.         hInfo[houseid][Virtualworld] = virtualworld;
  155.         hInfo[houseid][Locked] = 1;
  156.         dini_IntSet(house, "Zu", 1);
  157.         hInfo[houseid][InteriorX] = interiorX;
  158.         hInfo[houseid][InteriorY] = interiorY;
  159.         hInfo[houseid][InteriorZ] = interiorZ;
  160.         dini_FloatSet(house, "X", interiorX);
  161.         dini_FloatSet(house, "Y", interiorY);
  162.         dini_FloatSet(house, "Z", interiorZ);
  163.         dini_IntSet(house, "Mietezahlen", 0);
  164.         dini_IntSet(house, "Mieteholen", 0);
  165.         cInfo[houseid][HouseCar] = 429;
  166.         dini_IntSet(house, "HausAuto", 0);
  167.         cInfo[houseid][CarModel] = 429;
  168.         dini_IntSet(house, "AutoModel", 0);
  169.         cInfo[houseid][CarX] = 0;
  170.         cInfo[houseid][CarY] = 0;
  171.         cInfo[houseid][CarZ] = 0;
  172.         dini_FloatSet(house, "CarX", 0);
  173.         dini_FloatSet(house, "CarY", 0);
  174.         dini_FloatSet(house, "CarZ", 0);
  175.         cInfo[houseid][CarColor1] = 0;
  176.         cInfo[houseid][CarColor2] = 0;
  177.         dini_IntSet(house, "AutoFarbe1", 0);
  178.         dini_IntSet(house, "AutoFarbe2", 0);
  179.         cInfo[houseid][GotCar] = 0;
  180.         print("-");
  181.         print("--------------House Created--------------");
  182.         printf("- Haus ID: %d", houseid);
  183.         printf("- Kaufs Kosten: %d", Costa);
  184.         printf("- Verkaufs Kosten: %d", Sella);
  185.         printf("- Interior: %d", Interiora);
  186.         printf("- VirtualWorld: %d", virtualworld);
  187.         print("-----------------------------------------");
  188.         print("-");
  189.     }
  190.     else
  191.     {
  192.         format(hInfo[houseid][Name], 24, dini_Get(house, "Name"));
  193.         format(hInfo[houseid][Renter], 24, dini_Get(house, "Mieter"));
  194.         hInfo[houseid][Rentable] = dini_Int(house, "Zum Mieten");
  195.         hInfo[houseid][Rentcost] = dini_Int(house, "Mietkosten");
  196.         hInfo[houseid][Cost] = dini_Int(house, "Kosten");
  197.         hInfo[houseid][Sell] = dini_Int(house, "Verkauf");
  198.         hInfo[houseid][Interior] = dini_Int(house, "Interior");
  199.         hInfo[houseid][Locked] = dini_Int(house, "Abgeschlossen");
  200.         hInfo[houseid][InteriorX] = dini_Float(house, "X");
  201.         hInfo[houseid][InteriorY] = dini_Float(house, "Y");
  202.         hInfo[houseid][InteriorZ] = dini_Float(house, "Z");
  203.         hInfo[houseid][Virtualworld] = dini_Int(house, "Virtualworld");
  204.     }
  205.     hInfo[houseid][iconx]=iconX;
  206.     hInfo[houseid][icony]=iconY;
  207.     hInfo[houseid][iconz]=iconZ;
  208.     format(house, sizeof(house), "Houses/houseid%d",houseid);
  209.     if(strcmp(hInfo[houseid][Name],"ForSale",true)==0)
  210.     {
  211.         HousePickup[houseid] = CreatePickup(1273, 23, iconX, iconY, iconZ);//not bought
  212.     }
  213.     else
  214.     {
  215.         HousePickup[houseid] = CreatePickup(1272,23, iconX, iconY, iconZ);//bought
  216.     }
  217. }
  218.  
  219. AddHouseCar(houseid, modelid, Float:Carx, Float:Cary, Float:Carz, color1, color2, respawn_delay)
  220. {
  221.     new house[256];
  222.     format(house, sizeof(house), "Houses/houseid%d",houseid);
  223.     if(dini_Exists(house))
  224.     {
  225.         cInfo[houseid][GotCar] = 1;
  226.         if(dini_Int(house, "CarModel")==0)
  227.         {
  228.             dini_IntSet(house, "CarModel", modelid);
  229.             cInfo[houseid][CarModel] = modelid;
  230.             cInfo[houseid][CarX] = Carx;
  231.             cInfo[houseid][CarY] = Cary;
  232.             cInfo[houseid][CarZ] = Carz;
  233.             dini_FloatSet(house, "CarX", Carx);
  234.             dini_FloatSet(house, "CarY", Cary);
  235.             dini_FloatSet(house, "CarZ", Carz);
  236.             cInfo[houseid][CarColor1] = color1;
  237.             cInfo[houseid][CarColor2] = color2;
  238.             dini_IntSet(house, "CarColor1", color1);
  239.             dini_IntSet(house, "CarColor2", color2);
  240.             dini_IntSet(house, "Respawn_Delay", respawn_delay);
  241.             cInfo[houseid][Respawn_Delay] = respawn_delay;
  242.             cInfo[houseid][HouseCar] = CreateVehicle(cInfo[houseid][CarModel], Carx, Cary, Carz, 0.0, color1, color2, respawn_delay);
  243.             print("-");
  244.             print("--------------Car Created--------------");
  245.             printf("- Car Houseid: %d", houseid);
  246.             printf("- Modelid: %d", modelid);
  247.             printf("- Color 1: %d", color1);
  248.             printf("- Color 2: %d", color2);
  249.             printf("- Respawn Delay: %d", respawn_delay);
  250.             print("---------------------------------------");
  251.             print("-");
  252.         }
  253.         else
  254.         {
  255.             cInfo[houseid][CarModel] = dini_Int(house, "CarModel");
  256.         }
  257.         cInfo[houseid][CarX] = dini_Int(house, "CarX");
  258.         cInfo[houseid][CarY] = dini_Int(house, "CarY");
  259.         cInfo[houseid][CarZ] = dini_Int(house, "CarZ");
  260.         cInfo[houseid][CarColor1] = dini_Int(house, "CarColor1");
  261.         cInfo[houseid][CarColor2] = dini_Int(house, "CarColor2");
  262.         cInfo[houseid][Respawn_Delay] = dini_Int(house, "Respawn_Delay");
  263.         cInfo[houseid][HouseCar] = CreateVehicle(cInfo[houseid][CarModel], Carx, Cary, Carz, 0.0, color1, color2, respawn_delay);
  264.     }
  265. }
  266.  
  267. stock SpawnPlayerAtHouse(playerid)
  268. {
  269.     new str1[256],pname[24],str[256];
  270.     GetPlayerName(playerid, pname, sizeof(pname));
  271.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  272.     if (dini_Exists(str1))
  273.     {
  274.         if(dini_Int(str1,"Houseid")!=-255)
  275.         {
  276.             new Float:x,Float:y,Float:z;
  277.             str = dini_Get(str1,"SpawnInt");
  278.             SetPlayerInterior(playerid, strval(str));
  279.             playerinterior[playerid] = strval(str);
  280.             x = dini_Float(str1,"SpawnX");
  281.             y = dini_Float(str1,"SpawnY");
  282.             z = dini_Float(str1,"SpawnZ");
  283.             SetPlayerPos(playerid, x, y, z);
  284.         }
  285.     }
  286.     return 1;
  287. }
  288.  
  289. public OnPlayerSpawn(playerid)
  290. {
  291.     SpawnPlayerAtHouse(playerid);
  292. }
  293.  
  294. stock GetHouseStats(playerid, hid)
  295. {
  296.     new str2[256];
  297.     format(str2, sizeof(str2), "Haus Besitzter: %s", hInfo[hid][Name]);
  298.     SendClientMessage(playerid, c_y, str2);
  299.     if(strcmp(hInfo[hid][Renter],"ForRent",true))
  300.     {
  301.         format(str2, sizeof(str2), "Mieter: %s", hInfo[hid][Renter]);
  302.         SendClientMessage(playerid, c_y, str2);
  303.     }
  304.     format(str2,sizeof(str2),"Kosten: %i",hInfo[hid][Cost]);
  305.     SendClientMessage(playerid, c_y, str2);
  306. }
  307.  
  308. dcmd_verkaufen(playerid,params[])
  309. {
  310.     #pragma unused params
  311.     new str[255],str1[256],pname[24],housenumber;
  312.     housenumber = GetHouseID(playerid);
  313.     GetPlayerName(playerid, pname, 24);
  314.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  315.     if (strcmp(hInfo[housenumber][Name],pname,false)) return SendClientMessage(playerid, c_r, "Das ist nicht ihr Haus!");
  316.     SendClientMessage(playerid, c_y, "Sie haben ihr haus Verkauft!");
  317.     format(str, sizeof(str), "%s hat das haus mir der hausid 0 verkauft",pname);
  318.     print(str);
  319.     GivePlayerMoney(playerid, hInfo[housenumber][Sell]);
  320.     dini_Set(str1, "Name", "ForSale");
  321.     hInfo[housenumber][Locked] = dini_IntSet(str1,"Locked",1);
  322.     format(hInfo[housenumber][Name],255,"ForSale");
  323.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  324.     if (!dini_Exists(str1)) dini_Create(str1);
  325.     dini_IntSet(str1, "Houseid", -255);
  326.     DestroyPickup(HousePickup[housenumber]);
  327.     HousePickup[housenumber] = CreatePickup(1273, 23, hInfo[housenumber][iconx], hInfo[housenumber][icony], hInfo[housenumber][iconz]);
  328.     RemovePlayerMapIcon(playerid, housemapicon[playerid]);
  329.     return 1;
  330. }
  331.  
  332. dcmd_kaufen(playerid,params[])
  333. {
  334.     #pragma unused params
  335.     new str[255],str1[255],pname[24], housenumber;
  336.     housenumber = GetHouseID(playerid);
  337.     if(housenumber == -1) return SendClientMessage(playerid, c_r, "Sie sind an keinem Gültigen Haus!");
  338.  
  339.     GetPlayerName(playerid, pname, 24);
  340.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  341.     if(dini_Exists(str1))
  342.     {
  343.         if (dini_Int(str1, "Houseid")!=-255) return SendClientMessage(playerid, c_r, "Sie können nur 1 Haus haben/kaufen!");
  344.     }
  345.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  346.     if (strcmp(hInfo[housenumber][Name],"ForSale",true)) return SendClientMessage(playerid, c_r, "Das haus ist nicht zu Verkaufen!");
  347.     if(GetPlayerMoney(playerid)<hInfo[housenumber][Cost]) return SendClientMessage(playerid, c_r, "Sie haben nicht genug geld!");
  348.     SendClientMessage(playerid, c_y, "Sie haben das Haus gekauft!");
  349.     format(str, sizeof(str), "%s hat das haus mir der hausid 0 gekauft",pname);
  350.     print(str);
  351.     GivePlayerMoney(playerid, -hInfo[housenumber][Cost]);
  352.     dini_Set(str1, "Name", pname);
  353.     hInfo[housenumber][Name]=pname;
  354.     hInfo[housenumber][Locked] = dini_IntSet(str1,"Locked",0);
  355.  
  356.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  357.     if (!dini_Exists(str1)) dini_Create(str1);
  358.     new Float:sy, Float:sx, Float:sz;
  359.     dini_IntSet(str1, "Houseid", housenumber);
  360.     if(!dini_Isset(str1,"Rentid"))
  361.     {
  362.         dini_IntSet(str1, "Rentid", -255);
  363.     }
  364.     GetPlayerPos(playerid, sx,sy,sz);
  365.     dini_FloatSet(str1, "SpawnX", sx);
  366.     dini_FloatSet(str1, "SpawnY", sy);
  367.     dini_FloatSet(str1, "SpawnZ", sz);
  368.     dini_IntSet(str1, "SpawnInt", GetPlayerInterior(playerid));
  369.     DestroyPickup(HousePickup[housenumber]);
  370.     HousePickup[housenumber] = CreatePickup(1272, 23, hInfo[housenumber][iconx], hInfo[housenumber][icony], hInfo[housenumber][iconz]);
  371.     return 1;
  372. }
  373.  
  374. dcmd_zu(playerid,params[])
  375. {
  376.     #pragma unused params
  377.     new str1[256],pname[24],housenumber;
  378.     housenumber = GetHouseID(playerid);
  379.     GetPlayerName(playerid, pname, 24);
  380.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  381.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  382.     {
  383.         SendClientMessage(playerid, c_y, "Sie haben die Türen ihres Hauses Abgeschlossen!");
  384.         dini_IntSet(str1,"Locked",1);
  385.         hInfo[housenumber][Locked] = 1;
  386.     }
  387.     else if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  388.     {
  389.         SendClientMessage(playerid, c_y, "Sie haben die Türen ihres Hauses Abgeschlossen!");
  390.         dini_IntSet(str1,"Locked",1);
  391.         hInfo[housenumber][Locked] = 1;
  392.     }
  393.     else
  394.     {
  395.         SendClientMessage(playerid, c_r, "Dies ist nicht ihr Haus!");
  396.     }
  397.     return 1;
  398. }
  399.  
  400. dcmd_auf(playerid,params[])
  401. {
  402.     #pragma unused params
  403.     new str1[256],pname[24],housenumber;
  404.     housenumber = GetHouseID(playerid);
  405.     GetPlayerName(playerid, pname, 24);
  406.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  407.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  408.     {
  409.         SendClientMessage(playerid, c_y, "Sie haben die Türen ihres Hauses Aufgeschlossen!");
  410.         dini_IntSet(str1,"Locked",0);
  411.         hInfo[housenumber][Locked] = 0;
  412.     }
  413.     else if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  414.     {
  415.         SendClientMessage(playerid, c_y, "Sie haben die Türen ihres Hauses Aufgeschlossen!");
  416.         dini_IntSet(str1,"Locked",0);
  417.         hInfo[housenumber][Locked] = 0;
  418.     }
  419.     else
  420.     {
  421.         SendClientMessage(playerid, c_r, "Dies ist nicht ihr haus!");
  422.     }
  423.     return 1;
  424. }
  425.  
  426. dcmd_rein(playerid,params[])
  427. {
  428.     #pragma unused params
  429.     new str1[255],pname[24],housenumber;
  430.     housenumber = GetHouseID(playerid);
  431.     GetPlayerPos(playerid, housex, housey, housez);
  432.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  433.     GetPlayerName(playerid, pname, 24);
  434.     if(hInfo[housenumber][Locked]==1) return SendClientMessage(playerid, c_r, "Die Türen des Hauses wurden abgeschlossen!");
  435.     playerworld[playerid] = GetPlayerVirtualWorld(playerid);
  436.     SendClientMessage(playerid, c_y, "Sie haben das Haus betreten!");
  437.     SetPlayerVirtualWorld(playerid, hInfo[housenumber][Virtualworld]);
  438.     SetPlayerInterior(playerid, hInfo[housenumber][Interior]);
  439.     SetPlayerPos(playerid, hInfo[housenumber][InteriorX], hInfo[housenumber][InteriorY], hInfo[housenumber][InteriorZ]);
  440.     playerinterior[playerid] = hInfo[housenumber][Interior];
  441.     return 1;
  442. }
  443.  
  444. dcmd_raus(playerid,params[])
  445. {
  446.     #pragma unused params
  447.  
  448.     if(GetPlayerInterior(playerid)==playerinterior[playerid])
  449.     {
  450.         SetPlayerPos(playerid, housex, housey, housez);
  451.         SetPlayerInterior(playerid, playerworld[playerid]);
  452.     }
  453.     else
  454.     {
  455.         SendClientMessage(playerid, c_r, "Sie haben kein Haus betreten!");
  456.     }
  457.     return 1;
  458. }
  459.  
  460. dcmd_home(playerid,params[])
  461. {
  462.     #pragma unused params
  463.     new str1[256],pname[24];
  464.     GetPlayerName(playerid, pname, 24);
  465.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  466.     if(!dini_Exists(str1)) return SendClientMessage(playerid, c_r, "Sie haben kein Haus!");
  467.     if(dini_Int(str1, "Houseid")!=-255)
  468.     {
  469.         housemapicon[playerid] = SetPlayerMapIcon(playerid,31,hInfo[dini_Int(str1, "Houseid")][iconx], hInfo[dini_Int(str1, "Houseid")][icony], hInfo[dini_Int(str1, "Houseid")][iconz],31,c_y);
  470.     }
  471.     else if (dini_Int(str1, "Rentid")!=-255)
  472.     {
  473.         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);
  474.     }
  475.     else
  476.     {
  477.         SendClientMessage(playerid, c_r, "Sie haben kein Haus!");
  478.     }
  479.     return 1;
  480. }
  481.  
  482. dcmd_mietesetzen(playerid,params[])
  483. {
  484.     new str[256],str1[256],pname[24],housenumber;
  485.     housenumber = GetHouseID(playerid);
  486.     GetPlayerName(playerid, pname, 24);
  487.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  488.     str = dini_Get(str1,"Name");
  489.     if (strcmp(str,pname,true)) return SendClientMessage(playerid, c_r, "Dies ist nicht ihr haus!");
  490.     new rentcost, rentable;
  491.     if (sscanf(params, "dd", rentable, rentcost)) return SendClientMessage(playerid, c_r, "Verwendung: /mietesetzen [0/1] [mietkosten]");
  492.     else if (rentcost<MIN_RENTCOST)
  493.     {
  494.         format(str, sizeof(str), "Die Minimalen Miet kosten sind $%i.", MIN_RENTCOST);
  495.         SendClientMessage(playerid, c_r, str);
  496.         return 1;
  497.     }
  498.     else if (rentcost>MAX_RENTCOST)
  499.     {
  500.         format(str, sizeof(str), "Die Maximalen Miet kosten sind $%i.", MAX_RENTCOST);
  501.         SendClientMessage(playerid, c_r, str);
  502.         return 1;
  503.     }
  504.     else if(rentable==1)
  505.     {
  506.         SendClientMessage(playerid, c_y, "Ihr Haus ist jetzt vermietbaren!");
  507.         hInfo[housenumber][Rentable] = 1;
  508.         dini_IntSet(str1, "Rentable", 1);
  509.         hInfo[housenumber][Rentcost] = rentcost;
  510.         dini_IntSet(str1, "Rentcost", rentcost);
  511.         return 1;
  512.     }
  513.     else if(rentable==0)
  514.     {
  515.         SendClientMessage(playerid, c_y, "Ihr Haus ist nun nicht mehr vermietbare!");
  516.         hInfo[housenumber][Rentable] = 0;
  517.         dini_IntSet(str1, "Rentable", 0);
  518.         hInfo[housenumber][Rentcost] = rentcost;
  519.         dini_IntSet(str1, "Rentcost", rentcost);
  520.         return 1;
  521.     }
  522.     return 1;
  523. }
  524.  
  525. dcmd_mieten(playerid,params[])
  526. {
  527.     #pragma unused params
  528.     new str[255],str1[256],str5[255],pname[24],housenumber;
  529.     housenumber = GetHouseID(playerid);
  530.     GetPlayerName(playerid, pname, 24);
  531.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  532.     format(str5, sizeof(str5), "Houses/Users/%s", udb_encode(pname));
  533.     if(dini_Isset(str5, "Rentid"))
  534.     {
  535.         if (dini_Int(str5, "Rentid")!=-255) return SendClientMessage(playerid, c_r, "Sie können nur 1 Haus mieten!");
  536.     }
  537.     format(str, sizeof(str), dini_Get(str1,"Name"));
  538.     if (strcmp(str,"ForSale",true)==0) return SendClientMessage(playerid, c_r, "Das Haus hat keinen Besitzter!");
  539.     if(hInfo[housenumber][Rentable]==0 || strcmp(hInfo[housenumber][Renter], "ForRent", true)) return SendClientMessage(playerid, c_r, "In Diesem haus kann man nicht einmieten!");
  540.     if(GetPlayerMoney(playerid)<hInfo[housenumber][Rentcost]) return SendClientMessage(playerid, c_r, "Nicht genug Geld!");
  541.     dini_Set(str1, "Renter", udb_encode(pname));
  542.     format(hInfo[housenumber][Renter], 24, udb_encode(pname));
  543.     dini_IntSet(str5, "Rentid", housenumber);
  544.     format(str1, sizeof(str1), "Sie haben das Haus gemietet, und müssen $%i Die Stunde bezahlen", hInfo[housenumber][Rentcost]);
  545.     SendClientMessage(playerid, c_y, str1);
  546.     return 1;
  547. }
  548.  
  549. dcmd_einmieten(playerid,params[])
  550. {
  551.     #pragma unused params
  552.     new str1[256],pname[24],housenumber;
  553.     housenumber = GetHouseID(playerid);
  554.     GetPlayerName(playerid, pname, 24);
  555.     format(str1, sizeof(str1), "Houses/houseid%d", housenumber);
  556.     if(strcmp(hInfo[housenumber][Renter], pname, true)) return SendClientMessage(playerid, c_r, "Sie mieten bereits ein haus!");
  557.  
  558.     dini_Set(str1, "Renter", "ForRent");
  559.     format(hInfo[housenumber][Renter], 24, "ForRent");
  560.     format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname));
  561.     dini_IntSet(str1, "Rentid", -255);
  562.     SendClientMessage(playerid, c_y, "Sie haben dieses Haus gemietet!");
  563.     return 1;
  564. }
  565.  
  566. dcmd_hausstatus(playerid,params[])
  567. {
  568.     #pragma unused params
  569.     new str[256],housenumber;
  570.     housenumber = GetHouseID(playerid);
  571.     format(str, sizeof(str), "Besitzter: %s", hInfo[housenumber][Name]);
  572.     SendClientMessage(playerid, c_y, str);
  573.     format(str, sizeof(str), "Kosten: $%d", hInfo[housenumber][Cost]);
  574.     SendClientMessage(playerid, c_y, str);
  575.     format(str, sizeof(str), "Mieter: %s", hInfo[housenumber][Renter]);
  576.     SendClientMessage(playerid, c_y, str);
  577.     format(str, sizeof(str), "Mietkosten: $%d / Stunde", hInfo[housenumber][Rentcost]);
  578.     SendClientMessage(playerid, c_y, str);
  579.     return 1;
  580. }
  581.  
  582. dcmd_mieteholen(playerid,params[])
  583. {
  584.     #pragma unused params
  585.     new pname[24],housenumber;
  586.     housenumber = GetHouseID(playerid);
  587.     GetPlayerName(playerid, pname, 24);
  588.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  589.     {
  590.         new str[255];
  591.         SendClientMessage(playerid, c_y, "Sie sammelten das Geld des Mieters!");
  592.         format(str, sizeof(str), "Houses/houseid%d", housenumber);
  593.         GivePlayerMoney(playerid, dini_Int(str, "RentGet"));
  594.         dini_IntSet(str, "RentGet", 0);
  595.     }
  596.     else
  597.     {
  598.         SendClientMessage(playerid, c_r, "Das ist nicht ihr haus!");
  599.     }
  600.     return 1;
  601. }
  602.  
  603. dcmd_mietezahlen(playerid,params[])
  604. {
  605.     #pragma unused params
  606.     new pname[24],housenumber;
  607.     housenumber = GetHouseID(playerid);
  608.     GetPlayerName(playerid, pname, 24);
  609.     if(strcmp(hInfo[housenumber][Renter],pname,true)==0)
  610.     {
  611.         new str[255];
  612.         format(str, sizeof(str), "Houses/houseid%d", housenumber);
  613.         if(GetPlayerMoney(playerid)<dini_Int(str, "RentPay")) return SendClientMessage(playerid, c_r, "You don't have enough money to pay the house owner!");
  614.         SendClientMessage(playerid, c_y, "Sie haben das Geld an die Eigentümer bezahlt!");
  615.         GivePlayerMoney(playerid, -dini_Int(str, "RentPay"));
  616.         dini_IntSet(str, "RentPay", 0);
  617.     }
  618.     else
  619.     {
  620.         SendClientMessage(playerid, c_r, "Sie sind nicht der Einzigste mieter dieses hauses!");
  621.     }
  622.     return 1;
  623. }
  624.  
  625. dcmd_hauscar(playerid,params[])
  626. {
  627.     #pragma unused params
  628.     new pname[24],housenumber;
  629.     housenumber = GetHouseID(playerid);
  630.     GetPlayerName(playerid, pname, 24);
  631.     if(cInfo[housenumber][GotCar]==0) return SendClientMessage(playerid, c_r, "Das Haus kann kein auto bestellen!");
  632.     if(strcmp(hInfo[housenumber][Name],pname,true)==0)
  633.     {
  634.         new carname[40];
  635.         if (sscanf(params, "s", carname))
  636.         {
  637.             SendClientMessage(playerid, c_r, "USAGE: /hauscar [CarName]");
  638.         }
  639.         else
  640.         {
  641.             new str[256], abc;
  642.             for(new i=0;i<MAX_BUY_CARS;i++)
  643.             {
  644.                 if(strcmp(carname,Buyable_Cars[i][CarName],true)==0)
  645.                 {
  646.                     if(GetPlayerMoney(playerid)<Buyable_Cars[i][CarCost]) return SendClientMessage(playerid, c_r, "Nicht genug geld!");
  647.                     GivePlayerMoney(playerid, -Buyable_Cars[i][CarCost]);
  648.                     cInfo[housenumber][CarModel] = Buyable_Cars[i][CarModel];
  649.                     format(str, sizeof(str), "Houses/houseid%d", housenumber);
  650.                     dini_IntSet(str, "CarModel", Buyable_Cars[i][CarModel]);
  651.                     format(str, sizeof(str), "Ihre bestellung für das Auto %s für $%d wurde angenommen!", carname, Buyable_Cars[i][CarCost]);
  652.                     SendClientMessage(playerid, c_y, str);
  653.                     SendClientMessage(playerid, c_y, "Es wird einige Zeit dauern, wenn Ihr Auto ausgeliefert bekommen.");
  654.                     cInfo[housenumber][NewCar] = 1;
  655.                     abc = 1;
  656.                 }
  657.             }
  658.             if(abc==0)
  659.             {
  660.                 SendClientMessage(playerid, c_r, "falscher auto name!");
  661.                 abc=0;
  662.             }
  663.  
  664.         }
  665.     }
  666.     else
  667.     {
  668.         SendClientMessage(playerid, c_r, "Das ist nicht ihr haus!");
  669.     }
  670.     return 1;
  671. }
  672.  
  673. public newcar()
  674. {
  675.     for(new carid=0;carid<MAX_HOUSES;carid++)
  676.     {
  677.         if(cInfo[carid][NewCar]==1)
  678.         {
  679.             cInfo[carid][NewCar]=0;
  680.             KillVehicle(cInfo[carid][HouseCar]);
  681.             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]);
  682.         }
  683.     }
  684. }
  685.  
  686. public KillVehicle(carid)
  687. {
  688.     for (new i=0;i<MAX_PLAYERS;i++)
  689.     {
  690.         if(IsPlayerInVehicle(i, carid))
  691.         {
  692.             RemovePlayerFromVehicle(i);
  693.             KillVeh[carid] = true;
  694.             SetVehicleToRespawn(carid);
  695.             SendClientMessage(i, c_r, "System: Dein auto wurde Zerstört.");
  696.             SendClientMessage(i, c_r, "Reason: Haus System.");
  697.         }
  698.         else
  699.         {
  700.             KillVeh[carid] = true;
  701.             SetVehicleToRespawn(carid);
  702.         }
  703.     }
  704. }
  705.  
  706. public OnVehicleSpawn(vehicleid)
  707. {
  708.     for(new i=0;i<MAX_HOUSES;i++)
  709.     {
  710.         if(KillVeh[cInfo[i][HouseCar]]==true)
  711.         {
  712.             KillVeh[cInfo[i][HouseCar]] = false;
  713.             DestroyVehicle(cInfo[i][HouseCar]);
  714.         }
  715.     }
  716. }
  717.  
  718. public rentfee()
  719. {
  720.     new str[255],str2[255],pname[24];
  721.     for(new houseid=0;houseid<MAX_HOUSES;houseid++)
  722.     {
  723.         format(str, sizeof(str), "Houses/houseid%d", houseid);
  724.         if(strcmp(hInfo[houseid][Renter], "ForRent", true))
  725.         {
  726.             for(new ii=0;ii<MAX_PLAYERS;ii++)
  727.             {
  728.                 if(IsPlayerConnected(ii))
  729.                 {
  730.                     GetPlayerName(ii, pname, 24);
  731.                     if(strcmp(hInfo[houseid][Renter], pname, true)==0)
  732.                     {
  733.                         format(str2, sizeof(str2), "Sie haben $%d bezahlt zum mieten in diesem haus!", hInfo[houseid][Rentcost]);
  734.                         SendClientMessage(ii, c_y, str2);
  735.                         dini_IntSet(str, "RentGet", dini_Int(str, "RentGet")+hInfo[houseid][Rentcost]);
  736.                         dini_IntSet(str, "RentPay", dini_Int(str, "RentPay")+hInfo[houseid][Rentcost]);
  737.                         hInfo[houseid][Rentfee]=1;
  738.                     }
  739.                 }
  740.             }
  741.             if(hInfo[houseid][Rentfee]==0)
  742.             {
  743.                     if(strcmp(hInfo[houseid][Renter],"ForRent"))
  744.                     {
  745.                         dini_IntSet(str, "RentGet", dini_Int(str, "RentGet")+hInfo[houseid][Rentcost]);
  746.                         dini_IntSet(str, "RentPay", dini_Int(str, "RentPay")+hInfo[houseid][Rentcost]);
  747.                     }
  748.             }
  749.             hInfo[houseid][Rentfee]=0;
  750.         }
  751.     }
  752. }
  753.  
  754. public OnPlayerPickUpPickup(playerid, pickupid)
  755. {
  756.     if(GetHouseID(playerid) != -255) GetHouseStats(playerid, GetHouseID(playerid));
  757.     return 0;
  758. }
  759.  
  760.  
  761. stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
  762. {
  763.     if(IsPlayerConnected(playerid))
  764.     {
  765.         new Float:oldposx, Float:oldposy, Float:oldposz;
  766.         new Float:tempposx, Float:tempposy, Float:tempposz;
  767.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  768.         tempposx = (oldposx -x);
  769.         tempposy = (oldposy -y);
  770.         tempposz = (oldposz -z);
  771.         if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  772.         {
  773.             return 1;
  774.         }
  775.     }
  776.     return 0;
  777. }
  778.  
  779. stock GetHouseID(playerid)
  780. {
  781.     for(new i=0; i<MAX_HOUSES; i++)
  782.     {
  783.         if(PlayerToPoint(MAX_DISTANCE_TO_PROP, playerid, hInfo[i][iconx], hInfo[i][icony], hInfo[i][iconz]))
  784.         {
  785.             return i;
  786.         }
  787.     }
  788.     return -255;
  789. }
  790.  
  791. stock sscanf(string[], format[], {Float,_}:...)
  792. {
  793.     new
  794.         formatPos = 0,
  795.         stringPos = 0,
  796.         paramPos = 2,
  797.         paramCount = numargs();
  798.     while (paramPos < paramCount && string[stringPos])
  799.     {
  800.         switch (format[formatPos++])
  801.         {
  802.             case '\0':
  803.             {
  804.                 return 0;
  805.             }
  806.             case 'i', 'd':
  807.             {
  808.                 new
  809.                     neg = 1,
  810.                     num = 0,
  811.                     ch = string[stringPos];
  812.                 if (ch == '-')
  813.                 {
  814.                     neg = -1;
  815.                     ch = string[++stringPos];
  816.                 }
  817.                 do
  818.                 {
  819.                     stringPos++;
  820.                     if (ch >= '0' && ch <= '9')
  821.                     {
  822.                         num = (num * 10) + (ch - '0');
  823.                     }
  824.                     else
  825.                     {
  826.                         return 1;
  827.                     }
  828.                 }
  829.                 while ((ch = string[stringPos]) && ch != ' ');
  830.                 setarg(paramPos, 0, num * neg);
  831.             }
  832.             case 'h', 'x':
  833.             {
  834.                 new
  835.                     ch,
  836.                     num = 0;
  837.                 while ((ch = string[stringPos++]))
  838.                 {
  839.                     switch (ch)
  840.                     {
  841.                         case 'x', 'X':
  842.                         {
  843.                             num = 0;
  844.                             continue;
  845.                         }
  846.                         case '0' .. '9':
  847.                         {
  848.                             num = (num << 4) | (ch - '0');
  849.                         }
  850.                         case 'a' .. 'f':
  851.                         {
  852.                             num = (num << 4) | (ch - ('a' - 10));
  853.                         }
  854.                         case 'A' .. 'F':
  855.                         {
  856.                             num = (num << 4) | (ch - ('A' - 10));
  857.                         }
  858.                         case ' ':
  859.                         {
  860.                             break;
  861.                         }
  862.                         default:
  863.                         {
  864.                             return 1;
  865.                         }
  866.                     }
  867.                 }
  868.                 setarg(paramPos, 0, num);
  869.             }
  870.             case 'c':
  871.             {
  872.                 setarg(paramPos, 0, string[stringPos++]);
  873.             }
  874.             case 'f':
  875.             {
  876.                 new tmp[25];
  877.                 strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2);
  878.                 setarg(paramPos, 0, _:floatstr(tmp));
  879.             }
  880.             case 's', 'z':
  881.             {
  882.                 new
  883.                     i = 0,
  884.                     ch;
  885.                 if (format[formatPos])
  886.                 {
  887.                     while ((ch = string[stringPos++]) && ch != ' ')
  888.                     {
  889.                         setarg(paramPos, i++, ch);
  890.                     }
  891.                     if (!i) return 1;
  892.                 }
  893.                 else
  894.                 {
  895.                     while ((ch = string[stringPos++]))
  896.                     {
  897.                         setarg(paramPos, i++, ch);
  898.                     }
  899.                 }
  900.                 stringPos--;
  901.                 setarg(paramPos, i, '\0');
  902.             }
  903.             default:
  904.             {
  905.                 continue;
  906.             }
  907.         }
  908.         while (string[stringPos] && string[stringPos] != ' ')
  909.         {
  910.             stringPos++;
  911.         }
  912.         while (string[stringPos] == ' ')
  913.         {
  914.             stringPos++;
  915.         }
  916.         paramPos++;
  917.     }
  918.     while (format[formatPos] == 'z') formatPos++;
  919.     return format[formatPos];
  920. }
  921.  
  922. /*public OnVehicleMod(vehicleid, componentid)
  923. {
  924.     new house[256];
  925.     for(new i=0; i<MAX_HOUSES; i++)
  926.     {
  927.         format(house, sizeof(house), "Houses/houseid%d",i);
  928.         if(!dini_Isset(house, "CarModel")) continue;
  929.         if(
  930.     }
  931.     return 1;
  932. }*/
Advertisement
Add Comment
Please, Sign In to add comment