Guest User

SA-MP Debug Default Filterscript

a guest
Oct 10th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 57.91 KB | None | 0 0
  1. /* SA:MP PAWN Debug -
  2.  *  Debugging filterscript used
  3.  *  for creation of gamemode.
  4.  *
  5.  *  Simon Campbell
  6.  *  10/03/2007, 6:31pm
  7.  *
  8.  *  17/11/2011
  9.  *    Updated to 0.5d which supports SA:MP 0.3d
  10. */
  11.  
  12. //==============================================================================
  13.  
  14. #include <a_samp>
  15.  
  16. #undef KEY_UP
  17. #undef KEY_DOWN
  18. #undef KEY_LEFT
  19. #undef KEY_RIGHT
  20.  
  21. #define KEY_UP      65408
  22. #define KEY_DOWN    128
  23. #define KEY_LEFT    65408
  24. #define KEY_RIGHT   128
  25.  
  26. #define DEBUG_VERSION   "0.5d"
  27.  
  28. #define SKIN_SELECT     true
  29. #define VEHI_SELECT     true
  30. #define WORL_SELECT     true
  31. #define CAME_SELECT     true
  32. #define OBJE_SELECT     true
  33.  
  34. #define MISCEL_CMDS     true
  35. #define ADMINS_ONLY     false
  36.  
  37. #define SKIN_SEL_STAT   1
  38. #define VEHI_SEL_STAT   2
  39. #define WORL_SEL_STAT   3
  40. #define CAME_SEL_STAT   4
  41. #define OBJE_SEL_STAT   5
  42.  
  43. #define COLOR_RED       0xFF4040FF
  44. #define COLOR_GREEN     0x40FF40FF
  45. #define COLOR_BLUE      0x4040FFFF
  46.  
  47. #define COLOR_CYAN      0x40FFFFFF
  48. #define COLOR_PINK      0xFF40FFFF
  49. #define COLOR_YELLOW    0xFFFF40FF
  50.  
  51. #define COLOR_WHITE     0xFFFFFFFF
  52. #define COLOR_BLACK     0x000000FF
  53. #define COLOR_NONE      0x00000000
  54.  
  55. #define MIN_SKIN_ID     0
  56. #define MAX_SKIN_ID     299
  57.  
  58. #define MIN_VEHI_ID     400
  59. #define MAX_VEHI_ID     611
  60.  
  61. #define MIN_TIME_ID     0
  62. #define MAX_TIME_ID     23
  63.  
  64. #define MIN_WEAT_ID     0
  65. #define MAX_WEAT_ID     45
  66.  
  67. #define MIN_OBJE_ID     615
  68. #define MAX_OBJE_ID     13563
  69.  
  70. #define DEFAULT_GRA     0.008
  71.  
  72. #define VEHI_DIS        5.0
  73. #define OBJE_DIS        10.0
  74.  
  75. #define CMODE_A         0
  76. #define CMODE_B         1
  77.  
  78. #define O_MODE_SELECTOR 0
  79. #define O_MODE_MOVER    1
  80. #define O_MODE_ROTATOR  2
  81.  
  82. #define PI              3.14159265
  83.  
  84. #define CAMERA_TIME     40
  85.  
  86. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  87.  
  88. //==============================================================================
  89.  
  90. new gPlayerStatus[MAX_PLAYERS]; // Player Status
  91. new gPlayerTimers[MAX_PLAYERS]; // Player TimerID's for keypresses
  92. new gWorldStatus[3] =  {12, 4}; // Time, Weather
  93.  
  94. new curPlayerSkin[MAX_PLAYERS]              = {MIN_SKIN_ID, ...}; // Current Player Skin ID
  95. new curPlayerVehM[MAX_PLAYERS]              = {MIN_VEHI_ID, ...}; // Current Player Vehicle ID
  96. new curPlayerVehI[MAX_PLAYERS]              = {-1, ...};
  97.  
  98. enum E_OBJECT
  99. {
  100.     OBJ_MOD,
  101.     OBJ_MDL,
  102.     Float:OBJ_X,
  103.     Float:OBJ_Y,
  104.     Float:OBJ_Z,
  105.     Float:OBJ_RX,
  106.     Float:OBJ_RY,
  107.     Float:OBJ_RZ
  108. }
  109.  
  110. enum E_OBJ_RATE
  111. {
  112.     Float:OBJ_RATE_ROT,
  113.     Float:OBJ_RATE_MOVE
  114. }
  115.  
  116. new pObjectRate[ MAX_PLAYERS ][ E_OBJ_RATE ];
  117. new curPlayerObjM[ MAX_PLAYERS ][ E_OBJECT ];
  118. new curPlayerObjI[ MAX_PLAYERS ]                = {-1, ...};
  119.  
  120. enum P_CAMERA_D {
  121.     CMODE,
  122.     Float:RATE,
  123.     Float:CPOS_X,
  124.     Float:CPOS_Y,
  125.     Float:CPOS_Z,
  126.     Float:CLOO_X,
  127.     Float:CLOO_Y,
  128.     Float:CLOO_Z
  129. };
  130.  
  131. new curPlayerCamD[MAX_PLAYERS][P_CAMERA_D];
  132.  
  133. enum CURVEHICLE {
  134.     bool:spawn,
  135.     vmodel,
  136.     vInt
  137. };
  138.  
  139. new curServerVehP[MAX_VEHICLES][CURVEHICLE];
  140.  
  141. new aSelNames[5][] = {          // Menu selection names
  142.     {"SkinSelect"},
  143.     {"VehicleSelect"},
  144.     {"WeatherSelect"},
  145.     {"CameraSelect"},
  146.     {"ObjectSelect"}
  147. };
  148.  
  149. new aWeaponNames[][32] = {
  150.     {"Unarmed (Fist)"}, // 0
  151.     {"Brass Knuckles"}, // 1
  152.     {"Golf Club"}, // 2
  153.     {"Night Stick"}, // 3
  154.     {"Knife"}, // 4
  155.     {"Baseball Bat"}, // 5
  156.     {"Shovel"}, // 6
  157.     {"Pool Cue"}, // 7
  158.     {"Katana"}, // 8
  159.     {"Chainsaw"}, // 9
  160.     {"Purple Dildo"}, // 10
  161.     {"Big White Vibrator"}, // 11
  162.     {"Medium White Vibrator"}, // 12
  163.     {"Small White Vibrator"}, // 13
  164.     {"Flowers"}, // 14
  165.     {"Cane"}, // 15
  166.     {"Grenade"}, // 16
  167.     {"Teargas"}, // 17
  168.     {"Molotov"}, // 18
  169.     {" "}, // 19
  170.     {" "}, // 20
  171.     {" "}, // 21
  172.     {"Colt 45"}, // 22
  173.     {"Colt 45 (Silenced)"}, // 23
  174.     {"Desert Eagle"}, // 24
  175.     {"Normal Shotgun"}, // 25
  176.     {"Sawnoff Shotgun"}, // 26
  177.     {"Combat Shotgun"}, // 27
  178.     {"Micro Uzi (Mac 10)"}, // 28
  179.     {"MP5"}, // 29
  180.     {"AK47"}, // 30
  181.     {"M4"}, // 31
  182.     {"Tec9"}, // 32
  183.     {"Country Rifle"}, // 33
  184.     {"Sniper Rifle"}, // 34
  185.     {"Rocket Launcher"}, // 35
  186.     {"Heat-Seeking Rocket Launcher"}, // 36
  187.     {"Flamethrower"}, // 37
  188.     {"Minigun"}, // 38
  189.     {"Satchel Charge"}, // 39
  190.     {"Detonator"}, // 40
  191.     {"Spray Can"}, // 41
  192.     {"Fire Extinguisher"}, // 42
  193.     {"Camera"}, // 43
  194.     {"Night Vision Goggles"}, // 44
  195.     {"Infrared Vision Goggles"}, // 45
  196.     {"Parachute"}, // 46
  197.     {"Fake Pistol"} // 47
  198. };
  199.  
  200.  
  201. new aVehicleNames[212][] = {    // Vehicle Names - Betamaster
  202.     {"Landstalker"},
  203.     {"Bravura"},
  204.     {"Buffalo"},
  205.     {"Linerunner"},
  206.     {"Perrenial"},
  207.     {"Sentinel"},
  208.     {"Dumper"},
  209.     {"Firetruck"},
  210.     {"Trashmaster"},
  211.     {"Stretch"},
  212.     {"Manana"},
  213.     {"Infernus"},
  214.     {"Voodoo"},
  215.     {"Pony"},
  216.     {"Mule"},
  217.     {"Cheetah"},
  218.     {"Ambulance"},
  219.     {"Leviathan"},
  220.     {"Moonbeam"},
  221.     {"Esperanto"},
  222.     {"Taxi"},
  223.     {"Washington"},
  224.     {"Bobcat"},
  225.     {"Mr Whoopee"},
  226.     {"BF Injection"},
  227.     {"Hunter"},
  228.     {"Premier"},
  229.     {"Enforcer"},
  230.     {"Securicar"},
  231.     {"Banshee"},
  232.     {"Predator"},
  233.     {"Bus"},
  234.     {"Rhino"},
  235.     {"Barracks"},
  236.     {"Hotknife"},
  237.     {"Trailer 1"}, //artict1
  238.     {"Previon"},
  239.     {"Coach"},
  240.     {"Cabbie"},
  241.     {"Stallion"},
  242.     {"Rumpo"},
  243.     {"RC Bandit"},
  244.     {"Romero"},
  245.     {"Packer"},
  246.     {"Monster"},
  247.     {"Admiral"},
  248.     {"Squalo"},
  249.     {"Seasparrow"},
  250.     {"Pizzaboy"},
  251.     {"Tram"},
  252.     {"Trailer 2"}, //artict2
  253.     {"Turismo"},
  254.     {"Speeder"},
  255.     {"Reefer"},
  256.     {"Tropic"},
  257.     {"Flatbed"},
  258.     {"Yankee"},
  259.     {"Caddy"},
  260.     {"Solair"},
  261.     {"Berkley's RC Van"},
  262.     {"Skimmer"},
  263.     {"PCJ-600"},
  264.     {"Faggio"},
  265.     {"Freeway"},
  266.     {"RC Baron"},
  267.     {"RC Raider"},
  268.     {"Glendale"},
  269.     {"Oceanic"},
  270.     {"Sanchez"},
  271.     {"Sparrow"},
  272.     {"Patriot"},
  273.     {"Quad"},
  274.     {"Coastguard"},
  275.     {"Dinghy"},
  276.     {"Hermes"},
  277.     {"Sabre"},
  278.     {"Rustler"},
  279.     {"ZR-350"},
  280.     {"Walton"},
  281.     {"Regina"},
  282.     {"Comet"},
  283.     {"BMX"},
  284.     {"Burrito"},
  285.     {"Camper"},
  286.     {"Marquis"},
  287.     {"Baggage"},
  288.     {"Dozer"},
  289.     {"Maverick"},
  290.     {"News Chopper"},
  291.     {"Rancher"},
  292.     {"FBI Rancher"},
  293.     {"Virgo"},
  294.     {"Greenwood"},
  295.     {"Jetmax"},
  296.     {"Hotring"},
  297.     {"Sandking"},
  298.     {"Blista Compact"},
  299.     {"Police Maverick"},
  300.     {"Boxville"},
  301.     {"Benson"},
  302.     {"Mesa"},
  303.     {"RC Goblin"},
  304.     {"Hotring Racer A"}, //hotrina
  305.     {"Hotring Racer B"}, //hotrinb
  306.     {"Bloodring Banger"},
  307.     {"Rancher"},
  308.     {"Super GT"},
  309.     {"Elegant"},
  310.     {"Journey"},
  311.     {"Bike"},
  312.     {"Mountain Bike"},
  313.     {"Beagle"},
  314.     {"Cropdust"},
  315.     {"Stunt"},
  316.     {"Tanker"}, //petro
  317.     {"Roadtrain"},
  318.     {"Nebula"},
  319.     {"Majestic"},
  320.     {"Buccaneer"},
  321.     {"Shamal"},
  322.     {"Hydra"},
  323.     {"FCR-900"},
  324.     {"NRG-500"},
  325.     {"HPV1000"},
  326.     {"Cement Truck"},
  327.     {"Tow Truck"},
  328.     {"Fortune"},
  329.     {"Cadrona"},
  330.     {"FBI Truck"},
  331.     {"Willard"},
  332.     {"Forklift"},
  333.     {"Tractor"},
  334.     {"Combine"},
  335.     {"Feltzer"},
  336.     {"Remington"},
  337.     {"Slamvan"},
  338.     {"Blade"},
  339.     {"Freight"},
  340.     {"Streak"},
  341.     {"Vortex"},
  342.     {"Vincent"},
  343.     {"Bullet"},
  344.     {"Clover"},
  345.     {"Sadler"},
  346.     {"Firetruck LA"}, //firela
  347.     {"Hustler"},
  348.     {"Intruder"},
  349.     {"Primo"},
  350.     {"Cargobob"},
  351.     {"Tampa"},
  352.     {"Sunrise"},
  353.     {"Merit"},
  354.     {"Utility"},
  355.     {"Nevada"},
  356.     {"Yosemite"},
  357.     {"Windsor"},
  358.     {"Monster A"}, //monstera
  359.     {"Monster B"}, //monsterb
  360.     {"Uranus"},
  361.     {"Jester"},
  362.     {"Sultan"},
  363.     {"Stratum"},
  364.     {"Elegy"},
  365.     {"Raindance"},
  366.     {"RC Tiger"},
  367.     {"Flash"},
  368.     {"Tahoma"},
  369.     {"Savanna"},
  370.     {"Bandito"},
  371.     {"Freight Flat"}, //freiflat
  372.     {"Streak Carriage"}, //streakc
  373.     {"Kart"},
  374.     {"Mower"},
  375.     {"Duneride"},
  376.     {"Sweeper"},
  377.     {"Broadway"},
  378.     {"Tornado"},
  379.     {"AT-400"},
  380.     {"DFT-30"},
  381.     {"Huntley"},
  382.     {"Stafford"},
  383.     {"BF-400"},
  384.     {"Newsvan"},
  385.     {"Tug"},
  386.     {"Trailer 3"}, //petrotr
  387.     {"Emperor"},
  388.     {"Wayfarer"},
  389.     {"Euros"},
  390.     {"Hotdog"},
  391.     {"Club"},
  392.     {"Freight Carriage"}, //freibox
  393.     {"Trailer 3"}, //artict3
  394.     {"Andromada"},
  395.     {"Dodo"},
  396.     {"RC Cam"},
  397.     {"Launch"},
  398.     {"Police Car (LSPD)"},
  399.     {"Police Car (SFPD)"},
  400.     {"Police Car (LVPD)"},
  401.     {"Police Ranger"},
  402.     {"Picador"},
  403.     {"S.W.A.T. Van"},
  404.     {"Alpha"},
  405.     {"Phoenix"},
  406.     {"Glendale"},
  407.     {"Sadler"},
  408.     {"Luggage Trailer A"}, //bagboxa
  409.     {"Luggage Trailer B"}, //bagboxb
  410.     {"Stair Trailer"}, //tugstair
  411.     {"Boxville"},
  412.     {"Farm Plow"}, //farmtr1
  413.     {"Utility Trailer"} //utiltr1
  414. };
  415.  
  416. //==============================================================================
  417.  
  418. forward SkinSelect(playerid);
  419. forward VehicleSelect(playerid);
  420. forward WorldSelect(playerid);
  421. forward CameraSelect(playerid);
  422. forward ObjectSelect( playerid );
  423.  
  424. //==============================================================================
  425.  
  426. dcmd_debug(playerid, params[]) {
  427.     if(strcmp(params, "help", true, 4) == 0) {
  428.         SendClientMessage(playerid, COLOR_BLUE, "[DEBUG]: Debug Mode 0.2 - HELP");
  429.         SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: Debug Mode 0.2 is a filterscript which allows scripters");
  430.         SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: or people who wish to explore SA:MP 0.2\'s features to have access");
  431.         SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: to many commands and \"menu\'s\".");
  432.         SendClientMessage(playerid, COLOR_YELLOW, "[DEBUG]: This filterscript was designed for SA:MP version 0.2");
  433.         SendClientMessage(playerid, COLOR_PINK, "[DEBUG]: For the command list type \"/debug commands\"");
  434.  
  435.         return true;
  436.     }
  437.     if(strcmp(params, "commands", true, 8) == 0) {
  438.         SendClientMessage(playerid, COLOR_BLUE, "[DEBUG]: Debug Mode 0.2 - COMMANDS");
  439.         SendClientMessage(playerid, COLOR_CYAN, "[WORLD]: /w, /weather, /t, /time, /wsel, /g, /gravity");
  440.         SendClientMessage(playerid, COLOR_CYAN, "[VEHICLES]: /v, /vehicle, /vsel");
  441.         SendClientMessage(playerid, COLOR_CYAN, "[PLAYER]: /s, /skin, /ssel, /weapon, /w2");
  442.         SendClientMessage(playerid, COLOR_CYAN, "[PLAYER]: /goto, /warpto, /bring, /setloc");
  443.         SendClientMessage(playerid, COLOR_CYAN, "[CAMERA]: /camera, /csel");
  444.  
  445.         return true;
  446.     }
  447.  
  448.     if(strcmp(params, "dump", true, 4) == 0) {
  449.         SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS]: All current server data dumped to a file.");
  450.         new File:F_DUMP = fopen("DEBUG-DUMP.txt", io_append);
  451.         if(F_DUMP) {
  452.             new h, m, s, Y, M, D, cString[256];
  453.  
  454.             getdate(Y, M, D);
  455.             gettime(h, m, s);
  456.  
  457.             format(cString, 256, "// %d-%d-%d @ %d:%d:%d\r\n", D, M, Y, h, m, s);
  458.             fwrite(F_DUMP, cString);
  459.  
  460.             for(new i = 0; i < MAX_VEHICLES; i++) {
  461.                 if(curServerVehP[i][spawn]  == true) {
  462.                     new Float:vx, Float:vy, Float:vz, Float:va;
  463.                     GetVehiclePos(i, vx, vy, vz);
  464.                     GetVehicleZAngle(i, va);
  465.                     format(cString, 256, "CreateVehicle(%d, %f, %f, %f, %f, -1, -1, 5000); // Interior(%d), %s\r\n", curServerVehP[i][vmodel], vx, vy, vz, va, curServerVehP[i][vInt], aVehicleNames[curServerVehP[i][vmodel] - MIN_VEHI_ID]);
  466.                     fwrite(F_DUMP, cString);
  467.                 }
  468.             }
  469.             print("** Dumped current server information.");
  470.             fclose(F_DUMP);
  471.         }
  472.         else {
  473.             print("** Failed to create the file \"DEBUG-DUMP.txt\".\n");
  474.         }
  475.         return true;
  476.     }
  477.     return false;
  478. }
  479.  
  480. #if CAME_SELECT == true
  481.  
  482. dcmd_object(playerid, params[])
  483. {
  484.     new cString[ 128 ], idx;
  485.     cString = strtok( params, idx );
  486.  
  487.     if ( !strlen( cString ) || !strlen( params[ idx + 1 ] ) )
  488.     {
  489.         SendClientMessage( playerid, COLOR_WHITE, "[USAGE]: /object [RRATE/MRATE/CAMERA] [RATE/ID]");
  490.  
  491.         return 1;
  492.     }
  493.  
  494.     if ( strcmp( cString, "rrate", true ) == 0 )
  495.     {
  496.         pObjectRate[ playerid ][ OBJ_RATE_ROT ] = floatstr( params[ idx + 1 ] );
  497.  
  498.         format( cString, 128, "[SUCCESS]: Object rotation rate changed to %f.", pObjectRate[ playerid ][ OBJ_RATE_ROT ] );
  499.         SendClientMessage( playerid, COLOR_GREEN, cString );
  500.  
  501.         return 1;
  502.     }
  503.  
  504.     if ( strcmp( cString, "mrate", true ) == 0 )
  505.     {
  506.         pObjectRate[ playerid ][ OBJ_RATE_MOVE ] = floatstr( params[ idx + 1 ] );
  507.  
  508.         format( cString, 128, "[SUCCESS]: Object movement rate changed to %f.", pObjectRate[ playerid ][ OBJ_RATE_MOVE ] );
  509.         SendClientMessage( playerid, COLOR_GREEN, cString );
  510.  
  511.         return 1;
  512.     }
  513.  
  514.     if ( strcmp( cString, "mode", true ) == 0 )
  515.     {
  516.         new fuck = strval( params[ idx + 1 ] );
  517.  
  518.         if ( fuck >= O_MODE_SELECTOR || fuck <= O_MODE_ROTATOR )
  519.         {
  520.             curPlayerObjM[ playerid ][ OBJ_MOD ] = fuck;
  521.  
  522.             switch ( fuck )
  523.             {
  524.                 case O_MODE_SELECTOR: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Selection." );
  525.                 case O_MODE_MOVER: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Mover." );
  526.                 case O_MODE_ROTATOR: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Rotator." );
  527.             }
  528.  
  529.             return 1;
  530.         }
  531.         else
  532.         {
  533.             SendClientMessage( playerid, COLOR_RED, "[ERROR]: Invalid modeid." );
  534.  
  535.             return 1;
  536.         }
  537.     }
  538.  
  539.     if ( strcmp( cString, "focus", true ) == 0 )
  540.     {
  541.         new objectid = strval( params[ idx + 1 ] );
  542.  
  543.         if ( !IsValidObject( objectid ) )
  544.         {
  545.             SendClientMessage( playerid, COLOR_RED, "[ERROR]: Enter a valid objectid." );
  546.  
  547.             return 1;
  548.         }
  549.  
  550.         else
  551.         {
  552.             curPlayerObjI[ playerid ] = objectid;
  553.  
  554.             GetObjectPos( objectid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
  555.             GetObjectRot( objectid, curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ] );
  556.  
  557.             curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 5.0;
  558.             curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] - 20.0;
  559.             curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_Z ] + 30.0;
  560.  
  561.             curPlayerCamD[playerid][CLOO_X] = curPlayerObjM[ playerid ][ OBJ_X ];
  562.             curPlayerCamD[playerid][CLOO_Y] = curPlayerObjM[ playerid ][ OBJ_Y ];
  563.             curPlayerCamD[playerid][CLOO_Z] = curPlayerObjM[ playerid ][ OBJ_Z ];
  564.  
  565.             if ( gPlayerStatus[ playerid ] == OBJE_SEL_STAT )
  566.             {
  567.                 SetPlayerCameraPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
  568.                 SetPlayerCameraLookAt( playerid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
  569.             }
  570.  
  571.             return 1;
  572.         }
  573.     }
  574.  
  575.     if ( strcmp( cString, "camera", true ) == 0 )
  576.     {
  577.         new cameraid = strval( params[ idx + 1 ] );
  578.  
  579.         if ( cameraid >= 0 && cameraid < 4 )
  580.         {
  581.             switch ( cameraid )
  582.             {
  583.                 case 0:
  584.                 {
  585.                     curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 7.0;
  586.                     curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] - 20.0;
  587.                     curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_Z ] + 30.0;
  588.                 }
  589.  
  590.                 case 1:
  591.                 {
  592.                     curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 7.0;
  593.                     curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 15.0;
  594.                     curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 15.0;
  595.                 }
  596.  
  597.                 case 2:
  598.                 {
  599.                     curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] - 20.0;
  600.                     curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 20.0;
  601.                     curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 20.0;
  602.                 }
  603.  
  604.                 case 3:
  605.                 {
  606.                     curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] - 10.0;
  607.                     curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 25.0;
  608.                     curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 15.0;
  609.                 }
  610.             }
  611.  
  612.             SetPlayerCameraPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
  613.             SetPlayerCameraLookAt( playerid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
  614.  
  615.             return 1;
  616.         }
  617.         else
  618.         {
  619.             SendClientMessage( playerid, COLOR_RED, "[ERROR]: Invalid object camera id.");
  620.  
  621.             return 1;
  622.         }
  623.     }
  624.     return 0;
  625. }
  626.  
  627. dcmd_osel(playerid, params[])
  628. {
  629.     #pragma unused params
  630.  
  631.     new cString[ 128 ];
  632.  
  633.     if ( gPlayerStatus[ playerid ] != 0 )
  634.     {
  635.         format( cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[ gPlayerStatus[ playerid ] - 1 ] );
  636.         SendClientMessage(playerid, COLOR_RED, cString);
  637.  
  638.         return 1;
  639.     }
  640.  
  641.     new Float:a;
  642.  
  643.     gPlayerStatus[playerid] = OBJE_SEL_STAT;
  644.  
  645.     GetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  646.     curPlayerCamD[playerid][CPOS_Z] += 5.0;
  647.     SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  648.  
  649.     GetXYInFrontOfPlayer(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], OBJE_DIS);
  650.  
  651.     curPlayerCamD[playerid][CLOO_Z] = curPlayerCamD[playerid][CPOS_Z] - 5.0;
  652.  
  653.     SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  654.  
  655.     TogglePlayerControllable(playerid, 0);
  656.  
  657.     GetPlayerFacingAngle(playerid, a);
  658.  
  659.     curPlayerObjM[ playerid ][ OBJ_X ] = curPlayerCamD[playerid][CLOO_X];
  660.     curPlayerObjM[ playerid ][ OBJ_Y ] = curPlayerCamD[playerid][CLOO_Y];
  661.     curPlayerObjM[ playerid ][ OBJ_Z ] = curPlayerCamD[playerid][CLOO_Z];
  662.     curPlayerObjM[ playerid ][ OBJ_RX ] = 0.0;
  663.     curPlayerObjM[ playerid ][ OBJ_RY ] = 0.0;
  664.     curPlayerObjM[ playerid ][ OBJ_RZ ] = 0.0;
  665.  
  666.     curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
  667.         curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
  668.         curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
  669.     );
  670.  
  671.     gPlayerTimers[ playerid ] = SetTimerEx("ObjectSelect", 200, 1, "i", playerid);
  672.  
  673.     return 1;
  674. }
  675.  
  676. dcmd_camera(playerid, params[]) {
  677.     new idx; new cString[128];
  678.  
  679.     cString = strtok(params, idx);
  680.  
  681.     if (!strlen(cString)) {
  682.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /camera [RATE/MODE] [RATE/MODEID]");
  683.  
  684.         return true;
  685.     }
  686.  
  687.     if (strcmp(cString, "rate", true, 4) == 0) {
  688.         curPlayerCamD[playerid][RATE] = floatstr(params[idx+1]);
  689.  
  690.         return true;
  691.     }
  692.  
  693.     if (strcmp(cString, "mode", true, 4) == 0) {
  694.         curPlayerCamD[playerid][CMODE] = strval(params[idx+1]);
  695.  
  696.         return true;
  697.     }
  698.  
  699.     return true;
  700. }
  701.  
  702. dcmd_csel(playerid, params[]) {
  703.     #pragma unused params
  704.  
  705.     new cString[128];
  706.  
  707.     if (gPlayerStatus[playerid] != 0) {
  708.         format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
  709.         SendClientMessage(playerid, COLOR_RED, cString);
  710.  
  711.         return true;
  712.     }
  713.  
  714.     gPlayerStatus[playerid] = CAME_SEL_STAT;
  715.  
  716.     TogglePlayerControllable(playerid, 0);
  717.  
  718.     GetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  719.     GetXYInFrontOfPlayer(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], 5.0);
  720.  
  721.     curPlayerCamD[playerid][CLOO_Z] = curPlayerCamD[playerid][CPOS_Z];
  722.  
  723.     gPlayerTimers[playerid] = SetTimerEx("CameraSelect", 200, 1, "i", playerid);
  724.  
  725.     return true;
  726. }
  727.  
  728. #endif
  729.  
  730. #if WORL_SELECT == true
  731. dcmd_g(playerid, params[]) {
  732.     new cString[128];
  733.  
  734.     if (!strlen(params[0]))
  735.     {
  736.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /g GRAVITY or /gravity GRAVITY");
  737.         return true;
  738.     }
  739.  
  740.     new Float:grav = floatstr(params[0]);
  741.  
  742.     SetGravity(grav);
  743.  
  744.     format(cString, 128, "[SUCCESS]: World gravity changed to %f", grav);
  745.     SendClientMessage(playerid, COLOR_GREEN, cString);
  746.  
  747.     return true;
  748. }
  749.  
  750. dcmd_gravity(playerid, params[])
  751.     return dcmd_g(playerid, params);
  752.  
  753. dcmd_w(playerid, params[]) {
  754.     new idx, iString[128];
  755.     iString = strtok(params, idx);
  756.  
  757.     if (!strlen(iString)) {
  758.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /w WEATHERID or /weather WEATHERID");
  759.         return true;
  760.     }
  761.  
  762.     idx = strval(iString);
  763.  
  764.     if (idx < MIN_WEAT_ID || idx > MAX_WEAT_ID) {
  765.         SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid WEATHERID");
  766.         return true;
  767.     }
  768.  
  769.     gWorldStatus[1] = idx;
  770.  
  771.     SetWeather(idx);
  772.  
  773.     format(iString, 128, "[SUCCESS]: Weather has changed to WEATHERID %d", idx);
  774.     SendClientMessage(playerid, COLOR_GREEN, iString);
  775.  
  776.     return true;
  777. }
  778.  
  779. dcmd_weather(playerid, params[])
  780.     return dcmd_w(playerid, params);
  781.  
  782. dcmd_t(playerid, params[]) {
  783.     new idx, iString[128];
  784.     iString = strtok(params, idx);
  785.  
  786.     if (!strlen(iString)) {
  787.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /t HOUR or /time HOUR");
  788.         return true;
  789.     }
  790.  
  791.     idx = strval(iString);
  792.  
  793.     if (idx < MIN_TIME_ID || idx > MAX_TIME_ID) {
  794.         SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid HOUR");
  795.         return true;
  796.     }
  797.  
  798.     gWorldStatus[0] = idx;
  799.  
  800.     SetWorldTime(idx);
  801.  
  802.     format(iString, 128, "[SUCCESS]: Time has changed to HOUR %d", idx);
  803.     SendClientMessage(playerid, COLOR_GREEN, iString);
  804.  
  805.     return true;
  806. }
  807.  
  808. dcmd_time(playerid, params[])
  809.     return dcmd_t(playerid, params);
  810.  
  811. dcmd_wsel(playerid, params[]) {
  812.     #pragma unused params
  813.  
  814.     new cString[128];
  815.  
  816.     if (gPlayerStatus[playerid] != 0) {
  817.         format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
  818.         SendClientMessage(playerid, COLOR_RED, cString);
  819.         return true;
  820.     }
  821.  
  822.     new Float:x, Float:y, Float:z;
  823.  
  824.     gPlayerStatus[playerid] = WORL_SEL_STAT;
  825.  
  826.     GetPlayerPos(playerid, x, y, z);
  827.     SetPlayerCameraPos(playerid, x, y, z + 40.0);
  828.  
  829.     GetXYInFrontOfPlayer(playerid, x, y, 100.0);
  830.  
  831.     SetPlayerCameraLookAt(playerid, x, y, z + 5.0);
  832.  
  833.     TogglePlayerControllable(playerid, 0);
  834.  
  835.     gPlayerTimers[playerid] = SetTimerEx("WorldSelect", 200, 1, "i", playerid);
  836.  
  837.     GameTextForPlayer(playerid, "WorldSelect", 1500, 3);
  838.  
  839.     return true;
  840. }
  841. #endif
  842.  
  843. #if VEHI_SELECT == true
  844.  
  845. dcmd_v(playerid, params[])
  846. {
  847.     new
  848.         idx,
  849.         iString[ 128 ];
  850.  
  851.     if ( gPlayerStatus[ playerid ] != 0 )
  852.     {
  853.         format              ( iString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[ gPlayerStatus[ playerid ] - 1 ] );
  854.         SendClientMessage   ( playerid, COLOR_RED, iString );
  855.  
  856.         return true;
  857.     }
  858.  
  859.     if ( params[ 0 ] == '\0' )  // Same effect as a !strlen check.
  860.         return SendClientMessage( playerid, COLOR_RED, "[USAGE]: /v MODELID/NAME or /vehicle MODELID/NAME" );
  861.  
  862.     //***************
  863.     // Fix by Mike! *
  864.     //***************
  865.  
  866.     idx = GetVehicleModelIDFromName( params );
  867.  
  868.     if( idx == -1 )
  869.     {
  870.         idx = strval(iString);
  871.  
  872.         if ( idx < MIN_VEHI_ID || idx > MAX_VEHI_ID )
  873.             return SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid MODELID/NAME");
  874.     }
  875.  
  876.     new
  877.         Float:x,
  878.         Float:y,
  879.         Float:z,
  880.         Float:a;
  881.  
  882.     GetPlayerPos(playerid, x, y, z);
  883.     GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
  884.     GetPlayerFacingAngle(playerid, a);
  885.  
  886.     curPlayerVehM[playerid] = idx;
  887.  
  888.     curPlayerVehI[playerid] = CreateVehicle(idx, x, y, z + 2.0, a + 90.0, -1, -1, 5000);
  889.     LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
  890.  
  891.     curServerVehP[curPlayerVehI[playerid]][spawn]   = true;
  892.     curServerVehP[curPlayerVehI[playerid]][vmodel]  = idx;
  893.     curServerVehP[curPlayerVehI[playerid]][vInt]    = GetPlayerInterior(playerid);
  894.  
  895.     format(iString, 128, "[SUCCESS]: Spawned a \"%s\" (MODELID: %d, VEHICLEID: %d)", aVehicleNames[idx - MIN_VEHI_ID], idx, curPlayerVehI[playerid]);
  896.  
  897.     SendClientMessage(playerid, COLOR_GREEN, iString);
  898.  
  899.     return true;
  900. }
  901.  
  902. dcmd_vehicle(playerid, params[])
  903.     return dcmd_v(playerid, params);
  904.  
  905. dcmd_vsel(playerid, params[])
  906. {
  907.     // /vsel allows players to select a vehicle using playerkeys.
  908.     #pragma unused params
  909.  
  910.     new cString[128];
  911.  
  912.     if (gPlayerStatus[playerid] != 0) {
  913.         format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
  914.         SendClientMessage(playerid, COLOR_RED, cString);
  915.         return true;
  916.     }
  917.  
  918.     new Float:x, Float:y, Float:z, Float:a;
  919.  
  920.     gPlayerStatus[playerid] = VEHI_SEL_STAT;
  921.  
  922.     GetPlayerPos(playerid, x, y, z);
  923.     SetPlayerCameraPos(playerid, x, y, z + 3.0);
  924.  
  925.     GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
  926.     SetPlayerCameraLookAt(playerid, x, y, z);
  927.  
  928.     TogglePlayerControllable(playerid, 0);
  929.  
  930.     GetPlayerFacingAngle(playerid, a);
  931.  
  932.     curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
  933.     printf( "vsel vehicle start id = %d", curPlayerVehI[playerid] );
  934.  
  935.     LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
  936.  
  937.     curServerVehP[curPlayerVehI[playerid]][spawn]   = true;
  938.     curServerVehP[curPlayerVehI[playerid]][vmodel]  = curPlayerVehM[playerid];
  939.     curServerVehP[curPlayerVehI[playerid]][vInt]    = GetPlayerInterior(playerid);
  940.  
  941.     gPlayerTimers[playerid] = SetTimerEx("VehicleSelect", 200, 1, "i", playerid);
  942.  
  943.     return true;
  944. }
  945.  
  946. #endif
  947.  
  948. #if SKIN_SELECT == true
  949.  
  950. dcmd_ssel(playerid, params[])
  951. {
  952.     // /ssel allows players to select a skin using playerkeys.
  953.     #pragma unused params
  954.  
  955.     new cString[128];
  956.  
  957.     if (gPlayerStatus[playerid] != 0) {
  958.         format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
  959.         SendClientMessage(playerid, COLOR_RED, cString);
  960.         return true;
  961.     }
  962.  
  963.     new Float:x, Float:y, Float:z;
  964.  
  965.     gPlayerStatus[playerid] = SKIN_SEL_STAT;
  966.  
  967.     GetPlayerPos(playerid, x, y, z);
  968.     SetPlayerCameraLookAt(playerid, x, y, z);
  969.  
  970.     GetXYInFrontOfPlayer(playerid, x, y, 3.5);
  971.     SetPlayerCameraPos(playerid, x, y, z);
  972.  
  973.     TogglePlayerControllable(playerid, 0);
  974.  
  975.     gPlayerTimers[playerid] = SetTimerEx("SkinSelect", 200, 1, "i", playerid);
  976.  
  977.     return true;
  978. }
  979.  
  980. dcmd_s(playerid, params[])
  981. {
  982.     // /s SKINID allows players to directly select a skin using it's ID.
  983.     new idx, iString[128];
  984.     iString = strtok(params, idx);
  985.  
  986.     if (!strlen(iString)) {
  987.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /s SKINID");
  988.         return true;
  989.     }
  990.  
  991.     idx = strval(iString);
  992.  
  993.     if (IsInvalidSkin(idx) || idx < MIN_SKIN_ID || idx > MAX_SKIN_ID) {
  994.         SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid SKINID");
  995.         return true;
  996.     }
  997.  
  998.     SetPlayerSkin(playerid, idx);
  999.     curPlayerSkin[playerid] = idx;
  1000.     format(iString, 128, "[SUCCESS]: Changed skin to SKINID %d", idx);
  1001.  
  1002.     SendClientMessage(playerid, COLOR_GREEN, iString);
  1003.  
  1004.     return true;
  1005. }
  1006.  
  1007. dcmd_skin(playerid, params[])
  1008. {
  1009.     dcmd_s(playerid, params);
  1010.  
  1011.     return true;
  1012. }
  1013.  
  1014. #endif
  1015.  
  1016. #if MISCEL_CMDS == true
  1017. dcmd_goto(playerid, params[])
  1018. {
  1019.     new idx, iString[128];
  1020.     iString = strtok(params, idx);
  1021.  
  1022.     if (!strlen(iString)) {
  1023.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /goto PLAYERID (X_OFFSET Y_OFFSET Z_OFFSET)");
  1024.         return true;
  1025.     }
  1026.  
  1027.     new ID = strval(iString);
  1028.  
  1029.     if (!IsPlayerConnected(ID)) {
  1030.         SendClientMessage(playerid, COLOR_RED, "[ERROR]: Not connected PLAYERID.");
  1031.         return true;
  1032.     }
  1033.  
  1034.     new Float:X, Float:Y, Float:Z;
  1035.     new Interior = GetPlayerInterior(ID);
  1036.  
  1037.     GetPlayerPos(ID, X, Y, Z);
  1038.  
  1039.     iString = strtok(params, idx);
  1040.  
  1041.     if (!strlen(iString)) {
  1042.         GetXYInFrontOfPlayer(ID, X, Y, 1.5);
  1043.         SetPlayerInterior(playerid, Interior);
  1044.         SetPlayerPos(playerid, X, Y, Z);
  1045.  
  1046.         GetPlayerName(ID, iString, 128);
  1047.         format(iString, 128, "[SUCCESS]: You have warped to %s (ID: %d).", iString, ID);
  1048.         SendClientMessage(playerid, COLOR_GREEN, iString);
  1049.  
  1050.         return true;
  1051.     }
  1052.  
  1053.     X += floatstr(iString);
  1054.     iString = strtok(params, idx);
  1055.  
  1056.     if (!strlen(iString)) {
  1057.         goto fwarpto;
  1058.     }
  1059.  
  1060.     Y += floatstr(iString);
  1061.     iString = strtok(params, idx);
  1062.  
  1063.     if (!strlen(iString)) {
  1064.         goto fwarpto;
  1065.     }
  1066.  
  1067.     Z += floatstr(iString);
  1068.  
  1069.     fwarpto:
  1070.  
  1071.     new pVID = GetPlayerVehicleID( playerid );
  1072.  
  1073.     if ( pVID )
  1074.     {
  1075.         SetVehiclePos( pVID, X, Y, Z );
  1076.         LinkVehicleToInterior( pVID, Interior );
  1077.     }
  1078.     else
  1079.     {
  1080.         SetPlayerPos( playerid, X, Y, Z);
  1081.     }
  1082.  
  1083.     SetPlayerInterior( playerid, Interior);
  1084.  
  1085.     GetPlayerName(ID, iString, 128);
  1086.     format(iString, 128, "[SUCCESS]: You have warped to %s (ID: %d).", iString, ID);
  1087.     SendClientMessage(playerid, COLOR_GREEN, iString);
  1088.  
  1089.     return true;
  1090. }
  1091.  
  1092. dcmd_warpto(playerid, params[])
  1093. {
  1094.     dcmd_goto(playerid, params);
  1095.  
  1096.     return true;
  1097. }
  1098.  
  1099. dcmd_setloc(playerid, params[])
  1100. {
  1101.     new idx, iString[128];
  1102.     iString = strtok(params, idx);
  1103.  
  1104.     if (!strlen(iString)) {
  1105.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /setloc X Y Z INTERIOR");
  1106.         return true;
  1107.     }
  1108.  
  1109.     new Float:X, Float:Y, Float:Z;
  1110.     new Interior;
  1111.  
  1112.     X = floatstr(iString);
  1113.     Y = floatstr(strtok(params,idx));
  1114.     Z = floatstr(strtok(params,idx));
  1115.     Interior = strval(strtok(params,idx));
  1116.  
  1117.     new pVID = GetPlayerVehicleID( playerid );
  1118.  
  1119.     if ( pVID )
  1120.     {
  1121.         SetVehiclePos( pVID, X, Y, Z );
  1122.         LinkVehicleToInterior( pVID, Interior );
  1123.     }
  1124.     else
  1125.     {
  1126.         SetPlayerPos( playerid, X, Y, Z );
  1127.     }
  1128.  
  1129.     SetPlayerInterior(playerid, Interior);
  1130.  
  1131.     return true;
  1132.  
  1133.  
  1134. }
  1135.  
  1136. dcmd_bring(playerid, params[])
  1137. {
  1138.     new idx, iString[128];
  1139.     iString = strtok(params, idx);
  1140.  
  1141.     if (!strlen(iString)) {
  1142.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /bring PLAYERID (X_OFFSET Y_OFFSET Z_OFFSET)");
  1143.         return true;
  1144.     }
  1145.  
  1146.     new ID = strval(iString);
  1147.  
  1148.     if (!IsPlayerConnected(ID)) {
  1149.         SendClientMessage(playerid, COLOR_RED, "[ERROR]: Not connected PLAYERID.");
  1150.         return true;
  1151.     }
  1152.  
  1153.     new Float:X, Float:Y, Float:Z;
  1154.     new Interior = GetPlayerInterior(playerid);
  1155.  
  1156.     GetPlayerPos(playerid, X, Y, Z);
  1157.  
  1158.     iString = strtok(params, idx);
  1159.  
  1160.     if (!strlen(iString)) {
  1161.         GetXYInFrontOfPlayer(playerid, X, Y, 1.5);
  1162.         SetPlayerInterior(ID, Interior);
  1163.         SetPlayerPos(ID, X, Y, Z);
  1164.  
  1165.         GetPlayerName(ID, iString, 128);
  1166.         format(iString, 128, "[SUCCESS]: You have brought %s (ID: %d) to you.", iString, ID);
  1167.         SendClientMessage(playerid, COLOR_GREEN, iString);
  1168.  
  1169.         return true;
  1170.     }
  1171.  
  1172.     X += floatstr(iString);
  1173.     iString = strtok(params, idx);
  1174.  
  1175.     if (!strlen(iString)) {
  1176.         goto fbring;
  1177.     }
  1178.  
  1179.     Y += floatstr(iString);
  1180.     iString = strtok(params, idx);
  1181.  
  1182.     if (!strlen(iString)) {
  1183.         goto fbring;
  1184.     }
  1185.  
  1186.     Z += floatstr(iString);
  1187.  
  1188.     fbring:
  1189.  
  1190.     new pVID = GetPlayerVehicleID( ID );
  1191.  
  1192.     if ( pVID )
  1193.     {
  1194.         SetVehiclePos( pVID, X, Y, Z );
  1195.         LinkVehicleToInterior( pVID, Interior );
  1196.     }
  1197.     else
  1198.     {
  1199.         SetPlayerPos( ID, X, Y, Z );
  1200.     }
  1201.  
  1202.     SetPlayerInterior(ID, Interior);
  1203.  
  1204.     GetPlayerName(ID, iString, 128);
  1205.     format(iString, 128, "[SUCCESS]: You have brought %s (ID: %d) to you.", iString, ID);
  1206.     SendClientMessage(playerid, COLOR_GREEN, iString);
  1207.  
  1208.     return true;
  1209. }
  1210.  
  1211. dcmd_weapon(playerid, params[])
  1212. {
  1213.     dcmd_w2(playerid, params);
  1214.  
  1215.     return true;
  1216. }
  1217.  
  1218. dcmd_w2(playerid, params[])
  1219. {
  1220.     new idx, iString[128];
  1221.     iString = strtok(params, idx);
  1222.  
  1223.     if (!strlen(iString)) {
  1224.         SendClientMessage(playerid, COLOR_RED, "[USAGE]: /w2 WEAPONID/NAME (AMMO) or /weapon WEAPONID/NAME (AMMO)");
  1225.         return true;
  1226.     }
  1227.  
  1228.     new weaponid = GetWeaponModelIDFromName(iString);
  1229.  
  1230.     if (weaponid == -1) {
  1231.         weaponid = strval(iString);
  1232.         if (weaponid < 0 || weaponid > 47) {
  1233.             SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid WEAPONID/NAME");
  1234.             return true;
  1235.         }
  1236.     }
  1237.  
  1238.     if (!strlen(params[idx+1])) {
  1239.         GivePlayerWeapon(playerid, weaponid, 500);
  1240.  
  1241.         format(iString, 128, "[SUCCESS]: You were given weapon %s (ID: %d) with 500 ammo.", aWeaponNames[weaponid], weaponid);
  1242.         SendClientMessage(playerid, COLOR_GREEN, iString);
  1243.  
  1244.         return true;
  1245.     }
  1246.  
  1247.     idx = strval(params[idx+1]);
  1248.  
  1249.     GivePlayerWeapon(playerid, weaponid, idx);
  1250.  
  1251.     format(iString, 128, "[SUCCESS]: You were given weapon %s (ID: %d) with %d ammo.", aWeaponNames[weaponid], weaponid, idx);
  1252.     SendClientMessage(playerid, COLOR_GREEN, iString);
  1253.  
  1254.     return true;
  1255. }
  1256. #endif
  1257.  
  1258. public OnFilterScriptInit()
  1259. {
  1260.     print("\n  *********************\n  * SA:MP DEBUG 0.2   *");
  1261.     print("  * By Simon Campbell *\n  *********************");
  1262.     printf("  * Version: %s      *\n  *********************", DEBUG_VERSION);
  1263.     print("  * -- LOADED         *\n  *********************\n");
  1264.  
  1265.     for ( new i = 0; i < MAX_PLAYERS; i++ )
  1266.     {
  1267.         curPlayerObjM[ i ][ OBJ_MDL ] = MIN_OBJE_ID;
  1268.         pObjectRate[ i ][ OBJ_RATE_ROT ] = 1.0;
  1269.         pObjectRate[ i ][ OBJ_RATE_MOVE ] = 1.0;
  1270.     }
  1271.  
  1272. }
  1273.  
  1274. public OnFilterScriptExit()
  1275. {
  1276.     print("\n  *********************\n  * SA:MP DEBUG 0.2   *");
  1277.     print("  * -- SHUTDOWN       *\n  *********************\n");
  1278. }
  1279.  
  1280. public OnPlayerCommandText(playerid, cmdtext[])
  1281. {
  1282.     #if ADMINS_ONLY == true
  1283.     if(IsPlayerAdmin(playerid)) {
  1284.     #endif
  1285.  
  1286.     #if SKIN_SELECT == true
  1287.     dcmd(s, 1, cmdtext);
  1288.     dcmd(ssel, 4, cmdtext);
  1289.     dcmd(skin, 4, cmdtext);
  1290.     #endif
  1291.  
  1292.     #if VEHI_SELECT == true
  1293.     dcmd(v, 1, cmdtext);
  1294.     dcmd(vsel, 4, cmdtext);
  1295.     dcmd(vehicle, 7, cmdtext);
  1296.     #endif
  1297.  
  1298.     #if WORL_SELECT == true
  1299.     dcmd(w, 1, cmdtext);
  1300.     dcmd(t, 1, cmdtext);
  1301.     dcmd(g, 1, cmdtext);
  1302.     dcmd(wsel, 4, cmdtext);
  1303.     dcmd(time, 4, cmdtext);
  1304.     dcmd(weather, 7, cmdtext);
  1305.     dcmd(gravity, 7, cmdtext);
  1306.     #endif
  1307.  
  1308.     #if MISCEL_CMDS == true
  1309.     dcmd(w2, 2, cmdtext);
  1310.     dcmd(goto, 4, cmdtext);
  1311.     dcmd(bring, 5, cmdtext);
  1312.     dcmd(warpto, 6, cmdtext);
  1313.     dcmd(weapon, 6, cmdtext);
  1314.     dcmd(setloc, 6, cmdtext);
  1315.     #endif
  1316.  
  1317.     #if CAME_SELECT == true
  1318.     dcmd(csel, 4, cmdtext);
  1319.     dcmd(camera, 6, cmdtext);
  1320.     #endif
  1321.  
  1322.     dcmd(osel, 4, cmdtext);
  1323.     dcmd(object, 6, cmdtext);
  1324.     dcmd(debug, 5, cmdtext);
  1325.  
  1326.     #if ADMINS_ONLY == true
  1327.     }
  1328.     #endif
  1329.  
  1330.     return 0;
  1331. }
  1332.  
  1333. public OnPlayerDisconnect(playerid,reason)
  1334. {
  1335.     KillTimer(gPlayerTimers[playerid]);
  1336.  
  1337.     gPlayerStatus[playerid] = 0;
  1338.     gPlayerTimers[playerid] = 0;
  1339.  
  1340.     curPlayerSkin[playerid] = MIN_SKIN_ID; // Current Player Skin ID
  1341.     curPlayerVehM[playerid] = MIN_VEHI_ID; // Current Player Vehicle ID
  1342.     curPlayerVehI[playerid] = -1;
  1343.  
  1344.     return 0;
  1345. }
  1346.  
  1347. public OnPlayerConnect(playerid)
  1348. {
  1349.     curPlayerCamD[playerid][CMODE] = CMODE_A;
  1350.     curPlayerCamD[playerid][RATE]  = 2.0;
  1351.  
  1352.     return 0;
  1353. }
  1354.  
  1355. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) {
  1356.     #if ADMINS_ONLY == true
  1357.     if (IsPlayerAdmin(playerid)) {
  1358.     #endif
  1359.     SetPlayerPosFindZ(playerid, fX, fY, fZ);
  1360.     #if ADMINS_ONLY == true
  1361.     }
  1362.     #endif
  1363. }
  1364.  
  1365.  
  1366. //==============================================================================
  1367.  
  1368. #if WORL_SELECT == true
  1369. public WorldSelect(playerid)
  1370. {   // Created by Simon
  1371.     /*
  1372.     // Make sure the player is not in world selection before continuing
  1373.     if (gPlayerStatus[playerid] != WORL_SEL_STAT) {
  1374.         KillTimer(skinTimerID[playerid]);
  1375.         return;
  1376.     }
  1377.     */
  1378.  
  1379.     new keys, updown, leftright;
  1380.  
  1381.     GetPlayerKeys(playerid, keys, updown, leftright);
  1382.  
  1383.     new cString[128];
  1384.  
  1385.     // Right key increases World Time
  1386.     if (leftright == KEY_RIGHT) {
  1387.         if(gWorldStatus[0] == MAX_TIME_ID) {
  1388.             gWorldStatus[0] = MIN_TIME_ID;
  1389.         }
  1390.         else {
  1391.             gWorldStatus[0]++;
  1392.         }
  1393.         format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
  1394.         GameTextForPlayer(playerid, cString, 1500, 3);
  1395.         SetWorldTime(gWorldStatus[0]);
  1396.     }
  1397.  
  1398.     // Left key decreases World Time
  1399.     if (leftright == KEY_LEFT) {
  1400.         if(gWorldStatus[0] == MIN_TIME_ID) {
  1401.             gWorldStatus[0] = MAX_TIME_ID;
  1402.         }
  1403.         else {
  1404.             gWorldStatus[0]--;
  1405.         }
  1406.         format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
  1407.         GameTextForPlayer(playerid, cString, 1500, 3);
  1408.         SetWorldTime(gWorldStatus[0]);
  1409.     }
  1410.  
  1411.     // Up key increases Weather ID
  1412.     if(updown == KEY_UP) {
  1413.         if(gWorldStatus[1] == MAX_WEAT_ID) {
  1414.             gWorldStatus[1] = MIN_WEAT_ID;
  1415.         }
  1416.         else {
  1417.                 gWorldStatus[1]++;
  1418.         }
  1419.         format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
  1420.         GameTextForPlayer(playerid, cString, 1500, 3);
  1421.         SetWeather(gWorldStatus[1]);
  1422.     }
  1423.  
  1424.     // Down key decreases Weather ID
  1425.     if(updown == KEY_DOWN) {
  1426.         if(gWorldStatus[1] == MIN_WEAT_ID) {
  1427.             gWorldStatus[1] = MAX_WEAT_ID;
  1428.         }
  1429.         else {
  1430.                 gWorldStatus[1]--;
  1431.         }
  1432.         format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
  1433.         GameTextForPlayer(playerid, cString, 1500, 3);
  1434.         SetWeather(gWorldStatus[1]);
  1435.     }
  1436.  
  1437.     // Action key exits WorldSelection
  1438.     if(keys & KEY_ACTION) {
  1439.         SetCameraBehindPlayer(playerid);
  1440.         TogglePlayerControllable(playerid, 1);
  1441.  
  1442.         format(cString, 128, "[SUCCESS]: Time changed to %d hours and weather changed to WEATHERID %d", gWorldStatus[0], gWorldStatus[1]);
  1443.         SendClientMessage(playerid, COLOR_GREEN, cString);
  1444.  
  1445.         new File:F_WORLD = fopen("TIME-WEATHER.txt", io_append);
  1446.  
  1447.         if(F_WORLD) {
  1448.             new h, m, s, Y, M, D;
  1449.  
  1450.             getdate(Y, M, D);
  1451.             gettime(h, m, s);
  1452.  
  1453.             format(cString, 128, "// %d-%d-%d @ %d:%d:%d\r\nSetWeather(%d);\r\nSetWorldTime(%d);\r\n", D, M, Y, h, m, s);
  1454.  
  1455.             fwrite(F_WORLD, cString);
  1456.             fclose(F_WORLD);
  1457.             printf("\n%s\n",cString);
  1458.         }
  1459.         else {
  1460.             print("Failed to create the file \"TIME-WEATHER.txt\".\n");
  1461.         }
  1462.  
  1463.         gPlayerStatus[playerid] = 0;
  1464.         KillTimer(gPlayerTimers[playerid]);
  1465.  
  1466.         return;
  1467.     }
  1468. }
  1469.  
  1470. #endif
  1471.  
  1472. #if SKIN_SELECT == true
  1473. public SkinSelect(playerid)
  1474. {   // Created by Simon
  1475.     /*
  1476.     // Make sure the player is not in skin selection before continuing
  1477.     if (gPlayerStatus[playerid] != SKIN_SEL_STAT) {
  1478.         KillTimer(skinTimerID[playerid]);
  1479.         return;
  1480.     }
  1481.     */
  1482.  
  1483.     new keys, updown, leftright;
  1484.  
  1485.     GetPlayerKeys(playerid, keys, updown, leftright);
  1486.  
  1487.     new cString[128];
  1488.  
  1489.     // Right key increases Skin ID
  1490.     if (leftright == KEY_RIGHT) {
  1491.         if(curPlayerSkin[playerid] == MAX_SKIN_ID) {
  1492.             curPlayerSkin[playerid] = MIN_SKIN_ID;
  1493.         }
  1494.         else {
  1495.             curPlayerSkin[playerid]++;
  1496.         }
  1497.         while(IsInvalidSkin(curPlayerSkin[playerid])) {
  1498.             curPlayerSkin[playerid]++;
  1499.         }
  1500.  
  1501.         format(cString, 128, "Skin ID: %d", curPlayerSkin[playerid]);
  1502.         GameTextForPlayer(playerid, cString, 1500, 3);
  1503.         SetPlayerSkin(playerid, curPlayerSkin[playerid]);
  1504.     }
  1505.  
  1506.     // Left key decreases Skin ID
  1507.     if(leftright == KEY_LEFT) {
  1508.         if(curPlayerSkin[playerid] == MIN_SKIN_ID) {
  1509.             curPlayerSkin[playerid] = MAX_SKIN_ID;
  1510.         }
  1511.         else {
  1512.             curPlayerSkin[playerid]--;
  1513.         }
  1514.         while(IsInvalidSkin(curPlayerSkin[playerid])) {
  1515.             curPlayerSkin[playerid]--;
  1516.         }
  1517.  
  1518.         format(cString, 128, "Skin ID: %d", curPlayerSkin[playerid]);
  1519.         GameTextForPlayer(playerid, cString, 1500, 3);
  1520.         SetPlayerSkin(playerid, curPlayerSkin[playerid]);
  1521.     }
  1522.  
  1523.     // Action key exits skin selection
  1524.     if(keys & KEY_ACTION)
  1525.     {
  1526.         SetCameraBehindPlayer(playerid);
  1527.         TogglePlayerControllable(playerid, 1);
  1528.  
  1529.         format(cString, 128, "[SUCCESS]: You have changed to SKINID %d", curPlayerSkin[playerid]);
  1530.         SendClientMessage(playerid, COLOR_GREEN, cString);
  1531.  
  1532.         gPlayerStatus[playerid] = 0;
  1533.         KillTimer(gPlayerTimers[playerid]);
  1534.     }
  1535. }
  1536. #endif
  1537.  
  1538. #if CAME_SELECT == true
  1539. public CameraSelect(playerid)
  1540. {
  1541.     // CMODE_A 0    Up/Down = IncreaseZ/DecreaseZ; Left/Right = IncreaseX/DecreaseX; Num4/Num6 = IncreaseY/DecreaseY
  1542.     // CMODE_B 1    Up/Down = Rotate Up/Down; Left/Right = Rotate Left/Right; Num4/Num6 = Move Left/Right
  1543.  
  1544.     new keys, updown, leftright;
  1545.  
  1546.     GetPlayerKeys(playerid, keys, updown, leftright);
  1547.  
  1548.     printf("Player (%d) keys = %d, updown = %d, leftright = %d", playerid, keys, updown, leftright);
  1549.  
  1550.     if (curPlayerCamD[playerid][CMODE] == CMODE_A)
  1551.     {
  1552.         if (leftright == KEY_RIGHT) {
  1553.             curPlayerCamD[playerid][CPOS_X] += curPlayerCamD[playerid][RATE];
  1554.             curPlayerCamD[playerid][CLOO_X] += curPlayerCamD[playerid][RATE];
  1555.  
  1556.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1557.  
  1558.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1559.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1560.         }
  1561.  
  1562.         if (leftright == KEY_LEFT) {
  1563.             curPlayerCamD[playerid][CPOS_X] -= curPlayerCamD[playerid][RATE];
  1564.             curPlayerCamD[playerid][CLOO_X] -= curPlayerCamD[playerid][RATE];
  1565.  
  1566.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1567.  
  1568.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1569.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1570.         }
  1571.  
  1572.         if (updown == KEY_UP) {
  1573.             curPlayerCamD[playerid][CPOS_Z] += curPlayerCamD[playerid][RATE];
  1574.             curPlayerCamD[playerid][CLOO_Z] += curPlayerCamD[playerid][RATE];
  1575.  
  1576.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1577.  
  1578.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1579.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1580.         }
  1581.  
  1582.         if (updown == KEY_DOWN) {
  1583.             curPlayerCamD[playerid][CPOS_Z] -= curPlayerCamD[playerid][RATE];
  1584.             curPlayerCamD[playerid][CLOO_Z] -= curPlayerCamD[playerid][RATE];
  1585.  
  1586.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1587.  
  1588.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1589.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1590.         }
  1591.  
  1592.         if (keys & KEY_ANALOG_RIGHT) {
  1593.             curPlayerCamD[playerid][CPOS_Y] += curPlayerCamD[playerid][RATE];
  1594.             curPlayerCamD[playerid][CLOO_Y] += curPlayerCamD[playerid][RATE];
  1595.  
  1596.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1597.  
  1598.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1599.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1600.         }
  1601.  
  1602.  
  1603.         if (keys & KEY_ANALOG_LEFT) {
  1604.             curPlayerCamD[playerid][CPOS_Y] -= curPlayerCamD[playerid][RATE];
  1605.             curPlayerCamD[playerid][CLOO_Y] -= curPlayerCamD[playerid][RATE];
  1606.  
  1607.             SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1608.  
  1609.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1610.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1611.         }
  1612.     }
  1613.  
  1614.  
  1615.     if(curPlayerCamD[playerid][CMODE] == CMODE_B)
  1616.     {
  1617.         if (leftright == KEY_RIGHT) {
  1618.             // Rotate Y +
  1619.         }
  1620.  
  1621.         if (leftright == KEY_LEFT) {
  1622.             // Rotate Y -
  1623.         }
  1624.  
  1625.         if (updown == KEY_UP) {
  1626.             // Rotate X +
  1627.         }
  1628.  
  1629.         if (updown == KEY_DOWN) {
  1630.             // Rotate X -
  1631.         }
  1632.  
  1633.         if (keys & KEY_ANALOG_RIGHT) {
  1634.             // Rotate Z +
  1635.         }
  1636.  
  1637.         if (keys & KEY_ANALOG_LEFT) {
  1638.             // Rotate Z -
  1639.         }
  1640.     }
  1641.  
  1642.     if (keys & KEY_ACTION)
  1643.     {
  1644.         SetCameraBehindPlayer(playerid);
  1645.  
  1646.         new
  1647.             File:F_CAMERA = fopen("CAMERA.txt", io_append);
  1648.  
  1649.         if( F_CAMERA )
  1650.         {
  1651.             new
  1652.                 cString[512], h, m, s, Y, M, D;
  1653.  
  1654.             getdate(Y, M, D);
  1655.             gettime(h, m, s);
  1656.  
  1657.             format(cString, sizeof( cString ), "// %d-%d-%d @ %d:%d:%d\r\nSetPlayerCameraPos(playerid, %f, %f, %f);\r\nSetPlayerCameraLookAt(playerid, %f, %f, %f);\r\n", D, M, Y, h, m, s,curPlayerCamD[playerid][CPOS_X],curPlayerCamD[playerid][CPOS_Y],curPlayerCamD[playerid][CPOS_Z],curPlayerCamD[playerid][CLOO_X],curPlayerCamD[playerid][CLOO_Y],curPlayerCamD[playerid][CLOO_Z]);
  1658.  
  1659.             fwrite(F_CAMERA, cString);
  1660.             fclose(F_CAMERA);
  1661.  
  1662.             printf("\n%s\n",cString);
  1663.  
  1664.             SendClientMessage( playerid, COLOR_GREEN, "Current camera data saved to 'CAMERA.txt'" );
  1665.         }
  1666.         else
  1667.             print("Failed to create the file \"CAMERA.txt\".\n");
  1668.  
  1669.         TogglePlayerControllable(playerid, 1);
  1670.  
  1671.         KillTimer(gPlayerTimers[playerid]);
  1672.  
  1673.         gPlayerStatus[playerid] = 0;
  1674.     }
  1675. }
  1676.  
  1677. #endif
  1678.  
  1679. #if VEHI_SELECT == true
  1680. public VehicleSelect(playerid)
  1681. {
  1682.     /*
  1683.     // Make sure the player is not in skin selection before continuing
  1684.     if (gPlayerStatus[playerid] != VEHI_SEL_STAT) {
  1685.         KillTimer(skinTimerID[playerid]);
  1686.         return;
  1687.     }
  1688.     */
  1689.  
  1690.     new keys, updown, leftright;
  1691.  
  1692.     GetPlayerKeys(playerid, keys, updown, leftright);
  1693.  
  1694.     new cString[128];
  1695.  
  1696.     // Right key increases Vehicle MODELID
  1697.     if (leftright == KEY_RIGHT) {
  1698.         if(curPlayerVehM[playerid] == MAX_VEHI_ID) {
  1699.             curPlayerVehM[playerid] = MIN_VEHI_ID;
  1700.         }
  1701.         else {
  1702.             curPlayerVehM[playerid]++;
  1703.         }
  1704.  
  1705.         format(cString, 128, "Model ID: %d~n~Vehicle Name: %s", curPlayerVehM, aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID]);
  1706.         GameTextForPlayer(playerid, cString, 1500, 3);
  1707.  
  1708.         new Float:x, Float:y, Float:z, Float:a;
  1709.  
  1710.         GetPlayerPos(playerid, x, y, z);
  1711.         GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
  1712.         GetPlayerFacingAngle(playerid, a);
  1713.  
  1714.         DestroyVehicle(curPlayerVehI[playerid]);
  1715.         curServerVehP[curPlayerVehI[playerid]][spawn]   = false;
  1716.  
  1717.         curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
  1718.         printf( "vsel vehicle select id = %d", curPlayerVehI[playerid] );
  1719.  
  1720.         LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
  1721.  
  1722.         curServerVehP[curPlayerVehI[playerid]][spawn]   = true;
  1723.         curServerVehP[curPlayerVehI[playerid]][vmodel]  = curPlayerVehM[playerid];
  1724.         curServerVehP[curPlayerVehI[playerid]][vInt]    = GetPlayerInterior(playerid);
  1725.     }
  1726.  
  1727.     // Left key decreases Vehicle MODELID
  1728.     if(leftright == KEY_LEFT) {
  1729.         if(curPlayerVehM[playerid] == MIN_VEHI_ID) {
  1730.             curPlayerVehM[playerid] = MAX_VEHI_ID;
  1731.         }
  1732.         else {
  1733.             curPlayerVehM[playerid]--;
  1734.         }
  1735.  
  1736.         format(cString, 128, "Model ID: %d~n~Vehicle Name: %s", curPlayerVehM, aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID]);
  1737.         GameTextForPlayer(playerid, cString, 1500, 3);
  1738.  
  1739.         new Float:x, Float:y, Float:z, Float:a;
  1740.  
  1741.         GetPlayerPos(playerid, x, y, z);
  1742.         GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
  1743.         GetPlayerFacingAngle(playerid, a);
  1744.  
  1745.         DestroyVehicle(curPlayerVehI[playerid]);
  1746.         curServerVehP[curPlayerVehI[playerid]][spawn]   = false;
  1747.  
  1748.         curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
  1749.         printf( "vsel vehicle select id = %d", curPlayerVehI[playerid] );
  1750.  
  1751.         LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
  1752.  
  1753.         curServerVehP[curPlayerVehI[playerid]][spawn]   = true;
  1754.         curServerVehP[curPlayerVehI[playerid]][vmodel]  = curPlayerVehM[playerid];
  1755.         curServerVehP[curPlayerVehI[playerid]][vInt]    = GetPlayerInterior(playerid);
  1756.     }
  1757.  
  1758.     // Action key exits vehicle selection
  1759.     if(keys & KEY_ACTION)
  1760.     {
  1761.         SetCameraBehindPlayer(playerid);
  1762.         TogglePlayerControllable(playerid, 1);
  1763.  
  1764.         format(cString, 128, "[SUCCESS]: Spawned a \"%s\" (MODELID: %d, VEHICLEID: %d)", aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID], curPlayerVehM[playerid], curPlayerVehI[playerid]);
  1765.         SendClientMessage(playerid, COLOR_GREEN, cString);
  1766.  
  1767.         gPlayerStatus[playerid] = 0;
  1768.         KillTimer(gPlayerTimers[playerid]);
  1769.     }
  1770. }
  1771. #endif
  1772.  
  1773. #if OBJE_SELECT == true
  1774. public ObjectSelect( playerid )
  1775. {
  1776.     new keys, updown, leftright;
  1777.  
  1778.     GetPlayerKeys( playerid, keys, updown, leftright );
  1779.  
  1780.     new cString[ 128 ];
  1781.  
  1782.     switch ( curPlayerObjM[ playerid ][ OBJ_MOD ] )
  1783.     {
  1784.         case O_MODE_SELECTOR:
  1785.         {
  1786.             if ( updown == KEY_UP)
  1787.             {
  1788.                 curPlayerObjM[ playerid ][ OBJ_MDL ] += 10;
  1789.  
  1790.                 if ( curPlayerObjM[ playerid ][ OBJ_MDL ] >= MAX_OBJE_ID )
  1791.                 {
  1792.                     curPlayerObjM[ playerid ][ OBJ_MDL ] = MIN_OBJE_ID;
  1793.                 }
  1794.  
  1795.                 while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
  1796.                 {
  1797.                     curPlayerObjM[ playerid ][ OBJ_MDL ]++;
  1798.                 }
  1799.  
  1800.                 DestroyObject( curPlayerObjI[ playerid ] );
  1801.                 curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
  1802.                     curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
  1803.                     curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
  1804.                 );
  1805.  
  1806.                 format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
  1807.                 GameTextForPlayer(playerid, cString, 1500, 3);
  1808.             }
  1809.  
  1810.             if ( updown == KEY_DOWN)
  1811.             {
  1812.                 curPlayerObjM[ playerid ][ OBJ_MDL ] -= 10;
  1813.  
  1814.                 if ( curPlayerObjM[ playerid ][ OBJ_MDL ] <= MIN_OBJE_ID )
  1815.                 {
  1816.                     curPlayerObjM[ playerid ][ OBJ_MDL ] = MAX_OBJE_ID;
  1817.                 }
  1818.  
  1819.                 while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
  1820.                 {
  1821.                     curPlayerObjM[ playerid ][ OBJ_MDL ]--;
  1822.                 }
  1823.  
  1824.                 DestroyObject( curPlayerObjI[ playerid ] );
  1825.                 curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
  1826.                     curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
  1827.                     curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
  1828.                 );
  1829.  
  1830.                 format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
  1831.                 GameTextForPlayer(playerid, cString, 1500, 3);
  1832.             }
  1833.  
  1834.             if ( leftright == KEY_LEFT)
  1835.             {
  1836.                 curPlayerObjM[ playerid ][ OBJ_MDL ]--;
  1837.  
  1838.                 if ( curPlayerObjM[ playerid ][ OBJ_MDL ] <= MIN_OBJE_ID )
  1839.                 {
  1840.                     curPlayerObjM[ playerid ][ OBJ_MDL ] = MAX_OBJE_ID;
  1841.                 }
  1842.  
  1843.                 while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
  1844.                 {
  1845.                     curPlayerObjM[ playerid ][ OBJ_MDL ]--;
  1846.                 }
  1847.  
  1848.                 DestroyObject( curPlayerObjI[ playerid ] );
  1849.                 curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
  1850.                     curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
  1851.                     curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
  1852.                 );
  1853.  
  1854.                 format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
  1855.                 GameTextForPlayer(playerid, cString, 1500, 3);
  1856.             }
  1857.  
  1858.             if ( leftright == KEY_RIGHT)
  1859.             {
  1860.                 curPlayerObjM[ playerid ][ OBJ_MDL ]++;
  1861.  
  1862.                 if ( curPlayerObjM[ playerid ][ OBJ_MDL ] >= MAX_OBJE_ID )
  1863.                 {
  1864.                     curPlayerObjM[ playerid ][ OBJ_MDL ] = MIN_OBJE_ID;
  1865.                 }
  1866.  
  1867.                 while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
  1868.                 {
  1869.                     curPlayerObjM[ playerid ][ OBJ_MDL ]++;
  1870.                 }
  1871.  
  1872.                 DestroyObject( curPlayerObjI[ playerid ] );
  1873.                 curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
  1874.                     curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
  1875.                     curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
  1876.                 );
  1877.  
  1878.                 format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
  1879.                 GameTextForPlayer(playerid, cString, 1500, 3);
  1880.             }
  1881.         }
  1882.  
  1883.         case O_MODE_MOVER:
  1884.         {
  1885.             if ( updown == KEY_UP)
  1886.             {
  1887.                 curPlayerObjM[ playerid ][ OBJ_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1888.                 curPlayerCamD[ playerid ][ CPOS_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1889.                 curPlayerCamD[ playerid ][ CLOO_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1890.             }
  1891.  
  1892.             if ( updown == KEY_DOWN)
  1893.             {
  1894.                 curPlayerObjM[ playerid ][ OBJ_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1895.                 curPlayerCamD[ playerid ][ CPOS_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1896.                 curPlayerCamD[ playerid ][ CLOO_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1897.             }
  1898.  
  1899.             if ( leftright == KEY_LEFT)
  1900.             {
  1901.                 curPlayerObjM[ playerid ][ OBJ_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1902.                 curPlayerCamD[ playerid ][ CPOS_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1903.                 curPlayerCamD[ playerid ][ CLOO_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1904.             }
  1905.  
  1906.             if ( leftright == KEY_RIGHT)
  1907.             {
  1908.                 curPlayerObjM[ playerid ][ OBJ_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1909.                 curPlayerCamD[ playerid ][ CPOS_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1910.                 curPlayerCamD[ playerid ][ CLOO_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1911.             }
  1912.  
  1913.             if ( keys & KEY_ANALOG_LEFT )
  1914.             {
  1915.                 curPlayerObjM[ playerid ][ OBJ_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1916.                 curPlayerCamD[ playerid ][ CPOS_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1917.                 curPlayerCamD[ playerid ][ CLOO_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1918.             }
  1919.  
  1920.             if ( keys & KEY_ANALOG_LEFT )
  1921.             {
  1922.                 curPlayerObjM[ playerid ][ OBJ_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1923.                 curPlayerCamD[ playerid ][ CPOS_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1924.                 curPlayerCamD[ playerid ][ CLOO_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
  1925.             }
  1926.  
  1927.             SetPlayerPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
  1928.             SetObjectPos( curPlayerObjI[ playerid ], curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
  1929.             SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
  1930.             SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
  1931.         }
  1932.  
  1933.         case O_MODE_ROTATOR:
  1934.         {
  1935.             if ( updown == KEY_UP)
  1936.             {
  1937.                 curPlayerObjM[ playerid ][ OBJ_RZ ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1938.             }
  1939.  
  1940.             if ( updown == KEY_DOWN)
  1941.             {
  1942.                 curPlayerObjM[ playerid ][ OBJ_RZ ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1943.  
  1944.             }
  1945.  
  1946.             if ( leftright == KEY_LEFT)
  1947.             {
  1948.                 curPlayerObjM[ playerid ][ OBJ_RY ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1949.             }
  1950.  
  1951.             if ( leftright == KEY_RIGHT)
  1952.             {
  1953.                 curPlayerObjM[ playerid ][ OBJ_RY ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1954.             }
  1955.  
  1956.             if ( keys & KEY_ANALOG_LEFT )
  1957.             {
  1958.                 curPlayerObjM[ playerid ][ OBJ_RY ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1959.             }
  1960.  
  1961.             if ( keys & KEY_ANALOG_LEFT )
  1962.             {
  1963.                 curPlayerObjM[ playerid ][ OBJ_RX ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
  1964.             }
  1965.  
  1966.             SetObjectRot( curPlayerObjI[ playerid ], curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ] );
  1967.         }
  1968.     }
  1969.  
  1970.     if ( keys & KEY_ACTION )
  1971.     {
  1972.         gPlayerStatus[ playerid ] = 0;
  1973.         TogglePlayerControllable( playerid, 1 );
  1974.         SetCameraBehindPlayer( playerid );
  1975.         KillTimer( gPlayerTimers[playerid] );
  1976.     }
  1977.  
  1978. }
  1979. #endif
  1980.  
  1981. IsInvalidSkin(skinid)
  1982. {   // Created by Simon
  1983.     // Checks whether the skinid parsed is crashable or not.
  1984.  
  1985.     #define MAX_BAD_SKINS   14
  1986.  
  1987.     new badSkins[MAX_BAD_SKINS] = {
  1988.         3, 4, 5, 6, 8, 42, 65, 74, 86,
  1989.         119, 149, 208, 273, 289
  1990.     };
  1991.  
  1992.     for (new i = 0; i < MAX_BAD_SKINS; i++) {
  1993.         if (skinid == badSkins[i]) return true;
  1994.     }
  1995.  
  1996.     return false;
  1997. }
  1998.  
  1999. GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  2000. {   // Created by Y_Less
  2001.  
  2002.     new Float:a;
  2003.  
  2004.     GetPlayerPos(playerid, x, y, a);
  2005.     GetPlayerFacingAngle(playerid, a);
  2006.  
  2007.     if (GetPlayerVehicleID(playerid)) {
  2008.         GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  2009.     }
  2010.  
  2011.     x += (distance * floatsin(-a, degrees));
  2012.     y += (distance * floatcos(-a, degrees));
  2013. }
  2014.  
  2015. strtok(const string[], &index)
  2016. {   // Created by Compuphase
  2017.  
  2018.     new length = strlen(string);
  2019.     while ((index < length) && (string[index] <= ' '))
  2020.     {
  2021.         index++;
  2022.     }
  2023.  
  2024.     new offset = index;
  2025.     new result[20];
  2026.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  2027.     {
  2028.         result[index - offset] = string[index];
  2029.         index++;
  2030.     }
  2031.     result[index - offset] = EOS;
  2032.     return result;
  2033. }
  2034.  
  2035. GetVehicleModelIDFromName(vname[])
  2036. {
  2037.     for(new i = 0; i < 211; i++)
  2038.     {
  2039.         if ( strfind(aVehicleNames[i], vname, true) != -1 )
  2040.             return i + MIN_VEHI_ID;
  2041.     }
  2042.     return -1;
  2043. }
  2044.  
  2045. GetWeaponModelIDFromName(wname[])
  2046. {
  2047.     for(new i = 0; i < 48; i++) {
  2048.         if (i == 19 || i == 20 || i == 21) continue;
  2049.         if (strfind(aWeaponNames[i], wname, true) != -1) {
  2050.             return i;
  2051.         }
  2052.     }
  2053.     return -1;
  2054. }
  2055.  
  2056. IsValidModel(modelid)
  2057. {
  2058.     // Created by Y_Less.
  2059.  
  2060.     static modeldat[] =
  2061.     {
  2062.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
  2063.         -515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
  2064.         127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
  2065.         -1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2066.         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2067.         -1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
  2068.         -1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
  2069.         -1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
  2070.         -257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
  2071.         -2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
  2072.         -1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
  2073.         -536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
  2074.         -33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
  2075.         2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
  2076.         -1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
  2077.         1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
  2078.         2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
  2079.         -100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
  2080.         -1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
  2081.         -1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
  2082.         -8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
  2083.         -1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
  2084.         -1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
  2085.         -3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
  2086.         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
  2087.         -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2088.         -236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
  2089.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2090.         0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2091.         -1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
  2092.         -241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2093.         0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
  2094.         -1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
  2095.         33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2096.         0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2097.         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
  2098.         0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2099.         -268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2100.         92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
  2101.         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
  2102.     };
  2103.     if ((modelid >= 0) && ((modelid / 32) < sizeof (modeldat)) && (modeldat[modelid / 32] & (1 << (modelid % 32))))
  2104.     {
  2105.         return 1;
  2106.     }
  2107.     return 0;
  2108. }
Advertisement
Add Comment
Please, Sign In to add comment