Guest User

sistem_prijateljaV0.1.pwn by Joy

a guest
Mar 3rd, 2017
1,145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.84 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////
  2. ///////////////////////////SISTEM PRIJATELJA v0.1 by Joy////////////////////////
  3. ////////////////////////////////////////////////////////////////////////////////
  4. /*
  5. P.S: Preporučujem da ovo prebacite u vaš gamemod ukoliko želite ovo koristiti u ozbiljnije svrhe ne biste morali prebacivati
  6. sve funkcije nego možete prilagoditi svojim funkcijama u modu.
  7. Uživajte. ;)
  8. */
  9.  
  10. #include < a_samp >
  11. #include < YSI\y_ini >
  12. #include < foreach >
  13. #include < YSI\y_commands >
  14.  
  15. new prvispawn[MAX_PLAYERS];// trebat ce nam ova varijabla u ovoj FS
  16. new zahtjevzafr[MAX_PLAYERS];// varijabla za slanje zahtjeva za prijateljstvo, nema potrebe da se resetuje
  17. //BOJE
  18. #define server_boja "{0099CC}"
  19.  
  20. //DIJALOZI - vi promijenite IDove kako vama odgovara...
  21. #define PRIJATELJI 12251
  22. #define PRIJATELJIADD 12252
  23. #define PRIJATELJIADD2 12253
  24. #define PRIJATELJIDEL 12254
  25.  
  26. //DIREKTORIJUM - mjesto gdje ce spremati
  27. #define PRIJATELJ_FILE "/Prijatelji/%d.ini"
  28.  
  29. //MJESTO SPREMANJA ACCova - nepotrebno ako ovu FS prebacite u gamemod
  30. #define KORISNICI "Korisnici/%s.ini"
  31.  
  32. //MAX BROJ FAJLOVA
  33. #define MAX_PRIJATELJA (5000)
  34.  
  35. //OSTALE DEFINICIJE
  36. #define SPD ShowPlayerDialog
  37.  
  38. #define GRESKA(%0,%1) \
  39. SendClientMessageEx(%0, -1, "{F5052D}(greska) {FFFFFF} "%1)
  40.  
  41. #define INFO(%0,%1) \
  42. SendClientMessageEx(%0, -1, "{2e9cd1}(info) {FFFFFF} "%1)
  43.  
  44. //ENUM ZA PRIJATELJE
  45. enum enum_Prijatelji
  46. {
  47. joy_ime[MAX_PLAYER_NAME],
  48. joy_Prijatelj[20],
  49. };
  50.  
  51. new Prijatelj[MAX_PRIJATELJA][enum_Prijatelji];
  52.  
  53. //ENUM ZA IGRACA
  54. enum pInfo
  55. {
  56. pPrijatelj
  57. };
  58. new PlayerInfo[MAX_PLAYERS][pInfo];
  59.  
  60. public OnPlayerConnect(playerid)
  61. {
  62. PlayerInfo[playerid][pPrijatelj] = -1; //RESETOVANJE VARIJABLE
  63. prvispawn[playerid] = 1;
  64. return 1;
  65. }
  66.  
  67. public OnPlayerSpawn(playerid)
  68. {
  69. INI_ParseFile( Korisnici(playerid), "LoadPlayer", .bExtra = true, .extra = playerid );
  70. if(prvispawn[playerid] == 1)
  71. {
  72. prvispawn[playerid] = 0;
  73. ProvjeriPrijatelje(playerid); //PROVJERA DA LI IGRAC IMA FAJL ZA PRIJATELJE,AKO NEMA KREIRATI CE, OVO MOZETE STAVITI I POSLE REGISTRACIJE I LOGINA
  74. }
  75. return 1;
  76. }
  77.  
  78. public OnGameModeInit()
  79. {
  80. for(new fr_id = 1; fr_id < MAX_PRIJATELJA; fr_id++)//UCITAVANJE PRIJATELJA
  81. {
  82. new friend_File[50];
  83. format(friend_File, sizeof(friend_File), PRIJATELJ_FILE, fr_id);
  84. if(fexist(friend_File))
  85. {
  86. INI_ParseFile(friend_File, "ucitajprijatelje", .bExtra = true, .extra = fr_id);
  87. }
  88. }
  89. return 1;
  90. }
  91.  
  92. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  93. {
  94. new string[256];
  95. if(dialogid == PRIJATELJI)//DIALOG ZA PRIJATELJ MENI
  96. {
  97. if(!response) return 1;
  98. new prijateljid1 = PlayerInfo[playerid][pPrijatelj];
  99. switch(listitem)
  100. {
  101. case 0://SPISAK PRIJATELJA
  102. {
  103. new string1[256];
  104. new string2[1000];
  105. new string3[1050];
  106. new rednibroj = 0;
  107. for(new i=0; i<20; i++)
  108. {
  109. if(Prijatelj[prijateljid1][joy_Prijatelj][i] != -1)
  110. {
  111. new prijateljid2 = Prijatelj[prijateljid1][joy_Prijatelj][i];
  112. new o[20];
  113. if(IsPlayerConnected(GetPlayerIDS(Prijatelj[prijateljid2][joy_ime])))
  114. {
  115. o = "{00FF00}ONLINE";
  116. }
  117. else { o = "{FF0000}OFFLINE";}
  118.  
  119. rednibroj++;
  120. format(string1, sizeof(string1), ""server_boja"%d.\t%s\t%s\n",rednibroj,Prijatelj[prijateljid2][joy_ime],o);
  121. strcat(string2, string1, sizeof(string2));
  122. }
  123. }
  124. new a[50];
  125. a = "RB\tPrijatelj\tStatus\n";
  126. format(string3, sizeof(string3), "%s%s",a,string2);
  127. ShowPlayerDialog(playerid,0,DIALOG_STYLE_TABLIST_HEADERS,""server_boja"- SVI PRIJATELJI -",string3,""server_boja"Ok","");
  128. }
  129. case 1://DODAVANJE PRIJATELJA
  130. {
  131. SPD(playerid, PRIJATELJIADD, DIALOG_STYLE_INPUT, ""server_boja"- DODAVANJE PRIJATELJA -", "- UNESITE ID IGRACA KOG ZELITE ZA PRIJATELJA -", ""server_boja"Dodaj", ""server_boja"Izlaz");
  132. }
  133. case 2://BRISANJE PRIJATELJA
  134. {
  135. new string1[256];
  136. new string2[1000];
  137. strcat(string2, "- UNESITE SLOT PRIJATELJA KOJEG ZELITE DA OBRISETE -\n\n", sizeof(string2));
  138. for(new i=0; i<20; i++)
  139. {
  140. if(Prijatelj[prijateljid1][joy_Prijatelj][i] != -1)
  141. {
  142. new prijateljid2 = Prijatelj[prijateljid1][joy_Prijatelj][i];
  143. format(string1, sizeof(string1), "[SLOT %d]%s\n",i,Prijatelj[prijateljid2][joy_ime]);
  144. strcat(string2, string1, sizeof(string2));
  145. }
  146. }
  147. SPD(playerid, PRIJATELJIDEL, DIALOG_STYLE_INPUT, ""server_boja"- BRISANJE PRIJATELJA -", string2, ""server_boja"Obrisi", ""server_boja"Izlaz");
  148. }
  149. }
  150. }
  151.  
  152.  
  153. if(dialogid == PRIJATELJIDEL)//BRISANJE PRIJATELJA
  154. {
  155. if(!response) return 1;
  156. new slot = strval(inputtext);
  157. new prijateljid1 = PlayerInfo[playerid][pPrijatelj];
  158. if(Prijatelj[prijateljid1][joy_Prijatelj][slot] == -1) return GRESKA(playerid, "Nemate prijatelja na tom slotu.");
  159. if(slot < 0 || slot > 19) return GRESKA(playerid, "Najmanji slot je 0 a najveci 19!");
  160. Prijatelj[prijateljid1][joy_Prijatelj][slot] = -1;
  161. sacuvajprijatelje(prijateljid1);
  162. INFO(playerid, ""server_boja"Obrisali ste prijatelja na slotu %d.",slot);
  163. }
  164.  
  165. if(dialogid == PRIJATELJIADD)//DODAVANJE PRIJATELJA 1
  166. {
  167. if(!response) return 1;
  168. new id = strval(inputtext);
  169. if(!IsPlayerConnected(id)) return GRESKA(playerid, "Taj igrac nije konektovan!");
  170. if(Imamlimaxprijatelja(playerid)) return GRESKA(playerid, "Imate svih 20 prijatelja,dostigli ste maksimum.");
  171. if(Imamlimaxprijatelja(id)) return GRESKA(playerid, "Taj igrac ima maksimum prijatelja.");
  172. if(Igracvecnalisti(playerid, id)) return GRESKA(playerid, "Taj igrac je vec vas prijatelj!");
  173. if(playerid == id) return GRESKA(playerid, "Ne mozete sebi poslati zahtjev!");
  174. zahtjevzafr[id] = playerid;
  175. //new string[256];
  176. format(string, sizeof(string), "{FFFFFF}Igrac "server_boja"%s {FFFFFF}vam je poslao zahtjev za prijateljstvo.", ImeIgraca(playerid));
  177. ShowPlayerDialog(id,PRIJATELJIADD2,DIALOG_STYLE_MSGBOX,""server_boja"- DODAVANJE PRIJATELJA -",string,""server_boja"Prihvati",""server_boja"Odbij");
  178. }
  179.  
  180. if(dialogid == PRIJATELJIADD2)//DODAVANJE PRIJATELJA 2
  181. {
  182. if(!response) return 1;
  183.  
  184. if(response)
  185. {
  186. INFO(playerid, "Prihvatili ste zahtjev za prijateljstvo.");
  187. INFO(zahtjevzafr[playerid], "Osoba kojoj ste poslali zahtjev je prihvatila, sada ste prijatelji.");
  188. Dodajprijatelja(playerid, zahtjevzafr[playerid]);
  189. Dodajprijatelja(zahtjevzafr[playerid], playerid);
  190. }
  191. }
  192. return 1;
  193. }
  194.  
  195. forward LoadPlayer(playerid, name[], value[]);
  196. public LoadPlayer(playerid, name[], value[])
  197. {
  198. INI_Int( "Prijatelj", PlayerInfo[ playerid ][ pPrijatelj ] );
  199. return true;
  200. }
  201.  
  202. stock SavePlayer(playerid)
  203. {
  204. new INI:File = INI_Open(Korisnici(playerid));
  205. INI_WriteInt( File, "Prijatelj", PlayerInfo[ playerid ][ pPrijatelj ] );
  206. INI_Close(File);
  207. return true;
  208. }
  209.  
  210. YCMD:prijatelji(playerid, params[], help)//KOMANDA ZA PRIJATELJE
  211. {
  212. if(IsPlayerConnected(playerid))
  213. {
  214. SPD(playerid, PRIJATELJI, DIALOG_STYLE_LIST, ""server_boja"- PRIJATELJI v0.1 - by Joy", "1"server_boja"- SVI PRIJATELJI -\n2"server_boja"- DODAJ PRIJATELJA -\n3"server_boja"- OBRISI PRIJATELJA -", ""server_boja"Ok", ""server_boja"Izlaz");
  215. }
  216. return true;
  217. }
  218.  
  219. //////////////////////STOCKOVI I PUBLICI///////////////////////////////////////////////
  220. stock NEPostojilifriendid(id)
  221. {
  222. new frend_File[50];
  223. format(frend_File, sizeof(frend_File), PRIJATELJ_FILE, id);
  224. if(!fexist(frend_File)) { return 1; }
  225. return 0;
  226. }
  227.  
  228. stock Imamlimaxprijatelja(playerid)
  229. {
  230. new prijateljid = PlayerInfo[playerid][pPrijatelj];
  231. for(new i=0; i<20; i++)
  232. {
  233. if(Prijatelj[prijateljid][joy_Prijatelj][i] == -1) return 0;
  234. }
  235. return 1;
  236.  
  237. }
  238.  
  239. stock Igracvecnalisti(playerid, id)
  240. {
  241. new prijateljid1 = PlayerInfo[playerid][pPrijatelj];
  242. new prijateljid2 = PlayerInfo[id][pPrijatelj];
  243. for(new i=0; i<20; i++)
  244. {
  245. if(Prijatelj[prijateljid1][joy_Prijatelj][i] == prijateljid2) return 1;
  246. }
  247.  
  248. return 0;
  249. }
  250.  
  251. stock Dodajprijatelja(id1, id2)
  252. {
  253. new prijateljid1 = PlayerInfo[id1][pPrijatelj];
  254. new prijateljid2 = PlayerInfo[id2][pPrijatelj];
  255. for(new i=0; i<20; i++)
  256. {
  257. if(Prijatelj[prijateljid1][joy_Prijatelj][i] == -1)
  258. {
  259. Prijatelj[prijateljid1][joy_Prijatelj][i] = prijateljid2;
  260. sacuvajprijatelje(prijateljid1);
  261. break;
  262. }
  263. }
  264. return 1;
  265. }
  266. forward ucitajprijatelje(id, name[], value[]);
  267. public ucitajprijatelje(id, name[], value[])
  268. {
  269. new string[MAX_PLAYER_NAME];
  270. INI_String("Ime", Prijatelj[id][joy_ime], MAX_PLAYER_NAME);
  271. for(new i=0; i<20; i++)
  272. {
  273. format(string, sizeof(string),"Prijatelj[%i]",i);
  274. INI_Int(string,Prijatelj[id][joy_Prijatelj][i]);
  275. }
  276. return 1;
  277. }
  278.  
  279. stock sacuvajprijatelje(id)
  280. {
  281. new prijatelj_File[50];
  282. format(prijatelj_File, sizeof(prijatelj_File), PRIJATELJ_FILE, id);
  283. new INI:File = INI_Open(prijatelj_File);
  284. INI_WriteString(File,"Ime", Prijatelj[id][joy_ime]);
  285. new string[50];
  286. for(new i=0; i<20; i++)
  287. {
  288. format(string, sizeof(string),"Prijatelj[%i]",i);
  289. INI_WriteInt(File,string,Prijatelj[id][joy_Prijatelj][i]);
  290. }
  291. INI_Close(File);
  292. return 1;
  293. }
  294.  
  295. stock ProvjeriPrijatelje(playerid)
  296. {
  297. if(PlayerInfo[playerid][pPrijatelj] == -1 || NEPostojilifriendid(PlayerInfo[playerid][pPrijatelj]))//ako je nekome varijabla -1 da mu kreira novi fajl za prijatelje
  298. {
  299. PlayerInfo[playerid][pPrijatelj] = getEmptyID(MAX_PRIJATELJA, PRIJATELJ_FILE);
  300. for(new i=0; i<20; i++)
  301. {
  302. Prijatelj[PlayerInfo[playerid][pPrijatelj]][joy_Prijatelj][i] = -1;
  303. }
  304. strmid(Prijatelj[PlayerInfo[playerid][pPrijatelj]][joy_ime], ImeIgraca(playerid), 0, strlen(ImeIgraca(playerid)), 999);
  305. sacuvajprijatelje(PlayerInfo[playerid][pPrijatelj]);
  306. SavePlayer(playerid);
  307. INFO(playerid, "Kreiran vam je fajl za prijatelje.");
  308. }
  309. return 1;
  310. }
  311.  
  312. forward GetPlayerIDS(string[]);
  313. public GetPlayerIDS(string[])
  314. {
  315. foreach(Player, i)
  316. {
  317. if(IsPlayerConnected(i) == 1)
  318. {
  319. new testname[MAX_PLAYER_NAME];
  320. GetPlayerName(i, testname, sizeof(testname));
  321. if(strcmp(testname, string, true, strlen(string)) == 0)
  322. {
  323. return i;
  324. }
  325. }
  326. }
  327. return INVALID_PLAYER_ID;
  328. }
  329.  
  330. stock SendClientMessageEx(playerid, color, const str[], {Float,_}:...) {
  331. static
  332. args,
  333. start,
  334. end,
  335. string[144]
  336. ;
  337. #emit LOAD.S.pri 8
  338. #emit STOR.pri args
  339.  
  340. if(args > 12)
  341. {
  342. #emit ADDR.pri str
  343. #emit STOR.pri start
  344.  
  345. for (end = start + (args - 12); end > start; end -= 4)
  346. {
  347. #emit LREF.pri end
  348. #emit PUSH.pri
  349. }
  350. #emit PUSH.S str
  351. #emit PUSH.C 144
  352. #emit PUSH.C string
  353. #emit PUSH.C args
  354. #emit SYSREQ.C format
  355.  
  356. SendClientMessage(playerid, color, string);
  357.  
  358. #emit LCTRL 5
  359. #emit SCTRL 4
  360. #emit RETN
  361. }
  362. return SendClientMessage(playerid, color, str);
  363. }
  364.  
  365. stock ImeIgraca(playerid)
  366. {
  367. new name[MAX_PLAYER_NAME];
  368. GetPlayerName(playerid, name, sizeof(name));
  369. return name;
  370. }
  371.  
  372. stock Korisnici(playerid)
  373. {
  374. new string[128];
  375. format(string,sizeof(string),KORISNICI,ImeIgraca(playerid));
  376. return string;
  377. }
  378.  
  379. stock getEmptyID(const len, const lokacija[])
  380. {
  381. new id = (-1);
  382. for(new loop = (0), provjera = (-1), Data_[64] = "\0"; loop != len; ++ loop)
  383. {
  384. provjera = (loop+1);
  385. format(Data_, (sizeof Data_), lokacija ,provjera);
  386. if(!fexist(Data_))
  387. {
  388. id = (provjera);
  389. break;
  390. }
  391. }
  392. return (id);
  393. }
Advertisement
Add Comment
Please, Sign In to add comment