Advertisement
Guest User

Dinamicne kapije by Shomy

a guest
Sep 23rd, 2018
1,735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.23 KB | None | 0 0
  1. #include < a_samp >
  2. #include < YSI\y_ini >
  3. #include < YSI\y_commands >
  4. #include < sscanf2 >
  5.  
  6. #define MAX_PRIVKAPIJE 500
  7. #define PRIVKAPIJE_FILE "/PrivatneKapije/%d.ini"
  8.  
  9. #define DIALOG_GATECREATE 1000
  10. #define DIALOG_GATECREATE2 1001
  11.  
  12. enum PRIVKAPIJE_INFO {
  13.  
  14. Float:pkX,
  15. Float:pkY,
  16. Float:pkZ,
  17. Float:pkRX,
  18. Float:pkRY,
  19. Float:pkRZ,
  20. Float:pkoX,
  21. Float:pkoY,
  22. Float:pkoZ,
  23. Float:pkoRX,
  24. Float:pkoRY,
  25. Float:pkoRZ,
  26. pkObjID,
  27. pkCloseTime,
  28. Float:pkCloseSpeed,
  29. pkForPlayer[ MAX_PLAYER_NAME ],
  30. bool:pkForVips,
  31. bool:pkForAll,
  32. bool:pkOtvorena,
  33. pkID
  34. }
  35.  
  36. new PkInfo[ MAX_PRIVKAPIJE ][ PRIVKAPIJE_INFO ], Text3D:PkLabel[ sizeof(PkInfo) ], ClosePKTimer[ MAX_PRIVKAPIJE ], KreiraPK[ MAX_PLAYERS ], bool:KreiraOtvorenuPK[ MAX_PLAYERS ];
  37.  
  38. forward TimerClosePK(i); public TimerClosePK(i) {
  39.  
  40. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  41. PkInfo[ i ][ pkOtvorena ] = false;
  42. return 1;
  43. }
  44. forward LoadPK(id, name[], value[]); public LoadPK(id, name[], value[]) {
  45.  
  46. INI_Float("Lokacija_X", PkInfo[ id ][ pkX ]);
  47. INI_Float("Lokacija_Y", PkInfo[ id ][ pkY ]);
  48. INI_Float("Lokacija_Z", PkInfo[ id ][ pkZ ]);
  49. INI_Float("Rotacija_X", PkInfo[ id ][ pkRX ]);
  50. INI_Float("Rotacija_Y", PkInfo[ id ][ pkRY ]);
  51. INI_Float("Rotacija_Z", PkInfo[ id ][ pkRZ ]);
  52. INI_Float("Otvorena_X", PkInfo[ id ][ pkoX ]);
  53. INI_Float("Otvorena_Y", PkInfo[ id ][ pkoY ]);
  54. INI_Float("Otvorena_Z", PkInfo[ id ][ pkoZ ]);
  55. INI_Float("Otvorena_RX", PkInfo[ id ][ pkoRX ]);
  56. INI_Float("Otvorena_RY", PkInfo[ id ][ pkoRY ]);
  57. INI_Float("Otvorena_RZ", PkInfo[ id ][ pkoRZ ]);
  58. INI_Int("Object_ID", PkInfo[ id ][ pkObjID ]);
  59. INI_Int("Close_Time", PkInfo[ id ][ pkCloseTime ]);
  60. INI_Float("Close_Speed", PkInfo[ id ][ pkCloseSpeed ]);
  61. INI_String("For_Player", PkInfo[ id ][ pkForPlayer ], 24);
  62. INI_Bool("For_VIPS", PkInfo[ id ][ pkForVips ]);
  63. INI_Bool("For_All", PkInfo[ id ][ pkForAll ]);
  64. return 1;
  65. }
  66. public OnGameModeInit() {
  67.  
  68. for(new i; i < MAX_PRIVKAPIJE; i++) {
  69. new pkFile[ 50 ], str[ 50 ];
  70. format(pkFile, sizeof(pkFile), PRIVKAPIJE_FILE, i);
  71. if(fexist(pkFile)) {
  72. INI_ParseFile(pkFile, "LoadPK", .bExtra = true, .extra = i);
  73. PkInfo[ i ][ pkID ] = CreateObject(PkInfo[ i ][ pkObjID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  74. format(str, sizeof(str), "Privatna kapija\n{0057AE}%s", PkInfo[ i ][ pkForPlayer ]);
  75. PkLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], 10.0, 0, 0);
  76. }
  77. }
  78. return 1;
  79. }
  80. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  81.  
  82. if(newkeys == KEY_CROUCH) {
  83. for(new i; i < MAX_PRIVKAPIJE; i++) {
  84. if(IsPlayerInRangeOfPoint(playerid, 6.0, PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ])) {
  85. if(!PkInfo[ i ][ pkForVips ] && !PkInfo[ i ][ pkForAll ]) {
  86. if(!strcmp(GetName(playerid), PkInfo[ i ][ pkForPlayer ], true)) {
  87. if(!PkInfo[ i ][ pkOtvorena ]) {
  88. ClosePKTimer[ i ] = SetTimerEx("TimerClosePK", PkInfo[ i ][ pkCloseTime ]*1000, false, "i", i);
  89. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkoX ], PkInfo[ i ][ pkoY ], PkInfo[ i ][ pkoZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkoRX ], PkInfo[ i ][ pkoRY ], PkInfo[ i ][ pkoRZ ]);
  90. SendClientMessage(playerid, -1, "Otvorili ste kapiju, zatvorice se automatski.");
  91. PkInfo[ i ][ pkOtvorena ] = true;
  92. }
  93. else {
  94. KillTimer(ClosePKTimer[ i ]);
  95. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  96. SendClientMessage(playerid, -1, "Zatvorili ste kapiju.");
  97. PkInfo[ i ][ pkOtvorena ] = false;
  98. }
  99. }
  100. else return SendClientMessage(playerid, -1, "Nije Vasa kapija.");
  101. }
  102. else if(PkInfo[ i ][ pkForVips ]) {
  103. //if(PlayerInfo[ playerid ][ pVIP ] > 0) {
  104. if(!PkInfo[ i ][ pkOtvorena ]) {
  105. ClosePKTimer[ i ] = SetTimerEx("TimerClosePK", PkInfo[ i ][ pkCloseTime ]*1000, false, "i", i);
  106. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkoX ], PkInfo[ i ][ pkoY ], PkInfo[ i ][ pkoZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkoRX ], PkInfo[ i ][ pkoRY ], PkInfo[ i ][ pkoRZ ]);
  107. SendClientMessage(playerid, -1, "Otvorili ste kapiju, zatvorice se automatski.");
  108. PkInfo[ i ][ pkOtvorena ] = true;
  109. }
  110. else {
  111. KillTimer(ClosePKTimer[ i ]);
  112. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  113. SendClientMessage(playerid, -1, "Zatvorili ste kapiju.");
  114. PkInfo[ i ][ pkOtvorena ] = false;
  115. }
  116. //}
  117. //else return SendClientMessage(playerid, -1, "Niste VIP.");
  118. }
  119. else if(PkInfo[ i ][ pkForAll ]) {
  120. if(!PkInfo[ i ][ pkOtvorena ]) {
  121. ClosePKTimer[ i ] = SetTimerEx("TimerClosePK", PkInfo[ i ][ pkCloseTime ]*1000, false, "i", i);
  122. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkoX ], PkInfo[ i ][ pkoY ], PkInfo[ i ][ pkoZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkoRX ], PkInfo[ i ][ pkoRY ], PkInfo[ i ][ pkoRZ ]);
  123. SendClientMessage(playerid, -1, "Otvorili ste kapiju, zatvorice se automatski.");
  124. PkInfo[ i ][ pkOtvorena ] = true;
  125. }
  126. else {
  127. KillTimer(ClosePKTimer[ i ]);
  128. MoveObject(PkInfo[ i ][ pkID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkCloseSpeed ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  129. SendClientMessage(playerid, -1, "Zatvorili ste kapiju.");
  130. PkInfo[ i ][ pkOtvorena ] = false;
  131. }
  132. }
  133. }
  134. }
  135. }
  136. return 1;
  137. }
  138. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) {
  139.  
  140. if(response == EDIT_RESPONSE_FINAL) {
  141. if(KreiraPK[ playerid ] != 0) {
  142. if(!KreiraOtvorenuPK[ playerid ]) {
  143. new i = KreiraPK[ playerid ];
  144. PkInfo[ i ][ pkX ] = fX;
  145. PkInfo[ i ][ pkY ] = fY;
  146. PkInfo[ i ][ pkZ ] = fZ;
  147. PkInfo[ i ][ pkRX ] = fRotX;
  148. PkInfo[ i ][ pkRY ] = fRotY;
  149. PkInfo[ i ][ pkRZ ] = fRotZ;
  150. DestroyObject(PkInfo[ i ][ pkID ]);
  151. PkInfo[ i ][ pkID ] = CreateObject(PkInfo[ i ][ pkObjID ], fX, fY, fZ, fRotX, fRotY, fRotZ);
  152. EditObject(playerid, PkInfo[ i ][ pkID ]);
  153. KreiraOtvorenuPK[ playerid ] = true;
  154. SendClientMessage(playerid, -1, "Sada sacuvajte poziciju otvorene kapije.");
  155. }
  156. else {
  157. new i = KreiraPK[ playerid ], str[ 50 ];
  158. PkInfo[ i ][ pkoX ] = fX;
  159. PkInfo[ i ][ pkoY ] = fY;
  160. PkInfo[ i ][ pkoZ ] = fZ;
  161. PkInfo[ i ][ pkoRX ] = fRotX;
  162. PkInfo[ i ][ pkoRY ] = fRotY;
  163. PkInfo[ i ][ pkoRZ ] = fRotZ;
  164. DestroyObject(PkInfo[ i ][ pkID ]);
  165. PkInfo[ i ][ pkID ] = CreateObject(PkInfo[ i ][ pkObjID ], PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], PkInfo[ i ][ pkRX ], PkInfo[ i ][ pkRY ], PkInfo[ i ][ pkRZ ]);
  166. if(!PkInfo[ i ][ pkForVips ] && !PkInfo[ i ][ pkForAll ]) { format(str, sizeof(str), "Privatna kapija\n{0057AE}%s", PkInfo[ i ][ pkForPlayer ]); PkLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ], 10.0, 0, 0); }
  167. SendClientMessage(playerid, -1, "Svrsili ste kreiranje :)");
  168. SavePK(i);
  169. KreiraPK[ playerid ] = 0;
  170. KreiraOtvorenuPK[ playerid ] = false;
  171. }
  172. }
  173. }
  174. return 1;
  175. }
  176. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  177.  
  178. if(dialogid == DIALOG_GATECREATE) {
  179. if(response) {
  180. switch(listitem) {
  181. case 0: {
  182. // ZA V.I.P
  183. }
  184. case 1: { ShowPlayerDialog(playerid, DIALOG_GATECREATE2, DIALOG_STYLE_INPUT, "KREIRANJE PRIVATNE KAPIJE","Unesite ime igraca za koga je ova kapija.","U redu","Izlaz"); }
  185. case 2: {
  186. new Float:X, Float:Y, Float:Z, i = KreiraPK[ playerid ];
  187. PkInfo[ i ][ pkForAll ] = true;
  188. GetPlayerPos(playerid, X,Y,Z);
  189. PkInfo[ i ][ pkID ] = CreateObject(PkInfo[ i ][ pkObjID ], X+3,Y+3,Z, 0.0, 0.0, 0.0);
  190. EditObject(playerid, PkInfo[ i ][ pkID ]);
  191. SendClientMessage(playerid, -1, "Sacuvajte pozicije kapije.");
  192. }
  193. }
  194. }
  195. }
  196. else if(dialogid == DIALOG_GATECREATE2) {
  197. if(!response) return 0;
  198. new ime[ MAX_PLAYER_NAME ], i = KreiraPK[ playerid ], Float:X, Float:Y, Float:Z;
  199. if(sscanf(inputtext, "s[24]", ime)) return ShowPlayerDialog(playerid, DIALOG_GATECREATE2, DIALOG_STYLE_INPUT, "KREIRANJE PRIVATNE KAPIJE","Unesite ime igraca za koga je ova kapija.","U redu","Izlaz");
  200. PkInfo[ i ][ pkForPlayer ] = ime;
  201. GetPlayerPos(playerid, X,Y,Z);
  202. PkInfo[ i ][ pkID ] = CreateObject(PkInfo[ i ][ pkObjID ], X+3,Y+3,Z, 0.0, 0.0, 0.0);
  203. EditObject(playerid, PkInfo[ i ][ pkID ]);
  204. SendClientMessage(playerid, -1, "Sacuvajte pozicije kapije.");
  205. }
  206. return 1;
  207. }
  208.  
  209. YCMD:kreirajkapiju(playerid, params[], help) {
  210.  
  211. #pragma unused help
  212.  
  213. new objid, closetime, Float:closespeed, i = NextPKID(MAX_PRIVKAPIJE);
  214. if(sscanf(params, "ddf", objid, closetime, closespeed)) return SendClientMessage(playerid, -1, "/kreirajpk [Object ID] [Vreme zatvaranja] [Brzina zatvaranja]");
  215. PkInfo[ i ][ pkObjID ] = objid;
  216. PkInfo[ i ][ pkCloseTime ] = closetime;
  217. PkInfo[ i ][ pkCloseSpeed ] = closespeed;
  218. KreiraPK[ playerid ] = i;
  219. ShowPlayerDialog(playerid, DIALOG_GATECREATE, DIALOG_STYLE_LIST, "KREIRANJE PRIVATNE KAPIJE","V.I.P\nIgrac\nSvi igraci","U redu","Izlaz");
  220. return 1;
  221. }
  222. YCMD:izbrisikapiju(playerid, params[], help) {
  223.  
  224. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste RCON admin.");
  225. new i = GetNearestPK(playerid), pkFile[ 60 ];
  226. if(i == -1) return SendClientMessage(playerid, -1, "Niste u blizini kapije.");
  227. DestroyObject(PkInfo[ i ][ pkID ]);
  228. Delete3DTextLabel(PkLabel[ i ]);
  229. PkInfo[ i ][ pkX ] = 0.0;
  230. PkInfo[ i ][ pkY ] = 0.0;
  231. PkInfo[ i ][ pkZ ] = 0.0;
  232. PkInfo[ i ][ pkRX ] = 0.0;
  233. PkInfo[ i ][ pkRY ] = 0.0;
  234. PkInfo[ i ][ pkRZ ] = 0.0;
  235. format(pkFile, sizeof(pkFile), PRIVKAPIJE_FILE, i);
  236. if(fexist(pkFile)) { fremove(pkFile); }
  237. return 1;
  238. }
  239.  
  240. stock NextPKID(const len) {
  241. new id = (-1);
  242. for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  243. provjera = ( loop+1 );
  244. format( Data_, ( sizeof Data_ ), PRIVKAPIJE_FILE, provjera );
  245. if(!fexist(Data_)) {
  246. id = ( provjera );
  247. break; } }
  248. return ( id );
  249. }
  250. GetNearestPK( playerid ) {
  251. for( new i = 1; i < MAX_PRIVKAPIJE; i++) {
  252. if( IsPlayerInRangeOfPoint( playerid, 6.0, PkInfo[ i ][ pkX ], PkInfo[ i ][ pkY ], PkInfo[ i ][ pkZ ] ) ) { return i; }
  253. }
  254. return -1;
  255. }
  256. stock SavePK(id) {
  257.  
  258. new pkFile[ 60 ];
  259. format(pkFile, sizeof(pkFile), PRIVKAPIJE_FILE, id);
  260. new INI:File = INI_Open(pkFile);
  261. INI_WriteFloat(File, "Lokacija_X", PkInfo[ id ][ pkX ]);
  262. INI_WriteFloat(File, "Lokacija_Y", PkInfo[ id ][ pkY ]);
  263. INI_WriteFloat(File, "Lokacija_Z", PkInfo[ id ][ pkZ ]);
  264. INI_WriteFloat(File, "Rotacija_X", PkInfo[ id ][ pkRX ]);
  265. INI_WriteFloat(File, "Rotacija_Y", PkInfo[ id ][ pkRY ]);
  266. INI_WriteFloat(File, "Rotacija_Z", PkInfo[ id ][ pkRZ ]);
  267. INI_WriteFloat(File, "Otvorena_X", PkInfo[ id ][ pkoX ]);
  268. INI_WriteFloat(File, "Otvorena_Y", PkInfo[ id ][ pkoY ]);
  269. INI_WriteFloat(File, "Otvorena_Z", PkInfo[ id ][ pkoZ ]);
  270. INI_WriteFloat(File, "Otvorena_RX", PkInfo[ id ][ pkoRX ]);
  271. INI_WriteFloat(File, "Otvorena_RY", PkInfo[ id ][ pkoRY ]);
  272. INI_WriteFloat(File, "Otvorena_RZ", PkInfo[ id ][ pkoRZ ]);
  273. INI_WriteInt(File, "Object_ID", PkInfo[ id ][ pkObjID ]);
  274. INI_WriteInt(File, "Close_Time", PkInfo[ id ][ pkCloseTime ]);
  275. INI_WriteFloat(File, "Close_Speed", PkInfo[ id ][ pkCloseSpeed ]);
  276. INI_WriteString(File, "For_Player", PkInfo[ id ][ pkForPlayer ]);
  277. INI_WriteBool(File, "For_VIPS", PkInfo[ id ][ pkForVips ]);
  278. INI_WriteBool(File, "For_All", PkInfo[ id ][ pkForAll ]);
  279. INI_Close(File);
  280. return 1;
  281. }
  282. stock GetName( playerid ) {
  283. new name[24];
  284. GetPlayerName(playerid,name,24);
  285. return name;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement