Guest User

domy

a guest
Jul 14th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 25.99 KB | None | 0 0
  1.  /////////////////////////////////////
  2. //                                   //
  3. //    Quis Dynamic Houses System     //
  4. //  Dynamiczny system domów by Quis  //
  5. //       Wersja 1.1 z ikonkami       //
  6. //                                   //
  7.  /////////////////////////////////////
  8. /*
  9. Poniższy skrypt jest efektem mojej kilkugodzinnej pracy. Proszę Cię drogi użytkowniku tego skryptu żebyś o mnie pamiętał, gdy
  10. będziesz go komukolwiek udostępniać. Nie zmieniaj autora.
  11. */
  12.  
  13. #define FILTERSCRIPT
  14.  
  15. //Biblioteki
  16. #include <a_samp>
  17. #include <sscanf2>
  18. #include <streamer>
  19. #include <zcmd>
  20.  
  21. //Definicje ID okienek GUI
  22. #define DIALOG_HOUSE_HELP      7777
  23. #define DIALOG_HOUSE_OWNER     7778
  24. #define DIALOG_HOUSE_BUY       7779
  25. #define DIALOG_HOUSE_SELL      7780
  26.  
  27. //Definicje kolorów
  28. #define RED         0xFF0000FF
  29. #define LIGHTGREEN  0x80FF00FF
  30. #define LIGHTBLUE   0x00FFFFFF
  31. #define WHITE_E     "{FFFFFF}"
  32.  
  33. //Inne definicje
  34. #define PRESSED(%0) \
  35.     (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  36. #define INVALID_HOUSE_ID 0
  37.  
  38. #define MAX_HOUSES 200
  39. new hPickup[MAX_HOUSES];
  40. new Text3D:hLabel[MAX_HOUSES];
  41. new bool:hLocked[MAX_HOUSES];
  42. new hIcon[MAX_HOUSES];
  43.  
  44. //Zmienne
  45. new DB:housesDB;
  46.  
  47. //Callbacki
  48. public OnFilterScriptInit()
  49. {
  50.     DisableInteriorEnterExits();
  51.     housesDB = db_open("QuisHouses.db");
  52.     db_query(housesDB, "CREATE TABLE IF NOT EXISTS `houses` (`HouseID` INT(20), `Name` VARCHAR(100), `Price` INT(20), `Owner` VARCHAR(30), `Interior` SMALLINT(3), `PosX` DECIMAL(10,6), `PosY` DECIMAL(10,6), `PosZ` DECIMAL(10,6))");
  53.  
  54.     LoadHouses();
  55.     print(" Quis House System v1.1 (z ikonkami) zostal zaladowany!");
  56.     return 1;
  57. }
  58.  
  59. public OnFilterScriptExit()
  60. {
  61.     db_close(housesDB);
  62.     return 1;
  63. }
  64.  
  65. public OnPlayerConnect(playerid)
  66. {
  67.     SetPVarInt(playerid, "InHouse", INVALID_HOUSE_ID);
  68.     return 1;
  69. }
  70.  
  71. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  72. {
  73.     if(PRESSED(KEY_SPRINT) && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  74.     {
  75.         if(GetPVarInt(playerid, "InHouse") == INVALID_HOUSE_ID)
  76.         {
  77.             new houseid = GetHouse(playerid);
  78.             if(houseid == INVALID_HOUSE_ID)
  79.                 return 1;
  80.                
  81.             new houseOwner[30], playerName[MAX_PLAYER_NAME];
  82.             GetHouseOwner(houseid, houseOwner);
  83.             GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  84.             if(houseOwner[0] == '0')
  85.             {
  86.                 SendClientMessage(playerid, RED, "Kup ten dom, aby uzyskać do niego dostęp.");
  87.                 return 1;
  88.             }
  89.             if(strcmp(playerName, houseOwner) != 0 && hLocked[houseid])
  90.             {
  91.                 SendClientMessage(playerid, RED, "Drzwi do domu są zamknięte.");
  92.                 return 1;
  93.             }
  94.            
  95.             new interior = GetHouseInterior(houseid);
  96.             if(!interior)
  97.                 return 1;
  98.             new Float:insidePos[4];
  99.             GetInteriorInsidePos(interior, insidePos[0], insidePos[1], insidePos[2], insidePos[3]);
  100.  
  101.             SetPlayerVirtualWorld(playerid, playerid+1);
  102.             SetPlayerInterior(playerid, interior);
  103.             SetPlayerPos(playerid, insidePos[0], insidePos[1], insidePos[2]);
  104.             SetPlayerFacingAngle(playerid, insidePos[3]);
  105.             SetPVarInt(playerid, "InHouse", houseid);
  106.         }
  107.         else
  108.         {
  109.             new houseid = GetPVarInt(playerid, "InHouse");
  110.             new interior = GetHouseInterior(houseid);
  111.             if(GetPlayerInterior(playerid) != interior)
  112.             {
  113.                 SetPVarInt(playerid, "InHouse", INVALID_HOUSE_ID);
  114.                 return 1;
  115.             }
  116.            
  117.             new Float:insidePos[4];
  118.             GetInteriorInsidePos(interior, insidePos[0], insidePos[1], insidePos[2], insidePos[3]);
  119.             if(!IsPlayerInRangeOfPoint(playerid, 2.5, insidePos[0], insidePos[1], insidePos[2]))
  120.                 return 1;
  121.                
  122.             new Float:housePos[3];
  123.             GetHousePos(houseid, housePos[0], housePos[1], housePos[2]);
  124.            
  125.             SetPlayerInterior(playerid, 0);
  126.             SetPlayerVirtualWorld(playerid, 0);
  127.             SetPlayerPos(playerid, housePos[0], housePos[1], housePos[2]);
  128.             SetCameraBehindPlayer(playerid);
  129.         }
  130.     }
  131.     return 1;
  132. }
  133.  
  134. CMD:dompomoc(playerid, params[])
  135. {
  136.     if(!IsPlayerAdmin(playerid))
  137.         ShowPlayerDialog(playerid, 7777, DIALOG_STYLE_MSGBOX, "House System by Quis", WHITE_E"Na serwerze znajduje się wiele domów, które możesz kupić.\nWystarczy że podejdziesz pod takim dom i użyjesz komendy /dom.\nWtedy z Twojego konta automatycznie zostanie pobrana odpowiednia kwota,\na Ty staniesz się właścicielem domu. W późniejszym czasie możesz go także\nsprzedać, jednakże otrzymasz tylko połowę wydanych wcześniej pieniędzy.\nSłuży do tego komenda ta sama komenda, co do kupna.", "OK", "");
  138.     else
  139.         ShowPlayerDialog(playerid, 7777, DIALOG_STYLE_MSGBOX, "House System by Quis", WHITE_E"Komendy administratora systemu domów:\n/addhouse - tworzy nowy dom\n/removehouse - usuwa utworzony dom\n/housename - zmienia nazwę domu\n/houseprice - zmienia cenę domu\n/houseinterior - zmienia interior domu\n/housepos - zmienia pozycję wejścia do domu\n/houseteleport - umożlwia Ci przeniesienie się do domu", "OK", "");
  140.     return 1;
  141. }
  142.  
  143. CMD:addhouse(playerid, params[])
  144. {
  145.     if(!IsPlayerAdmin(playerid))
  146.     {
  147.         SendClientMessage(playerid, RED, "Nie masz uprawnień do tworzenia domów.");
  148.         return 1;
  149.     }
  150.    
  151.     if(CountHouses() >= (MAX_HOUSES-1))
  152.     {
  153.         SendClientMessage(playerid, RED, "Został osiągnięty limit domów. Zwiększ wartość 'MAX_HOUSES' w skrypcie, żeby go zdjąć.");
  154.         return 1;
  155.     }
  156.    
  157.     new price, interior, name[100];
  158.     if(sscanf(params, "dds[100]", price, interior, name))
  159.     {
  160.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /addhouse [Cena] [Interior] [Nazwa]");
  161.         return 1;
  162.     }
  163.    
  164.     if(!IsValidInterior(interior))
  165.     {
  166.         SendClientMessage(playerid, RED, "Podany interior jest nieprawidłowy.");
  167.         SendClientMessage(playerid, LIGHTGREEN, "Prawidłowe ID interiorów: 1, 2, 3, 7, 8, 10");
  168.         return 1;
  169.     }
  170.    
  171.     new houseid = GetFreeHouseID();
  172.     if(houseid == -1)
  173.     {
  174.         SendClientMessage(playerid, RED, "Wystąpił nieoczekiwany błąd.");
  175.         return 1;
  176.     }
  177.    
  178.     new Float:playerPos[3];
  179.     GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  180.    
  181.     new query[256];
  182.     format(query, sizeof query, "INSERT INTO `houses` VALUES('%d', '%s', '%d', '0', '%d', '%f', '%f', '%f')", houseid, name, price, interior, playerPos[0], playerPos[1], playerPos[2]);
  183.     db_query(housesDB, query);
  184.    
  185.     new str[128];
  186.     format(str, sizeof str, "%s\nCena: $%d\n(Użyj /dom aby kupić)", name, price);
  187.    
  188.     hLabel[houseid] = CreateDynamic3DTextLabel(str, LIGHTGREEN, playerPos[0], playerPos[1], playerPos[2]+0.5, 50.0);
  189.     hPickup[houseid] = CreateDynamicPickup(1273, 1, playerPos[0], playerPos[1], playerPos[2], 0);
  190.     hIcon[houseid] = CreateDynamicMapIcon(playerPos[0], playerPos[1], playerPos[2], 31, RED);
  191.     hLocked[houseid] = false;
  192.    
  193.     new msg[128];
  194.     format(msg, sizeof msg, "Numer ID utworzonego domu to %d.", houseid);
  195.     SendClientMessage(playerid, LIGHTBLUE, msg);
  196.     return 1;
  197. }
  198.  
  199. CMD:removehouse(playerid, params[])
  200. {
  201.     if(!IsPlayerAdmin(playerid))
  202.     {
  203.         SendClientMessage(playerid, RED, "Nie masz uprawnień do usuwania domów.");
  204.         return 1;
  205.     }
  206.    
  207.     new houseid;
  208.     if(sscanf(params, "d", houseid))
  209.     {
  210.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /removehouse [ID domu]");
  211.         return 1;
  212.     }
  213.    
  214.     if(!IsValidHouse(houseid))
  215.     {
  216.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  217.         return 1;
  218.     }
  219.     new houseName[100];
  220.     GetHouseName(houseid, houseName);
  221.    
  222.     new query[128];
  223.     format(query, sizeof query, "DELETE FROM `houses` WHERE `HouseID`='%d'", houseid);
  224.     db_query(housesDB, query);
  225.    
  226.     DestroyDynamic3DTextLabel(hLabel[houseid]);
  227.     DestroyDynamicPickup(hPickup[houseid]);
  228.     DestroyDynamicMapIcon(hIcon[houseid]);
  229.    
  230.     new msg[128];
  231.     format(msg, sizeof msg, "Dom %s (ID %d) został usunięty!", houseName, houseid);
  232.     SendClientMessage(playerid, LIGHTBLUE, msg);
  233.     return 1;
  234. }
  235.  
  236. CMD:housename(playerid, params[])
  237. {
  238.     if(!IsPlayerAdmin(playerid))
  239.     {
  240.         SendClientMessage(playerid, RED, "Nie masz uprawnień do zmieniania nazw domów.");
  241.         return 1;
  242.     }
  243.    
  244.     new houseid, name[100];
  245.     if(sscanf(params, "ds[100]", houseid, name))
  246.     {
  247.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /housename [ID domu] [Nowa nazwa]");
  248.         return 1;
  249.     }
  250.  
  251.     if(!IsValidHouse(houseid))
  252.     {
  253.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  254.         return 1;
  255.     }
  256.    
  257.     new query[128];
  258.     format(query, sizeof query, "UPDATE `houses` SET `Name`='%s' WHERE `HouseID`='%d'", name, houseid);
  259.     db_query(housesDB, query);
  260.    
  261.     new houseOwner[30];
  262.     GetHouseOwner(houseid, houseOwner);
  263.    
  264.     new str[128];
  265.     if(houseOwner[0] == '0')
  266.         format(str, sizeof str, "%s\nCena: $%d\n(Użyj /dom aby kupić)", name, GetHousePrice(houseid));
  267.     else
  268.         format(str, sizeof str, "%s\nWłaściciel: %s\n(Wciśnij spację aby wejść)", name, houseOwner);
  269.     UpdateDynamic3DTextLabelText(hLabel[houseid], LIGHTGREEN, str);
  270.    
  271.     new msg[128];
  272.     format(msg, sizeof msg, "Nazwa domu o ID %d została zmieniona! Nowa nazwa: %s", houseid, name);
  273.     SendClientMessage(playerid, LIGHTBLUE, msg);
  274.     return 1;
  275. }
  276.  
  277. CMD:houseprice(playerid, params[])
  278. {
  279.     if(!IsPlayerAdmin(playerid))
  280.     {
  281.         SendClientMessage(playerid, RED, "Nie masz uprawnień do zmieniania cen domów.");
  282.         return 1;
  283.     }
  284.    
  285.     new houseid, price;
  286.     if(sscanf(params, "dd", houseid, price))
  287.     {
  288.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /houseprice [ID domu] [Nowa cena]");
  289.         return 1;
  290.     }
  291.  
  292.     if(!IsValidHouse(houseid))
  293.     {
  294.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  295.         return 1;
  296.     }
  297.    
  298.     new query[128];
  299.     format(query, sizeof query, "UPDATE `houses` SET `Price`='%d' WHERE `HouseID`='%d'", price, houseid);
  300.     db_query(housesDB, query);
  301.    
  302.     new houseName[100], houseOwner[30];
  303.     GetHouseName(houseid, houseName);
  304.     GetHouseOwner(houseid, houseOwner);
  305.  
  306.     if(houseOwner[0] == '0')
  307.     {
  308.         new str[128];
  309.         format(str, sizeof str, "%s\nCena: $%d\n(Użyj /dom aby kupić)", houseName, price);
  310.         UpdateDynamic3DTextLabelText(hLabel[houseid], LIGHTGREEN, str);
  311.     }
  312.    
  313.     new msg[128];
  314.     format(msg, sizeof msg, "Cena domu %s (ID %d) została zmieniona! Nowa cena: $%d", houseName, houseid, price);
  315.     SendClientMessage(playerid, LIGHTBLUE, msg);
  316.     return 1;
  317. }
  318.  
  319. CMD:houseinterior(playerid, params[])
  320. {
  321.     if(!IsPlayerAdmin(playerid))
  322.     {
  323.         SendClientMessage(playerid, RED, "Nie masz uprawnień do zmieniania interiorów domów.");
  324.         return 1;
  325.     }
  326.  
  327.     new houseid, interior;
  328.     if(sscanf(params, "dd", houseid, interior))
  329.     {
  330.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /houseinterior [ID domu] [Nowy interior]");
  331.         return 1;
  332.     }
  333.  
  334.     if(!IsValidHouse(houseid))
  335.     {
  336.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  337.         return 1;
  338.     }
  339.    
  340.     if(!IsValidInterior(interior))
  341.     {
  342.         SendClientMessage(playerid, RED, "Podany interior jest nieprawidłowy.");
  343.         SendClientMessage(playerid, LIGHTGREEN, "Prawidłowe ID interiorów: 1, 2, 3, 7, 8, 10");
  344.         return 1;
  345.     }
  346.    
  347.     new query[128];
  348.     format(query, sizeof query, "UPDATE `houses` SET `Interior`='%d' WHERE `HouseID`='%d'", interior, houseid);
  349.     db_query(housesDB, query);
  350.    
  351.     new houseName[100];
  352.     GetHouseName(houseid, houseName);
  353.    
  354.     new msg[128];
  355.     format(msg, sizeof msg, "Interior domu %s (ID %d) został zmieniony! Nowy interior: %d", houseName, houseid, interior);
  356.     SendClientMessage(playerid, LIGHTBLUE, msg);
  357.     return 1;
  358. }
  359.  
  360. CMD:housepos(playerid, params[])
  361. {
  362.     if(!IsPlayerAdmin(playerid))
  363.     {
  364.         SendClientMessage(playerid, RED, "Nie masz uprawnień do zmieniania interiorów domów.");
  365.         return 1;
  366.     }
  367.    
  368.     new houseid;
  369.     if(sscanf(params, "d", houseid))
  370.     {
  371.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /housepos [ID domu]");
  372.         return 1;
  373.     }
  374.    
  375.     if(!IsValidHouse(houseid))
  376.     {
  377.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  378.         return 1;
  379.     }
  380.    
  381.     new Float:playerPos[3];
  382.     GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  383.    
  384.     new query[128];
  385.     format(query, sizeof query, "UPDATE `houses` SET `PosX`='%f', `PosY`='%f', `PosZ`='%f' WHERE `HouseID`='%d'", playerPos[0], playerPos[1], playerPos[2], houseid);
  386.     db_query(housesDB, query);
  387.    
  388.     new houseName[100], houseOwner[30];
  389.     GetHouseName(houseid, houseName);
  390.     GetHouseOwner(houseid, houseOwner);
  391.    
  392.     DestroyDynamic3DTextLabel(hLabel[houseid]);
  393.     DestroyDynamicPickup(hPickup[houseid]);
  394.     DestroyDynamicMapIcon(hIcon[houseid]);
  395.    
  396.     new str[128];
  397.     if(houseOwner[0] == '0')
  398.     {
  399.         format(str, sizeof str, "%s\nCena: $%d\n(Użyj /dom aby kupić)", houseName, GetHousePrice(houseid));
  400.         hIcon[houseid] = CreateDynamicMapIcon(playerPos[0], playerPos[1], playerPos[2], 31, RED);
  401.     }
  402.     else
  403.     {
  404.         format(str, sizeof str, "%s\nWłaściciel: %s\n(Wciśnij spację aby wejść)", houseName, houseOwner);
  405.         hIcon[houseid] = CreateDynamicMapIcon(playerPos[0], playerPos[1], playerPos[2], 32, RED);
  406.     }
  407.        
  408.     hLabel[houseid] = CreateDynamic3DTextLabel(str, LIGHTGREEN, playerPos[0], playerPos[1], playerPos[2]+0.5, 50.0);
  409.     hPickup[houseid] = CreateDynamicPickup(1273, 1, playerPos[0], playerPos[1], playerPos[2], 0);
  410.  
  411.     new msg[128];
  412.     format(msg, sizeof msg, "Pozycja domu %s (ID %d) została zmieniona!", houseName, houseid);
  413.     SendClientMessage(playerid, LIGHTBLUE, msg);
  414.     return 1;
  415. }
  416.  
  417. CMD:houseteleport(playerid, params[])
  418. {
  419.     if(!IsPlayerAdmin(playerid))
  420.     {
  421.         SendClientMessage(playerid, RED, "Nie masz uprawnień do teleportowania się do domów.");
  422.         return 1;
  423.     }
  424.    
  425.     new houseid;
  426.     if(sscanf(params, "d", houseid))
  427.     {
  428.         SendClientMessage(playerid, RED, "Prawidłowe użycie: /houseteleport [ID domu]");
  429.         return 1;
  430.     }
  431.  
  432.     if(!IsValidHouse(houseid))
  433.     {
  434.         SendClientMessage(playerid, RED, "Nie znaleziono takiego domu.");
  435.         return 1;
  436.     }
  437.    
  438.     new query[128], houseName[100], housePos[3][20];
  439.     format(query, sizeof query, "SELECT Name, PosX, PosY, PosZ FROM `houses` WHERE `HouseID`='%d'", houseid);
  440.     new DBResult:result = db_query(housesDB, query);
  441.     db_get_field(result, 0, houseName, sizeof houseName);
  442.     db_get_field(result, 1, housePos[0], 20);
  443.     db_get_field(result, 2, housePos[1], 20);
  444.     db_get_field(result, 3, housePos[2], 20);
  445.     db_free_result(result);
  446.    
  447.     SetPlayerPos(playerid, floatstr(housePos[0]), floatstr(housePos[1]), floatstr(housePos[2]));
  448.    
  449.     new msg[128];
  450.     format(msg, sizeof msg, "Pomyślnie przeniesiono do domu %s (ID %d).", houseName, houseid);
  451.     SendClientMessage(playerid, LIGHTBLUE, msg);
  452.     return 1;
  453. }
  454.  
  455. CMD:dom(playerid, params[])
  456. {
  457.     new houseid = GetHouse(playerid);
  458.    
  459.     if(houseid == INVALID_HOUSE_ID)
  460.     {
  461.         SendClientMessage(playerid, RED, "Nie znajdujesz się przed domem.");
  462.         return 1;
  463.     }
  464.  
  465.     new msg[128], houseName[100], houseOwner[30], playerName[MAX_PLAYER_NAME];
  466.     GetHouseName(houseid, houseName);
  467.     GetHouseOwner(houseid, houseOwner);
  468.     GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  469.    
  470.     if(houseOwner[0] == '0')
  471.     {
  472.         new housePrice = GetHousePrice(houseid);
  473.         if(housePrice > GetPlayerMoney(playerid))
  474.             SendClientMessage(playerid, RED, "Nie masz wystarczającej ilości gotówki aby zakupić ten dom.");
  475.         else
  476.         {
  477.            
  478.             format(msg, sizeof msg, WHITE_E"Czy chcesz kupić dom %s za $%d?", houseName, housePrice);
  479.             ShowPlayerDialog(playerid, DIALOG_HOUSE_BUY, DIALOG_STYLE_MSGBOX, "Kupno domu", msg, "Tak", "Nie");
  480.         }
  481.     }
  482.     else if(!strcmp(houseOwner, playerName))
  483.     {
  484.         new title[128];
  485.         format(title, sizeof title, "Twój dom %s", houseName);
  486.        
  487.         if(hLocked[houseid])
  488.             strcat(msg, WHITE_E"Otwórz drzwi domu\n");
  489.         else
  490.             strcat(msg, WHITE_E"Zamknij drzwi domu\n");
  491.         strcat(msg, WHITE_E"Sprzedaj dom");
  492.        
  493.         ShowPlayerDialog(playerid, DIALOG_HOUSE_OWNER, DIALOG_STYLE_LIST, title, msg, "Wybierz", "Anuluj");
  494.     }
  495.     else
  496.         SendClientMessage(playerid, RED, "Ten dom nie należy do Ciebie.");
  497.     return 1;
  498. }
  499.  
  500. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  501. {
  502.     if(dialogid == DIALOG_HOUSE_OWNER && response)
  503.     {
  504.         new houseid = GetHouse(playerid);
  505.         if(houseid == INVALID_HOUSE_ID)
  506.             return 1;
  507.            
  508.         switch(listitem)
  509.         {
  510.             case 0:
  511.             {
  512.                 if(hLocked[houseid])
  513.                 {
  514.                     hLocked[houseid] = false;
  515.                     SendClientMessage(playerid, LIGHTBLUE, "Dom został otwarty. Teraz każdy może do niego wejść.");
  516.                 }
  517.                 else
  518.                 {
  519.                     hLocked[houseid] = true;
  520.                     SendClientMessage(playerid, LIGHTBLUE, "Dom został zamknięty.");
  521.                 }
  522.                 cmd_dom(playerid, "");
  523.             }
  524.             case 1:
  525.             {
  526.                 new housePrice = GetHousePrice(houseid), msg[128], houseName[100];
  527.                 GetHouseName(houseid, houseName);
  528.                 format(msg, sizeof msg, WHITE_E"Czy na pewno chcesz sprzedać dom %s za $%d?", houseName, floatround(housePrice/2, floatround_floor));
  529.                 ShowPlayerDialog(playerid, DIALOG_HOUSE_SELL, DIALOG_STYLE_MSGBOX, "Potwierdzenie sprzedaży domu", msg, "Tak", "Nie");
  530.             }
  531.         }
  532.        
  533.         return 1;
  534.     }
  535.     else if(dialogid == DIALOG_HOUSE_BUY && response)
  536.     {
  537.         new houseid = GetHouse(playerid);
  538.         if(houseid == INVALID_HOUSE_ID)
  539.             return 1;
  540.  
  541.         new houseOwner[30];
  542.         GetHouseOwner(houseid, houseOwner);
  543.         if(houseOwner[0] != '0')
  544.         {
  545.             SendClientMessage(playerid, RED, "Ten dom został już kupiony przez kogoś innego.");
  546.             return 1;
  547.         }
  548.        
  549.         new housePrice = GetHousePrice(houseid);
  550.         if(GetPlayerMoney(playerid) < housePrice)
  551.         {
  552.             SendClientMessage(playerid, RED, "Nie masz wystarczającej ilości gotówki aby zakupić ten dom.");
  553.             return 1;
  554.         }
  555.        
  556.         new playerName[MAX_PLAYER_NAME];
  557.         GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  558.  
  559.         new query[128];
  560.         format(query, sizeof query, "UPDATE `houses` SET `Owner`='%s' WHERE `HouseID`='%d'", playerName, houseid);
  561.         db_query(housesDB, query);
  562.  
  563.         GivePlayerMoney(playerid, -housePrice);
  564.  
  565.         new houseName[100];
  566.         GetHouseName(houseid, houseName);
  567.  
  568.         new str[128];
  569.         format(str, sizeof str, "%s\nWłaściciel: %s\n(Wciśnij spację aby wejść)", houseName, playerName);
  570.         UpdateDynamic3DTextLabelText(hLabel[houseid], LIGHTGREEN, str);
  571.  
  572.         new Float:Pos[3];
  573.         GetHousePos(houseid, Pos[0], Pos[1], Pos[2]);
  574.         DestroyDynamicMapIcon(hIcon[houseid]);
  575.         hIcon[houseid] = CreateDynamicMapIcon(Pos[0], Pos[1], Pos[2], 32, RED);
  576.        
  577.         new msg[128];
  578.         format(msg, sizeof msg, "Dom %s został kupiony za $%d.", houseName, housePrice);
  579.         SendClientMessage(playerid, LIGHTBLUE, msg);
  580.         SendClientMessage(playerid, LIGHTBLUE, "Aby otworzyć menu domu, użyj komendy /dom");
  581.         return 1;
  582.     }
  583.     else if(dialogid == DIALOG_HOUSE_SELL)
  584.     {
  585.         if(!response)
  586.         {
  587.             cmd_dom(playerid, "");
  588.             return 1;
  589.         }
  590.        
  591.         new houseid = GetHouse(playerid);
  592.         if(houseid == INVALID_HOUSE_ID)
  593.             return 1;
  594.            
  595.         new playerName[MAX_PLAYER_NAME];
  596.         GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  597.  
  598.         new query[128];
  599.         format(query, sizeof query, "UPDATE `houses` SET `Owner`='0' WHERE `HouseID`='%d'", houseid);
  600.         db_query(housesDB, query);
  601.  
  602.         new housePrice = GetHousePrice(houseid),
  603.             earn = floatround(housePrice/2, floatround_floor);
  604.  
  605.         GivePlayerMoney(playerid, earn);
  606.  
  607.         new houseName[100];
  608.         GetHouseName(houseid, houseName);
  609.  
  610.         new str[128];
  611.         format(str, sizeof str, "%s\nCena: $%d\n(Użyj /dom aby kupić)", houseName, housePrice);
  612.         UpdateDynamic3DTextLabelText(hLabel[houseid], LIGHTGREEN, str);
  613.  
  614.         new Float:Pos[3];
  615.         GetHousePos(houseid, Pos[0], Pos[1], Pos[2]);
  616.         DestroyDynamicMapIcon(hIcon[houseid]);
  617.         hIcon[houseid] = CreateDynamicMapIcon(Pos[0], Pos[1], Pos[2], 31, RED);
  618.        
  619.         new msg[128];
  620.         format(msg, sizeof msg, "Dom %s został sprzedany za $%d.", houseName, earn);
  621.         SendClientMessage(playerid, LIGHTBLUE, msg);
  622.        
  623.         return 1;
  624.     }
  625.     return 0;
  626. }
  627.  
  628. //Własne funkcje
  629. stock GetFreeHouseID()
  630. {
  631.     new houseid = INVALID_HOUSE_ID, counter = 0, query[128];
  632.     while(houseid == INVALID_HOUSE_ID)
  633.     {
  634.         counter++;
  635.         format(query, sizeof query, "SELECT * FROM `houses` WHERE `HouseID`='%d'", counter);
  636.         new DBResult:result = db_query(housesDB, query);
  637.         if(!db_num_rows(result))
  638.             houseid = counter;
  639.         db_free_result(result);
  640.     }
  641.     return houseid;
  642. }
  643.  
  644. stock IsValidHouse(houseid)
  645. {
  646.     new query[128];
  647.     format(query, sizeof query, "SELECT * FROM `houses` WHERE `HouseID`='%d'", houseid);
  648.     new DBResult:result = db_query(housesDB, query);
  649.     new numRows = db_num_rows(result);
  650.     db_free_result(result);
  651.     if(!numRows)
  652.         return 0;
  653.     return 1;
  654. }
  655.  
  656. stock GetHouseName(houseid, name[])
  657. {
  658.     new query[128];
  659.     format(query, sizeof query, "SELECT Name FROM `houses` WHERE `HouseID`='%d'", houseid);
  660.     new DBResult:result = db_query(housesDB, query);
  661.     if(!db_num_rows(result))
  662.     {
  663.         db_free_result(result);
  664.         return 0;
  665.     }
  666.    
  667.     db_get_field(result, 0, name, 100);
  668.     db_free_result(result);
  669.     return 1;
  670. }
  671.  
  672. stock GetHouseOwner(houseid, owner[])
  673. {
  674.     new query[128];
  675.     format(query, sizeof query, "SELECT Owner FROM `houses` WHERE `HouseID`='%d'", houseid);
  676.     new DBResult:result = db_query(housesDB, query);
  677.     if(!db_num_rows(result))
  678.     {
  679.         db_free_result(result);
  680.         return 0;
  681.     }
  682.  
  683.     db_get_field(result, 0, owner, 100);
  684.     db_free_result(result);
  685.     return 1;
  686. }
  687.  
  688. stock GetHousePrice(houseid)
  689. {
  690.     new query[128];
  691.     format(query, sizeof query, "SELECT Price FROM `houses` WHERE `HouseID`='%d'", houseid);
  692.     new DBResult:result = db_query(housesDB, query);
  693.     if(!db_num_rows(result))
  694.     {
  695.         db_free_result(result);
  696.         return -1;
  697.     }
  698.     new priceStr[20];
  699.     db_get_field(result, 0, priceStr, sizeof priceStr);
  700.     db_free_result(result);
  701.     new price = strval(priceStr);
  702.     return price;
  703. }
  704.  
  705. stock GetHouseInterior(houseid)
  706. {
  707.     new query[128];
  708.     format(query, sizeof query, "SELECT Interior FROM `houses` WHERE `HouseID`='%d'", houseid);
  709.     new DBResult:result = db_query(housesDB, query);
  710.     if(!db_num_rows(result))
  711.     {
  712.         db_free_result(result);
  713.         return 0;
  714.     }
  715.     new interiorStr[3];
  716.     db_get_field(result, 0, interiorStr, sizeof interiorStr);
  717.     db_free_result(result);
  718.     new interior = strval(interiorStr);
  719.     return interior;
  720. }
  721.  
  722. stock GetHousePos(houseid, &Float:X, &Float:Y, &Float:Z)
  723. {
  724.     new query[128];
  725.     format(query, sizeof query, "SELECT PosX, PosY, PosZ FROM `houses` WHERE `HouseID`='%d'", houseid);
  726.     new DBResult:result = db_query(housesDB, query);
  727.     if(!db_num_rows(result))
  728.     {
  729.         db_free_result(result);
  730.         return 0;
  731.     }
  732.    
  733.     new pos[3][20];
  734.     db_get_field(result, 0, pos[0], 20);
  735.     db_get_field(result, 1, pos[1], 20);
  736.     db_get_field(result, 2, pos[2], 20);
  737.     db_free_result(result);
  738.    
  739.     X = floatstr(pos[0]);
  740.     Y = floatstr(pos[1]);
  741.     Z = floatstr(pos[2]);
  742.     return 1;
  743. }
  744.  
  745. stock IsValidInterior(interiorid)
  746. {
  747.     switch(interiorid)
  748.     {
  749.         case 1..3, 7, 8, 10: return true;
  750.     }
  751.     return false;
  752. }
  753.  
  754. stock GetInteriorInsidePos(interior, &Float:X, &Float:Y, &Float:Z, &Float:A)
  755. {
  756.     switch(interior)
  757.     {
  758.         case 1:
  759.         {
  760.             X = 223.1425;
  761.             Y = 1287.2781;
  762.             Z = 1082.1406;
  763.             A = 1.0427;
  764.         }
  765.         case 2:
  766.         {
  767.             X = 226.005401;
  768.             Y = 1240.039062;
  769.             Z = 1082.140625;
  770.             A= 88.782501;
  771.         }
  772.         case 3:
  773.         {
  774.             X = 235.3299;
  775.             Y = 1187.1647;
  776.             Z = 1080.2578;
  777.             A = 3.4573;
  778.         }
  779.         case 7:
  780.         {
  781.             X = 225.7482;
  782.             Y = 1022.0986;
  783.             Z = 1084.0159;
  784.             A = 352.2242;
  785.         }
  786.         case 8:
  787.         {
  788.             X = 2365.3176;
  789.             Y = -1134.9512;
  790.             Z = 1050.8750;
  791.             A = 357.0461;
  792.         }
  793.         case 10:
  794.         {
  795.             X = 2269.7822;
  796.             Y = -1210.4670;
  797.             Z = 1047.5625;
  798.             A = 90.8462;
  799.         }
  800.     }
  801.     return 1;
  802. }
  803.  
  804. stock LoadHouses()
  805. {
  806.     print(" Rozpoczeto ladowanie domow...");
  807.     new startTime = GetTickCount();
  808.     new DBResult:result = db_query(housesDB, "SELECT HouseID, Name, Price, Owner, PosX, PosY, PosZ FROM `houses`");
  809.     new numRows = db_num_rows(result);
  810.     new count = 0;
  811.    
  812.     for(new i=0; i<numRows; i++)
  813.     {
  814.         new idstr[20], name[100], price[20], owner[30], posx[20], posy[20], posz[20];
  815.         db_get_field(result, 0, idstr, sizeof idstr);
  816.         db_get_field(result, 1, name, sizeof name);
  817.         db_get_field(result, 2, price, sizeof price);
  818.         db_get_field(result, 3, owner, sizeof owner);
  819.         db_get_field(result, 4, posx, sizeof posx);
  820.         db_get_field(result, 5, posy, sizeof posy);
  821.         db_get_field(result, 6, posz, sizeof posz);
  822.  
  823.         new houseid, Float:Pos[3];
  824.         houseid = strval(idstr);
  825.         Pos[0] = floatstr(posx);
  826.         Pos[1] = floatstr(posy);
  827.         Pos[2] = floatstr(posz);
  828.        
  829.         new str[128];
  830.         if(owner[0] == '0')
  831.         {
  832.             format(str, sizeof str, "%s\nCena: $%s\n(Użyj /dom aby kupić)", name, price);
  833.             hIcon[houseid] = CreateDynamicMapIcon(Pos[0], Pos[1], Pos[2], 31, RED);
  834.             hLocked[houseid] = false;
  835.         }
  836.         else
  837.         {
  838.             format(str, sizeof str, "%s\nWłaściciel: %s\n(Wciśnij spację aby wejść)", name, owner);
  839.             hIcon[houseid] = CreateDynamicMapIcon(Pos[0], Pos[1], Pos[2], 32, RED);
  840.             hLocked[houseid] = true;
  841.         }
  842.  
  843.         hLabel[houseid] = CreateDynamic3DTextLabel(str, LIGHTGREEN, Pos[0], Pos[1], Pos[2]+0.5, 50.0);
  844.         hPickup[houseid] = CreateDynamicPickup(1273, 1, Pos[0], Pos[1], Pos[2], 0);
  845.        
  846.         count++;
  847.         db_next_row(result);
  848.     }
  849.    
  850.     db_free_result(result);
  851.     printf(" Zaladowano %d domow. Czas ladowania: %d ms", count, (GetTickCount()-startTime));
  852.     return 1;
  853. }
  854.  
  855. stock GetHouse(playerid)
  856. {
  857.     new houseid = INVALID_HOUSE_ID;
  858.     new Float:playerPos[3];
  859.     GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  860.    
  861.     new DBResult:result = db_query(housesDB, "SELECT HouseID, PosX, PosY, PosZ FROM `houses`");
  862.     new numRows = db_num_rows(result);
  863.    
  864.     for(new i=0; i<numRows; i++)
  865.     {
  866.         new pos[3][20];
  867.         db_get_field(result, 1, pos[0], 20);
  868.         db_get_field(result, 2, pos[1], 20);
  869.         db_get_field(result, 3, pos[2], 20);
  870.  
  871.         if(IsPlayerInRangeOfPoint(playerid, 2.5, floatstr(pos[0]), floatstr(pos[1]), floatstr(pos[2])))
  872.         {
  873.             new idstr[20];
  874.             db_get_field(result, 0, idstr, 20);
  875.             houseid = strval(idstr);
  876.             break;
  877.         }
  878.         db_next_row(result);
  879.     }
  880.    
  881.     db_free_result(result);
  882.     return houseid;
  883. }
  884.  
  885. stock CountHouses()
  886. {
  887.     new DBResult:result = db_query(housesDB, "SELECT HouseID FROM `houses`"),
  888.         numRows = db_num_rows(result);
  889.     db_free_result(result);
  890.     return numRows;
  891. }
Advertisement
Add Comment
Please, Sign In to add comment