Advertisement
Guest User

Halloween Event

a guest
Oct 30th, 2016
717
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 60.61 KB | None | 0 0
  1. #define     FILTERSCRIPT
  2. #include    <a_samp>
  3. #include    <izcmd>             // http://forum.sa-mp.com/showthread.php?t=576114
  4. #include    <sqlitei>           // http://forum.sa-mp.com/showthread.php?t=303682
  5. #include    <sscanf2>           // http://forum.sa-mp.com/showthread.php?t=602923
  6. #include    <streamer>          // http://forum.sa-mp.com/showthread.php?t=102865
  7.  
  8. // internal defines
  9. #define     MAX_ZONE_NAME       (28)
  10. #define     MAX_GIFT_BOXES      (200)
  11. #define     MAX_PUMPKINS        (200)
  12.  
  13. // event config
  14. #define     I_WANT_HATS_DAMMIT          // enables hats, remove/comment this line if you don't want people to have a witch hat
  15. #define     PUMPKIN_DROPS               // enables pumpkin drops on death, remove/comment this line if you don't want it
  16. #define     ATTACH_INDEX        (8)     // for SetPlayerAttachedObject
  17.  
  18. // gift box config
  19. #define     GIFT_AMOUNT         (3)     // amount of gifts dropped on a timed drop (Default: 3)
  20. #define     GIFT_INTERVAL       (600)   // drop gifts every x seconds (Default: 600)
  21. #define     GIFT_LIFETIME       (300)   // a gift box will stay for x seconds (Default: 300)
  22. #define     GIFT_MIN_MONEY      (500)
  23. #define     GIFT_MAX_MONEY      (2000)
  24. #define     GIFT_MIN_CANDY      (3)
  25. #define     GIFT_MAX_CANDY      (9)
  26.  
  27. // pumpkin config
  28. #define     PUMPKIN_LIFETIME    (120)   // a dropped pumpkin will stay for x seconds (Default: 120)
  29. #define     PUMPKIN_CANDY       (3)     // a pumpkin will contain x candies (Default: 3)
  30.  
  31. // shop config
  32. #define     MEDKIT_PRICE        (5)     // price of a medkit (Default: 5)
  33. #define     ARMOR_PRICE         (5)     // price of a body armor (Default: 5)
  34. #define     GIFT_PRICE          (5000)  // price of a gift box (Default: 5000)
  35. #define     GIFT_PRICE_CANDY    (10)    // price of a gift box, in candy (Default: 10)
  36.  
  37. enum    _:E_DIALOG
  38. {
  39.     DIALOG_UNUSED = 7785,
  40.     DIALOG_CANDY_SHOP,
  41.     DIALOG_BUY_GIFT,
  42.     DIALOG_BUY_WEAPON
  43. }
  44.  
  45. enum    E_SHOP_WEAPONS
  46. {
  47.     WeaponID,
  48.     WeaponAmmo,
  49.     WeaponPrice
  50. }
  51.  
  52. enum    E_SAZONE_MAIN
  53. {
  54.     SAZONE_NAME[MAX_ZONE_NAME],
  55.     Float: SAZONE_AREA[6]
  56. }
  57.  
  58. enum    E_HALLOWEEN
  59. {
  60.     DropTimeLeft,
  61.     EventTimer
  62. }
  63.  
  64. enum    E_GIFT_BOX_COORDS
  65. {
  66.     Float: GiftBoxSpawnX,
  67.     Float: GiftBoxSpawnY,
  68.     Float: GiftBoxSpawnZ
  69. }
  70.  
  71. enum    E_GIFT_BOX
  72. {
  73.     Float: GiftBoxX,
  74.     Float: GiftBoxY,
  75.     Float: GiftBoxZ,
  76.     GiftBoxTimeLeft,
  77.     GiftBoxPickup,
  78.     Text3D: GiftBoxLabel,
  79.     GiftBoxTimer,
  80.     bool: GiftBoxExists
  81. }
  82.  
  83. enum    E_PUMPKIN
  84. {
  85.     PumpkinTimeLeft,
  86.     PumpkinPickup,
  87.     Text3D: PumpkinLabel,
  88.     PumpkinTimer,
  89.     bool: PumpkinExists
  90. }
  91.  
  92. new
  93.     DB: HalloweenDB,
  94.     DBStatement: LoadFromTable,
  95.     DBStatement: InsertToTable,
  96.     DBStatement: SaveToTable,
  97.     DBStatement: TopCandies;
  98.  
  99. new
  100.     HalloweenData[E_HALLOWEEN];
  101.  
  102. new
  103.     GiftBoxData[MAX_GIFT_BOXES][E_GIFT_BOX];
  104.  
  105. new
  106.     PumpkinData[MAX_PUMPKINS][E_PUMPKIN];
  107.  
  108. new
  109.     Text: HalloweenText,
  110.     Text: PumpkinIcon,
  111.     Text: TimerText,
  112.     Text: TimerIcon;
  113.    
  114. new
  115.     CandyCount[MAX_PLAYERS],
  116.     PlayerText: CandyText[MAX_PLAYERS];
  117.  
  118. static const
  119.     ShopWeapons[][E_SHOP_WEAPONS] = {
  120.         // weapon id, ammo, price (candy)
  121.         {WEAPON_BAT, 1, 1},
  122.         {WEAPON_KNIFE, 1, 1},
  123.         {WEAPON_DEAGLE, 50, 20},
  124.         {WEAPON_SHOTGUN, 25, 10},
  125.         {WEAPON_AK47, 90, 15},
  126.         {WEAPON_RIFLE, 25, 15},
  127.         {WEAPON_MINIGUN, 100, 250}
  128.     };
  129.  
  130. static const
  131.     GiftBoxCoords[][E_GIFT_BOX_COORDS] = {
  132.         {2743.0, 1316.0, 8.0},
  133.         {2168.66, 2267.96, 15.34},
  134.         {2408.0, 1389.0, 22.0},
  135.         {2034.0, 842.0, 10.0},
  136.         {2096.0, 1287.0, 10.8},
  137.         {1987.0, 1543.0, 16.0},
  138.         {1854.0, 912.0, 10.8},
  139.         {2540.38, 2527.85, 10.39},
  140.         {1548.02, 1024.47, 10.39},
  141.         {1592.91, 2053.83, 10.26},
  142.         {1971.29, 2330.26, 10.41},
  143.         {1700.74, 1792.7, 10.41},
  144.         {2581.0, -1491.0, 24.0},
  145.         {2296.0, -1696.0, 14.0},
  146.         {2273.0, -1099.0, 38.0},
  147.         {2716.0, -1048.0, 66.0},
  148.         {2614.0, -2496.0, 33.0},
  149.         {1183.85, -1250.68, 14.7},
  150.         {1970.0, -1158.0, 21.0},
  151.         {734.0, -1137.0, 18.0},
  152.         {2553.76, -2464.31, 13.62},
  153.         {1204.06, -1613.89, 13.28},
  154.         {611.21, -1459.63, 14.01},
  155.         {1116.67, -719.91, 100.17},
  156.         {-1903.1, -466.44, 25.18},
  157.         {-2657.0, -144.0, 4.0},
  158.         {-2454.0, -166.0, 35.0},
  159.         {-2009.0, 1227.0, 32.0},
  160.         {-2120.0, 96.39, 39.0},
  161.         {-2411.0, -334.0, 37.0},
  162.         {-1690.0, 450.0, 13.0},
  163.         {-1991.26, -1144.13, 29.69},
  164.         {-2636.13, -492.83, 70.09},
  165.         {-2022.68, 345.98, 35.17},
  166.         {-2683.2, 784.13, 49.98},
  167.         {-1820.67, -154.12, 9.4},
  168.         {-736.0, 66.0, 24.0},
  169.         {262.33, -149.12, 1.58},
  170.         {1643.0, 264.0, 20.0},
  171.         {601.98, 2150.38, 39.41},
  172.         {-1407.0, -2039.0, 1.0},
  173.         {-2156.0, -2371.0, 31.0},
  174.         {-419.25, 1362.36, 12.21},
  175.         {629.04, 2842.83, 25.21},
  176.         {690.49, -209.59, 25.6},
  177.         {88.82, -125.1, 0.85},
  178.         {215.69, 1089.1, 16.4},
  179.         {-2305.24, 2310.11, 4.98},
  180.         {-213.61, 2717.44, 62.68}
  181.     };
  182.  
  183. // taken from here: http://forum.sa-mp.com/showthread.php?t=27598
  184. static const
  185.     SAZones[][E_SAZONE_MAIN] = {
  186.         {"The Big Ear",                 {-410.00,1403.30,-3.00,-137.90,1681.20,200.00}},
  187.         {"Aldea Malvada",               {-1372.10,2498.50,0.00,-1277.50,2615.30,200.00}},
  188.         {"Angel Pine",                  {-2324.90,-2584.20,-6.10,-1964.20,-2212.10,200.00}},
  189.         {"Arco del Oeste",              {-901.10,2221.80,0.00,-592.00,2571.90,200.00}},
  190.         {"Avispa Country Club",         {-2646.40,-355.40,0.00,-2270.00,-222.50,200.00}},
  191.         {"Avispa Country Club",         {-2831.80,-430.20,-6.10,-2646.40,-222.50,200.00}},
  192.         {"Avispa Country Club",         {-2361.50,-417.10,0.00,-2270.00,-355.40,200.00}},
  193.         {"Avispa Country Club",         {-2667.80,-302.10,-28.80,-2646.40,-262.30,71.10}},
  194.         {"Avispa Country Club",         {-2470.00,-355.40,0.00,-2270.00,-318.40,46.10}},
  195.         {"Avispa Country Club",         {-2550.00,-355.40,0.00,-2470.00,-318.40,39.70}},
  196.         {"Back o Beyond",               {-1166.90,-2641.10,0.00,-321.70,-1856.00,200.00}},
  197.         {"Battery Point",               {-2741.00,1268.40,-4.50,-2533.00,1490.40,200.00}},
  198.         {"Bayside",                     {-2741.00,2175.10,0.00,-2353.10,2722.70,200.00}},
  199.         {"Bayside Marina",              {-2353.10,2275.70,0.00,-2153.10,2475.70,200.00}},
  200.         {"Beacon Hill",                 {-399.60,-1075.50,-1.40,-319.00,-977.50,198.50}},
  201.         {"Blackfield",                  {964.30,1203.20,-89.00,1197.30,1403.20,110.90}},
  202.         {"Blackfield",                  {964.30,1403.20,-89.00,1197.30,1726.20,110.90}},
  203.         {"Blackfield Chapel",           {1375.60,596.30,-89.00,1558.00,823.20,110.90}},
  204.         {"Blackfield Chapel",           {1325.60,596.30,-89.00,1375.60,795.00,110.90}},
  205.         {"Blackfield Intersection",     {1197.30,1044.60,-89.00,1277.00,1163.30,110.90}},
  206.         {"Blackfield Intersection",     {1166.50,795.00,-89.00,1375.60,1044.60,110.90}},
  207.         {"Blackfield Intersection",     {1277.00,1044.60,-89.00,1315.30,1087.60,110.90}},
  208.         {"Blackfield Intersection",     {1375.60,823.20,-89.00,1457.30,919.40,110.90}},
  209.         {"Blueberry",                   {104.50,-220.10,2.30,349.60,152.20,200.00}},
  210.         {"Blueberry",                   {19.60,-404.10,3.80,349.60,-220.10,200.00}},
  211.         {"Blueberry Acres",             {-319.60,-220.10,0.00,104.50,293.30,200.00}},
  212.         {"Caligula's Palace",           {2087.30,1543.20,-89.00,2437.30,1703.20,110.90}},
  213.         {"Caligula's Palace",           {2137.40,1703.20,-89.00,2437.30,1783.20,110.90}},
  214.         {"Calton Heights",              {-2274.10,744.10,-6.10,-1982.30,1358.90,200.00}},
  215.         {"Chinatown",                   {-2274.10,578.30,-7.60,-2078.60,744.10,200.00}},
  216.         {"City Hall",                   {-2867.80,277.40,-9.10,-2593.40,458.40,200.00}},
  217.         {"Come-A-Lot",                  {2087.30,943.20,-89.00,2623.10,1203.20,110.90}},
  218.         {"Commerce",                    {1323.90,-1842.20,-89.00,1701.90,-1722.20,110.90}},
  219.         {"Commerce",                    {1323.90,-1722.20,-89.00,1440.90,-1577.50,110.90}},
  220.         {"Commerce",                    {1370.80,-1577.50,-89.00,1463.90,-1384.90,110.90}},
  221.         {"Commerce",                    {1463.90,-1577.50,-89.00,1667.90,-1430.80,110.90}},
  222.         {"Commerce",                    {1583.50,-1722.20,-89.00,1758.90,-1577.50,110.90}},
  223.         {"Commerce",                    {1667.90,-1577.50,-89.00,1812.60,-1430.80,110.90}},
  224.         {"Conference Center",           {1046.10,-1804.20,-89.00,1323.90,-1722.20,110.90}},
  225.         {"Conference Center",           {1073.20,-1842.20,-89.00,1323.90,-1804.20,110.90}},
  226.         {"Cranberry Station",           {-2007.80,56.30,0.00,-1922.00,224.70,100.00}},
  227.         {"Creek",                       {2749.90,1937.20,-89.00,2921.60,2669.70,110.90}},
  228.         {"Dillimore",                   {580.70,-674.80,-9.50,861.00,-404.70,200.00}},
  229.         {"Doherty",                     {-2270.00,-324.10,-0.00,-1794.90,-222.50,200.00}},
  230.         {"Doherty",                     {-2173.00,-222.50,-0.00,-1794.90,265.20,200.00}},
  231.         {"Downtown",                    {-1982.30,744.10,-6.10,-1871.70,1274.20,200.00}},
  232.         {"Downtown",                    {-1871.70,1176.40,-4.50,-1620.30,1274.20,200.00}},
  233.         {"Downtown",                    {-1700.00,744.20,-6.10,-1580.00,1176.50,200.00}},
  234.         {"Downtown",                    {-1580.00,744.20,-6.10,-1499.80,1025.90,200.00}},
  235.         {"Downtown",                    {-2078.60,578.30,-7.60,-1499.80,744.20,200.00}},
  236.         {"Downtown",                    {-1993.20,265.20,-9.10,-1794.90,578.30,200.00}},
  237.         {"Downtown Los Santos",         {1463.90,-1430.80,-89.00,1724.70,-1290.80,110.90}},
  238.         {"Downtown Los Santos",         {1724.70,-1430.80,-89.00,1812.60,-1250.90,110.90}},
  239.         {"Downtown Los Santos",         {1463.90,-1290.80,-89.00,1724.70,-1150.80,110.90}},
  240.         {"Downtown Los Santos",         {1370.80,-1384.90,-89.00,1463.90,-1170.80,110.90}},
  241.         {"Downtown Los Santos",         {1724.70,-1250.90,-89.00,1812.60,-1150.80,110.90}},
  242.         {"Downtown Los Santos",         {1370.80,-1170.80,-89.00,1463.90,-1130.80,110.90}},
  243.         {"Downtown Los Santos",         {1378.30,-1130.80,-89.00,1463.90,-1026.30,110.90}},
  244.         {"Downtown Los Santos",         {1391.00,-1026.30,-89.00,1463.90,-926.90,110.90}},
  245.         {"Downtown Los Santos",         {1507.50,-1385.20,110.90,1582.50,-1325.30,335.90}},
  246.         {"East Beach",                  {2632.80,-1852.80,-89.00,2959.30,-1668.10,110.90}},
  247.         {"East Beach",                  {2632.80,-1668.10,-89.00,2747.70,-1393.40,110.90}},
  248.         {"East Beach",                  {2747.70,-1668.10,-89.00,2959.30,-1498.60,110.90}},
  249.         {"East Beach",                  {2747.70,-1498.60,-89.00,2959.30,-1120.00,110.90}},
  250.         {"East Los Santos",             {2421.00,-1628.50,-89.00,2632.80,-1454.30,110.90}},
  251.         {"East Los Santos",             {2222.50,-1628.50,-89.00,2421.00,-1494.00,110.90}},
  252.         {"East Los Santos",             {2266.20,-1494.00,-89.00,2381.60,-1372.00,110.90}},
  253.         {"East Los Santos",             {2381.60,-1494.00,-89.00,2421.00,-1454.30,110.90}},
  254.         {"East Los Santos",             {2281.40,-1372.00,-89.00,2381.60,-1135.00,110.90}},
  255.         {"East Los Santos",             {2381.60,-1454.30,-89.00,2462.10,-1135.00,110.90}},
  256.         {"East Los Santos",             {2462.10,-1454.30,-89.00,2581.70,-1135.00,110.90}},
  257.         {"Easter Basin",                {-1794.90,249.90,-9.10,-1242.90,578.30,200.00}},
  258.         {"Easter Basin",                {-1794.90,-50.00,-0.00,-1499.80,249.90,200.00}},
  259.         {"Easter Bay Airport",          {-1499.80,-50.00,-0.00,-1242.90,249.90,200.00}},
  260.         {"Easter Bay Airport",          {-1794.90,-730.10,-3.00,-1213.90,-50.00,200.00}},
  261.         {"Easter Bay Airport",          {-1213.90,-730.10,0.00,-1132.80,-50.00,200.00}},
  262.         {"Easter Bay Airport",          {-1242.90,-50.00,0.00,-1213.90,578.30,200.00}},
  263.         {"Easter Bay Airport",          {-1213.90,-50.00,-4.50,-947.90,578.30,200.00}},
  264.         {"Easter Bay Airport",          {-1315.40,-405.30,15.40,-1264.40,-209.50,25.40}},
  265.         {"Easter Bay Airport",          {-1354.30,-287.30,15.40,-1315.40,-209.50,25.40}},
  266.         {"Easter Bay Airport",          {-1490.30,-209.50,15.40,-1264.40,-148.30,25.40}},
  267.         {"Easter Bay Chemicals",        {-1132.80,-768.00,0.00,-956.40,-578.10,200.00}},
  268.         {"Easter Bay Chemicals",        {-1132.80,-787.30,0.00,-956.40,-768.00,200.00}},
  269.         {"El Castillo del Diablo",      {-464.50,2217.60,0.00,-208.50,2580.30,200.00}},
  270.         {"El Castillo del Diablo",      {-208.50,2123.00,-7.60,114.00,2337.10,200.00}},
  271.         {"El Castillo del Diablo",      {-208.50,2337.10,0.00,8.40,2487.10,200.00}},
  272.         {"El Corona",                   {1812.60,-2179.20,-89.00,1970.60,-1852.80,110.90}},
  273.         {"El Corona",                   {1692.60,-2179.20,-89.00,1812.60,-1842.20,110.90}},
  274.         {"El Quebrados",                {-1645.20,2498.50,0.00,-1372.10,2777.80,200.00}},
  275.         {"Esplanade East",              {-1620.30,1176.50,-4.50,-1580.00,1274.20,200.00}},
  276.         {"Esplanade East",              {-1580.00,1025.90,-6.10,-1499.80,1274.20,200.00}},
  277.         {"Esplanade East",              {-1499.80,578.30,-79.60,-1339.80,1274.20,20.30}},
  278.         {"Esplanade North",             {-2533.00,1358.90,-4.50,-1996.60,1501.20,200.00}},
  279.         {"Esplanade North",             {-1996.60,1358.90,-4.50,-1524.20,1592.50,200.00}},
  280.         {"Esplanade North",             {-1982.30,1274.20,-4.50,-1524.20,1358.90,200.00}},
  281.         {"Fallen Tree",                 {-792.20,-698.50,-5.30,-452.40,-380.00,200.00}},
  282.         {"Fallow Bridge",               {434.30,366.50,0.00,603.00,555.60,200.00}},
  283.         {"Fern Ridge",                  {508.10,-139.20,0.00,1306.60,119.50,200.00}},
  284.         {"Financial",                   {-1871.70,744.10,-6.10,-1701.30,1176.40,300.00}},
  285.         {"Fisher's Lagoon",             {1916.90,-233.30,-100.00,2131.70,13.80,200.00}},
  286.         {"Flint Intersection",          {-187.70,-1596.70,-89.00,17.00,-1276.60,110.90}},
  287.         {"Flint Range",                 {-594.10,-1648.50,0.00,-187.70,-1276.60,200.00}},
  288.         {"Fort Carson",                 {-376.20,826.30,-3.00,123.70,1220.40,200.00}},
  289.         {"Foster Valley",               {-2270.00,-430.20,-0.00,-2178.60,-324.10,200.00}},
  290.         {"Foster Valley",               {-2178.60,-599.80,-0.00,-1794.90,-324.10,200.00}},
  291.         {"Foster Valley",               {-2178.60,-1115.50,0.00,-1794.90,-599.80,200.00}},
  292.         {"Foster Valley",               {-2178.60,-1250.90,0.00,-1794.90,-1115.50,200.00}},
  293.         {"Frederick Bridge",            {2759.20,296.50,0.00,2774.20,594.70,200.00}},
  294.         {"Gant Bridge",                 {-2741.40,1659.60,-6.10,-2616.40,2175.10,200.00}},
  295.         {"Gant Bridge",                 {-2741.00,1490.40,-6.10,-2616.40,1659.60,200.00}},
  296.         {"Ganton",                      {2222.50,-1852.80,-89.00,2632.80,-1722.30,110.90}},
  297.         {"Ganton",                      {2222.50,-1722.30,-89.00,2632.80,-1628.50,110.90}},
  298.         {"Garcia",                      {-2411.20,-222.50,-0.00,-2173.00,265.20,200.00}},
  299.         {"Garcia",                      {-2395.10,-222.50,-5.30,-2354.00,-204.70,200.00}},
  300.         {"Garver Bridge",               {-1339.80,828.10,-89.00,-1213.90,1057.00,110.90}},
  301.         {"Garver Bridge",               {-1213.90,950.00,-89.00,-1087.90,1178.90,110.90}},
  302.         {"Garver Bridge",               {-1499.80,696.40,-179.60,-1339.80,925.30,20.30}},
  303.         {"Glen Park",                   {1812.60,-1449.60,-89.00,1996.90,-1350.70,110.90}},
  304.         {"Glen Park",                   {1812.60,-1100.80,-89.00,1994.30,-973.30,110.90}},
  305.         {"Glen Park",                   {1812.60,-1350.70,-89.00,2056.80,-1100.80,110.90}},
  306.         {"Green Palms",                 {176.50,1305.40,-3.00,338.60,1520.70,200.00}},
  307.         {"Greenglass College",          {964.30,1044.60,-89.00,1197.30,1203.20,110.90}},
  308.         {"Greenglass College",          {964.30,930.80,-89.00,1166.50,1044.60,110.90}},
  309.         {"Hampton Barns",               {603.00,264.30,0.00,761.90,366.50,200.00}},
  310.         {"Hankypanky Point",            {2576.90,62.10,0.00,2759.20,385.50,200.00}},
  311.         {"Harry Gold Parkway",          {1777.30,863.20,-89.00,1817.30,2342.80,110.90}},
  312.         {"Hashbury",                    {-2593.40,-222.50,-0.00,-2411.20,54.70,200.00}},
  313.         {"Hilltop Farm",                {967.30,-450.30,-3.00,1176.70,-217.90,200.00}},
  314.         {"Hunter Quarry",               {337.20,710.80,-115.20,860.50,1031.70,203.70}},
  315.         {"Idlewood",                    {1812.60,-1852.80,-89.00,1971.60,-1742.30,110.90}},
  316.         {"Idlewood",                    {1812.60,-1742.30,-89.00,1951.60,-1602.30,110.90}},
  317.         {"Idlewood",                    {1951.60,-1742.30,-89.00,2124.60,-1602.30,110.90}},
  318.         {"Idlewood",                    {1812.60,-1602.30,-89.00,2124.60,-1449.60,110.90}},
  319.         {"Idlewood",                    {2124.60,-1742.30,-89.00,2222.50,-1494.00,110.90}},
  320.         {"Idlewood",                    {1971.60,-1852.80,-89.00,2222.50,-1742.30,110.90}},
  321.         {"Jefferson",                   {1996.90,-1449.60,-89.00,2056.80,-1350.70,110.90}},
  322.         {"Jefferson",                   {2124.60,-1494.00,-89.00,2266.20,-1449.60,110.90}},
  323.         {"Jefferson",                   {2056.80,-1372.00,-89.00,2281.40,-1210.70,110.90}},
  324.         {"Jefferson",                   {2056.80,-1210.70,-89.00,2185.30,-1126.30,110.90}},
  325.         {"Jefferson",                   {2185.30,-1210.70,-89.00,2281.40,-1154.50,110.90}},
  326.         {"Jefferson",                   {2056.80,-1449.60,-89.00,2266.20,-1372.00,110.90}},
  327.         {"Julius Thruway East",         {2623.10,943.20,-89.00,2749.90,1055.90,110.90}},
  328.         {"Julius Thruway East",         {2685.10,1055.90,-89.00,2749.90,2626.50,110.90}},
  329.         {"Julius Thruway East",         {2536.40,2442.50,-89.00,2685.10,2542.50,110.90}},
  330.         {"Julius Thruway East",         {2625.10,2202.70,-89.00,2685.10,2442.50,110.90}},
  331.         {"Julius Thruway North",        {2498.20,2542.50,-89.00,2685.10,2626.50,110.90}},
  332.         {"Julius Thruway North",        {2237.40,2542.50,-89.00,2498.20,2663.10,110.90}},
  333.         {"Julius Thruway North",        {2121.40,2508.20,-89.00,2237.40,2663.10,110.90}},
  334.         {"Julius Thruway North",        {1938.80,2508.20,-89.00,2121.40,2624.20,110.90}},
  335.         {"Julius Thruway North",        {1534.50,2433.20,-89.00,1848.40,2583.20,110.90}},
  336.         {"Julius Thruway North",        {1848.40,2478.40,-89.00,1938.80,2553.40,110.90}},
  337.         {"Julius Thruway North",        {1704.50,2342.80,-89.00,1848.40,2433.20,110.90}},
  338.         {"Julius Thruway North",        {1377.30,2433.20,-89.00,1534.50,2507.20,110.90}},
  339.         {"Julius Thruway South",        {1457.30,823.20,-89.00,2377.30,863.20,110.90}},
  340.         {"Julius Thruway South",        {2377.30,788.80,-89.00,2537.30,897.90,110.90}},
  341.         {"Julius Thruway West",         {1197.30,1163.30,-89.00,1236.60,2243.20,110.90}},
  342.         {"Julius Thruway West",         {1236.60,2142.80,-89.00,1297.40,2243.20,110.90}},
  343.         {"Juniper Hill",                {-2533.00,578.30,-7.60,-2274.10,968.30,200.00}},
  344.         {"Juniper Hollow",              {-2533.00,968.30,-6.10,-2274.10,1358.90,200.00}},
  345.         {"K.A.C.C. Military Fuels",     {2498.20,2626.50,-89.00,2749.90,2861.50,110.90}},
  346.         {"Kincaid Bridge",              {-1339.80,599.20,-89.00,-1213.90,828.10,110.90}},
  347.         {"Kincaid Bridge",              {-1213.90,721.10,-89.00,-1087.90,950.00,110.90}},
  348.         {"Kincaid Bridge",              {-1087.90,855.30,-89.00,-961.90,986.20,110.90}},
  349.         {"King's",                      {-2329.30,458.40,-7.60,-1993.20,578.30,200.00}},
  350.         {"King's",                      {-2411.20,265.20,-9.10,-1993.20,373.50,200.00}},
  351.         {"King's",                      {-2253.50,373.50,-9.10,-1993.20,458.40,200.00}},
  352.         {"LVA Freight Depot",           {1457.30,863.20,-89.00,1777.40,1143.20,110.90}},
  353.         {"LVA Freight Depot",           {1375.60,919.40,-89.00,1457.30,1203.20,110.90}},
  354.         {"LVA Freight Depot",           {1277.00,1087.60,-89.00,1375.60,1203.20,110.90}},
  355.         {"LVA Freight Depot",           {1315.30,1044.60,-89.00,1375.60,1087.60,110.90}},
  356.         {"LVA Freight Depot",           {1236.60,1163.40,-89.00,1277.00,1203.20,110.90}},
  357.         {"Las Barrancas",               {-926.10,1398.70,-3.00,-719.20,1634.60,200.00}},
  358.         {"Las Brujas",                  {-365.10,2123.00,-3.00,-208.50,2217.60,200.00}},
  359.         {"Las Colinas",                 {1994.30,-1100.80,-89.00,2056.80,-920.80,110.90}},
  360.         {"Las Colinas",                 {2056.80,-1126.30,-89.00,2126.80,-920.80,110.90}},
  361.         {"Las Colinas",                 {2185.30,-1154.50,-89.00,2281.40,-934.40,110.90}},
  362.         {"Las Colinas",                 {2126.80,-1126.30,-89.00,2185.30,-934.40,110.90}},
  363.         {"Las Colinas",                 {2747.70,-1120.00,-89.00,2959.30,-945.00,110.90}},
  364.         {"Las Colinas",                 {2632.70,-1135.00,-89.00,2747.70,-945.00,110.90}},
  365.         {"Las Colinas",                 {2281.40,-1135.00,-89.00,2632.70,-945.00,110.90}},
  366.         {"Las Payasadas",               {-354.30,2580.30,2.00,-133.60,2816.80,200.00}},
  367.         {"Las Venturas Airport",        {1236.60,1203.20,-89.00,1457.30,1883.10,110.90}},
  368.         {"Las Venturas Airport",        {1457.30,1203.20,-89.00,1777.30,1883.10,110.90}},
  369.         {"Las Venturas Airport",        {1457.30,1143.20,-89.00,1777.40,1203.20,110.90}},
  370.         {"Las Venturas Airport",        {1515.80,1586.40,-12.50,1729.90,1714.50,87.50}},
  371.         {"Last Dime Motel",             {1823.00,596.30,-89.00,1997.20,823.20,110.90}},
  372.         {"Leafy Hollow",                {-1166.90,-1856.00,0.00,-815.60,-1602.00,200.00}},
  373.         {"Liberty City",                {-1000.00,400.00,1300.00,-700.00,600.00,1400.00}},
  374.         {"Lil' Probe Inn",              {-90.20,1286.80,-3.00,153.80,1554.10,200.00}},
  375.         {"Linden Side",                 {2749.90,943.20,-89.00,2923.30,1198.90,110.90}},
  376.         {"Linden Station",              {2749.90,1198.90,-89.00,2923.30,1548.90,110.90}},
  377.         {"Linden Station",              {2811.20,1229.50,-39.50,2861.20,1407.50,60.40}},
  378.         {"Little Mexico",               {1701.90,-1842.20,-89.00,1812.60,-1722.20,110.90}},
  379.         {"Little Mexico",               {1758.90,-1722.20,-89.00,1812.60,-1577.50,110.90}},
  380.         {"Los Flores",                  {2581.70,-1454.30,-89.00,2632.80,-1393.40,110.90}},
  381.         {"Los Flores",                  {2581.70,-1393.40,-89.00,2747.70,-1135.00,110.90}},
  382.         {"Los Santos International",    {1249.60,-2394.30,-89.00,1852.00,-2179.20,110.90}},
  383.         {"Los Santos International",    {1852.00,-2394.30,-89.00,2089.00,-2179.20,110.90}},
  384.         {"Los Santos International",    {1382.70,-2730.80,-89.00,2201.80,-2394.30,110.90}},
  385.         {"Los Santos International",    {1974.60,-2394.30,-39.00,2089.00,-2256.50,60.90}},
  386.         {"Los Santos International",    {1400.90,-2669.20,-39.00,2189.80,-2597.20,60.90}},
  387.         {"Los Santos International",    {2051.60,-2597.20,-39.00,2152.40,-2394.30,60.90}},
  388.         {"Marina",                      {647.70,-1804.20,-89.00,851.40,-1577.50,110.90}},
  389.         {"Marina",                      {647.70,-1577.50,-89.00,807.90,-1416.20,110.90}},
  390.         {"Marina",                      {807.90,-1577.50,-89.00,926.90,-1416.20,110.90}},
  391.         {"Market",                      {787.40,-1416.20,-89.00,1072.60,-1310.20,110.90}},
  392.         {"Market",                      {952.60,-1310.20,-89.00,1072.60,-1130.80,110.90}},
  393.         {"Market",                      {1072.60,-1416.20,-89.00,1370.80,-1130.80,110.90}},
  394.         {"Market",                      {926.90,-1577.50,-89.00,1370.80,-1416.20,110.90}},
  395.         {"Market Station",              {787.40,-1410.90,-34.10,866.00,-1310.20,65.80}},
  396.         {"Martin Bridge",               {-222.10,293.30,0.00,-122.10,476.40,200.00}},
  397.         {"Missionary Hill",             {-2994.40,-811.20,0.00,-2178.60,-430.20,200.00}},
  398.         {"Montgomery",                  {1119.50,119.50,-3.00,1451.40,493.30,200.00}},
  399.         {"Montgomery",                  {1451.40,347.40,-6.10,1582.40,420.80,200.00}},
  400.         {"Montgomery Intersection",     {1546.60,208.10,0.00,1745.80,347.40,200.00}},
  401.         {"Montgomery Intersection",     {1582.40,347.40,0.00,1664.60,401.70,200.00}},
  402.         {"Mulholland",                  {1414.00,-768.00,-89.00,1667.60,-452.40,110.90}},
  403.         {"Mulholland",                  {1281.10,-452.40,-89.00,1641.10,-290.90,110.90}},
  404.         {"Mulholland",                  {1269.10,-768.00,-89.00,1414.00,-452.40,110.90}},
  405.         {"Mulholland",                  {1357.00,-926.90,-89.00,1463.90,-768.00,110.90}},
  406.         {"Mulholland",                  {1318.10,-910.10,-89.00,1357.00,-768.00,110.90}},
  407.         {"Mulholland",                  {1169.10,-910.10,-89.00,1318.10,-768.00,110.90}},
  408.         {"Mulholland",                  {768.60,-954.60,-89.00,952.60,-860.60,110.90}},
  409.         {"Mulholland",                  {687.80,-860.60,-89.00,911.80,-768.00,110.90}},
  410.         {"Mulholland",                  {737.50,-768.00,-89.00,1142.20,-674.80,110.90}},
  411.         {"Mulholland",                  {1096.40,-910.10,-89.00,1169.10,-768.00,110.90}},
  412.         {"Mulholland",                  {952.60,-937.10,-89.00,1096.40,-860.60,110.90}},
  413.         {"Mulholland",                  {911.80,-860.60,-89.00,1096.40,-768.00,110.90}},
  414.         {"Mulholland",                  {861.00,-674.80,-89.00,1156.50,-600.80,110.90}},
  415.         {"Mulholland Intersection",     {1463.90,-1150.80,-89.00,1812.60,-768.00,110.90}},
  416.         {"North Rock",                  {2285.30,-768.00,0.00,2770.50,-269.70,200.00}},
  417.         {"Ocean Docks",                 {2373.70,-2697.00,-89.00,2809.20,-2330.40,110.90}},
  418.         {"Ocean Docks",                 {2201.80,-2418.30,-89.00,2324.00,-2095.00,110.90}},
  419.         {"Ocean Docks",                 {2324.00,-2302.30,-89.00,2703.50,-2145.10,110.90}},
  420.         {"Ocean Docks",                 {2089.00,-2394.30,-89.00,2201.80,-2235.80,110.90}},
  421.         {"Ocean Docks",                 {2201.80,-2730.80,-89.00,2324.00,-2418.30,110.90}},
  422.         {"Ocean Docks",                 {2703.50,-2302.30,-89.00,2959.30,-2126.90,110.90}},
  423.         {"Ocean Docks",                 {2324.00,-2145.10,-89.00,2703.50,-2059.20,110.90}},
  424.         {"Ocean Flats",                 {-2994.40,277.40,-9.10,-2867.80,458.40,200.00}},
  425.         {"Ocean Flats",                 {-2994.40,-222.50,-0.00,-2593.40,277.40,200.00}},
  426.         {"Ocean Flats",                 {-2994.40,-430.20,-0.00,-2831.80,-222.50,200.00}},
  427.         {"Octane Springs",              {338.60,1228.50,0.00,664.30,1655.00,200.00}},
  428.         {"Old Venturas Strip",          {2162.30,2012.10,-89.00,2685.10,2202.70,110.90}},
  429.         {"Palisades",                   {-2994.40,458.40,-6.10,-2741.00,1339.60,200.00}},
  430.         {"Palomino Creek",              {2160.20,-149.00,0.00,2576.90,228.30,200.00}},
  431.         {"Paradiso",                    {-2741.00,793.40,-6.10,-2533.00,1268.40,200.00}},
  432.         {"Pershing Square",             {1440.90,-1722.20,-89.00,1583.50,-1577.50,110.90}},
  433.         {"Pilgrim",                     {2437.30,1383.20,-89.00,2624.40,1783.20,110.90}},
  434.         {"Pilgrim",                     {2624.40,1383.20,-89.00,2685.10,1783.20,110.90}},
  435.         {"Pilson Intersection",         {1098.30,2243.20,-89.00,1377.30,2507.20,110.90}},
  436.         {"Pirates in Men's Pants",      {1817.30,1469.20,-89.00,2027.40,1703.20,110.90}},
  437.         {"Playa del Seville",           {2703.50,-2126.90,-89.00,2959.30,-1852.80,110.90}},
  438.         {"Prickle Pine",                {1534.50,2583.20,-89.00,1848.40,2863.20,110.90}},
  439.         {"Prickle Pine",                {1117.40,2507.20,-89.00,1534.50,2723.20,110.90}},
  440.         {"Prickle Pine",                {1848.40,2553.40,-89.00,1938.80,2863.20,110.90}},
  441.         {"Prickle Pine",                {1938.80,2624.20,-89.00,2121.40,2861.50,110.90}},
  442.         {"Queens",                      {-2533.00,458.40,0.00,-2329.30,578.30,200.00}},
  443.         {"Queens",                      {-2593.40,54.70,0.00,-2411.20,458.40,200.00}},
  444.         {"Queens",                      {-2411.20,373.50,0.00,-2253.50,458.40,200.00}},
  445.         {"Randolph Industrial Estate",  {1558.00,596.30,-89.00,1823.00,823.20,110.90}},
  446.         {"Redsands East",               {1817.30,2011.80,-89.00,2106.70,2202.70,110.90}},
  447.         {"Redsands East",               {1817.30,2202.70,-89.00,2011.90,2342.80,110.90}},
  448.         {"Redsands East",               {1848.40,2342.80,-89.00,2011.90,2478.40,110.90}},
  449.         {"Redsands West",               {1236.60,1883.10,-89.00,1777.30,2142.80,110.90}},
  450.         {"Redsands West",               {1297.40,2142.80,-89.00,1777.30,2243.20,110.90}},
  451.         {"Redsands West",               {1377.30,2243.20,-89.00,1704.50,2433.20,110.90}},
  452.         {"Redsands West",               {1704.50,2243.20,-89.00,1777.30,2342.80,110.90}},
  453.         {"Regular Tom",                 {-405.70,1712.80,-3.00,-276.70,1892.70,200.00}},
  454.         {"Richman",                     {647.50,-1118.20,-89.00,787.40,-954.60,110.90}},
  455.         {"Richman",                     {647.50,-954.60,-89.00,768.60,-860.60,110.90}},
  456.         {"Richman",                     {225.10,-1369.60,-89.00,334.50,-1292.00,110.90}},
  457.         {"Richman",                     {225.10,-1292.00,-89.00,466.20,-1235.00,110.90}},
  458.         {"Richman",                     {72.60,-1404.90,-89.00,225.10,-1235.00,110.90}},
  459.         {"Richman",                     {72.60,-1235.00,-89.00,321.30,-1008.10,110.90}},
  460.         {"Richman",                     {321.30,-1235.00,-89.00,647.50,-1044.00,110.90}},
  461.         {"Richman",                     {321.30,-1044.00,-89.00,647.50,-860.60,110.90}},
  462.         {"Richman",                     {321.30,-860.60,-89.00,687.80,-768.00,110.90}},
  463.         {"Richman",                     {321.30,-768.00,-89.00,700.70,-674.80,110.90}},
  464.         {"Robada Intersection",         {-1119.00,1178.90,-89.00,-862.00,1351.40,110.90}},
  465.         {"Roca Escalante",              {2237.40,2202.70,-89.00,2536.40,2542.50,110.90}},
  466.         {"Roca Escalante",              {2536.40,2202.70,-89.00,2625.10,2442.50,110.90}},
  467.         {"Rockshore East",              {2537.30,676.50,-89.00,2902.30,943.20,110.90}},
  468.         {"Rockshore West",              {1997.20,596.30,-89.00,2377.30,823.20,110.90}},
  469.         {"Rockshore West",              {2377.30,596.30,-89.00,2537.30,788.80,110.90}},
  470.         {"Rodeo",                       {72.60,-1684.60,-89.00,225.10,-1544.10,110.90}},
  471.         {"Rodeo",                       {72.60,-1544.10,-89.00,225.10,-1404.90,110.90}},
  472.         {"Rodeo",                       {225.10,-1684.60,-89.00,312.80,-1501.90,110.90}},
  473.         {"Rodeo",                       {225.10,-1501.90,-89.00,334.50,-1369.60,110.90}},
  474.         {"Rodeo",                       {334.50,-1501.90,-89.00,422.60,-1406.00,110.90}},
  475.         {"Rodeo",                       {312.80,-1684.60,-89.00,422.60,-1501.90,110.90}},
  476.         {"Rodeo",                       {422.60,-1684.60,-89.00,558.00,-1570.20,110.90}},
  477.         {"Rodeo",                       {558.00,-1684.60,-89.00,647.50,-1384.90,110.90}},
  478.         {"Rodeo",                       {466.20,-1570.20,-89.00,558.00,-1385.00,110.90}},
  479.         {"Rodeo",                       {422.60,-1570.20,-89.00,466.20,-1406.00,110.90}},
  480.         {"Rodeo",                       {466.20,-1385.00,-89.00,647.50,-1235.00,110.90}},
  481.         {"Rodeo",                       {334.50,-1406.00,-89.00,466.20,-1292.00,110.90}},
  482.         {"Royal Casino",                {2087.30,1383.20,-89.00,2437.30,1543.20,110.90}},
  483.         {"San Andreas Sound",           {2450.30,385.50,-100.00,2759.20,562.30,200.00}},
  484.         {"Santa Flora",                 {-2741.00,458.40,-7.60,-2533.00,793.40,200.00}},
  485.         {"Santa Maria Beach",           {342.60,-2173.20,-89.00,647.70,-1684.60,110.90}},
  486.         {"Santa Maria Beach",           {72.60,-2173.20,-89.00,342.60,-1684.60,110.90}},
  487.         {"Shady Cabin",                 {-1632.80,-2263.40,-3.00,-1601.30,-2231.70,200.00}},
  488.         {"Shady Creeks",                {-1820.60,-2643.60,-8.00,-1226.70,-1771.60,200.00}},
  489.         {"Shady Creeks",                {-2030.10,-2174.80,-6.10,-1820.60,-1771.60,200.00}},
  490.         {"Sobell Rail Yards",           {2749.90,1548.90,-89.00,2923.30,1937.20,110.90}},
  491.         {"Spinybed",                    {2121.40,2663.10,-89.00,2498.20,2861.50,110.90}},
  492.         {"Starfish Casino",             {2437.30,1783.20,-89.00,2685.10,2012.10,110.90}},
  493.         {"Starfish Casino",             {2437.30,1858.10,-39.00,2495.00,1970.80,60.90}},
  494.         {"Starfish Casino",             {2162.30,1883.20,-89.00,2437.30,2012.10,110.90}},
  495.         {"Temple",                      {1252.30,-1130.80,-89.00,1378.30,-1026.30,110.90}},
  496.         {"Temple",                      {1252.30,-1026.30,-89.00,1391.00,-926.90,110.90}},
  497.         {"Temple",                      {1252.30,-926.90,-89.00,1357.00,-910.10,110.90}},
  498.         {"Temple",                      {952.60,-1130.80,-89.00,1096.40,-937.10,110.90}},
  499.         {"Temple",                      {1096.40,-1130.80,-89.00,1252.30,-1026.30,110.90}},
  500.         {"Temple",                      {1096.40,-1026.30,-89.00,1252.30,-910.10,110.90}},
  501.         {"The Camel's Toe",             {2087.30,1203.20,-89.00,2640.40,1383.20,110.90}},
  502.         {"The Clown's Pocket",          {2162.30,1783.20,-89.00,2437.30,1883.20,110.90}},
  503.         {"The Emerald Isle",            {2011.90,2202.70,-89.00,2237.40,2508.20,110.90}},
  504.         {"The Farm",                    {-1209.60,-1317.10,114.90,-908.10,-787.30,251.90}},
  505.         {"The Four Dragons Casino",     {1817.30,863.20,-89.00,2027.30,1083.20,110.90}},
  506.         {"The High Roller",             {1817.30,1283.20,-89.00,2027.30,1469.20,110.90}},
  507.         {"The Mako Span",               {1664.60,401.70,0.00,1785.10,567.20,200.00}},
  508.         {"The Panopticon",              {-947.90,-304.30,-1.10,-319.60,327.00,200.00}},
  509.         {"The Pink Swan",               {1817.30,1083.20,-89.00,2027.30,1283.20,110.90}},
  510.         {"The Sherman Dam",             {-968.70,1929.40,-3.00,-481.10,2155.20,200.00}},
  511.         {"The Strip",                   {2027.40,863.20,-89.00,2087.30,1703.20,110.90}},
  512.         {"The Strip",                   {2106.70,1863.20,-89.00,2162.30,2202.70,110.90}},
  513.         {"The Strip",                   {2027.40,1783.20,-89.00,2162.30,1863.20,110.90}},
  514.         {"The Strip",                   {2027.40,1703.20,-89.00,2137.40,1783.20,110.90}},
  515.         {"The Visage",                  {1817.30,1863.20,-89.00,2106.70,2011.80,110.90}},
  516.         {"The Visage",                  {1817.30,1703.20,-89.00,2027.40,1863.20,110.90}},
  517.         {"Unity Station",               {1692.60,-1971.80,-20.40,1812.60,-1932.80,79.50}},
  518.         {"Valle Ocultado",              {-936.60,2611.40,2.00,-715.90,2847.90,200.00}},
  519.         {"Verdant Bluffs",              {930.20,-2488.40,-89.00,1249.60,-2006.70,110.90}},
  520.         {"Verdant Bluffs",              {1073.20,-2006.70,-89.00,1249.60,-1842.20,110.90}},
  521.         {"Verdant Bluffs",              {1249.60,-2179.20,-89.00,1692.60,-1842.20,110.90}},
  522.         {"Verdant Meadows",             {37.00,2337.10,-3.00,435.90,2677.90,200.00}},
  523.         {"Verona Beach",                {647.70,-2173.20,-89.00,930.20,-1804.20,110.90}},
  524.         {"Verona Beach",                {930.20,-2006.70,-89.00,1073.20,-1804.20,110.90}},
  525.         {"Verona Beach",                {851.40,-1804.20,-89.00,1046.10,-1577.50,110.90}},
  526.         {"Verona Beach",                {1161.50,-1722.20,-89.00,1323.90,-1577.50,110.90}},
  527.         {"Verona Beach",                {1046.10,-1722.20,-89.00,1161.50,-1577.50,110.90}},
  528.         {"Vinewood",                    {787.40,-1310.20,-89.00,952.60,-1130.80,110.90}},
  529.         {"Vinewood",                    {787.40,-1130.80,-89.00,952.60,-954.60,110.90}},
  530.         {"Vinewood",                    {647.50,-1227.20,-89.00,787.40,-1118.20,110.90}},
  531.         {"Vinewood",                    {647.70,-1416.20,-89.00,787.40,-1227.20,110.90}},
  532.         {"Whitewood Estates",           {883.30,1726.20,-89.00,1098.30,2507.20,110.90}},
  533.         {"Whitewood Estates",           {1098.30,1726.20,-89.00,1197.30,2243.20,110.90}},
  534.         {"Willowfield",                 {1970.60,-2179.20,-89.00,2089.00,-1852.80,110.90}},
  535.         {"Willowfield",                 {2089.00,-2235.80,-89.00,2201.80,-1989.90,110.90}},
  536.         {"Willowfield",                 {2089.00,-1989.90,-89.00,2324.00,-1852.80,110.90}},
  537.         {"Willowfield",                 {2201.80,-2095.00,-89.00,2324.00,-1989.90,110.90}},
  538.         {"Willowfield",                 {2541.70,-1941.40,-89.00,2703.50,-1852.80,110.90}},
  539.         {"Willowfield",                 {2324.00,-2059.20,-89.00,2541.70,-1852.80,110.90}},
  540.         {"Willowfield",                 {2541.70,-2059.20,-89.00,2703.50,-1941.40,110.90}},
  541.         {"Yellow Bell Station",         {1377.40,2600.40,-21.90,1492.40,2687.30,78.00}},
  542.         {"Los Santos",                  {44.60,-2892.90,-242.90,2997.00,-768.00,900.00}},
  543.         {"Las Venturas",                {869.40,596.30,-242.90,2997.00,2993.80,900.00}},
  544.         {"Bone County",                 {-480.50,596.30,-242.90,869.40,2993.80,900.00}},
  545.         {"Tierra Robada",               {-2997.40,1659.60,-242.90,-480.50,2993.80,900.00}},
  546.         {"Tierra Robada",               {-1213.90,596.30,-242.90,-480.50,1659.60,900.00}},
  547.         {"San Fierro",                  {-2997.40,-1115.50,-242.90,-1213.90,1659.60,900.00}},
  548.         {"Red County",                  {-1213.90,-768.00,-242.90,2997.00,596.30,900.00}},
  549.         {"Flint County",                {-1213.90,-2892.90,-242.90,44.60,-768.00,900.00}},
  550.         {"Whetstone",                   {-2997.40,-2892.90,-242.90,-1213.90,-1115.50,900.00}}
  551.     };
  552.  
  553. GetZoneName(Float: x, Float: y, Float: z)
  554. {
  555.     new zone[28];
  556.     for(new i = 0; i < sizeof(SAZones); i++)
  557.     {
  558.         if(x >= SAZones[i][SAZONE_AREA][0] && x <= SAZones[i][SAZONE_AREA][3] && y >= SAZones[i][SAZONE_AREA][1] && y <= SAZones[i][SAZONE_AREA][4] && z >= SAZones[i][SAZONE_AREA][2] && z <= SAZones[i][SAZONE_AREA][5])
  559.         {
  560.             strcat(zone, SAZones[i][SAZONE_NAME]);
  561.             return zone;
  562.         }
  563.     }
  564.  
  565.     strcat(zone, "Unknown");
  566.     return zone;
  567. }
  568.  
  569. GetCityName(Float: x, Float: y, Float: z)
  570. {
  571.     new city[28];
  572.     for(new i = 356; i < sizeof(SAZones); i++)
  573.     {
  574.         if(x >= SAZones[i][SAZONE_AREA][0] && x <= SAZones[i][SAZONE_AREA][3] && y >= SAZones[i][SAZONE_AREA][1] && y <= SAZones[i][SAZONE_AREA][4] && z >= SAZones[i][SAZONE_AREA][2] && z <= SAZones[i][SAZONE_AREA][5])
  575.         {
  576.             strcat(city, SAZones[i][SAZONE_NAME]);
  577.             return city;
  578.         }
  579.     }
  580.  
  581.     strcat(city, "San Andreas");
  582.     return city;
  583. }
  584.  
  585. RandomEx(min, max)
  586.     return random(max - min) + min;
  587.  
  588. ReturnPlayerName(playerid)
  589. {
  590.     new name[MAX_PLAYER_NAME];
  591.     GetPlayerName(playerid, name, sizeof(name));
  592.     return name;
  593. }
  594.  
  595. formatTime(time)
  596. {
  597.     // http://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
  598.     new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
  599.     format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
  600.     return string;
  601. }
  602.  
  603. /* Player Functions */
  604. Halloween_InitPlayer(playerid)
  605. {
  606.     #if defined I_WANT_HATS_DAMMIT
  607.     SetPlayerAttachedObject(playerid, ATTACH_INDEX, 19528, 2, 0.091, 0.025, 0.0, 0.0, 0.0, -26.1, 1.227, 1.395, 1.4);
  608.     #endif
  609.  
  610.     TextDrawShowForPlayer(playerid, HalloweenText);
  611.     TextDrawShowForPlayer(playerid, PumpkinIcon);
  612.     TextDrawShowForPlayer(playerid, TimerText);
  613.     TextDrawShowForPlayer(playerid, TimerIcon);
  614.  
  615.     CandyCount[playerid] = 0;
  616.  
  617.     CandyText[playerid] = CreatePlayerTextDraw(playerid, 499.000000, 98.000000, "000000000");
  618.     PlayerTextDrawBackgroundColor(playerid, CandyText[playerid], 255);
  619.     PlayerTextDrawFont(playerid, CandyText[playerid], 3);
  620.     PlayerTextDrawLetterSize(playerid, CandyText[playerid], 0.580000, 2.199999);
  621.     PlayerTextDrawColor(playerid, CandyText[playerid], 0x9158B6FF);
  622.     PlayerTextDrawSetOutline(playerid, CandyText[playerid], 1);
  623.     PlayerTextDrawSetProportional(playerid, CandyText[playerid], 1);
  624.     PlayerTextDrawSetSelectable(playerid, CandyText[playerid], 0);
  625.     PlayerTextDrawShow(playerid, CandyText[playerid]);
  626.    
  627.     // load from database
  628.     stmt_bind_value(LoadFromTable, 0, DB::TYPE_STRING, ReturnPlayerName(playerid));
  629.     stmt_bind_result_field(LoadFromTable, 0, DB::TYPE_INTEGER, CandyCount[playerid]);
  630.  
  631.     if(stmt_execute(LoadFromTable))
  632.     {
  633.         if(stmt_rows_left(LoadFromTable) > 0) {
  634.             stmt_fetch_row(LoadFromTable);
  635.            
  636.             new string[10];
  637.             format(string, sizeof(string), "%09d", CandyCount[playerid]);
  638.             PlayerTextDrawSetString(playerid, CandyText[playerid], string);
  639.         }else{
  640.             stmt_bind_value(InsertToTable, 0, DB::TYPE_STRING, ReturnPlayerName(playerid));
  641.             stmt_execute(InsertToTable);
  642.         }
  643.     }
  644.    
  645.     return 1;
  646. }
  647.  
  648. Halloween_ChangeCandy(playerid, amount)
  649. {
  650.     CandyCount[playerid] += amount;
  651.    
  652.     new string[10];
  653.     format(string, sizeof(string), "%09d", CandyCount[playerid]);
  654.     PlayerTextDrawSetString(playerid, CandyText[playerid], string);
  655.    
  656.     // save to database
  657.     stmt_bind_value(SaveToTable, 0, DB::TYPE_INTEGER, CandyCount[playerid]);
  658.     stmt_bind_value(SaveToTable, 1, DB::TYPE_STRING, ReturnPlayerName(playerid));
  659.     stmt_execute(SaveToTable);
  660.     return 1;
  661. }
  662.  
  663. Halloween_ShowShopMenu(playerid)
  664. {
  665.     new string[144];
  666.     format(string, sizeof(string), "Item\tPrice\n");
  667.     format(string, sizeof(string), "%sMedkit\t{9158B6}C%d\nBody Armor\t{9158B6}C%d\nGift Box\t{2ECC71}$%d {FFFFFF}/ {9158B6}C%d\nWeapons", string, MEDKIT_PRICE, ARMOR_PRICE, GIFT_PRICE, GIFT_PRICE_CANDY);
  668.     ShowPlayerDialog(playerid, DIALOG_CANDY_SHOP, DIALOG_STYLE_TABLIST_HEADERS, "Candy Shop", string, "Select", "Cancel");
  669.     return 1;
  670. }
  671.  
  672. Halloween_ShowGiftMenu(playerid)
  673. {
  674.     new string[70];
  675.     format(string, sizeof(string), "Buy Using Money {2ECC71}($%d)\nBuy Using Candy {9158B6}(C%d)", GIFT_PRICE, GIFT_PRICE_CANDY);
  676.     ShowPlayerDialog(playerid, DIALOG_BUY_GIFT, DIALOG_STYLE_LIST, "Candy Shop » {FFFFFF}Gift Box", string, "Buy", "Back");
  677.     return 1;
  678. }
  679.  
  680. Halloween_ShowWeaponsMenu(playerid)
  681. {
  682.     new string[256], w_name[32];
  683.     format(string, sizeof(string), "Weapon\tAmmo\tPrice\n");
  684.    
  685.     for(new i; i < sizeof(ShopWeapons); i++)
  686.     {
  687.         GetWeaponName(ShopWeapons[i][WeaponID], w_name, sizeof(w_name));
  688.         format(string, sizeof(string), "%s%s\t%d\t{9158B6}C%d\n", string, w_name, ShopWeapons[i][WeaponAmmo], ShopWeapons[i][WeaponPrice]);
  689.     }
  690.    
  691.     ShowPlayerDialog(playerid, DIALOG_BUY_WEAPON, DIALOG_STYLE_TABLIST_HEADERS, "Candy Shop » {FFFFFF}Weapons", string, "Buy", "Back");
  692.     return 1;
  693. }
  694.  
  695. #if defined PUMPKIN_DROPS
  696. /* Pumpkin Code */
  697. Halloween_CreatePumpkin(Float: x, Float: y, Float: z, virtualworld, interior)
  698. {
  699.     new id = Pumpkin_FindFreeID();
  700.     if(id == -1) return -1;
  701.     z += 0.15;
  702.  
  703.     PumpkinData[id][PumpkinTimeLeft] = PUMPKIN_LIFETIME;
  704.     PumpkinData[id][PumpkinPickup] = CreateDynamicPickup(19320, 1, x, y, z, virtualworld, interior);
  705.     Streamer_SetIntData(STREAMER_TYPE_PICKUP, PumpkinData[id][PumpkinPickup], E_STREAMER_EXTRA_ID, id);
  706.  
  707.     new string[50];
  708.     format(string, sizeof(string), "Pumpkin\n\n{FFFFFF}It's filled with candy!\n%s", formatTime(PumpkinData[id][PumpkinTimeLeft]));
  709.     PumpkinData[id][PumpkinLabel] = CreateDynamic3DTextLabel(string, 0xFFA944FF, x, y, z, 10.0, _, _, 1, virtualworld, interior);
  710.  
  711.     PumpkinData[id][PumpkinTimer] = SetTimerEx("Pumpkin_Countdown", 1000, true, "i", id);
  712.     PumpkinData[id][PumpkinExists] = true;
  713.     return id;
  714. }
  715.  
  716. Pumpkin_FindFreeID()
  717. {
  718.     for(new i; i < MAX_PUMPKINS; i++) if(!PumpkinData[i][PumpkinExists]) return i;
  719.     return -1;
  720. }
  721.  
  722. Pumpkin_Destroy(id)
  723. {
  724.     if(!(0 <= id <= MAX_PUMPKINS) || !PumpkinData[id][PumpkinExists]) return -1;
  725.     KillTimer(PumpkinData[id][PumpkinTimer]);
  726.     DestroyDynamicPickup(PumpkinData[id][PumpkinPickup]);
  727.     DestroyDynamic3DTextLabel(PumpkinData[id][PumpkinLabel]);
  728.    
  729.     PumpkinData[id][PumpkinTimeLeft] = 0;
  730.     PumpkinData[id][PumpkinPickup] = PumpkinData[id][PumpkinTimer] = -1;
  731.     PumpkinData[id][PumpkinLabel] = Text3D: -1;
  732.     PumpkinData[id][PumpkinExists] = false;
  733.     return 1;
  734. }
  735.  
  736. forward Pumpkin_Countdown(id);
  737. public Pumpkin_Countdown(id)
  738. {
  739.     new string[50];
  740.     if(PumpkinData[id][PumpkinTimeLeft] > 1) {
  741.         PumpkinData[id][PumpkinTimeLeft]--;
  742.        
  743.         format(string, sizeof(string), "Pumpkin\n\n{FFFFFF}It's filled with candy!\n%s", formatTime(PumpkinData[id][PumpkinTimeLeft]));
  744.         UpdateDynamic3DTextLabelText(PumpkinData[id][PumpkinLabel], 0xFFA944FF, string);
  745.     }else if(PumpkinData[id][PumpkinTimeLeft] == 1) {
  746.         Pumpkin_Destroy(id);
  747.     }
  748.    
  749.     return 1;
  750. }
  751. #endif
  752.  
  753. /* Gift Box Code */
  754. Halloween_CreateGiftBox(Float: x, Float: y, Float: z, virtualworld, interior)
  755. {
  756.     new id = GiftBox_FindFreeID();
  757.     if(id == -1) return -1;
  758.     z += 0.15;
  759.  
  760.     GiftBoxData[id][GiftBoxX] = x;
  761.     GiftBoxData[id][GiftBoxY] = y;
  762.     GiftBoxData[id][GiftBoxZ] = z;
  763.     GiftBoxData[id][GiftBoxTimeLeft] = GIFT_LIFETIME;
  764.     GiftBoxData[id][GiftBoxPickup] = CreateDynamicPickup(19054 + random(5), 1, x, y, z, virtualworld, interior);
  765.     Streamer_SetIntData(STREAMER_TYPE_PICKUP, GiftBoxData[id][GiftBoxPickup], E_STREAMER_EXTRA_ID, id);
  766.  
  767.     new string[128];
  768.     format(string, sizeof(string), "Gift Box\n\n{FFFFFF}It has a surprise inside!\n%s", formatTime(GiftBoxData[id][GiftBoxTimeLeft]));
  769.     GiftBoxData[id][GiftBoxLabel] = CreateDynamic3DTextLabel(string, 0xFFA944FF, x, y, z, 10.0, _, _, 1, virtualworld, interior);
  770.  
  771.     GiftBoxData[id][GiftBoxTimer] = SetTimerEx("GiftBox_Countdown", 1000, true, "i", id);
  772.     GiftBoxData[id][GiftBoxExists] = true;
  773.    
  774.     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}A gift box dropped at {FFA944}%s, %s!", GetZoneName(x, y, z), GetCityName(x, y, z));
  775.     SendClientMessageToAll(0x9158B6FF, string);
  776.     return id;
  777. }
  778.  
  779. GiftBox_FindFreeID()
  780. {
  781.     for(new i; i < MAX_GIFT_BOXES; i++) if(!GiftBoxData[i][GiftBoxExists]) return i;
  782.     return -1;
  783. }
  784.  
  785. GiftBox_Destroy(id)
  786. {
  787.     if(!(0 <= id <= MAX_GIFT_BOXES) || !GiftBoxData[id][GiftBoxExists]) return -1;
  788.     KillTimer(GiftBoxData[id][GiftBoxTimer]);
  789.     DestroyDynamicPickup(GiftBoxData[id][GiftBoxPickup]);
  790.     DestroyDynamic3DTextLabel(GiftBoxData[id][GiftBoxLabel]);
  791.  
  792.     GiftBoxData[id][GiftBoxTimeLeft] = 0;
  793.     GiftBoxData[id][GiftBoxPickup] = GiftBoxData[id][GiftBoxTimer] = -1;
  794.     GiftBoxData[id][GiftBoxLabel] = Text3D: -1;
  795.     GiftBoxData[id][GiftBoxExists] = false;
  796.     return 1;
  797. }
  798.  
  799. forward GiftBox_Countdown(id);
  800. public GiftBox_Countdown(id)
  801. {
  802.     new string[54];
  803.     if(GiftBoxData[id][GiftBoxTimeLeft] > 1) {
  804.         GiftBoxData[id][GiftBoxTimeLeft]--;
  805.  
  806.         format(string, sizeof(string), "Gift Box\n\n{FFFFFF}It has a surprise inside!\n%s", formatTime(GiftBoxData[id][GiftBoxTimeLeft]));
  807.         UpdateDynamic3DTextLabelText(GiftBoxData[id][GiftBoxLabel], 0xFFA944FF, string);
  808.     }else if(GiftBoxData[id][GiftBoxTimeLeft] == 1) {
  809.         GiftBox_Destroy(id);
  810.     }
  811.  
  812.     return 1;
  813. }
  814.  
  815. /* Drop Timer */
  816. forward Halloween_GiftDrop();
  817. public Halloween_GiftDrop()
  818. {
  819.     if(HalloweenData[DropTimeLeft] > 1) {
  820.         HalloweenData[DropTimeLeft]--;
  821.        
  822.         TextDrawSetString(TimerText, formatTime(HalloweenData[DropTimeLeft]));
  823.     }else if(HalloweenData[DropTimeLeft] == 1) {
  824.         new id;
  825.         for(new i; i < GIFT_AMOUNT; i++)
  826.         {
  827.             id = random(sizeof(GiftBoxCoords));
  828.             Halloween_CreateGiftBox(GiftBoxCoords[id][GiftBoxSpawnX], GiftBoxCoords[id][GiftBoxSpawnY], GiftBoxCoords[id][GiftBoxSpawnZ], -1, -1);
  829.         }
  830.  
  831.         HalloweenData[DropTimeLeft] = GIFT_INTERVAL;
  832.     }
  833.    
  834.     return 1;
  835. }
  836.  
  837. /* Callbacks */
  838. public OnFilterScriptInit()
  839. {
  840.     // database
  841.     HalloweenDB = db_open("halloween.db");
  842.     db_query(HalloweenDB, "CREATE TABLE IF NOT EXISTS halloween_players (Name TEXT, Candy INTEGER)");
  843.    
  844.     // prepare queries
  845.     LoadFromTable = db_prepare(HalloweenDB, "SELECT Candy FROM halloween_players WHERE Name=?");
  846.     InsertToTable = db_prepare(HalloweenDB, "INSERT INTO halloween_players (Name) VALUES (?)");
  847.     SaveToTable = db_prepare(HalloweenDB, "UPDATE halloween_players SET Candy=? WHERE Name=?");
  848.     TopCandies = db_prepare(HalloweenDB, "SELECT * FROM halloween_players ORDER BY Candy DESC LIMIT 15");
  849.    
  850.     // init
  851.     HalloweenData[DropTimeLeft] = GIFT_INTERVAL;
  852.     HalloweenData[EventTimer] = SetTimer("Halloween_GiftDrop", 1000, true);
  853.    
  854.     for(new i; i < MAX_GIFT_BOXES; i++)
  855.     {
  856.         GiftBoxData[i][GiftBoxPickup] = GiftBoxData[i][GiftBoxTimer] = -1;
  857.         GiftBoxData[i][GiftBoxLabel] = Text3D: -1;
  858.     }
  859.    
  860.     for(new i; i < MAX_PUMPKINS; i++)
  861.     {
  862.         PumpkinData[i][PumpkinPickup] = PumpkinData[i][PumpkinTimer] = -1;
  863.         PumpkinData[i][PumpkinLabel] = Text3D: -1;
  864.     }
  865.    
  866.     // textdraws
  867.     HalloweenText = TextDrawCreate(515.000000, 7.000000, "Happy Halloween!");
  868.     TextDrawBackgroundColor(HalloweenText, 255);
  869.     TextDrawFont(HalloweenText, 2);
  870.     TextDrawLetterSize(HalloweenText, 0.210000, 1.100000);
  871.     TextDrawColor(HalloweenText, 0xFF9922FF);
  872.     TextDrawSetOutline(HalloweenText, 1);
  873.     TextDrawSetProportional(HalloweenText, 1);
  874.     TextDrawSetSelectable(HalloweenText, 0);
  875.  
  876.     PumpkinIcon = TextDrawCreate(486.000000, -20.000000, "_");
  877.     TextDrawBackgroundColor(PumpkinIcon, 0);
  878.     TextDrawFont(PumpkinIcon, 5);
  879.     TextDrawLetterSize(PumpkinIcon, 0.210000, 1.100000);
  880.     TextDrawColor(PumpkinIcon, -1);
  881.     TextDrawSetOutline(PumpkinIcon, 1);
  882.     TextDrawSetProportional(PumpkinIcon, 1);
  883.     TextDrawUseBox(PumpkinIcon, 1);
  884.     TextDrawBoxColor(PumpkinIcon, 255);
  885.     TextDrawTextSize(PumpkinIcon, 40.000000, 40.000000);
  886.     TextDrawSetPreviewModel(PumpkinIcon, 19320);
  887.     TextDrawSetPreviewRot(PumpkinIcon, 0.000000, 0.000000, 0.000000, 0.550000);
  888.     TextDrawSetSelectable(PumpkinIcon, 0);
  889.    
  890.     TimerText = TextDrawCreate(557.000000, 28.000000, formatTime(GIFT_INTERVAL));
  891.     TextDrawBackgroundColor(TimerText, 255);
  892.     TextDrawFont(TimerText, 1);
  893.     TextDrawLetterSize(TimerText, 0.190000, 1.000000);
  894.     TextDrawColor(TimerText, -1);
  895.     TextDrawSetOutline(TimerText, 1);
  896.     TextDrawSetProportional(TimerText, 1);
  897.     TextDrawSetSelectable(TimerText, 0);
  898.    
  899.     TimerIcon = TextDrawCreate(545.000000, 25.000000, "ld_grav:timer");
  900.     TextDrawBackgroundColor(TimerIcon, 255);
  901.     TextDrawFont(TimerIcon, 4);
  902.     TextDrawLetterSize(TimerIcon, 0.500000, 1.000000);
  903.     TextDrawColor(TimerIcon, -1);
  904.     TextDrawSetOutline(TimerIcon, 1);
  905.     TextDrawSetProportional(TimerIcon, 1);
  906.     TextDrawUseBox(TimerIcon, 1);
  907.     TextDrawBoxColor(TimerIcon, 255);
  908.     TextDrawTextSize(TimerIcon, 11.000000, 13.000000);
  909.     TextDrawSetSelectable(TimerIcon, 0);
  910.    
  911.     // load player data
  912.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++) if(IsPlayerConnected(i)) Halloween_InitPlayer(i);
  913.     return 1;
  914. }
  915.  
  916. public OnFilterScriptExit()
  917. {
  918.     // remove textdraws
  919.     TextDrawHideForAll(HalloweenText);
  920.     TextDrawHideForAll(PumpkinIcon);
  921.     TextDrawHideForAll(TimerText);
  922.     TextDrawHideForAll(TimerIcon);
  923.    
  924.     TextDrawDestroy(HalloweenText);
  925.     TextDrawDestroy(PumpkinIcon);
  926.     TextDrawDestroy(TimerText);
  927.     TextDrawDestroy(TimerIcon);
  928.  
  929.     // remove player stuff
  930.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  931.     {
  932.         if(!IsPlayerConnected(i)) continue;
  933.         PlayerTextDrawDestroy(i, CandyText[i]);
  934.        
  935.         #if defined I_WANT_HATS_DAMMIT
  936.         RemovePlayerAttachedObject(i, ATTACH_INDEX);
  937.         #endif
  938.     }
  939.    
  940.     // close database
  941.     db_close(HalloweenDB);
  942.     return 1;
  943. }
  944.  
  945. public OnPlayerConnect(playerid)
  946. {
  947.     // load player data
  948.     Halloween_InitPlayer(playerid);
  949.     return 1;
  950. }
  951.  
  952. public OnPlayerDisconnect(playerid, reason)
  953. {
  954.     CandyCount[playerid] = 0;
  955.     return 1;
  956. }
  957.  
  958. #if defined I_WANT_HATS_DAMMIT
  959. public OnPlayerSpawn(playerid)
  960. {
  961.     SetPlayerAttachedObject(playerid, ATTACH_INDEX, 19528, 2, 0.091, 0.025, 0.0, 0.0, 0.0, -26.1, 1.227, 1.395, 1.4);
  962.     return 1;
  963. }
  964. #endif
  965.  
  966. #if defined PUMPKIN_DROPS
  967. public OnPlayerDeath(playerid, killerid, reason)
  968. {
  969.     if(IsPlayerConnected(killerid))
  970.     {
  971.         new Float: x, Float: y, Float: z;
  972.         GetPlayerPos(playerid, x, y, z);
  973.         Halloween_CreatePumpkin(x, y, z, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
  974.     }
  975.    
  976.     return 1;
  977. }
  978. #endif
  979.  
  980. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  981. {
  982.     switch(dialogid)
  983.     {
  984.         case DIALOG_CANDY_SHOP:
  985.         {
  986.             if(response)
  987.             {
  988.                 new string[96];
  989.                
  990.                 switch(listitem)
  991.                 {
  992.                     // medkit
  993.                     case 0:
  994.                     {
  995.                         if(MEDKIT_PRICE > CandyCount[playerid]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough candies."), Halloween_ShowShopMenu(playerid);
  996.                         SetPlayerHealth(playerid, 100.0);
  997.                         Halloween_ChangeCandy(playerid, -MEDKIT_PRICE);
  998.                        
  999.                         format(string, sizeof(string), "CANDY SHOP: {FFFFFF}Bought {FFA944}medkit {FFFFFF}using {9158B6}C%d.", MEDKIT_PRICE);
  1000.                         SendClientMessage(playerid, 0x9158B6FF, string);
  1001.                         Halloween_ShowShopMenu(playerid);
  1002.                     }
  1003.                    
  1004.                     // body armor
  1005.                     case 1:
  1006.                     {
  1007.                         if(ARMOR_PRICE > CandyCount[playerid]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough candies."), Halloween_ShowShopMenu(playerid);
  1008.                         SetPlayerArmour(playerid, 100.0);
  1009.                         Halloween_ChangeCandy(playerid, -ARMOR_PRICE);
  1010.  
  1011.                         format(string, sizeof(string), "CANDY SHOP: {FFFFFF}Bought {FFA944}body armor {FFFFFF}using {9158B6}C%d.", ARMOR_PRICE);
  1012.                         SendClientMessage(playerid, 0x9158B6FF, string);
  1013.                         Halloween_ShowShopMenu(playerid);
  1014.                     }
  1015.                    
  1016.                     // gift box
  1017.                     case 2: Halloween_ShowGiftMenu(playerid);
  1018.                    
  1019.                     // weapons
  1020.                     case 3: Halloween_ShowWeaponsMenu(playerid);
  1021.                 }
  1022.             }
  1023.            
  1024.             return 1;
  1025.         }
  1026.        
  1027.         case DIALOG_BUY_GIFT:
  1028.         {
  1029.             if(!response) return Halloween_ShowShopMenu(playerid);
  1030.             switch(listitem)
  1031.             {
  1032.                 // use money
  1033.                 case 0:
  1034.                 {
  1035.                     if(GIFT_PRICE > GetPlayerMoney(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough money."), Halloween_ShowGiftMenu(playerid);
  1036.                     new Float: x, Float: y, Float: z, Float: a;
  1037.                     GetPlayerPos(playerid, x, y, z);
  1038.                     GetPlayerFacingAngle(playerid, a);
  1039.                    
  1040.                     x += (2.0 * floatsin(-a, degrees));
  1041.                     y += (2.0 * floatcos(-a, degrees));
  1042.                    
  1043.                     if(Halloween_CreateGiftBox(x, y, z, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)) != -1)
  1044.                     {
  1045.                         GivePlayerMoney(playerid, -GIFT_PRICE);
  1046.                         Halloween_ShowGiftMenu(playerid);
  1047.                     }
  1048.                 }
  1049.                
  1050.                 // use candy
  1051.                 case 1:
  1052.                 {
  1053.                     if(GIFT_PRICE_CANDY > CandyCount[playerid]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough candies."), Halloween_ShowGiftMenu(playerid);
  1054.                     new Float: x, Float: y, Float: z, Float: a;
  1055.                     GetPlayerPos(playerid, x, y, z);
  1056.                     GetPlayerFacingAngle(playerid, a);
  1057.  
  1058.                     x += (2.0 * floatsin(-a, degrees));
  1059.                     y += (2.0 * floatcos(-a, degrees));
  1060.  
  1061.                     if(Halloween_CreateGiftBox(x, y, z, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)) != -1)
  1062.                     {
  1063.                         Halloween_ChangeCandy(playerid, -GIFT_PRICE_CANDY);
  1064.                         Halloween_ShowGiftMenu(playerid);
  1065.                     }
  1066.                 }
  1067.             }
  1068.            
  1069.             return 1;
  1070.         }
  1071.        
  1072.         case DIALOG_BUY_WEAPON:
  1073.         {
  1074.             if(!response) return Halloween_ShowShopMenu(playerid);
  1075.             new price = ShopWeapons[listitem][WeaponPrice];
  1076.             if(price > CandyCount[playerid]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough candies."), Halloween_ShowWeaponsMenu(playerid);
  1077.             GivePlayerWeapon(playerid, ShopWeapons[listitem][WeaponID], ShopWeapons[listitem][WeaponAmmo]);
  1078.             Halloween_ChangeCandy(playerid, -price);
  1079.            
  1080.             new string[128], w_name[32];
  1081.             GetWeaponName(ShopWeapons[listitem][WeaponID], w_name, sizeof(w_name));
  1082.             format(string, sizeof(string), "CANDY SHOP: {FFFFFF}Bought {FFA944}%s {FFFFFF}using {9158B6}C%d.", w_name, price);
  1083.             SendClientMessage(playerid, 0x9158B6FF, string);
  1084.             Halloween_ShowWeaponsMenu(playerid);
  1085.             return 1;
  1086.         }
  1087.     }
  1088.    
  1089.     return 0;
  1090. }
  1091.  
  1092. public OnPlayerPickUpDynamicPickup(playerid, STREAMER_TAG_PICKUP pickupid)
  1093. {
  1094.     switch(Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_MODEL_ID))
  1095.     {
  1096.         // gift boxes
  1097.         case 19054..19058:
  1098.         {
  1099.             new id = Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID), string[144];
  1100.             format(string, sizeof(string), "HALLOWEEN: {FFFFFF}%s(%d) has found a gift box at {FFA944}%s, %s!", ReturnPlayerName(playerid), playerid, GetZoneName(GiftBoxData[id][GiftBoxX], GiftBoxData[id][GiftBoxY], GiftBoxData[id][GiftBoxZ]), GetCityName(GiftBoxData[id][GiftBoxX], GiftBoxData[id][GiftBoxY], GiftBoxData[id][GiftBoxZ]));
  1101.             SendClientMessageToAll(0x9158B6FF, string);
  1102.            
  1103.             switch(random(11))
  1104.             {
  1105.                 case 0..2:
  1106.                 {
  1107.                     SetPlayerHealth(playerid, 100.0);
  1108.                     SendClientMessage(playerid, 0x9158B6FF, "HALLOWEEN: {FFFFFF}Found a {FFA944}medkit.");
  1109.                 }
  1110.                
  1111.                 case 4, 5:
  1112.                 {
  1113.                     SetPlayerArmour(playerid, 100.0);
  1114.                     SendClientMessage(playerid, 0x9158B6FF, "HALLOWEEN: {FFFFFF}Found a {FFA944}body armor.");
  1115.                 }
  1116.                
  1117.                 case 6..8:
  1118.                 {
  1119.                     new money = RandomEx(GIFT_MIN_MONEY, GIFT_MAX_MONEY);
  1120.                     GivePlayerMoney(playerid, money);
  1121.                    
  1122.                     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Found {2ECC71}$%d.", money);
  1123.                     SendClientMessage(playerid, 0x9158B6FF, string);
  1124.                 }
  1125.                
  1126.                 default:
  1127.                 {
  1128.                     new candy = RandomEx(GIFT_MIN_CANDY, GIFT_MAX_CANDY);
  1129.                     Halloween_ChangeCandy(playerid, candy);
  1130.                    
  1131.                     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Found {FFA944}%d candy.", candy);
  1132.                     SendClientMessage(playerid, 0x9158B6FF, string);
  1133.                 }
  1134.             }
  1135.            
  1136.             GiftBox_Destroy(id);
  1137.         }
  1138.        
  1139.         #if defined PUMPKIN_DROPS
  1140.         // pumpkin
  1141.         case 19320:
  1142.         {
  1143.             new id = Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID);
  1144.             Halloween_ChangeCandy(playerid, PUMPKIN_CANDY);
  1145.             Pumpkin_Destroy(id);
  1146.         }
  1147.         #endif
  1148.     }
  1149.    
  1150.     return 1;
  1151. }
  1152.  
  1153. CMD:giftboxes(playerid, params[])
  1154. {
  1155.     new string[2048], found; // overkill af but just in case
  1156.     format(string, sizeof(string), "Area\tCity\tTime Left\n");
  1157.    
  1158.     for(new i; i < MAX_GIFT_BOXES; i++)
  1159.     {
  1160.         if(!GiftBoxData[i][GiftBoxExists]) continue;
  1161.         format(string, sizeof(string), "%s%s\t%s\t%s\n", string, GetZoneName(GiftBoxData[i][GiftBoxX], GiftBoxData[i][GiftBoxY], GiftBoxData[i][GiftBoxZ]), GetCityName(GiftBoxData[i][GiftBoxX], GiftBoxData[i][GiftBoxY], GiftBoxData[i][GiftBoxZ]), formatTime(GiftBoxData[i][GiftBoxTimeLeft]));
  1162.         found++;
  1163.     }
  1164.    
  1165.     if(found > 0) {
  1166.         new title[24];
  1167.         format(title, sizeof(title), "Gift Boxes (%d Found)", found);
  1168.         ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Close", "");
  1169.     }else{
  1170.         ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Gift Boxes", "No gift boxes found.", "Close", "");
  1171.     }
  1172.    
  1173.     return 1;
  1174. }
  1175.  
  1176. CMD:topcollectors(playerid, params[])
  1177. {
  1178.     new name[MAX_PLAYER_NAME], candies;
  1179.     stmt_bind_result_field(TopCandies, 0, DB::TYPE_STRING, name, MAX_PLAYER_NAME);
  1180.     stmt_bind_result_field(TopCandies, 1, DB::TYPE_INTEGER, candies);
  1181.  
  1182.     if(stmt_execute(TopCandies))
  1183.     {
  1184.         new idx, string[700], colors[] = {0xF1C40FFF, 0xA8A8A8FF, 0x965A38FF};
  1185.         format(string, sizeof(string), "#\tName\tCandies\n");
  1186.        
  1187.         while(stmt_fetch_row(TopCandies))
  1188.         {
  1189.             if(idx < 3) {
  1190.                 format(string, sizeof(string), "%s{%06x}%d\t{%06x}%s\t{%06x}%d\n", string, colors[idx] >>> 8, idx + 1, colors[idx] >>> 8, name, colors[idx] >>> 8, candies);
  1191.             }else{
  1192.                 format(string, sizeof(string), "%s%d\t%s\t%d\n", string, idx + 1, name, candies);
  1193.             }
  1194.            
  1195.             idx++;
  1196.         }
  1197.        
  1198.         ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_TABLIST_HEADERS, "Top Candy Collectors", string, "Close", "");
  1199.     }
  1200.    
  1201.     return 1;
  1202. }
  1203.  
  1204. CMD:candyshop(playerid, params[])
  1205. {
  1206.     // https://youtu.be/SRcnnId15BA, someone had to do it
  1207.     Halloween_ShowShopMenu(playerid);
  1208.     return 1;
  1209. }
  1210.  
  1211. /* Admin Commands */
  1212. CMD:givecandy(playerid, params[])
  1213. {
  1214.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  1215.     new id, amount;
  1216.     if(sscanf(params, "ui", id, amount)) return SendClientMessage(playerid, 0xF39C12FF, "SYNTAX: {FFFFFF}/giveplayercandy [player] [amount]");
  1217.     if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Player is offline.");
  1218.     Halloween_ChangeCandy(id, amount);
  1219.    
  1220.     new string[128];
  1221.     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}You gave %s(%d) {9158B6}C%d.", ReturnPlayerName(id), id, amount);
  1222.     SendClientMessage(playerid, 0x9158B6FF, string);
  1223.    
  1224.     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Admin %s(%d) gave you {9158B6}C%d.", ReturnPlayerName(playerid), playerid, amount);
  1225.     SendClientMessage(id, 0x9158B6FF, string);
  1226.     return 1;
  1227. }
  1228.  
  1229. CMD:giveallcandy(playerid, params[])
  1230. {
  1231.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  1232.     new amount;
  1233.     if(sscanf(params, "i", amount)) return SendClientMessage(playerid, 0xF39C12FF, "SYNTAX: {FFFFFF}/giveallcandy [amount]");
  1234.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++) if(IsPlayerConnected(i)) Halloween_ChangeCandy(i, amount);
  1235.  
  1236.     new string[128];
  1237.     format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Admin %s(%d) gave everyone {9158B6}C%d.", ReturnPlayerName(playerid), playerid, amount);
  1238.     SendClientMessageToAll(0x9158B6FF, string);
  1239.     return 1;
  1240. }
  1241.  
  1242. CMD:dropgift(playerid, params[])
  1243. {
  1244.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  1245.     new Float: x, Float: y, Float: z, Float: a;
  1246.     GetPlayerPos(playerid, x, y, z);
  1247.     GetPlayerFacingAngle(playerid, a);
  1248.  
  1249.     x += (2.0 * floatsin(-a, degrees));
  1250.     y += (2.0 * floatcos(-a, degrees));
  1251.  
  1252.     if(Halloween_CreateGiftBox(x, y, z, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)) != -1)
  1253.     {
  1254.         new string[128];
  1255.         format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Admin %s(%d) spawned a gift box on their location.", ReturnPlayerName(playerid), playerid);
  1256.         SendClientMessageToAll(0x9158B6FF, string);
  1257.     }
  1258.    
  1259.     return 1;
  1260. }
  1261.  
  1262. CMD:dropgiftaround(playerid, params[])
  1263. {
  1264.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
  1265.     new amount;
  1266.     if(sscanf(params, "i", amount)) return SendClientMessage(playerid, 0xF39C12FF, "SYNTAX: {FFFFFF}/dropgiftaround [amount]");
  1267.     if(!(1 <= amount <= 10)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't drop less than 1 and more than 10 gift boxes at once.");
  1268.     new id, total;
  1269.     for(new i; i < amount; i++)
  1270.     {
  1271.         id = random(sizeof(GiftBoxCoords));
  1272.         if(Halloween_CreateGiftBox(GiftBoxCoords[id][GiftBoxSpawnX], GiftBoxCoords[id][GiftBoxSpawnY], GiftBoxCoords[id][GiftBoxSpawnZ], -1, -1) != -1) total++;
  1273.     }
  1274.    
  1275.     if(total > 0)
  1276.     {
  1277.         new string[128];
  1278.         format(string, sizeof(string), "HALLOWEEN: {FFFFFF}Admin %s(%d) spawned %d gift boxes.", ReturnPlayerName(playerid), playerid, total);
  1279.         SendClientMessageToAll(0x9158B6FF, string);
  1280.     }
  1281.    
  1282.     return 1;
  1283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement