Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
968
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.93 KB | None | 0 0
  1. #include <a_samp>
  2. #include <sqlitei>
  3. #include <sscanf2>
  4. #include <streamer>
  5. #include <sqlitei>
  6. #include <YSI\y_iterate>
  7. #include <zcmd>
  8.  
  9. //------------- Boje ---------------//
  10. #define BELA "{FFFFFF}"
  11. #define ZELENA "{6EF83C}"
  12. #define RG "{008CDD}"
  13. #define CRVENA "{F81414}"
  14. #define ZUTA "{F3FF02}"
  15. #define PPLAVA "{0049FF}"
  16. #define SPLAVA "{00C0FF}"
  17. #define SRWBOJA "{0099FF}"
  18. #define GLAVNAA "{F20D0D}"
  19. #define COL_TEAM1 "{F81414}"
  20. #define COL_TEAM2 "{0049FF}"
  21. #define C_BELA "{FFFFFF}"
  22. #define PLAVA "{22C7F5}"
  23. #define PLAVA2 "{0049FF}"
  24. #define ROZA "{FF00EA}"
  25. #define CMDC "{B8FF02}"
  26. #define SERVER "{AFE7FF}"
  27. #define SZELENA "{C9FFAB}"
  28. #define LJUB "{EE11EE}"
  29. #define SIVA "{C0C0C0}"
  30. #define WBOJA "{E6E61A}"
  31. #define CRVENA2 "{FF6347}"
  32. #define esco_boja "{1A80D2}"
  33. #define ORANGE "{FFAF00}"
  34. #define SCRV2 "{FF6347}"
  35. #define BALLASC "{D1345B}"
  36. #define HZELENA "{04CC29}"
  37. #define GROVE 0x00D900C8
  38. #define AZUTA 0xFFC801C8
  39. #define BELA2 0xFFFFFFAA
  40. #define PROX 0xC2A2DAAA
  41. #define SCRVENA 0xFF6347AA
  42. #define COLOR_GRAD2 0xBFC0C2FF
  43. #define COLOR_GREEN 0x33AA33AA
  44. #define TEAM_HIT_COLOR 0xFFFFFF00
  45. #define COLOR_YELLOW 0xDABB3EAA
  46. #define SVETLOPLAVA 0x33CCFFAA
  47. #define COLOR_GREY 0xAFAFAFAA
  48. #define COLOR_RED 0xAA3333AA
  49. #define LJUBICASTA 0x952E99FF
  50. #define GREEN 0x21DD00FF
  51. #define COLOR_LIGHTRED 0xFF6347AA
  52. #define COLOR_PLAVA 0x2641FEAA
  53. #define COLOR_WHITE 0xFFFFFFFF
  54. #define COLOR_ORANGE 0xFFAA00FF
  55. #define COLOR_LIGHTBLUE 0x33CCFFAA
  56. #define COLOR_BLUE 0x2641FEAA
  57. #define COLOR_PURPLE 0xC2A2DAAA
  58. #define BIJELA 0xFFFFFFAA
  59. #define WHITE 0xFFFFFFAA
  60. #define CYAN 0x00D2E1FF
  61. #define PURPLE 0xC2A2DAAA
  62. #define GRAD2 0xBFC0C2FF
  63. #define NK_BLUE 0x10AADEFF
  64.  
  65. #define MAX_GATES 250 // -> Max Getova na serveru!
  66. #define GATE_PASS_LEN 8 // -> Koliko sifra najmanje mora da ima znakova
  67. #define MOVE_SPEED (1.65) // -> Brzina otvaranja kapije.
  68.  
  69. enum _:e_gatestates
  70. {
  71. GATE_STATE_CLOSED,
  72. GATE_STATE_OPEN
  73. }
  74.  
  75. enum _:e_gatedialogs
  76. {
  77. DIALOG_GATE_PASSWORD = 141241,
  78. DIALOG_GATE_EDITMENU,
  79. DIALOG_GATE_NEWPASSWORD
  80. }
  81.  
  82. enum e_gate
  83. {
  84. GateModel,
  85. GatePassword[GATE_PASS_LEN],
  86. Float: GatePos[3],
  87. Float: GateRot[3],
  88. Float: GateOpenPos[3],
  89. Float: GateOpenRot[3],
  90. GateState,
  91. bool: GateEditing,
  92. GateObject,
  93. Text3D: GateLabel
  94. }
  95.  
  96. new
  97. GateData[MAX_GATES][e_gate],
  98. Iterator: Gates<MAX_GATES>,
  99. EditingGateID[MAX_PLAYERS] = {-1, ...},
  100. EditingGateType[MAX_PLAYERS] = {-1, ...},
  101. bool: HasGateAuth[MAX_PLAYERS][MAX_GATES];
  102.  
  103. new
  104. GateStates[2][16] = {"{F3FF02}Close", "{F3FF02}Open"};
  105.  
  106. new
  107. DB: GateDB,
  108. DBStatement: LoadGates,
  109. DBStatement: AddGate,
  110. DBStatement: UpdateGate,
  111. DBStatement: RemoveGate;
  112.  
  113. stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  114. {
  115. new Float:a;
  116. GetPlayerPos(playerid, x, y, a);
  117. GetPlayerFacingAngle(playerid, a);
  118. if (GetPlayerVehicleID(playerid))
  119. {
  120. GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  121. }
  122. x += (distance * floatsin(-a, degrees));
  123. y += (distance * floatcos(-a, degrees));
  124. }
  125.  
  126. stock GetClosestGate(playerid, Float: range = 5.0)
  127. {
  128. new id = -1, Float: playerdist, Float: tempdist = 9999.0;
  129. foreach(new i : Gates)
  130. {
  131. playerdist = GetPlayerDistanceFromPoint(playerid, GateData[i][GatePos][0], GateData[i][GatePos][1], GateData[i][GatePos][2]);
  132. if(playerdist > range) continue;
  133. if(playerdist <= tempdist)
  134. {
  135. tempdist = playerdist;
  136. id = i;
  137. }
  138. }
  139.  
  140. return id;
  141. }
  142.  
  143. stock SetGateState(id, gate_state, move = 1)
  144. {
  145. new string[32];
  146. format(string, sizeof(string), "Gate #%d\n%s", id, GateStates[gate_state]);
  147. UpdateDynamic3DTextLabelText(GateData[id][GateLabel], 0xECF0F1FF, string);
  148. GateData[id][GateState] = gate_state;
  149.  
  150. switch(move)
  151. {
  152. case 1:
  153. {
  154. if(gate_state == GATE_STATE_CLOSED) {
  155. MoveDynamicObject(GateData[id][GateObject], GateData[id][GatePos][0], GateData[id][GatePos][1], GateData[id][GatePos][2], MOVE_SPEED, GateData[id][GateRot][0], GateData[id][GateRot][1], GateData[id][GateRot][2]);
  156. }else{
  157. MoveDynamicObject(GateData[id][GateObject], GateData[id][GateOpenPos][0], GateData[id][GateOpenPos][1], GateData[id][GateOpenPos][2], MOVE_SPEED, GateData[id][GateOpenRot][0], GateData[id][GateOpenRot][1], GateData[id][GateOpenRot][2]);
  158. }
  159. }
  160.  
  161. case 2:
  162. {
  163. if(gate_state == GATE_STATE_CLOSED) {
  164. SetDynamicObjectPos(GateData[id][GateObject], GateData[id][GatePos][0], GateData[id][GatePos][1], GateData[id][GatePos][2]);
  165. SetDynamicObjectRot(GateData[id][GateObject], GateData[id][GateRot][0], GateData[id][GateRot][1], GateData[id][GateRot][2]);
  166. }else{
  167. SetDynamicObjectPos(GateData[id][GateObject], GateData[id][GateOpenPos][0], GateData[id][GateOpenPos][1], GateData[id][GateOpenPos][2]);
  168. SetDynamicObjectRot(GateData[id][GateObject], GateData[id][GateOpenRot][0], GateData[id][GateOpenRot][1], GateData[id][GateOpenRot][2]);
  169. }
  170. }
  171. }
  172.  
  173. return 1;
  174. }
  175.  
  176. stock ToggleGateState(id, move = 1)
  177. {
  178. if(GateData[id][GateState] == GATE_STATE_CLOSED) {
  179. SetGateState(id, GATE_STATE_OPEN, move);
  180. }else{
  181. SetGateState(id, GATE_STATE_CLOSED, move);
  182. }
  183.  
  184. return 1;
  185. }
  186.  
  187. stock ShowEditMenu(playerid, id)
  188. {
  189. new string[128];
  190. format(string, sizeof(string), "Status Kapije\t%s\nKapija Sifra\t%s\nEditovanje Pozicije kapije\nEditovanje Pozicije kapije[OTVORENE]\nIzbrisi Kapiju", GateStates[ GateData[id][GateState] ], GateData[id][GatePassword]);
  191. ShowPlayerDialog(playerid, DIALOG_GATE_EDITMENU, DIALOG_STYLE_TABLIST, "Kapija", string, "Izaberi", "Izadji");
  192. return 1;
  193. }
  194.  
  195. stock SaveGate(id)
  196. {
  197. stmt_bind_value(UpdateGate, 0, DB::TYPE_STRING, GateData[id][GatePassword]);
  198. stmt_bind_value(UpdateGate, 1, DB::TYPE_FLOAT, GateData[id][GatePos][0]);
  199. stmt_bind_value(UpdateGate, 2, DB::TYPE_FLOAT, GateData[id][GatePos][1]);
  200. stmt_bind_value(UpdateGate, 3, DB::TYPE_FLOAT, GateData[id][GatePos][2]);
  201. stmt_bind_value(UpdateGate, 4, DB::TYPE_FLOAT, GateData[id][GateRot][0]);
  202. stmt_bind_value(UpdateGate, 5, DB::TYPE_FLOAT, GateData[id][GateRot][1]);
  203. stmt_bind_value(UpdateGate, 6, DB::TYPE_FLOAT, GateData[id][GateRot][2]);
  204. stmt_bind_value(UpdateGate, 7, DB::TYPE_FLOAT, GateData[id][GateOpenPos][0]);
  205. stmt_bind_value(UpdateGate, 8, DB::TYPE_FLOAT, GateData[id][GateOpenPos][1]);
  206. stmt_bind_value(UpdateGate, 9, DB::TYPE_FLOAT, GateData[id][GateOpenPos][2]);
  207. stmt_bind_value(UpdateGate, 10, DB::TYPE_FLOAT, GateData[id][GateOpenRot][0]);
  208. stmt_bind_value(UpdateGate, 11, DB::TYPE_FLOAT, GateData[id][GateOpenRot][1]);
  209. stmt_bind_value(UpdateGate, 12, DB::TYPE_FLOAT, GateData[id][GateOpenRot][2]);
  210. stmt_bind_value(UpdateGate, 13, DB::TYPE_INTEGER, id);
  211. stmt_execute(UpdateGate);
  212. return 1;
  213. }
  214.  
  215. public OnFilterScriptInit()
  216. {
  217. GateDB = db_open("dyn_gates.db");
  218. db_query(GateDB, "Pravim kapije - povezujem mod. (id INTEGER, model INTEGER, password TEXT, def_posx FLOAT, def_posy FLOAT, def_posz FLOAT, def_rotx FLOAT, def_roty FLOAT, def_rotz FLOAT, open_posx FLOAT, open_posy FLOAT, open_posz FLOAT, open_rotx FLOAT, open_roty FLOAT, open_rotz FLOAT)");
  219.  
  220. LoadGates = db_prepare(GateDB, "Loadujem Kapije - Pokretanje skripte - Ocitano.");
  221. AddGate = db_prepare(GateDB, "Dodavanje Kapije - ID,MODEL,PASSWORD,LOC - Ocitano. (id, model, password, def_posx, def_posy, def_posz) VALUES (?, ?, ?, ?, ?, ?)");
  222. UpdateGate = db_prepare(GateDB, "Updatujem kapiju = Ocitano., def_posx=?, def_posy=?, def_posz=?, def_rotx=?, def_roty=?, def_rotz=?, open_posx=?, open_posy=?, open_posz=?, open_rotx=?, open_roty=?, open_rotz=? WHERE id=?");
  223. RemoveGate = db_prepare(GateDB, "Brisem kapiju! - Ocitano.");
  224.  
  225. new id, model, password[GATE_PASS_LEN], Float: pos[3], Float: rot[3], Float: openpos[3], Float: openrot[3];
  226. stmt_bind_result_field(LoadGates, 0, DB::TYPE_INTEGER, id);
  227. stmt_bind_result_field(LoadGates, 1, DB::TYPE_INTEGER, model);
  228. stmt_bind_result_field(LoadGates, 2, DB::TYPE_STRING, password, GATE_PASS_LEN);
  229. stmt_bind_result_field(LoadGates, 3, DB::TYPE_FLOAT, pos[0]);
  230. stmt_bind_result_field(LoadGates, 4, DB::TYPE_FLOAT, pos[1]);
  231. stmt_bind_result_field(LoadGates, 5, DB::TYPE_FLOAT, pos[2]);
  232. stmt_bind_result_field(LoadGates, 6, DB::TYPE_FLOAT, rot[0]);
  233. stmt_bind_result_field(LoadGates, 7, DB::TYPE_FLOAT, rot[1]);
  234. stmt_bind_result_field(LoadGates, 8, DB::TYPE_FLOAT, rot[2]);
  235. stmt_bind_result_field(LoadGates, 9, DB::TYPE_FLOAT, openpos[0]);
  236. stmt_bind_result_field(LoadGates, 10, DB::TYPE_FLOAT, openpos[1]);
  237. stmt_bind_result_field(LoadGates, 11, DB::TYPE_FLOAT, openpos[2]);
  238. stmt_bind_result_field(LoadGates, 12, DB::TYPE_FLOAT, openrot[0]);
  239. stmt_bind_result_field(LoadGates, 13, DB::TYPE_FLOAT, openrot[1]);
  240. stmt_bind_result_field(LoadGates, 14, DB::TYPE_FLOAT, openrot[2]);
  241.  
  242. if(stmt_execute(LoadGates))
  243. {
  244. new label[32];
  245. while(stmt_fetch_row(LoadGates))
  246. {
  247. GateData[id][GateModel] = model;
  248. GateData[id][GatePassword] = password;
  249. GateData[id][GatePos][0] = pos[0];
  250. GateData[id][GatePos][1] = pos[1];
  251. GateData[id][GatePos][2] = pos[2];
  252. GateData[id][GateRot][0] = rot[0];
  253. GateData[id][GateRot][1] = rot[1];
  254. GateData[id][GateRot][2] = rot[2];
  255. GateData[id][GateOpenPos][0] = openpos[0];
  256. GateData[id][GateOpenPos][1] = openpos[1];
  257. GateData[id][GateOpenPos][2] = openpos[2];
  258. GateData[id][GateOpenRot][0] = openrot[0];
  259. GateData[id][GateOpenRot][1] = openrot[1];
  260. GateData[id][GateOpenRot][2] = openrot[2];
  261.  
  262. format(label, sizeof(label), "Gate #%d\n%s", id, GateStates[GATE_STATE_CLOSED]);
  263. GateData[id][GateObject] = CreateDynamicObject(model, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2]);
  264. GateData[id][GateLabel] = CreateDynamic3DTextLabel(label, 0xECF0F1FF, pos[0], pos[1], pos[2], 10.0);
  265. Iter_Add(Gates, id);
  266. }
  267. }
  268.  
  269. return 1;
  270. }
  271.  
  272. public OnFilterScriptExit()
  273. {
  274. db_close(GateDB);
  275. return 1;
  276. }
  277.  
  278. public OnPlayerConnect(playerid)
  279. {
  280. EditingGateID[playerid] = -1;
  281. EditingGateType[playerid] = -1;
  282. for(new i; i < MAX_GATES; i++) HasGateAuth[playerid][i] = false;
  283. return 1;
  284. }
  285.  
  286. public OnPlayerDisconnect(playerid, reason)
  287. {
  288. if(EditingGateID[playerid] != -1) GateData[ EditingGateID[playerid] ][GateEditing] = false;
  289. return 1;
  290. }
  291.  
  292. public OnPlayerEditDynamicObject(playerid, STREAMER_TAG_OBJECT objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  293. {
  294. if(EditingGateID[playerid] == -1) return 1;
  295. switch(response)
  296. {
  297. case EDIT_RESPONSE_FINAL:
  298. {
  299. new id = EditingGateID[playerid];
  300. GateData[id][GateEditing] = false;
  301.  
  302. switch(EditingGateType[playerid])
  303. {
  304. case GATE_STATE_CLOSED:
  305. {
  306. Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, GateData[id][GateLabel], E_STREAMER_X, x);
  307. Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, GateData[id][GateLabel], E_STREAMER_Y, y);
  308. Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, GateData[id][GateLabel], E_STREAMER_Z, z);
  309. SetDynamicObjectPos(objectid, x, y, z);
  310. SetDynamicObjectRot(objectid, rx, ry, rz);
  311. GateData[id][GatePos][0] = x;
  312. GateData[id][GatePos][1] = y;
  313. GateData[id][GatePos][2] = z;
  314. GateData[id][GateRot][0] = rx;
  315. GateData[id][GateRot][1] = ry;
  316. GateData[id][GateRot][2] = rz;
  317. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Kapija je vracena na pocetno stanje!");
  318.  
  319. if(GateData[id][GateOpenPos][0] == 0.0 && GateData[id][GateOpenRot][0] == 0.0) {
  320. GateData[id][GateEditing] = true;
  321. EditingGateType[playerid] = GATE_STATE_OPEN;
  322. EditDynamicObject(playerid, objectid);
  323.  
  324. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ova kapija nema poziciju za otvaranje!");
  325. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Sada definiste otvorenu poziciju kapije "CRVENA"To mozete i kasnije odraditi!");
  326. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ova Kapija nece moci da se otvara posto nema pocetnu poziciju!");
  327. }else{
  328. EditingGateID[playerid] = -1;
  329. EditingGateType[playerid] = -1;
  330. }
  331.  
  332. SaveGate(id);
  333. }
  334.  
  335. case GATE_STATE_OPEN:
  336. {
  337. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Editovao si poziciju otvorene kapije!");
  338. SetGateState(id, GATE_STATE_CLOSED, 2);
  339. GateData[id][GateOpenPos][0] = x;
  340. GateData[id][GateOpenPos][1] = y;
  341. GateData[id][GateOpenPos][2] = z;
  342. GateData[id][GateOpenRot][0] = rx;
  343. GateData[id][GateOpenRot][1] = ry;
  344. GateData[id][GateOpenRot][2] = rz;
  345.  
  346. EditingGateID[playerid] = -1;
  347. EditingGateType[playerid] = -1;
  348. SaveGate(id);
  349. }
  350. }
  351. }
  352.  
  353. case EDIT_RESPONSE_CANCEL:
  354. {
  355. new id = EditingGateID[playerid];
  356. GateData[id][GateEditing] = false;
  357.  
  358. switch(EditingGateType[playerid])
  359. {
  360. case GATE_STATE_CLOSED:
  361. {
  362. SetDynamicObjectPos(objectid, GateData[id][GatePos][0], GateData[id][GatePos][1], GateData[id][GatePos][2]);
  363. SetDynamicObjectRot(objectid, GateData[id][GateRot][0], GateData[id][GateRot][1], GateData[id][GateRot][2]);
  364. GateData[id][GatePos][0] = x;
  365. GateData[id][GatePos][1] = y;
  366. GateData[id][GatePos][2] = z;
  367. GateData[id][GateRot][0] = rx;
  368. GateData[id][GateRot][1] = ry;
  369. GateData[id][GateRot][2] = rz;
  370. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Odustao si od editiranja kapije | "CRVENA"Vracena je u pocetni polozaj");
  371. }
  372.  
  373. case GATE_STATE_OPEN:
  374. {
  375. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Odustao si od editiranja pozicije kapije.");
  376.  
  377. if(GateData[id][GateOpenPos][0] == 0.0 && GateData[id][GateOpenRot][0] == 0.0)
  378. {
  379. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ova kapija nema poziciju za otvaranje!");
  380. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ova Kapija nece moci da se otvara posto nema pocetnu poziciju!");
  381. }
  382.  
  383. SetGateState(id, GATE_STATE_CLOSED, 2);
  384. EditingGateID[playerid] = -1;
  385. EditingGateType[playerid] = -1;
  386. }
  387. }
  388. }
  389. }
  390.  
  391. return 1;
  392. }
  393.  
  394. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  395. {
  396. if(dialogid == DIALOG_GATE_PASSWORD)
  397. {
  398. if(!response) return 1;
  399. if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_GATE_PASSWORD, DIALOG_STYLE_PASSWORD, "Kapija", "{E74C3C}Niste napisali lozinku.\n{FFFFFF}Ovde napiste lozinku vase kapije:", "Otvori", "Odustani");
  400. new id = GetClosestGate(playerid);
  401. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Nisi blizu kapije!");
  402. if(strcmp(GateData[id][GatePassword], inputtext)) return ShowPlayerDialog(playerid, DIALOG_GATE_PASSWORD, DIALOG_STYLE_PASSWORD, "Kapija", "{E74C3C}Pogresna lozinka.\n{FFFFFF}Ovde napiste lozinku vase kapije:", "Otvori", "Odustani");
  403. HasGateAuth[playerid][id] = true;
  404. ToggleGateState(id);
  405. return 1;
  406. }
  407.  
  408. if(dialogid == DIALOG_GATE_EDITMENU)
  409. {
  410. if(!IsPlayerAdmin(playerid)) return 1;
  411. if(!response)
  412. {
  413. if(EditingGateID[playerid] != -1) GateData[ EditingGateID[playerid] ][GateEditing] = false;
  414. EditingGateID[playerid] = -1;
  415. return 1;
  416. }
  417.  
  418. new id = EditingGateID[playerid];
  419. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ti ne editujes kapiju!");
  420. if(listitem == 0)
  421. {
  422. ToggleGateState(id);
  423. ShowEditMenu(playerid, id);
  424. }
  425.  
  426. if(listitem == 1) ShowPlayerDialog(playerid, DIALOG_GATE_NEWPASSWORD, DIALOG_STYLE_INPUT, "Promeni lozinku kapije!", "Upisite ovde novu sifru vase kapije:\nAko ocete da ova kapija nema sifru, ostavite bez lozinke!", "Promeni", "Izadji");
  427. if(listitem == 2)
  428. {
  429. SetGateState(id, GATE_STATE_CLOSED, 2);
  430. EditingGateType[playerid] = GATE_STATE_CLOSED;
  431. EditDynamicObject(playerid, GateData[id][GateObject]);
  432. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Editujes poziciju kapije!");
  433. }
  434.  
  435. if(listitem == 3)
  436. {
  437. SetGateState(id, GATE_STATE_OPEN, 2);
  438. EditingGateType[playerid] = GATE_STATE_OPEN;
  439. EditDynamicObject(playerid, GateData[id][GateObject]);
  440. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Editujes poziciju kapije!");
  441. }
  442.  
  443. if(listitem == 4)
  444. {
  445. GateData[id][GateEditing] = false;
  446. GateData[id][GatePos][0] = GateData[id][GatePos][1] = GateData[id][GatePos][2] = 0.0;
  447. GateData[id][GateRot][0] = GateData[id][GateRot][1] = GateData[id][GateRot][2] = 0.0;
  448. GateData[id][GateOpenPos][0] = GateData[id][GateOpenPos][1] = GateData[id][GateOpenPos][2] = 0.0;
  449. GateData[id][GateOpenRot][0] = GateData[id][GateOpenRot][1] = GateData[id][GateOpenRot][2] = 0.0;
  450. DestroyDynamicObject(GateData[id][GateObject]);
  451. DestroyDynamic3DTextLabel(GateData[id][GateLabel]);
  452. Iter_Remove(Gates, id);
  453.  
  454. stmt_bind_value(RemoveGate, 0, DB::TYPE_INTEGER, id);
  455. stmt_execute(RemoveGate);
  456.  
  457. foreach(new i : Player) if(EditingGateID[i] == id) EditingGateID[i] = -1;
  458. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Obrisao si kapiju!");
  459. }
  460.  
  461. return 1;
  462. }
  463.  
  464. if(dialogid == DIALOG_GATE_NEWPASSWORD)
  465. {
  466. if(!IsPlayerAdmin(playerid)) return 1;
  467. new id = EditingGateID[playerid];
  468. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ne editujes kapiju!");
  469. if(!response) return ShowEditMenu(playerid, id);
  470. format(GateData[id][GatePassword], GATE_PASS_LEN, "%s", inputtext);
  471. foreach(new i : Player) HasGateAuth[i][id] = false;
  472. SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Promenio si sifru kapije!");
  473. SaveGate(id);
  474. ShowEditMenu(playerid, id);
  475. return 1;
  476. }
  477.  
  478. return 0;
  479. }
  480.  
  481. CMD:kapija(playerid, params[])
  482. {
  483. new id = GetClosestGate(playerid);
  484. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Nisi blizu kapije!");
  485. if(GateData[id][GateEditing]) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ova kapija se Edituje! Ne mozes je koristiti!");
  486. if(GateData[id][GateOpenPos][0] == 0.0 && GateData[id][GateOpenRot][0] == 0.0) return SendClientMessage(playerid, 0xFFC801C8, "[KAPIJA] "BELA"Ne mozes otvoriti kapiju koja nema OPEN polozaj! CALL ADMINA!");
  487. if(!strlen(GateData[id][GatePassword])) {
  488. ToggleGateState(id);
  489. }else{
  490. if(HasGateAuth[playerid][id]) {
  491. ToggleGateState(id);
  492. }else{
  493. ShowPlayerDialog(playerid, DIALOG_GATE_PASSWORD, DIALOG_STYLE_PASSWORD, "Kapija", "Ova kapija ima lozinku\nOvde ukucaj sifru vase kapije:", "Otvori", "Izadji");
  494. }
  495. }
  496.  
  497. return 1;
  498. }
  499.  
  500. CMD:kreirajkapiju(playerid, params[])
  501. {
  502. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Nisi ovlascen!");
  503. if(EditingGateID[playerid] != -1) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Ne mozes da kreiras kapiju dok je editujes!");
  504. new id = Iter_Free(Gates);
  505. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Predjen je limit kapija! Ne mozes kreirati novu!");
  506. new model, password[GATE_PASS_LEN];
  507. if(sscanf(params, "iS()["#GATE_PASS_LEN"]", model, password)) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"/kreirajkapiju [MODEL ID] [SIFRA]");
  508. GateData[id][GateModel] = model;
  509. GateData[id][GatePassword] = password;
  510.  
  511. new Float: x, Float: y, Float: z;
  512. GetPlayerPos(playerid, x, y, z);
  513. GetXYInFrontOfPlayer(playerid, x, y, 3.0);
  514.  
  515. GateData[id][GatePos][0] = x;
  516. GateData[id][GatePos][1] = y;
  517. GateData[id][GatePos][2] = z;
  518. GateData[id][GateRot][0] = GateData[id][GateRot][1] = GateData[id][GateRot][2] = 0.0;
  519. GateData[id][GateOpenPos][0] = GateData[id][GateOpenPos][1] = GateData[id][GateOpenPos][2] = 0.0;
  520. GateData[id][GateOpenRot][0] = GateData[id][GateOpenRot][1] = GateData[id][GateOpenRot][2] = 0.0;
  521. GateData[id][GateState] = GATE_STATE_CLOSED;
  522. GateData[id][GateEditing] = true;
  523. GateData[id][GateObject] = CreateDynamicObject(model, x, y, z, 0.0, 0.0, 0.0);
  524. new string[32];
  525. format(string, sizeof(string), "Gate #%d\n%s", id, GateStates[GATE_STATE_CLOSED]);
  526. GateData[id][GateLabel] = CreateDynamic3DTextLabel(string, 0xECF0F1FF, x, y, z, 10.0);
  527. Iter_Add(Gates, id);
  528.  
  529. stmt_bind_value(AddGate, 0, DB::TYPE_INTEGER, id);
  530. stmt_bind_value(AddGate, 1, DB::TYPE_INTEGER, model);
  531. stmt_bind_value(AddGate, 2, DB::TYPE_STRING, password);
  532. stmt_bind_value(AddGate, 3, DB::TYPE_FLOAT, x);
  533. stmt_bind_value(AddGate, 4, DB::TYPE_FLOAT, y);
  534. stmt_bind_value(AddGate, 5, DB::TYPE_FLOAT, z);
  535. stmt_execute(AddGate);
  536.  
  537. EditingGateID[playerid] = id;
  538. EditingGateType[playerid] = GATE_STATE_CLOSED;
  539. EditDynamicObject(playerid, GateData[id][GateObject]);
  540. SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Napravio si kapiju! Sad je moras editovati!");
  541. return 1;
  542. }
  543.  
  544. CMD:ekapiju(playerid, params[])
  545. {
  546. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Nisi ovlascen!");
  547. if(EditingGateID[playerid] != -1) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Ne mozes editovati 2 kapije od jednom!");
  548. new id;
  549. sscanf(params, "I(-2)", id);
  550. if(id == -2) id = GetClosestGate(playerid);
  551. if(id == -1) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Nisi blizu kapije!");
  552. if(GateData[id][GateEditing]) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Ova kapija se vec edituje!");
  553. if(!IsPlayerInRangeOfPoint(playerid, 20.0, GateData[id][GatePos][0], GateData[id][GatePos][1], GateData[id][GatePos][2])) return SendClientMessage(playerid, 0xFFC801C8, "[SA:RP] "BELA"Nisi blizu kapije koju oces Editovati!");
  554. GateData[id][GateEditing] = true;
  555. EditingGateID[playerid] = id;
  556. ShowEditMenu(playerid, id);
  557. return 1;
  558. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement