Guest User

Untitled

a guest
May 19th, 2012
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.31 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dini>
  3.  
  4. #define color_admin 0xFFFF00FF
  5. #define color_warn 0xFF421DFF
  6. #define color_error 0xFF0000FF
  7. #define color_server 0xFF00FFFF
  8. #define color_info 0xFFFFFFFF
  9. #define color_rot 0xAA3333AA
  10. #define color_gruen 0x33AA33AA
  11.  
  12. #define MAX_GATES 100
  13. #define TIMER 1000
  14.  
  15. forward Close_Gate();
  16. forward Open_Gate();
  17.  
  18. enum g_daten
  19. {
  20. gID,
  21. gmodel,
  22. Float:gx,
  23. Float:gy,
  24. Float:gz,
  25. Float:grx,
  26. Float:gry,
  27. Float:grz,
  28. gskin,
  29. bool:gopened
  30. }
  31. new TorInfo[MAX_GATES][g_daten];
  32. new bool:AutoOpen, gate_timer;
  33.  
  34. public OnFilterScriptInit()
  35. {
  36. print("\n--------------------------------------");
  37. print(" Version: v3.0");
  38. print(" Dynamisches Tor System -> by Growen");
  39. print(" Imaginäres Copyright by Growen");
  40. print(" GPawn Help -> Tore öffnen Automatisch -> /autogate zum ändern");
  41. print(" GPawn Help -> /ghelp");
  42. print("--------------------------------------\n");
  43. for(new g=1;g<MAX_GATES;g++)
  44. {
  45. Load_Gate(g);
  46. }
  47. AutoOpen=true;
  48. gate_timer=SetTimer("Open_Gate",TIMER,1);
  49. return 1;
  50. }
  51.  
  52. public OnFilterScriptExit()
  53. {
  54. for(new g=1;g<MAX_GATES;g++)
  55. {
  56. DestroyObject(TorInfo[g][gID]);
  57. }
  58. print("\n--------------------------------------");
  59. print(" GPawn Gates Unloaded");
  60. print("--------------------------------------\n");
  61. return 1;
  62. }
  63.  
  64. #define ocmd:%1(%2) forward ocmd_%1(%2);\
  65. public ocmd_%1(%2)
  66. public OnPlayerCommandText(playerid,cmdtext[])
  67. {
  68. cmdtext[0]='_';
  69. new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
  70. for(new i;i<128;i++)
  71. {
  72. if(cmdtext[i]=='\0')break;
  73. if((cmdtext[i]==' ')&&(!ocmdAffe))
  74. {
  75. ocmdAffe=true;
  76. continue;
  77. }
  78. if(!ocmdAffe)ocmdStr[i]=cmdtext[i];
  79. else
  80. {
  81. ocmdParams[ocmdFu]=cmdtext[i];
  82. ocmdFu++;
  83. }
  84. }
  85. format(ocmdStr,128,"ocmd%s",ocmdStr);
  86. if(!strlen(ocmdParams))format(ocmdParams,128," ");
  87. if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1;
  88. cmdtext[0]='/';
  89. return CallLocalFunction("ocmdOnPlayerCommandText","ds",playerid,cmdtext);
  90. }
  91. #define OnPlayerCommandText ocmdOnPlayerCommandText
  92.  
  93. ocmd:ghelp(playerid,params[])
  94. {
  95. SendClientMessage(playerid,color_info,"----------GPawn Gates----------");
  96. SendClientMessage(playerid,color_admin,"/gatecreate ;; /deletegate");
  97. SendClientMessage(playerid,color_admin,"/g ;; /editgate ;; /autogate");
  98. SendClientMessage(playerid,color_info,"-------------------------------");
  99. return 1;
  100. }
  101.  
  102. ocmd:autogate(playerid,params[])
  103. {
  104. if(IsPlayerAdmin(playerid))
  105. {
  106. if(AutoOpen==true)
  107. {
  108. AutoOpen=false;
  109. SendClientMessage(playerid,color_info,"----------GPawn Gates----------");
  110. SendClientMessage(playerid,color_admin,"Tore öffnen nun peer Befehl");
  111. SendClientMessage(playerid,color_info,"-------------------------------");
  112. KillTimer(gate_timer);
  113. }
  114. else if(AutoOpen==false)
  115. {
  116. AutoOpen=true;
  117. SendClientMessage(playerid,color_info,"----------GPawn Gates----------");
  118. SendClientMessage(playerid,color_admin,"Tore öffnen nun Automatisch");
  119. SendClientMessage(playerid,color_info,"-------------------------------");
  120. gate_timer=SetTimer("Open_Gate",TIMER,1);
  121. }
  122. }
  123. return 1;
  124. }
  125.  
  126. ocmd:gatecreate(playerid,params[])
  127. {
  128. new Float:x,
  129. Float:y,
  130. Float:z,
  131. Float:rx=0,
  132. Float:ry=0,
  133. Float:rz=0,
  134. typ,
  135. MODEL,
  136. str[26],
  137. send[50],
  138. skin;
  139. if(sscanf(params, "dd",typ,skin))
  140. {
  141. return SendClientMessage(playerid,color_info,"[GPawn]: /gatecreate [Typ] [Skin- 0=Alle erlaubt]");
  142. }
  143. else if(typ > 3 || typ < 1)
  144. {
  145. return SendClientMessage(playerid, color_admin, "[GPawn]: Falscher Typ des Gates!");
  146. }
  147. else if(IsPlayerAdmin(playerid))
  148. {
  149. GetPlayerPos(playerid,x,y,z);
  150. GetPlayerFacingAngle(playerid,rz);
  151. if(typ==1) {MODEL=985; z=z+0.5;}
  152. if(typ==2) {MODEL=980; z=z+1.5;}
  153. if(typ==3) {MODEL=987; z=z-2;}
  154. format(send,sizeof send,"[GPawn]: Gate Typ %d, erfolgreich erstellt!",typ);
  155. SendClientMessage(playerid,color_admin,send);
  156. if(skin > 0)
  157. {
  158. format(send,sizeof send,"[GPawn]: Nur SkinID %d darf passieren",skin);
  159. SendClientMessage(playerid,color_admin,send);
  160. }
  161. for(new g=1;g<MAX_GATES;g++)
  162. {
  163. format(str, sizeof(str), "GPawn_Gates/gate_%d.gpwn", g);
  164. if(!dini_Exists(str))
  165. {
  166. dini_Create(str);
  167. {
  168. dini_IntSet(str,"Gate_ID",g);
  169. dini_IntSet(str,"Gate_Model",MODEL);
  170. dini_FloatSet(str,"Gate_X",x);
  171. dini_FloatSet(str,"Gate_Y",y);
  172. dini_FloatSet(str,"Gate_Z",z);
  173. dini_FloatSet(str,"Gate_RX",rx);
  174. dini_FloatSet(str,"Gate_RY",ry);
  175. dini_FloatSet(str,"Gate_RZ",rz);
  176. dini_IntSet(str,"Gate_Valid_Skin",skin);
  177. SetPlayerPos(playerid,x+2,y+2,z);
  178. return Load_Gate(g);
  179. }
  180. }
  181. }
  182. }
  183. return 1;
  184. }
  185.  
  186. stock Load_Gate(gateid)
  187. {
  188. new str[26];
  189. format(str, sizeof(str), "GPawn_Gates/gate_%d.gpwn", gateid);
  190. if(gateid == 0)
  191. {
  192. return 1;
  193. }
  194. if(fexist(str))
  195. {
  196. TorInfo[gateid][gmodel] = dini_Int(str,"Gate_Model");
  197. TorInfo[gateid][gskin] = dini_Int(str,"Gate_Valid_Skin");
  198. TorInfo[gateid][gx] = dini_Float(str,"Gate_X"); // hier laden wir die Werte
  199. TorInfo[gateid][gy] = dini_Float(str,"Gate_Y");
  200. TorInfo[gateid][gz] = dini_Float(str,"Gate_Z");
  201. TorInfo[gateid][grx] = dini_Float(str,"Gate_RX");
  202. TorInfo[gateid][gry] = dini_Float(str,"Gate_RY");
  203. TorInfo[gateid][grz] = dini_Float(str,"Gate_RZ");
  204. TorInfo[gateid][gID] = CreateObject(TorInfo[gateid][gmodel],TorInfo[gateid][gx],TorInfo[gateid][gy],TorInfo[gateid][gz],TorInfo[gateid][grx],TorInfo[gateid][gry],TorInfo[gateid][grz],150.0);
  205. }
  206. return 1;
  207. }
  208.  
  209. ocmd:deletegate(playerid,params[])
  210. {
  211. new Float:x,
  212. Float:y,
  213. Float:z,
  214. str[26];
  215. if(IsPlayerAdmin(playerid))
  216. {
  217. GetPlayerPos(playerid,x,y,z);
  218. for(new g=1;g<MAX_GATES;g++)
  219. {
  220. if(IsPlayerInRangeOfPoint(playerid,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
  221. {
  222. SendClientMessage(playerid,color_admin,"[GPawn]: Gate erfolgreich gelöscht!");
  223. format(str,26,"GPawn_Gates/gate_%d.gpwn",g);
  224. dini_Unset(str,"Gate_Model");
  225. dini_Unset(str,"Gate_Valid_Skin");
  226. dini_Unset(str,"Gate_X");
  227. dini_Unset(str,"Gate_Y");
  228. dini_Unset(str,"Gate_Z");
  229. dini_Unset(str,"Gate_RX");
  230. dini_Unset(str,"Gate_RY");
  231. dini_Unset(str,"Gate_RZ");
  232. dini_Unset(str,"Gate_ID");
  233. TorInfo[g][gx]=0;
  234. TorInfo[g][gy]=0;
  235. TorInfo[g][gz]=0;
  236. dini_Remove(str);
  237. return DestroyObject(TorInfo[g][gID]);
  238. }
  239. }
  240. }
  241. return 1;
  242. }
  243.  
  244. ocmd:g(playerid,params[])
  245. {
  246. if(AutoOpen==false)
  247. {
  248. new Float:x,
  249. Float:y,
  250. Float:z;
  251. GetPlayerPos(playerid,x,y,z);
  252. for(new g=1;g<MAX_GATES;g++)
  253. {
  254. if(IsPlayerInRangeOfPoint(playerid,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
  255. {
  256. if(TorInfo[g][gopened]==false)
  257. {
  258. if(TorInfo[g][gskin]>0 && TorInfo[g][gskin]==GetPlayerSkin(playerid))
  259. {
  260. MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
  261. TorInfo[g][gopened]=true;
  262. return SetTimerEx("Close_Gate",5000,0,"i",playerid);
  263. }
  264. else if(TorInfo[g][gskin]==0)
  265. {
  266. MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
  267. TorInfo[g][gopened]=true;
  268. return SetTimerEx("Close_Gate",5000,0,"i",playerid);
  269. }
  270. else
  271. {
  272. return SendClientMessage(playerid,color_error,"[GPawn]: Du bist nicht befugt dieses Gate zu nutzen");
  273. }
  274. }
  275. }
  276. }
  277. }
  278. return 1;
  279. }
  280.  
  281. ocmd:editgate(playerid,params[])
  282. {
  283. new Float:x,
  284. Float:y,
  285. Float:z;
  286. GetPlayerPos(playerid,x,y,z);
  287. if(IsPlayerAdmin(playerid))
  288. {
  289. for(new g=1;g<MAX_GATES;g++)
  290. {
  291. if(IsPlayerInRangeOfPoint(playerid,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
  292. {
  293. return EditObject(playerid, TorInfo[g][gID]);
  294. }
  295. }
  296. }
  297. return 1;
  298. }
  299.  
  300. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ )
  301. {
  302. new str[26];
  303. MoveObject(objectid,fX,fY,fZ,30,fRotX,fRotY,fRotZ);
  304. for(new g=1;g<MAX_GATES;g++)
  305. {
  306. if(TorInfo[g][gID]==objectid)
  307. {
  308. format(str,26,"GPawn_Gates/gate_%d.gpwn",g);
  309. dini_FloatSet(str,"Gate_X",fX);
  310. dini_FloatSet(str,"Gate_Y",fY);
  311. dini_FloatSet(str,"Gate_Z",fZ);
  312. dini_FloatSet(str,"Gate_RX",fRotX);
  313. dini_FloatSet(str,"Gate_RY",fRotY);
  314. dini_FloatSet(str,"Gate_RZ",fRotZ);
  315. DestroyObject(objectid);
  316. return Load_Gate(g);
  317. }
  318. }
  319. return 1;
  320. }
  321.  
  322. public Open_Gate()
  323. {
  324. for(new i=0;i<MAX_PLAYERS;i++)
  325. {
  326. new Float:x,
  327. Float:y,
  328. Float:z;
  329. GetPlayerPos(i,x,y,z);
  330. for(new g=1;g<MAX_GATES;g++)
  331. {
  332. if(IsPlayerInRangeOfPoint(i,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
  333. {
  334. if(TorInfo[g][gopened]==false)
  335. {
  336. if(TorInfo[g][gskin]>0 && TorInfo[g][gskin]==GetPlayerSkin(i))
  337. {
  338. MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
  339. TorInfo[g][gopened]=true;
  340. return SetTimerEx("Close_Gate",5000,0,"i",i);
  341. }
  342. else if(TorInfo[g][gskin]==0)
  343. {
  344. MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
  345. TorInfo[g][gopened]=true;
  346. return SetTimerEx("Close_Gate",5000,0,"i",i);
  347. }
  348. else
  349. {
  350. return SendClientMessage(i,color_error,"[GPawn]: Du bist nicht befugt dieses Gate zu nutzen");
  351. }
  352. }
  353. }
  354. }
  355. }
  356. return 1;
  357. }
  358.  
  359. public Close_Gate()
  360. {
  361. for(new g=1;g<MAX_GATES;g++)
  362. {
  363. if(TorInfo[g][gopened]==true)
  364. {
  365. MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz],4);
  366. return TorInfo[g][gopened]=false;
  367. }
  368. }
  369. return 1;
  370. }
  371.  
  372. stock sscanf(string[], format[], {Float,_}:...)
  373. {
  374. #if defined isnull
  375. if (isnull(string))
  376. #else
  377. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  378. #endif
  379. {
  380. return format[0];
  381. }
  382. #pragma tabsize 4
  383. new
  384. formatPos = 0,
  385. stringPos = 0,
  386. paramPos = 2,
  387. paramCount = numargs(),
  388. delim = ' ';
  389. while (string[stringPos] && string[stringPos] <= ' ')
  390. {
  391. stringPos++;
  392. }
  393. while (paramPos < paramCount && string[stringPos])
  394. {
  395. switch (format[formatPos++])
  396. {
  397. case '\0':
  398. {
  399. return 0;
  400. }
  401. case 'i', 'd':
  402. {
  403. new
  404. neg = 1,
  405. num = 0,
  406. ch = string[stringPos];
  407. if (ch == '-')
  408. {
  409. neg = -1;
  410. ch = string[++stringPos];
  411. }
  412. do
  413. {
  414. stringPos++;
  415. if ('0' <= ch <= '9')
  416. {
  417. num = (num * 10) + (ch - '0');
  418. }
  419. else
  420. {
  421. return -1;
  422. }
  423. }
  424. while ((ch = string[stringPos]) > ' ' && ch != delim);
  425. setarg(paramPos, 0, num * neg);
  426. }
  427. case 'h', 'x':
  428. {
  429. new
  430. num = 0,
  431. ch = string[stringPos];
  432. do
  433. {
  434. stringPos++;
  435. switch (ch)
  436. {
  437. case 'x', 'X':
  438. {
  439. num = 0;
  440. continue;
  441. }
  442. case '0' .. '9':
  443. {
  444. num = (num << 4) | (ch - '0');
  445. }
  446. case 'a' .. 'f':
  447. {
  448. num = (num << 4) | (ch - ('a' - 10));
  449. }
  450. case 'A' .. 'F':
  451. {
  452. num = (num << 4) | (ch - ('A' - 10));
  453. }
  454. default:
  455. {
  456. return -1;
  457. }
  458. }
  459. }
  460. while ((ch = string[stringPos]) > ' ' && ch != delim);
  461. setarg(paramPos, 0, num);
  462. }
  463. case 'c':
  464. {
  465. setarg(paramPos, 0, string[stringPos++]);
  466. }
  467. case 'f':
  468. {
  469.  
  470. new changestr[16], changepos = 0, strpos = stringPos;
  471. while(changepos < 16 && string[strpos] && string[strpos] != delim)
  472. {
  473. changestr[changepos++] = string[strpos++];
  474. }
  475. changestr[changepos] = '\0';
  476. setarg(paramPos,0,_:floatstr(changestr));
  477. }
  478. case 'p':
  479. {
  480. delim = format[formatPos++];
  481. continue;
  482. }
  483. case '\'':
  484. {
  485. new
  486. end = formatPos - 1,
  487. ch;
  488. while ((ch = format[++end]) && ch != '\'') {}
  489. if (!ch)
  490. {
  491. return -1;
  492. }
  493. format[end] = '\0';
  494. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  495. {
  496. if (format[end + 1])
  497. {
  498. return -1;
  499. }
  500. return 0;
  501. }
  502. format[end] = '\'';
  503. stringPos = ch + (end - formatPos);
  504. formatPos = end + 1;
  505. }
  506. case 'u':
  507. {
  508. new
  509. end = stringPos - 1,
  510. id = 0,
  511. bool:num = true,
  512. ch;
  513. while ((ch = string[++end]) && ch != delim)
  514. {
  515. if (num)
  516. {
  517. if ('0' <= ch <= '9')
  518. {
  519. id = (id * 10) + (ch - '0');
  520. }
  521. else
  522. {
  523. num = false;
  524. }
  525. }
  526. }
  527. if (num && IsPlayerConnected(id))
  528. {
  529. setarg(paramPos, 0, id);
  530. }
  531. else
  532. {
  533. #if !defined foreach
  534. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  535. #define __SSCANF_FOREACH__
  536. #endif
  537. string[end] = '\0';
  538. num = false;
  539. new
  540. name[MAX_PLAYER_NAME];
  541. id = end - stringPos;
  542. foreach (Player, playerid)
  543. {
  544. GetPlayerName(playerid, name, sizeof (name));
  545. if (!strcmp(name, string[stringPos], true, id))
  546. {
  547. setarg(paramPos, 0, playerid);
  548. num = true;
  549. break;
  550. }
  551. }
  552. if (!num)
  553. {
  554. setarg(paramPos, 0, INVALID_PLAYER_ID);
  555. }
  556. string[end] = ch;
  557. #if defined __SSCANF_FOREACH__
  558. #undef foreach
  559. #undef __SSCANF_FOREACH__
  560. #endif
  561. }
  562. stringPos = end;
  563. }
  564. case 's', 'z':
  565. {
  566. new
  567. i = 0,
  568. ch;
  569. if (format[formatPos])
  570. {
  571. while ((ch = string[stringPos++]) && ch != delim)
  572. {
  573. setarg(paramPos, i++, ch);
  574. }
  575. if (!i)
  576. {
  577. return -1;
  578. }
  579. }
  580. else
  581. {
  582. while ((ch = string[stringPos++]))
  583. {
  584. setarg(paramPos, i++, ch);
  585. }
  586. }
  587. stringPos--;
  588. setarg(paramPos, i, '\0');
  589. }
  590. default:
  591. {
  592. continue;
  593. }
  594. }
  595. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  596. {
  597. stringPos++;
  598. }
  599. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  600. {
  601. stringPos++;
  602. }
  603. paramPos++;
  604. }
  605. do
  606. {
  607. if ((delim = format[formatPos++]) > ' ')
  608. {
  609. if (delim == '\'')
  610. {
  611. while ((delim = format[formatPos++]) && delim != '\'') {}
  612. }
  613. else if (delim != 'z')
  614. {
  615. return delim;
  616. }
  617. }
  618. }
  619. while (delim > ' ');
  620. return 0;
  621. }
Advertisement
Add Comment
Please, Sign In to add comment