Guest User

Untitled

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