Advertisement
milous22

SA:MP In-game Object Editor 0.3e (2012)

Aug 8th, 2016
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 28.56 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. // rychlost
  4. #define MOVE_SPEED              100.0
  5. #define ACCEL_RATE              0.03
  6.  
  7. // mody
  8. #define MODE_NONE       0
  9. #define MODE_EDIT       1
  10. #define MODE_TEST       2
  11.  
  12. // pohyb
  13. #define MOVE_FORWARD            1
  14. #define MOVE_BACK               2
  15. #define MOVE_LEFT               3
  16. #define MOVE_RIGHT              4
  17. #define MOVE_FORWARD_LEFT       5
  18. #define MOVE_FORWARD_RIGHT      6
  19. #define MOVE_BACK_LEFT          7
  20. #define MOVE_BACK_RIGHT         8
  21.  
  22. #define INVISIBLE_MODEL_OBJECT  19999//19300
  23. #define DIALOG_ID               583
  24. #define VZDIALENOST_NOVEHO_OBJEKTU  20
  25. #define MAX_TLACITOK            9
  26. #define ZMENA_MODELU            "zmena_modelu"
  27. #define OZNACENY_OBJEKT         "oznaceny_objekt"
  28. #define LIST_POSLEDNY_OBJEKT    "list_posledny_objekt"
  29. #define LIST_PRVY_OBJEKT        "list_prvy_objekt"
  30.  
  31. enum veci
  32. {
  33.     stav,
  34.     menu_stav,
  35.     kamera_object,
  36.     smer_pohybu,
  37.     lr_stare,
  38.     ud_stare,
  39.     cas_pohyb,
  40.     Float:rychlost,
  41.     PlayerText:menu_txd,
  42.     vyber_exit
  43. }
  44. new Data[MAX_PLAYERS][veci],
  45.     Object_modelid[MAX_PLAYERS][MAX_OBJECTS];
  46.  
  47.  
  48. #if false
  49. public OnFilterScriptInit()
  50. {
  51. /*  print("\n--------------------------------------");
  52.     print(" Blank Filterscript by your name here");
  53.     print("--------------------------------------\n");*/
  54.    
  55.     for(new i = 0; i < MAX_PLAYERS; i++){
  56.         if(IsPlayerConnected(i)) OnPlayerConnect(i);
  57.     }
  58.     return 1;
  59. }
  60.  
  61. public OnFilterScriptExit()
  62. {
  63.     for(new i = 0; i < MAX_PLAYERS; i++){
  64.         if(IsPlayerConnected(i)) OnPlayerDisconnect(i,0);
  65.     }
  66.     return 1;
  67. }
  68. #else
  69. main()
  70. {
  71.     print("----------------------------------");
  72.     print("     Object Editor by milous22");
  73.     print("----------------------------------");
  74. }
  75.  
  76. public OnGameModeInit()
  77. {
  78.     SetWorldTime(12);
  79.     SetGameModeText("SA:MP Object Editor");
  80.     return 1;
  81. }
  82.  
  83. public OnGameModeExit()
  84. {
  85.     return 1;
  86. }
  87.  
  88. public OnPlayerRequestClass(playerid, classid)
  89. {
  90.     return 1;
  91. }
  92. #endif
  93.  
  94. public OnPlayerConnect(playerid)
  95. {
  96.     AntiDeAMX();
  97.     Data[playerid][stav]        = MODE_NONE;
  98.     Data[playerid][vyber_exit]  = 0;
  99.     Data[playerid][kamera_object] = CreatePlayerObject(playerid,INVISIBLE_MODEL_OBJECT,0.0,0.0,10.0,0.0,0.0,0.0,0.0);
  100.    
  101.     new nazov[9][] = {
  102.     "Editovat~n~polohu",
  103.     "Zmenit~n~model",
  104.     "Vymazat~n~objekt",
  105.     "Oznacit~n~objekt",
  106.     "Novy~n~objekt",
  107.     "List~n~objektov",
  108.     "Nacitat~n~mapu",
  109.     "Ulozit~n~mapu",
  110.     "Test~n~mapy"
  111.     };
  112.     for(new i = 0; i < MAX_TLACITOK; i++){
  113.         new PlayerText:var = CreatePlayerTextDraw(playerid,50+(i*67.5),425,nazov[i]);
  114.         PlayerTextDrawLetterSize(playerid,var,0.25,1.0);
  115.         PlayerTextDrawTextSize(playerid,var,30,50);
  116.         PlayerTextDrawAlignment(playerid,var,2);
  117.         PlayerTextDrawColor(playerid,var,0xFFFFFFFF); // 0xAAAAAAFF
  118.         PlayerTextDrawUseBox(playerid,var,true);
  119.         PlayerTextDrawBoxColor(playerid,var,0x00000066); // 0x44444466
  120.         PlayerTextDrawSetShadow(playerid,var,0);
  121.         PlayerTextDrawSetOutline(playerid,var,0);
  122.         PlayerTextDrawFont(playerid,var,1);
  123.         PlayerTextDrawSetSelectable(playerid,var,1);
  124.         if(i == 0) Data[playerid][menu_txd] = var;
  125.     }
  126.    
  127.     for(new i = 0; i < sizeof(Object_modelid[]); i++)
  128.         Object_modelid[playerid][i] = 0;
  129.        
  130.     return 1;
  131. }
  132.  
  133. public OnPlayerDisconnect(playerid, reason)
  134. {
  135.     for(new i = 0; i < MAX_OBJECTS; i++)
  136.         DestroyPlayerObject(playerid,i);
  137.        
  138.     for(new i = _:Data[playerid][menu_txd]; i < _:Data[playerid][menu_txd]+MAX_TLACITOK; i++){
  139.         PlayerTextDrawHide(playerid,PlayerText:i);
  140.         PlayerTextDrawDestroy(playerid,PlayerText:i);
  141.     }
  142.     return 1;
  143. }
  144.  
  145. public OnPlayerSpawn(playerid)
  146. {
  147.     if(Data[playerid][stav] == MODE_TEST){
  148.         new Float:x,Float:y,Float:z;
  149.         GetPlayerObjectPos(playerid,Data[playerid][kamera_object],x,y,z);
  150.         SetPlayerPos(playerid,x,y,z);
  151.     }else{
  152.         EditMode(playerid);
  153.     }
  154.     return 1;
  155. }
  156.  
  157. public OnPlayerDeath(playerid, killerid, reason)
  158. {
  159.     return 1;
  160. }
  161.  
  162. public OnVehicleSpawn(vehicleid)
  163. {
  164.     return 1;
  165. }
  166.  
  167. public OnVehicleDeath(vehicleid, killerid)
  168. {
  169.     return 1;
  170. }
  171.  
  172. public OnPlayerText(playerid, text[])
  173. {
  174.     return 1;
  175. }
  176.  
  177. public OnPlayerCommandText(playerid, cmdtext[])
  178. {
  179.     if(!strcmp(cmdtext, "/restart", true,8))
  180.     {
  181.         SpawnPlayer(playerid);
  182.         return 1;
  183.     }
  184.     if(!strcmp(cmdtext, "/koniec", true,7))
  185.     {
  186.         if(Data[playerid][stav] == MODE_TEST){
  187.             EditMode(playerid);
  188.         }
  189.         return 1;
  190.     }
  191. /*  if(!strcmp(cmdtext, "/load", true))
  192.     {
  193.         ShowPlayerDialog(playerid,DIALOG_ID+1,DIALOG_STYLE_INPUT,"Načítanie mapy","Zadaj názov mapy:","Načítať","Skončiť");
  194.         return 1;
  195.     }
  196.     if(!strcmp(cmdtext, "/uloz", true))
  197.     {
  198.         ShowPlayerDialog(playerid,DIALOG_ID+2,DIALOG_STYLE_INPUT,"Uloženie mapy","Zadaj názov mapy:","Uložiť","Skončiť");
  199.         return 1;
  200.     }
  201.     if(!strcmp(cmdtext, "/vytvor", true))
  202.     {
  203.         ShowPlayerDialog(playerid,DIALOG_ID+3,DIALOG_STYLE_INPUT,"Nový objekt","Zadaj ID objektu:","Vytvoriť","Skončiť");
  204.         return 1;
  205.     }
  206.     if(!strcmp(cmdtext, "/delete", true))
  207.     {
  208.         new oid = GetPVarInt(playerid,OZNACENY_OBJEKT);
  209.         if(oid <= 0) return SendClientMessage(playerid,0xFF00FFFF,"nemas oznaceny objekt");
  210.         DestroyPlayerObject(playerid,oid);
  211.         Object_modelid[playerid][oid-1] = 0;
  212.         CancelEdit(playerid);
  213.         DeletePVar(playerid,OZNACENY_OBJEKT);
  214.         DeletePVar(playerid,VYBER_OBJEKTU);
  215.         return 1;
  216.     }*/
  217.     return 0;
  218. }
  219.  
  220. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  221. {
  222.     return 1;
  223. }
  224.  
  225. public OnPlayerExitVehicle(playerid, vehicleid)
  226. {
  227.     return 1;
  228. }
  229.  
  230. public OnPlayerStateChange(playerid, newstate, oldstate)
  231. {
  232.     return 1;
  233. }
  234.  
  235. public OnPlayerEnterCheckpoint(playerid)
  236. {
  237.     return 1;
  238. }
  239.  
  240. public OnPlayerLeaveCheckpoint(playerid)
  241. {
  242.     return 1;
  243. }
  244.  
  245. public OnPlayerEnterRaceCheckpoint(playerid)
  246. {
  247.     return 1;
  248. }
  249.  
  250. public OnPlayerLeaveRaceCheckpoint(playerid)
  251. {
  252.     return 1;
  253. }
  254.  
  255. public OnRconCommand(cmd[])
  256. {
  257.     return 1;
  258. }
  259.  
  260. public OnPlayerRequestSpawn(playerid)
  261. {
  262.     return 1;
  263. }
  264.  
  265. public OnObjectMoved(objectid)
  266. {
  267.     return 1;
  268. }
  269.  
  270. public OnPlayerObjectMoved(playerid, objectid)
  271. {
  272.     return 1;
  273. }
  274.  
  275. public OnPlayerPickUpPickup(playerid, pickupid)
  276. {
  277.     return 1;
  278. }
  279.  
  280. public OnVehicleMod(playerid, vehicleid, componentid)
  281. {
  282.     return 1;
  283. }
  284.  
  285. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  286. {
  287.     return 1;
  288. }
  289.  
  290. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  291. {
  292.     return 1;
  293. }
  294.  
  295. public OnPlayerSelectedMenuRow(playerid, row)
  296. {
  297.     return 1;
  298. }
  299.  
  300. public OnPlayerExitedMenu(playerid)
  301. {
  302.     return 1;
  303. }
  304.  
  305. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  306. {
  307.     return 1;
  308. }
  309.  
  310. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  311. {
  312.     if(newkeys == KEY_SECONDARY_ATTACK){
  313.         /*if(Data[playerid][stav] == MODE_EDIT){
  314.             TestMode(playerid);
  315.         }else{// if(Data[playerid][stav] == MODE_TEST){
  316.             EditMode(playerid);
  317.         }*/
  318.         if(Data[playerid][stav] == MODE_EDIT){
  319.             /*if(GetPVarInt(playerid,VYBER_OBJEKTU)){
  320.                 if(Data[playerid][menu_stav] != 0) goto Vyber_objektu;
  321.                 OdznacitObjekt(playerid);
  322.                 ShowMenu(playerid,0);
  323.                 CancelEdit(playerid);
  324.                 DeletePVar(playerid,VYBER_OBJEKTU);
  325.                
  326.             }else{
  327.                 Vyber_objektu:
  328.                 OdznacitObjekt(playerid);
  329.                 ShowMenu(playerid,0);
  330.                 SetPVarInt(playerid,VYBER_OBJEKTU,1);
  331.                 SelectObject(playerid);
  332.             }*/
  333.             if(Data[playerid][menu_stav] == 0){
  334.                 if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  335.                     ShowMenu(playerid,1);
  336.                 else
  337.                     ShowMenu(playerid,6);
  338.             }else{
  339.                 //OdznacitObjekt(playerid);
  340.                 //CancelEdit(playerid);
  341. //              CancelSelectTextDraw(playerid);
  342. //              EditMode(playerid);
  343.             }
  344.         }
  345.     }
  346. /*  if(newkeys == KEY_SECONDARY_ATTACK){
  347.         if(GetPVarInt(playerid,VYBER_OBJEKTU)){
  348.             DeletePVar(playerid,VYBER_OBJEKTU);
  349.             CancelEdit(playerid);
  350.         }else{
  351.             SetPVarInt(playerid,VYBER_OBJEKTU,1);
  352.             SelectObject(playerid);
  353.         }
  354.     }*/
  355.     return 1;
  356. }
  357.  
  358. public OnRconLoginAttempt(ip[], password[], success)
  359. {
  360.     return 1;
  361. }
  362.  
  363. public OnPlayerUpdate(playerid)
  364. {
  365.     if(Data[playerid][stav] == MODE_EDIT)
  366.     {
  367.         new keys,ud,lr;
  368.         GetPlayerKeys(playerid,keys,ud,lr);
  369.  
  370.         if(Data[playerid][smer_pohybu] && (GetTickCount() - Data[playerid][cas_pohyb] > 100))
  371.         {
  372.             // If the last move was > 100ms ago, process moving the object the players camera is attached to
  373.             MoveCamera(playerid);
  374.         }
  375.  
  376.         // Is the players current key state different than their last keystate?
  377.         if(Data[playerid][ud_stare] != ud || Data[playerid][lr_stare] != lr)
  378.         {
  379.             if((Data[playerid][ud_stare] != 0 || Data[playerid][lr_stare] != 0) && ud == 0 && lr == 0)
  380.             {   // All keys have been released, stop the object the camera is attached to and reset the acceleration multiplier
  381.                 StopPlayerObject(playerid, Data[playerid][kamera_object]);
  382.                 Data[playerid][smer_pohybu]     = 0;
  383.                 Data[playerid][rychlost]    = 0.0;
  384.             }
  385.             else
  386.             {   // Indicates a new key has been pressed
  387.  
  388.                 // Get the direction the player wants to move as indicated by the keys
  389.                 Data[playerid][smer_pohybu] = GetMoveDirectionFromKeys(ud, lr);
  390.  
  391.                 // Process moving the object the players camera is attached to
  392.                 MoveCamera(playerid);
  393.             }
  394.         }
  395.         Data[playerid][ud_stare] = ud; Data[playerid][lr_stare] = lr; // Store current keys pressed for comparison next update
  396.         return 0;
  397.     }
  398.     return 1;
  399. }
  400.  
  401. public OnPlayerStreamIn(playerid, forplayerid)
  402. {
  403.     return 1;
  404. }
  405.  
  406. public OnPlayerStreamOut(playerid, forplayerid)
  407. {
  408.     return 1;
  409. }
  410.  
  411. public OnVehicleStreamIn(vehicleid, forplayerid)
  412. {
  413.     return 1;
  414. }
  415.  
  416. public OnVehicleStreamOut(vehicleid, forplayerid)
  417. {
  418.     return 1;
  419. }
  420.  
  421. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  422. {
  423. switch(dialogid){
  424.     case DIALOG_ID:{
  425.         if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  426.             ShowMenu(playerid,1);
  427.         else
  428.             ShowMenu(playerid,6);
  429.     }
  430.     case DIALOG_ID+1:{ // načítanie
  431.         if(response){
  432.             if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_ID+1,DIALOG_STYLE_INPUT,"Načítanie mapy","Zadaj názov mapy:\n(ak chceš prázdnu mapu zadaj \"nová\")","Načítať","Skončiť");
  433.             if(!strcmp(inputtext,"nová") || !strcmp(inputtext,"nova")){
  434.                 for(new i = 0; i < MAX_OBJECTS; i++)
  435.                     if(i != Data[playerid][kamera_object]){
  436.                         DestroyPlayerObject(playerid,i);
  437.                         Object_modelid[playerid][i] = 0;
  438.                     }
  439.                 GameTextForPlayer(playerid,"~g~Nova mapa nacitana",2000,4);
  440.                 DeletePVar(playerid,OZNACENY_OBJEKT);
  441.                 ShowMenu(playerid,6);
  442.                 return 1;
  443.             }
  444.             new cesta[128];
  445.             format(cesta,sizeof(cesta),"/mapy/%s.map",inputtext);
  446.             if(!fexist(cesta)) return ShowPlayerDialog(playerid,DIALOG_ID+1,DIALOG_STYLE_INPUT,"Načítanie mapy","Mapa s týmto názvom neexistuje!\nZadaj názov mapy:\n(ak chceš prázdnu mapu zadaj \"nová\")","Načítať","Skončiť");
  447.            
  448.             for(new i = 0; i < MAX_OBJECTS; i++)
  449.                 if(i != Data[playerid][kamera_object]){
  450.                     DestroyPlayerObject(playerid,i);
  451.                     Object_modelid[playerid][i] = 0;
  452.                 }
  453.             new File:subor = fopen(cesta,io_read),riadok[256];
  454.             while(fread(subor,riadok)){
  455.                 new idx = strfind(riadok,"CreateObject(")+13,model,Float:p[3],Float:r[3],Float:vzd;
  456.                 model = strval(strtok(riadok,idx,','));
  457.                 p[0] = floatstr(strtok(riadok,idx,','));
  458.                 p[1] = floatstr(strtok(riadok,idx,','));
  459.                 p[2] = floatstr(strtok(riadok,idx,','));
  460.                 r[0] = floatstr(strtok(riadok,idx,','));
  461.                 r[1] = floatstr(strtok(riadok,idx,','));
  462.                 r[2] = floatstr(strtok(riadok,idx,','));
  463.                 vzd = floatstr(strtok(riadok,idx,')'));
  464.  
  465. //              printf("%i %f %f %f, %f %f %f, %f",model,p[0],p[1],p[2],r[0],r[1],r[2],vzd);
  466.                 Object_modelid[playerid][CreatePlayerObject(playerid,model,p[0],p[1],p[2],r[0],r[1],r[2],vzd)-1] = model;
  467.             }
  468.             fclose(subor);
  469.             GameTextForPlayer(playerid,"~g~Mapa nacitana",2000,4);
  470.         }
  471.         if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  472.             ShowMenu(playerid,1);
  473.         else
  474.             ShowMenu(playerid,6);
  475.         return 1;
  476.     }
  477.     case DIALOG_ID+2:{
  478.         if(response){
  479.             new cesta[128];
  480.             format(cesta,sizeof(cesta),"/mapy/%s.map",inputtext);
  481.  
  482.             new File:subor = fopen(cesta,io_write),riadok[256];
  483.             for(new i = 0; i < MAX_OBJECTS; i++){
  484.                 if(i != Data[playerid][kamera_object]){
  485.                     if(IsValidPlayerObject(playerid,i)){
  486.                         new Float:p[3],Float:r[3];
  487.                         GetPlayerObjectPos(playerid,i,p[0],p[1],p[2]);
  488.                         GetPlayerObjectRot(playerid,i,r[0],r[1],r[2]);
  489. //                      printf("save %i %f %f %f %f %f %f",i,p[0],p[1],p[2],r[0],r[1],r[2]);
  490.                         format(riadok,sizeof(riadok),"CreateObject(%i,%f,%f,%f,%f,%f,%f,500.0);\r\n",Object_modelid[playerid][i-1],p[0],p[1],p[2],r[0],r[1],r[2]);
  491.                         fwrite(subor,riadok);
  492.                     }
  493.                 }
  494.             }
  495.             fclose(subor);
  496.             GameTextForPlayer(playerid,"~g~Mapa ulozena",2000,4);
  497.         }
  498.         if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  499.             ShowMenu(playerid,1);
  500.         else
  501.             ShowMenu(playerid,6);
  502.     }
  503.     case DIALOG_ID+3:{
  504.         if(response){
  505.             new id = strval(inputtext);
  506.             if(id < 0 || id > 20000){
  507.                 if(GetPVarInt(playerid,ZMENA_MODELU))
  508.                     ShowPlayerDialog(playerid,DIALOG_ID+3,DIALOG_STYLE_INPUT,"Zmeniť model","Zadaj ID objektu:","Zmeniť","Skončiť");
  509.                 else
  510.                     ShowPlayerDialog(playerid,DIALOG_ID+3,DIALOG_STYLE_INPUT,"Nový objekt","Zadaj ID objektu:","Vytvoriť","Skončiť");
  511.                 return 1;
  512.             }
  513.             new Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz;
  514.             if(GetPVarInt(playerid,ZMENA_MODELU)){
  515.                 new oid = GetPVarInt(playerid,OZNACENY_OBJEKT);
  516.                 if(oid != 0){
  517.                     GetPlayerObjectPos(playerid,oid,x,y,z);
  518.                     GetPlayerObjectRot(playerid,oid,rx,ry,rz);
  519.                     DestroyPlayerObject(playerid,oid);
  520.                 }
  521.             }else{
  522.                 new Float:vx,Float:vy,Float:vz;
  523.                 GetPlayerCameraPos(playerid,x,y,z);
  524.                 GetPlayerCameraFrontVector(playerid,vx,vy,vz);
  525.                 x += vx*VZDIALENOST_NOVEHO_OBJEKTU;
  526.                 y += vy*VZDIALENOST_NOVEHO_OBJEKTU;
  527.                 z += vz*VZDIALENOST_NOVEHO_OBJEKTU;
  528.             }
  529.            
  530.             new oid = CreatePlayerObject(playerid,id,x,y,z,rx,ry,rz,500.0);
  531.             if(oid == INVALID_OBJECT_ID){
  532.                 if(GetPVarInt(playerid,ZMENA_MODELU))
  533.                     ShowPlayerDialog(playerid,DIALOG_ID,DIALOG_STYLE_MSGBOX,"Zmeniť model","Nemôžeš vytvoriť viac objektov.","Skončiť","");
  534.                 else
  535.                     ShowPlayerDialog(playerid,DIALOG_ID,DIALOG_STYLE_MSGBOX,"Nový objekt","Nemôžeš vytvoriť viac objektov.","Skončiť","");
  536.                 return 1;
  537.             }
  538.             Object_modelid[playerid][oid-1] = id;
  539.             OznacitObjekt(playerid,oid,x,y,z);
  540.         }
  541.         if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  542.             ShowMenu(playerid,1);
  543.         else
  544.             ShowMenu(playerid,6);
  545.     }
  546.     case DIALOG_ID+4:{ // list
  547.         if(response){
  548.             if(!strcmp(inputtext,"ďalšia strana",true,13)){
  549.                 new str[4050],id = 0,prvy_obj = GetPVarInt(playerid,LIST_POSLEDNY_OBJEKT);
  550.                 DeletePVar(playerid,LIST_POSLEDNY_OBJEKT);
  551.                 SetPVarInt(playerid,LIST_PRVY_OBJEKT,prvy_obj);
  552.                 for(new i = 1; i < MAX_OBJECTS; i++){
  553.                     if(i != Data[playerid][kamera_object]){
  554.                         if(IsValidPlayerObject(playerid,i)){ // 13+3+5 = 21     190ks
  555.                             id++;
  556.                             if(id >= prvy_obj){
  557.                                 if(id >= prvy_obj+190){
  558.                                     strcat(str,"ďalšia strana");
  559.                                     SetPVarInt(playerid,LIST_POSLEDNY_OBJEKT,id);
  560.                                     break;
  561.                                 }
  562.                                 format(str,sizeof(str),"%sID:%i  model: %i\n",str,id,Object_modelid[playerid][i-1]);
  563.                             }
  564.                         }
  565.                     }
  566.                 }
  567.                 if(id == 0)
  568.                     ShowPlayerDialog(playerid,DIALOG_ID,DIALOG_STYLE_MSGBOX,"List objektov","Momentálne nemáš vytvorený žiadny objekt.","Skončiť","");
  569.                 else
  570.                     ShowPlayerDialog(playerid,DIALOG_ID+4,DIALOG_STYLE_LIST,"List objektov",str,"Označiť","Skončiť");
  571.             }else{
  572.                 if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  573.                     OdznacitObjekt(playerid);
  574.                    
  575.                 new id = 0,prvy_obj = GetPVarInt(playerid,LIST_PRVY_OBJEKT);
  576.                 for(new i = 1; i < MAX_OBJECTS; i++){
  577.                     if(i != Data[playerid][kamera_object]){
  578.                         if(IsValidPlayerObject(playerid,i)){
  579.                             id++;
  580.                             if(id == prvy_obj+listitem){
  581.                                 OznacitObjekt(playerid,i);
  582.                                 break;
  583.                             }
  584.                         }
  585.                     }
  586.                 }
  587.             }
  588.         }
  589.         if(GetPVarInt(playerid,OZNACENY_OBJEKT))
  590.             ShowMenu(playerid,1);
  591.         else
  592.             ShowMenu(playerid,6);
  593.     }
  594. }
  595. return 0;
  596. }
  597.  
  598. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  599. {
  600.     return 1;
  601. }
  602.  
  603. OznacitObjekt(playerid, objectid, Float:x = 0.0, Float:y = 0.0, Float:z = 0.0)
  604. {
  605.     SetPVarInt(playerid,OZNACENY_OBJEKT,objectid);
  606.     if(x+y+z == 0.0)
  607.         GetPlayerObjectPos(playerid,objectid,x,y,z);
  608.  
  609.     SetPlayerMapIcon(playerid,0,x,y,z,0,0xFF0000FF,MAPICON_GLOBAL);
  610.     for(new i = 0; i < 15; i++){
  611.         SetPlayerObjectMaterial(playerid,objectid,i,18749,"MatTextures","SAMPRed",0);
  612.     }
  613. }
  614. OdznacitObjekt(playerid)
  615. {
  616.     new oid = GetPVarInt(playerid,OZNACENY_OBJEKT);
  617.     RemovePlayerMapIcon(playerid,0);
  618.     DeletePVar(playerid,OZNACENY_OBJEKT);
  619.     if(oid != 0){
  620.         new model = Object_modelid[playerid][oid-1],Float:p[3],Float:r[3];
  621.         GetPlayerObjectPos(playerid,oid,p[0],p[1],p[2]);
  622.         GetPlayerObjectRot(playerid,oid,r[0],r[1],r[2]);
  623.         DestroyPlayerObject(playerid,oid);
  624.         Object_modelid[playerid][CreatePlayerObject(playerid,model,p[0],p[1],p[2],r[0],r[1],r[2],500.0)-1] = model;
  625.     }
  626. }
  627. ShowMenu(playerid,id,bool:show = true)
  628. {
  629. /*  "Editovat~n~polohu",0
  630.     "Novy~n~objekt",    1
  631.     "Zmenit~n~model",   2
  632.     "Vymazat~n~objekt", 3
  633.     "List~n~objektov",  4
  634.     "Oznacit~n~objekt",5
  635.     "Nacitat~n~mapu",   6
  636.     "Ulozit~n~mapu",    7
  637.     "Test~n~mapy"       8
  638.  
  639.     "Editovat~n~polohu",0
  640.     "Zmenit~n~model",   1
  641.     "Vymazat~n~objekt", 2
  642.     "Oznacit~n~objekt", 3
  643.     "Novy~n~objekt",    4
  644.     "List~n~objektov",  5
  645.     "Nacitat~n~mapu",   6
  646.     "Ulozit~n~mapu",    7
  647.     "Test~n~mapy"       8
  648.     */
  649.  
  650.     for(new i = _:Data[playerid][menu_txd]; i < _:Data[playerid][menu_txd]+MAX_TLACITOK; i++){
  651.     switch(id){
  652.         case 0:{
  653.             PlayerTextDrawColor(playerid,PlayerText:i,0xAAAAAAFF); // 0xAAAAAAFF
  654.             PlayerTextDrawBoxColor(playerid,PlayerText:i,0x44444466); // 0x44444466
  655.             PlayerTextDrawSetSelectable(playerid,PlayerText:i,0);
  656.             PlayerTextDrawShow(playerid,PlayerText:i);
  657.         }
  658.         case 1:{
  659.             PlayerTextDrawColor(playerid,PlayerText:i,0xFFFFFFFF); // 0xAAAAAAFF
  660.             PlayerTextDrawBoxColor(playerid,PlayerText:i,0x00000066); // 0x44444466
  661.             PlayerTextDrawSetSelectable(playerid,PlayerText:i,1);
  662.             PlayerTextDrawShow(playerid,PlayerText:i);
  663.         }
  664.         case 2:{ // skryť
  665.             PlayerTextDrawSetSelectable(playerid,PlayerText:i,0);
  666.             PlayerTextDrawHide(playerid,PlayerText:i);
  667.         }
  668.         case 6:{
  669.             switch(i - _:Data[playerid][menu_txd]){
  670.                 case 0..2:{
  671.                     PlayerTextDrawColor(playerid,PlayerText:i,0xAAAAAAFF); // 0xAAAAAAFF
  672.                     PlayerTextDrawBoxColor(playerid,PlayerText:i,0x44444466); // 0x44444466
  673.                     PlayerTextDrawSetSelectable(playerid,PlayerText:i,0);
  674.                 }default:{
  675.                     PlayerTextDrawColor(playerid,PlayerText:i,0xFFFFFFFF); // 0xAAAAAAFF
  676.                     PlayerTextDrawBoxColor(playerid,PlayerText:i,0x00000066); // 0x44444466
  677.                     PlayerTextDrawSetSelectable(playerid,PlayerText:i,1);
  678.                 }
  679.             }
  680.             PlayerTextDrawShow(playerid,PlayerText:i);
  681.         }
  682.     }
  683.     }
  684.     if(show){
  685.         if(id == 0)
  686.             CancelSelectTextDraw(playerid);
  687.         else{
  688.             SelectTextDraw(playerid,0x00FF00FF);
  689.             Data[playerid][vyber_exit] = 1;
  690.         }
  691.     }
  692.        
  693.     Data[playerid][menu_stav] = id;
  694. }
  695.  
  696. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  697. {
  698.     if(type == SELECT_OBJECT_PLAYER_OBJECT){
  699.         OznacitObjekt(playerid,objectid,fX,fY,fZ);
  700. //      EditPlayerObject(playerid, objectid);
  701.         ShowMenu(playerid,1);
  702.     }
  703.     return 1;
  704. }
  705.  
  706. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  707. {
  708.     if(playerobject){
  709.         if(response == EDIT_RESPONSE_FINAL){
  710.             SetPlayerObjectPos(playerid,objectid,fX,fY,fZ);
  711.             SetPlayerObjectRot(playerid,objectid,fRotX,fRotY,fRotZ);
  712.             ShowMenu(playerid,1);
  713.         }else if(response == EDIT_RESPONSE_CANCEL){
  714.             new Float:p[3],Float:r[3];
  715.             GetPlayerObjectPos(playerid,objectid,p[0],p[1],p[2]);
  716.             GetPlayerObjectRot(playerid,objectid,r[0],r[1],r[2]);
  717.             SetPlayerObjectPos(playerid,objectid,p[0],p[1],p[2]);
  718.             SetPlayerObjectRot(playerid,objectid,r[0],r[1],r[2]);
  719.         }
  720.     }
  721. }
  722.  
  723. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
  724. {
  725.     if(Data[playerid][stav] == MODE_EDIT){
  726.         Data[playerid][vyber_exit] = 0;
  727.         switch(_:(playertextid-Data[playerid][menu_txd])){
  728.             case 0:{ // editovať
  729.                 ShowMenu(playerid,0,false);
  730.                 EditPlayerObject(playerid, GetPVarInt(playerid,OZNACENY_OBJEKT));
  731.             }
  732.             case 1:{ // zmeniť
  733.                 SetPVarInt(playerid,ZMENA_MODELU,1);
  734.                 ShowPlayerDialog(playerid,DIALOG_ID+3,DIALOG_STYLE_INPUT,"Zmeniť model","Zadaj ID objektu:","Zmeniť","Skončiť");
  735.             }
  736.             case 2:{ // zmazať
  737.                 new oid = GetPVarInt(playerid,OZNACENY_OBJEKT);
  738.                 DestroyPlayerObject(playerid,oid);
  739.                 Object_modelid[playerid][oid-1] = 0;
  740.                 OdznacitObjekt(playerid);
  741.                 ShowMenu(playerid,6);
  742.             }
  743.             case 3:{ // označiť
  744.                 OdznacitObjekt(playerid);
  745.                 ShowMenu(playerid,0,false);
  746.                 SelectObject(playerid);
  747.                 Data[playerid][vyber_exit] = 2;
  748.             }
  749.             case 4:{ // nový objekt
  750.                 DeletePVar(playerid,ZMENA_MODELU);
  751.                 ShowPlayerDialog(playerid,DIALOG_ID+3,DIALOG_STYLE_INPUT,"Nový objekt","Zadaj ID objektu:","Vytvoriť","Skončiť");
  752.             }
  753.             case 5:{ // list
  754.                 DeletePVar(playerid,LIST_POSLEDNY_OBJEKT);
  755.                 SetPVarInt(playerid,LIST_PRVY_OBJEKT,1);
  756.                 new str[4000],id = 0;
  757.                 for(new i = 1; i < MAX_OBJECTS; i++){
  758.                     if(i != Data[playerid][kamera_object]){
  759.                         if(IsValidPlayerObject(playerid,i)){ // 13+3+5 = 21     190ks
  760.                             id++;
  761.                             if(id >= 190){
  762.                                 strcat(str,"ďalšia strana");
  763.                                 SetPVarInt(playerid,LIST_POSLEDNY_OBJEKT,id);
  764.                                 break;
  765.                             }
  766.                             format(str,sizeof(str),"%sID:%i  model: %i\n",str,id,Object_modelid[playerid][i-1]);
  767.                         }
  768.                     }
  769.                 }
  770.                 if(id == 0)
  771.                     ShowPlayerDialog(playerid,DIALOG_ID,DIALOG_STYLE_MSGBOX,"List objektov","Momentálne nemáš vytvorený žiadny objekt.","Skončiť","");
  772.                 else
  773.                     ShowPlayerDialog(playerid,DIALOG_ID+4,DIALOG_STYLE_LIST,"List objektov",str,"Označiť","Skončiť");
  774.             }
  775.             case 6:{ // načítať
  776.                 ShowPlayerDialog(playerid,DIALOG_ID+1,DIALOG_STYLE_INPUT,"Načítanie mapy","Zadaj názov mapy:\n(ak chceš prázdnu mapu zadaj \"nová\")","Načítať","Skončiť");
  777.             }
  778.             case 7:{ // uložiť
  779.                 ShowPlayerDialog(playerid,DIALOG_ID+2,DIALOG_STYLE_INPUT,"Uloženie mapy","Zadaj názov mapy:","Uložiť","Skončiť");
  780.             }
  781.             case 8:{ // test
  782.                 if(Data[playerid][stav] == MODE_EDIT)
  783.                     TestMode(playerid);
  784.             }
  785.         }
  786.     }
  787.     return 1;
  788. }
  789.  
  790. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  791. {
  792.     if(Data[playerid][stav] == MODE_EDIT){
  793.         if(_:clickedid == 65535){
  794.             switch(Data[playerid][vyber_exit]){
  795.                 case 1:{
  796.                     if(Data[playerid][menu_stav] != 0){
  797.                         Data[playerid][vyber_exit] = 0;
  798.                         ShowMenu(playerid,0,false);
  799.                     }
  800.                 }
  801.                 case 2:{
  802.                     Data[playerid][vyber_exit] = 0;
  803.                 }
  804.                 default:{}
  805.             }
  806.             return 1;
  807.         }
  808.     }
  809.     return 1;
  810. }
  811.  
  812. stock GetMoveDirectionFromKeys(ud, lr)
  813. {
  814.     new direction = 0;
  815.  
  816.     if(lr < 0)
  817.     {
  818.         if(ud < 0)      direction = MOVE_FORWARD_LEFT;  // Up & Left key pressed
  819.         else if(ud > 0) direction = MOVE_BACK_LEFT;     // Back & Left key pressed
  820.         else            direction = MOVE_LEFT;          // Left key pressed
  821.     }
  822.     else if(lr > 0)     // Right pressed
  823.     {
  824.         if(ud < 0)      direction = MOVE_FORWARD_RIGHT;  // Up & Right key pressed
  825.         else if(ud > 0) direction = MOVE_BACK_RIGHT;     // Back & Right key pressed
  826.         else            direction = MOVE_RIGHT;          // Right key pressed
  827.     }
  828.     else if(ud < 0)     direction = MOVE_FORWARD;   // Up key pressed
  829.     else if(ud > 0)     direction = MOVE_BACK;      // Down key pressed
  830.  
  831.     return direction;
  832. }
  833.  
  834. //--------------------------------------------------
  835.  
  836. stock MoveCamera(playerid)
  837. {
  838.     new Float:FV[3], Float:CP[3];
  839.     GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]);          //  Cameras position in space
  840.     GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);  //  Where the camera is looking at
  841.  
  842.     // Increases the acceleration multiplier the longer the key is held
  843.     if(Data[playerid][rychlost] <= 1) Data[playerid][rychlost] += ACCEL_RATE;
  844.  
  845.     // Determine the speed to move the camera based on the acceleration multiplier
  846.     new Float:speed = MOVE_SPEED * Data[playerid][rychlost];
  847.  
  848.     // Calculate the cameras next position based on their current position and the direction their camera is facing
  849.     new Float:X, Float:Y, Float:Z;
  850.     GetNextCameraPosition(Data[playerid][smer_pohybu], CP, FV, X, Y, Z);
  851.     MovePlayerObject(playerid, Data[playerid][kamera_object], X, Y, Z, speed);
  852.  
  853.     // Store the last time the camera was moved as now
  854.     Data[playerid][cas_pohyb] = GetTickCount();
  855.     return 1;
  856. }
  857.  
  858. //--------------------------------------------------
  859.  
  860. stock GetNextCameraPosition(move_smer_pohybu, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
  861. {
  862.     // Calculate the cameras next position based on their current position and the direction their camera is facing
  863.     #define OFFSET_X (FV[0]*6000.0)
  864.     #define OFFSET_Y (FV[1]*6000.0)
  865.     #define OFFSET_Z (FV[2]*6000.0)
  866.     switch(move_smer_pohybu)
  867.     {
  868.         case MOVE_FORWARD:
  869.         {
  870.             X = CP[0]+OFFSET_X;
  871.             Y = CP[1]+OFFSET_Y;
  872.             Z = CP[2]+OFFSET_Z;
  873.         }
  874.         case MOVE_BACK:
  875.         {
  876.             X = CP[0]-OFFSET_X;
  877.             Y = CP[1]-OFFSET_Y;
  878.             Z = CP[2]-OFFSET_Z;
  879.         }
  880.         case MOVE_LEFT:
  881.         {
  882.             X = CP[0]-OFFSET_Y;
  883.             Y = CP[1]+OFFSET_X;
  884.             Z = CP[2];
  885.         }
  886.         case MOVE_RIGHT:
  887.         {
  888.             X = CP[0]+OFFSET_Y;
  889.             Y = CP[1]-OFFSET_X;
  890.             Z = CP[2];
  891.         }
  892.         case MOVE_BACK_LEFT:
  893.         {
  894.             X = CP[0]+(-OFFSET_X - OFFSET_Y);
  895.             Y = CP[1]+(-OFFSET_Y + OFFSET_X);
  896.             Z = CP[2]-OFFSET_Z;
  897.         }
  898.         case MOVE_BACK_RIGHT:
  899.         {
  900.             X = CP[0]+(-OFFSET_X + OFFSET_Y);
  901.             Y = CP[1]+(-OFFSET_Y - OFFSET_X);
  902.             Z = CP[2]-OFFSET_Z;
  903.         }
  904.         case MOVE_FORWARD_LEFT:
  905.         {
  906.             X = CP[0]+(OFFSET_X  - OFFSET_Y);
  907.             Y = CP[1]+(OFFSET_Y  + OFFSET_X);
  908.             Z = CP[2]+OFFSET_Z;
  909.         }
  910.         case MOVE_FORWARD_RIGHT:
  911.         {
  912.             X = CP[0]+(OFFSET_X  + OFFSET_Y);
  913.             Y = CP[1]+(OFFSET_Y  - OFFSET_X);
  914.             Z = CP[2]+OFFSET_Z;
  915.         }
  916.     }
  917. }
  918. //--------------------------------------------------
  919.  
  920. stock TestMode(playerid)
  921. {
  922.     Data[playerid][stav] = MODE_TEST;
  923.     new Float:x,Float:y,Float:z;
  924.     StopPlayerObject(playerid,Data[playerid][kamera_object]);
  925.     GetPlayerObjectPos(playerid,Data[playerid][kamera_object],x,y,z);
  926.     SetSpawnInfo(playerid,0,0,x,y,z,0.0,0,0,0,0,0,0);
  927.  
  928.     ShowMenu(playerid,2,false);
  929.     CancelEdit(playerid);
  930.     CancelSelectTextDraw(playerid);
  931.     TogglePlayerSpectating(playerid, false);
  932.     return 1;
  933. }
  934.  
  935. //--------------------------------------------------
  936.  
  937. stock EditMode(playerid)
  938. {
  939. /*  new Float:X, Float:Y, Float:Z;
  940.     GetPlayerPos(playerid, X, Y, Z);*/
  941.    
  942. //  if(Data[playerid][kamera_object] == INVALID_OBJECT_ID)
  943. //      Data[playerid][kamera_object] = CreatePlayerObject(playerid,19300,0.0,0.0,10.0,0.0,0.0,0.0);
  944. //  else
  945. //      SetObjectPos(Data[playerid][kamera_object],X,Y,Z);
  946.  
  947.     Data[playerid][lr_stare]    = 0;
  948.     Data[playerid][ud_stare]    = 0;
  949.     Data[playerid][smer_pohybu] = 0;
  950.     Data[playerid][cas_pohyb]   = 0;
  951.     Data[playerid][rychlost]    = 0.0;
  952.    
  953.  
  954.     TogglePlayerSpectating(playerid, true);
  955.  
  956.     AttachCameraToPlayerObject(playerid, Data[playerid][kamera_object]);
  957.  
  958.     Data[playerid][stav] = MODE_EDIT;
  959.     ShowMenu(playerid,0);
  960.     return 1;
  961. }
  962.  
  963. //--------------------------------------------------
  964.  
  965. stock strtok(const str[], &index, seperator=' ')
  966. {
  967.     new length = strlen(str);
  968.     new offset = index;
  969.     new result[100];
  970.     while ((index < length) && (str[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
  971.     {
  972.         result[index - offset] = str[index];
  973.         index++;
  974.     }
  975.  
  976.     result[index - offset] = EOS;
  977.     if ((index < length) && (str[index] == seperator))
  978.     {
  979.         index++;
  980.     }
  981.     return result;
  982. }
  983.  
  984. //--------------------------------------------------
  985. AntiDeAMX()
  986. {
  987.     new a[][] =
  988.     {
  989.         "Unarmed (Fist)",
  990.         "Brass K"
  991.     };
  992.     #pragma unused a
  993. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement