Advertisement
Guest User

DInamicno kreiranje aktora by SHOMY

a guest
Jan 28th, 2019
1,332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.00 KB | None | 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", "Animacija 1\n Animacija 2\nAnimacija 3", "Izaberi","Izlaz");
  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) {
  174. // IN NEXT UPDATE
  175. }
  176. return 1;
  177. }
  178.  
  179. YCMD:aktorpanel(playerid, params[], help) {
  180.  
  181. #pragma unused help
  182. #pragma unused params
  183.  
  184. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste ulogovani kao RCON admin.");
  185. ShowPlayerDialog(playerid, DIALOG_AKTORPANEL, DIALOG_STYLE_LIST, "{0077C7}AKTOR {FFFFFF}PANEL", "Kreiraj aktora\nDodaj aktoru animaciju\nIzmeni aktora\nIzbrisi aktora","Izaberi","Izlaz");
  186. return 1;
  187. }
  188. GetNearestAktor( playerid ) {
  189. for( new b = 1; b < sizeof(AktorInfo); b++) {
  190. if( IsPlayerInRangeOfPoint( playerid, 4.0, AktorInfo[ b ][ aktorX ], AktorInfo[ b ][ aktorY ], AktorInfo[ b ][ aktorZ ] ) ) return b; }
  191. return -1;
  192. }
  193. stock NextAktorID(const len) {
  194. new id = (-1);
  195. for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  196. provjera = ( loop+1 );
  197. format( Data_, ( sizeof Data_ ), AKTOR_FILE, provjera );
  198. if(!fexist(Data_)) {
  199. id = ( provjera );
  200. break; } }
  201. return ( id );
  202. }
  203. stock SaveAktor(id) {
  204. new aktorFile[ 60 ];
  205. format(aktorFile, sizeof(aktorFile), AKTOR_FILE, id);
  206. new INI:File = INI_Open(aktorFile);
  207. INI_WriteString(File, "Ime", AktorInfo[ id ][ aktorime ]);
  208. INI_WriteFloat(File, "Lokacija_X", AktorInfo[ id ][ aktorX ]);
  209. INI_WriteFloat(File, "Lokacija_Y", AktorInfo[ id ][ aktorY ]);
  210. INI_WriteFloat(File, "Lokacija_Z", AktorInfo[ id ][ aktorZ ]);
  211. INI_WriteFloat(File, "Rotacija_A", AktorInfo[ id ][ aktorA ]);
  212. INI_WriteInt(File, "Skin", AktorInfo[ id ][ aktorskin ]);
  213. INI_Close(File);
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement