Advertisement
Guest User

Untitled

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