Advertisement
Guest User

Untitled

a guest
Sep 10th, 2014
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.64 KB | None | 0 0
  1. //----------------------------------------------------------------//
  2. // Handysystem v.1 - Gescriptet von .Toby - since. 2013 //
  3. //----------------------------------------------------------------//
  4. //Includes
  5. #include <a_samp>
  6. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  7.  
  8. //Farbcodes
  9. #define COLOR_RED 0xFF0A00FF
  10.  
  11. //Definierungen
  12. enum handyenum
  13. {
  14. Nummer,
  15. Akku,
  16. HatHandy,
  17. bool:On
  18. };
  19. new Handy[MAX_PLAYERS][handyenum];
  20. new eingangpickup;
  21. new ausgangpickup;
  22. new bool:Aktiv[MAX_PLAYERS];
  23. new Anderer[MAX_PLAYERS];
  24. new wirdangerufen[MAX_PLAYERS];
  25.  
  26. public OnFilterScriptInit()
  27. {
  28. print("\n--------------------------------------");
  29. print(" Handysystem by .Toby wurde geladen...");
  30. print("--------------------------------------\n");
  31. SetTimer("Handyakku",10000,1);
  32. eingangpickup = CreatePickup(1239, 2, 1161.6005,-1602.5582,13.5469,0);
  33. ausgangpickup = CreatePickup(1239, 2, -2240.468505,137.060440,1035.414062,0);
  34. return 1;
  35. }
  36.  
  37. public OnFilterScriptExit()
  38. {
  39. print("\n--------------------------------------");
  40. print(" Handysystem by .Toby wurde entladen...");
  41. print("--------------------------------------\n");
  42. return 1;
  43. }
  44.  
  45. public OnPlayerText(playerid, text[])
  46. {
  47. if(Aktiv[playerid] == true)
  48. {
  49. new string[128];
  50. format(string,sizeof(string),"Ins Handy: %s",text);
  51. SendClientMessage(playerid,COLOR_RED,string);
  52. format(string,sizeof(string),"Handy: %s",text);
  53. SendClientMessage(Anderer[playerid],COLOR_RED,string);
  54. }
  55. return 1;
  56. }
  57.  
  58. public OnPlayerConnect(playerid)
  59. {
  60. Handy[playerid][Nummer] = playerid + 100 + random(500);
  61. Handy[playerid][Akku] = 0;
  62. Handy[playerid][HatHandy] = 0;
  63. Handy[playerid][On] = false;
  64. wirdangerufen[playerid] = -1;
  65. Anderer[playerid] = 0-1;
  66. return 1;
  67. }
  68.  
  69. public OnPlayerCommandText(playerid, cmdtext[])
  70. {
  71. dcmd(call,4,cmdtext);
  72. dcmd(sms,3,cmdtext);
  73. dcmd(aufladen,8,cmdtext);
  74. dcmd(handykaufen,11,cmdtext);
  75. dcmd(pickup,1,cmdtext);
  76. dcmd(hangup,1,cmdtext);
  77. dcmd(handy,2,cmdtext);
  78. return 0;
  79. }
  80.  
  81. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  82. {
  83. new string[128];
  84. format(string,sizeof(string),"Telefonnummer: %d",Handy[clickedplayerid][Nummer]);
  85. SendClientMessage(playerid, COLOR_RED,string);
  86. return 1;
  87. }
  88.  
  89. public OnPlayerPickUpPickup(playerid, pickupid)
  90. {
  91. if(pickupid == eingangpickup)
  92. {
  93. SetPlayerPos(playerid,-2243.468505,137.060440,1035.414062);
  94. SetPlayerInterior(playerid,6);
  95. }
  96. if(pickupid == ausgangpickup)
  97. {
  98. SetPlayerPos(playerid,1165.6005,-1602.5582,13.5469);
  99. SetPlayerInterior(playerid,0);
  100. }
  101. return 1;
  102. }
  103.  
  104. //Eigene Publics
  105. forward Handyakku();
  106. public Handyakku()
  107. {
  108. for(new i; i < MAX_PLAYERS; i++)
  109. {
  110. if(Handy[i][HatHandy] > 0)
  111. {
  112. if(Handy[i][On] == true)
  113. {
  114. Handy[i][Akku] --;
  115. }
  116. if(Handy[i][Akku] <= 0)
  117. {
  118. Handy[i][On] = false;
  119. }
  120. }
  121. }
  122. return 1;
  123. }
  124. //Befehle
  125. dcmd_handykaufen(playerid,params[])
  126. {
  127. #pragma unused params
  128. if(Handy[playerid][HatHandy] == 1) return SendClientMessage(playerid,COLOR_RED," Du hast schon ein Handy");
  129. if(!IsPlayerInRangeOfPoint(playerid,10.0,-2240.468505,137.060440,1035.414062)) return SendClientMessage(playerid,COLOR_RED," Du bist nicht am Handyladen");
  130. if(GetPlayerMoney(playerid) < 50) return SendClientMessage(playerid,COLOR_RED," Du hast nicht genug Geld");
  131. Handy[playerid][HatHandy] = 1;
  132. SendClientMessage(playerid,COLOR_RED,"Du hast nun ein eigenes Handy");
  133. GivePlayerMoney(playerid,-50);
  134. return 1;
  135. }
  136.  
  137. dcmd_aufladen(playerid,params[])
  138. {
  139. #pragma unused params
  140. if(Handy[playerid][HatHandy] == 0)return SendClientMessage(playerid,COLOR_RED,"Du hast kein Handy");
  141. if(!IsPlayerInRangeOfPoint(playerid,10.0,-2240.468505,137.060440,1035.414062)) return SendClientMessage(playerid,COLOR_RED," Du bist nicht am Handyladen");
  142. Handy[playerid][Akku] = 100;
  143. SendClientMessage(playerid,COLOR_RED,"Handy aufgeladen");
  144. return 1;
  145. }
  146.  
  147. dcmd_handy(playerid,params[])
  148. {
  149. #pragma unused params
  150. if(Handy[playerid][HatHandy] == 0)return SendClientMessage(playerid,COLOR_RED,"Du hast kein Handy");
  151. switch(Handy[playerid][On])
  152. {
  153. case true:
  154. {
  155. if(Handy[playerid][Akku] >0)
  156. {
  157. Handy[playerid][On] = false;
  158. SendClientMessage(playerid,COLOR_RED,"Handy ausgeschaltet");
  159. }
  160. else return SendClientMessage(playerid,COLOR_RED,"Akku leer");
  161. }
  162. case false:{ Handy[playerid][On] = true; SendClientMessage(playerid,COLOR_RED,"Handy angeschaltet");}
  163. }
  164. return 1;
  165. }
  166. dcmd_sms(playerid,params[])
  167. {
  168.  
  169. new nummer,string[128];
  170. if(sscanf(params,"is",nummer,string))return SendClientMessage(playerid, COLOR_RED,"[Benutzung]: /sms [nummer] [text]");
  171. if(Handy[playerid][HatHandy] == 0 || Handy[playerid][On] == false)return SendClientMessage(playerid,COLOR_RED,"Du hast kein Handy doer es ist nicht an!");
  172. for(new i; i < MAX_PLAYERS; i++)
  173. {
  174. if(IsPlayerConnected(i))
  175. {
  176. if(Handy[i][Nummer] == nummer)
  177. {
  178. new text[128];
  179. format(text,sizeof(text),"SMS: %s | NUMMER:%d",Handy[playerid][Nummer],string);
  180. SendClientMessage(i,COLOR_RED,text);
  181. format(text,sizeof(text),"SMS an %d gesendet",nummer);
  182. SendClientMessage(playerid,COLOR_RED,text);
  183. return 1;
  184. }
  185. else
  186. {
  187. if(i == 499) return SendClientMessage(playerid,COLOR_RED," Kein Anschluss unter dieser Nummer");
  188. }
  189. }
  190. }
  191. return 1;
  192. }
  193. dcmd_call(playerid,params[])
  194. {
  195. new nummer;
  196. if(sscanf(params,"i",nummer))return SendClientMessage(playerid, COLOR_RED,"[Benutzung]: /call [nummer]");
  197. if(Handy[playerid][HatHandy] == 0 || Handy[playerid][On] == false)return SendClientMessage(playerid,COLOR_RED,"Du hast kein Handy doer es ist nicht an!");
  198. if(Aktiv[playerid] == true) return SendClientMessage(playerid,COLOR_RED,"Du bist schon am Telefonieren");
  199. for(new i; i < MAX_PLAYERS; i++)
  200. {
  201. if(IsPlayerConnected(i))
  202. {
  203. if(Handy[i][Nummer] == nummer)
  204. {
  205. if(Handy[i][HatHandy] == 0 || Handy[i][On] == false)return SendClientMessage(playerid,COLOR_RED,"Der gewünschste Gesprächtsteilnehmer ist nicht zu erreichen");
  206. new text[128];
  207. format(text,sizeof(text),"Du wirst angerufen Nummer: %d",Handy[playerid][Nummer]);
  208. SendClientMessage(i,COLOR_RED,text);
  209. Aktiv[playerid] = true;
  210. wirdangerufen[i] = playerid;
  211. return 1;
  212. }
  213. else
  214. {
  215. if(i == 499) return SendClientMessage(playerid,COLOR_RED," Kein Anschluss unter dieser Nummer");
  216. }
  217. }
  218. }
  219. return 1;
  220. }
  221. dcmd_pickup(playerid,params[])
  222. {
  223. #pragma unused params
  224. if(wirdangerufen[playerid] >= 0)
  225. {
  226. Anderer[playerid] = wirdangerufen[playerid];
  227. Anderer[wirdangerufen[playerid]] = playerid;
  228. wirdangerufen[playerid] = 0;
  229. Aktiv[playerid] = true;
  230. SendClientMessage(wirdangerufen[playerid],COLOR_RED," Handy wurde abgenommen");
  231. SendClientMessage(playerid,COLOR_RED,"Du hast das Handy agenommen");
  232. return 1;
  233. }
  234. return 1;
  235. }
  236. dcmd_hangup(playerid,params[])
  237. {
  238. #pragma unused params
  239. if(wirdangerufen[playerid] >= 0||Anderer[playerid] >= 0)
  240. {
  241. Anderer[Anderer[playerid]] = -1;
  242. Anderer[playerid] = -1;
  243. wirdangerufen[playerid] = -1;
  244. Aktiv[playerid] = true;
  245. Aktiv[Anderer[playerid]] = true;
  246. SendClientMessage(wirdangerufen[playerid],COLOR_RED," Handy wurde abgelehnt");
  247. SendClientMessage(playerid,COLOR_RED,"Handy abgelehnt");
  248. return 1;
  249. }
  250. return 1;
  251. }
  252.  
  253. //SSCANF
  254. stock sscanf(string[], format[], {Float,_}:...)
  255. {
  256. #if defined isnull
  257. if (isnull(string))
  258. #else
  259. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  260. #endif
  261. {
  262. return format[0];
  263. }
  264. #pragma tabsize 4
  265. new
  266. formatPos = 0,
  267. stringPos = 0,
  268. paramPos = 2,
  269. paramCount = numargs(),
  270. delim = ' ';
  271. while (string[stringPos] && string[stringPos] <= ' ')
  272. {
  273. stringPos++;
  274. }
  275. while (paramPos < paramCount && string[stringPos])
  276. {
  277. switch (format[formatPos++])
  278. {
  279. case '\0':
  280. {
  281. return 0;
  282. }
  283. case 'i', 'd':
  284. {
  285. new
  286. neg = 1,
  287. num = 0,
  288. ch = string[stringPos];
  289. if (ch == '-')
  290. {
  291. neg = -1;
  292. ch = string[++stringPos];
  293. }
  294. do
  295. {
  296. stringPos++;
  297. if ('0' <= ch <= '9')
  298. {
  299. num = (num * 10) + (ch - '0');
  300. }
  301. else
  302. {
  303. return -1;
  304. }
  305. }
  306. while ((ch = string[stringPos]) > ' ' && ch != delim);
  307. setarg(paramPos, 0, num * neg);
  308. }
  309. case 'h', 'x':
  310. {
  311. new
  312. num = 0,
  313. ch = string[stringPos];
  314. do
  315. {
  316. stringPos++;
  317. switch (ch)
  318. {
  319. case 'x', 'X':
  320. {
  321. num = 0;
  322. continue;
  323. }
  324. case '0' .. '9':
  325. {
  326. num = (num << 4) | (ch - '0');
  327. }
  328. case 'a' .. 'f':
  329. {
  330. num = (num << 4) | (ch - ('a' - 10));
  331. }
  332. case 'A' .. 'F':
  333. {
  334. num = (num << 4) | (ch - ('A' - 10));
  335. }
  336. default:
  337. {
  338. return -1;
  339. }
  340. }
  341. }
  342. while ((ch = string[stringPos]) > ' ' && ch != delim);
  343. setarg(paramPos, 0, num);
  344. }
  345. case 'c':
  346. {
  347. setarg(paramPos, 0, string[stringPos++]);
  348. }
  349. case 'f':
  350. {
  351.  
  352. new changestr[16], changepos = 0, strpos = stringPos;
  353. while(changepos < 16 && string[strpos] && string[strpos] != delim)
  354. {
  355. changestr[changepos++] = string[strpos++];
  356. }
  357. changestr[changepos] = '\0';
  358. setarg(paramPos,0,_:floatstr(changestr));
  359. }
  360. case 'p':
  361. {
  362. delim = format[formatPos++];
  363. continue;
  364. }
  365. case '\'':
  366. {
  367. new
  368. end = formatPos - 1,
  369. ch;
  370. while ((ch = format[++end]) && ch != '\'') {}
  371. if (!ch)
  372. {
  373. return -1;
  374. }
  375. format[end] = '\0';
  376. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  377. {
  378. if (format[end + 1])
  379. {
  380. return -1;
  381. }
  382. return 0;
  383. }
  384. format[end] = '\'';
  385. stringPos = ch + (end - formatPos);
  386. formatPos = end + 1;
  387. }
  388. case 'u':
  389. {
  390. new
  391. end = stringPos - 1,
  392. id = 0,
  393. bool:num = true,
  394. ch;
  395. while ((ch = string[++end]) && ch != delim)
  396. {
  397. if (num)
  398. {
  399. if ('0' <= ch <= '9')
  400. {
  401. id = (id * 10) + (ch - '0');
  402. }
  403. else
  404. {
  405. num = false;
  406. }
  407. }
  408. }
  409. if (num && IsPlayerConnected(id))
  410. {
  411. setarg(paramPos, 0, id);
  412. }
  413. else
  414. {
  415. #if !defined foreach
  416. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  417. #define __SSCANF_FOREACH__
  418. #endif
  419. string[end] = '\0';
  420. num = false;
  421. new
  422. name[MAX_PLAYER_NAME];
  423. id = end - stringPos;
  424. foreach (Player, playerid)
  425. {
  426. GetPlayerName(playerid, name, sizeof (name));
  427. if (!strcmp(name, string[stringPos], true, id))
  428. {
  429. setarg(paramPos, 0, playerid);
  430. num = true;
  431. break;
  432. }
  433. }
  434. if (!num)
  435. {
  436. setarg(paramPos, 0, INVALID_PLAYER_ID);
  437. }
  438. string[end] = ch;
  439. #if defined __SSCANF_FOREACH__
  440. #undef foreach
  441. #undef __SSCANF_FOREACH__
  442. #endif
  443. }
  444. stringPos = end;
  445. }
  446. case 's', 'z':
  447. {
  448. new
  449. i = 0,
  450. ch;
  451. if (format[formatPos])
  452. {
  453. while ((ch = string[stringPos++]) && ch != delim)
  454. {
  455. setarg(paramPos, i++, ch);
  456. }
  457. if (!i)
  458. {
  459. return -1;
  460. }
  461. }
  462. else
  463. {
  464. while ((ch = string[stringPos++]))
  465. {
  466. setarg(paramPos, i++, ch);
  467. }
  468. }
  469. stringPos--;
  470. setarg(paramPos, i, '\0');
  471. }
  472. default:
  473. {
  474. continue;
  475. }
  476. }
  477. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  478. {
  479. stringPos++;
  480. }
  481. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  482. {
  483. stringPos++;
  484. }
  485. paramPos++;
  486. }
  487. do
  488. {
  489. if ((delim = format[formatPos++]) > ' ')
  490. {
  491. if (delim == '\'')
  492. {
  493. while ((delim = format[formatPos++]) && delim != '\'') {}
  494. }
  495. else if (delim != 'z')
  496. {
  497. return delim;
  498. }
  499. }
  500. }
  501. while (delim > ' ');
  502. return 0;
  503. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement