Advertisement
RogerGomesCosta

Untitled

Jul 22nd, 2014
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 99.84 KB | None | 0 0
  1. //---------------------------/ Includes
  2. #include <a_samp>
  3. #include <sqlitei>
  4. #include <sscanf2>
  5. #include <YSI\y_races>
  6. #include <YSI\y_iterate>
  7. #include <zcmd>
  8.  
  9. //---------------------------/ Defines
  10.  
  11. //------ Pawn
  12. #file "Mode"
  13.  
  14. //------ Server
  15. #define MAX_PLAYER 30
  16. #define MAX_VEHICLE 500
  17. #define MAX_RACE 100
  18.  
  19. //------ Colors
  20. #define COLOR_RED 0xBB0000FF
  21. #define COLOR_WHITE 0xFFFFFFFF
  22. #define COLOR_GOLD 0xFFD700FF
  23. #define COLOR_BLUE 0x2587CEFF
  24. #define COLOR_GRAY 0xDDDDDDFF
  25. #define COLOR_GREEN 0x366718FF
  26. #define COLOR_RED 0xBB0000FF
  27. #define COLOR_PURPLE 0x895BD9FF
  28. #define COLOR_YELLOW 0xFAA505FF
  29.  
  30. //------ Dialogs
  31. #define DIALOG_REGISTER 1
  32. #define DIALOG_LOGIN 2
  33. #define DIALOG_ENGINE 3
  34. #define DIALOG_MODSHOP 4
  35. #define DIALOG_MODSHOP2 5
  36. #define DIALOG_MODSHOP3 6
  37. #define DIALOG_WORKSHOP 200
  38. #define DIALOG_WORKSHOPH 201
  39. #define DIALOG_WORKSHOP_COLOR 202
  40. #define DIALOG_CARS 300
  41. #define DIALOG_TEXT_NO_EFFECT 400
  42. #define DIALOG_HELP 7001
  43. #define DIALOG_COMMANDS 7002
  44.  
  45. //------ RGB colors
  46. #define RGB_COLOR_WHITE "{FFFFFF}"
  47. #define RGB_COLOR_GOLD "{FFD700}"
  48.  
  49. #define BYTES_PER_CELL 4
  50.  
  51. //------ SQLite
  52. #define DATA_BASE_PATH "LSR/LSR.db"
  53.  
  54.  
  55. //---------------------------/ Natives and Foward
  56. native IsValidVehicle(vehicleid);
  57. native WP_Hash(buffer[], len, const str[]);
  58. forward CheckMoney();
  59. forward LoadRaces();
  60. forward LoadVehicles();
  61. forward OnServerUpdate();
  62. forward CreateTextdraws();
  63. forward AntiCheat();
  64. forward StartRace(race);
  65.  
  66. main()
  67. {
  68. print("\n* Los Santos Racing");
  69. print("# Iniciado em 2014");
  70. print("@ Criado por Roger Gomes Costa\n");
  71. }
  72.  
  73. //---------------------------/ Variáveis, arrays, etc...
  74. static g_szHelpDialog[] = #RGB_COLOR_GOLD"\
  75. AJUDA\n\n\
  76. "RGB_COLOR_WHITE"/ajuda - Mostra esta mensagem de ajuda.\n\
  77. /comandos - Mostra a lista de comandos do servidor.\n\
  78. /reportar [id/nome] [mensagem] - Reporta um jogador à equipe do servidor.\n\
  79. /tutorial - Mostra o tutorial do servidor.";
  80.  
  81.  
  82.  
  83. static g_szCommandsDialog[] = #RGB_COLOR_GOLD"\
  84. COMANDOS\n\n\
  85. "RGB_COLOR_WHITE"/races - Lista de corridas disponíveis no servidor\n\
  86. /openedraces - Lista de corridas abertas no servidor\n\
  87. /openrace [id] - Abre uma corrida para que você e outros jogadores possam entrar\n\
  88. /race [slot] - Entra em uma corrida\n";
  89.  
  90.  
  91. static g_szCommandsDialog1[] = "/leave - Sai da corrida atual (se estiver em uma)\n\
  92. /tuning - Abre menu de tuning (se estiver na oficina)\n\
  93. /trancar /destrancar - Tranca e destranca veículo\n\
  94. /motor - Liga/Desliga o veículo\n\
  95. /lights - Acende/Apaga os faróis do veículo\n\
  96. /mycars - Localizar determinado veículo\n\
  97. /skin - Altera a sua skin\n\
  98. /construtor - Construir sua própria corrida";
  99.  
  100. static sz_CmdAdmins[] = RGB_COLOR_GOLD"COMANDOS DE ADMINISTRADORES\n\n\
  101. "RGB_COLOR_WHITE"/dardinheiro /setardinheiro /expulsar /encerrarcorrida\n\
  102. /setarcolete /setarvida /forcarcomando";
  103.  
  104. //------ Textdraws
  105. new Text:txtModeName, Text:txtDate, Text:txtVehDistrict;
  106. new Text:BoasVindas, Text:BoasVindas2;
  107. new Text:StartRaceTxt;
  108. new Text:RaceEndInfo, Text:RaceEndInfo2;
  109.  
  110. new Text:tBoxLights;
  111. new Text:tBoxDoors;
  112. new Text:tBoxTires;
  113. new Text:tBoxPanels;
  114. new Text:tPage1;
  115. new Text:tListDoors;
  116. new Text:tListTires;
  117. new Text:tListPanels;
  118. new Text:tListLights;
  119. new Text:tPrevPage;
  120. new Text:tNextPage;
  121. new Text:tCloseButtom;
  122.  
  123.  
  124. //------ SQLite Database
  125. new DB:DataBase;
  126.  
  127. //------ Players Infos
  128. enum PLAYER_INFO
  129. {
  130. bool:Registered,
  131. bool:Logged,
  132. pSkin,
  133. playermoney,
  134. pName[24],
  135. pFile[100],
  136. Float:pX,
  137. Float:pY,
  138. Float:pZ,
  139. Float:pA,
  140. pInterior,
  141. pGPS,
  142. pDM,
  143. pRaceID,
  144. pWeapon[13],
  145. pAmmo[13],
  146. pTutorial,
  147. bool:pVehModded,
  148. pID,
  149. }
  150. new PlayerInfo[MAX_PLAYER][PLAYER_INFO];
  151.  
  152. //------ Vehicles Infos
  153. enum Vehicles
  154. {
  155. VehID,
  156. VehModel,
  157. VehOwnerID,
  158. VehOwner[24],
  159. VehName[50],
  160. VehKeys[100],
  161. VehPlate[10],
  162. VehSpoiler,
  163. VehHood,
  164. VehRoof,
  165. VehSideskirt,
  166. VehLamps,
  167. VehNitro,
  168. VehExhaust,
  169. VehWheels,
  170. VehStereo,
  171. VehHydraulics,
  172. VehFB,
  173. VehRB,
  174. VehVR,
  175. VehVL,
  176. Float:VehX,
  177. Float:VehY,
  178. Float:VehZ,
  179. Float:VehA,
  180. VehColor1,
  181. VehColor2,
  182. VehPaintjob,
  183. Text3D:VehText,
  184. VehStatus,
  185. bool:VehLocked,
  186. VehDoorsArmour,
  187. VehTiresArmour,
  188. VehLightsArmour,
  189. VehPanelsArmour,
  190. Float:VehHealth
  191. }
  192.  
  193. new ServerVehicles[MAX_VEHICLE][Vehicles];
  194. new VehCreate[MAX_VEHICLE] = {-1, ...};
  195.  
  196. new VehicleNames[212][] = {
  197. {"Landstalker"}, {"Bravura"}, {"Buffalo"}, {"Linerunner"}, {"Perrenial"}, {"Sentinel"}, {"Dumper"},
  198. {"Firetruck"}, {"Trashmaster"}, {"Stretch"}, {"Manana"}, {"Infernus"}, {"Voodoo"}, {"Pony"}, {"Mule"},
  199. {"Cheetah"}, {"Ambulance"}, {"Leviathan"}, {"Moonbeam"}, {"Esperanto"}, {"Taxi"}, {"Washington"},
  200. {"Bobcat"}, {"Mr Whoopee"}, {"BF Injection"}, {"Hunter"}, {"Premier"}, {"Enforcer"}, {"Securicar"},
  201. {"Banshee"}, {"Predator"}, {"Bus"}, {"Rhino"}, {"Barracks"}, {"Hotknife"}, {"Trailer 1"}, {"Previon"},
  202. {"Coach"}, {"Cabbie"}, {"Stallion"}, {"Rumpo"}, {"RC Bandit"}, {"Romero"}, {"Packer"}, {"Monster"},
  203. {"Admiral"}, {"Squalo"}, {"Seasparrow"}, {"Pizzaboy"}, {"Tram"}, {"Trailer 2"}, {"Turismo"},
  204. {"Speeder"}, {"Reefer"}, {"Tropic"}, {"Flatbed"}, {"Yankee"}, {"Caddy"}, {"Solair"}, {"Berkley's RC Van"},
  205. {"Skimmer"}, {"PCJ-600"}, {"Faggio"}, {"Freeway"}, {"RC Baron"}, {"RC Raider"}, {"Glendale"}, {"Oceanic"},
  206. {"Sanchez"}, {"Sparrow"}, {"Patriot"}, {"Quad"}, {"Coastguard"}, {"Dinghy"}, {"Hermes"}, {"Sabre"},
  207. {"Rustler"}, {"ZR-350"}, {"Walton"}, {"Regina"}, {"Comet"}, {"BMX"}, {"Burrito"}, {"Camper"}, {"Marquis"},
  208. {"Baggage"}, {"Dozer"}, {"Maverick"}, {"News Chopper"}, {"Rancher"}, {"FBI Rancher"}, {"Virgo"}, {"Greenwood"},
  209. {"Jetmax"}, {"Hotring"}, {"Sandking"}, {"Blista Compact"}, {"Police Maverick"}, {"Boxville"}, {"Benson"},
  210. {"Mesa"}, {"RC Goblin"}, {"Hotring Racer A"}, {"Hotring Racer B"}, {"Bloodring Banger"}, {"Rancher"},
  211. {"Super GT"}, {"Elegant"}, {"Journey"}, {"Bike"}, {"Mountain Bike"}, {"Beagle"}, {"Cropdust"}, {"Stunt"},
  212. {"Tanker"}, {"Roadtrain"}, {"Nebula"}, {"Majestic"}, {"Buccaneer"}, {"Shamal"}, {"Hydra"}, {"FCR-900"},
  213. {"NRG-500"}, {"HPV1000"}, {"Cement Truck"}, {"Tow Truck"}, {"Fortune"}, {"Cadrona"}, {"FBI Truck"},
  214. {"Willard"}, {"Forklift"}, {"Tractor"}, {"Combine"}, {"Feltzer"}, {"Remington"}, {"Slamvan"},
  215. {"Blade"}, {"Freight"}, {"Streak"}, {"Vortex"}, {"Vincent"}, {"Bullet"}, {"Clover"}, {"Sadler"},
  216. {"Firetruck LA"}, {"Hustler"}, {"Intruder"}, {"Primo"}, {"Cargobob"}, {"Tampa"}, {"Sunrise"}, {"Merit"},
  217. {"Utility"}, {"Nevada"}, {"Yosemite"}, {"Windsor"}, {"Monster A"}, {"Monster B"}, {"Uranus"}, {"Jester"},
  218. {"Sultan"}, {"Stratum"}, {"Elegy"}, {"Raindance"}, {"RC Tiger"}, {"Flash"}, {"Tahoma"}, {"Savanna"},
  219. {"Bandito"}, {"Freight Flat"}, {"Streak Carriage"}, {"Kart"}, {"Mower"}, {"Duneride"}, {"Sweeper"},
  220. {"Broadway"}, {"Tornado"}, {"AT-400"}, {"DFT-30"}, {"Huntley"}, {"Stafford"}, {"BF-400"}, {"Newsvan"},
  221. {"Tug"}, {"Trailer 3"}, {"Emperor"}, {"Wayfarer"}, {"Euros"}, {"Hotdog"}, {"Club"}, {"Freight Carriage"},
  222. {"Trailer 3"}, {"Andromada"}, {"Dodo"}, {"RC Cam"}, {"Launch"}, {"Police Car (LSPD)"}, {"Police Car (SFPD)"},
  223. {"Police Car (LVPD)"}, {"Police Ranger"}, {"Picador"}, {"S.W.A.T. Van"}, {"Alpha"}, {"Phoenix"}, {"Glendale"},
  224. {"Sadler"}, {"Luggage Trailer A"}, {"Luggage Trailer B"}, {"Stair Trailer"}, {"Boxville"}, {"Farm Plow"},
  225. {"Utility Trailer"}
  226. };
  227.  
  228. //------ Races Info
  229. enum Races
  230. {
  231. // Carregar
  232. RaceName[30],
  233. RaceStart[100],
  234. RaceType,
  235. RacePrice,
  236. RaceWorld,
  237. RaceInterior,
  238. RaceLaps,
  239. RaceReward,
  240.  
  241. // While
  242. bool:RaceOpen,
  243. RaceTotal,
  244. RaceCurrent,
  245. Race1, Race1Name[20],
  246. Race2, Race2Name[20],
  247. Race3, Race3Name[20],
  248. Race4, Race4Name[20],
  249. bool:RaceExist
  250. }
  251.  
  252. new RaceCreate[MAX_RACE];
  253. new RaceCreate1[MAX_RACE];
  254. new RaceInfo[MAX_RACE][Races];
  255. new RaceCPPos[MAX_RACE][50][100]; // 100 corridas, 30 cps, 100 tamanho da string
  256. new RaceSTPos[MAX_RACE][20][100]; // 100 corridas, 30 cps, 100 tamanho da string
  257.  
  258.  
  259.  
  260. //---------------------------/ Stocks
  261. stock LoadWeapons(playerid)
  262. {
  263. new DBResult:ResultQuery;
  264. // - Enviamos a instrução para selecionar TODOS os registros da tabela Weapons, onde UID seja igual ao UID do jogador
  265. format(szString, sizeof szString, "SELECT * FROM Weapons WHERE PlayerID = %d", PlayerInfo[playerid][pID]);
  266. ResultQuery = db_query(DataBase, szString);
  267.  
  268. // - Se a nossa instrução retornar resultados...
  269. if(db_num_rows(ResultQuery))
  270. {
  271. // - ... então nós faremos um loop por estes resultados! :)
  272. for(new i = 0; i < db_num_rows(ResultQuery); i++)
  273. {
  274. new iSlot = GetWeaponSlot(db_get_field_int_assoc(ResultQuery, "Weapon"));
  275.  
  276. PlayerInfo[playerid][player_iWeapon][iSlot] = db_get_field_int_assoc(ResultQuery, "Weapon");
  277. PlayerInfo[playerid][player_iAmmo][iSlot] = db_get_field_int_assoc(ResultQuery, "Ammo");
  278.  
  279. //GivePlayerWeapon(playerid, PlayerInfo[playerid][player_iWeapon][iSlot], PlayerInfo[playerid][player_iAmmo][iSlot]);
  280.  
  281. if(!db_next_row(ResultQuery))
  282. break;
  283. }
  284. // - Pequeno debug
  285. printf("[!] %d arma(s) carregada(s) para o jogador %s.", db_num_rows(ResultQuery), GetPlayerName(playerid));
  286. }
  287. }
  288.  
  289. // - Função de salvar as armas do jogador
  290. stock SaveWeapons(playerid)
  291. {
  292. new DBResult:ResultQuery;
  293. // - Enviamos a instrução para deletar TODOS os registros da tabela Weapons, onde UID seja igual ao UID do jogador
  294. format(szString, sizeof szString, "DELETE FROM Weapons WHERE PlayerID = %d", PlayerInfo[playerid][pID]);
  295. ResultQuery = db_query(DataBase, szString);
  296.  
  297. new iCount = 0;
  298.  
  299. // - Então, iremos inserir os novos dados
  300. for(new i = 0; i < 13; i++)
  301. {
  302. new iWeapon;
  303. new iAmmo;
  304.  
  305. GetPlayerWeaponData(playerid, i, iWeapon, iAmmo);
  306.  
  307. if(iWeapon && iAmmo)
  308. {
  309. iCount ++;
  310.  
  311. // - ... iremos inserir a arma e a munição no banco de dados
  312. format(szString, sizeof szString, "INSERT INTO Weapons (PlayerID, Weapon, Ammo) VALUES (%d, %d, %d)", PlayerInfo[playerid][pID], iWeapon, iAmmo);
  313. db_query(DataBase, szString);
  314. if(!db_changes(DataBase))
  315. printf("SQLite ERROR! (SaveWeapons) Player: %s não pode ser inserido no banco de dados.", vehicleid, GetPlayerName(playerid));
  316. }
  317. }
  318.  
  319. // - Pequeno debug
  320. if(iCount)
  321. printf("[!] %d arma(s) salva(s) para o jogador %s.", iCount, GetPlayerName(playerid));
  322. }
  323.  
  324. stock GetWeaponSlot(weaponid)
  325. {
  326. switch(weaponid)
  327. {
  328. case 0, 1:
  329. return 0;
  330. case 2 .. 9:
  331. return 1;
  332. case 10 .. 15:
  333. return 10;
  334. case 16 .. 18, 39:
  335. return 8;
  336. case 22 .. 24:
  337. return 2;
  338. case 25 .. 27:
  339. return 3;
  340. case 28, 29, 32:
  341. return 4;
  342. case 30, 31:
  343. return 5;
  344. case 33, 34:
  345. return 6;
  346. case 35 .. 38:
  347. return 7;
  348. case 40:
  349. return 12;
  350. case 41 .. 43:
  351. return 9;
  352. case 44 .. 46:
  353. return 11;
  354. }
  355. return 0;
  356. }
  357.  
  358. stock LoadStaticVehiclesFromFile(const filename[])
  359. {
  360. new File:file_ptr;
  361. new line[256];
  362. new var_from_line[64];
  363. new vehicletype;
  364. new Float:SpawnX;
  365. new Float:SpawnY;
  366. new Float:SpawnZ;
  367. new Float:SpawnRot;
  368. new Color1, Color2;
  369. new index;
  370. new vehicles_loaded;
  371.  
  372. file_ptr = fopen(filename,filemode:io_read);
  373. if(!file_ptr) return 0;
  374.  
  375. vehicles_loaded = 0;
  376.  
  377. while(fread(file_ptr,line,256) > 0)
  378. {
  379. index = 0;
  380.  
  381. // Read type
  382. index = token_by_delim(line,var_from_line,',',index);
  383. if(index == (-1)) continue;
  384. vehicletype = strval(var_from_line);
  385. if(vehicletype < 400 || vehicletype > 611) continue;
  386.  
  387. // Read X, Y, Z, Rotation
  388. index = token_by_delim(line,var_from_line,',',index+1);
  389. if(index == (-1)) continue;
  390. SpawnX = floatstr(var_from_line);
  391.  
  392. index = token_by_delim(line,var_from_line,',',index+1);
  393. if(index == (-1)) continue;
  394. SpawnY = floatstr(var_from_line);
  395.  
  396. index = token_by_delim(line,var_from_line,',',index+1);
  397. if(index == (-1)) continue;
  398. SpawnZ = floatstr(var_from_line);
  399.  
  400. index = token_by_delim(line,var_from_line,',',index+1);
  401. if(index == (-1)) continue;
  402. SpawnRot = floatstr(var_from_line);
  403.  
  404. // Read Color1, Color2
  405. index = token_by_delim(line,var_from_line,',',index+1);
  406. if(index == (-1)) continue;
  407. Color1 = strval(var_from_line);
  408.  
  409. index = token_by_delim(line,var_from_line,';',index+1);
  410. Color2 = strval(var_from_line);
  411.  
  412. //printf("%d,%.2f,%.2f,%.2f,%.4f,%d,%d",vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2);
  413.  
  414. AddStaticVehicleEx(vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2,(30*60)); // respawn 30 minutes
  415.  
  416. /*new numplate_test[32+1];
  417. format(numplate_test,32,"GRLC{44AA33}%d",vid);
  418. SetVehicleNumberPlate(vid, numplate_test);*/
  419.  
  420. vehicles_loaded++;
  421. }
  422.  
  423. fclose(file_ptr);
  424. printf("Loaded %d vehicles from: %s",vehicles_loaded,filename);
  425. return vehicles_loaded;
  426. }
  427.  
  428. stock token_by_delim(const string[], return_str[], delim, start_index)
  429. {
  430. new x=0;
  431. while(string[start_index] != EOS && string[start_index] != delim) {
  432. return_str[x] = string[start_index];
  433. x++;
  434. start_index++;
  435. }
  436. return_str[x] = EOS;
  437. if(string[start_index] == EOS) start_index = (-1);
  438. return start_index;
  439. }
  440.  
  441. stock ToggleVehicleEngine(playerid, vid)
  442. {
  443. new engine,lights,alarm,doors,bonnet,boot,objective;
  444. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  445. if(engine == VEHICLE_PARAMS_UNSET || engine == VEHICLE_PARAMS_OFF)
  446. {
  447. SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  448. SendClientMessage(playerid, COLOR_GOLD, "Server: veículo ligado!");
  449. }
  450. else
  451. {
  452. SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  453. SendClientMessage(playerid, COLOR_GOLD, "Server: veículo desligado!");
  454. }
  455. }
  456. stock ToggleVehicleLights(playerid, vid)
  457. {
  458. new engine,lights,alarm,doors,bonnet,boot,objective;
  459. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  460. if(lights == VEHICLE_PARAMS_UNSET || lights == VEHICLE_PARAMS_OFF)
  461. {
  462. SendClientMessage(playerid, COLOR_GOLD, "Server: faróis acesos!");
  463. SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
  464. }
  465. else
  466. {
  467. SendClientMessage(playerid, COLOR_GOLD, "Server: faróis apagados!");
  468. SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
  469. }
  470. }
  471. stock ToggleVehicleDoorsLocked(vid)
  472. {
  473. new engine,lights,alarm,doors,bonnet,boot,objective;
  474. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  475. if(doors == VEHICLE_PARAMS_UNSET || doors == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
  476. else SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
  477. }
  478. stock ToggleVehicleHood(vid)
  479. {
  480. new engine,lights,alarm,doors,bonnet,boot,objective;
  481. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  482. if(bonnet == VEHICLE_PARAMS_UNSET || bonnet == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_ON,boot,objective);
  483. else SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_OFF,boot,objective);
  484. }
  485. stock ToggleVehicleTrunk(vid)
  486. {
  487. new engine,lights,alarm,doors,bonnet,boot,objective;
  488. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  489. if(boot == VEHICLE_PARAMS_UNSET || boot == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
  490. else SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_OFF,objective);
  491. }
  492. // VehicleParamsEx state setter helpers
  493. stock SetVehicleEngineState(vid, setstate)
  494. {
  495. new engine,lights,alarm,doors,bonnet,boot,objective;
  496. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  497. if(setstate) SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  498. else SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  499. }
  500. stock SetVehicleLightsState(vid, setstate)
  501. {
  502. new engine,lights,alarm,doors,bonnet,boot,objective;
  503. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  504. if(setstate) SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
  505. else SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
  506. }
  507. stock SetVehicleDoorsLockedState(vid, setstate)
  508. {
  509. new engine,lights,alarm,doors,bonnet,boot,objective;
  510. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  511. if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
  512. else SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
  513. }
  514. stock SetVehicleHoodState(vid, setstate)
  515. {
  516. new engine,lights,alarm,doors,bonnet,boot,objective;
  517. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  518. if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_ON,boot,objective);
  519. else SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_OFF,boot,objective);
  520. }
  521. stock SetVehicleTrunkState(vid, setstate)
  522. {
  523. new engine,lights,alarm,doors,bonnet,boot,objective;
  524. GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  525. if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
  526. else SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_OFF,objective);
  527. }
  528.  
  529. stock GetPlayerMoneyEx(playerid)
  530. return PlayerInfo[playerid][playermoney];
  531.  
  532. stock GivePlayerMoneyEx(playerid, amount)
  533. {
  534. PlayerInfo[playerid][playermoney] = PlayerInfo[playerid][playermoney] + amount;
  535.  
  536. GivePlayerMoney(playerid, amount);
  537. }
  538.  
  539.  
  540. stock ResetPlayerMoneyEx(playerid)
  541. {
  542. PlayerInfo[playerid][playermoney] = 0;
  543.  
  544. ResetPlayerMoney(playerid);
  545. }
  546.  
  547. stock SetPlayerMoney(playerid, amount)
  548. {
  549. PlayerInfo[playerid][playermoney] = amount;
  550.  
  551. ResetPlayerMoney(playerid);
  552. GivePlayerMoney(playerid, amount);
  553. }
  554.  
  555. #define GetPlayerMoney GetPlayerMoneyEx
  556. #define GivePlayerMoney GivePlayerMoneyEx
  557. #define ResetPlayerMoney ResetPlayerMoneyEx
  558.  
  559. stock Float: GetDistanceBetweenPoints(Float: x1, Float: y1, Float: z1, Float: x2, Float: y2, Float: z2)
  560. return VectorSize(x1 - x2, y1 - y2, z1 - z2);
  561.  
  562. stock Float: SQLiteGetResultFloatAssoc(DBResult: dbresult, field[])
  563. {
  564. new szResult[16];
  565. db_get_field_assoc(dbresult, field, szResult, sizeof(szResult));
  566. return floatstr(szResult);
  567. }
  568.  
  569. stock SQLiteGetResultIntAssoc(DBResult: dbresult, field[])
  570. {
  571. new szResult[16];
  572. db_get_field_assoc(dbresult, field, szResult, sizeof(szResult));
  573. return strval(szResult);
  574. }
  575.  
  576. stock GetPlayerNameEx(playerid)
  577. {
  578. new szName[MAX_PLAYER_NAME];
  579. GetPlayerName(playerid, szName, MAX_PLAYER_NAME);
  580. return szName;
  581. }
  582. #define GetPlayerName GetPlayerNameEx
  583.  
  584. stock PlayAudioForAll(audioid)
  585. {
  586. foreach(Player, i)
  587. {
  588. PlayerPlaySound(i, audioid, 0.0, 0.0, 0.0);
  589. }
  590. return true;
  591. }
  592.  
  593. stock SendClientMessageEx(playerid, color, fstring[], {Float, _}:...)
  594. {
  595. static const STATIC_ARGS = 3;
  596. new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
  597. if(n)
  598. {
  599. new message[144], arg_start, arg_end;
  600. #emit CONST.alt fstring
  601. #emit LCTRL 5
  602. #emit ADD
  603. #emit STOR.S.pri arg_start
  604.  
  605. #emit LOAD.S.alt n
  606. #emit ADD
  607. #emit STOR.S.pri arg_end
  608. do
  609. {
  610. #emit LOAD.I
  611. #emit PUSH.pri
  612. arg_end -= BYTES_PER_CELL;
  613. #emit LOAD.S.pri arg_end
  614. }
  615. while(arg_end > arg_start);
  616.  
  617. #emit PUSH.S fstring
  618. #emit PUSH.C 144
  619. #emit PUSH.ADR message
  620.  
  621. n += BYTES_PER_CELL * 3;
  622. #emit PUSH.S n
  623. #emit SYSREQ.C format
  624.  
  625. n += BYTES_PER_CELL;
  626. #emit LCTRL 4
  627. #emit LOAD.S.alt n
  628. #emit ADD
  629. #emit SCTRL 4
  630.  
  631. return SendClientMessage(playerid, color, message);
  632. } else
  633. return SendClientMessage(playerid, color, fstring);
  634. }
  635.  
  636. stock SendClientMessageToAllEx(color, fstring[], {Float, _}:...)
  637. {
  638. #if defined DEBUG_MODE
  639. #if !defined DEBUG_NO_FUNCTIONS
  640. printf("[DEBUG] stock SendClientMessageToAllEx(color #%x, fstring '%s')", color, fstring);
  641. #endif
  642. #endif
  643.  
  644. static const STATIC_ARGS = 2;
  645. new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
  646. if(n)
  647. {
  648. new message[144], arg_start, arg_end;
  649. #emit CONST.alt fstring
  650. #emit LCTRL 5
  651. #emit ADD
  652. #emit STOR.S.pri arg_start
  653.  
  654. #emit LOAD.S.alt n
  655. #emit ADD
  656. #emit STOR.S.pri arg_end
  657. do
  658. {
  659. #emit LOAD.I
  660. #emit PUSH.pri
  661. arg_end -= BYTES_PER_CELL;
  662. #emit LOAD.S.pri arg_end
  663. }
  664. while(arg_end > arg_start);
  665.  
  666. #emit PUSH.S fstring
  667. #emit PUSH.C 144
  668. #emit PUSH.ADR message
  669.  
  670. n += BYTES_PER_CELL * 3;
  671. #emit PUSH.S n
  672. #emit SYSREQ.C format
  673.  
  674. n += BYTES_PER_CELL;
  675. #emit LCTRL 4
  676. #emit LOAD.S.alt n
  677. #emit ADD
  678. #emit SCTRL 4
  679.  
  680. return SendClientMessageToAll(color, message);
  681. } else
  682. return SendClientMessageToAll(color, fstring);
  683. }
  684. #define SendClientMessage SendClientMessageEx
  685. #define SendClientMessageToAll SendClientMessageToAllEx
  686.  
  687. stock SetPlayerPosEx(playerid, Float: x, Float: y, Float: z, Float: a, interior, virtualworld, bool: bTeleportVehicle = true)
  688. {
  689. if(!IsPlayerConnected(playerid))
  690. return false;
  691. new iVehicleID = GetPlayerVehicleID(playerid);
  692. new iPlayerSeat = GetPlayerVehicleSeat(playerid);
  693. if(bTeleportVehicle && IsPlayerInAnyVehicle(playerid))
  694. {
  695. SetVehiclePos(iVehicleID, x, y, z);
  696. SetVehicleZAngle(iVehicleID, a);
  697. SetVehicleVirtualWorld(iVehicleID, virtualworld);
  698. LinkVehicleToInterior(iVehicleID, interior);
  699. }
  700. SetPlayerPosFindZ(playerid, x, y, z);
  701. SetPlayerFacingAngle(playerid, a);
  702. SetPlayerInterior(playerid, interior);
  703. SetPlayerVirtualWorld(playerid, virtualworld);
  704. if(bTeleportVehicle)
  705. PutPlayerInVehicle(playerid, iVehicleID, iPlayerSeat);
  706. return true;
  707. }
  708.  
  709. stock TimestampToDate(timestamp)
  710. {
  711. new year = 1970, day = 0, month = 0, hour = UTC_TIMEZONE, mins = 0, sec = 0;
  712. new days_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  713. new returnstring[32];
  714. while(timestamp > 31622400)
  715. {
  716. timestamp -= 31536000;
  717. if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp -= 86400;
  718. year++;
  719. }
  720. if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) )
  721. days_of_month[1] = 29;
  722. else
  723. days_of_month[1] = 28;
  724. while(timestamp > 86400)
  725. {
  726. timestamp -= 86400, day++;
  727. if(day==days_of_month[month]) day = 0, month++;
  728. }
  729. while(timestamp > 60)
  730. {
  731. timestamp -= 60, mins++;
  732. if( mins == 60) mins=0, hour++;
  733. }
  734. sec = timestamp;
  735. format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hour, mins, sec);
  736. return returnstring;
  737. }
  738.  
  739. //---------------------------/ Callbacks, publics...
  740. public OnGameModeInit()
  741. {
  742. if(fexist(DATA_BASE_PATH))
  743. {
  744. DataBase = db_open(DATA_BASE_PATH);
  745. print("!SUCESS banco de dados carregado com sucesso!");
  746. }
  747. else
  748. {
  749. print("!FAIL O bando de dados do servidor não foi encontrado. Fechando servidor...");
  750. SendRconCommand("Exit");
  751. }
  752. SetTimer("OnServerUpdate", 1000, true);
  753. Langs_AddLanguage("PT", "Brasil");
  754. SetGameModeText("LS Racing");
  755. //DisableInteriorEnterExits();
  756. DisableNameTagLOS();
  757. ManualVehicleEngineAndLights();
  758. //UsePlayerPedAnims();
  759. AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
  760.  
  761. CreateTextdraws();
  762. LoadVehicles();
  763. LoadRaces();
  764. return true;
  765. }
  766.  
  767. public OnGameModeExit()
  768. {
  769. db_close(DataBase);
  770. return true;
  771. }
  772.  
  773. //------ Carrega todas as corridas existentes no banco de dados
  774. public LoadRaces()
  775. {
  776. new szString[100],
  777. DBResult:ResultQuery;
  778.  
  779. format(szString, sizeof szString, "SELECT * FROM Races");
  780. ResultQuery = db_query(DataBase, szString);
  781.  
  782. if(db_num_rows(ResultQuery))
  783. {
  784. for(new i = 0; i < db_num_rows(ResultQuery); i++)
  785. {
  786. db_get_field_assoc(ResultQuery, "Name", RaceInfo[i][RaceName], 50);
  787. RaceInfo[i][RaceType] = SQLiteGetResultIntAssoc(ResultQuery, "Type");
  788. RaceInfo[i][RaceReward] = SQLiteGetResultIntAssoc(ResultQuery, "Reward");
  789.  
  790. RaceInfo[i][RaceExist] = true;
  791. RaceInfo[i][RaceOpen] = false;
  792. if(!db_next_row(ResultQuery))
  793. break;
  794. }
  795. }
  796. for(new k = 0; k < 50; k++)
  797. {
  798. new line[50];
  799. format(line, sizeof line, "CP_%d", k);
  800. db_get_field_assoc(ResultQuery, line, RaceCPPos[i][k], 100);
  801. }
  802.  
  803. for(new j = 0; j < 20; j++)
  804. {
  805. new line[50];
  806. format(line, sizeof line, "ST_%d", j);
  807. db_get_field_assoc(ResultQuery, line, RaceSTPos[i][j], 100);
  808. }
  809.  
  810. format(szString, sizeof szString, "SELECT * FROM CheckPoints");
  811. ResultQuery = db_query(DataBase, szString);
  812. if(db_num_rows(ResultQuery))
  813. {
  814. for(new i = 0; i < db_num_rows(ResultQuery); i++)
  815. {
  816. new raceid, cpid;
  817. raceid = SQLiteGetResultIntAssoc(ResultQuery, "ID");
  818. cpid = SQLiteGetResultIntAssoc(ResultQuery, "CP_ID");
  819. db_get_field_assoc(ResultQuery, "CPs", RaceCPPos[raceid][cpid], 100);
  820. db_get_field_assoc(ResultQuery, "STs", RaceSTPos[raceid][cpid], 100);
  821. if(!next_row_db(ResultQuery, DataBase))
  822. break;
  823. }
  824. }
  825. else Print("SQLite (LoadRaces) não há corridas inseridas no banco de dados.");
  826. }
  827.  
  828. //------ Cria todos os textdraws do gamemode
  829. public CreateTextdraws()
  830. {
  831.  
  832. tBoxLights = TextDrawCreate(118.000000, 151.000000, "BOX 1");
  833. TextDrawAlignment(tBoxLights, 2);
  834. TextDrawBackgroundColor(tBoxLights, 153);
  835. TextDrawFont(tBoxLights, 5);
  836. TextDrawLetterSize(tBoxLights, 0.000000, 9.299999);
  837. TextDrawColor(tBoxLights, -1);
  838. TextDrawSetOutline(tBoxLights, 1);
  839. TextDrawSetProportional(tBoxLights, 1);
  840. TextDrawUseBox(tBoxLights, 1);
  841. TextDrawBoxColor(tBoxLights, 255);
  842. TextDrawTextSize(tBoxLights, 97.000000, 90.000000);
  843. TextDrawSetPreviewModel(tBoxLights, 475);
  844. TextDrawSetPreviewRot(tBoxLights, 5.000000, 1.000000, 18.000000, 0.449999);
  845. TextDrawSetSelectable(tBoxLights, 1);
  846. TextDrawSetPreviewVehCol(tBoxLights, 166, 166);
  847.  
  848. tBoxDoors = TextDrawCreate(221.000000, 151.000000, "BOX 2");
  849. TextDrawAlignment(tBoxDoors, 2);
  850. TextDrawBackgroundColor(tBoxDoors, 152);
  851. TextDrawFont(tBoxDoors, 5);
  852. TextDrawLetterSize(tBoxDoors, 0.000000, 9.299999);
  853. TextDrawColor(tBoxDoors, -1);
  854. TextDrawSetOutline(tBoxDoors, 1);
  855. TextDrawSetProportional(tBoxDoors, 1);
  856. TextDrawUseBox(tBoxDoors, 1);
  857. TextDrawBoxColor(tBoxDoors, 255);
  858. TextDrawTextSize(tBoxDoors, 97.000000, 90.000000);
  859. TextDrawSetPreviewModel(tBoxDoors, 475);
  860. TextDrawSetPreviewRot(tBoxDoors, 0.000000, 0.000000, 95.000000, 0.400000);
  861. TextDrawSetSelectable(tBoxDoors, 1);
  862. TextDrawSetPreviewVehCol(tBoxDoors, 166, 166);
  863.  
  864. tBoxTires = TextDrawCreate(331.000000, 151.000000, "BOX 3");
  865. TextDrawAlignment(tBoxTires, 2);
  866. TextDrawBackgroundColor(tBoxTires, 153);
  867. TextDrawFont(tBoxTires, 5);
  868. TextDrawLetterSize(tBoxTires, 0.000000, 9.299999);
  869. TextDrawColor(tBoxTires, -1);
  870. TextDrawSetOutline(tBoxTires, 1);
  871. TextDrawSetProportional(tBoxTires, 1);
  872. TextDrawUseBox(tBoxTires, 1);
  873. TextDrawBoxColor(tBoxTires, 255);
  874. TextDrawTextSize(tBoxTires, 97.000000, 90.000000);
  875. TextDrawSetPreviewModel(tBoxTires, 483);
  876. TextDrawSetPreviewRot(tBoxTires, 21.000000, 1.000000, 28.000000, 0.349999);
  877. TextDrawSetSelectable(tBoxTires, 1);
  878. TextDrawSetPreviewVehCol(tBoxTires, 166, 166);
  879.  
  880. tBoxPanels = TextDrawCreate(434.000000, 151.000000, "BOX 4");
  881. TextDrawAlignment(tBoxPanels, 2);
  882. TextDrawBackgroundColor(tBoxPanels, 153);
  883. TextDrawFont(tBoxPanels, 5);
  884. TextDrawLetterSize(tBoxPanels, 0.000000, 9.299999);
  885. TextDrawColor(tBoxPanels, -1);
  886. TextDrawSetOutline(tBoxPanels, 1);
  887. TextDrawSetProportional(tBoxPanels, 1);
  888. TextDrawUseBox(tBoxPanels, 1);
  889. TextDrawBoxColor(tBoxPanels, 255);
  890. TextDrawTextSize(tBoxPanels, 97.000000, 90.000000);
  891. TextDrawSetPreviewModel(tBoxPanels, 475);
  892. TextDrawSetPreviewRot(tBoxPanels, -16.000000, 0.000000, 0.000000, 0.500000);
  893. TextDrawSetSelectable(tBoxPanels, 1);
  894. TextDrawSetPreviewVehCol(tBoxPanels, 166, 166);
  895.  
  896. tPage1 = TextDrawCreate(118.000000, 135.000000, "1) BLINDAGENS");
  897. TextDrawBackgroundColor(tPage1, 255);
  898. TextDrawFont(tPage1, 2);
  899. TextDrawLetterSize(tPage1, 0.270000, 1.299999);
  900. TextDrawColor(tPage1, -1);
  901. TextDrawSetOutline(tPage1, 0);
  902. TextDrawSetProportional(tPage1, 1);
  903. TextDrawSetShadow(tPage1, 1);
  904. TextDrawSetSelectable(tPage1, 0);
  905.  
  906. tListLights = TextDrawCreate(166.000000, 244.000000, "FAROIS");
  907. TextDrawAlignment(tListLights, 2);
  908. TextDrawBackgroundColor(tListLights, 255);
  909. TextDrawFont(tListLights, 2);
  910. TextDrawLetterSize(tListLights, 0.189999, 1.000000);
  911. TextDrawColor(tListLights, -1);
  912. TextDrawSetOutline(tListLights, 0);
  913. TextDrawSetProportional(tListLights, 1);
  914. TextDrawSetShadow(tListLights, 1);
  915. TextDrawSetSelectable(tListLights, 0);
  916.  
  917. tListDoors = TextDrawCreate(267.000000, 244.000000, "PORTAS");
  918. TextDrawAlignment(tListDoors, 2);
  919. TextDrawBackgroundColor(tListDoors, 255);
  920. TextDrawFont(tListDoors, 2);
  921. TextDrawLetterSize(tListDoors, 0.189999, 1.000000);
  922. TextDrawColor(tListDoors, -1);
  923. TextDrawSetOutline(tListDoors, 0);
  924. TextDrawSetProportional(tListDoors, 1);
  925. TextDrawSetShadow(tListDoors, 1);
  926. TextDrawSetSelectable(tListDoors, 0);
  927.  
  928. tListTires = TextDrawCreate(381.000000, 244.000000, "RODAS");
  929. TextDrawAlignment(tListTires, 2);
  930. TextDrawBackgroundColor(tListTires, 255);
  931. TextDrawFont(tListTires, 2);
  932. TextDrawLetterSize(tListTires, 0.189999, 1.000000);
  933. TextDrawColor(tListTires, -1);
  934. TextDrawSetOutline(tListTires, 0);
  935. TextDrawSetProportional(tListTires, 1);
  936. TextDrawSetShadow(tListTires, 1);
  937. TextDrawSetSelectable(tListTires, 0);
  938.  
  939. tListPanels = TextDrawCreate(483.000000, 244.000000, "PAINEL");
  940. TextDrawAlignment(tListPanels, 2);
  941. TextDrawBackgroundColor(tListPanels, 255);
  942. TextDrawFont(tListPanels, 2);
  943. TextDrawLetterSize(tListPanels, 0.189999, 1.000000);
  944. TextDrawColor(tListPanels, -1);
  945. TextDrawSetOutline(tListPanels, 0);
  946. TextDrawSetProportional(tListPanels, 1);
  947. TextDrawSetShadow(tListPanels, 1);
  948. TextDrawSetSelectable(tListPanels, 0);
  949.  
  950. tPrevPage = TextDrawCreate(486.000000, 138.000000, "<<");
  951. TextDrawAlignment(tPrevPage, 2);
  952. TextDrawBackgroundColor(tPrevPage, 255);
  953. TextDrawFont(tPrevPage, 2);
  954. TextDrawLetterSize(tPrevPage, 0.189999, 1.000000);
  955. TextDrawColor(tPrevPage, -1);
  956. TextDrawSetOutline(tPrevPage, 0);
  957. TextDrawSetProportional(tPrevPage, 1);
  958. TextDrawSetShadow(tPrevPage, 1);
  959. TextDrawUseBox(tPrevPage, 1);
  960. TextDrawBoxColor(tPrevPage, 255);
  961. TextDrawTextSize(tPrevPage, 0.000000, 10.000000);
  962. TextDrawSetSelectable(tPrevPage, 0);
  963.  
  964. tNextPage = TextDrawCreate(502.000000, 138.000000, ">>");
  965. TextDrawAlignment(tNextPage, 2);
  966. TextDrawBackgroundColor(tNextPage, 255);
  967. TextDrawFont(tNextPage, 2);
  968. TextDrawLetterSize(tNextPage, 0.189999, 1.000000);
  969. TextDrawColor(tNextPage, -1);
  970. TextDrawSetOutline(tNextPage, 0);
  971. TextDrawSetProportional(tNextPage, 1);
  972. TextDrawSetShadow(tNextPage, 1);
  973. TextDrawUseBox(tNextPage, 1);
  974. TextDrawBoxColor(tNextPage, 255);
  975. TextDrawTextSize(tNextPage, 0.000000, 10.000000);
  976. TextDrawSetSelectable(tNextPage, 0);
  977.  
  978. tCloseButtom = TextDrawCreate(522.000000, 138.000000, "X");
  979. TextDrawAlignment(tCloseButtom, 2);
  980. TextDrawBackgroundColor(tCloseButtom, 255);
  981. TextDrawFont(tCloseButtom, 2);
  982. TextDrawLetterSize(tCloseButtom, 0.189999, 1.000000);
  983. TextDrawColor(tCloseButtom, -16776961);
  984. TextDrawSetOutline(tCloseButtom, 0);
  985. TextDrawSetProportional(tCloseButtom, 1);
  986. TextDrawSetShadow(tCloseButtom, 1);
  987. TextDrawUseBox(tCloseButtom, 1);
  988. TextDrawBoxColor(tCloseButtom, 144);
  989. TextDrawTextSize(tCloseButtom, 0.000000, 13.000000);
  990. TextDrawSetSelectable(tCloseButtom, 0);
  991.  
  992. txtModeName = TextDrawCreate(582.000000, 425.000000, "SA Tuning");
  993. TextDrawAlignment(txtModeName, 2);
  994. TextDrawBackgroundColor(txtModeName, 255);
  995. TextDrawFont(txtModeName, 0);
  996. TextDrawLetterSize(txtModeName, 0.230000, 1.100000);
  997. TextDrawColor(txtModeName, 255);
  998. TextDrawSetOutline(txtModeName, 0);
  999. TextDrawSetProportional(txtModeName, 1);
  1000. TextDrawSetShadow(txtModeName, 40);
  1001. TextDrawSetSelectable(txtModeName, 0);
  1002. //
  1003. txtDate = TextDrawCreate(582.000000, 436.000000, "18/09/2013 - 14:30");
  1004. TextDrawAlignment(txtDate, 2);
  1005. TextDrawBackgroundColor(txtDate, 255);
  1006. TextDrawFont(txtDate, 1);
  1007. TextDrawLetterSize(txtDate, 0.230000, 1.100000);
  1008. TextDrawColor(txtDate, -1);
  1009. TextDrawSetOutline(txtDate, 0);
  1010. TextDrawSetProportional(txtDate, 1);
  1011. TextDrawSetShadow(txtDate, 40);
  1012. TextDrawSetSelectable(txtDate, 0);
  1013. //
  1014. txtVehDistrict = TextDrawCreate(581.000000, 404.000000, "Turismo");
  1015. TextDrawAlignment(txtVehDistrict, 2);
  1016. TextDrawBackgroundColor(txtVehDistrict, 255);
  1017. TextDrawFont(txtVehDistrict, 1);
  1018. TextDrawLetterSize(txtVehDistrict, 0.219999, 1.200000);
  1019. TextDrawColor(txtVehDistrict, -1);
  1020. TextDrawSetOutline(txtVehDistrict, 0);
  1021. TextDrawSetProportional(txtVehDistrict, 1);
  1022. TextDrawSetShadow(txtVehDistrict, 100);
  1023. TextDrawSetSelectable(txtVehDistrict, 0);
  1024.  
  1025. BoasVindas = TextDrawCreate(320.000000, 123.000000, "San Andreas Street Racing");
  1026. TextDrawAlignment(BoasVindas, 2);
  1027. TextDrawBackgroundColor(BoasVindas, 255);
  1028. TextDrawFont(BoasVindas, 0);
  1029. TextDrawLetterSize(BoasVindas, 0.749998, 2.499999);
  1030. TextDrawColor(BoasVindas, 128);
  1031. TextDrawSetOutline(BoasVindas, 0);
  1032. TextDrawSetProportional(BoasVindas, 1);
  1033. TextDrawSetShadow(BoasVindas, 2);
  1034. TextDrawSetSelectable(BoasVindas, 0);
  1035.  
  1036. BoasVindas2 = TextDrawCreate(325.000000, 146.000000, "TENHA UM BOM JOGO!");
  1037. TextDrawAlignment(BoasVindas2, 2);
  1038. TextDrawBackgroundColor(BoasVindas2, -65281);
  1039. TextDrawFont(BoasVindas2, 0);
  1040. TextDrawLetterSize(BoasVindas2, 0.360000, 1.299998);
  1041. TextDrawColor(BoasVindas2, 255);
  1042. TextDrawSetOutline(BoasVindas2, 0);
  1043. TextDrawSetProportional(BoasVindas2, 1);
  1044. TextDrawSetShadow(BoasVindas2, 0);
  1045. TextDrawSetSelectable(BoasVindas2, 0);
  1046.  
  1047. StartRaceTxt = TextDrawCreate(320.000000, 397.000000, " ");
  1048. TextDrawAlignment(StartRaceTxt, 2);
  1049. TextDrawBackgroundColor(StartRaceTxt, 255);
  1050. TextDrawFont(StartRaceTxt, 2);
  1051. TextDrawLetterSize(StartRaceTxt, 0.199998, 1.399998);
  1052. TextDrawColor(StartRaceTxt, -16776961);
  1053. TextDrawSetOutline(StartRaceTxt, 1);
  1054. TextDrawSetProportional(StartRaceTxt, 1);
  1055. TextDrawSetSelectable(StartRaceTxt, 0);
  1056.  
  1057. RaceEndInfo = TextDrawCreate(12.000000, 431.000000, "INFO");
  1058. TextDrawBackgroundColor(RaceEndInfo, 255);
  1059. TextDrawFont(RaceEndInfo, 1);
  1060. TextDrawLetterSize(RaceEndInfo, 0.330000, 1.600000);
  1061. TextDrawColor(RaceEndInfo, -65281);
  1062. TextDrawSetOutline(RaceEndInfo, 0);
  1063. TextDrawSetProportional(RaceEndInfo, 1);
  1064. TextDrawSetShadow(RaceEndInfo, 50);
  1065. TextDrawSetSelectable(RaceEndInfo, 0);
  1066.  
  1067. RaceEndInfo2 = TextDrawCreate(48.000000, 432.000000, " ");
  1068. TextDrawBackgroundColor(RaceEndInfo2, 255);
  1069. TextDrawFont(RaceEndInfo2, 2);
  1070. TextDrawLetterSize(RaceEndInfo2, 0.210000, 1.399999);
  1071. TextDrawColor(RaceEndInfo2, -1);
  1072. TextDrawSetOutline(RaceEndInfo2, 1);
  1073. TextDrawSetProportional(RaceEndInfo2, 1);
  1074. TextDrawSetSelectable(RaceEndInfo2, 0);
  1075.  
  1076. }
  1077.  
  1078. //------ Cria todos os veículos presentes no banco de dados
  1079. public LoadVehicles()
  1080. {
  1081. // Veiculos públicos
  1082. LoadStaticVehiclesFromFile("vehicles/ls_law.txt");
  1083. LoadStaticVehiclesFromFile("vehicles/ls_airport.txt");
  1084. LoadStaticVehiclesFromFile("vehicles/ls_gen_inner.txt");
  1085. LoadStaticVehiclesFromFile("vehicles/ls_gen_outer.txt");
  1086.  
  1087. new szString[100],
  1088. DBResult:ResultQuery;
  1089.  
  1090. format(szString, sizeof szString, "SELECT * FROM Vehicles");
  1091. ResultQuery = db_query(DataBase, szString);
  1092. if(db_num_rows(ResultQuery))
  1093. {
  1094. for(new i = 0; i < db_num_rows(ResultQuery); i++)
  1095. {
  1096. db_get_field_assoc(ResultQuery, "Owner", ServerVehicles[i][VehOwner], 24);
  1097. db_get_field_assoc(ResultQuery, "Plate", ServerVehicles[i][VehPlate], 10);
  1098. ServerVehicles[i][VehOwnerID] = SQLiteGetResultIntAssoc(ResultQuery, "OID");
  1099. ServerVehicles[i][VehID] = SQLiteGetResultIntAssoc(ResultQuery, "ID");
  1100. ServerVehicles[i][VehModel] = SQLiteGetResultIntAssoc(ResultQuery, "Model");
  1101. ServerVehicles[i][VehSpoiler] = SQLiteGetResultIntAssoc(ResultQuery, "Spoiler");
  1102. ServerVehicles[i][VehHood] = SQLiteGetResultIntAssoc(ResultQuery, "Hood");
  1103. ServerVehicles[i][VehRoof] = SQLiteGetResultIntAssoc(ResultQuery, "Roof");
  1104. ServerVehicles[i][VehSideskirt] = SQLiteGetResultIntAssoc(ResultQuery, "Sideskirt");
  1105. ServerVehicles[i][VehLamps] = SQLiteGetResultIntAssoc(ResultQuery, "Lamps");
  1106. ServerVehicles[i][VehNitro] = SQLiteGetResultIntAssoc(ResultQuery, "Nitro");
  1107. ServerVehicles[i][VehExhaust] = SQLiteGetResultIntAssoc(ResultQuery, "Exhaust");
  1108. ServerVehicles[i][VehWheels] = SQLiteGetResultIntAssoc(ResultQuery, "Wheels");
  1109. ServerVehicles[i][VehStereo] = SQLiteGetResultIntAssoc(ResultQuery, "Stereo");
  1110. ServerVehicles[i][VehHydraulics] = SQLiteGetResultIntAssoc(ResultQuery, "Hydraulics");
  1111. ServerVehicles[i][VehFB] = SQLiteGetResultIntAssoc(ResultQuery, "FB");
  1112. ServerVehicles[i][VehRB] = SQLiteGetResultIntAssoc(ResultQuery, "RB");
  1113. ServerVehicles[i][VehVR] = SQLiteGetResultIntAssoc(ResultQuery, "VR");
  1114. ServerVehicles[i][VehVL] = SQLiteGetResultIntAssoc(ResultQuery, "VL");
  1115. ServerVehicles[i][VehX] = SQLiteGetResultIntAssoc(ResultQuery, "PosX");
  1116. ServerVehicles[i][VehY] = SQLiteGetResultIntAssoc(ResultQuery, "PosY");
  1117. ServerVehicles[i][VehZ] = SQLiteGetResultIntAssoc(ResultQuery, "PosZ");
  1118. ServerVehicles[i][VehA] = SQLiteGetResultIntAssoc(ResultQuery, "PosA");
  1119. ServerVehicles[i][VehPaintjob] = SQLiteGetResultIntAssoc(ResultQuery, "Paintjob");
  1120. ServerVehicles[i][VehColor1] = SQLiteGetResultIntAssoc(ResultQuery, "Color1");
  1121. ServerVehicles[i][VehColor2] = SQLiteGetResultIntAssoc(ResultQuery, "Color2");
  1122. ServerVehicles[i][VehTiresArmour] = SQLiteGetResultIntAssoc(ResultQuery, "TiresArmour");
  1123. ServerVehicles[i][VehDoorsArmour] = SQLiteGetResultIntAssoc(ResultQuery, "DoorsArmour");
  1124. ServerVehicles[i][VehPanelsArmour] = SQLiteGetResultIntAssoc(ResultQuery, "PanelsArmour");
  1125. ServerVehicles[i][VehLightsArmour] = SQLiteGetResultIntAssoc(ResultQuery, "LightsArmour");
  1126. ServerVehicles[i][VehHealth] = SQLiteGetResultFloatAssoc(ResultQuery, "Health");
  1127.  
  1128. VehCreate[i] = CreateVehicle(ServerVehicles[i][VehModel], ServerVehicles[i][VehX], ServerVehicles[i][VehY], ServerVehicles[i][VehZ], ServerVehicles[i][VehA], ServerVehicles[i][VehColor1], ServerVehicles[i][VehColor2], -1);
  1129. if(ServerVehicles[i][VehPaintjob] != -1) ChangeVehiclePaintjob(VehCreate[i], ServerVehicles[i][VehPaintjob]);
  1130. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehSpoiler]);
  1131. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehHood]);
  1132. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehRoof]);
  1133. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehSideskirt]);
  1134. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehLamps]);
  1135. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehNitro]);
  1136. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehExhaust]);
  1137. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehWheels]);
  1138. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehStereo]);
  1139. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehHydraulics]);
  1140. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehFB]);
  1141. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehRB]);
  1142. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehVR]);
  1143. AddVehicleComponent(VehCreate[i], ServerVehicles[i][VehVL]);
  1144.  
  1145. ServerVehicles[i][VehLocked] = true;
  1146. SetVehicleHealth(VehCreate[i], ServerVehicles[i][VehHealth]);
  1147.  
  1148. SetVehicleNumberPlate(VehCreate[i], ServerVehicles[i][VehOwner]);
  1149. SetVehicleParamsForPlayer(VehCreate[i], i, 0, 0);
  1150. SetVehicleParamsEx(VehCreate[i], 0, 0, 0, 0, 0, 0, 0);
  1151. ServerVehicles[i][VehStatus] = 0;
  1152. if(!db_next_row(ResultQuery))
  1153. break;
  1154. //SetVehicleToRespawn(i);
  1155. }
  1156. }
  1157. else print("SQLite (LoadVehicles) não há veículos inseridos no banco de dados.");
  1158. }
  1159.  
  1160. public OnPlayerUpdate(playerid)
  1161. {
  1162. // Se eu estiver em uma corrida...
  1163. if(PlayerInfo[playerid][pRaceID] > -1)
  1164. {
  1165. foreach(Player, i)
  1166. {
  1167. // Jogadores que estiverem na mesma corrida que eu...
  1168. if(PlayerInfo[i][pRaceID] == PlayerInfo[playerid][pRaceID])
  1169. {
  1170. SetPlayerMarkerForPlayer(playerid, i, 0xFFFFFF);
  1171. }
  1172. // Jogadores que estiverem em corrida, mas não a mesma que eu...
  1173. if(PlayerInfo[i][pRaceID] != -1 && PlayerInfo[i][pRaceID] != PlayerInfo[playerid][pRaceID])
  1174. {
  1175. new Float:ppos[3];
  1176. GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
  1177. // Se tiver próximo...
  1178. if(IsPlayerInRangeOfPoint(i, 50.0, ppos[0], ppos[1], ppos[2]))
  1179. SetPlayerMarkerForPlayer(playerid, i, 0x999999FF);
  1180. }
  1181. // Jogadores que não estiverem em corridas...
  1182. if(PlayerInfo[i][pRaceID] == -1)
  1183. {
  1184. new Float:ppos[3];
  1185. GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
  1186. // Se tiver próximo...
  1187. if(IsPlayerInRangeOfPoint(i, 50.0, ppos[0], ppos[1], ppos[2]))
  1188. SetPlayerMarkerForPlayer(playerid, i, 0x666666FF);
  1189. else
  1190. SetPlayerMarkerForPlayer(playerid, i, GetPlayerColor(i) & 0xFFFFFF00);
  1191. }
  1192. }
  1193. }
  1194. else if(PlayerInfo[playerid][pRaceID] == -1)
  1195. {
  1196. foreach(Player, i)
  1197. {
  1198. if(PlayerInfo[i][pRaceID] > -1)
  1199. SetPlayerMarkerForPlayer(playerid, i, 0x6E8B3FF);
  1200. else
  1201. SetPlayerMarkerForPlayer(playerid, i, 0x666666FF);
  1202. }
  1203. }
  1204.  
  1205. return true;
  1206. }
  1207.  
  1208. public OnServerUpdate()
  1209. {
  1210. new year, month, day, hour, minute, second, str[50];
  1211. getdate(year, month, day);
  1212. gettime(hour, minute, second);
  1213.  
  1214. format(str, sizeof str, "%02d/%02d/%d %02d:%02d", day, month, year, hour, minute);
  1215. TextDrawSetString(txtDate, str);
  1216. }
  1217.  
  1218.  
  1219. public OnVehicleMod(playerid,vehicleid,componentid)
  1220. {
  1221. if(GetPlayerInterior(playerid) == 0)
  1222. {
  1223. SendClientMessageToAll(COLOR_RED, "AntiCheater: veículo %d equipado com componente %d pelo jogador %s fora da garagem de tuning!", vehicleid, componentid, GetPlayerName(playerid));
  1224. }
  1225. else
  1226. {
  1227. SendClientMessage(playerid, COLOR_GREEN, "Server: veículo %d equipado.", vehicleid);
  1228. PlayerInfo[playerid][pVehModded] = true; // Confirmar que o jogador tunou o veículo
  1229. }
  1230. return 1;
  1231. }
  1232.  
  1233. public OnEnterExitModShop(playerid, enterexit, interiorid)
  1234. {
  1235. if(enterexit == 1)
  1236. printf("<Log> %s entrou em uma garagem de tuning!", GetPlayerName(playerid));
  1237. else if(enterexit == 0)
  1238. {
  1239. printf("<Log> %s saiu de uma garagem de tuning!", GetPlayerName(playerid));
  1240. // Confirmar se o jogador tunou mesmo o carro. Caso use cheater de tunar carro, ele não salva os componentes...
  1241. // A variável pVehModded fica false...
  1242. if(PlayerInfo[playerid][pVehModded])
  1243. {
  1244. printf("<Log> %s saiu de uma garagem de tuning e tunou seu carro!", GetPlayerName(playerid));
  1245. if(IsPlayerInAnyVehicle(playerid))
  1246. {
  1247. new VehicleID = GetPlayerVehicleID(playerid),
  1248. szString[200];
  1249.  
  1250. ServerVehicles[VehicleID][VehSpoiler] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_SPOILER);
  1251. ServerVehicles[VehicleID][VehHood] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_HOOD);
  1252. ServerVehicles[VehicleID][VehRoof] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_ROOF);
  1253. ServerVehicles[VehicleID][VehSideskirt] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_SIDESKIRT);
  1254. ServerVehicles[VehicleID][VehLamps] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_LAMPS);
  1255. ServerVehicles[VehicleID][VehNitro] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_NITRO);
  1256. ServerVehicles[VehicleID][VehExhaust] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_EXHAUST);
  1257. ServerVehicles[VehicleID][VehWheels] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_WHEELS);
  1258. ServerVehicles[VehicleID][VehStereo] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_STEREO);
  1259. ServerVehicles[VehicleID][VehHydraulics] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_HYDRAULICS);
  1260. ServerVehicles[VehicleID][VehFB] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_FRONT_BUMPER);
  1261. ServerVehicles[VehicleID][VehRB] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_REAR_BUMPER);
  1262. ServerVehicles[VehicleID][VehVR] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_VENT_RIGHT);
  1263. ServerVehicles[VehicleID][VehVL] = GetVehicleComponentInSlot(VehicleID, CARMODTYPE_VENT_LEFT);
  1264.  
  1265. // Só salva os componentes de tuning...
  1266. format(szString, sizeof szString, "UPDATE Vehicles SET Spoiler = %d, Hood = %d, Roof = %d, Sideskirt = %d WHERE ID = %d",
  1267. ServerVehicles[VehicleID][VehSpoiler],
  1268. ServerVehicles[VehicleID][VehHood],
  1269. ServerVehicles[VehicleID][VehRoof],
  1270. ServerVehicles[VehicleID][VehSideskirt],
  1271. ServerVehicles[VehicleID][VehID]);
  1272. db_query(DataBase, szString);
  1273. if(!db_changes(DataBase))
  1274. print("SQLite ERROR! (OnEnterExitModShop) 1 query: update não pode ser feito.");
  1275. format(szString, sizeof szString, "UPDATE Vehicles SET \
  1276. Lamps = %d, \
  1277. Nitro = %d, \
  1278. Exhaust = %d, \
  1279. Wheels = %d \
  1280. WHERE ID = %d",
  1281. ServerVehicles[VehicleID][VehLamps],
  1282. ServerVehicles[VehicleID][VehNitro],
  1283. ServerVehicles[VehicleID][VehExhaust],
  1284. ServerVehicles[VehicleID][VehWheels],
  1285. ServerVehicles[VehicleID][VehID]);
  1286. db_query(DataBase, szString);
  1287. if(!db_changes(DataBase))
  1288. print("SQLite ERROR! (OnEnterExitModShop) 2 query: update não pode ser feito.");
  1289. format(szString, sizeof szString, "UPDATE Vehicles SET \
  1290. Stereo = %d, \
  1291. Hydraulics = %d, \
  1292. FB = %d, \
  1293. RB = %d \
  1294. WHERE ID = %d",
  1295. ServerVehicles[VehicleID][VehStereo],
  1296. ServerVehicles[VehicleID][VehHydraulics],
  1297. ServerVehicles[VehicleID][VehFB],
  1298. ServerVehicles[VehicleID][VehRB],
  1299. ServerVehicles[VehicleID][VehID]);
  1300. db_query(DataBase, szString);
  1301. if(!db_changes(DataBase))
  1302. print("SQLite ERROR! (OnEnterExitModShop) 3 query: update não pode ser feito.");
  1303. format(szString, sizeof szString, "UPDATE Vehicles SET \
  1304. VR = %d, \
  1305. VL = %d, \
  1306. WHERE ID = %d",
  1307. ServerVehicles[VehicleID][VehVR],
  1308. ServerVehicles[VehicleID][VehVL],
  1309. ServerVehicles[VehicleID][VehID]);
  1310. db_query(DataBase, szString);
  1311. if(!db_changes(DataBase))
  1312. print("SQLite ERROR! (OnEnterExitModShop) 4 query: update não pode ser feito.");
  1313. format(szString, sizeof szString, "UPDATE Vehicles SET \
  1314. VehColor1 = %d, \
  1315. VehColor2 = %d, \
  1316. VehPaintjob = %d, \
  1317. WHERE ID = %d",
  1318. ServerVehicles[VehicleID][VehColor1],
  1319. ServerVehicles[VehicleID][VehColor2],
  1320. ServerVehicles[VehicleID][VehPaintjob],
  1321. ServerVehicles[VehicleID][VehID]);
  1322. db_query(DataBase, szString);
  1323. if(!db_changes(DataBase))
  1324. print("SQLite ERROR! (OnEnterExitModShop) 5 query: update não pode ser feito.");
  1325. }
  1326. }
  1327. }
  1328. return true;
  1329. }
  1330.  
  1331. public OnPlayerStateChange(playerid, newstate, oldstate)
  1332. {
  1333. /*
  1334. SQLite VEHICLES
  1335. Posição do veículo
  1336. */
  1337. if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
  1338. {
  1339. new VehicleID = GetPlayerVehicleID(playerid), szString[200];
  1340. format(szString, sizeof szString, "UPDATE Vehicles SET PosX = %f, PosY = %f, PosZ = %f, posA = %f WHERE ID = %d", ServerVehicles[VehicleID][VehX], ServerVehicles[VehicleID][VehY], ServerVehicles[VehicleID][VehZ], ServerVehicles[VehicleID][VehA], ServerVehicles[VehicleID][VehID]);
  1341. db_query(DataBase, szString);
  1342. if(!db_changes(DataBase))
  1343. {
  1344. SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados (parte: StateChange). Contate um administrador.
  1345. printf("SQLite ERROR! (OnPlayerStateChange) Posição do veículo: %d (db-id:%d) não pode ser salvo", VehicleID, ServerVehicles[VehicleID][VehID]);
  1346. }
  1347. }
  1348. else if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
  1349. {
  1350. new i = GetPlayerVehicleID(playerid),
  1351. engine, lights, alarm, doors, bonnet, boot, obj;
  1352. GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, obj);
  1353. if(engine == 0) ShowPlayerDialog(playerid, DIALOG_ENGINE, 0, RGB_COLOR_GOLD"VEÍCULO", RGB_COLOR_WHITE"Deseja ligar o veículo?\nUse também o comando /motor para ligar/desligar.", "Ligar", "Não");
  1354. }
  1355. return 1;
  1356. }
  1357.  
  1358. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  1359. {
  1360. if(hittype != -1 && hittype == BULLET_HIT_TYPE_VEHICLE)
  1361. {
  1362. new Float:ModelPos[3];
  1363. GetVehicleModelInfo(GetVehicleModel(hitid), VEHICLE_MODEL_INFO_PETROLCAP, ModelPos[0], ModelPos[1], ModelPos[2]);
  1364.  
  1365. if(GetDistanceBetweenPoints(fX, fY, fZ, ModelPos[0], ModelPos[1], ModelPos[2]) < 0.1)
  1366. {
  1367. CreateExplosion(ModelPos[0], ModelPos[1], ModelPos[2], 7, 4.0);
  1368. }
  1369. }
  1370. return 1;
  1371. }
  1372.  
  1373. public OnPlayerConnect(playerid)
  1374. {
  1375. SendDeathMessage(INVALID_PLAYER_ID, playerid, 200);
  1376.  
  1377. SetPlayerColor(playerid, 0xFFFFFFFF);
  1378.  
  1379. PlayerInfo[playerid][pGPS] = -1;
  1380. PlayerInfo[playerid][Registered] = false;
  1381. PlayerInfo[playerid][Logged] = false;
  1382.  
  1383. // Funções SQLite
  1384. new szString[100],
  1385. DBResult:QueryResult;
  1386.  
  1387. format(szString, 128, "SELECT * FROM Users WHERE Nick = '%s'", GetPlayerName(playerid));
  1388. QueryResult = db_query(DataBase, szString);
  1389. if(db_num_rows(QueryResult))
  1390. {
  1391. PlayerInfo[playerid][Registered] = true;
  1392. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{FFD700}CONTA CADASTRADA", "{FFFFFF}Informe a senha dessa conta:", "Logar", "Sair");
  1393. }
  1394. else
  1395. {
  1396. ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{FFD700}CONTA NÃO CADASTRADA", "{FFFFFF}Digite uma nova senha para está conta:", "Cadastrar", "Sair");
  1397. }
  1398.  
  1399. PlayerInfo[playerid][pRaceID] = -1;
  1400. ResetPlayerMoney(playerid);
  1401.  
  1402. TextDrawShowForPlayer(playerid, BoasVindas);
  1403. TextDrawShowForPlayer(playerid, BoasVindas2);
  1404. return true;
  1405. }
  1406.  
  1407. public OnPlayerDisconnect(playerid, reason)
  1408. {
  1409. new posStr[100],
  1410. szString[300],
  1411. weapon[13],
  1412. ammo[13];
  1413.  
  1414. SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
  1415. GetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
  1416. GetPlayerFacingAngle(playerid, PlayerInfo[playerid][pA]);
  1417. format(posStr, sizeof posStr, "%f %f %f %f", PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ], PlayerInfo[playerid][pA]);
  1418.  
  1419. format(szString, sizeof szString, "UPDATE Users SET Money = '%d', Position = '%s', Skin = %d, Interior = %d WHERE ID = %d", PlayerInfo[playerid][playermoney], posStr, PlayerInfo[playerid][pSkin], GetPlayerInterior(playerid), PlayerInfo[playerid][pID]);
  1420. db_query(DataBase, szString);
  1421. if(!db_changes(DataBase))
  1422. {
  1423. printf("SQLite ERRO! (OnPlayerDisconnect) update dos dados do jogador não pode ser feito", GetPlayerName(playerid));
  1424. }
  1425.  
  1426. SaveWeapons(playerid);
  1427. return true;
  1428. }
  1429.  
  1430. public OnPlayerRequestClass(playerid, classid)
  1431. {
  1432. if(PlayerInfo[playerid][Logged] == false && PlayerInfo[playerid][Registered] == true) ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{FFD700}CONTA CADASTRADA", "{FFFFFF}Informe a senha dessa conta:", "Logar", "Sair");
  1433. //else if(PlayerInfo[playerid][Registered] == 0) ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{FFD700}CONTA NÃO CADASTRADA", "{FFFFFF}Digite uma nova senha para está conta:", "Cadastrar", "Sair");
  1434. SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  1435. SetPlayerInterior(playerid, PlayerInfo[playerid][pInterior]);
  1436. SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
  1437. SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pA]);
  1438. SetPlayerCameraPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY]+3.5, PlayerInfo[playerid][pZ]+10.0);
  1439. SetPlayerCameraLookAt(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
  1440. TogglePlayerControllable(playerid, 0);
  1441. return true;
  1442. }
  1443.  
  1444. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  1445. {
  1446. switch(dialogid)
  1447. {
  1448. case DIALOG_TEXT_NO_EFFECT:
  1449. {
  1450. if(response)
  1451. {
  1452. if(PlayerInfo[playerid][pTutorial] == 1) // Carros
  1453. {
  1454. // Próximo dialogo: carros
  1455. new sz_Dialog1[] = RGB_COLOR_GOLD"VEÍCULOS\n\n"RGB_COLOR_WHITE"Cada jogador ao se registrar, pode escolher 1 veículo dentre 3 pré-definidos: Clover, Blista ou Sunrise.\n\
  1456. Esse será seu veículo de início. Com ele você poderá entrar em corridas para ganhar dinheiro, tunar em uma das garagens de tuning, e participar de eventos.\n";
  1457.  
  1458. new sz_Dialog2[] = "É importante que você cuide do seu veículo; Não o deixe destrancado, e nem deixe estacionado pelas ruas.\n\
  1459. Seu veículo fica salvo no local onde você o deixou, e seus tunings também ficam salvos.";
  1460. new sz_Dialog[1000];
  1461. strcat(sz_Dialog, sz_Dialog1);
  1462. strcat(sz_Dialog, sz_Dialog2);
  1463. PlayerInfo[playerid][pTutorial] = 2;
  1464. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"TUTORIAL", sz_Dialog, "P. PÁGINA", "");
  1465. }
  1466. else if(PlayerInfo[playerid][pTutorial] == 2) // Armas
  1467. {
  1468. new sz_Dialog[] = RGB_COLOR_GOLD"ARMAS\n\n\
  1469. "RGB_COLOR_WHITE"Você pode comprar as suas armas normalmente nas Ammunations, e elas ficarão salvas caso você saia\
  1470. do servidor.\n Armas especiais como: sniper, granada, etc.. só poderão ser compradas pelo mercado negro.";
  1471. PlayerInfo[playerid][pTutorial] = 0;
  1472. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"TUTORIAL", sz_Dialog, "P. PÁGINA", "");
  1473. }
  1474. }
  1475. }
  1476. case DIALOG_REGISTER:
  1477. {
  1478. if(!response) Kick(playerid);
  1479. else
  1480. {
  1481. new //DBResult:ResultQuery,
  1482. Password[130],
  1483. szString[256];
  1484. WP_Hash(Password, sizeof(Password), inputtext); // Codificar string
  1485. format(szString, sizeof szString, "INSERT INTO Users(Nick, Password) VALUES('%s', '%s')", GetPlayerName(playerid), Password);
  1486. db_query(DataBase, szString);
  1487. if(!db_changes(DataBase))
  1488. {
  1489. printf("SQLite !ERROR: Não foi possível criar a conta do jogador %s no bando de dados.", GetPlayerName(playerid));
  1490. SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados (parte: DIALOG_REGISTER). Contate um administrador.");
  1491. Kick(playerid);
  1492. return true;
  1493. }
  1494.  
  1495. PlayerInfo[playerid][Logged] = true;
  1496. TextDrawHideForPlayer(playerid, BoasVindas);
  1497. TextDrawHideForPlayer(playerid, BoasVindas2);
  1498. SendClientMessage(playerid, COLOR_WHITE, "Server: conta %s cadastrada com a senha '%s', bom jogo!", GetPlayerName(playerid), inputtext);
  1499. PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1500. PlayerInfo[playerid][pX] = 1722.7843;
  1501. PlayerInfo[playerid][pY] = -1713.9490;
  1502. PlayerInfo[playerid][pZ] = 13.5114;
  1503. PlayerInfo[playerid][pA] = 181.5285;
  1504. PlayerInfo[playerid][pInterior] = 0;
  1505. PlayerInfo[playerid][pSkin] = 0;
  1506. for(new i = 0; i < 13; i++)
  1507. {
  1508. PlayerInfo[playerid][pWeapon][i] = 0;
  1509. PlayerInfo[playerid][pAmmo][i] = 0;
  1510. }
  1511. new sz_Dialog[] = #RGB_COLOR_GOLD"REGRAS DO SERVIDOR\n\n\
  1512. "RGB_COLOR_WHITE"1. Proibido o uso de qualquer tipo de cheater;\n\
  1513. 2. Proibido se aproveitar de qualquer bug do gamemode;\n\
  1514. 3. Proibido ofensas a outros jogadores;\n\
  1515. 4. Ao sair do servidor, deixa seu veículo estacionado em garagens, car parking, etc;\n\
  1516. 5. ...";
  1517. PlayerInfo[playerid][pTutorial] = 1;
  1518. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"TUTORIAL", sz_Dialog, "P. PÁGINA", "");
  1519. }
  1520. }
  1521. case DIALOG_LOGIN:
  1522. {
  1523. if(!response) Kick(playerid);
  1524. else
  1525. {
  1526. new szString[250],
  1527. DBResult:ResultQuery,
  1528. EnPassword[130];
  1529. WP_Hash(EnPassword, sizeof(EnPassword), inputtext);
  1530.  
  1531. // SQLite tabela Users
  1532. format(szString, sizeof szString, "SELECT * FROM Users WHERE Nick = '%s' AND Password = '%s'", GetPlayerName(playerid), EnPassword);
  1533. ResultQuery = db_query(DataBase, szString);
  1534. if(db_num_rows(ResultQuery)) // Se existe o nickname e a Senha conferir...
  1535. {
  1536. new szPos[16];
  1537. PlayerInfo[playerid][pSkin] = SQLiteGetResultIntAssoc(ResultQuery, "Skin");
  1538. PlayerInfo[playerid][playermoney] = SQLiteGetResultIntAssoc(ResultQuery, "Money");
  1539. PlayerInfo[playerid][pInterior] = SQLiteGetResultIntAssoc(ResultQuery, "Interior");
  1540. PlayerInfo[playerid][pID] = SQLiteGetResultIntAssoc(ResultQuery, "ID");
  1541. db_get_field_assoc(ResultQuery, "Position", szPos, sizeof(szPos));
  1542.  
  1543. LoadWeapons(playerid);
  1544.  
  1545. GivePlayerMoney(playerid, PlayerInfo[playerid][playermoney]);
  1546. TextDrawHideForPlayer(playerid, BoasVindas);
  1547. TextDrawHideForPlayer(playerid, BoasVindas2);
  1548. SendClientMessage(playerid, COLOR_WHITE, "Server: seja bem vindo, %s, tenha um bom jogo!", GetPlayerName(playerid));
  1549. PlayerInfo[playerid][Registered] = true;
  1550. PlayerInfo[playerid][Logged] = true;
  1551.  
  1552. sscanf(szPos, "ffff", PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ], PlayerInfo[playerid][pA]);
  1553. //SetSpawnInfo(playerid, NO_TEAM, PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ], PlayerInfo[playerid][pA], 24, 100, 0, 0, 0, 0);
  1554. }
  1555. else ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, RGB_COLOR_GOLD"CONTA CADASTRADA", RGB_COLOR_WHITE"Digite a senha dessa conta:", "Logar", "Sair");
  1556. }
  1557. }
  1558. case DIALOG_ENGINE:
  1559. {
  1560. if(response)
  1561. {
  1562. ToggleVehicleEngine(playerid, GetPlayerVehicleID(playerid));
  1563. }
  1564. }
  1565. case DIALOG_WORKSHOP:
  1566. {
  1567. if(response)
  1568. {
  1569. switch(listitem)
  1570. {
  1571. case 0: ShowPlayerDialog(playerid, DIALOG_WORKSHOPH, DIALOG_STYLE_LIST, RGB_COLOR_GOLD"OFICINA DE TUNING", "+500 Resistência (R$1500)\n+1000 Resistência (R$2500)\n+2000 Resistência (R$5000)", "Comprar", "Voltar");
  1572. case 1:
  1573. {
  1574. if(GetPlayerMoney(playerid) > 3000)
  1575. {
  1576. new szString[100];
  1577. // SQLite Vehicles
  1578. format(szString, sizeof szString, "UPDATE Vehicles SET DoorsArmour = %d WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehDoorsArmour], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1579. db_query(DataBase, szString);
  1580. if(db_changes(DataBase))
  1581. {
  1582. ServerVehicles[GetPlayerVehicleID(playerid)][VehDoorsArmour] = 1;
  1583. SendClientMessage(playerid, COLOR_GOLD, "Server: você blindou as portas do seu %s(%d)", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1584. GivePlayerMoney(playerid, -3000);
  1585. }
  1586. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1587. }
  1588. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $3000.");
  1589. }
  1590. case 2:
  1591. {
  1592. if(GetPlayerMoney(playerid) > 4000)
  1593. {
  1594. new szString[100];
  1595. format(szString, sizeof szString, "UPDATE Vehicles SET PanelsArmour = %d WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehPanelsArmour], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1596. db_query(DataBase, szString);
  1597. if(db_changes(DataBase))
  1598. {
  1599. ServerVehicles[GetPlayerVehicleID(playerid)][VehPanelsArmour] = 1;
  1600. SendClientMessage(playerid, COLOR_GOLD, "Server: você blindou os painéis do seu %s(%d)", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1601. GivePlayerMoney(playerid, -4000);
  1602. }
  1603. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1604.  
  1605. }
  1606. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $4000.");
  1607. }
  1608. case 3:
  1609. {
  1610. if(GetPlayerMoney(playerid) > 5000)
  1611. {
  1612. new szString[100];
  1613. // SQLite Vehicles
  1614. format(szString, sizeof szString, "UPDATE Vehicles SET TiresArmour = %d WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehTiresArmour], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1615. db_query(DataBase, szString);
  1616. if(db_changes(DataBase))
  1617. {
  1618. ServerVehicles[GetPlayerVehicleID(playerid)][VehTiresArmour] = 1;
  1619. SendClientMessage(playerid, COLOR_GOLD, "Server: você blindou as rodas do seu %s(%d)", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1620. GivePlayerMoney(playerid, -5000);
  1621. }
  1622. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1623. }
  1624. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $5000.");
  1625. }
  1626. case 4:
  1627. {
  1628. if(GetPlayerMoney(playerid) > 3000)
  1629. {
  1630. new szString[100];
  1631. // SQLite Vehicles
  1632. format(szString, sizeof szString, "UPDATE Vehicles SET LightsArmour = %d WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehLightsArmour], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1633. db_query(DataBase, szString);
  1634. if(db_changes(DataBase))
  1635. {
  1636. ServerVehicles[GetPlayerVehicleID(playerid)][VehLightsArmour] = 1;
  1637. SendClientMessage(playerid, COLOR_GOLD, "Server: você blindou os faróis do seu %s(%d)", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1638. GivePlayerMoney(playerid, -3000);
  1639. }
  1640. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1641. }
  1642. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $3000.");
  1643. }
  1644. case 5:
  1645. {
  1646. if(GetPlayerMoney(playerid) > 2500)
  1647. ShowPlayerDialog(playerid, DIALOG_WORKSHOP_COLOR, DIALOG_STYLE_INPUT, RGB_COLOR_GOLD"OFICINA DE TUNING", RGB_COLOR_WHITE"Selecione o ID das cores (128 a 255).\nVocê pode conferir todas as cores no link abaixo:\nhttp://wiki.sa-mp.com/wiki/Vehicle_Color_IDs\nExemplo: 222 1", "Pintar", "Voltar");
  1648. else
  1649. SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $2500.");
  1650. }
  1651. case 6:
  1652. {
  1653. if(GetPlayerMoney(playerid) > 100)
  1654. {
  1655. new szString[100];
  1656. // SQLite Vehicles
  1657. format(szString, sizeof szString, "UPDATE Vehicles SET Health = %d WHERE ID = %f", ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1658. db_query(DataBase, szString);
  1659. if(db_changes(DataBase))
  1660. {
  1661. RepairVehicle(GetPlayerVehicleID(playerid));
  1662. SetVehicleHealth(GetPlayerVehicleID(playerid), ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth]);
  1663. GivePlayerMoney(playerid, -100);
  1664. SendClientMessage(playerid, COLOR_GOLD, "Server: veículo %s(%d) reparado.", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1665. }
  1666. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1667. }
  1668. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa de $100.");
  1669. }
  1670. }
  1671. }
  1672. }
  1673. case DIALOG_WORKSHOPH:
  1674. {
  1675. if(response)
  1676. {
  1677. switch(listitem)
  1678. {
  1679. case 0:
  1680. {
  1681. if(ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] < 1500.0)
  1682. {
  1683. if(GetPlayerMoney(playerid) > 1500)
  1684. {
  1685. new szString[100];
  1686. // SQLite Vehicles
  1687. format(szString, sizeof szString, "UPDATE Vehicles SET Health = %f WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1688. db_query(DataBase, szString);
  1689. if(db_changes(DataBase))
  1690. {
  1691. SendClientMessage(playerid, COLOR_GOLD, "Server: você fez um upgrade na resistência do seu %s(%d) para 1500(car health).", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1692. RepairVehicle(GetPlayerVehicleID(playerid));
  1693. ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] = 1500.0;
  1694. SetVehicleHealth(GetPlayerVehicleID(playerid), 1500.0);
  1695. GivePlayerMoney(playerid, -1500);
  1696. }
  1697. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1698. }
  1699. else SendClientMessage(playerid, COLOR_RED, "Server: você precisa de $1500.");
  1700. }
  1701. else SendClientMessage(playerid, COLOR_RED, "Server: a resistência desse veículo já é maior que 1500.");
  1702. }
  1703. case 1:
  1704. {
  1705. if(ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] < 2000.0)
  1706. {
  1707. if(GetPlayerMoney(playerid) > 2500)
  1708. {
  1709. new szString[100];
  1710. // SQLite Vehicles
  1711. format(szString, sizeof szString, "UPDATE Vehicles SET Health = %f WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1712. db_query(DataBase, szString);
  1713. if(db_changes(DataBase))
  1714. {
  1715. SendClientMessage(playerid, COLOR_GOLD, "Server: você fez um upgrade na resistência do seu %s(%d) para 2000(car health).", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1716. RepairVehicle(GetPlayerVehicleID(playerid));
  1717. ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] = 2000.0;
  1718. SetVehicleHealth(GetPlayerVehicleID(playerid), 2000.0);
  1719. GivePlayerMoney(playerid, -2500);
  1720. }
  1721. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1722. }
  1723. else SendClientMessage(playerid, COLOR_RED, "Server: você precisa de $2500.");
  1724. }
  1725. else SendClientMessage(playerid, COLOR_RED, "Server: a resistência desse veículo já é maior que 2000.");
  1726. }
  1727. case 2:
  1728. {
  1729. if(ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] < 3000.0)
  1730. {
  1731. if(GetPlayerMoney(playerid) > 5000)
  1732. {
  1733. new szString[100];
  1734. // SQLite Vehicles
  1735. format(szString, sizeof szString, "UPDATE Vehicles SET Health = %f WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1736. db_query(DataBase, szString);
  1737. if(db_changes(DataBase))
  1738. {
  1739. SendClientMessage(playerid, COLOR_GOLD, "Server: você fez um upgrade na resistência do seu %s(%d) para 3000(car health).", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1740. RepairVehicle(GetPlayerVehicleID(playerid));
  1741. ServerVehicles[GetPlayerVehicleID(playerid)][VehHealth] = 3000.0;
  1742. SetVehicleHealth(GetPlayerVehicleID(playerid), 3000.0);
  1743. GivePlayerMoney(playerid, -5000);
  1744. }
  1745. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1746. }
  1747. else SendClientMessage(playerid, COLOR_RED, "Server: você precisa de $5000.");
  1748. }
  1749. else SendClientMessage(playerid, COLOR_RED, "Server: a resistência desse veículo já é igual a 3000.");
  1750. }
  1751. }
  1752. } else ShowPlayerDialog(playerid, DIALOG_WORKSHOP, DIALOG_STYLE_LIST, RGB_COLOR_GOLD"OFICINA DE TUNING", RGB_COLOR_WHITE"Aumentar Resistência\nBlindar Portas\t\t\tR$3000\nBlindar Paineis\t\t\tR$3000\nBlindar Rodas\t\t\tR$3000\nBlindar Luzes\t\t\tR$3000\nPintura\t\t\tR$2500\nReparar Veículo\t\t\tR$100", "Escolher", "Sair");
  1753. }
  1754. case DIALOG_WORKSHOP_COLOR:
  1755. {
  1756. if(response)
  1757. {
  1758. new cID, cID2;
  1759. if(sscanf(inputtext, "dd", cID,cID2)) SendClientMessage(playerid, COLOR_RED, "Erro: digite os id da cor1 e cor2.");
  1760. else
  1761. {
  1762. new szString[100];
  1763. // SQLite Vehicles
  1764. format(szString, sizeof szString, "UPDATE Vehicles SET Color1 = %d, Color2 = %d WHERE ID = %d", ServerVehicles[GetPlayerVehicleID(playerid)][VehColor1], ServerVehicles[GetPlayerVehicleID(playerid)][VehColor2], ServerVehicles[GetPlayerVehicleID(playerid)][VehID]);
  1765. db_query(DataBase, szString);
  1766. if(db_changes(DataBase))
  1767. {
  1768. GivePlayerMoney(playerid, -2500);
  1769. ChangeVehicleColor(GetPlayerVehicleID(playerid), cID, cID2);
  1770. ServerVehicles[GetPlayerVehicleID(playerid)][VehColor1] = cID;
  1771. ServerVehicles[GetPlayerVehicleID(playerid)][VehColor2] = cID2;
  1772. SendClientMessage(playerid, COLOR_GOLD, "Server: você mudou a cor do seu %s(%d).", VehicleNames[ServerVehicles[GetPlayerVehicleID(playerid)][VehModel] - 400], GetPlayerVehicleID(playerid));
  1773. }
  1774. else SendClientMessage(playerid, COLOR_RED, "Erro no banco de dados do servidor. Contate um administrador.");
  1775. }
  1776. }
  1777. else ShowPlayerDialog(playerid, DIALOG_WORKSHOP, DIALOG_STYLE_LIST, RGB_COLOR_GOLD"OFICINA DE TUNING", RGB_COLOR_WHITE"Aumentar Resistência\t\t\t\t\t\t\t\nBlindar Portas\t\t\t\t\t\t\tR$3000\nBlindar Paineis\t\t\t\t\t\t\tR$3000\nBlindar Rodas\t\t\t\t\t\t\tR$3000\nBlindar Luzes\t\t\t\t\t\t\tR$3000\nPintura\t\t\t\t\t\t\tR$2500\nReparar Veículo\t\t\t\t\t\t\tR$100", "Escolher", "Sair");
  1778. }
  1779. case DIALOG_CARS:
  1780. {
  1781. if(response)
  1782. {
  1783. new id;
  1784. if(sscanf(inputtext, "d", id)) SendClientMessage(playerid, COLOR_RED, "Erro: digite o id do seu veículo.");
  1785. else
  1786. {
  1787. if(strcmp(GetPlayerName(playerid), ServerVehicles[id][VehOwner], false) == 0)
  1788. {
  1789. new Float:vPos[3];
  1790. GetVehiclePos(id, vPos[0], vPos[1], vPos[2]);
  1791. SetPlayerMapIcon(playerid, 99, vPos[0], vPos[1], vPos[2], 55, 0xFFFFFFFF, 1);
  1792. PlayerInfo[playerid][pGPS] = id;
  1793. SendClientMessage(playerid, COLOR_GOLD, "Server: seu veículo %s(%d) está localizado no mapa.", VehicleNames[ServerVehicles[id][VehModel] - 400], id);
  1794. }
  1795. else SendClientMessage(playerid, COLOR_RED, "Erro: digite o id do seu veículo.");
  1796. }
  1797. }
  1798. }
  1799. }
  1800. return true;
  1801. }
  1802.  
  1803. // public OnPlayerRequestSpawn(playerid) - Jogador solicita spawn na seleção de classes
  1804. public OnPlayerRequestSpawn(playerid)
  1805. {
  1806. if(!PlayerInfo[playerid][Logged] || PlayerInfo[playerid][pTutorial] > 0)
  1807. return false;
  1808.  
  1809. else
  1810. {
  1811. TextDrawShowForPlayer(playerid, txtDate);
  1812. TextDrawShowForPlayer(playerid, txtModeName);
  1813.  
  1814. if(PlayerInfo[playerid][Registered] == false)
  1815. {
  1816. SetPlayerInterior(playerid, PlayerInfo[playerid][pInterior]);
  1817. SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  1818. SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]+3.5);
  1819. TogglePlayerControllable(playerid, true);
  1820. }
  1821. else
  1822. {
  1823. SetPlayerInterior(playerid, PlayerInfo[playerid][pInterior]);
  1824. SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  1825. TogglePlayerControllable(playerid, 1);
  1826. SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]+2.5);
  1827. }
  1828. }
  1829. return true;
  1830. }
  1831.  
  1832. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  1833. {
  1834. new Float:ppos[4];
  1835. GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
  1836. GetPlayerFacingAngle(playerid, ppos[3]);
  1837.  
  1838. return 1;
  1839. }
  1840.  
  1841. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  1842. {
  1843. #pragma unused playerid
  1844. new panels, doors, lights, tires, szString[200];
  1845. GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  1846. if(ServerVehicles[vehicleid][VehDoorsArmour] == 1) doors = encode_doors(0, 0, 0, 0, 0, 0); // fix all doors //fell off - (4, 4, 4, 4, 0, 0)
  1847. if(ServerVehicles[vehicleid][VehPanelsArmour] == 1) panels = encode_panels(0, 0, 0, 0, 0, 0, 0); // fix all panels //fell off - (3, 3, 3, 3, 3, 3, 3)
  1848. if(ServerVehicles[vehicleid][VehTiresArmour] == 1) tires = encode_tires(0, 0, 0, 0); // fix all tires
  1849. if(ServerVehicles[vehicleid][VehLightsArmour] == 1) lights = encode_lights(0, 0, 0, 0); // fix all lights
  1850. UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  1851. /*
  1852. SQLite VEHICLES
  1853. Health, DoorsArmour, TiresArmour, BonnetArmour e LightsArmour
  1854. */
  1855. GetVehicleHealth(vehicleid, ServerVehicles[vehicleid][VehHealth]);
  1856. format(szString, sizeof szString, "UPDATE Vehicles SET DoorsArmour = %d, LightsArmour = %f, PanelsArmour = %f, TiresArmour = %f, Health = %f WHERE ID = %d", ServerVehicles[vehicleid][VehDoorsArmour], ServerVehicles[vehicleid][VehLightsArmour], ServerVehicles[vehicleid][VehPanelsArmour], ServerVehicles[vehicleid][VehTiresArmour], ServerVehicles[vehicleid][VehHealth], ServerVehicles[vehicleid][VehID]);
  1857. db_query(DataBase, szString);
  1858. if(!db_changes(DataBase))
  1859. printf("SQLite ERROR! (OnVehicleDamageStatusUpdate) Vehicleid: %d, Player: %s", vehicleid, GetPlayerName(playerid));
  1860. return 1;
  1861. }
  1862.  
  1863. encode_tires(tire1, tire2, tire3, tire4) return tire1 | (tire2 << 1) | (tire3 << 2) | (tire4 << 3);
  1864. encode_panels(flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper)
  1865. {
  1866. return flp | (frp << 4) | (rlp << 8) | (rrp << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24);
  1867. }
  1868. encode_doors(bonnet, boot, driver_door, passenger_door, behind_driver_door, behind_passenger_door)
  1869. {
  1870. #pragma unused behind_driver_door
  1871. #pragma unused behind_passenger_door
  1872. return bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24);
  1873. }
  1874. encode_lights(light1, light2, light3, light4)
  1875. {
  1876. return light1 | (light2 << 1) | (light3 << 2) | (light4 << 3);
  1877. }
  1878.  
  1879. public OnPlayerDeath(playerid, killerid, reason)
  1880. {
  1881. GetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]);
  1882. GetPlayerFacingAngle(playerid, PlayerInfo[playerid][pA]);
  1883. return 1;
  1884. }
  1885.  
  1886. public OnPlayerSpawn(playerid)
  1887. {
  1888. SetPlayerPos(playerid, PlayerInfo[playerid][pX], PlayerInfo[playerid][pY], PlayerInfo[playerid][pZ]+2.5);
  1889. SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pA]);
  1890. TogglePlayerControllable(playerid, 1);
  1891. for(new i = 0; i < 13; i++) GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
  1892.  
  1893. return true;
  1894. }
  1895.  
  1896. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  1897. {
  1898. ServerVehicles[vehicleid][VehColor1] = color1;
  1899. ServerVehicles[vehicleid][VehColor2] = color2;
  1900. return true;
  1901. }
  1902.  
  1903. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  1904. {
  1905. ServerVehicles[vehicleid][VehPaintjob] = paintjobid;
  1906. return true;
  1907. }
  1908.  
  1909. public OnVehicleDeath(vehicleid, killerid)
  1910. {
  1911. ServerVehicles[vehicleid][VehStatus] = 1;
  1912. return true;
  1913. }
  1914.  
  1915. public OnVehicleSpawn(vehicleid)
  1916. {
  1917. SetVehiclePos(vehicleid, ServerVehicles[vehicleid][VehX], ServerVehicles[vehicleid][VehY], ServerVehicles[vehicleid][VehZ]);
  1918. SetVehicleZAngle(vehicleid, ServerVehicles[vehicleid][VehA]);
  1919. ChangeVehicleColor(vehicleid, ServerVehicles[vehicleid][VehColor1], ServerVehicles[vehicleid][VehColor2]);
  1920. ChangeVehiclePaintjob(vehicleid, ServerVehicles[vehicleid][VehPaintjob]);
  1921. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehSpoiler]);
  1922. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehHood]);
  1923. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehRoof]);
  1924. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehSideskirt]);
  1925. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehLamps]);
  1926. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehNitro]);
  1927. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehExhaust]);
  1928. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehWheels]);
  1929. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehStereo]);
  1930. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehHydraulics]);
  1931. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehFB]);
  1932. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehRB]);
  1933. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehVR]);
  1934. AddVehicleComponent(vehicleid, ServerVehicles[vehicleid][VehVL]);
  1935. //SetVehicleNumberPlate(vehicleid, ServerVehicles[vehicleid][VehPlate]);
  1936. ServerVehicles[vehicleid][VehStatus] = 0;
  1937. SetVehicleParamsEx(vehicleid, 0, 0, 0, 1, 0, 0, 0);
  1938. return true;
  1939. }
  1940.  
  1941.  
  1942. //-----------------------------------/ Y_Race Sistem
  1943. public OnPlayerFinishRace(playerid, race, position, prize, time)
  1944. {
  1945. new raceid = RaceCreate1[race];
  1946. if(position == 1)
  1947. {
  1948. format(RaceInfo[raceid][Race1Name], 20, "%s", GetPlayerName(playerid));
  1949. GivePlayerMoney(playerid, RaceInfo[raceid][RaceReward]);
  1950. SendClientMessageToAll(COLOR_WHITE, "Race: %s terminou a corrida '%s' em 1st e ganhou $%d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], RaceInfo[raceid][RaceReward]);
  1951. }
  1952. else if(position == 2)
  1953. {
  1954. format(RaceInfo[raceid][Race2Name], 20, "%s", GetPlayerName(playerid));
  1955. GivePlayerMoney(playerid, floatround(RaceInfo[raceid][RaceReward]/2));
  1956. SendClientMessageToAll(COLOR_WHITE, "Race: %s terminou a corrida '%s' em 2nd e ganhou $%d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], floatround(RaceInfo[raceid][RaceReward]/2));
  1957. }
  1958. else if(position == 3)
  1959. {
  1960. format(RaceInfo[raceid][Race3Name], 20, "%s", GetPlayerName(playerid));
  1961. GivePlayerMoney(playerid, floatround(RaceInfo[raceid][RaceReward]/3));
  1962. SendClientMessageToAll(COLOR_WHITE, "Race: %s terminou a corrida '%s' em 3st e ganhou $%d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], floatround(RaceInfo[raceid][RaceReward]/3));
  1963. }
  1964. else if(position >= 4 || position <= 8)
  1965. {
  1966. GivePlayerMoney(playerid, floatround(RaceInfo[raceid][RaceReward]/6));
  1967. SendClientMessageToAll(COLOR_WHITE, "Race: %s terminou a corrida '%s' em %d colocado e ganhou $%d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], position, floatround(RaceInfo[raceid][RaceReward]/6));
  1968. }
  1969. else if(position >= 9)
  1970. {
  1971. GivePlayerMoney(playerid, floatround(RaceInfo[raceid][RaceReward]/9));
  1972. SendClientMessageToAll(COLOR_WHITE, "Race: %s terminou a corrida '%s' em %d colocado e ganhou $%d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], position, floatround(RaceInfo[raceid][RaceReward]/9));
  1973. }
  1974. return true;
  1975. }
  1976.  
  1977. public OnPlayerExitRace(playerid, race)
  1978. {
  1979. new raceid = RaceCreate1[RaceCreate[i]];
  1980. RaceInfo[raceid][RaceCurrent]--;
  1981. PlayerInfo[playerid][pRaceID] = -1;
  1982. SendClientMessageToAll(COLOR_WHITE, "Race: %s saiu da corrida '%s'", GetPlayerName(playerid), RaceInfo[raceid][RaceName]);
  1983. return true;
  1984. }
  1985.  
  1986. /*
  1987. public OnPlayerExitRace(playerid, race)
  1988. {
  1989. //SetVehicleToRespawn(GetPlayerVehicleID(playerid));
  1990. for(new i = 0; i < 100; i++)
  1991. {
  1992. if(race == RaceCreate[i])
  1993. {
  1994. new raceid = RaceCreate1[RaceCreate[i]];
  1995. RaceInfo[raceid][RaceCurrent]--;
  1996. PlayerInfo[playerid][pRaceID] = -1;
  1997. SendClientMessageToAll(COLOR_WHITE, "Race: %s saiu da corrida '%s'", GetPlayerName(playerid), RaceInfo[raceid][RaceName]);
  1998. break;
  1999. }
  2000. }
  2001. return true;
  2002. }
  2003. */
  2004.  
  2005. public OnRaceEnd(race)
  2006. {
  2007. raceid = RaceCreate1[race];
  2008. SendClientMessageToAll(COLOR_GOLD, "Race: a corrida '%s' terminou.", RaceInfo[raceid][RaceName]);
  2009. foreach(Player, i)
  2010. {
  2011. if(PlayerInfo[i][pRaceID] == raceid)
  2012. {
  2013. PlayerInfo[i][pRaceID] = -1;
  2014. }
  2015. }
  2016. format(str, sizeof str, "Corrida: %s 1st: %s 2nd: %s 3rd: %s", RaceInfo[raceid][RaceName], RaceInfo[raceid][Race1Name], RaceInfo[raceid][Race2Name], RaceInfo[raceid][Race3Name]);
  2017. TextDrawSetString(RaceEndInfo2, str);
  2018. TextDrawShowForAll(RaceEndInfo);
  2019. TextDrawShowForAll(RaceEndInfo2);
  2020.  
  2021. format(RaceInfo[raceid][Race1Name], 20, "None");
  2022. format(RaceInfo[raceid][Race2Name], 20, "None");
  2023. format(RaceInfo[raceid][Race3Name], 20, "None");
  2024.  
  2025. RaceInfo[raceid][RaceOpen] = false;
  2026.  
  2027. SetTimerEx("HideTextDraw", 6000, false, "d", 0);
  2028. return true;
  2029. }
  2030.  
  2031. /*
  2032. public OnRaceEnd(race)
  2033. {
  2034. new raceid, str[128];
  2035. for(new k = 0; k < 100; k++)
  2036. {
  2037. if(race == RaceCreate[k])
  2038. {
  2039. raceid = RaceCreate1[RaceCreate[k]];
  2040. SendClientMessageToAll(COLOR_GOLD, "Race: a corrida '%s' terminou.", RaceInfo[raceid][RaceName]);
  2041. foreach(Player, i)
  2042. {
  2043. if(PlayerInfo[i][pRaceID] == raceid)
  2044. {
  2045. PlayerInfo[i][pRaceID] = -1;
  2046. }
  2047. }
  2048. break;
  2049. }
  2050. }
  2051.  
  2052. format(str, sizeof str, "Corrida: %s 1st: %s 2nd: %s 3rd: %s", RaceInfo[raceid][RaceName], RaceInfo[raceid][Race1Name], RaceInfo[raceid][Race2Name], RaceInfo[raceid][Race3Name]);
  2053. TextDrawSetString(RaceEndInfo2, str);
  2054. TextDrawShowForAll(RaceEndInfo);
  2055. TextDrawShowForAll(RaceEndInfo2);
  2056.  
  2057. format(RaceInfo[raceid][Race1Name], 20, "None");
  2058. format(RaceInfo[raceid][Race2Name], 20, "None");
  2059. format(RaceInfo[raceid][Race3Name], 20, "None");
  2060.  
  2061. RaceInfo[raceid][RaceOpen] = false;
  2062.  
  2063. SetTimerEx("HideTextDraw", 6000, false, "d", 0);
  2064. return true;
  2065. }
  2066. */
  2067.  
  2068. public StartRace(race)
  2069. {
  2070. new raceid = RaceCreate1[race];
  2071. if(RaceInfo[raceid][RaceCurrent] >= 1)
  2072. {
  2073. SendClientMessageToAll(COLOR_GOLD, "Race: a corrida '%s' vai começar. Preparados?", RaceInfo[raceid][RaceName]);
  2074. Race_Start(RaceCreate[k]);
  2075. RaceInfo[raceid][RaceOpen] = true;
  2076. }
  2077. else
  2078. {
  2079. RaceInfo[raceid][RaceOpen] = false;
  2080. RaceInfo[raceid][RaceCurrent] = 0;
  2081. RaceInfo[raceid][RaceTotal] = 0;
  2082. foreach(Player, i)
  2083. {
  2084. if(PlayerInfo[i][pRaceID] == raceid)
  2085. {
  2086. PlayerInfo[i][pRaceID] = -1;
  2087. Race_SetPlayer(race, i, false);
  2088. }
  2089. }
  2090. }
  2091. }
  2092.  
  2093. /*
  2094. public StartRace(race)
  2095. {
  2096. for(new k = 0; k < 100; k++)
  2097. {
  2098. if(race == RaceCreate[k])
  2099. {
  2100. new raceid = RaceCreate1[RaceCreate[k]];
  2101. if(RaceInfo[raceid][RaceCurrent] >= 1)
  2102. {
  2103. SendClientMessageToAll(COLOR_GOLD, "Race: a corrida '%s' vai começar. Preparados?", RaceInfo[raceid][RaceName]);
  2104. Race_Start(RaceCreate[k]);
  2105. }
  2106. else
  2107. {
  2108. RaceInfo[race][RaceOpen] = false;
  2109. RaceInfo[race][RaceCurrent] = 0;
  2110. RaceInfo[race][RaceTotal] = 0;
  2111. foreach(Player, i)
  2112. {
  2113. if(PlayerInfo[i][pRaceID] == race)
  2114. {
  2115. PlayerInfo[i][pRaceID] = -1;
  2116. Race_SetPlayer(race, i, false);
  2117. }
  2118. }
  2119. }
  2120. break;
  2121. }
  2122. }
  2123. return true;
  2124. }
  2125. */
  2126.  
  2127. public OnVehicleStreamIn(vehicleid, forplayerid)
  2128. {
  2129. if(strcmp(ServerVehicles[vehicleid][VehOwner], GetPlayerName(forplayerid), false) == 0)
  2130. {
  2131. SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, 0);
  2132. }
  2133. else
  2134. {
  2135. if(ServerVehicles[vehicleid][VehLocked] == true) SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, 1);
  2136. else if(ServerVehicles[vehicleid][VehLocked] == false) SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, 0);
  2137. }
  2138. return true;
  2139. }
  2140.  
  2141.  
  2142.  
  2143. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  2144. {
  2145. return true;
  2146. }
  2147.  
  2148. forward HideTextDraw(textid);
  2149. public HideTextDraw(textid)
  2150. {
  2151. if(textid == 1)
  2152. {
  2153. TextDrawHideForAll(StartRaceTxt);
  2154. }
  2155. else if(textid == 0)
  2156. {
  2157. TextDrawHideForAll(RaceEndInfo);
  2158. TextDrawHideForAll(RaceEndInfo2);
  2159. }
  2160. }
  2161.  
  2162. //-----------------------------------/ Comandos
  2163.  
  2164. /*
  2165. zcmd:createrace(playerid, params[])
  2166. {
  2167. if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, COLOR_RED, "* Você precisa ser administrador ou ter autorização.");
  2168. else if(PlayerInfo[playerid][CRaceStatus] > 0) SendClientMessage(playerid, COLOR_RED, "* Você já está criando uma corrida.");
  2169. else
  2170. {
  2171. PlayerInfo[playerid][CRaceStatus] = 1;
  2172. ShowPlayerDialog(playerid, DialogRaceType, 2, "<SA Race> Qual o tipo de corrida?", "Ponto a Ponto\nConvencional", "Avançar", "Cancelar");
  2173. }
  2174. return true;
  2175. }
  2176. */
  2177.  
  2178.  
  2179. zcmd:admcmds(playerid, params[])
  2180. {
  2181. if(!IsPlayerAdmin(playerid))
  2182. return false;
  2183. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"COMANDOS", sz_CmdAdmins, "OK", "");
  2184. return true;
  2185. }
  2186.  
  2187. zcmd:tutorial(playerid, params[])
  2188. {
  2189. new sz_Dialog[] = #RGB_COLOR_GOLD"REGRAS DO SERVIDOR\n\n\
  2190. "RGB_COLOR_WHITE"1. Proibido o uso de qualquer tipo de cheater;\n\
  2191. 2. Proibido se aproveitar de qualquer bug do gamemode;\n\
  2192. 3. Proibido ofensas a outros jogadores;\n\
  2193. 4. Proibido deixar veículos no meio da rua;\n\
  2194. 5. ...";
  2195. PlayerInfo[playerid][pTutorial] = 1;
  2196. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"TUTORIAL", sz_Dialog, "PROX. PÁG", "");
  2197. return true;
  2198. }
  2199.  
  2200.  
  2201.  
  2202. zcmd:creditos(playerid, params[])
  2203. {
  2204. new sz_Dialog[] = RGB_COLOR_GOLD"\t\t\tCRÉDITOS DO GAMEMODE\n\n\
  2205. "RGB_COLOR_WHITE"Roger Costa - Programador e Proprietário\n\
  2206. Paulo Mu - Programador e Proprietário\n\
  2207. Felipe (Play 4 Life RPG) - Garoto que testa o mode com a gente -q\n\
  2208. Wagner Bender - Emo que testa o mode com a gente também -q";
  2209.  
  2210. ShowPlayerDialog(playerid, DIALOG_TEXT_NO_EFFECT, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"CRÉDITOS", sz_Dialog, "OK", "");
  2211. return true;
  2212. }
  2213.  
  2214. zcmd:reportar(playerid, params[])
  2215. {
  2216. new report[50], admins;
  2217. if(sscanf(params, "s[50]", report)) SendClientMessage(playerid, COLOR_RED, "Erro: use '/reportar [mensagem]'");
  2218. else
  2219. {
  2220. foreach(Player, i)
  2221. {
  2222. if(IsPlayerAdmin(i))
  2223. {
  2224. admins++;
  2225. GameTextForPlayer(i, "~w~~h~~h~NOVO REPORT~w~OLHE O CHAT", 3000, 3);
  2226. PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2227. SendClientMessageEx(i, -1, "[REPORT] %s(id%d): %s", GetPlayerNameEx(playerid), playerid, report);
  2228. }
  2229. }
  2230. if(admins == 0) SendClientMessage(playerid, COLOR_RED, "Erro: não há nenhum administrador online.");
  2231. else SendClientMessage(playerid, COLOR_GREEN, "Server: seu report foi enviado com sucesso!");
  2232. }
  2233.  
  2234. return true;
  2235. }
  2236.  
  2237. // zcmd:ajuda(playerid, params[]) - Mostra um índice de ajuda para o jogador
  2238. zcmd:ajuda(playerid, params[])
  2239. {
  2240. return ShowPlayerDialog(playerid, DIALOG_HELP, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"AJUDA", g_szHelpDialog, "FECHAR", ""), true;
  2241. }
  2242.  
  2243. // zcmd:comandos(playerid, params[]) - Mostra a lista de comandos do servidor
  2244. zcmd:comandos(playerid, params[])
  2245. {
  2246. strcat(g_szCommandsDialog, g_szCommandsDialog1);
  2247. return ShowPlayerDialog(playerid, DIALOG_COMMANDS, DIALOG_STYLE_MSGBOX, RGB_COLOR_GOLD"COMANDOS", g_szCommandsDialog, "FECHAR", ""), true;
  2248. }
  2249.  
  2250. // zcmd:comandos(playerid, params[]) - Comete suicídio
  2251. zcmd:kill(playerid, params[])
  2252. {
  2253. SendClientMessageToAll(COLOR_GRAY, "Jogador: %s se suicidou. (/kill)", GetPlayerName(playerid));
  2254.  
  2255. SetPlayerHealth(playerid, 0.0);
  2256.  
  2257. return true;
  2258. }
  2259.  
  2260. zcmd:race(playerid, params[])
  2261. {
  2262. new raceid;
  2263. if(PlayerInfo[playerid][pRaceID] > -1) SendClientMessage(playerid, COLOR_RED, "Erro: você já está em uma corrida.");
  2264. else if(sscanf(params, "d", raceid)) SendClientMessage(playerid, COLOR_RED, "Erro: use '/race id'");
  2265. else if(!RaceInfo[raceid][RaceOpen]) SendClientMessage(playerid, COLOR_RED, "Erro: essa corrida não está aberta.");
  2266. else if(RaceInfo[raceid][RaceCurrent] >= 20) SendClientMessage(playerid, COLOR_RED, "Erro: essa corrida já está cheia.");
  2267. else if(PlayerInfo[playerid][pDM] > 0) SendClientMessage(playerid, COLOR_RED, "Erro: você está em um deathmatch.");
  2268. else
  2269. {
  2270. RaceInfo[raceid][RaceTotal]++;
  2271. RaceInfo[raceid][RaceCurrent]++;
  2272. PlayerInfo[playerid][pRaceID] = raceid;
  2273. Race_SetPlayer(RaceCreate[raceid], playerid, true);
  2274. SendClientMessageToAll(COLOR_GOLD, "Race: %s entrou na corrida '%s'. Para entrar, digite /race %d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], raceid);
  2275. }
  2276. return true;
  2277. }
  2278.  
  2279. zcmd:exit(playerid, params[])
  2280. {
  2281. if(!Race_GetPlayerRace(playerid)) SendClientMessage(playerid, COLOR_RED, "Erro: você não está em uma corrida.");
  2282. else
  2283. {
  2284. Race_SetPlayer(Race_GetPlayerRace(playerid), playerid, false);
  2285. }
  2286. return true;
  2287. }
  2288.  
  2289. zcmd:openrace(playerid, params[])
  2290. {
  2291. new raceid;
  2292. if(PlayerInfo[playerid][pRaceID] > -1) SendClientMessage(playerid, COLOR_RED, "Erro: você já está em uma corrida.");
  2293. else if(sscanf(params, "d", raceid)) SendClientMessage(playerid, COLOR_RED, "Erro: use 'openrace id'");
  2294. else if(RaceInfo[raceid][RaceOpen]) SendClientMessage(playerid, COLOR_RED, "Erro: essa corrida já está aberta.");
  2295. else
  2296. {
  2297. new str[128];
  2298. RaceInfo[raceid][RaceOpen] = true;
  2299. SendClientMessageToAll(COLOR_GOLD, "Race: %s abriu a corrida '%s'. Para entrar, digite /race %d", GetPlayerName(playerid), RaceInfo[raceid][RaceName], raceid);
  2300. SendClientMessageToAll(COLOR_GOLD, "Race: a corrida se inicia em 1 minuto!");
  2301.  
  2302. PlayAudioForAll(1057);
  2303.  
  2304. //---- CreateRace
  2305.  
  2306. RaceCreate[raceid] = Race_Create();
  2307. RaceCreate1[RaceCreate[raceid]] = raceid;
  2308. //---- Laps
  2309. Race_SetLaps(RaceCreate[raceid], RaceInfo[raceid][RaceLaps]);
  2310. //---- Price
  2311. Race_SetEntry(RaceCreate[raceid], 0);
  2312.  
  2313. //---- Checkpoints
  2314. for(new j = 0; j < 50; j++)
  2315. {
  2316. if(strlen(RaceCPPos[raceid][j]) > 0)
  2317. {
  2318. new Float:r_pos[3];
  2319. sscanf(RaceCPPos[raceid][j], "fff", r_pos[0], r_pos[1], r_pos[2]);
  2320. Race_AddCheckpoint(RaceCreate[raceid], r_pos[0], r_pos[1], r_pos[2]);
  2321. }
  2322. }
  2323. //---- Grid
  2324. for(new j = 0; j < 20; j++)
  2325. {
  2326. if(strlen(RaceSTPos[raceid][j]) > 0)
  2327. {
  2328. new Float:r_pos[4];
  2329. sscanf(RaceSTPos[raceid][j], "ffff", r_pos[0], r_pos[1], r_pos[2], r_pos[3]);
  2330. Race_AddStart(RaceCreate[raceid], r_pos[0], r_pos[1], r_pos[2], r_pos[3]);
  2331. }
  2332. }
  2333. TextDrawShowForAll(StartRaceTxt);
  2334. format(str, sizeof str, "~g~A corrida ~w~%s ~g~foi aberta~n~Digite ~w~/race %d ~g~para entrar!", RaceInfo[raceid][RaceName], raceid);
  2335. TextDrawSetString(StartRaceTxt, str);
  2336. SetTimerEx("HideTextDraw", 6000, false, "d", 1);
  2337. SetTimerEx("StartRace", 1000*20, false, "d", RaceCreate[raceid]);
  2338. PlayAudioForAll(1057);
  2339. }
  2340. return true;
  2341. }
  2342.  
  2343. // zcmd:dardinheiro(playerid, params[]) - Dá a quantia de dinheiro para o jogador
  2344. zcmd:dardinheiro(playerid, params[])
  2345. {
  2346. if(!IsPlayerAdmin(playerid))
  2347. return false;
  2348.  
  2349. new iPlayerID;
  2350. new iAmount;
  2351.  
  2352. if(sscanf(params, "ui", iPlayerID, iAmount))
  2353. return SendClientMessage(playerid, COLOR_PURPLE, "Erro: use '/dardinheiro [id/jogador] [quantidade]'.");
  2354.  
  2355. if(!IsPlayerConnected(iPlayerID))
  2356. return SendClientMessage(playerid, COLOR_RED, "Erro: jogador desconectado/inválido.");
  2357.  
  2358. SendClientMessageToAll(COLOR_BLUE, "Admin: %s deu $%d à %s.", GetPlayerName(playerid), iAmount, GetPlayerName(iPlayerID));
  2359.  
  2360. GivePlayerMoney(iPlayerID, iAmount);
  2361.  
  2362. return true;
  2363. }
  2364.  
  2365. // zcmd:setardinheiro(playerid, params[]) - Seta o dinheiro de um jogador para o valor especificado
  2366. zcmd:setardinheiro(playerid, params[])
  2367. {
  2368. if(!IsPlayerAdmin(playerid))
  2369. return false;
  2370.  
  2371. new iPlayerID;
  2372. new iAmount;
  2373.  
  2374. if(sscanf(params, "ui", iPlayerID, iAmount))
  2375. return SendClientMessage(playerid, COLOR_PURPLE, "Erro: use '/setardinheiro [id/jogador] [quantia]'.");
  2376.  
  2377. if(!IsPlayerConnected(iPlayerID))
  2378. return SendClientMessage(playerid, COLOR_RED, "Erro: jogador desconectado/inválido.");
  2379.  
  2380. SendClientMessageToAll(COLOR_BLUE, "Admin: %s setou o dinheiro de %s para $%d.", GetPlayerName(playerid), GetPlayerName(iPlayerID), iAmount);
  2381.  
  2382. SetPlayerMoney(iPlayerID, iAmount);
  2383.  
  2384. return true;
  2385. }
  2386.  
  2387. // zcmd:setarcolete(playerid, params[]) - Seta o colete de um jogador para o valor especificado
  2388. zcmd:setarcolete(playerid, params[])
  2389. {
  2390. if(!IsPlayerAdmin(playerid))
  2391. return false;
  2392.  
  2393. new iPlayerID;
  2394. new Float:fArmour;
  2395.  
  2396. if(sscanf(params, "uf", iPlayerID, fArmour))
  2397. return SendClientMessage(playerid, COLOR_PURPLE, "Erro: use '/setarcolete [id/jogador] [colete (0-100)]'.");
  2398.  
  2399. if(!IsPlayerConnected(iPlayerID))
  2400. return SendClientMessage(playerid, COLOR_RED, "Erro: jogador desconectado/inválido.");
  2401.  
  2402. if(fArmour < 0.0 || fArmour > 100.0)
  2403. return SendClientMessage(playerid, COLOR_RED, "Erro: digite um valor de 0 a 100.");
  2404.  
  2405. SetPlayerArmour(iPlayerID, fArmour);
  2406.  
  2407. SendClientMessageToAll(COLOR_BLUE, "Admin: %s setou o colete de %s para %.1f.", GetPlayerName(playerid), GetPlayerName(iPlayerID), fArmour);
  2408.  
  2409. return true;
  2410. }
  2411.  
  2412. // zcmd:setarvida(playerid, params[]) - Seta a vida de um jogador para o valor especificado
  2413. zcmd:setarvida(playerid, params[])
  2414. {
  2415. if(!IsPlayerAdmin(playerid))
  2416. return false;
  2417.  
  2418. new iPlayerID;
  2419. new Float:fHealth;
  2420.  
  2421. if(sscanf(params, "uf", iPlayerID, fHealth))
  2422. return SendClientMessage(playerid, COLOR_PURPLE, "Erro: use '/setarvida [id/jogador] [vida (0-100)]'.");
  2423.  
  2424. if(!IsPlayerConnected(iPlayerID))
  2425. return SendClientMessage(playerid, COLOR_RED, "Erro: jogador desconectado/inválido.");
  2426.  
  2427. if(fHealth < 0.0 || fHealth > 100.0)
  2428. return SendClientMessage(playerid, COLOR_RED, "Erro: digite um valor de 0 a 100.");
  2429.  
  2430. SetPlayerHealth(iPlayerID, fHealth);
  2431.  
  2432. SendClientMessageToAll(COLOR_BLUE, "Admin: %s setou a vida do(a) %s para %.1f.", GetPlayerName(playerid), GetPlayerName(iPlayerID), fHealth);
  2433.  
  2434. return true;
  2435. }
  2436.  
  2437. zcmd:motor(playerid, params[])
  2438. {
  2439. if(IsPlayerInAnyVehicle(playerid) && GetPlayerVehicleSeat(playerid) == 0)
  2440. ToggleVehicleEngine(playerid, GetPlayerVehicleID(playerid));
  2441. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa estar de motorista pra ligar o veículo.");
  2442. return true;
  2443. }
  2444.  
  2445. zcmd:lights(playerid, params[])
  2446. {
  2447. if(IsPlayerInAnyVehicle(playerid) && GetPlayerVehicleSeat(playerid) == 0)
  2448. ToggleVehicleLights(playerid, GetPlayerVehicleID(playerid));
  2449. else SendClientMessage(playerid, COLOR_RED, "Erro: você precisa estar de motorista pra acender os faróis o veículo.");
  2450. return true;
  2451. }
  2452.  
  2453. /*zcmd:plate(playerid, params[])
  2454. {
  2455. new pstr[10];
  2456. if(!IsPlayerInAnyVehicle(playerid) || GetPlayerVehicleSeat(playerid) != 0) SendClientMessage(playerid, COLOR_RED, "* Modafoca, use /plate <texto>");
  2457. else if(sscanf(params, "s[10]", pstr)) SendClientMessage(playerid, COLOR_RED, "* Modafoca, use /plate <texto>");
  2458. else if(strlen(pstr) < 1 || strlen(pstr) > 8) SendClientMessage(playerid, COLOR_RED, "* No máximo 8 digitos.");
  2459. else
  2460. {
  2461. new vehID = GetPlayerVehicleID(playerid), str[100];
  2462. SetVehicleNumberPlate(vehID, pstr);
  2463. format(ServerVehicles[vehID][VehPlate], 10, pstr);
  2464. format(str, sizeof str, "* Placa alterada (%s)", ServerVehicles[vehID][VehPlate]);
  2465. SendClientMessage(playerid, COLOR_GOLD, str);
  2466. ServerVehicles[vehID][VehStatus] = 1;
  2467. GetVehiclePos(vehID, ServerVehicles[vehID][VehX], ServerVehicles[vehID][VehY], ServerVehicles[vehID][VehZ]);
  2468. GetVehicleZAngle(vehID, ServerVehicles[vehID][VehA]);
  2469. //GetVehicleParamsEx(vehID, ServerVehicles[vehID][VehEngine], ServerVehicles[vehID][VehLights], ServerVehicles[vehID][VehAlarm], ServerVehicles[vehID][VehDoors], ServerVehicles[vehID][VehBonnet], ServerVehicles[vehID][VehBoot], ServerVehicles[vehID][VehObjective]);
  2470. SetVehicleToRespawn(vehID);
  2471. }
  2472. return true;
  2473. }
  2474. */
  2475.  
  2476. zcmd:destrancar(playerid, params[])
  2477. {
  2478. if(!IsPlayerInAnyVehicle(playerid)) SendClientMessage(playerid, COLOR_RED, "Erro: você precisa estar em um veículo!");
  2479. else if(ServerVehicles[GetPlayerVehicleID(playerid)][VehOwnerID] != PlayerInfo[playerid][pID]) SendClientMessage(playerid, COLOR_RED, "Erro: esse carro não é seu para destrancá-lo!");
  2480. {
  2481. SendClientMessage(playerid, COLOR_GOLD, "Server: veículo destrancado!");
  2482. ServerVehicles[GetPlayerVehicleID(playerid)][VehLocked] = false;
  2483. foreach(new i : Player)
  2484. {
  2485. if(i != playerid)
  2486. {
  2487. SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid), i, 0, 0);
  2488. }
  2489. }
  2490. }
  2491. return true;
  2492. }
  2493.  
  2494. zcmd:trancar(playerid, params[])
  2495. {
  2496. if(!IsPlayerInAnyVehicle(playerid)) SendClientMessage(playerid, COLOR_RED, "Erro: você precisa estar em um veículo!");
  2497. else if(ServerVehicles[GetPlayerVehicleID(playerid)][VehOwnerID] != PlayerInfo[playerid][pID]) SendClientMessage(playerid, COLOR_RED, "Erro: esse carro não é seu para trancá-lo!");
  2498. {
  2499. SendClientMessage(playerid, COLOR_GOLD, "Server: veículo trancado!");
  2500. ServerVehicles[GetPlayerVehicleID(playerid)][VehLocked] = true;
  2501. foreach(new i : Player)
  2502. {
  2503. if(i != playerid)
  2504. {
  2505. SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid), i, 0, 1);
  2506. }
  2507. }
  2508. }
  2509. return true;
  2510. }
  2511.  
  2512.  
  2513. zcmd:mycars(playerid, params[])
  2514. {
  2515. new str[500];
  2516. if(PlayerInfo[playerid][pGPS] != -1)
  2517. {
  2518. PlayerInfo[playerid][pGPS] = -1;
  2519. RemovePlayerMapIcon(playerid, 99);
  2520. return true;
  2521. }
  2522. for(new i = 1; i < 500; i++)
  2523. {
  2524. if(VehCreate[i] != -1)
  2525. {
  2526. if(ServerVehicles[i][VehOwnerID] == PlayerInfo[playerid][pID])
  2527. {
  2528. new str2[128];
  2529. format(str2, sizeof str2, "{FFFFFF}%s (ID: %d)\n", VehicleNames[ServerVehicles[i][VehModel] - 400], i);
  2530. strcat(str, str2);
  2531. }
  2532. }
  2533. }
  2534. if(strlen(str))
  2535. {
  2536. strcat(str, "{333333}Selecione o ID do seu carro para localizar:");
  2537. ShowPlayerDialog(playerid, DIALOG_CARS, DIALOG_STYLE_INPUT, RGB_COLOR_GOLD"SEUS VEÍCULOS", str, "Localizar", "");
  2538. }
  2539. else SendClientMessage(playerid, COLOR_RED, "Erro: você não tem nenhum carro pra localizar, pobre!");
  2540. return true;
  2541. }
  2542.  
  2543. zcmd:skin(playerid, params[])
  2544. {
  2545. if(sscanf(params, "d", PlayerInfo[playerid][pSkin])) SendClientMessage(playerid, COLOR_PURPLE, "Erro: use '/skin [id]'");
  2546. else
  2547. {
  2548. SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  2549. SendClientMessage(playerid, COLOR_GOLD, "Server: sua skin foi alterada.");
  2550. }
  2551. return true;
  2552. }
  2553.  
  2554. zcmd:tuning(playerid, params[])
  2555. {
  2556. if(!IsPlayerInAnyVehicle(playerid)) SendClientMessage(playerid, COLOR_RED, "Erro: você não está em um veículo!");
  2557. else if(strcmp(ServerVehicles[GetPlayerVehicleID(playerid)][VehOwner], GetPlayerName(playerid), false) != 0) SendClientMessage(playerid, COLOR_RED, "Erro: esse carro não é seu para tuná-lo.");
  2558. else if(!IsPlayerInRangeOfPoint(playerid, 10.0, 1523.7592,-1470.9032,9.5000)) SendClientMessage(playerid, COLOR_RED, "Erro: você não está na garagem de tuning!");
  2559. else
  2560. {
  2561. ShowPlayerDialog(playerid, DIALOG_WORKSHOP, DIALOG_STYLE_LIST, RGB_COLOR_GOLD"OFICINA DE TUNING", RGB_COLOR_WHITE"Aumentar Resistência\nBlindar Portas\t\t\tR$3000\nBlindar Paineis\t\t\tR$3000\nBlindar Rodas\t\t\tR$3000\nBlindar Luzes\t\t\tR$3000\nPintura\t\t\tR$2500\nReparar Veículo\t\t\tR$100", "Escolher", "Sair");
  2562. }
  2563. return true;
  2564. }
  2565.  
  2566. zcmd:money(playerid, params[])
  2567. {
  2568. GivePlayerMoney(playerid, 500000);
  2569. return true;
  2570. }
  2571.  
  2572.  
  2573. public AntiCheat()
  2574. {
  2575. foreach(new i : Player)
  2576. {
  2577. //SendClientMessage(i, -1, "[DEBUG] GetPlayerMoney(%d) = $%d | PlayerInfo[%d][playerMoney] = $%d", i, GetPlayerMoney(i), i, PlayerInfo[i][playerMoney]);
  2578.  
  2579. if(GetPlayerMoney(i) > PlayerInfo[i][playermoney])
  2580. {
  2581. SendClientMessageToAll(COLOR_RED, "AntiCheater: %s usou money hack!", GetPlayerName(i));
  2582. // BAN
  2583. ResetPlayerMoney(i);
  2584. GivePlayerMoney(i, PlayerInfo[i][playermoney]);
  2585. }
  2586. else
  2587. PlayerInfo[i][playermoney] = GetPlayerMoney(i);
  2588. }
  2589.  
  2590. return true;
  2591. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement