Guest User

Wanted Textdraw System by FreshDiddi

a guest
Jun 14th, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.72 KB | None | 0 0
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //////////////////////////////////// >>WANTEDSYSTEM BY FRESHDIDDI(R)<< ////////////////////////////////////////////////
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4.  
  5. #include <a_samp>
  6. #include <zcmd>
  7. #include <dini>
  8.  
  9. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10.  
  11. #define COLOR_GREY 0xAFAFAFAA
  12. #define COLOR_YELLOW 0xFFFF00AA
  13. #define COLOR_RED 0xFF4122FF
  14.  
  15. //#define WANTEDTIMER 1 //Nach 15 Minuten verschwindet ein Wanted / Zum aktivieren des Timers: Einfach den Schrägstrich vor "#define" entfernen!
  16. //#define LOADSAFEWANTEDS //Wanteds werden gespeichert/geladen / Zum aktivieren des Timers: Einfach den Schrägstrich vor "#define" entfernen!
  17.  
  18. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19.  
  20. new Text:WantedTextdraw[MAX_PLAYERS];
  21. #if defined WANTEDTIMER
  22. new WantedTimer[MAX_PLAYERS];
  23. #endif
  24.  
  25. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26.  
  27. public OnFilterScriptInit()
  28. {
  29. print("\n--------------------------------------");
  30. print("WantedSystem by FreshDiddi - geladen!");
  31. print("--------------------------------------\n");
  32. return 1;
  33. }
  34.  
  35. public OnFilterScriptExit()
  36. {
  37. for(new i = 0; i < MAX_PLAYERS; i++)
  38. {
  39. DeletePVar(i,"Wantedlevel");
  40. TextDrawDestroy(WantedTextdraw[i]);
  41. SaveWanteds(i);
  42. #if defined WANTEDTIMER
  43. KillTimer(WantedTimer[i]);
  44. #endif
  45. }
  46. return 1;
  47. }
  48.  
  49. public OnPlayerConnect(playerid)
  50. {
  51. LoadWanteds(playerid);
  52. WantedTextdraw[playerid] = TextDrawCreate(499.000000, 102.000000, "~y~]: ~w~0");
  53. TextDrawBackgroundColor(WantedTextdraw[playerid], 255);
  54. TextDrawFont(WantedTextdraw[playerid], 2);
  55. TextDrawLetterSize(WantedTextdraw[playerid], 0.480000, 2.000000);
  56. TextDrawColor(WantedTextdraw[playerid], -1);
  57. TextDrawSetOutline(WantedTextdraw[playerid], 1);
  58. TextDrawSetProportional(WantedTextdraw[playerid], 1);
  59. UpdateWantedDraw(playerid);
  60. return 1;
  61. }
  62.  
  63. public OnPlayerDisconnect(playerid, reason)
  64. {
  65. SaveWanteds(playerid);
  66. return 1;
  67. }
  68. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69.  
  70. COMMAND:wanted(playerid,params[])
  71. {
  72. new str[128], pID, wantedlevel;
  73. if(sscanf(params, "ui", pID, wantedlevel))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /wanted [ID] [Wanteds]");
  74. if(IsPlayerConnected(pID))
  75. {
  76. if(!IsPlayerNPC(pID))
  77. {
  78. format(str,sizeof(str),"Du gibst %s [ID: %i] %i Wanted(s).", SpielerName(pID), pID, wantedlevel);
  79. SendClientMessage(playerid, COLOR_YELLOW, str);
  80. SetWantedLevel(pID,GetWantedLevel(pID)+wantedlevel);
  81. format(str,sizeof(str),"Du erhälst %i Wanted(s) von der Polizei. Aktuelles Wantedlevel: %i", wantedlevel, GetWantedLevel(playerid));
  82. SendClientMessage(pID, COLOR_YELLOW, str);
  83. return 1;
  84. }else return SendClientMessage(playerid,COLOR_GREY,"Du kannst einem NPC keine Wanteds geben.");
  85. }else return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht connected.");
  86. }
  87.  
  88. COMMAND:wantedlist(playerid,params[])
  89. {
  90. new string[64];
  91. SendClientMessage(playerid, COLOR_RED,"-----Wanted - Liste-----");
  92. for(new i = 0; i < MAX_PLAYERS; i++)
  93. {
  94. if(IsPlayerConnected(i))
  95. {
  96. if(!IsPlayerNPC(i))
  97. {
  98. if(GetWantedLevel(i) >=1)
  99. {
  100. format(string, sizeof(string), "%s - Wanteds: %d", SpielerName(i), GetWantedLevel(i));
  101. SendClientMessage(playerid, COLOR_YELLOW,string);
  102. }
  103. }
  104. }
  105. }
  106. return 1;
  107. }
  108.  
  109. COMMAND:clearwanted(playerid,params[])
  110. {
  111. new str[128], pID;
  112. if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /clearwanted [ID]");
  113. if(IsPlayerConnected(pID))
  114. {
  115. if(!IsPlayerNPC(pID))
  116. {
  117. format(str,sizeof(str),"Du clearst die Wanteds von %s [ID: %i].", SpielerName(pID), pID);
  118. SendClientMessage(playerid, COLOR_YELLOW, str);
  119. SendClientMessage(pID, COLOR_YELLOW, "Deine Wanteds wurden von der Polizei gecleart.");
  120. SetWantedLevel(pID,0);
  121. return 1;
  122. }else return SendClientMessage(playerid,COLOR_GREY,"Du kannst einem NPC keine Wanteds geben.");
  123. }else return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht connected.");
  124. }
  125.  
  126. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  127.  
  128. forward WantedTimerPublic(playerid);
  129. public WantedTimerPublic(playerid)
  130. {
  131. if(GetWantedLevel(playerid)>=1)
  132. {
  133. SetWantedLevel(playerid,GetWantedLevel(playerid)-1);
  134. new str[200];
  135. format(str,sizeof(str),"Du hast ein Wantedlevel verloren. Aktuelles Wantedlevel: %i", GetWantedLevel(playerid));
  136. SendClientMessage(playerid, COLOR_YELLOW, str);
  137. return 1;
  138. }return 1;
  139. }
  140.  
  141. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  142.  
  143. stock LoadWanteds(playerid)
  144. {
  145. if(!IsPlayerNPC(playerid))
  146. {
  147. #if defined LOADSAFEWANTEDS
  148. new WantedAccount[100];
  149. format(WantedAccount,sizeof(WantedAccount),"/WantedSystem/%s.ini",SpielerName(playerid));
  150. if(!dini_Exists(WantedAccount))
  151. {
  152. dini_Create(WantedAccount);
  153. }
  154. SetPVarInt(playerid,"Wantedlevel",dini_Int(WantedAccount,"Wantedlevel"));
  155. #endif
  156. #if defined WANTEDTIMER
  157. WantedTimer[playerid]=SetTimerEx("WantedTimerPublic", (WANTEDTIMER*1000)*60, true, "i", playerid);
  158. #endif
  159. return 1;
  160. }return 1;
  161. }
  162.  
  163. stock SaveWanteds(playerid)
  164. {
  165. if(!IsPlayerNPC(playerid))
  166. {
  167. #if defined LOADSAFEWANTEDS
  168. new WantedAccount[100];
  169. format(WantedAccount,sizeof(WantedAccount),"/WantedSystem/%s.ini",SpielerName(playerid));
  170. if(!dini_Exists(WantedAccount))
  171. {
  172. dini_Create(WantedAccount);
  173. }
  174. dini_IntSet(WantedAccount,"Wantedlevel",GetPVarInt(playerid,"Wantedlevel"));
  175. #endif
  176. TextDrawDestroy(WantedTextdraw[playerid]);
  177. #if defined WANTEDTIMER
  178. KillTimer(WantedTimer[playerid]);
  179. #endif
  180. DeletePVar(playerid,"Wantedlevel");
  181. return 1;
  182. }return 1;
  183. }
  184.  
  185. stock GetWantedLevel(playerid)
  186. {
  187. return GetPVarInt(playerid,"Wantedlevel");
  188. }
  189.  
  190. stock SetWantedLevel(playerid,wantedlevel)
  191. {
  192. SetPVarInt(playerid,"Wantedlevel",wantedlevel);
  193. UpdateWantedDraw(playerid);
  194. return 1;
  195. }
  196.  
  197. stock UpdateWantedDraw(playerid)
  198. {
  199. if(GetWantedLevel(playerid)==0)
  200. {
  201. TextDrawHideForPlayer(playerid,WantedTextdraw[playerid]);
  202. }
  203. if(GetWantedLevel(playerid)>=1)
  204. {
  205. TextDrawHideForPlayer(playerid, WantedTextdraw[playerid]);
  206. new str[30];
  207. format(str,sizeof(str),"~y~]: ~w~%d",GetWantedLevel(playerid));
  208. TextDrawSetString(WantedTextdraw[playerid], str);
  209. TextDrawShowForPlayer(playerid, WantedTextdraw[playerid]);
  210. }
  211. return 1;
  212. }
  213.  
  214. stock SpielerName(playerid)
  215. {
  216. new name[MAX_PLAYER_NAME];
  217. GetPlayerName(playerid,name,sizeof(name));
  218. return name;
  219. }
  220.  
  221. /*>>>>>>>>>>>>>>>>>SSCANF<<<<<<<<<<<<<<<<<<<<<*/
  222. stock sscanf(sstring[], format[], {Float,_}:...)
  223. {
  224. #if defined isnull
  225. if (isnull(sstring))
  226. #else
  227. if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0))
  228. #endif
  229. {
  230. return format[0];
  231. }
  232. #pragma tabsize 4
  233. new
  234. formatPos = 0,
  235. sstringPos = 0,
  236. paramPos = 2,
  237. paramCount = numargs(),
  238. delim = ' ';
  239. while (sstring[sstringPos] && sstring[sstringPos] <= ' ')
  240. {
  241. sstringPos++;
  242. }
  243. while (paramPos < paramCount && sstring[sstringPos])
  244. {
  245. switch (format[formatPos++])
  246. {
  247. case '\0':
  248. {
  249. return 0;
  250. }
  251. case 'i', 'd':
  252. {
  253. new
  254. neg = 1,
  255. num = 0,
  256. ch = sstring[sstringPos];
  257. if (ch == '-')
  258. {
  259. neg = -1;
  260. ch = sstring[++sstringPos];
  261. }
  262. do
  263. {
  264. sstringPos++;
  265. if ('0' <= ch <= '9')
  266. {
  267. num = (num * 10) + (ch - '0');
  268. }
  269. else
  270. {
  271. return -1;
  272. }
  273. }
  274. while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  275. setarg(paramPos, 0, num * neg);
  276. }
  277. case 'h', 'x':
  278. {
  279. new
  280. num = 0,
  281. ch = sstring[sstringPos];
  282. do
  283. {
  284. sstringPos++;
  285. switch (ch)
  286. {
  287. case 'x', 'X':
  288. {
  289. num = 0;
  290. continue;
  291. }
  292. case '0' .. '9':
  293. {
  294. num = (num << 4) | (ch - '0');
  295. }
  296. case 'a' .. 'f':
  297. {
  298. num = (num << 4) | (ch - ('a' - 10));
  299. }
  300. case 'A' .. 'F':
  301. {
  302. num = (num << 4) | (ch - ('A' - 10));
  303. }
  304. default:
  305. {
  306. return -1;
  307. }
  308. }
  309. }
  310. while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  311. setarg(paramPos, 0, num);
  312. }
  313. case 'c':
  314. {
  315. setarg(paramPos, 0, sstring[sstringPos++]);
  316. }
  317. case 'f':
  318. {
  319.  
  320. new changestr[16], changepos = 0, strpos = sstringPos;
  321. while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim)
  322. {
  323. changestr[changepos++] = sstring[strpos++];
  324. }
  325. changestr[changepos] = '\0';
  326. setarg(paramPos,0,_:floatstr(changestr));
  327. }
  328. case 'p':
  329. {
  330. delim = format[formatPos++];
  331. continue;
  332. }
  333. case '\'':
  334. {
  335. new
  336. end = formatPos - 1,
  337. ch;
  338. while ((ch = format[++end]) && ch != '\'') {}
  339. if (!ch)
  340. {
  341. return -1;
  342. }
  343. format[end] = '\0';
  344. if ((ch = strfind(sstring, format[formatPos], false, sstringPos)) == -1)
  345. {
  346. if (format[end + 1])
  347. {
  348. return -1;
  349. }
  350. return 0;
  351. }
  352. format[end] = '\'';
  353. sstringPos = ch + (end - formatPos);
  354. formatPos = end + 1;
  355. }
  356. case 'u':
  357. {
  358. new
  359. end = sstringPos - 1,
  360. id = 0,
  361. bool:num = true,
  362. ch;
  363. while ((ch = sstring[++end]) && ch != delim)
  364. {
  365. if (num)
  366. {
  367. if ('0' <= ch <= '9')
  368. {
  369. id = (id * 10) + (ch - '0');
  370. }
  371. else
  372. {
  373. num = false;
  374. }
  375. }
  376. }
  377. if (num && IsPlayerConnected(id))
  378. {
  379. setarg(paramPos, 0, id);
  380. }
  381. else
  382. {
  383. #if !defined foreach
  384. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  385. #define __SSCANF_FOREACH__
  386. #endif
  387. sstring[end] = '\0';
  388. num = false;
  389. new
  390. name[MAX_PLAYER_NAME];
  391. id = end - sstringPos;
  392. foreach (Player, playerid)
  393. {
  394. GetPlayerName(playerid, name, sizeof (name));
  395. if (!strcmp(name, sstring[sstringPos], true, id))
  396. {
  397. setarg(paramPos, 0, playerid);
  398. num = true;
  399. break;
  400. }
  401. }
  402. if (!num)
  403. {
  404. setarg(paramPos, 0, INVALID_PLAYER_ID);
  405. }
  406. sstring[end] = ch;
  407. #if defined __SSCANF_FOREACH__
  408. #undef foreach
  409. #undef __SSCANF_FOREACH__
  410. #endif
  411. }
  412. sstringPos = end;
  413. }
  414. case 's', 'z':
  415. {
  416. new
  417. i = 0,
  418. ch;
  419. if (format[formatPos])
  420. {
  421. while ((ch = sstring[sstringPos++]) && ch != delim)
  422. {
  423. setarg(paramPos, i++, ch);
  424. }
  425. if (!i)
  426. {
  427. return -1;
  428. }
  429. }
  430. else
  431. {
  432. while ((ch = sstring[sstringPos++]))
  433. {
  434. setarg(paramPos, i++, ch);
  435. }
  436. }
  437. sstringPos--;
  438. setarg(paramPos, i, '\0');
  439. }
  440. default:
  441. {
  442. continue;
  443. }
  444. }
  445. while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ')
  446. {
  447. sstringPos++;
  448. }
  449. while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' '))
  450. {
  451. sstringPos++;
  452. }
  453. paramPos++;
  454. }
  455. do
  456. {
  457. if ((delim = format[formatPos++]) > ' ')
  458. {
  459. if (delim == '\'')
  460. {
  461. while ((delim = format[formatPos++]) && delim != '\'') {}
  462. }
  463. else if (delim != 'z')
  464. {
  465. return delim;
  466. }
  467. }
  468. }
  469. while (delim > ' ');
  470. return 0;
  471. }
Advertisement
Add Comment
Please, Sign In to add comment