AXV09

Dynamic create pickups (org. B.A.Baracus)

Feb 9th, 2013
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.71 KB | None | 0 0
  1. /*
  2.           Dynamic pickups
  3.        
  4.     author              B.A.Baracus
  5.     date updated        2013-02-09
  6.     edited version      Hesse aka AXV
  7.     version             1.0.0b
  8. */
  9.  
  10. // Librares
  11. #include a_samp
  12. #include mysql
  13. #include zcmd
  14. #include sscanf
  15.  
  16. // Settings MySQL
  17. #define SQL_HOST        "hostname"      // HOST
  18. #define SQL_USER        "username"      // USER
  19. #define SQL_PASSWORD    "password"      // PASS
  20. #define SQL_DB          "datebase"      // DB
  21.  
  22. // Settings script
  23. #define DEBUG false         // if errors please change to true, default value is false - no debug
  24. #define MAX_DYN_PIC (150)   // Max. pickups
  25. #define TYPE_PIC    1318    // Type pickup
  26.  
  27. // Variables
  28. enum e_Pickups {
  29.     pid,
  30.     pick,
  31.     Float:pvector[3],
  32.     Float:tpvector[4],
  33.     pdesc[32]
  34. };
  35.  
  36. enum e_PickCreating {
  37.     Float:cvector[3],
  38.     Float:ctpvector[4],
  39. #if DEBUG == true
  40.     cdesc[80],
  41. #else
  42.     cdesc[32],
  43. #endif
  44.     bool:creating
  45. };
  46.  
  47. new pickup[MAX_DYN_PIC][e_Pickups],
  48.     pCreate[e_PickCreating],
  49.     MySQL:handle
  50. ;
  51.  
  52. // Callbacks
  53. public OnFilterScriptInit () {
  54.     handle = mysql_init ();
  55.     new connected = mysql_connect (SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, handle, 1);
  56.     if (!connected) {
  57.         print ("Nie można nawiazac polaczenia z serwerem MySQL.");
  58.         return 0;
  59.     }
  60.     mysql_query ("create table if not exists tp_pickups ( \
  61.         id int(11) not null auto_increment, \
  62.         fX varchar(12) not null default '0.0', \
  63.         fY varchar(12) not null default '0.0', \
  64.         fZ varchar(8) not null default '0.0', \
  65.         ftpX varchar(12) not null default '0.0', \
  66.         ftpY varchar(12) not null default '0.0', \
  67.         ftpZ varchar(8) not null default '0.0', \
  68.         ftpA varchar(6) not null default '0.0', \
  69.         pdesc varchar(32) not null default '0.0', \
  70.         primary key (`id`) \
  71.         ) engine = myisam default charset = latin1 auto_increment = 1;");
  72. #if DEBUG == true
  73.     mysql_query ("alter table tp_pickups modify pdesc varchar(80) not null;");
  74. #endif
  75.     print ("Nazwiazano polaczenie z serwerem MySQL.");
  76.     loadPickups ();
  77.     return 1;
  78. }
  79.  
  80. public OnFilterScriptExit() return mysql_close (handle);
  81.  
  82. public OnPlayerPickUpPickup (playerid, pickupid) {
  83.     for (new i = 0; i < MAX_DYN_PIC; ++i) {
  84.         if (pickupid == pickup[i][pick]) {
  85.             SetPlayerPos (playerid, pickup[i][tpvector][0], pickup[i][tpvector][1], pickup[i][tpvector][2]);
  86.             SetPlayerFacingAngle (playerid, pickup[i][tpvector][3]);
  87.             break;
  88.         }
  89.     }
  90. }
  91.  
  92. // Commands
  93. CMD:dodajtp (playerid, params[]) {
  94.     if (!IsPlayerAdmin (playerid)) return SendClientMessage (playerid, 0xFF0000FF, "Brak uprawnień");
  95.     if (countPickups () >= (MAX_DYN_PIC - 1)) return SendClientMessage (playerid, 0xFF0000FF, "Limit pickupów został już wyczerpany.");
  96.     if (pCreate[creating]) return SendClientMessage (playerid, 0xFF0000FF, "Obecnie już ktoś jest w procesie dodawania pickupa");
  97.     if (isnull (params)) return SendClientMessage (playerid, 0xFF0000FF, "Nie podano opisu!");
  98.     if (!(3 <= strlen (params) <= 32)) return SendClientMessage (playerid, 0xFF0000FF, "Opis jest zbyt długi lub krótki.");
  99.     mysql_real_escape_string (params, pCreate[cdesc]);
  100.     GetPlayerPos (playerid, pCreate[cvector][0], pCreate[cvector][1], pCreate[cvector][2]);
  101.     pCreate[creating] = true;
  102.     return !SendClientMessage (playerid, 0xFF8000FF, "Okej, a teraz idź do miejsca gdzie ma teleportować gracza i wpisz: /zatwierdz.");
  103. }
  104.  
  105. CMD:zatwierdz(playerid,params[]) {
  106.     if (!IsPlayerAdmin (playerid)) return SendClientMessage (playerid, 0xFF0000FF, "Brak uprawnień");
  107.     if (!pCreate[creating]) return SendClientMessage (playerid, 0xFF0000FF, "Musisz wrocić do poprzedniego kroku: /dodajtp.");
  108.     new buf[200];
  109.     GetPlayerPos (playerid, pCreate[ctpvector][0], pCreate[ctpvector][1], pCreate[ctpvector][2]), GetPlayerFacingAngle (playerid, pCreate[ctpvector][3]);
  110.     new id = searchFreeSlot ();
  111.     pickup[id][pvector][0] = pCreate[cvector][0];       // x
  112.     pickup[id][pvector][1] = pCreate[cvector][1];       // y
  113.     pickup[id][pvector][2] = pCreate[cvector][2];       // z
  114.     pickup[id][tpvector][0] = pCreate[ctpvector][0];    // tp x
  115.     pickup[id][tpvector][1] = pCreate[ctpvector][1];    // tp y
  116.     pickup[id][tpvector][2] = pCreate[ctpvector][2];    // tp z
  117.     pickup[id][tpvector][3] = pCreate[ctpvector][3];    // tp rot
  118.     format(buf, sizeof (buf), "insert into tp_pickups set fX = '%4.3f', fY = '%4.3f', fZ = '%3.2f', ftpX = '%4.3f', ftpY = '%4.3f', ftpZ = '%3.2f', ftpA = '%2.2f', pdesc = '%s';",
  119.         pickup[id][pvector][0],
  120.         pickup[id][pvector][1],
  121.         pickup[id][pvector][2],
  122.         pickup[id][tpvector][0],
  123.         pickup[id][tpvector][1],
  124.         pickup[id][tpvector][2],
  125.         pickup[id][tpvector][3],
  126.         pCreate[cdesc]);
  127.     mysql_query (buf);
  128. #if DEBUG == true
  129.     format (pCreate[cdesc], sizeof (pCreate[cdesc]), "%s (id: %d)\ntpX: %4.1f, tpY: %4.1f, tpZ: %4.1f", pCreate[cdesc], mysql_insert_id (), pickup[id][tpvector][0], pickup[id][tpvector][1], pickup[id][tpvector][2]);
  130.     Create3DTextLabel (pCreate[cdesc], 0x008080FF, pickup[id][pvector][0], pickup[id][pvector][1], pickup[id][pvector][2] + 0.75, 100.0, 0, 0);
  131. #else
  132.     Create3DTextLabel (pCreate[cdesc], 0x008080FF, pickup[id][pvector][0], pickup[id][pvector][1], pickup[id][pvector][2] + 0.75, 100.0, 0, 0);
  133. #endif
  134.     pickup[id][pick] = CreatePickup (TYPE_PIC, 1, pickup[id][pvector][0], pickup[id][pvector][1], pickup[id][pvector][2]);
  135.     format(buf, sizeof (buf), "Dodano pickup id: %d, opis: %d", mysql_insert_id (), pCreate[cdesc]);
  136.     pCreate[creating] = false;
  137.     return !SendClientMessage (playerid, 0x008000FF, buf);
  138. }
  139.  
  140. searchFreeSlot () {
  141.     for (new i = 0; i < MAX_DYN_PIC; ++i) {
  142.         if (pickup[i][pid] < 0) return i;
  143.     }
  144.     return -1;
  145. }
  146.  
  147. loadPickups () {
  148.     new buf[200], desc[80], i = 0;
  149.     mysql_query ("select fX, fY, fZ, ftpX, ftpY, ftpZ, ftpA, pdesc from tp_pickups limit #MAX_DYN_PIC");
  150.     mysql_store_result ();
  151.     while (mysql_fetch_row (buf, "|")) {
  152. #if DEBUG == true
  153.         if (sscanf (buf, "p<|>fffffffs[80]",
  154. #else
  155.         if (sscanf (buf, "p<|>fffffffs[32]",
  156. #endif
  157.             pickup[i][pvector][0],
  158.             pickup[i][pvector][1],
  159.             pickup[i][pvector][2],
  160.             pickup[i][tpvector][0],
  161.             pickup[i][tpvector][1],
  162.             pickup[i][tpvector][2],
  163.             pickup[i][tpvector][3],
  164.             desc)) continue;
  165.         pickup[i][pick] = CreatePickup (TYPE_PIC, 1, pickup[i][pvector][0], pickup[i][pvector][1], pickup[i][pvector][2]);
  166. #if DEBUG == true
  167.         format (desc, sizeof (desc), "%s (id: %d)\ntpX: %4.1f, tpY: %4.1f, tpZ: %4.1f", desc, i, pickup[i][tpvector][0], pickup[i][tpvector][1], pickup[i][tpvector][2]);
  168.         Create3DTextLabel (desc, 0x008080FF, pickup[i][pvector][0], pickup[i][pvector][1], pickup[i][pvector][2] + 0.75, 100.0, 0, 0);
  169. #else
  170.         Create3DTextLabel (desc, 0x008080FF, pickup[i][pvector][0], pickup[i][pvector][1], pickup[i][pvector][2] + 0.75, 100.0, 0, 0);
  171. #endif
  172.         pickup[i][pid] = i;
  173.         i++;
  174.     }
  175. }
  176.  
  177. countPickups () {
  178.     mysql_query ("select count(*) from tp_pickups;");
  179.     mysql_store_result ();
  180.     new result = mysql_fetch_int ();
  181.     mysql_free_result ();
  182.     return result;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment