TonyVk

Dinamican Teleport System

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