Guest User

Dinamicno kreiranje Aktora rework by nodze

a guest
Aug 9th, 2025
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.61 KB | Gaming | 0 0
  1. #include < a_samp >
  2. #include < YSI\y_ini >
  3. #include < YSI\y_commands >
  4. #include < sscanf2 >
  5.  
  6. enum {
  7.  
  8.     DIALOG_AKTORPANEL,
  9.     DIALOG_KREIRAJAKTORA1,
  10.     DIALOG_KREIRAJAKTORA2,
  11.     DIALOG_AKTORANIMACIJA,
  12.     DIALOG_IZMENIAKTORA,
  13.     DIALOG_IZMENIPOZICIJU,
  14.     DIALOG_IZMENIANIMACIJU,
  15.     DIALOG_IZMENISKIN,
  16.     DIALOG_IZMENIIME,
  17.     DIALOG_IZBRISIAKTORA,
  18.     DIALOG_BRISANJEAKTORA
  19. }
  20.  
  21. #define AKTOR_FILE          "/Aktori/%d.ini"
  22. #define MAX_AKTORI          300
  23.  
  24. enum AKTOR_INFO {
  25.  
  26.     Float:aktorX,
  27.     Float:aktorY,
  28.     Float:aktorZ,
  29.     Float:aktorA,
  30.     aktorskin,
  31.     aktorime[ 40 ],
  32.     aktoranimacija,
  33.     aktorid
  34. }
  35.  
  36. new AktorInfo[ MAX_AKTORI ][ AKTOR_INFO ], KreiraAktora[ MAX_PLAYERS ], Text3D:AktorLabel[ sizeof(AktorInfo) ];
  37.  
  38. public OnFilterScriptInit() {
  39.  
  40.     print("===========================\n\n- Aktor system by Shomy -\n- Ucitan -\n\n===========================");
  41.     return 1;
  42. }
  43.  
  44. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  45.  
  46.     if(dialogid == DIALOG_AKTORPANEL) {
  47.         if(!response) return 1;
  48.         if(response) {
  49.             switch(listitem) {
  50.                 case 0: return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
  51.                 case 1: return ShowPlayerDialog(playerid, DIALOG_AKTORANIMACIJA, DIALOG_STYLE_LIST, "{0077C7}ANIMACIJA {FFFFFF}AKTORA", "Animacija 1\n Animacija 2\nAnimacija 3", "Izaberi", "Izlaz");
  52.                 case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZMENI {FFFFFF}AKTORA", "Promeni poziciju\nPromeni skin\nPromeni ime\nPromeni animaciju", "Izaberi", "Izlaz");
  53.                 case 3: return ShowPlayerDialog(playerid, DIALOG_IZBRISIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZBRISI {FFFFFF}AKTORA", "Najblizeg aktora\nID aktora", "Izaberi", "Izlaz");
  54.             }
  55.         }
  56.     }
  57.     else if(dialogid == DIALOG_KREIRAJAKTORA1) {
  58.         if(!response) return 1;
  59.         if(response) {
  60.             new skinid, i = NextAktorID(MAX_AKTORI), Float:X, Float:Y, Float:Z, Float:A;
  61.             if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
  62.             if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
  63.             GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A);
  64.             AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A;
  65.             AktorInfo[ i ][ aktorskin ] = skinid;
  66.             AktorInfo[ i ][ aktoranimacija ] = 0;
  67.             KreiraAktora[ playerid ] = i;
  68.             ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
  69.         }
  70.     }
  71.     else if(dialogid == DIALOG_KREIRAJAKTORA2) {
  72.         if(!response) return 1;
  73.         if(response) {
  74.             new aktornick[ 40 ], str[ 56 ], i = KreiraAktora[ playerid ];
  75.             if(sscanf(inputtext, "s[40]", aktornick)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
  76.             AktorInfo[ i ][ aktorime ] = aktornick;
  77.             AktorInfo[ i ][ aktorid ] = CreateActor(AktorInfo[ i ][ aktorskin ], AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]);
  78.             SetPlayerPos(playerid, AktorInfo[ i ][ aktorX ]+2, AktorInfo[ i ][ aktorY ]+2, AktorInfo[ i ][ aktorZ ]);
  79.             format(str, sizeof(str), "%s {0077C7}[ID %d]", aktornick, i);
  80.             AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ]+1.0, 10.0, 0);
  81.             SaveAktor(i);
  82.             SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Ukoliko zelite da dodate aktoru animaciju - {0077C7}/aktorpanel");
  83.         }
  84.     }
  85.     else if(dialogid == DIALOG_IZMENIAKTORA) {
  86.         if(!response) return 1;
  87.         if(response) {
  88.             switch(listitem) {
  89.                 case 0: return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
  90.                 case 1: return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
  91.                 case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
  92.                 case 3: return ShowPlayerDialog(playerid, DIALOG_IZMENIANIMACIJU, DIALOG_STYLE_LIST, "{0077C7}Menja animaciju aktoru najblizem Vama", "Stance\nSit\nLay\nGround Sit", "Izaberi","Izlaz"); //za jos animacija dodaj naziv animacije, ostalo dole u dialog..
  93.             }
  94.         }
  95.     }
  96.     else if(dialogid == DIALOG_IZMENIPOZICIJU) {
  97.         if(!response) return 1;
  98.         if(response) {
  99.             new i, Float:X, Float:Y, Float:Z, Float:A, str[ 60 ];
  100.             if(sscanf(inputtext, "d", i)) return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
  101.             GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A);
  102.             SetPlayerPos(playerid, X+2, Y+2, Z);
  103.             SetActorPos(AktorInfo[ i ][ aktorid ], X, Y, Z);
  104.             SetActorFacingAngle(AktorInfo[ i ][ aktorid ], A);
  105.             Delete3DTextLabel(AktorLabel[ i ]);
  106.             format(str, sizeof(str), "%s {0077C7}[ID %d]", AktorInfo[ i ][ aktorime ], i);
  107.             AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, X,Y,Z+1.0, 10.0, 0);
  108.             AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A;
  109.             SaveAktor(i);
  110.             SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili poziciju aktoru.");
  111.         }
  112.     }
  113.     else if(dialogid == DIALOG_IZMENISKIN) {
  114.         if(!response) return 1;
  115.         if(response) {
  116.             new skinid, i = GetNearestAktor(playerid);
  117.             if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
  118.             if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
  119.             if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
  120.             DestroyActor(AktorInfo[ i ][ aktorid ]);
  121.             AktorInfo[ i ][ aktorid ] = CreateActor(skinid, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ] , AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]);
  122.             AktorInfo[ i ][ aktorskin ] = skinid;
  123.             SaveAktor(i);
  124.             SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili skin aktoru.");
  125.         }
  126.     }
  127.     else if(dialogid == DIALOG_IZMENIIME) {
  128.         if(!response) return 1;
  129.         if(response) {
  130.             new actime[ 40 ], str[ 60 ], i = GetNearestAktor(playerid);
  131.             if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
  132.             if(sscanf(inputtext, "s[40]", actime)) return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
  133.             format(str, sizeof(str), "%s {0077C7}[ID %d]", actime, i);
  134.             Update3DTextLabelText(AktorLabel[ i ], 0xFFFFFFFF, str);
  135.             AktorInfo[ i ][ aktorime ] = actime;
  136.             SaveAktor(i);
  137.             SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili ime aktoru.");
  138.         }
  139.     }
  140.     else if(dialogid == DIALOG_IZBRISIAKTORA) {
  141.         if(!response) return 1;
  142.         if(response) {
  143.             switch(listitem) {
  144.                 case 0: {
  145.                     if(GetNearestAktor(playerid) == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
  146.                     new i = GetNearestAktor(playerid), aktorFile[ 60 ], str[ 60 ];
  147.                     DestroyActor(AktorInfo[ i ][ aktorid ]);
  148.                     Delete3DTextLabel(AktorLabel[ i ]);
  149.                     AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0;
  150.                     format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
  151.                     SendClientMessage(playerid, 0x0077C7FF, str);
  152.                     format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i);
  153.                     if(fexist(aktorFile)) { fremove(aktorFile); }
  154.                 }
  155.                 case 1: return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
  156.             }
  157.         }
  158.     }
  159.     else if(dialogid == DIALOG_BRISANJEAKTORA) {
  160.         if(!response) return 1;
  161.         if(response) {
  162.             new i, str[ 60 ], aktorFile[ 60 ];
  163.             if(sscanf(inputtext, "%d", i)) return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
  164.             DestroyActor(AktorInfo[ i ][ aktorid ]);
  165.             Delete3DTextLabel(AktorLabel[ i ]);
  166.             AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0;
  167.             format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
  168.             SendClientMessage(playerid, 0x0077C7FF, str);
  169.             format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i);
  170.             if(fexist(aktorFile)) { fremove(aktorFile); }
  171.         }
  172.     }
  173.     else if(dialogid == DIALOG_AKTORANIMACIJA && response)
  174.     {
  175.         new i = GetNearestAktor(playerid);
  176.         if(i == -1) return SendErrorMessage(playerid, "Niste blizu aktora.");
  177.         switch(listitem)
  178.         {
  179.             case 0: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "DEALER", "DEALER_IDLE", 4.0, 1, 0, 0, 0, 0);
  180.             case 1: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "MISC", "SEAT_LR", 4.0, 1, 0, 0, 0, 0);
  181.             case 2: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "bather", 4.0, 0, 1, 1, 1, -1);
  182.             case 3: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "ParkSit_M_loop", 4.0, 0, 1, 1, 1, -1);
  183.         }
  184.         AktorInfo[ i ][ aktoranimacija ] = listitem+1;
  185.         SaveAktor(i);
  186.     }
  187.     return 1;
  188. }
  189.  
  190. CMD:aktorpanel(playerid, params[]) {
  191.  
  192.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste ulogovani kao RCON admin.");
  193.     ShowPlayerDialog(playerid, DIALOG_AKTORPANEL, DIALOG_STYLE_LIST, "{0077C7}AKTOR {FFFFFF}PANEL", "Kreiraj aktora\nDodaj aktoru animaciju\nIzmeni aktora\nIzbrisi aktora","Izaberi","Izlaz");
  194.     return 1;
  195. }
  196. GetNearestAktor( playerid ) {
  197.     for( new b = 1; b < sizeof(AktorInfo); b++) {
  198.         if( IsPlayerInRangeOfPoint( playerid, 4.0, AktorInfo[ b ][ aktorX ], AktorInfo[ b ][ aktorY ], AktorInfo[ b ][ aktorZ ] ) ) return b; }
  199.     return -1;
  200. }
  201. stock NextAktorID(const len) {
  202.     new id = (-1);
  203.     for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  204.        provjera = ( loop+1 );
  205.        format( Data_, ( sizeof Data_ ), AKTOR_FILE, provjera );
  206.        if(!fexist(Data_)) {
  207.           id = ( provjera );
  208.           break; } }
  209.     return ( id );
  210. }
  211. stock SaveAktor(id) {
  212.     new aktorFile[ 60 ];
  213.     format(aktorFile, sizeof(aktorFile), AKTOR_FILE, id);
  214.     new INI:File = INI_Open(aktorFile);
  215.     INI_WriteString(File, "Ime", AktorInfo[ id ][ aktorime ]);
  216.     INI_WriteFloat(File, "Lokacija_X", AktorInfo[ id ][ aktorX ]);
  217.     INI_WriteFloat(File, "Lokacija_Y", AktorInfo[ id ][ aktorY ]);
  218.     INI_WriteFloat(File, "Lokacija_Z", AktorInfo[ id ][ aktorZ ]);
  219.     INI_WriteFloat(File, "Rotacija_A", AktorInfo[ id ][ aktorA ]);
  220.     INI_WriteInt(File, "Skin", AktorInfo[ id ][ aktorskin ]);
  221.     INI_Close(File);
  222. }
Advertisement
Add Comment
Please, Sign In to add comment