Guest User

Opas Objectstreamer 5.1.1

a guest
Jan 3rd, 2012
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 56.12 KB | None | 0 0
  1. /*---------------------------------------
  2.  
  3. /--------\  /--------\     /\
  4. |        |  |        |    /  \
  5. |        |  |        |   /    \    |-----
  6. |        |  |--------/  /      \   |
  7. |        |  |          |--------|  \----\
  8. |        |  |          |        |       |
  9. \--------/  |          |        |  -----/
  10.  
  11.           OBJECTSTREAMER & MAPEDITOR
  12.                 VERSION 5.1.1
  13.               STREAM ENGINE FS
  14.  
  15. ---------------------------------------*/
  16. //_____EINSTELLUNGEN______
  17. #define MAX_STREAMOBJ 8000              //Objektlimit (Total)
  18. #define MAX_SLOTS     500               //Deine Slots
  19.  
  20. //________OPTIONEN________
  21. #define LOG_ACTIVE    1                 //opa_objects.log
  22. #define PANEL         0                 //Admin-/Mapperpanel in der unteren rechten Ecke anzeigen?
  23. #define ANTIFAIL      1                 //Anti-Cfg-Fail aktivieren?
  24. #define CALLBACK      0                 //OnObjectStreamIn aktivieren?
  25. #define MODE_ADMIN    1                 //OnStreamerAdminRequest aktivieren?
  26. #define VIRTUALWORLD  1                 //SetObjectVirtualWorld aktivieren?
  27. #define INTERIOR      1                 //LinkObjectToInterior aktivieren?
  28. #define CLIENTSTREAM  0                 //Den SA:MP 0.3b/c/d Client-Streamer aktivieren?
  29. #define DISPLAY       0                 //Mapladen: 0=Nichts, 1=GameText, 2=TextDraw
  30.  
  31. //________INTERFACE_______
  32. #define CHAT_COLOR    0xD3D3FFFF        //Farbcode
  33. #define LABEL_COLOR   0xBEBEBEFF        //Farbcode
  34. #define LABEL_COLOR2  0x00FF00FF        //Farbcode (Beim ausgewählten Objekt)
  35. #define LABEL_RANGE   60.0              //Range
  36.  
  37. //__PROFI-EINSTELLUNGEN___
  38. #define DIALOG_ID     8072              //Sollte nicht in anderen Scripts verwendet werden
  39. #define DIALOG_ID2    8073              //Sollte nicht in anderen Scripts verwendet werden
  40. #define DIALOG_ID4    8074              //Sollte nicht in anderen Scripts verwendet werden
  41. #define DIALOG_ID5    8075              //Sollte nicht in anderen Scripts verwendet werden
  42. #define DIALOG_ID6    8076              //Sollte nicht in anderen Scripts verwendet werden
  43. #define DIALOG_ID7    8077              //Sollte nicht in anderen Scripts verwendet werden
  44. #define DIALOG_ID9    8078              //Sollte nicht in anderen Scripts verwendet werden
  45. #define DIALOG_ID10   8079              //Sollte nicht in anderen Scripts verwendet werden
  46. #define DIALOG_ID11   8080              //Sollte nicht in anderen Scripts verwendet werden
  47. #define DIALOG_ID12   8081              //Sollte nicht in anderen Scripts verwendet werden
  48. #define DIALOG_ID13   8082              //Sollte nicht in anderen Scripts verwendet werden
  49. #define DIALOG_ID14   8083              //Sollte nicht in anderen Scripts verwendet werden
  50. #define DIALOG_ID15   8084              //Sollte nicht in anderen Scripts verwendet werden
  51. #define DIALOG_ID16   8085              //Sollte nicht in anderen Scripts verwendet werden
  52. #define DIALOG_ID17   8086              //Sollte nicht in anderen Scripts verwendet werden
  53. #define DIALOG_ID18   8087              //Sollte nicht in anderen Scripts verwendet werden
  54. #define DIALOG_ID19   8088              //Sollte nicht in anderen Scripts verwendet werden
  55. #define DIALOG_ID20   8089              //Sollte nicht in anderen Scripts verwendet werden
  56. #define DIALOG_ID21   8090              //Sollte nicht in anderen Scripts verwendet werden
  57. #define DIALOG_ID23   8091              //Sollte nicht in anderen Scripts verwendet werden
  58. #define DIALOG_ID24   8092              //Sollte nicht in anderen Scripts verwendet werden
  59. #define CONFIG_FILE   "opa_objects/streamer.cfg" //Cfg-Speicherort
  60. #define LOG_FILE      "opa_objects/opa_objects.log" //Log-Speicherort
  61. #define SAVEOBJ_FILE  "opa_objects/savedobjects.txt" //"/saveobj"-Speicherort
  62. /*-------------------------------------*/
  63. #define VERSION "5.1.0"
  64. #include <a_samp>
  65. #include <ocmd>
  66. forward test();
  67. forward remoteObject(xx1,Float:xx2,Float:xx3,Float:xx4,Float:xx5,Float:xx6,Float:xx7);
  68. #if VIRTUALWORLD==1
  69. forward remoteVirtual(xx1,xx2);
  70. #endif
  71. #if INTERIOR==1
  72. forward remoteInt(xx1,xx2);
  73. #endif
  74. #if MODE_ADMIN==1
  75. isPlayerModeAdmin(playerid)return(CallRemoteFunction("OnStreamerAdminRequest","d",playerid)||(IsPlayerAdmin(playerid)));
  76. #define IsPlayerAdmin isPlayerModeAdmin
  77. #endif
  78. #define TEXTDRAW DISPLAY
  79. forward remoteMove(xx1,Float:xx2,Float:xx3,Float:xx4,Float:xx5,Float:xx6,Float:xx7,Float:xx8);
  80. forward remoteMoveRot(xx1,Float:xx2,Float:xx3,Float:xx4,xx5);
  81. forward remoteSetPos(xx1,Float:xx2,Float:xx3,Float:xx4);
  82. forward remoteSetRot(xx1,Float:xx2,Float:xx3,Float:xx4);
  83. forward remoteDestroy(xx1);
  84. forward remoteStop(xx1);
  85. forward remoteConnectGM();
  86. forward remoteConnectFS();
  87. forward remoteMakeWait(playerid);
  88. forward remoteObjectEx();
  89. forward remoteDestroyEx();
  90. forward remoteIsStreamed(xx1,xx2);
  91. forward remoteIsMapper(xx1);
  92. public remoteIsMapper(xx1)
  93. {
  94.     if(IsPlayerAdmin(xx1))return 1;
  95.     if(GetPVarInt(xx1,"ooMap"))return 1;
  96.     return 0;
  97. }
  98. forward Q();
  99. #if PANEL==1
  100. forward panelUA();
  101. new Text:panel[MAX_SLOTS],bool:h_p[MAX_SLOTS];
  102. #endif
  103. new obj,DRAW_DISTANCE=200,MAXPLAYEROBJ=1000,kill,timeT=457,Qtimer;
  104. enum oen
  105. {
  106.     mod,
  107.     #if VIRTUALWORLD==1
  108.     vw,
  109.     #endif
  110.     #if INTERIOR==1
  111.     inter,
  112.     #endif
  113.     Float:x,
  114.     Float:y,
  115.     Float:z,
  116.     Float:rx,
  117.     Float:ry,
  118.     Float:rz,
  119.     resID
  120. };
  121. #define maxRes 50
  122. new resource,resName[maxRes][50];
  123. new p[MAX_SLOTS][MAX_STREAMOBJ],o[MAX_STREAMOBJ][oen],bool:invalid[MAX_STREAMOBJ];
  124. new bool:warn[MAX_SLOTS],bool:wait[MAX_SLOTS],admin=-1;
  125. new PlayerText3D:noob[MAX_STREAMOBJ],bool:noob4[MAX_STREAMOBJ],edit=-1,step=5,exobjects;
  126. new olist[10],anfang,bool:nichtnochmal,lastfile[50],pcount,dynamicPlayerBuffer;
  127. #define MAX_ENTRY 25
  128. new slist[MAX_ENTRY];
  129. #if TEXTDRAW==2
  130. forward hideText(playerid);
  131. new Text:Textdraw0,Text:Textdraw1;
  132. #endif
  133. #define DINI_MAX_STRING 255
  134.  
  135. public OnFilterScriptInit()
  136. {
  137.     format(resName[0],50,"Gamemode/Filterscript");
  138.     print("\n...Opas Objectstremer loading [Stream engine FS]...\n");
  139.     #if LOG_ACTIVE==1
  140.     if(!fexist(LOG_FILE))
  141.     {
  142.         new File:ffhandle=fopen(LOG_FILE,io_write);
  143.         fclose(ffhandle);
  144.     }
  145.     #endif
  146.     new xstr[100];
  147.     format(xstr,sizeof xstr,"Starte Streamer (Version %s)...",VERSION);
  148.     log("Starte streamer...");
  149.     #if VIRTUALWORLD==1
  150.     for(new n;n<MAX_STREAMOBJ;n++)o[n][vw]=-1;
  151.     #endif
  152.     #if INTERIOR==1
  153.     for(new n;n<MAX_STREAMOBJ;n++)o[n][inter]=-1;
  154.     #endif
  155.     if(fexist("opa_objects/opa_objects.cfg"))updateCFG();
  156.     if(fexist(CONFIG_FILE))
  157.     {
  158.         new xz=strval(dini_Get(CONFIG_FILE,"drawdistance"));
  159.         #if ANTIFAIL==1
  160.         if(xz<5||xz>400)
  161.         {
  162.             log("[Antifail] drawdistance sollte 5-400 sein");
  163.             xz=125;
  164.         }
  165.         #endif
  166.         DRAW_DISTANCE=xz;
  167.         xz=strval(dini_Get(CONFIG_FILE,"maxplayerobj"));
  168.         #if ANTIFAIL==1
  169.         if(xz<1||xz>1000)
  170.         {
  171.             log("[Antifail] maxplayerobj sollte 1-1000 sein");
  172.             xz=1000;
  173.         }
  174.         #endif
  175.         MAXPLAYEROBJ=xz;
  176.         xz=strval(dini_Get(CONFIG_FILE,"timer"));
  177.         #if ANTIFAIL==1
  178.         if(xz<100||xz>3500)
  179.         {
  180.             log("[Antifail] timer sollte 100-3500 sein");
  181.             xz=457;
  182.         }
  183.         #endif
  184.         timeT=xz;
  185.         xz=strval(dini_Get(CONFIG_FILE,"step"));
  186.         #if ANTIFAIL==1
  187.         if(xz<1||xz>100)
  188.         {
  189.             log("[Antifail] step sollte 1-100 sein");
  190.             xz=5;
  191.         }
  192.         #endif
  193.         step=xz;
  194.         new cur[100],curI,str[500];
  195.         format(str,sizeof str,dini_Get(CONFIG_FILE,"maps"));
  196.         for(new i;i<500;i++)
  197.         {
  198.             if(!str[i]||str[i]==' '||str[i]=='\n')
  199.             {
  200.                 format(cur,sizeof cur,"%s.map",cur);
  201.                 if(i>1)loadMap(cur);
  202.                 curI=0;
  203.                 for(new ii;ii<sizeof cur;ii++)cur[ii]=0;
  204.                 if(!str[i]||str[i]=='\n')break;
  205.             }
  206.             else
  207.             {
  208.                 cur[curI]=str[i];
  209.                 curI++;
  210.             }
  211.         }
  212.     }
  213.     else
  214.     {
  215.         new File:hn=fopen(CONFIG_FILE,io_write);
  216.         fwrite(hn,"maps \r\ndrawdistance 200\r\nmaxplayerobj 1000\r\ntimer 457\r\nstep 5\r\n");
  217.         fclose(hn);
  218.     }
  219.     for(new i;i<MAX_SLOTS;i++)if(IsPlayerConnected(i))dynamicPlayerBuffer=i;
  220.     kill=SetTimer("test",timeT,1);
  221.     #if TEXTDRAW==2
  222.     Textdraw0 = TextDrawCreate(307.000000,181.000000,"~n~LADE...~n~BITTE WARTEN~n~_");
  223.     TextDrawUseBox(Textdraw0,1);
  224.     TextDrawBoxColor(Textdraw0,0x00000066);
  225.     TextDrawTextSize(Textdraw0,0.000000,131.000000);
  226.     TextDrawAlignment(Textdraw0,2);
  227.     TextDrawBackgroundColor(Textdraw0,0xff000033);
  228.     TextDrawFont(Textdraw0,1);
  229.     TextDrawLetterSize(Textdraw0,0.299999,1.100000);
  230.     TextDrawColor(Textdraw0,0xffffffff);
  231.     TextDrawSetOutline(Textdraw0,1);
  232.     TextDrawSetProportional(Textdraw0,1);
  233.     TextDrawSetShadow(Textdraw0,1);
  234.     Textdraw1 = TextDrawCreate(307.000000,181.000000,"~n~LADE MAP...~n~FERTIG~n~_");
  235.     TextDrawUseBox(Textdraw1,1);
  236.     TextDrawBoxColor(Textdraw1,0x00000066);
  237.     TextDrawTextSize(Textdraw1,0.000000,131.000000);
  238.     TextDrawAlignment(Textdraw1,2);
  239.     TextDrawBackgroundColor(Textdraw1,0x00ff0033);
  240.     TextDrawFont(Textdraw1,1);
  241.     TextDrawLetterSize(Textdraw1,0.299999,1.100000);
  242.     TextDrawColor(Textdraw1,0xffffffff);
  243.     TextDrawSetOutline(Textdraw1,1);
  244.     TextDrawSetProportional(Textdraw1,1);
  245.     TextDrawSetShadow(Textdraw1,1);
  246.     #endif
  247.     #if PANEL==1
  248.     SetTimer("panelUA",3000,1);
  249.     #endif
  250.     log("Successfully started!");
  251.     return 1;
  252. }
  253. updateCFG()
  254. {
  255.     if(fexist(CONFIG_FILE))return 0;
  256.     new File:ha=fopen("opa_objects/opa_objects.cfg",io_read),File:hn=fopen(CONFIG_FILE,io_write);
  257.     if(!ha||!hn)return log("FEHLER: Die alte opa_objects.cfg konnte nicht zur neuen streamer.cfg umgewandelt werden.");
  258.     new str[600];
  259.     fwrite(hn,"maps \r\n");
  260.     while(fread(ha,str))
  261.     {
  262.         for(new i;;i++)
  263.         {
  264.             if(str[i]=='=')str[i]=' ';
  265.             if(str[i]=='='||!str[i])break;
  266.         }
  267.         fwrite(hn,str);
  268.     }
  269.     fclose(ha);
  270.     fclose(hn);
  271.     fremove("opa_objects/opa_objects.cfg");
  272.     return log("Die alte opa_objects.cfg wurde zur neuen streamer.cfg umgewandelt.");
  273. }
  274. #if PANEL==1
  275. public panelUA()for(new i;i<dynamicPlayerBuffer;i++)if((IsPlayerAdmin(i)||GetPVarInt(i,"ooMap"))&&(GetPVarInt(i,"ooPanel")))panelU(i);
  276. panelU(i)
  277. {
  278.     if(h_p[i])return;
  279.     new str[150],ef=effort(),sef=seffort(),tef=teff();
  280.     if(admin==i)
  281.     {
  282.         format(str,sizeof str,"~p~/map - /object - /olist~n~~w~Space/Alt - Speed~n~~w~Shift - Z~n~~w~Strg - Camera~n~~w~Enter - Menu");
  283.     }
  284.     else if(IsPlayerAdmin(i))
  285.     {
  286.         format(str,sizeof str,"~b~~h~Admin~n~~b~~h~/streamer - /map~n~%sPlayers: %03d~n~%sServer: %03d~n~%sTimer: %d~n~",(ef<40?("~g~"):(ef<80?("~y~"):("~r~"))),ef,(sef<40?("~g~"):(sef<80?("~y~"):("~r~"))),sef,(tef<20000?("~g~"):(tef<40000?("~y~"):("~r~"))),tef);
  287.     }
  288.     else if(GetPVarInt(i,"ooMap"))
  289.     {
  290.         format(str,sizeof str,"~r~~h~Mapper~n~~r~~h~/map~n~~n~~n~~n~");
  291.     }
  292.     else return;
  293.     format(str,sizeof str,"OPAS OBJECTSTREAMER~n~%s",str);
  294.     TextDrawSetString(panel[i],str);
  295.     TextDrawShowForPlayer(i,panel[i]);
  296. }
  297. #endif
  298. public OnFilterScriptExit()
  299. {
  300.     fsexit();
  301.     return 1;
  302. }
  303. public OnGameModeExit()
  304. {
  305.     fsexit();
  306.     SendRconCommand("reloadfs opa_objects");
  307.     return 1;
  308. }
  309. stock fsexit()
  310. {
  311.     for(new i;i<MAX_SLOTS;i++)
  312.     {
  313.         if(IsPlayerConnected(i))
  314.         {
  315.             for(new n;n<obj;n++)
  316.             {
  317.                 if(p[i][n]!=0)DestroyPlayerObject(i,p[i][n]);
  318.             }
  319.         }
  320.     }
  321.     settings();
  322.     KillTimer(kill);
  323.     CallRemoteFunction("remoteExit","");
  324. }
  325. settings()
  326. {
  327.     if(!fexist(CONFIG_FILE))
  328.     {
  329.         new File:ffhandle=fopen(CONFIG_FILE,io_write);
  330.         fclose(ffhandle);
  331.     }
  332.     new stt[120];
  333.     format(stt,sizeof stt,"%d",DRAW_DISTANCE);
  334.     dini_Set(CONFIG_FILE,"drawdistance",stt);
  335.     format(stt,sizeof stt,"%d",((!exobjects)?(MAXPLAYEROBJ):((MAXPLAYEROBJ+exobjects>1000)?(1000):(MAXPLAYEROBJ+exobjects))));
  336.     dini_Set(CONFIG_FILE,"maxplayerobj",stt);
  337.     format(stt,sizeof stt,"%d",timeT);
  338.     dini_Set(CONFIG_FILE,"timer",stt);
  339.     format(stt,sizeof stt,"%d",step);
  340.     dini_Set(CONFIG_FILE,"step",stt);
  341. }
  342. public remoteIsStreamed(xx1,xx2)
  343. {
  344.     if(!p[xx2][xx1])return 0;
  345.     return 1;
  346. }
  347. public OnPlayerConnect(playerid)
  348. {
  349.     if(playerid>dynamicPlayerBuffer)dynamicPlayerBuffer=playerid;
  350.     #if PANEL==1
  351.     panel[playerid] = TextDrawCreate(554.000000,393.000000,"-");
  352.     TextDrawUseBox(panel[playerid],1);
  353.     TextDrawBoxColor(panel[playerid],0x00000033);
  354.     TextDrawTextSize(panel[playerid],694.000000,0.000000);
  355.     TextDrawAlignment(panel[playerid],1);
  356.     TextDrawBackgroundColor(panel[playerid],0x000000FF);
  357.     TextDrawFont(panel[playerid],1);
  358.     TextDrawLetterSize(panel[playerid],0.199999,1.000000);
  359.     TextDrawColor(panel[playerid],0xffffffff);
  360.     TextDrawSetOutline(panel[playerid],1);
  361.     TextDrawSetProportional(panel[playerid],1);
  362.     TextDrawSetShadow(panel[playerid],1);
  363.     #endif
  364.     if(!IsPlayerNPC(playerid))pcount++;
  365. }
  366. ocmd:streamer(playerid,dump[])
  367. {
  368.     if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin!");
  369.     return mainmenu(playerid);
  370. }
  371. ocmd:map(playerid,dump[])
  372. {
  373.     if(!IsPlayerAdmin(playerid)&&!GetPVarInt(playerid,"ooMap"))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin/Mapper!");
  374.     return mapmenu(playerid);
  375. }
  376. ocmd:olist(playerid,dump[])
  377. {
  378.     if(!IsPlayerAdmin(playerid)&&!GetPVarInt(playerid,"ooMap"))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin/Mapper!");
  379.     if(admin!=playerid)return SendClientMessage(playerid,CHAT_COLOR,"Du hast den Mapeditor nicht aktiviert!");
  380.     return objfile(lastfile);
  381. }
  382. ocmd:saveobj(playerid,prm[])
  383. {
  384.     if(!IsPlayerAdmin(playerid)&&!GetPVarInt(playerid,"ooMap"))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin/Mapper!");
  385.     if(admin!=playerid)return SendClientMessage(playerid,CHAT_COLOR,"Du hast den Mapeditor nicht aktiviert!");
  386.     new i,com[40];
  387.     if(sscanf(prm,"dz",i,com))return SendClientMessage(playerid,CHAT_COLOR,"/saveobj [objectid] [kommentar]");
  388.     if(i>=MAX_STREAMOBJ||invalid[i]||i<0)return SendClientMessage(playerid,CHAT_COLOR,"Ungültige objectid!");
  389.     if(!fexist(SAVEOBJ_FILE))
  390.     {
  391.         new File:ffhandle=fopen(SAVEOBJ_FILE,io_write);
  392.         fclose(ffhandle);
  393.     }
  394.     new File:log2=fopen(SAVEOBJ_FILE,io_append);
  395.     if(!log2)return SendClientMessage(playerid,CHAT_COLOR,"Speichern fehlgeschlagen");
  396.     new ostr[300];
  397.     #if VIRTUALWORLD==1
  398.     format(ostr,sizeof ostr,"CreateObject(%d,%f,%f,%f,%f,%f,%f,%d);//%s\r\n",o[i][mod],o[i][x],o[i][y],o[i][z],o[i][rx],o[i][ry],o[i][rz],o[i][vw],com);
  399.     #else
  400.     format(ostr,sizeof ostr,"CreateObject(%d,%f,%f,%f,%f,%f,%f);//%s\r\n",o[i][mod],o[i][x],o[i][y],o[i][z],o[i][rx],o[i][ry],o[i][rz],com);
  401.     #endif
  402.     fwrite(log2,ostr);
  403.     fclose(log2);
  404.     new send[128];
  405.     if(!strlen(com))format(send,sizeof send,"Object %d gespeichert",i);
  406.     else format(send,sizeof send,"Object %d gespeichert [%s]",i,com);
  407.     return SendClientMessage(playerid,CHAT_COLOR,send);
  408. }
  409. ocmd:object(playerid,prm[])
  410. {
  411.     if(!IsPlayerAdmin(playerid)&&!GetPVarInt(playerid,"ooMap"))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin/Mapper!");
  412.     if(admin!=playerid)return SendClientMessage(playerid,CHAT_COLOR,"Du hast den Mapeditor nicht aktiviert!");
  413.     new objid;
  414.     if(sscanf(prm,"d",objid))return ((edit!=-1)?(fuckEdit()):(SendClientMessage(playerid,CHAT_COLOR,"/object [objectid]")));
  415.     if(objid>=obj||invalid[objid]||objid<0)return SendClientMessage(playerid,CHAT_COLOR,"Ungültige objectid!");
  416.     return showobject(playerid,objid);
  417. }
  418. #if PANEL==1
  419. ocmd:togpanel(playerid,prm[])
  420. {
  421.     if(!IsPlayerAdmin(playerid)&&!GetPVarInt(playerid,"ooMap"))return SendClientMessage(playerid,CHAT_COLOR,"Du bist kein Admin/Mapper!");
  422.     if(!GetPVarInt(playerid,"ooPanel"))SetPVarInt(playerid,"ooPanel",1);
  423.     else
  424.     {
  425.         DeletePVar(playerid,"ooPanel");
  426.         TextDrawHideForPlayer(playerid,panel[playerid]);
  427.     }
  428.     return 1;
  429. }
  430. #endif
  431. explode(const strsrc[], strdest[][], delimiter)
  432. {
  433.     new li,aNum,len;
  434.     for(new i;i<=strlen(strsrc);i++)if(strsrc[i]==delimiter||i==strlen(strsrc))
  435.     {
  436.  
  437.         len=strmid(strdest[aNum],strsrc,li,i,128);
  438.         strdest[aNum][len]=0;
  439.         li=i+1;
  440.         aNum++;
  441.     }
  442.     return 1;
  443. }
  444. objfile(filenamex[])
  445. {
  446.     if(!strlen(filenamex))return 0;
  447.     new filename[50];
  448.     format(filename,sizeof filename,"opa_objects/modelid/%s",filenamex);
  449.     if(admin==-1)return 0;
  450.     #define strlim 1024
  451.     new dtxt[strlim];
  452.     if(!fexist(filename))return 0;
  453.     new File:xd=fopen(filename,io_read),zeile[100],zeila[2][100],i;
  454.     for(;;)
  455.     {
  456.         fread(xd,zeile);
  457.         if(i<anfang)
  458.         {
  459.             i++;
  460.             continue;
  461.         }
  462.         if(!strlen(zeile))
  463.         {
  464.             nichtnochmal=true;
  465.             break;
  466.         }
  467.         explode(zeile,zeila,'|');
  468.         olist[i-anfang]=strval(zeila[0]);
  469.         if(i!=anfang)format(dtxt,sizeof dtxt,"%s\n%s",dtxt,zeila[1]);
  470.         else format(dtxt,sizeof dtxt,"%s",zeila[1]);
  471.         i++;
  472.         if(i==anfang+10)break;
  473.     }
  474.     anfang+=10;
  475.     ShowPlayerDialog(admin,DIALOG_ID12,DIALOG_STYLE_LIST,"Opas Objectstreamer - Object hinzufügen",dtxt,"Hinzufügen","Nächste Seite");
  476.     fclose(xd);
  477.     format(lastfile,sizeof lastfile,filenamex);
  478.     return 1;
  479. }
  480. public remoteMoveRot(xx1,Float:xx2,Float:xx3,Float:xx4,xx5)
  481. {
  482.     return remoteMove(xx1,o[xx1][x],o[xx1][y],o[xx1][z],floatdiv(5000.0,float(xx5)),xx2,xx3,xx4);
  483. }
  484. mainmenu(playerid)
  485. {
  486.     new inf[270];
  487.     format(inf,sizeof inf,"\
  488.    Map >>\n\
  489.    Mapper/Admins >>\n\
  490.     Warnungen zurücksetzen\n\
  491.     Playerobject-Limit: %d >>\n\
  492.     Drawdistance: %d\n\
  493.     Timer: %d ms\n\
  494.     Einstellungen speichern\n\
  495.     Info\
  496.     ",MAXPLAYEROBJ,DRAW_DISTANCE,timeT);
  497.     return ShowPlayerDialog(playerid,DIALOG_ID,DIALOG_STYLE_LIST,"Opas Objectstreamer",inf,"OK","Abbrechen");
  498. }
  499. mapmenu(playerid)
  500. {
  501.     if(admin!=playerid)
  502.     {
  503.         if(admin==-1)return ShowPlayerDialog(playerid,DIALOG_ID17,DIALOG_STYLE_MSGBOX,"Opas Objectstreamer - Mapeditor","Du hast den Mapeditor nicht aktiviert\nDer Mapeditor ist aktiviert von: --","Aktivieren","Abbrechen");
  504.         new str[128];
  505.         GetPlayerName(admin,str,sizeof str);
  506.         format(str,sizeof str,"Du hast den Mapeditor nicht aktiviert\nDer Mapeditor ist aktiviert von: %s",str);
  507.         ShowPlayerDialog(playerid,DIALOG_ID18,DIALOG_STYLE_MSGBOX,"Opas Objectstreamer - Mapeditor",str," "," ");
  508.         return 1;
  509.     }
  510.     new inf[270];
  511.     format(inf,sizeof inf,"\
  512.    Neues Objekt (Durchsuchen) >>\n\
  513.    Neues Objekt (Objectliste) >>\n\
  514.     Neues Objekt (ID)\n\
  515.     Map speichern\n\
  516.     Mapeditor deaktivieren\
  517.     ");
  518.     return ShowPlayerDialog(playerid,DIALOG_ID19,DIALOG_STYLE_LIST,"Opas Objectstreamer - Mapeditor",inf,"OK","Abbrechen");
  519. }
  520. stock effort()
  521. {
  522.     new Float:pro;
  523.     for(new i;i<MAX_SLOTS;i++)if(IsPlayerConnected(i)&&!IsPlayerNPC(i))
  524.     {
  525.         pro=pro+GetPVarInt(i,"ooCrash");
  526.     }
  527.     pro=floatdiv(pro,pcount);
  528.     pro=floatdiv(pro,MAXPLAYEROBJ);
  529.     return floatround(pro*100);
  530. }
  531. stock seffort()
  532. {
  533.     new pro,worst;
  534.     pro=pcount*obj;
  535.     worst=MAX_STREAMOBJ*MAX_SLOTS;
  536.     new Float:ret=floatdiv(1,floatdiv(worst,pro));
  537.     ret=ret*100;
  538.     return floatround(ret);
  539. }
  540. stock teff()
  541. {
  542.     return pcount*obj;
  543. }
  544. showobject(playerid,oid)
  545. {
  546.     if(edit!=-1)fuckEdit();
  547.     if(Qtimer!=-1)KillTimer(Qtimer);
  548.     Qtimer=SetTimer("Q",100,1);
  549.     edit=oid;
  550.     keep(edit);
  551.     TogglePlayerControllable(playerid,0);
  552.     return 1;
  553. }
  554. fuckEdit()
  555. {
  556.     new u=edit;
  557.     edit=-1;
  558.     keep(u);
  559.     if(Qtimer!=-1)
  560.     {
  561.         KillTimer(Qtimer);
  562.         Qtimer=-1;
  563.         SetCameraBehindPlayer(admin);
  564.         TogglePlayerControllable(admin,1);
  565.         findZ(admin);
  566.     }
  567.     return 1;
  568. }
  569. new Float:offset[3]={0.0,12.0,1.0};
  570. public Q()
  571. {
  572.     if(admin==-1)
  573.     {
  574.         KillTimer(Qtimer);
  575.         Qtimer=-1;
  576.         SetCameraBehindPlayer(admin);
  577.         TogglePlayerControllable(admin,1);
  578.         findZ(admin);
  579.         return;
  580.     }
  581.     if(edit==-1)
  582.     {
  583.         KillTimer(Qtimer);
  584.         Qtimer=-1;
  585.         SetCameraBehindPlayer(admin);
  586.         TogglePlayerControllable(admin,1);
  587.         findZ(admin);
  588.         return;
  589.     }
  590.     new dumm,ud,lr;
  591.     GetPlayerKeys(admin,dumm,ud,lr);
  592.     new Float:bob=(1.3+((dumm&KEY_SPRINT)?(1.5):(0.0))-((dumm&KEY_WALK)?(1.1):(0.0)));
  593.     if(dumm&KEY_FIRE)
  594.     {
  595.         if(dumm&KEY_JUMP)
  596.         {
  597.             if(ud>0)offset[2]-=bob;
  598.             else if(ud<0)offset[2]+=bob;
  599.         }
  600.         else
  601.         {
  602.             if(lr<0)offset[0]+=bob;
  603.             else if(lr>0)offset[0]-=bob;
  604.             if(ud<0)offset[1]-=bob;
  605.             else if(ud>0)offset[1]+=bob;
  606.         }
  607.     }
  608.     else if(dumm&KEY_CROUCH)
  609.     {
  610.         bob*=4;
  611.         if(!(dumm&KEY_JUMP))remoteSetRot(edit,o[edit][rx],o[edit][ry],o[edit][rz]+((lr<0)?(-bob):((lr>0)?(bob):(0.0))));
  612.         else remoteSetRot(edit,o[edit][rx]+((lr<0)?(bob):((lr>0)?(-bob):(0.0))),o[edit][ry]+((ud>0)?(bob):((ud<0)?(-bob):(0.0))),o[edit][rz]);
  613.     }
  614.     else if(dumm&KEY_JUMP)remoteSetPos(edit,o[edit][x],o[edit][y],o[edit][z]+((ud>0)?(-bob):((ud<0)?(bob):(0.0))));
  615.     else if(dumm&KEY_SECONDARY_ATTACK)showobject2(admin,edit);
  616.     else remoteSetPos(edit,o[edit][x]+((lr<0)?(bob):((lr>0)?(-bob):(0.0))),o[edit][y]+((ud>0)?(bob):((ud<0)?(-bob):(0.0))),o[edit][z]);
  617.     SetPlayerCameraPos(admin,o[edit][x]+offset[0],o[edit][y]+offset[1],o[edit][z]+offset[2]);
  618.     SetPlayerCameraLookAt(admin,o[edit][x],o[edit][y],o[edit][z]);
  619.     SetPlayerPos(admin,(o[edit][x]+(1.5*offset[0])),(o[edit][y]+(1.5*offset[1])),(o[edit][z]+(1.5*offset[2])));
  620. }
  621. showobject2(playerid,oid)
  622. {
  623.     new title[100],lol2[320],vwstr[100],intstr[100];
  624.     format(title,sizeof title,"Opas Objectstreamer - Objekt %d",oid);
  625.     #if VIRTUALWORLD==1
  626.     format(vwstr,sizeof vwstr,"World: %d",o[oid][vw]);
  627.     #else
  628.     format(vwstr,sizeof vwstr,"World: --");
  629.     #endif
  630.     #if INTERIOR==1
  631.     format(intstr,sizeof intstr,"Interior: %d",o[oid][inter]);
  632.     #else
  633.     format(intstr,sizeof intstr,"Interior: --");
  634.     #endif
  635.     format(lol2,sizeof lol2,"%s\n%s\nLöschen",vwstr,intstr);
  636.     return ShowPlayerDialog(playerid,DIALOG_ID6,DIALOG_STYLE_LIST,title,lol2,"Ändern...","Done");
  637. }
  638. public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
  639. {
  640.     if(IsPlayerAdmin(playerid)||GetPVarInt(playerid,"ooMap"))
  641.     {
  642.         if(dialogid==DIALOG_ID20)
  643.         {
  644.             if(!response)return mainmenu(playerid);
  645.             if(!listitem)return ShowPlayerDialog(playerid,DIALOG_ID16,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Team","Gib den Namen oder die ID des Mappers ein","Hinzufügen","Abbrechen");
  646.             new bob;
  647.             for(new i;i<MAX_SLOTS;i++)
  648.             {
  649.                 if(IsPlayerAdmin(i)||GetPVarInt(i,"ooMap"))
  650.                 {
  651.                     bob++;
  652.                     if(bob==listitem)
  653.                     {
  654.                         if(IsPlayerAdmin(i))
  655.                         {
  656.                             SendClientMessage(playerid,CHAT_COLOR,"Admins kannst du nicht löschen");
  657.                             goto moin;
  658.                         }
  659.                         DeletePVar(i,"ooMap");
  660.                         SendClientMessage(playerid,CHAT_COLOR,"Mapper gelöscht");
  661.                         goto moin;
  662.                     }
  663.                 }
  664.             }
  665.         }
  666.         if(dialogid==DIALOG_ID16)
  667.         {
  668.             if(!response)goto moin;
  669.             new typ;
  670.             if(sscanf(inputtext,"u",typ))return ShowPlayerDialog(playerid,DIALOG_ID16,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Team","Gib den Namen oder die id des Mappers ein\n[[Ungültige Eingabe!]]","Hinzufügen","Abbrechen");
  671.             SetPVarInt(typ,"ooMap",1);
  672.             SendClientMessage(playerid,CHAT_COLOR,"Mapper hinzugefügt");
  673.             SendClientMessage(typ,CHAT_COLOR,"Du wurdest ins Mapper-Team eingeladen");
  674.             goto moin;
  675.         }
  676.         else if(dialogid==DIALOG_ID&&response)
  677.         {
  678.             switch(listitem)
  679.             {
  680.                 case 0:
  681.                 {
  682.                     mapmenu(playerid);
  683.                     return 1;
  684.                 }
  685.                 case 1:
  686.                 {
  687.                     moin:
  688.                     new all[500],one[MAX_PLAYER_NAME];
  689.                     format(all,sizeof all,"+ Mapper hinzufügen");
  690.                     for(new i;i<MAX_SLOTS;i++)
  691.                     {
  692.                         if(IsPlayerAdmin(i))
  693.                         {
  694.                             GetPlayerName(i,one,sizeof one);
  695.                             format(all,sizeof all,"%s\n%s [Admin]",all,one);
  696.                         }
  697.                         else if(GetPVarInt(i,"ooMap"))
  698.                         {
  699.                             GetPlayerName(i,one,sizeof one);
  700.                             format(all,sizeof all,"%s\n%s [Mapper]",all,one);
  701.                         }
  702.                     }
  703.                     ShowPlayerDialog(playerid,DIALOG_ID20,DIALOG_STYLE_LIST,"Opas Objectstreamer - Team",all,"Löschen","Fertig");
  704.                     return 1;
  705.                 }
  706.                 case 4:ShowPlayerDialog(playerid,DIALOG_ID2,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Drawdistance ändern","Gib eine Nummer zwischen 5 und 400 ein","OK","Abbrechen");
  707.                 case 2:
  708.                 {
  709.                     for(new i;i<MAX_SLOTS;i++)warn[i]=false;
  710.                     SendClientMessage(playerid,CHAT_COLOR,"Warnungen zurückgesetzt");
  711.                     return mainmenu(playerid);
  712.                 }
  713.                 case 3:
  714.                 {
  715.                     new xt1[450];
  716.                     format(xt1,sizeof xt1,"Playerobject-Limit verändern\n\nSamp Maximum:\t\t1000\nGlobale Objekte:\t%d\n-----------------------------------------\nTop:\t\t\t\t%d\nDeine Einstellung:\t\t%d",exobjects,1000-exobjects,MAXPLAYEROBJ);
  717.                     ShowPlayerDialog(playerid,DIALOG_ID4,DIALOG_STYLE_INPUT,"Opas Objectstreamer",xt1,"OK","Abbrechen");
  718.                 }
  719.                 case 5:ShowPlayerDialog(playerid,DIALOG_ID5,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Timerzeit verändern","Gib eine Zahl zwischen 200 und 3500 ms ein","OK","Abbrechen");
  720.                 case 6:
  721.                 {
  722.                     settings();
  723.                     SendClientMessage(playerid,CHAT_COLOR,"Einstellungen gespeichert");
  724.                 }
  725.                 case 7:ShowPlayerDialog(playerid,DIALOG_ID14,DIALOG_STYLE_LIST,"Opas Objectstreamer - Info","Script by KleinerOpa\n/streamer => Mainmenu\n/map => Mapmenu\n/olist => Letze Objektliste nochmal anzeigen\n/object [id] => Objekt bearbeiten\n/saveobj [id] => Objekt speichern\nBugs? Hilfe benötigt? www.kleiner-opa.de // ICQ 611064955","OK","Zurück");
  726.             }
  727.             return 1;
  728.         }
  729.         else if(dialogid==DIALOG_ID19&&response)
  730.         {
  731.             switch(listitem)
  732.             {
  733.                 case 3:ShowPlayerDialog(playerid,DIALOG_ID10,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Map speichern","Gib den Dateinamen ein\nDie Map wird als \"Dateiname.txt\" gespeichert","OK","Abbrechen");
  734.                 case 2:ShowPlayerDialog(playerid,DIALOG_ID9,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Objekt hinzufügen","Gib die modelid ein","OK","Abbrechen");
  735.                 case 1:ShowPlayerDialog(playerid,DIALOG_ID11,DIALOG_STYLE_LIST,"Opas Objectstreamer - Objekt hinzufügen",\
  736.                 "Weapons.txt\nNature.txt\nFun Stuff.txt\nBarriers.txt\nVarious.txt\nVarious II.txt\n\
  737.                 Various III.txt\nMisc.txt\nMisc II.txt\nCasino Items.txt\nBar Items.txt\nTables and Chairs.txt\n\
  738.                 SAMP.txt\nSAMP2.txt\nStunt.txt\nRoads.txt\nParticles.txt\nClothes.txt\nClothes2.txt\nClothes3.txt\n\
  739.                 Clothes4.txt\nVarious IV.txt\nXMas.txt\n0.3d.txt\n\
  740.                 Namen eingeben...","OK","Abbrechen");
  741.                 case 4:
  742.                 {
  743.                     logout();
  744.                     SendClientMessage(playerid,CHAT_COLOR,"Mapeditor deaktiviert");
  745.                 }
  746.                 case 0:searchmenu(playerid);
  747.             }
  748.             return 1;
  749.         }
  750.         else if(dialogid==DIALOG_ID17&&response)
  751.         {
  752.             login(playerid);
  753.             SendClientMessage(playerid,CHAT_COLOR,"Mapeditor aktiviert");
  754.             mapmenu(playerid);
  755.             return 1;
  756.         }
  757.         else if(dialogid==DIALOG_ID2)
  758.         {
  759.             if(!response)return mainmenu(playerid);
  760.             new val=strval(inputtext);
  761.             if(val<5||val>400)return SendClientMessage(playerid,CHAT_COLOR,"Fehler: Muss zwischen 5 und 400 sein");
  762.             DRAW_DISTANCE=val;
  763.             new str[128];
  764.             format(str,sizeof str,"New Drawdistance: %d",DRAW_DISTANCE);
  765.             return SendClientMessage(playerid,CHAT_COLOR,str);
  766.         }
  767.         else if(dialogid==DIALOG_ID4)
  768.         {
  769.             if(!response)return mainmenu(playerid);
  770.             new val=strval(inputtext);
  771.             if(val<1||val>400-exobjects)
  772.             {
  773.                 new xt1[128];
  774.                 format(xt1,sizeof xt1,"Fehler: Muss zwischen 1 und %d sein",1000-exobjects);
  775.                 return SendClientMessage(playerid,CHAT_COLOR,xt1);
  776.             }
  777.             MAXPLAYEROBJ=val;
  778.             new str[128];
  779.             format(str,sizeof str,"Neues Playerobject-Limit: %d",MAXPLAYEROBJ);
  780.             return SendClientMessage(playerid,CHAT_COLOR,str);
  781.         }
  782.         else if(dialogid==DIALOG_ID5)
  783.         {
  784.             if(!response)return mainmenu(playerid);
  785.             new val=strval(inputtext);
  786.             if(val<200||val>3500)return SendClientMessage(playerid,CHAT_COLOR,"Fehler: Muss zwischen 200 und 3500 sein");
  787.             timeT=val;
  788.             KillTimer(kill);
  789.             kill=SetTimer("test",timeT,1);
  790.             new str[128];
  791.             format(str,sizeof str,"Neue Timerzeit: %d",timeT);
  792.             return SendClientMessage(playerid,CHAT_COLOR,str);
  793.         }
  794.         else if(dialogid==DIALOG_ID6&&response)
  795.         {
  796.             switch(listitem)
  797.             {
  798.                 case 0:
  799.                 {
  800.                     ShowPlayerDialog(playerid,DIALOG_ID7,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Virtualworld ändern","Gib die neue Virtualworld ein","OK","Abbrechen");
  801.                 }
  802.                 case 1:
  803.                 {
  804.                     ShowPlayerDialog(playerid,DIALOG_ID15,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Interior ändern","Gib das neue Interior ein","OK","Abbrechen");
  805.                 }
  806.                 case 2:
  807.                 {
  808.                     remoteDestroy(edit);
  809.                     SendClientMessage(playerid,CHAT_COLOR,"Object gelöscht");
  810.                     edit=-1;
  811.                 }
  812.             }
  813.             return 1;
  814.         }
  815.         else if(dialogid==DIALOG_ID7)
  816.         {
  817.             if(!response)return showobject2(playerid,edit);
  818.             new val=strval(inputtext);
  819.             if(val<-1)return SendClientMessage(playerid,CHAT_COLOR,"Fehler: Muss zwischen -1 und ... sein");
  820.             #if VIRTUALWORLD==1
  821.             remoteVirtual(edit,val);
  822.             #endif
  823.             return showobject2(playerid,edit);
  824.         }
  825.         else if(dialogid==DIALOG_ID15)
  826.         {
  827.             if(!response)return showobject2(playerid,edit);
  828.             new val=strval(inputtext);
  829.             if(val<-1)return SendClientMessage(playerid,CHAT_COLOR,"Fehler: Muss zwischen -1 und ... sein");
  830.             #if INTERIOR==1
  831.             remoteVirtual(edit,val);
  832.             #endif
  833.             return showobject2(playerid,edit);
  834.         }
  835.         else if(dialogid==DIALOG_ID9)
  836.         {
  837.             if(!response)return mapmenu(playerid);
  838.             new val=strval(inputtext);
  839.             if(val<1)return ShowPlayerDialog(playerid,DIALOG_ID9,DIALOG_STYLE_INPUT,"Opas Objectstreamer - Objekt hinzufügen","Gib die modelid ein\n[[Ungültige Eingabe!]]","OK","Abbrechen");
  840.             new Float:lol[4];
  841.             GetPlayerPos(playerid,lol[0],lol[1],lol[2]);
  842.             GetPlayerFacingAngle(playerid,lol[3]);
  843.             new fish1=remoteObject(val,lol[0],lol[1],lol[2],0.0,0.0,lol[3]);
  844.             if(!fish1)SendClientMessage(playerid,CHAT_COLOR,"Fail beim Objekterstellen");
  845.             else
  846.             {
  847.                 new rr[128];
  848.                 format(rr,sizeof rr,"Object %d erstellt",obj-1);
  849.                 SendClientMessage(playerid,CHAT_COLOR,rr);
  850.             }
  851.             return 1;
  852.         }
  853.         else if(dialogid==DIALOG_ID10)
  854.         {
  855.             if(!response)return mapmenu(playerid);
  856.             new filen[65];
  857.             format(filen,sizeof filen,"%s.txt",inputtext);
  858.             if(fexist(filen))return SendClientMessage(playerid,CHAT_COLOR,"Fehler: Diese Datei existiert schon");
  859.             new zeile[300];
  860.             new File:bob=fopen(filen,io_write);
  861.             if(!bob)
  862.             {
  863.                 new gold1[128];
  864.                 format(gold1,sizeof gold1,"Mapspeichern [%s]: fail",filen);
  865.                 log(gold1);
  866.                 return SendClientMessage(playerid,CHAT_COLOR,gold1);
  867.             }
  868.             new lolh[120],wname[MAX_PLAYER_NAME],date[3];
  869.             GetPlayerName(playerid,wname,sizeof wname);
  870.             getdate(date[0],date[1],date[2]);
  871.             format(lolh,sizeof lolh,"//Erstellt mit Opas Objectstreamer\r\n//%d.%d.%d von %s",date[2],date[1],date[0],wname);
  872.             fwrite(bob,lolh);
  873.             for(new i;i<obj;i++)if(!invalid[i])
  874.             {
  875.                 #if VIRTUALWORLD==1
  876.                 format(zeile,sizeof zeile,"\r\nCreateObject(%d,%f,%f,%f,%f,%f,%f,%d);//%d",o[i][mod],o[i][x],o[i][y],o[i][z],o[i][rx],o[i][ry],o[i][rz],o[i][vw],i);
  877.                 #else
  878.                 format(zeile,sizeof zeile,"\r\nCreateObject(%d,%f,%f,%f,%f,%f,%f);//%d",o[i][mod],o[i][x],o[i][y],o[i][z],o[i][rx],o[i][ry],o[i][rz],i);
  879.                 #endif
  880.                 fwrite(bob,zeile);
  881.             }
  882.             fclose(bob);
  883.             new gold[128];
  884.             format(gold,sizeof gold,"Map gespeichert [%s]",filen);
  885.             log(gold);
  886.             return SendClientMessage(playerid,CHAT_COLOR,gold);
  887.         }
  888.         else if(dialogid==DIALOG_ID11)
  889.         {
  890.             if(!response)return mapmenu(playerid);
  891.             if(admin!=playerid)return SendClientMessage(playerid,CHAT_COLOR,"Du hast den Mapeditor nicht aktiviert!");
  892.             new fxx[50],bool:self;
  893.             switch(listitem)
  894.             {
  895.                 case 0:fxx="Weapons.txt";
  896.                 case 1:fxx="Nature.txt";
  897.                 case 2:fxx="Fun Stuff.txt";
  898.                 case 3:fxx="Barriers.txt";
  899.                 case 4:fxx="Various.txt";
  900.                 case 5:fxx="Various II.txt";
  901.                 case 6:fxx="Various III.txt";
  902.                 case 7:fxx="Misc.txt";
  903.                 case 8:fxx="Misc II.txt";
  904.                 case 9:fxx="Casino Items.txt";
  905.                 case 10:fxx="Bar Items.txt";
  906.                 case 11:fxx="Tables and Chairs.txt";
  907.                 case 12:fxx="SAMP.txt";
  908.                 case 13:fxx="SAMP2.txt";
  909.                 case 14:fxx="Stunt.txt";
  910.                 case 15:fxx="Roads.txt";
  911.                 case 16:fxx="Particles.txt";
  912.                 case 17:fxx="Clothes.txt";
  913.                 case 18:fxx="Clothes2.txt";
  914.                 case 19:fxx="Clothes3.txt";
  915.                 case 20:fxx="Clothes4.txt";
  916.                 case 21:fxx="Various IV.txt";
  917.                 case 22:fxx="XMas.txt";
  918.                 case 23:fxx="0.3d.txt";
  919.                 case 24:self=true;
  920.             }
  921.             if(self)return ShowPlayerDialog(playerid,DIALOG_ID13,DIALOG_STYLE_INPUT,"Opas Objectstreamer","Gib den Dateinamen ein","OK","Abrrechen");
  922.             objfile(fxx);
  923.             return 1;
  924.         }
  925.         else if(dialogid==DIALOG_ID13)
  926.         {
  927.             if(!response)return mainmenu(playerid);
  928.             if(!objfile(inputtext))return ShowPlayerDialog(playerid,DIALOG_ID13,DIALOG_STYLE_INPUT,"Opas Objectstreamer","Gib den Dateinamen ein\n[[Error: Die Datei existiert nicht!]]","OK","Abrrechen");
  929.             return 1;
  930.         }
  931.         else if(dialogid==DIALOG_ID12)
  932.         {
  933.             if(!response)
  934.             {
  935.                 if(!nichtnochmal)objfile(lastfile);
  936.                 else
  937.                 {
  938.                     nichtnochmal=false;
  939.                     anfang=0;
  940.                 }
  941.                 return 1;
  942.             }
  943.             nichtnochmal=false;
  944.             anfang=0;
  945.             new Float:lol[4];
  946.             GetPlayerPos(playerid,lol[0],lol[1],lol[2]);
  947.             GetPlayerFacingAngle(playerid,lol[3]);
  948.             new fish1=remoteObject(olist[listitem],lol[0],lol[1],lol[2],0.0,0.0,lol[3]);
  949.             if(!fish1)SendClientMessage(playerid,CHAT_COLOR,"Fail bei der Objecterstellung");
  950.             else
  951.             {
  952.                 new rr[128];
  953.                 format(rr,sizeof rr,"Object %d erstellt",obj-1);
  954.                 SendClientMessage(playerid,CHAT_COLOR,rr);
  955.             }
  956.             return 1;
  957.         }
  958.         else if(dialogid==DIALOG_ID23)
  959.         {
  960.             if(!response)return mapmenu(playerid);
  961.             return searchobject(playerid,inputtext);
  962.         }
  963.         else if(dialogid==DIALOG_ID24)
  964.         {
  965.             if(!response)return searchmenu(playerid);
  966.             new Float:lol[4];
  967.             GetPlayerPos(playerid,lol[0],lol[1],lol[2]);
  968.             GetPlayerFacingAngle(playerid,lol[3]);
  969.             new fish1=remoteObject(slist[listitem],lol[0],lol[1],lol[2],0.0,0.0,lol[3]);
  970.             if(!fish1)SendClientMessage(playerid,CHAT_COLOR,"Fail bei der Objecterstellung");
  971.             else
  972.             {
  973.                 new rr[128];
  974.                 format(rr,sizeof rr,"Object %d erstellt",obj-1);
  975.                 SendClientMessage(playerid,CHAT_COLOR,rr);
  976.             }
  977.             return 1;
  978.         }
  979.         else if(dialogid==DIALOG_ID14)return mainmenu(playerid);
  980.         return 1;
  981.     }
  982.     return 0;
  983. }
  984. searchmenu(playerid)return ShowPlayerDialog(playerid,DIALOG_ID23,DIALOG_STYLE_INPUT,"Opas Objectstreamer","Gib einen Suchbegriff ein:","OK","Abbrechen");
  985. searchobject(playerid,str[])
  986. {
  987.     if(strlen(str))
  988.     {
  989.         #define MAX_FILEZ 24
  990.         new fileZ[MAX_FILEZ][30]={
  991.             "Weapons.txt",
  992.             "Nature.txt",
  993.             "Fun Stuff.txt",
  994.             "Barriers.txt",
  995.             "Various.txt",
  996.             "Various II.txt",
  997.             "Various III.txt",
  998.             "Misc.txt",
  999.             "Misc II.txt",
  1000.             "Casino Items.txt",
  1001.             "Bar Items.txt",
  1002.             "Tables and Chairs.txt",
  1003.             "SAMP.txt",
  1004.             "SAMP2.txt",
  1005.             "Stunt.txt",
  1006.             "Roads.txt",
  1007.             "Particles.txt",
  1008.             "Clothes.txt",
  1009.             "Clothes2.txt",
  1010.             "Clothes3.txt",
  1011.             "Clothes4.txt",
  1012.             "Various IV.txt",
  1013.             "XMas.txt",
  1014.             "0.3d.txt"
  1015.         };
  1016.         new filename[50],entry,dtxt[2*strlim];
  1017.         for(new fidx;fidx<MAX_FILEZ;fidx++)
  1018.         {
  1019.             format(filename,sizeof filename,"opa_objects/modelid/%s",fileZ[fidx]);
  1020.             if(!fexist(filename))continue;
  1021.             new File:xd=fopen(filename,io_read),zeile[100],zeila[2][100];
  1022.             for(;;)
  1023.             {
  1024.                 fread(xd,zeile);
  1025.                 if(!strlen(zeile)||entry==MAX_ENTRY)
  1026.                 {
  1027.                     break;
  1028.                 }
  1029.                 explode(zeile,zeila,'|');
  1030.                 if(strfind(zeila[1],str,true)==-1)continue;
  1031.                 slist[entry]=strval(zeila[0]);
  1032.                 entry++;
  1033.                 if(entry)format(dtxt,sizeof dtxt,"%s\n%s",dtxt,zeila[1]);
  1034.                 else format(dtxt,sizeof dtxt,"%s",zeila[1]);
  1035.             }
  1036.             fclose(xd);
  1037.         }
  1038.         if(!entry)return ShowPlayerDialog(playerid,DIALOG_ID23,DIALOG_STYLE_INPUT,"Opas Objectstreamer","Gib einen Suchbegriff ein:\n[[Fehler: Keine Ergebnisse gefunden]]","OK","Abbrechen");
  1039.         ShowPlayerDialog(playerid,DIALOG_ID24,DIALOG_STYLE_LIST,"Opas Objectstreamer - Objecte durchsuchen",dtxt,"Erstellen","Suchbegriff...");
  1040.     }
  1041.     else
  1042.     {
  1043.         ShowPlayerDialog(playerid,DIALOG_ID23,DIALOG_STYLE_INPUT,"Opas Objectstreamer","Gib einen Suchbegriff ein:\n[[Fehler: Ungültiger Suchbegriff]]","OK","Abbrechen");
  1044.     }
  1045.     return true;
  1046. }
  1047. login(playerid)
  1048. {
  1049.     admin=playerid;
  1050.     for(new i;i<obj;i++)if(!invalid[i])
  1051.     {
  1052.         new sr[250],vwstr[100];
  1053.         format(vwstr,sizeof vwstr,"Model:%d",o[i][mod]);
  1054.         #if VIRTUALWORLD==1
  1055.         format(vwstr,sizeof vwstr,"%s World:%d",vwstr,o[i][vw]);
  1056.         #endif
  1057.         #if INTERIOR==1
  1058.         format(vwstr,sizeof vwstr,"%s Interior:%d",vwstr,o[i][inter]);
  1059.         #endif
  1060.         format(sr,sizeof sr,"Object %d\n%s\n[%.2f|%.2f|%.2f]",i,vwstr,o[i][x],o[i][y],o[i][z]);
  1061.         noob[i]=CreatePlayer3DTextLabel(playerid,sr,LABEL_COLOR,o[i][x],o[i][y],o[i][z],LABEL_RANGE,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0);
  1062.         noob4[i]=true;
  1063.         #if PANEL==1
  1064.         panelU(playerid);
  1065.         #endif
  1066.     }
  1067.     return 1;
  1068. }
  1069. logout()
  1070. {
  1071.     if(edit!=-1)fuckEdit();
  1072.     for(new i;i<obj;i++)if(!invalid[i])
  1073.     {
  1074.         DeletePlayer3DTextLabel(admin,noob[i]);
  1075.         noob4[i]=false;
  1076.     }
  1077.     #if PANEL==1
  1078.     new old=admin;
  1079.     #endif
  1080.     admin=-1;
  1081.     #if PANEL==1
  1082.     panelU(old);
  1083.     #endif
  1084.     return 1;
  1085. }
  1086. public test()
  1087. {
  1088.     for(new i;i<=dynamicPlayerBuffer;i++)
  1089.     {
  1090.         if(!IsPlayerConnected(i)||IsPlayerNPC(i))continue;
  1091.         for(new n;n<obj;n++)if(!invalid[n])
  1092.         {
  1093.             #if CLIENTSTREAM==0
  1094.             if(IsPlayerInRangeOfPoint(i,DRAW_DISTANCE,o[n][x],o[n][y],o[n][z]))
  1095.             #else
  1096.             if(IsPlayerInRangeOfPoint(i,DRAW_DISTANCE+20.0,o[n][x],o[n][y],o[n][z]))
  1097.             #endif
  1098.             {
  1099.                 #if VIRTUALWORLD==1
  1100.                 if(o[n][vw]!=-1&&(GetPlayerVirtualWorld(i)!=o[n][vw]))goto sv3nsch4ch7;
  1101.                 #endif
  1102.                 #if INTERIOR==1
  1103.                 if(o[n][inter]!=-1&&(GetPlayerInterior(i)!=o[n][inter]))goto sv3nsch4ch7;
  1104.                 #endif
  1105.                 if(!p[i][n])
  1106.                 {
  1107.                     if(GetPVarInt(i,"ooCrash")<MAXPLAYEROBJ)
  1108.                     {
  1109.                         #if CLIENTSTREAM==0
  1110.                         p[i][n]=CreatePlayerObject(i,o[n][mod],o[n][x],o[n][y],o[n][z],o[n][rx],o[n][ry],o[n][rz]);
  1111.                         #else
  1112.                         p[i][n]=CreatePlayerObject(i,o[n][mod],o[n][x],o[n][y],o[n][z],o[n][rx],o[n][ry],o[n][rz],DRAW_DISTANCE);
  1113.                         #endif
  1114.                         SetPVarInt(i,"ooCrash",GetPVarInt(i,"ooCrash")+1);
  1115.                         #if CALLBACK==1
  1116.                         CallRemoteFunction("OnObjectStreamIn","dd",i,n);
  1117.                         #endif
  1118.                     }
  1119.                     else if(!warn[i])
  1120.                     {
  1121.                         sendAdminWarn(i);
  1122.                         warn[i]=true;
  1123.                     }
  1124.                 }
  1125.                 continue;
  1126.             }
  1127.             #if (VIRTUALWORLD==1)||(INTERIOR==1)
  1128.             sv3nsch4ch7:
  1129.             #endif
  1130.             if(p[i][n]!=0)
  1131.             {
  1132.                 DestroyPlayerObject(i,p[i][n]);
  1133.                 p[i][n]=0;
  1134.                 SetPVarInt(i,"ooCrash",GetPVarInt(i,"ooCrash")-1);
  1135.                 #if CALLBACK==1
  1136.                 CallRemoteFunction("OnObjectStreamOut","dd",i,n);
  1137.                 #endif
  1138.             }
  1139.         }
  1140.         if(wait[i])
  1141.         {
  1142.             wait[i]=false;
  1143.             TogglePlayerControllable(i,1);
  1144.             #if TEXTDRAW==2
  1145.             TextDrawHideForPlayer(i,Textdraw0);
  1146.             TextDrawShowForPlayer(i,Textdraw1);
  1147.             SetTimerEx("hideText",500,0,"d",i);
  1148.             #else
  1149.             #if TEXTDRAW==1
  1150.             GameTextForPlayer(i,"~w~LADE MAP...~n~~g~FERTIG",500,6);
  1151.             #endif
  1152.             #endif
  1153.         }
  1154.     }
  1155. }
  1156. #if TEXTDRAW==2
  1157. public hideText(playerid)TextDrawHideForPlayer(playerid,Textdraw1);
  1158. #endif
  1159. public remoteObjectEx()
  1160. {
  1161.     exobjects++;
  1162.     MAXPLAYEROBJ--;
  1163. }
  1164. public remoteDestroyEx()
  1165. {
  1166.     exobjects--;
  1167.     if(MAXPLAYEROBJ<1000)MAXPLAYEROBJ++;
  1168. }
  1169. sendAdminWarn(i)
  1170. {
  1171.     new strr[128],namee[MAX_PLAYER_NAME],Float:b[3];
  1172.     GetPlayerName(i,namee,sizeof namee);
  1173.     GetPlayerPos(i,b[0],b[1],b[2]);
  1174.     format(strr,sizeof strr,"opa_objectstreamer: einige Objekte können nicht angezeigt werden (Spieler %s[%d]; %02f,%02f,%02f)",namee,i,b[0],b[1],b[2]);
  1175.     for(new e;e<MAX_SLOTS;e++)if(IsPlayerAdmin(e))
  1176.     {
  1177.         SendClientMessage(e,CHAT_COLOR,strr);
  1178.         SendClientMessage(e,CHAT_COLOR,"Tipp: /streamer -> Drawdistance runterstellen");
  1179.     }
  1180.     format(strr,sizeof strr,"PlayerWarnung: %s[%d]|%02f|%02f|%02f\n",namee,i,b[0],b[1],b[2]);
  1181.     log(strr);
  1182. }
  1183. keep(objx)
  1184. {
  1185.     if(admin==-1)return 1;
  1186.     new sr[250],vwstr[100];
  1187.     format(vwstr,sizeof vwstr,"Model:%d",o[objx][mod]);
  1188.     #if VIRTUALWORLD==1
  1189.     format(vwstr,sizeof vwstr,"%s World:%d",vwstr,o[objx][vw]);
  1190.     #endif
  1191.     #if INTERIOR==1
  1192.     format(vwstr,sizeof vwstr,"%s Interior:%d",vwstr,o[objx][inter]);
  1193.     #endif
  1194.     format(sr,sizeof sr,"Object %d\n%s\n[%.2f|%.2f|%.2f]",objx,vwstr,o[objx][x],o[objx][y],o[objx][z]);
  1195.     if(noob4[objx])DeletePlayer3DTextLabel(admin,noob[objx]);
  1196.     if(objx!=edit)noob[objx]=CreatePlayer3DTextLabel(admin,sr,LABEL_COLOR,o[objx][x],o[objx][y],o[objx][z],LABEL_RANGE,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0);
  1197.     else noob[objx]=CreatePlayer3DTextLabel(admin,sr,LABEL_COLOR2,o[objx][x],o[objx][y],o[objx][z],LABEL_RANGE,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0);
  1198.     noob4[objx]=true;
  1199.     return 1;
  1200. }
  1201. public remoteObject(xx1,Float:xx2,Float:xx3,Float:xx4,Float:xx5,Float:xx6,Float:xx7)
  1202. {
  1203.     new bobj=-1;
  1204.     for(new i;i<MAX_STREAMOBJ;i++)
  1205.     {
  1206.         if(invalid[i]||i==obj)
  1207.         {
  1208.             bobj=i;
  1209.             break;
  1210.         }
  1211.     }
  1212.     if(bobj==-1)return 0;
  1213.     o[bobj][mod]=xx1;
  1214.     o[bobj][x]=xx2;
  1215.     o[bobj][y]=xx3;
  1216.     o[bobj][z]=xx4;
  1217.     o[bobj][rx]=xx5;
  1218.     o[bobj][ry]=xx6;
  1219.     o[bobj][rz]=xx7;
  1220.     o[bobj][resID]=1;
  1221.     invalid[bobj]=false;
  1222.     #if INTERIOR==1
  1223.     o[bobj][inter]=-1;
  1224.     #endif
  1225.     keep(bobj);
  1226.     if(bobj==obj)obj++;
  1227.     CallRemoteFunction("remoteNumber","d",bobj);
  1228.     return 1;
  1229. }
  1230. #if VIRTUALWORLD==1
  1231. public remoteVirtual(xx1,xx2)
  1232. {
  1233.     o[xx1][vw]=xx2;
  1234.     keep(xx1);
  1235.     return 1;
  1236. }
  1237. #endif
  1238. #if INTERIOR==1
  1239. public remoteInt(xx1,xx2)
  1240. {
  1241.     o[xx1][inter]=xx2;
  1242.     keep(xx1);
  1243.     return 1;
  1244. }
  1245. #endif
  1246. public remoteMove(xx1,Float:xx2,Float:xx3,Float:xx4,Float:xx5,Float:xx6,Float:xx7,Float:xx8)
  1247. {
  1248.     for(new i;i<MAX_SLOTS;i++)
  1249.     {
  1250.         if(p[i][xx1]!=0)
  1251.         {
  1252.             MovePlayerObject(i,p[i][xx1],xx2,xx3,xx4,xx5,xx6,xx7,xx8);
  1253.         }
  1254.     }
  1255.     o[xx1][x]=xx2;
  1256.     o[xx1][y]=xx3;
  1257.     o[xx1][z]=xx4;
  1258.     o[xx1][rx]=xx6;
  1259.     o[xx1][ry]=xx7;
  1260.     o[xx1][rz]=xx8;
  1261.     keep(xx1);
  1262.     return 1;
  1263. }
  1264. public remoteSetPos(xx1,Float:xx2,Float:xx3,Float:xx4)
  1265. {
  1266.     for(new i;i<MAX_SLOTS;i++)
  1267.     {
  1268.         if(p[i][xx1]!=0)
  1269.         {
  1270.             SetPlayerObjectPos(i,p[i][xx1],xx2,xx3,xx4);
  1271.         }
  1272.     }
  1273.     o[xx1][x]=xx2;
  1274.     o[xx1][y]=xx3;
  1275.     o[xx1][z]=xx4;
  1276.     keep(xx1);
  1277.     return 1;
  1278. }
  1279. public remoteSetRot(xx1,Float:xx2,Float:xx3,Float:xx4)
  1280. {
  1281.     for(new i;i<MAX_SLOTS;i++)
  1282.     {
  1283.         if(p[i][xx1]!=0)
  1284.         {
  1285.             SetPlayerObjectRot(i,p[i][xx1],xx2,xx3,xx4);
  1286.         }
  1287.     }
  1288.     o[xx1][rx]=xx2;
  1289.     o[xx1][ry]=xx3;
  1290.     o[xx1][rz]=xx4;
  1291.     keep(xx1);
  1292.     return 1;
  1293. }
  1294. public OnRconCommand(cmd[])
  1295. {
  1296.     if(strlen(cmd))
  1297.     {
  1298.         #define kaq cmd
  1299.         new key[40],str[300];
  1300.         for(new kaqa;;kaqa++)
  1301.         {
  1302.             if(kaq[kaqa]==' ')
  1303.             {
  1304.                 format(str,sizeof str,kaq[kaqa+1]);
  1305.                 if(!strcmp(key,"loadmap",true))
  1306.                 {
  1307.                     format(str,sizeof str,"%s.map",str);
  1308.                     loadMap(str);
  1309.                 }
  1310.                 if(!strcmp(key,"unloadmap",true))
  1311.                 {
  1312.                     format(str,sizeof str,"%s.map",str);
  1313.                     for(new i;i<maxRes;i++)
  1314.                     {
  1315.                         if(!strcmp(resName[i],str,true))fuckResource(i);
  1316.                     }
  1317.                 }
  1318.                 if(!strcmp(key,"reloadmap",true))
  1319.                 {
  1320.                     new name[128];
  1321.                     format(name,sizeof name,"unloadmap %s",str);
  1322.                     SendRconCommand(name);
  1323.                     format(name,sizeof name,"loadmap %s",str);
  1324.                     SendRconCommand(name);
  1325.                 }
  1326.                 break;
  1327.             }
  1328.             else key[kaqa]=kaq[kaqa];
  1329.         }
  1330.         #undef kaq
  1331.     }
  1332.     return 1;
  1333. }
  1334. fuckResource(resx)
  1335. {
  1336.     format(resName[resx],50,"\0");
  1337.     for(new n;n<obj;n++)if(o[n][mod]!=0&&o[n][resID]==resx)remoteDestroy(n);
  1338. }
  1339. public remoteDestroy(xx1)
  1340. {
  1341.     for(new i;i<MAX_SLOTS;i++)
  1342.     {
  1343.         if(p[i][xx1]!=0)
  1344.         {
  1345.             DestroyPlayerObject(i,p[i][xx1]);
  1346.             p[i][xx1]=0;
  1347.             SetPVarInt(i,"ooCrash",GetPVarInt(i,"ooCrash")-1);
  1348.         }
  1349.     }
  1350.     o[xx1][mod]=0;
  1351.     o[xx1][x]=0;
  1352.     o[xx1][y]=0;
  1353.     o[xx1][z]=0;
  1354.     o[xx1][rx]=0;
  1355.     o[xx1][ry]=0;
  1356.     o[xx1][rz]=0;
  1357.     #if VIRTUALWORLD==1
  1358.     o[xx1][vw]=-1;
  1359.     #endif
  1360.     #if INTERIOR==1
  1361.     o[xx1][inter]=-1;
  1362.     #endif
  1363.     invalid[xx1]=true;
  1364.     if(admin!=-1)
  1365.     {
  1366.         DeletePlayer3DTextLabel(admin,noob[xx1]);
  1367.         noob4[xx1]=false;
  1368.     }
  1369.     return 1;
  1370. }
  1371. public remoteStop(xx1)
  1372. {
  1373.     for(new i;i<MAX_SLOTS;i++)
  1374.     {
  1375.         if(p[i][xx1]!=0)
  1376.         {
  1377.             StopPlayerObject(i,p[i][xx1]);
  1378.         }
  1379.     }
  1380. }
  1381. public remoteConnectGM()log("Gamemode Connected!");
  1382. public remoteConnectFS()log("Filterscript Connected!");
  1383. public remoteMakeWait(playerid)
  1384. {
  1385.     if(wait[playerid])return 0;
  1386.     TogglePlayerControllable(playerid,0);
  1387.     wait[playerid]=true;
  1388.     #if TEXTDRAW==2
  1389.     TextDrawShowForPlayer(playerid,Textdraw0);
  1390.     #else
  1391.     #if TEXTDRAW==1
  1392.     GameTextForPlayer(playerid,"~w~LADE MAP...~n~~r~BITTE WARTEN",timeT,6);
  1393.     #endif
  1394.     #endif
  1395.     return 1;
  1396. }
  1397. #define remote:%1(%2) forward r_%1(%2);\
  1398. public r_%1(%2)
  1399.  
  1400. remote:getObjectPos(n)
  1401. {
  1402.     if(n<0||n>=MAX_STREAMOBJ||invalid[n])return false;
  1403.     CallRemoteFunction("opa_floatReturn","df",0,o[n][x]);
  1404.     CallRemoteFunction("opa_floatReturn","df",1,o[n][y]);
  1405.     CallRemoteFunction("opa_floatReturn","df",2,o[n][z]);
  1406.     return true;
  1407. }
  1408. remote:getObjectRot(n)
  1409. {
  1410.     if(n<0||n>=MAX_STREAMOBJ||invalid[n])return false;
  1411.     CallRemoteFunction("opa_floatReturn","df",0,o[n][rx]);
  1412.     CallRemoteFunction("opa_floatReturn","df",1,o[n][ry]);
  1413.     CallRemoteFunction("opa_floatReturn","df",2,o[n][rz]);
  1414.     return true;
  1415. }
  1416. remote:getObjectVirtualWorld(n)
  1417. {
  1418.     if(n<0||n>=MAX_STREAMOBJ||invalid[n])return false;
  1419.     CallRemoteFunction("opa_intReturn","dd",0,o[n][vw]);
  1420.     return true;
  1421. }
  1422. remote:getObjectInterior(n)
  1423. {
  1424.     if(n<0||n>=MAX_STREAMOBJ||invalid[n])return false;
  1425.     CallRemoteFunction("opa_intReturn","dd",0,o[n][inter]);
  1426.     return true;
  1427. }
  1428. remote:isValidObject(n)
  1429. {
  1430.     if(n<0||n>=MAX_STREAMOBJ||invalid[n])return false;
  1431.     return true;
  1432. }
  1433.  
  1434. log(string[])
  1435. {
  1436.     #if LOG_ACTIVE==1
  1437.     new kkk[134],xtime[3];
  1438.     gettime(xtime[0],xtime[1],xtime[2]);
  1439.     format(kkk,sizeof kkk,"[%02d:%02d:%02d]%s\r\n",xtime[0],xtime[1],xtime[2],string);
  1440.     new File:fff=fopen(LOG_FILE,io_append);
  1441.     fwrite(fff,kkk);
  1442.     fclose(fff);
  1443.     #endif
  1444.     return printf("[opa_objects] %s",string);
  1445. }
  1446. findZ(playerid)
  1447. {
  1448.     new Float:finder[3];
  1449.     GetPlayerPos(playerid,finder[0],finder[1],finder[2]);
  1450.     SetPlayerPosFindZ(playerid,finder[0],finder[1],finder[2]);
  1451. }
  1452. public OnPlayerDisconnect(playerid,reason)
  1453. {
  1454.     if(playerid==admin)logout();
  1455.     for(new n;n<obj;n++)
  1456.     {
  1457.         if(p[playerid][n]!=0)
  1458.         {
  1459.             DestroyPlayerObject(playerid,p[playerid][n]);
  1460.             p[playerid][n]=0;
  1461.         }
  1462.     }
  1463.     SetPVarInt(playerid,"ooCrash",0);
  1464.     warn[playerid]=false;
  1465.     wait[playerid]=false;
  1466.     if(!IsPlayerNPC(playerid))pcount--;
  1467.     if(playerid==dynamicPlayerBuffer)
  1468.     {
  1469.         dynamicPlayerBuffer=0;
  1470.         for(new i;i<MAX_SLOTS;i++)if(IsPlayerConnected(i)&&i!=playerid)dynamicPlayerBuffer=i;
  1471.     }
  1472. }
  1473. loadMap(path[])
  1474. {
  1475.     new name[128];
  1476.     format(name,sizeof name,"Lade Map %s...",path);
  1477.     log(name);
  1478.     new pathxx[120];
  1479.     format(pathxx,sizeof pathxx,"opa_objects/%s",path);
  1480.     new File:file=fopen(pathxx,io_read),line[300];
  1481.     if(!file)return !log("FEHLER: Map existiert nicht im \"scriptfiles/opa_objects\"-Ordner");
  1482.     resource++;
  1483.     format(resName[resource],50,"%s",path);
  1484.     while(fread(file,line,300)>0)
  1485.     {
  1486.         new bobj=-1;
  1487.         for(new i;i<MAX_STREAMOBJ;i++)
  1488.         {
  1489.             if(invalid[i]||i==obj)
  1490.             {
  1491.                 bobj=i;
  1492.                 break;
  1493.             }
  1494.         }
  1495.         if(bobj==-1)return !log("FEHLER: Objektlimit erreicht");
  1496.         new strlenn=strlen(line);
  1497.         new bool:fucking,bool:eklig;
  1498.         for(new i;i<strlenn;i++)
  1499.         {
  1500.             if(line[i]=='=')
  1501.             {
  1502.                 if(!eklig)
  1503.                 {
  1504.                     if(strlen(line)>=(i-strlen("object id")))
  1505.                     {
  1506.                         if(!strcmp(line[i-strlen("object id")],"object id",_,strlen("object id")))
  1507.                         {
  1508.                             eklig=true;
  1509.                         }
  1510.                     }
  1511.                     else if(strlen(line)>=(i-strlen("object name")))
  1512.                     {
  1513.                         if(!strcmp(line[i-strlen("object name")],"object name",_,strlen("object name")))
  1514.                         {
  1515.                             eklig=true;
  1516.                         }
  1517.                     }
  1518.                 }
  1519.                 else
  1520.                 {
  1521.                     new key;
  1522.                     if(!strcmp(line[i-strlen("model")],"model",_,strlen("model")))key=1;
  1523.                     else if(!strcmp(line[i-strlen("posX")],"posX",_,strlen("posX")))key=2;
  1524.                     else if(!strcmp(line[i-strlen("posY")],"posY",_,strlen("posY")))key=3;
  1525.                     else if(!strcmp(line[i-strlen("posZ")],"posZ",_,strlen("posZ")))key=4;
  1526.                     else if(!strcmp(line[i-strlen("rotX")],"rotX",_,strlen("rotX")))key=5;
  1527.                     else if(!strcmp(line[i-strlen("rotY")],"rotY",_,strlen("rotY")))key=6;
  1528.                     else if(!strcmp(line[i-strlen("rotZ")],"rotZ",_,strlen("rotZ")))key=7;
  1529.                     else if(!strcmp(line[i-strlen("interior")],"interior",_,strlen("interior")))key=8;
  1530.                     else if(!strcmp(line[i-strlen("dimension")],"dimension",_,strlen("dimension")))key=9;
  1531.                     else key=0;
  1532.                     i+=2;
  1533.                     new tester[100],b;
  1534.                     while(line[i]!='"')
  1535.                     {
  1536.                         tester[b]=line[i];
  1537.                         b++;
  1538.                         i++;
  1539.                     }
  1540.                     switch(key)
  1541.                     {
  1542.                         case 1:o[bobj][mod]=strval(tester);
  1543.                         case 2:o[bobj][x]=floatstr(tester);
  1544.                         case 3:o[bobj][y]=floatstr(tester);
  1545.                         case 4:o[bobj][z]=floatstr(tester);
  1546.                         case 5:o[bobj][rx]=floatstr(tester);
  1547.                         case 6:o[bobj][ry]=floatstr(tester);
  1548.                         case 7:o[bobj][rz]=floatstr(tester);
  1549.                         case 8:o[bobj][inter]=strval(tester);
  1550.                         case 9:o[bobj][vw]=strval(tester);
  1551.                     }
  1552.                 }
  1553.             }
  1554.             else if(line[i]=='/')fucking=true;
  1555.             else if(line[i]=='>'&&fucking)
  1556.             {
  1557.                 fucking=false;
  1558.                 eklig=false;
  1559.                 invalid[bobj]=false;
  1560.                 o[bobj][resID]=resource;
  1561.                 keep(bobj);
  1562.                 if(bobj==obj)obj++;
  1563.             }
  1564.             else fucking=false;
  1565.         }
  1566.     }
  1567.     format(name,sizeof name,"Map %s erfolgreich geladen",path);
  1568.     log(name);
  1569.     return fclose(file);
  1570. }
  1571. //----------DINI BY DRACOBLUE------------//
  1572. dini_Set(filename[],key[],value[]) {
  1573.     new key_length = strlen(key);
  1574.     new value_length = strlen(value);
  1575.     if (key_length==0 || key_length+value_length+2>DINI_MAX_STRING) return false;
  1576.  
  1577.     new File:fohnd, File:fwhnd;
  1578.     new tmpres[DINI_MAX_STRING];
  1579.     new bool:wasset=false;
  1580.     format(tmpres,sizeof(tmpres),"%s.part",filename);
  1581.     fremove(tmpres);
  1582.  
  1583.     fohnd=fopen(filename,io_read);
  1584.     if (!fohnd) return false;
  1585.  
  1586.     fwhnd=fopen(tmpres,io_write);
  1587.     if (!fwhnd) {
  1588.         fclose(fohnd);
  1589.         return false;
  1590.     }
  1591.  
  1592.     while (fread(fohnd,tmpres)) {
  1593.         if (
  1594.             !wasset
  1595.             && tmpres[key_length]==' '
  1596.             && !strcmp(tmpres, key, true, key_length)
  1597.         ) {
  1598.                 format(tmpres,sizeof(tmpres),"%s %s",key,value);
  1599.                 wasset=true;
  1600.         } else {
  1601.             DINI_StripNewLine(tmpres);
  1602.         }
  1603.         fwrite(fwhnd,tmpres);
  1604.         fwrite(fwhnd,"\r\n");
  1605.     }
  1606.  
  1607.     if (!wasset) {
  1608.         format(tmpres,sizeof(tmpres),"%s %s",key,value);
  1609.         fwrite(fwhnd,tmpres);
  1610.         fwrite(fwhnd,"\r\n");
  1611.     }
  1612.  
  1613.     fclose(fohnd);
  1614.     fclose(fwhnd);
  1615.  
  1616.     format(tmpres,sizeof(tmpres),"%s.part",filename);
  1617.     if (DINI_fcopytextfile(tmpres,filename)) {
  1618.         return fremove(tmpres);
  1619.     }
  1620.     return false;
  1621. }
  1622. dini_Get(filename[],key[]) {
  1623.     new tmpres[DINI_MAX_STRING];
  1624.  
  1625.     new key_length = strlen(key);
  1626.     if (key_length==0 || key_length+2>DINI_MAX_STRING) return tmpres;
  1627.  
  1628.     new File:fohnd;
  1629.     fohnd=fopen(filename,io_read);
  1630.     if (!fohnd) return tmpres;
  1631.  
  1632.     while (fread(fohnd,tmpres)) {
  1633.         if (
  1634.             tmpres[key_length]==' '
  1635.             && !strcmp(tmpres, key, true, key_length)
  1636.         ) {
  1637.             DINI_StripNewLine(tmpres);
  1638.             strmid(tmpres, tmpres, key_length + 1, strlen(tmpres), DINI_MAX_STRING);
  1639.             fclose(fohnd);
  1640.             return tmpres;
  1641.         }
  1642.     }
  1643.     fclose(fohnd);
  1644.     return tmpres;
  1645. }
  1646. DINI_fcopytextfile(oldname[],newname[]) {
  1647.     new File:ohnd,File:nhnd;
  1648.     if (!fexist(oldname)) return false;
  1649.     ohnd=fopen(oldname,io_read);
  1650.     if (!ohnd) return false;
  1651.     nhnd=fopen(newname,io_write);
  1652.     if (!nhnd) {
  1653.         fclose(ohnd);
  1654.         return false;
  1655.     }
  1656.     new tmpres[DINI_MAX_STRING];
  1657.     while (fread(ohnd,tmpres)) {
  1658.         DINI_StripNewLine(tmpres);
  1659.         format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
  1660.         fwrite(nhnd,tmpres);
  1661.     }
  1662.     fclose(ohnd);
  1663.     fclose(nhnd);
  1664.     return true;
  1665. }
  1666. DINI_StripNewLine(string[]) {
  1667.     new len = strlen(string);
  1668.     if (string[0]==0) return ;
  1669.     if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
  1670.         string[len - 1] = 0;
  1671.         if (string[0]==0) return ;
  1672.         if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
  1673.     }
  1674. }
  1675. //----------SSCANF BY Y_LESS------------//
  1676. stock sscanf(string[], format[], {Float,_}:...)
  1677. {
  1678.     #if defined isnull
  1679.         if (isnull(string))
  1680.     #else
  1681.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  1682.     #endif
  1683.         {
  1684.             return format[0];
  1685.         }
  1686.     #pragma tabsize 4
  1687.     new
  1688.         formatPos = 0,
  1689.         stringPos = 0,
  1690.         paramPos = 2,
  1691.         paramCount = numargs(),
  1692.         delim = ' ';
  1693.     while (string[stringPos] && string[stringPos] <= ' ')
  1694.     {
  1695.         stringPos++;
  1696.     }
  1697.     while (paramPos < paramCount && string[stringPos])
  1698.     {
  1699.         switch (format[formatPos++])
  1700.         {
  1701.             case '\0':
  1702.             {
  1703.                 return 0;
  1704.             }
  1705.             case 'i', 'd':
  1706.             {
  1707.                 new
  1708.                     neg = 1,
  1709.                     num = 0,
  1710.                     ch = string[stringPos];
  1711.                 if (ch == '-')
  1712.                 {
  1713.                     neg = -1;
  1714.                     ch = string[++stringPos];
  1715.                 }
  1716.                 do
  1717.                 {
  1718.                     stringPos++;
  1719.                     if ('0' <= ch <= '9')
  1720.                     {
  1721.                         num = (num * 10) + (ch - '0');
  1722.                     }
  1723.                     else
  1724.                     {
  1725.                         return -1;
  1726.                     }
  1727.                 }
  1728.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  1729.                 setarg(paramPos, 0, num * neg);
  1730.             }
  1731.             case 'h', 'x':
  1732.             {
  1733.                 new
  1734.                     num = 0,
  1735.                     ch = string[stringPos];
  1736.                 do
  1737.                 {
  1738.                     stringPos++;
  1739.                     switch (ch)
  1740.                     {
  1741.                         case 'x', 'X':
  1742.                         {
  1743.                             num = 0;
  1744.                             continue;
  1745.                         }
  1746.                         case '0' .. '9':
  1747.                         {
  1748.                             num = (num << 4) | (ch - '0');
  1749.                         }
  1750.                         case 'a' .. 'f':
  1751.                         {
  1752.                             num = (num << 4) | (ch - ('a' - 10));
  1753.                         }
  1754.                         case 'A' .. 'F':
  1755.                         {
  1756.                             num = (num << 4) | (ch - ('A' - 10));
  1757.                         }
  1758.                         default:
  1759.                         {
  1760.                             return -1;
  1761.                         }
  1762.                     }
  1763.                 }
  1764.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  1765.                 setarg(paramPos, 0, num);
  1766.             }
  1767.             case 'c':
  1768.             {
  1769.                 setarg(paramPos, 0, string[stringPos++]);
  1770.             }
  1771.             case 'f':
  1772.             {
  1773.                 setarg(paramPos, 0, _:floatstr(string[stringPos]));
  1774.             }
  1775.             case 'p':
  1776.             {
  1777.                 delim = format[formatPos++];
  1778.                 continue;
  1779.             }
  1780.             case '\'':
  1781.             {
  1782.                 new
  1783.                     end = formatPos - 1,
  1784.                     ch;
  1785.                 while ((ch = format[++end]) && ch != '\'') {}
  1786.                 if (!ch)
  1787.                 {
  1788.                     return -1;
  1789.                 }
  1790.                 format[end] = '\0';
  1791.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  1792.                 {
  1793.                     if (format[end + 1])
  1794.                     {
  1795.                         return -1;
  1796.                     }
  1797.                     return 0;
  1798.                 }
  1799.                 format[end] = '\'';
  1800.                 stringPos = ch + (end - formatPos);
  1801.                 formatPos = end + 1;
  1802.             }
  1803.             case 'u':
  1804.             {
  1805.                 new
  1806.                     end = stringPos - 1,
  1807.                     id = 0,
  1808.                     bool:num = true,
  1809.                     ch;
  1810.                 while ((ch = string[++end]) && ch != delim)
  1811.                 {
  1812.                     if (num)
  1813.                     {
  1814.                         if ('0' <= ch <= '9')
  1815.                         {
  1816.                             id = (id * 10) + (ch - '0');
  1817.                         }
  1818.                         else
  1819.                         {
  1820.                             num = false;
  1821.                         }
  1822.                     }
  1823.                 }
  1824.                 if (num && IsPlayerConnected(id))
  1825.                 {
  1826.                     setarg(paramPos, 0, id);
  1827.                 }
  1828.                 else
  1829.                 {
  1830.                     #if !defined foreach
  1831.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_SLOTS; %2++) if (IsPlayerConnected(%2))
  1832.                         #define __SSCANF_FOREACH__
  1833.                     #endif
  1834.                     string[end] = '\0';
  1835.                     num = false;
  1836.                     new
  1837.                         name[MAX_PLAYER_NAME];
  1838.                     id = end - stringPos;
  1839.                     foreach (Player, playerid)
  1840.                     {
  1841.                         GetPlayerName(playerid, name, sizeof (name));
  1842.                         if (!strcmp(name, string[stringPos], true, id))
  1843.                         {
  1844.                             setarg(paramPos, 0, playerid);
  1845.                             num = true;
  1846.                             break;
  1847.                         }
  1848.                     }
  1849.                     if (!num)
  1850.                     {
  1851.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  1852.                     }
  1853.                     string[end] = ch;
  1854.                     #if defined __SSCANF_FOREACH__
  1855.                         #undef foreach
  1856.                         #undef __SSCANF_FOREACH__
  1857.                     #endif
  1858.                 }
  1859.                 stringPos = end;
  1860.             }
  1861.             case 's', 'z':
  1862.             {
  1863.                 new
  1864.                     i = 0,
  1865.                     ch;
  1866.                 if (format[formatPos])
  1867.                 {
  1868.                     while ((ch = string[stringPos++]) && ch != delim)
  1869.                     {
  1870.                         setarg(paramPos, i++, ch);
  1871.                     }
  1872.                     if (!i)
  1873.                     {
  1874.                         return -1;
  1875.                     }
  1876.                 }
  1877.                 else
  1878.                 {
  1879.                     while ((ch = string[stringPos++]))
  1880.                     {
  1881.                         setarg(paramPos, i++, ch);
  1882.                     }
  1883.                 }
  1884.                 stringPos--;
  1885.                 setarg(paramPos, i, '\0');
  1886.             }
  1887.             default:
  1888.             {
  1889.                 continue;
  1890.             }
  1891.         }
  1892.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  1893.         {
  1894.             stringPos++;
  1895.         }
  1896.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  1897.         {
  1898.             stringPos++;
  1899.         }
  1900.         paramPos++;
  1901.     }
  1902.     do
  1903.     {
  1904.         if ((delim = format[formatPos++]) > ' ')
  1905.         {
  1906.             if (delim == '\'')
  1907.             {
  1908.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  1909.             }
  1910.             else if (delim != 'z')
  1911.             {
  1912.                 return delim;
  1913.             }
  1914.         }
  1915.     }
  1916.     while (delim > ' ');
  1917.     return 0;
  1918. }
Add Comment
Please, Sign In to add comment