TonyVk

Dinamican Teleport System

Jan 16th, 2016
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.54 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //////////////////////////Dinamican Teleport System/////////////////////////////
  3. //////////////////////////////////By Tony///////////////////////////////////////
  4. //////////////////////////////Created: 16.1.2016////////////////////////////////
  5. /////////////////////////Please don't remove credits////////////////////////////
  6. ////////////////////////////////////////////////////////////////////////////////
  7.  
  8. #include <a_samp>
  9. #include <zcmd>
  10. #include <sscanf2>
  11. #include <YSI\y_ini>
  12. #include <FileManager>
  13.  
  14.  
  15. #define DIALOG_TEDIT 32000
  16. #define DIALOG_KATEGORIJA 32001
  17. #define DIALOG_KLOKACIJA 32002
  18. #define DIALOG_OBRISIKAT 32003
  19. #define DIALOG_OBRISILOK 32004
  20. #define DIALOG_KORDLOKACIJA 32005
  21. #define DIALOG_TELE 32006
  22. #define DIALOG_KTELE 32007
  23. #define DIALOG_PREMJESTILOK 32008
  24. #define DIALOG_PREMJESTIKAT 32009
  25. #define TELE_PATH "/Lokacije/%s/%d.ini"
  26.  
  27.  
  28. #define MAX_TELE 100
  29. //Teleport
  30. enum tInfo
  31. {
  32. Ime[90],
  33. Float:teX,
  34. Float:teY,
  35. Float:teZ,
  36. Float:teA,
  37. Kateg
  38. }
  39. new TeleInfo[20][MAX_TELE][tInfo];
  40. new Kategorija[20][90];
  41. new ImeKat[MAX_PLAYERS][90];
  42. new IDKate=-1;
  43. new IDLok=-1;
  44. new kata=-1;
  45.  
  46.  
  47. stock udb_hash(buf[])
  48. {
  49. new length=strlen(buf);
  50. new s1 = 1;
  51. new s2 = 0;
  52. new n;
  53. for (n=0; n<length; n++)
  54. {
  55. s1 = (s1 + buf[n]) % 65521;
  56. s2 = (s2 + s1) % 65521;
  57. }
  58. return (s2 << 16) + s1;
  59. }
  60.  
  61. stock TelePath(id,katid)
  62. {
  63. new string[128];
  64. format(string,sizeof(string),TELE_PATH,Kategorija[katid],id);
  65. return string;
  66. }
  67.  
  68. stock SacuvajLokacije2(id,katid)
  69. {
  70. new INI:File = INI_Open(TelePath(id-1,katid));
  71. INI_WriteString(File,"Ime",TeleInfo[katid][id][Ime]);
  72. INI_WriteFloat(File,"X",TeleInfo[katid][id][teX]);
  73. INI_WriteFloat(File,"Y",TeleInfo[katid][id][teY]);
  74. INI_WriteFloat(File,"Z",TeleInfo[katid][id][teZ]);
  75. INI_WriteFloat(File,"A",TeleInfo[katid][id][teA]);
  76. INI_Close(File);
  77. TeleInfo[katid][id][teX]=0;
  78. TeleInfo[katid][id][teY]=0;
  79. TeleInfo[katid][id][teZ]=0;
  80. TeleInfo[katid][id][teA]=0;
  81. return 1;
  82. }
  83.  
  84. stock SacuvajLokacije(id,katid)
  85. {
  86. new INI:File = INI_Open(TelePath(id,katid));
  87. INI_WriteString(File,"Ime",TeleInfo[katid][id][Ime]);
  88. INI_WriteFloat(File,"X",TeleInfo[katid][id][teX]);
  89. INI_WriteFloat(File,"Y",TeleInfo[katid][id][teY]);
  90. INI_WriteFloat(File,"Z",TeleInfo[katid][id][teZ]);
  91. INI_WriteFloat(File,"A",TeleInfo[katid][id][teA]);
  92. INI_Close(File);
  93. return 1;
  94. }
  95.  
  96. stock SacuvajKategorije()
  97. {
  98. new INI:File = INI_Open("Lokacije/Kategorije.ini");
  99. for(new i=0;i<20;i++)
  100. {
  101. new string[90];
  102. format(string,sizeof(string),"Kategorija_%d",i);
  103. INI_WriteString(File,string,Kategorija[i]);
  104. }
  105. INI_Close(File);
  106. return 1;
  107. }
  108.  
  109. forward UcitajKategorije(id,name[],value[]);
  110. public UcitajKategorije(id,name[],value[])
  111. {
  112. new string[90];
  113. format(string,sizeof(string),"Kategorija_%d",id);
  114. INI_String(string,Kategorija[id],90);
  115. return 1;
  116. }
  117.  
  118.  
  119. forward UcitajLokacije(id,name[],value[]);
  120. public UcitajLokacije(id,name[],value[])
  121. {
  122. INI_String("Ime",TeleInfo[IDKate][id][Ime],90);
  123. INI_Float("X",TeleInfo[IDKate][id][teX]);
  124. INI_Float("Y",TeleInfo[IDKate][id][teY]);
  125. INI_Float("Z",TeleInfo[IDKate][id][teZ]);
  126. INI_Float("A",TeleInfo[IDKate][id][teA]);
  127. return 1;
  128. }
  129.  
  130. forward Port(playerid);
  131. public Port(playerid)
  132. {
  133. TogglePlayerControllable(playerid,0);
  134. SetTimerEx("Unfreeze", 2000,false,"i",playerid);
  135. return 1;
  136. }
  137.  
  138. forward Unfreeze(playerid);
  139. public Unfreeze(playerid)
  140. {
  141. TogglePlayerControllable(playerid, 1);
  142. return 1;
  143. }
  144.  
  145. public OnFilterScriptExit()
  146. {
  147. for(new i=0;i<MAX_TELE;i++)
  148. {
  149. for(new a=0;a<20;a++)
  150. {
  151. if(TeleInfo[a][i][teX] != 0 && TeleInfo[a][i][teY] != 0)
  152. {
  153. SacuvajLokacije(i,a);
  154. }
  155. }
  156. }
  157. return 1;
  158. }
  159.  
  160. public OnFilterScriptInit()
  161. {
  162. print("////////////////////////////////////////////////////////////////////////////////");
  163. print("//////////////////////////Dinamican Teleport System/////////////////////////////");
  164. print("//////////////////////////////////By Tony///////////////////////////////////////");
  165. print("//////////////////////////////Created: 16.1.2016////////////////////////////////");
  166. print("/////////////////////////Please don't remove credits////////////////////////////");
  167. print("////////////////////////////////////////////////////////////////////////////////");
  168. for(new j=0;j<20;j++)
  169. {
  170. strmid(Kategorija[j],"Nema",0,strlen("Nema"),255);
  171. INI_ParseFile("Lokacije/Kategorije.ini", "UcitajKategorije", .bExtra = true, .extra = j);
  172. for(new i = 0; i < sizeof(TeleInfo); i++)
  173. {
  174. new str[128];
  175. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[j],i);
  176. if(fexist(str))
  177. {
  178. IDKate=j;
  179. INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = i);
  180. }
  181. }
  182. }
  183. return 1;
  184. }
  185.  
  186. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  187. {
  188. if(dialogid == DIALOG_KATEGORIJA)
  189. {
  190. new ime[90];
  191. if(!response) return 1;
  192. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KATEGORIJA, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije", "Uredu", "Odustani");
  193. for(new i=0;i<20;i++)
  194. {
  195. if(udb_hash(Kategorija[i]) == udb_hash("Nema"))
  196. {
  197. new str[128];
  198. format(str,sizeof(str),"scriptfiles/Lokacije/%s",ime);
  199. if(dir_create(str))
  200. {
  201. printf("[USPJESNO]: Folder '%s' napravit!",ime);
  202. strmid(Kategorija[i],ime,0,strlen(ime),255);
  203. SendClientMessage(playerid,-1,"Uspjesno dodana kategorija!");
  204. }
  205. else
  206. {
  207. print("[NEUSPJESNO]: Folder nije napravit!");
  208. SendClientMessage(playerid,-1,"Neuspjesno dodana kategorija!");
  209. }
  210. SacuvajKategorije();
  211. break;
  212. }
  213. }
  214. }
  215. if(dialogid == DIALOG_KLOKACIJA)
  216. {
  217. new ime[90],prov=0;
  218. if(!response) return 1;
  219. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KLOKACIJA, DIALOG_STYLE_INPUT, "Upisi ime kategorije", "Upisite ime kategorije pod koju zelite staviti novu lokaciju!", "Uredu", "Odustani");
  220. for(new i=0;i<20;i++)
  221. {
  222. if(udb_hash(Kategorija[i]) == udb_hash(ime))
  223. {
  224. strmid(ImeKat[playerid],Kategorija[i],0,strlen(Kategorija[i]),255);
  225. ShowPlayerDialog(playerid, DIALOG_KORDLOKACIJA, DIALOG_STYLE_INPUT, "Upisi ime lokacije", "Upisite ime lokacije!", "Uredu", "Odustani");
  226. prov=1;
  227. break;
  228. }
  229. }
  230. if(prov==0) return ShowPlayerDialog(playerid, DIALOG_KLOKACIJA, DIALOG_STYLE_INPUT, "Krivo ime kategorije", "Upisite ime kategorije pod koju zelite staviti novu lokaciju!", "Uredu", "Odustani");
  231. }
  232. if(dialogid == DIALOG_KORDLOKACIJA)
  233. {
  234. new ime[90],j=-1;
  235. if(!response) return 1;
  236. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KORDLOKACIJA, DIALOG_STYLE_INPUT, "Upisi ime lokacije", "Upisite ime lokacije!", "Uredu", "Odustani");
  237. for(new i=0;i<sizeof(TeleInfo);i++)
  238. {
  239. for(new e=0;e<20;e++)
  240. {
  241. if(udb_hash(Kategorija[e]) == udb_hash(ImeKat[playerid]))
  242. {
  243. j=e;
  244. }
  245. }
  246. if(!fexist(TelePath(i,j)))
  247. {
  248. new Float:Poz[4];
  249. GetPlayerPos(playerid,Poz[0],Poz[1],Poz[2]);
  250. GetPlayerFacingAngle(playerid,Poz[3]);
  251. strmid(TeleInfo[j][i][Ime],ime,0,strlen(ime),255);
  252. TeleInfo[j][i][teX]=Poz[0];
  253. TeleInfo[j][i][teY]=Poz[1];
  254. TeleInfo[j][i][teZ]=Poz[2];
  255. TeleInfo[j][i][teA]=Poz[3];
  256. SacuvajLokacije(i,j);
  257. SendClientMessage(playerid,-1,"Uspjesno dodana lokacija!");
  258. break;
  259. }
  260. }
  261. }
  262. /*if(dialogid == DIALOG_OBRISIKAT)
  263. {
  264. new ime[90];
  265. if(!response) return 1;
  266. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_OBRISIKAT, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije koju zelite obrisati", "Uredu", "Odustani");
  267. for(new i=0;i<20;i++)
  268. {
  269. if(udb_hash(Kategorija[i]) == udb_hash(ime))
  270. {
  271. new str[128];
  272. format(str,sizeof(str),"scriptfiles/Lokacije/%s",ime);
  273. if(dir_delete(str))
  274. {
  275. strmid(Kategorija[i],"Nema",0,strlen("Nema"),255);
  276. printf("[USPJESNO]: Folder '%s' obrisan",ime);
  277. SendClientMessage(playerid,-1,"Uspjesno obrisana kategorija!");
  278. }
  279. else
  280. {
  281. SendClientMessage(playerid,-1,"[NEUSPJESNO]: Folder ne postoji ili se u njemu nalaze neke lokacije(premjestite ih preko GPanela negdje u drugu kategoriju(folder)!");
  282. }
  283. break;
  284. }
  285. }
  286. }*/
  287. if(dialogid == DIALOG_OBRISILOK)
  288. {
  289. new ime[90],prov=0;
  290. if(!response) return 1;
  291. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Ime", "Upisite ime lokacije", "Uredu", "Odustani");
  292. for(new i=0;i<sizeof(TeleInfo);i++)
  293. {
  294. for(new a=0;a<20;a++)
  295. {
  296. if(udb_hash(TeleInfo[a][i][Ime]) == udb_hash(ime))
  297. {
  298. TeleInfo[a][i][teX] = 0;
  299. TeleInfo[a][i][teY] = 0;
  300. TeleInfo[a][i][teZ] = 0;
  301. TeleInfo[a][i][teA] = 0;
  302. fremove(TelePath(i,a));
  303. prov=1;
  304. new id=i;
  305. for(new j=id+1;j<sizeof(TeleInfo);j++)
  306. {
  307. new str[128];
  308. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[a],j);
  309. if(fexist(str))
  310. {
  311. fremove(str);
  312. SacuvajLokacije2(j,a);
  313. }
  314. }
  315. for(new k=0;k<sizeof(TeleInfo);k++)
  316. {
  317. new str[128];
  318. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[a],k);
  319. IDKate=a;
  320. INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = k);
  321. }
  322. }
  323. }
  324. }
  325. if(prov==0) return ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Pogresno Ime", "Upisite ime lokacije", "Uredu", "Odustani");
  326. SendClientMessage(playerid,-1,"Uspjesno obrisana lokacija!");
  327. }
  328. if(dialogid == DIALOG_PREMJESTILOK)
  329. {
  330. new ime[90],prov=0;
  331. if(!response) return 1;
  332. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_PREMJESTILOK, DIALOG_STYLE_INPUT, "Ime", "Upisite ime lokacije koju zelite premjestit", "Uredu", "Odustani");
  333. for(new i=0;i<sizeof(TeleInfo);i++)
  334. {
  335. for(new a=0;a<20;a++)
  336. {
  337. if(udb_hash(TeleInfo[a][i][Ime]) == udb_hash(ime))
  338. {
  339. IDKate=a;
  340. IDLok=i;
  341. ShowPlayerDialog(playerid, DIALOG_PREMJESTIKAT, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije u koju zelite smjestit lokaciju", "Uredu", "Odustani");
  342. prov=1;
  343. }
  344. }
  345. }
  346. if(prov==0) return ShowPlayerDialog(playerid, DIALOG_PREMJESTILOK, DIALOG_STYLE_INPUT, "Pogresno Ime", "Upisite ime lokacije koju zelite premjestit", "Uredu", "Odustani");
  347. }
  348.  
  349. if(dialogid == DIALOG_PREMJESTIKAT)
  350. {
  351. new ime[90],prov=0;
  352. if(!response) return 1;
  353. if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_PREMJESTIKAT, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije u koju zelite smjestit lokaciju", "Uredu", "Odustani");
  354. for(new e=0;e<20;e++)
  355. {
  356. if(udb_hash(Kategorija[e]) == udb_hash(ime))
  357. {
  358. for(new j=0;j<sizeof(TeleInfo);j++)
  359. {
  360. new str[128];
  361. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[e],j);
  362. if(!fexist(str))
  363. {
  364. strmid(TeleInfo[e][j][Ime],TeleInfo[IDKate][IDLok][Ime],0,strlen(TeleInfo[IDKate][IDLok][Ime]),255);
  365. TeleInfo[e][j][teX]=TeleInfo[IDKate][IDLok][teX];
  366. TeleInfo[e][j][teY]=TeleInfo[IDKate][IDLok][teY];
  367. TeleInfo[e][j][teZ]=TeleInfo[IDKate][IDLok][teZ];
  368. TeleInfo[e][j][teA]=TeleInfo[IDKate][IDLok][teA];
  369. SacuvajLokacije(j,e);
  370. prov=1;
  371. break;
  372. }
  373. }
  374. }
  375. }
  376. TeleInfo[IDKate][IDLok][teX] = 0;
  377. TeleInfo[IDKate][IDLok][teY] = 0;
  378. TeleInfo[IDKate][IDLok][teZ] = 0;
  379. TeleInfo[IDKate][IDLok][teA] = 0;
  380. fremove(TelePath(IDLok,IDKate));
  381. new id=IDLok;
  382. for(new j=id+1;j<sizeof(TeleInfo);j++)
  383. {
  384. new str[128];
  385. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[IDKate],j);
  386. if(fexist(str))
  387. {
  388. fremove(str);
  389. SacuvajLokacije2(j,IDKate);
  390. }
  391. }
  392. for(new k=0;k<sizeof(TeleInfo);k++)
  393. {
  394. new str[128];
  395. format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[IDKate],k);
  396. INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = k);
  397. }
  398. if(prov==0) return ShowPlayerDialog(playerid, DIALOG_PREMJESTIKAT, DIALOG_STYLE_INPUT, "Krivo Ime", "Upisite ime kategorije u koju zelite smjestit lokaciju", "Uredu", "Odustani");
  399. SendClientMessage(playerid,-1,"Uspjesno premjestena lokacija!");
  400. }
  401. if(dialogid == DIALOG_TEDIT)
  402. {
  403. if(response)
  404. {
  405. if(listitem == 0)
  406. {
  407. ShowPlayerDialog(playerid, DIALOG_KATEGORIJA, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije", "Uredu", "Odustani");
  408. }
  409. if(listitem == 1)
  410. {
  411. SendClientMessage(playerid,-1,"Upozorenje: Lokacija porta se sprema na vasim trenutnim koordinatama!");
  412. ShowPlayerDialog(playerid, DIALOG_KLOKACIJA, DIALOG_STYLE_INPUT, "Upisi ime kategorije", "Upisite ime kategorije pod koju zelite staviti novu lokaciju!", "Uredu", "Odustani");
  413. }
  414. if(listitem == 2)
  415. {
  416. //ShowPlayerDialog(playerid, DIALOG_OBRISIKAT, DIALOG_STYLE_INPUT, "Ime", "Upisite ime kategorije koju zelite obrisati", "Uredu", "Odustani");
  417. }
  418. if(listitem == 3)
  419. {
  420. ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Ime", "Upisite ime lokacije", "Uredu", "Odustani");
  421. }
  422. if(listitem == 4)
  423. {
  424. ShowPlayerDialog(playerid, DIALOG_PREMJESTILOK, DIALOG_STYLE_INPUT, "Ime", "Upisite ime lokacije koju zelite premjestiti", "Uredu", "Odustani");
  425. }
  426. }
  427. }
  428. if(dialogid == DIALOG_TELE)
  429. {
  430. if(response)
  431. {
  432. new id=listitem;
  433. if(IsPlayerInAnyVehicle(playerid))
  434. {
  435. SetVehiclePos(GetPlayerVehicleID(playerid), TeleInfo[kata][id][teX],TeleInfo[kata][id][teY],TeleInfo[kata][id][teZ]);
  436. SetVehicleZAngle(GetPlayerVehicleID(playerid),TeleInfo[kata][id][teA]);
  437. PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
  438. }
  439. else
  440. {
  441. SetPlayerPos(playerid,TeleInfo[kata][id][teX],TeleInfo[kata][id][teY],TeleInfo[kata][id][teZ]);
  442. SetPlayerFacingAngle(playerid, TeleInfo[kata][id][teA]);
  443. }
  444. Port(playerid);
  445. new str[128];
  446. format(str,sizeof(str),"{FF9900}Portani ste na {FFFFFF}%s!",TeleInfo[kata][id][Ime]);
  447. SendClientMessage(playerid,-1,str);
  448. }
  449. }
  450. if(dialogid == DIALOG_KTELE)
  451. {
  452. if(response)
  453. {
  454. kata=listitem;
  455. new info[2100];
  456. for(new i=0;i<MAX_TELE;i++)
  457. {
  458. if(TeleInfo[kata][i][teX] != 0 && TeleInfo[kata][i][teY] != 0)
  459. {
  460. new str[128];
  461. format(str,sizeof(str),"%s\n",TeleInfo[kata][i][Ime]);
  462. strcat(info, str, sizeof(info));
  463. }
  464. }
  465. ShowPlayerDialog(playerid, DIALOG_TELE, DIALOG_STYLE_LIST, "Teleport", info, "Dalje", "Izlaz");
  466. }
  467. }
  468. return 1;
  469. }
  470.  
  471. CMD:ureditele(playerid,params[])
  472. {
  473. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"[#Sikora] Samo rcon admin");
  474. if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Ne smijete biti u vozilu!");
  475. ShowPlayerDialog(playerid, DIALOG_TEDIT, DIALOG_STYLE_LIST, "Uredjivanje", "Dodaj kategoriju\nDodaj lokaciju\nObrisi kategoriju(TRENUTNO NEDOSTUPNO)\nObrisi lokaciju\nPremjesti lokaciju", "Uredu", "Odustani");
  476. return 1;
  477. }
  478.  
  479. CMD:tele(playerid, params[])
  480. {
  481. if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,-1,"Niste prijaviti!");
  482. new info[1024];
  483. for(new i=0;i<20;i++)
  484. {
  485. if(udb_hash(Kategorija[i]) != udb_hash("Nema"))
  486. {
  487. new str[128];
  488. format(str,sizeof(str),"%s\n",Kategorija[i]);
  489. strcat(info, str, sizeof(info));
  490. }
  491. }
  492. ShowPlayerDialog(playerid, DIALOG_KTELE, DIALOG_STYLE_LIST, "Teleport", info, "Dalje", "Izlaz");
  493. return 1;
  494. }
Add Comment
Please, Sign In to add comment