Advertisement
Lirbo

Lirbo's Object Parser

Dec 7th, 2022 (edited)
723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.50 KB | None | 0 0
  1. // Yes I know I could have done this much shorter with sscanf, but I guess my brain just didn't think of it at the time. Might re-do it later if I feel like it.
  2.  
  3. stock LoadDynamicObjectsFile(path[], virtualworld = -2, interior = -2, playerid = -2, Float:streamdistance = -2.0, Float:drawdistance = -2.0, areaid = -2, priority = -2)
  4. {
  5.     new File:handle = fopen(path, io_read), buffer[186], string[144];
  6.     if(!handle)
  7.     {
  8.         format(string, sizeof string, "%s couldn't be opened!", path);
  9.         return printf(string);
  10.     }
  11.     new tmpobjid, tmpstr[12], objects, materials, texts, removes;
  12.     new o_virtualworld = virtualworld, o_interior = interior, o_playerid = playerid, Float:o_streamdistance = streamdistance, Float:o_drawdistance = drawdistance, o_areaid = areaid, o_priority = priority;
  13.     while(fread(handle, buffer))
  14.     {
  15.         if(strfind(buffer, "CreateDynamicObject(") != -1)
  16.         {
  17.             objects++;
  18.             new objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz;
  19.             strdel(buffer, 0, strfind(buffer, "(") + 1);
  20.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  21.             sscanf(tmpstr, "d", objectid);
  22.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  23.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  24.             sscanf(tmpstr, "f", x);
  25.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  26.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  27.             sscanf(tmpstr, "f", y);
  28.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  29.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  30.             sscanf(tmpstr, "f", z);
  31.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  32.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  33.             sscanf(tmpstr, "f", rx);
  34.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  35.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  36.             sscanf(tmpstr, "f", ry);
  37.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  38.             new end = strfind(buffer, ", "), bool:stop;
  39.             if(end == -1)
  40.             {
  41.                 strfind(buffer, ")");
  42.                 stop = true;
  43.             }
  44.             strmid(tmpstr, buffer, 0, end);
  45.             sscanf(tmpstr, "f", rz);
  46.             if(!stop)
  47.             {
  48.                 strdel(buffer, 0, end + 2);
  49.                 end = strfind(buffer, ", ");
  50.                 if(end == -1)
  51.                 {
  52.                     strfind(buffer, ")");
  53.                     stop = true;
  54.                 }
  55.                 strmid(tmpstr, buffer, 0, end);
  56.                 if(o_virtualworld == -2)
  57.                     sscanf(tmpstr, "d", virtualworld);
  58.                 if(!stop)
  59.                 {
  60.                     strdel(buffer, 0, end + 2);
  61.                     end = strfind(buffer, ", ");
  62.                     if(end == -1)
  63.                     {
  64.                         strfind(buffer, ")");
  65.                         stop = true;
  66.                     }
  67.                     strmid(tmpstr, buffer, 0, end);
  68.                     if(o_interior == -2)
  69.                         sscanf(tmpstr, "d", interior);
  70.                     if(!stop)
  71.                     {
  72.                         strdel(buffer, 0, end + 2);
  73.                         end = strfind(buffer, ", ");
  74.                         if(end == -1)
  75.                         {
  76.                             strfind(buffer, ")");
  77.                             stop = true;
  78.                         }
  79.                         strmid(tmpstr, buffer, 0, end);
  80.                         if(o_playerid == -2)
  81.                             sscanf(tmpstr, "d", playerid);
  82.                         if(!stop)
  83.                         {
  84.                             strdel(buffer, 0, end + 2);
  85.                             end = strfind(buffer, ", ");
  86.                             if(end == -1)
  87.                             {
  88.                                 strfind(buffer, ")");
  89.                                 stop = true;
  90.                             }
  91.                             strmid(tmpstr, buffer, 0, end);
  92.                             if(o_streamdistance == -2.0)
  93.                                 sscanf(tmpstr, "f", streamdistance);
  94.                             if(!stop)
  95.                             {
  96.                                 strdel(buffer, 0, end + 2);
  97.                                 end = strfind(buffer, ", ");
  98.                                 if(end == -1)
  99.                                 {
  100.                                     strfind(buffer, ")");
  101.                                     stop = true;
  102.                                 }
  103.                                 strmid(tmpstr, buffer, 0, end);
  104.                                 if(o_drawdistance == -2.0)
  105.                                     sscanf(tmpstr, "f", drawdistance);
  106.                                 if(!stop)
  107.                                 {
  108.                                     strdel(buffer, 0, end + 2);
  109.                                     end = strfind(buffer, ", ");
  110.                                     if(end == -1)
  111.                                     {
  112.                                         strfind(buffer, ")");
  113.                                         stop = true;
  114.                                     }
  115.                                     strmid(tmpstr, buffer, 0, end);
  116.                                     if(o_areaid == -2)
  117.                                     sscanf(tmpstr, "d", areaid);
  118.                                     if(!stop)
  119.                                     {
  120.                                         strdel(buffer, 0, end + 2);
  121.                                         strmid(tmpstr, buffer, 0, strfind(buffer, ")"));
  122.                                         if(o_priority == -2)
  123.                                             sscanf(tmpstr, "d", priority);
  124.                                     }
  125.                                 }
  126.                             }
  127.                         }
  128.                     }
  129.                 }
  130.             }
  131.             if(virtualworld == -2) virtualworld = -1;
  132.             if(interior == -2) interior = -1;
  133.             if(playerid == -2) playerid = -1;
  134.             if(streamdistance == -2.0) streamdistance = STREAMER_OBJECT_SD;
  135.             if(drawdistance == -2.0) drawdistance = STREAMER_OBJECT_DD;
  136.             if(areaid == -2) areaid = -1;
  137.             if(priority == -2) priority = 0;
  138.             tmpobjid = CreateDynamicObject(objectid, x, y, z, rx, ry, rz, virtualworld, interior, playerid, streamdistance, drawdistance, areaid, priority);
  139.             virtualworld = o_virtualworld;
  140.             interior = o_interior;
  141.             playerid = o_playerid;
  142.             streamdistance = o_streamdistance;
  143.             drawdistance = o_drawdistance;
  144.             areaid = o_areaid;
  145.             priority = o_priority;
  146.         }
  147.         else if(strfind(buffer, "SetDynamicObjectMaterial(") != -1)
  148.         {
  149.             materials++;
  150.             new idx, model, txd[48], texture[48], color;
  151.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  152.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  153.             sscanf(tmpstr, "d", idx);
  154.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  155.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  156.             sscanf(tmpstr, "d", model);
  157.             strdel(buffer, 0, strfind(buffer, ", \"") + 3);
  158.             strmid(txd, buffer, 0, strfind(buffer, "\", "));
  159.             strdel(buffer, 0, strfind(buffer, ", \"") + 3);
  160.             strmid(texture, buffer, 0, strfind(buffer, "\", "));
  161.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  162.             strmid(tmpstr, buffer, 0, strfind(buffer, ")"));
  163.             sscanf(tmpstr, "x", color);
  164.             SetDynamicObjectMaterial(tmpobjid, idx, model, txd, texture, color);
  165.         }
  166.         else if(strfind(buffer, "SetDynamicObjectMaterialText(") != -1)
  167.         {
  168.             texts++;
  169.             new idx, text[128], materialsize, fontface[32], fontsize, bold, fontcolor, backcolor, textalignment;
  170.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  171.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  172.             sscanf(tmpstr, "d", idx);
  173.             strdel(buffer, 0, strfind(buffer, ", \"") + 3);
  174.             strmid(text, buffer, 0, strfind(buffer, "\", "));
  175.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  176.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  177.             sscanf(tmpstr, "d", materialsize);
  178.             strdel(buffer, 0, strfind(buffer, ", \"") + 3);
  179.             strmid(fontface, buffer, 0, strfind(buffer, "\", "));
  180.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  181.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  182.             sscanf(tmpstr, "d", fontsize);
  183.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  184.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  185.             sscanf(tmpstr, "d", bold);
  186.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  187.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  188.             sscanf(tmpstr, "x", fontcolor);
  189.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  190.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  191.             sscanf(tmpstr, "x", backcolor);
  192.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  193.             strmid(tmpstr, buffer, 0, strfind(buffer, ")"));
  194.             sscanf(tmpstr, "d", textalignment);
  195.             SetDynamicObjectMaterialText(tmpobjid, idx, text, materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
  196.         }
  197.         else if(strfind(buffer, "RemoveBuildingForPlayer(") != -1)
  198.             removes++;
  199.  
  200.     }
  201.     format(string, sizeof string, "%s has been successfully loaded! (Objects: %s, Textures: %s, Texts: %s, Removes: %s)", path, comma(objects), comma(materials), comma(texts), comma(removes));
  202.     printf(string);
  203.     fclose(handle);
  204.     return 1; // Made by Lirbo :]
  205. }
  206.  
  207. stock LoadRemoveBuildingsForPlayer(playerid, path[])
  208. {
  209.     new File:handle = fopen(path, io_read), buffer[186], string[128];
  210.     if(!handle)
  211.     {
  212.         format(string, sizeof string, "%s couldn't be opened!", path);
  213.         return printf(string);
  214.     }
  215.     new tmpstr[12];
  216.     while(fread(handle, buffer))
  217.     {
  218.         if(strfind(buffer, "RemoveBuildingForPlayer(") != -1)
  219.         {
  220.             new objectid, Float:x, Float:y, Float:z, Float:radius;
  221.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  222.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  223.             sscanf(tmpstr, "d", objectid);
  224.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  225.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  226.             sscanf(tmpstr, "f", x);
  227.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  228.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  229.             sscanf(tmpstr, "f", y);
  230.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  231.             strmid(tmpstr, buffer, 0, strfind(buffer, ", "));
  232.             sscanf(tmpstr, "f", z);
  233.             strdel(buffer, 0, strfind(buffer, ", ") + 2);
  234.             strmid(tmpstr, buffer, 0, strfind(buffer, ")"));
  235.             sscanf(tmpstr, "f", radius);
  236.             RemoveBuildingForPlayer(playerid, objectid, x, y, z, radius);
  237.         }
  238.         else
  239.             break;
  240.     }
  241.     fclose(handle);
  242.     return 1; // Made by Lirbo :]
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement