Guest User

HungryPinkPig

a guest
Nov 19th, 2009
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.83 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3. // finish carcolor and setcar.
  4. #define ZCMD:%1(%2,%3) \
  5. forward zcmd_%1(%2, %3); \
  6. public zcmd_%1(%2, %3)
  7. #define mysql_escape_string(%1,%2) mysql_real_escape_string(%1,%2)
  8. #define mysql_fetch_row(%0) mysql_fetch_row_format(%0,"|")
  9. #define mysql_get_field(%1,%2) mysql_fetch_field_row(%2,%1)
  10. #define SQL_HOST ""
  11. #define SQL_PASS ""
  12. #define SQL_USER ""
  13. #define SQL_DATABASE ""
  14. native mysql_connect(const host[],const user[],const database[],const password[]);
  15. native mysql_query(query[],resultid = (-1));
  16. native mysql_real_escape_string(const source[],destination[]);
  17. native mysql_fetch_row_format(string[],const delimiter[] = "|");
  18. native mysql_num_rows();
  19. native mysql_num_fields();
  20. native mysql_affected_rows();
  21. native mysql_warning_count();
  22. native mysql_ping();
  23. native mysql_store_result();
  24. native mysql_free_result();
  25. native mysql_stat(const destination[]);
  26. native mysql_errno();
  27. native mysql_field_count();
  28. native mysql_close();
  29. native mysql_fetch_int();
  30. native mysql_fetch_float(&Float:result);
  31. native mysql_fetch_field(fieldnr,dest[]);
  32. native mysql_fetch_field_row(string[],const fieldname[]);
  33. native mysql_debug(enable = 1);
  34. native mysql_reload();
  35. native mysql_insert_id();
  36. forward OnQueryFinish(query[],resultid);
  37.  
  38.  
  39. enum VehicleInfo
  40. {
  41. vModelId,
  42. Float:vPos_X,
  43. Float:vPos_Y,
  44. Float:vPos_Z,
  45. Float:vPos_A,
  46. vColor1,
  47. vColor2,
  48. bool:vBuyAble,
  49. vPrice,
  50. vOwnerName[MAX_PLAYER_NAME],
  51. };
  52. new
  53. vInfo[MAX_VEHICLES][VehicleInfo],
  54. string[512];
  55. bool:IntToBool(val)
  56. {
  57. if(val)
  58. {
  59. return true;
  60. }
  61. return false;
  62. }
  63.  
  64. stock BoolToInt(bool:var)
  65. {
  66. if(var)
  67. {
  68. return 1;
  69. }
  70. return 0;
  71. }
  72.  
  73. public OnFilterScriptInit()
  74. {
  75. new
  76. connection=mysql_connect(SQL_HOST,SQL_USER,SQL_DATABASE,SQL_PASS);
  77. if(connection==1)
  78. {
  79. print("Connection succeeded.");
  80. LoadVehicles();
  81. }
  82. else
  83. {
  84. print("Connection failed.");
  85. }
  86. return 1;
  87. }
  88.  
  89. public OnFilterScriptExit()
  90. {
  91. if(mysql_ping())
  92. {
  93. for(new v=1;v<MAX_VEHICLES;v++)
  94. {
  95. if(vInfo[v][vModelId])
  96. {
  97. SaveVehicle(v);
  98. }
  99. }
  100. mysql_close();
  101. }
  102. return 1;
  103. }
  104.  
  105.  
  106. stock LoadVehicles()
  107. {
  108. mysql_query("SELECT * FROM vehicles");
  109. mysql_store_result();
  110. if(mysql_num_rows())
  111. {
  112. new
  113. vid,
  114. result[256];
  115. while(mysql_fetch_row(result))
  116. {
  117. sscanf(result,"p|d",vid);
  118. sscanf(result,"p|dffffdddds",vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],IntToBool(vInfo[vid][vBuyAble]),vInfo[vid][vPrice],vInfo[vid][vOwnerName]);
  119. CreateVehicle(vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],-1);
  120. }
  121. }
  122. mysql_free_result();
  123. }
  124.  
  125. public OnPlayerStateChange(playerid, newstate, oldstate)
  126. {
  127. new
  128. vid=GetPlayerVehicleID(playerid);
  129. if(IsPlayerInAnyVehicle(playerid)&&GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
  130. {
  131. if(vInfo[vid][vBuyAble]==true)
  132. {
  133. format(string,sizeof(string),"This vehicle is for sale, you can buy it for %d$ (/buyvehicle)",vInfo[vid][vPrice]);
  134. SendClientMessage(playerid,0x33CCFFFF,string);
  135. }
  136. else
  137. {
  138. if(!strcmp(GetPlayerNameEx(playerid),vInfo[vid][vOwnerName],true))
  139. {
  140. SendClientMessage(playerid,0x33CCFFFF,"Welcome to your vehicle.");
  141. }
  142. }
  143. }
  144. return 1;
  145. }
  146.  
  147. stock GetPlayerNameEx(playerid)
  148. {
  149. new n[MAX_PLAYER_NAME];
  150. GetPlayerName(playerid,n,sizeof(n));
  151. return n;
  152. }
  153.  
  154. ZCMD:buyvehicle(playerid,params[])
  155. {
  156. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
  157. new
  158. vid=GetPlayerVehicleID(playerid);
  159. if(!vInfo[vid][vBuyAble]) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle is not for sale.");
  160. vInfo[vid][vBuyAble]=false;
  161. strmid(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),0,strlen(GetPlayerNameEx(playerid)),MAX_PLAYER_NAME);
  162. SendClientMessage(playerid,0x33CCFFFF,"You have bought this vehicle.");
  163. GivePlayerMoney(playerid,-vInfo[vid][vPrice]);
  164. return 1;
  165. }
  166.  
  167. ZCMD:sellvehicle(playerid,params[])
  168. {
  169. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
  170. new
  171. vid=GetPlayerVehicleID(playerid);
  172. if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
  173. GivePlayerMoney(playerid,vInfo[vid][vPrice]);
  174. format(vInfo[vid][vOwnerName],2," ");
  175. vInfo[vid][vBuyAble]=true;
  176. SendClientMessage(playerid,0x33CCFFFF,"You sold the vehicle and received the money.");
  177. return 1;
  178. }
  179.  
  180. ZCMD:park(playerid,params[])
  181. {
  182. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You are not in a vehicle.");
  183. new
  184. vid=GetPlayerVehicleID(playerid),
  185. Float:x,
  186. Float:y,
  187. Float:z,
  188. Float:a;
  189.  
  190. if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
  191. GetVehiclePos(vid,x,y,z);
  192. GetVehicleZAngle(vid,a);
  193. vInfo[vid][vPos_X]=x;
  194. vInfo[vid][vPos_Y]=y;
  195. vInfo[vid][vPos_Z]=z;
  196. vInfo[vid][vPos_A]=a;
  197. SendClientMessage(playerid,0x33CCFFFF,"Vehicle reparked.");
  198. return 1;
  199. }
  200.  
  201. ZCMD:rcar(playerid,params[])
  202. {
  203. new
  204. Float:x,
  205. Float:y,
  206. Float:z;
  207. GetPlayerPos(playerid,x,y,z);
  208. for(new v=1;v<MAX_VEHICLES;v++)
  209. {
  210. if(!strcmp(vInfo[v][vOwnerName],GetPlayerNameEx(playerid),true))
  211. {
  212. SetVehiclePos(v,x,y,z);
  213. PutPlayerInVehicle(playerid,v,0);
  214. break;
  215. }
  216. else
  217. {
  218. SendClientMessage(playerid,0x33CCFFFF,"You don't have a vehicle.");
  219. break;
  220. }
  221. }
  222. return 1;
  223. }
  224.  
  225.  
  226. ZCMD:respawnall(playerid,params[])
  227. {
  228. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
  229. for(new v=1;v<MAX_VEHICLES;v++)
  230. {
  231. SetVehicleToRespawn(v);
  232. }
  233. return 1;
  234. }
  235.  
  236. ZCMD:wipecars(playerid,params[])
  237. {
  238. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
  239. for(new v=1;v<MAX_VEHICLES;v++)
  240. {
  241. format(vInfo[v][vOwnerName],2," ");
  242. DestroyVehicle(v);
  243. }
  244. mysql_query("TRUNCATE TABLE vehicles");
  245. return 1;
  246. }
  247.  
  248. ZCMD:killcar(playerid,params[])
  249. {
  250. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
  251. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
  252. format(string,sizeof(string),"DELETE FROM vehicles WHERE id=%d",GetPlayerVehicleID(playerid));
  253. mysql_query(string);
  254. DestroyVehicle(GetPlayerVehicleID(playerid));
  255. return 1;
  256. }
  257.  
  258. ZCMD:setcar(playerid,params[])
  259. {
  260. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not an admin.");
  261. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
  262. new
  263. id;
  264. if(sscanf(params,"u",id)) return SendClientMessage(playerid,0x33CCFFFF,"Usage: /setcar [playerid]");
  265. if(!IsPlayerConnected(id)) return SendClientMessage(playerid,0x33CCFFFF,"This player is not connected.");
  266. new
  267. vid=GetPlayerVehicleID(playerid);
  268. format(vInfo[vid][vOwnerName],24,"%s",GetPlayerNameEx(id));
  269. format(string,sizeof(string),"You gave this vehicle to %s.",GetPlayerNameEx(id));
  270. SendClientMessage(playerid,0x33CCFFFF,string);
  271. return 1;
  272. }
  273.  
  274. ZCMD:carcolor(playerid,params[])
  275. {
  276. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0x33CCFFFF,"You're not in a vehicle.");
  277. new
  278. color1,
  279. color2,
  280. vid=GetPlayerVehicleID(playerid);
  281. if(sscanf(params,"dd",color1,color2)) return SendClientMessage(playerid,0x33CCFFFF,"Usage: /carcolor [color 1] [color2]");
  282. if(strcmp(vInfo[vid][vOwnerName],GetPlayerNameEx(playerid),true)) return SendClientMessage(playerid,0x33CCFFFF,"This vehicle does not belong to you.");
  283. vInfo[vid][vColor1]=color1;
  284. vInfo[vid][vColor2]=color2;
  285. ChangeVehicleColor(vid,color1,color2);
  286. return 1;
  287. }
  288.  
  289. stock SaveVehicle(vid)
  290. {
  291. format(string,sizeof(string),"UPDATE vehicles SET Model=%d,X=%f,Y=%f,Z=%f,A=%f,Color1=%d,Color2=%d,Buyable=%d,Price=%d,Owner='%s' WHERE id=%d",
  292. vInfo[vid][vModelId],vInfo[vid][vPos_X],vInfo[vid][vPos_Y],vInfo[vid][vPos_Z],vInfo[vid][vPos_A],vInfo[vid][vColor1],vInfo[vid][vColor2],
  293. BoolToInt(vInfo[vid][vBuyAble]),vInfo[vid][vPrice],vInfo[vid][vOwnerName],vid);
  294. mysql_query(string);
  295. }
  296.  
  297. stock sscanf(str[], format[], {Float,_}:...)
  298. {
  299. #if defined isnull
  300. if (isnull(str))
  301. #else
  302. if (str[0] == 0 || (str[0] == 1 && str[1] == 0))
  303. #endif
  304. {
  305. return format[0];
  306. }
  307. #pragma tabsize 4
  308. new
  309. formatPos = 0,
  310. stringPos = 0,
  311. paramPos = 2,
  312. paramCount = numargs(),
  313. delim = ' ';
  314. while (str[stringPos] && str[stringPos] <= ' ')
  315. {
  316. stringPos++;
  317. }
  318. while (paramPos < paramCount && str[stringPos])
  319. {
  320. switch (format[formatPos++])
  321. {
  322. case '\0':
  323. {
  324. return 0;
  325. }
  326. case 'i', 'd':
  327. {
  328. new
  329. neg = 1,
  330. num = 0,
  331. ch = str[stringPos];
  332. if (ch == '-')
  333. {
  334. neg = -1;
  335. ch = str[++stringPos];
  336. }
  337. do
  338. {
  339. stringPos++;
  340. if ('0' <= ch <= '9')
  341. {
  342. num = (num * 10) + (ch - '0');
  343. }
  344. else
  345. {
  346. return -1;
  347. }
  348. }
  349. while ((ch = str[stringPos]) > ' ' && ch != delim);
  350. setarg(paramPos, 0, num * neg);
  351. }
  352. case 'h', 'x':
  353. {
  354. new
  355. num = 0,
  356. ch = str[stringPos];
  357. do
  358. {
  359. stringPos++;
  360. switch (ch)
  361. {
  362. case 'x', 'X':
  363. {
  364. num = 0;
  365. continue;
  366. }
  367. case '0' .. '9':
  368. {
  369. num = (num << 4) | (ch - '0');
  370. }
  371. case 'a' .. 'f':
  372. {
  373. num = (num << 4) | (ch - ('a' - 10));
  374. }
  375. case 'A' .. 'F':
  376. {
  377. num = (num << 4) | (ch - ('A' - 10));
  378. }
  379. default:
  380. {
  381. return -1;
  382. }
  383. }
  384. }
  385. while ((ch = str[stringPos]) > ' ' && ch != delim);
  386. setarg(paramPos, 0, num);
  387. }
  388. case 'c':
  389. {
  390. setarg(paramPos, 0, str[stringPos++]);
  391. }
  392. case 'f':
  393. {
  394. setarg(paramPos, 0, _:floatstr(str[stringPos]));
  395. }
  396. case 'p':
  397. {
  398. delim = format[formatPos++];
  399. continue;
  400. }
  401. case '\'':
  402. {
  403. new
  404. end = formatPos - 1,
  405. ch;
  406. while ((ch = format[++end]) && ch != '\'') {}
  407. if (!ch)
  408. {
  409. return -1;
  410. }
  411. format[end] = '\0';
  412. if ((ch = strfind(str, format[formatPos], false, stringPos)) == -1)
  413. {
  414. if (format[end + 1])
  415. {
  416. return -1;
  417. }
  418. return 0;
  419. }
  420. format[end] = '\'';
  421. stringPos = ch + (end - formatPos);
  422. formatPos = end + 1;
  423. }
  424. case 'u':
  425. {
  426. new
  427. end = stringPos - 1,
  428. id = 0,
  429. bool:num = true,
  430. ch;
  431. while ((ch = str[++end]) && ch != delim)
  432. {
  433. if (num)
  434. {
  435. if ('0' <= ch <= '9')
  436. {
  437. id = (id * 10) + (ch - '0');
  438. }
  439. else
  440. {
  441. num = false;
  442. }
  443. }
  444. }
  445. if (num && IsPlayerConnected(id))
  446. {
  447. setarg(paramPos, 0, id);
  448. }
  449. else
  450. {
  451. #if !defined foreach
  452. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  453. #define __SSCANF_FOREACH__
  454. #endif
  455. str[end] = '\0';
  456. num = false;
  457. id = end - stringPos;
  458. new
  459. name[MAX_PLAYER_NAME];
  460. foreach (Player, playerid)
  461. {
  462. GetPlayerName(playerid,name,sizeof(name));
  463. if(!strcmp(name,str[stringPos],true,id))
  464. {
  465. setarg(paramPos, 0, playerid);
  466. num = true;
  467. break;
  468. }
  469. }
  470. if (!num)
  471. {
  472. setarg(paramPos, 0, INVALID_PLAYER_ID);
  473. }
  474. str[end] = ch;
  475. #if defined __SSCANF_FOREACH__
  476. #undef foreach
  477. #undef __SSCANF_FOREACH__
  478. #endif
  479. }
  480. stringPos = end;
  481. }
  482. case 's', 'z':
  483. {
  484. new
  485. i = 0,
  486. ch;
  487. if (format[formatPos])
  488. {
  489. while ((ch = str[stringPos++]) && ch != delim)
  490. {
  491. setarg(paramPos, i++, ch);
  492. }
  493. if (!i)
  494. {
  495. return -1;
  496. }
  497. }
  498. else
  499. {
  500. while ((ch = str[stringPos++]))
  501. {
  502. setarg(paramPos, i++, ch);
  503. }
  504. }
  505. stringPos--;
  506. setarg(paramPos, i, '\0');
  507. }
  508. default:
  509. {
  510. continue;
  511. }
  512. }
  513. while (str[stringPos] && str[stringPos] != delim && str[stringPos] > ' ')
  514. {
  515. stringPos++;
  516. }
  517. while (str[stringPos] && (str[stringPos] == delim || str[stringPos] <= ' '))
  518. {
  519. stringPos++;
  520. }
  521. paramPos++;
  522. }
  523. do
  524. {
  525. if ((delim = format[formatPos++]) > ' ')
  526. {
  527. if (delim == '\'')
  528. {
  529. while ((delim = format[formatPos++]) && delim != '\'') {}
  530. }
  531. else if (delim != 'z')
  532. {
  533. return delim;
  534. }
  535. }
  536. }
  537. while (delim > ' ');
  538. return 0;
  539. }
Advertisement
Add Comment
Please, Sign In to add comment