SAMP Gitlab CI Test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2108 lines
56 KiB

/* SA:MP PAWN Debug -
* Debugging filterscript used
* for creation of gamemode.
*
* Simon Campbell
* 10/03/2007, 6:31pm
*
* 17/11/2011
* Updated to 0.5d which supports SA:MP 0.3d
*/
//==============================================================================
#include <a_samp>
#undef KEY_UP
#undef KEY_DOWN
#undef KEY_LEFT
#undef KEY_RIGHT
#define KEY_UP 65408
#define KEY_DOWN 128
#define KEY_LEFT 65408
#define KEY_RIGHT 128
#define DEBUG_VERSION "0.5d"
#define SKIN_SELECT true
#define VEHI_SELECT true
#define WORL_SELECT true
#define CAME_SELECT true
#define OBJE_SELECT true
#define MISCEL_CMDS true
#define ADMINS_ONLY false
#define SKIN_SEL_STAT 1
#define VEHI_SEL_STAT 2
#define WORL_SEL_STAT 3
#define CAME_SEL_STAT 4
#define OBJE_SEL_STAT 5
#define COLOR_RED 0xFF4040FF
#define COLOR_GREEN 0x40FF40FF
#define COLOR_BLUE 0x4040FFFF
#define COLOR_CYAN 0x40FFFFFF
#define COLOR_PINK 0xFF40FFFF
#define COLOR_YELLOW 0xFFFF40FF
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_BLACK 0x000000FF
#define COLOR_NONE 0x00000000
#define MIN_SKIN_ID 0
#define MAX_SKIN_ID 299
#define MIN_VEHI_ID 400
#define MAX_VEHI_ID 611
#define MIN_TIME_ID 0
#define MAX_TIME_ID 23
#define MIN_WEAT_ID 0
#define MAX_WEAT_ID 45
#define MIN_OBJE_ID 615
#define MAX_OBJE_ID 13563
#define DEFAULT_GRA 0.008
#define VEHI_DIS 5.0
#define OBJE_DIS 10.0
#define CMODE_A 0
#define CMODE_B 1
#define O_MODE_SELECTOR 0
#define O_MODE_MOVER 1
#define O_MODE_ROTATOR 2
#define PI 3.14159265
#define CAMERA_TIME 40
#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
//==============================================================================
new gPlayerStatus[MAX_PLAYERS]; // Player Status
new gPlayerTimers[MAX_PLAYERS]; // Player TimerID's for keypresses
new gWorldStatus[3] = {12, 4}; // Time, Weather
new curPlayerSkin[MAX_PLAYERS] = {MIN_SKIN_ID, ...}; // Current Player Skin ID
new curPlayerVehM[MAX_PLAYERS] = {MIN_VEHI_ID, ...}; // Current Player Vehicle ID
new curPlayerVehI[MAX_PLAYERS] = {-1, ...};
enum E_OBJECT
{
OBJ_MOD,
OBJ_MDL,
Float:OBJ_X,
Float:OBJ_Y,
Float:OBJ_Z,
Float:OBJ_RX,
Float:OBJ_RY,
Float:OBJ_RZ
}
enum E_OBJ_RATE
{
Float:OBJ_RATE_ROT,
Float:OBJ_RATE_MOVE
}
new pObjectRate[ MAX_PLAYERS ][ E_OBJ_RATE ];
new curPlayerObjM[ MAX_PLAYERS ][ E_OBJECT ];
new curPlayerObjI[ MAX_PLAYERS ] = {-1, ...};
enum P_CAMERA_D {
CMODE,
Float:RATE,
Float:CPOS_X,
Float:CPOS_Y,
Float:CPOS_Z,
Float:CLOO_X,
Float:CLOO_Y,
Float:CLOO_Z
};
new curPlayerCamD[MAX_PLAYERS][P_CAMERA_D];
enum CURVEHICLE {
bool:spawn,
vmodel,
vInt
};
new curServerVehP[MAX_VEHICLES][CURVEHICLE];
new aSelNames[5][] = { // Menu selection names
{"SkinSelect"},
{"VehicleSelect"},
{"WeatherSelect"},
{"CameraSelect"},
{"ObjectSelect"}
};
new aWeaponNames[][32] = {
{"Unarmed (Fist)"}, // 0
{"Brass Knuckles"}, // 1
{"Golf Club"}, // 2
{"Night Stick"}, // 3
{"Knife"}, // 4
{"Baseball Bat"}, // 5
{"Shovel"}, // 6
{"Pool Cue"}, // 7
{"Katana"}, // 8
{"Chainsaw"}, // 9
{"Purple Dildo"}, // 10
{"Big White Vibrator"}, // 11
{"Medium White Vibrator"}, // 12
{"Small White Vibrator"}, // 13
{"Flowers"}, // 14
{"Cane"}, // 15
{"Grenade"}, // 16
{"Teargas"}, // 17
{"Molotov"}, // 18
{" "}, // 19
{" "}, // 20
{" "}, // 21
{"Colt 45"}, // 22
{"Colt 45 (Silenced)"}, // 23
{"Desert Eagle"}, // 24
{"Normal Shotgun"}, // 25
{"Sawnoff Shotgun"}, // 26
{"Combat Shotgun"}, // 27
{"Micro Uzi (Mac 10)"}, // 28
{"MP5"}, // 29
{"AK47"}, // 30
{"M4"}, // 31
{"Tec9"}, // 32
{"Country Rifle"}, // 33
{"Sniper Rifle"}, // 34
{"Rocket Launcher"}, // 35
{"Heat-Seeking Rocket Launcher"}, // 36
{"Flamethrower"}, // 37
{"Minigun"}, // 38
{"Satchel Charge"}, // 39
{"Detonator"}, // 40
{"Spray Can"}, // 41
{"Fire Extinguisher"}, // 42
{"Camera"}, // 43
{"Night Vision Goggles"}, // 44
{"Infrared Vision Goggles"}, // 45
{"Parachute"}, // 46
{"Fake Pistol"} // 47
};
new aVehicleNames[212][] = { // Vehicle Names - Betamaster
{"Landstalker"},
{"Bravura"},
{"Buffalo"},
{"Linerunner"},
{"Perrenial"},
{"Sentinel"},
{"Dumper"},
{"Firetruck"},
{"Trashmaster"},
{"Stretch"},
{"Manana"},
{"Infernus"},
{"Voodoo"},
{"Pony"},
{"Mule"},
{"Cheetah"},
{"Ambulance"},
{"Leviathan"},
{"Moonbeam"},
{"Esperanto"},
{"Taxi"},
{"Washington"},
{"Bobcat"},
{"Mr Whoopee"},
{"BF Injection"},
{"Hunter"},
{"Premier"},
{"Enforcer"},
{"Securicar"},
{"Banshee"},
{"Predator"},
{"Bus"},
{"Rhino"},
{"Barracks"},
{"Hotknife"},
{"Trailer 1"}, //artict1
{"Previon"},
{"Coach"},
{"Cabbie"},
{"Stallion"},
{"Rumpo"},
{"RC Bandit"},
{"Romero"},
{"Packer"},
{"Monster"},
{"Admiral"},
{"Squalo"},
{"Seasparrow"},
{"Pizzaboy"},
{"Tram"},
{"Trailer 2"}, //artict2
{"Turismo"},
{"Speeder"},
{"Reefer"},
{"Tropic"},
{"Flatbed"},
{"Yankee"},
{"Caddy"},
{"Solair"},
{"Berkley's RC Van"},
{"Skimmer"},
{"PCJ-600"},
{"Faggio"},
{"Freeway"},
{"RC Baron"},
{"RC Raider"},
{"Glendale"},
{"Oceanic"},
{"Sanchez"},
{"Sparrow"},
{"Patriot"},
{"Quad"},
{"Coastguard"},
{"Dinghy"},
{"Hermes"},
{"Sabre"},
{"Rustler"},
{"ZR-350"},
{"Walton"},
{"Regina"},
{"Comet"},
{"BMX"},
{"Burrito"},
{"Camper"},
{"Marquis"},
{"Baggage"},
{"Dozer"},
{"Maverick"},
{"News Chopper"},
{"Rancher"},
{"FBI Rancher"},
{"Virgo"},
{"Greenwood"},
{"Jetmax"},
{"Hotring"},
{"Sandking"},
{"Blista Compact"},
{"Police Maverick"},
{"Boxville"},
{"Benson"},
{"Mesa"},
{"RC Goblin"},
{"Hotring Racer A"}, //hotrina
{"Hotring Racer B"}, //hotrinb
{"Bloodring Banger"},
{"Rancher"},
{"Super GT"},
{"Elegant"},
{"Journey"},
{"Bike"},
{"Mountain Bike"},
{"Beagle"},
{"Cropdust"},
{"Stunt"},
{"Tanker"}, //petro
{"Roadtrain"},
{"Nebula"},
{"Majestic"},
{"Buccaneer"},
{"Shamal"},
{"Hydra"},
{"FCR-900"},
{"NRG-500"},
{"HPV1000"},
{"Cement Truck"},
{"Tow Truck"},
{"Fortune"},
{"Cadrona"},
{"FBI Truck"},
{"Willard"},
{"Forklift"},
{"Tractor"},
{"Combine"},
{"Feltzer"},
{"Remington"},
{"Slamvan"},
{"Blade"},
{"Freight"},
{"Streak"},
{"Vortex"},
{"Vincent"},
{"Bullet"},
{"Clover"},
{"Sadler"},
{"Firetruck LA"}, //firela
{"Hustler"},
{"Intruder"},
{"Primo"},
{"Cargobob"},
{"Tampa"},
{"Sunrise"},
{"Merit"},
{"Utility"},
{"Nevada"},
{"Yosemite"},
{"Windsor"},
{"Monster A"}, //monstera
{"Monster B"}, //monsterb
{"Uranus"},
{"Jester"},
{"Sultan"},
{"Stratum"},
{"Elegy"},
{"Raindance"},
{"RC Tiger"},
{"Flash"},
{"Tahoma"},
{"Savanna"},
{"Bandito"},
{"Freight Flat"}, //freiflat
{"Streak Carriage"}, //streakc
{"Kart"},
{"Mower"},
{"Duneride"},
{"Sweeper"},
{"Broadway"},
{"Tornado"},
{"AT-400"},
{"DFT-30"},
{"Huntley"},
{"Stafford"},
{"BF-400"},
{"Newsvan"},
{"Tug"},
{"Trailer 3"}, //petrotr
{"Emperor"},
{"Wayfarer"},
{"Euros"},
{"Hotdog"},
{"Club"},
{"Freight Carriage"}, //freibox
{"Trailer 3"}, //artict3
{"Andromada"},
{"Dodo"},
{"RC Cam"},
{"Launch"},
{"Police Car (LSPD)"},
{"Police Car (SFPD)"},
{"Police Car (LVPD)"},
{"Police Ranger"},
{"Picador"},
{"S.W.A.T. Van"},
{"Alpha"},
{"Phoenix"},
{"Glendale"},
{"Sadler"},
{"Luggage Trailer A"}, //bagboxa
{"Luggage Trailer B"}, //bagboxb
{"Stair Trailer"}, //tugstair
{"Boxville"},
{"Farm Plow"}, //farmtr1
{"Utility Trailer"} //utiltr1
};
//==============================================================================
forward SkinSelect(playerid);
forward VehicleSelect(playerid);
forward WorldSelect(playerid);
forward CameraSelect(playerid);
forward ObjectSelect( playerid );
//==============================================================================
dcmd_debug(playerid, params[]) {
if(strcmp(params, "help", true, 4) == 0) {
SendClientMessage(playerid, COLOR_BLUE, "[DEBUG]: Debug Mode 0.2 - HELP");
SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: Debug Mode 0.2 is a filterscript which allows scripters");
SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: or people who wish to explore SA:MP 0.2\'s features to have access");
SendClientMessage(playerid, COLOR_CYAN, "[DEBUG]: to many commands and \"menu\'s\".");
SendClientMessage(playerid, COLOR_YELLOW, "[DEBUG]: This filterscript was designed for SA:MP version 0.2");
SendClientMessage(playerid, COLOR_PINK, "[DEBUG]: For the command list type \"/debug commands\"");
return true;
}
if(strcmp(params, "commands", true, 8) == 0) {
SendClientMessage(playerid, COLOR_BLUE, "[DEBUG]: Debug Mode 0.2 - COMMANDS");
SendClientMessage(playerid, COLOR_CYAN, "[WORLD]: /w, /weather, /t, /time, /wsel, /g, /gravity");
SendClientMessage(playerid, COLOR_CYAN, "[VEHICLES]: /v, /vehicle, /vsel");
SendClientMessage(playerid, COLOR_CYAN, "[PLAYER]: /s, /skin, /ssel, /weapon, /w2");
SendClientMessage(playerid, COLOR_CYAN, "[PLAYER]: /goto, /warpto, /bring, /setloc");
SendClientMessage(playerid, COLOR_CYAN, "[CAMERA]: /camera, /csel");
return true;
}
if(strcmp(params, "dump", true, 4) == 0) {
SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS]: All current server data dumped to a file.");
new File:F_DUMP = fopen("DEBUG-DUMP.txt", io_append);
if(F_DUMP) {
new h, m, s, Y, M, D, cString[256];
getdate(Y, M, D);
gettime(h, m, s);
format(cString, 256, "// %d-%d-%d @ %d:%d:%d\r\n", D, M, Y, h, m, s);
fwrite(F_DUMP, cString);
for(new i = 0; i < MAX_VEHICLES; i++) {
if(curServerVehP[i][spawn] == true) {
new Float:vx, Float:vy, Float:vz, Float:va;
GetVehiclePos(i, vx, vy, vz);
GetVehicleZAngle(i, va);
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]);
fwrite(F_DUMP, cString);
}
}
print("** Dumped current server information.");
fclose(F_DUMP);
}
else {
print("** Failed to create the file \"DEBUG-DUMP.txt\".\n");
}
return true;
}
return false;
}
#if CAME_SELECT == true
dcmd_object(playerid, params[])
{
new cString[ 128 ], idx;
cString = strtok( params, idx );
if ( !strlen( cString ) || !strlen( params[ idx + 1 ] ) )
{
SendClientMessage( playerid, COLOR_WHITE, "[USAGE]: /object [RRATE/MRATE/CAMERA] [RATE/ID]");
return 1;
}
if ( strcmp( cString, "rrate", true ) == 0 )
{
pObjectRate[ playerid ][ OBJ_RATE_ROT ] = floatstr( params[ idx + 1 ] );
format( cString, 128, "[SUCCESS]: Object rotation rate changed to %f.", pObjectRate[ playerid ][ OBJ_RATE_ROT ] );
SendClientMessage( playerid, COLOR_GREEN, cString );
return 1;
}
if ( strcmp( cString, "mrate", true ) == 0 )
{
pObjectRate[ playerid ][ OBJ_RATE_MOVE ] = floatstr( params[ idx + 1 ] );
format( cString, 128, "[SUCCESS]: Object movement rate changed to %f.", pObjectRate[ playerid ][ OBJ_RATE_MOVE ] );
SendClientMessage( playerid, COLOR_GREEN, cString );
return 1;
}
if ( strcmp( cString, "mode", true ) == 0 )
{
new fuck = strval( params[ idx + 1 ] );
if ( fuck >= O_MODE_SELECTOR || fuck <= O_MODE_ROTATOR )
{
curPlayerObjM[ playerid ][ OBJ_MOD ] = fuck;
switch ( fuck )
{
case O_MODE_SELECTOR: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Selection." );
case O_MODE_MOVER: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Mover." );
case O_MODE_ROTATOR: SendClientMessage( playerid, COLOR_GREEN, "[SUCCESS]: Object mode changed to Object Rotator." );
}
return 1;
}
else
{
SendClientMessage( playerid, COLOR_RED, "[ERROR]: Invalid modeid." );
return 1;
}
}
if ( strcmp( cString, "focus", true ) == 0 )
{
new objectid = strval( params[ idx + 1 ] );
if ( !IsValidObject( objectid ) )
{
SendClientMessage( playerid, COLOR_RED, "[ERROR]: Enter a valid objectid." );
return 1;
}
else
{
curPlayerObjI[ playerid ] = objectid;
GetObjectPos( objectid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
GetObjectRot( objectid, curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ] );
curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 5.0;
curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] - 20.0;
curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_Z ] + 30.0;
curPlayerCamD[playerid][CLOO_X] = curPlayerObjM[ playerid ][ OBJ_X ];
curPlayerCamD[playerid][CLOO_Y] = curPlayerObjM[ playerid ][ OBJ_Y ];
curPlayerCamD[playerid][CLOO_Z] = curPlayerObjM[ playerid ][ OBJ_Z ];
if ( gPlayerStatus[ playerid ] == OBJE_SEL_STAT )
{
SetPlayerCameraPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
SetPlayerCameraLookAt( playerid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
}
return 1;
}
}
if ( strcmp( cString, "camera", true ) == 0 )
{
new cameraid = strval( params[ idx + 1 ] );
if ( cameraid >= 0 && cameraid < 4 )
{
switch ( cameraid )
{
case 0:
{
curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 7.0;
curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] - 20.0;
curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_Z ] + 30.0;
}
case 1:
{
curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] + 7.0;
curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 15.0;
curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 15.0;
}
case 2:
{
curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] - 20.0;
curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 20.0;
curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 20.0;
}
case 3:
{
curPlayerCamD[playerid][CPOS_X] = curPlayerObjM[ playerid ][ OBJ_X ] - 10.0;
curPlayerCamD[playerid][CPOS_Y] = curPlayerObjM[ playerid ][ OBJ_Y ] + 25.0;
curPlayerCamD[playerid][CPOS_Z] = curPlayerObjM[ playerid ][ OBJ_X ] + 15.0;
}
}
SetPlayerCameraPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
SetPlayerCameraLookAt( playerid, curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
return 1;
}
else
{
SendClientMessage( playerid, COLOR_RED, "[ERROR]: Invalid object camera id.");
return 1;
}
}
return 0;
}
dcmd_osel(playerid, params[])
{
#pragma unused params
new cString[ 128 ];
if ( gPlayerStatus[ playerid ] != 0 )
{
format( cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[ gPlayerStatus[ playerid ] - 1 ] );
SendClientMessage(playerid, COLOR_RED, cString);
return 1;
}
new Float:a;
gPlayerStatus[playerid] = OBJE_SEL_STAT;
GetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
curPlayerCamD[playerid][CPOS_Z] += 5.0;
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
GetXYInFrontOfPlayer(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], OBJE_DIS);
curPlayerCamD[playerid][CLOO_Z] = curPlayerCamD[playerid][CPOS_Z] - 5.0;
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
TogglePlayerControllable(playerid, 0);
GetPlayerFacingAngle(playerid, a);
curPlayerObjM[ playerid ][ OBJ_X ] = curPlayerCamD[playerid][CLOO_X];
curPlayerObjM[ playerid ][ OBJ_Y ] = curPlayerCamD[playerid][CLOO_Y];
curPlayerObjM[ playerid ][ OBJ_Z ] = curPlayerCamD[playerid][CLOO_Z];
curPlayerObjM[ playerid ][ OBJ_RX ] = 0.0;
curPlayerObjM[ playerid ][ OBJ_RY ] = 0.0;
curPlayerObjM[ playerid ][ OBJ_RZ ] = 0.0;
curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
);
gPlayerTimers[ playerid ] = SetTimerEx("ObjectSelect", 200, 1, "i", playerid);
return 1;
}
dcmd_camera(playerid, params[]) {
new idx; new cString[128];
cString = strtok(params, idx);
if (!strlen(cString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /camera [RATE/MODE] [RATE/MODEID]");
return true;
}
if (strcmp(cString, "rate", true, 4) == 0) {
curPlayerCamD[playerid][RATE] = floatstr(params[idx+1]);
return true;
}
if (strcmp(cString, "mode", true, 4) == 0) {
curPlayerCamD[playerid][CMODE] = strval(params[idx+1]);
return true;
}
return true;
}
dcmd_csel(playerid, params[]) {
#pragma unused params
new cString[128];
if (gPlayerStatus[playerid] != 0) {
format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
SendClientMessage(playerid, COLOR_RED, cString);
return true;
}
gPlayerStatus[playerid] = CAME_SEL_STAT;
TogglePlayerControllable(playerid, 0);
GetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
GetXYInFrontOfPlayer(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], 5.0);
curPlayerCamD[playerid][CLOO_Z] = curPlayerCamD[playerid][CPOS_Z];
gPlayerTimers[playerid] = SetTimerEx("CameraSelect", 200, 1, "i", playerid);
return true;
}
#endif
#if WORL_SELECT == true
dcmd_g(playerid, params[]) {
new cString[128];
if (!strlen(params[0]))
{
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /g GRAVITY or /gravity GRAVITY");
return true;
}
new Float:grav = floatstr(params[0]);
SetGravity(grav);
format(cString, 128, "[SUCCESS]: World gravity changed to %f", grav);
SendClientMessage(playerid, COLOR_GREEN, cString);
return true;
}
dcmd_gravity(playerid, params[])
return dcmd_g(playerid, params);
dcmd_w(playerid, params[]) {
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /w WEATHERID or /weather WEATHERID");
return true;
}
idx = strval(iString);
if (idx < MIN_WEAT_ID || idx > MAX_WEAT_ID) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid WEATHERID");
return true;
}
gWorldStatus[1] = idx;
SetWeather(idx);
format(iString, 128, "[SUCCESS]: Weather has changed to WEATHERID %d", idx);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_weather(playerid, params[])
return dcmd_w(playerid, params);
dcmd_t(playerid, params[]) {
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /t HOUR or /time HOUR");
return true;
}
idx = strval(iString);
if (idx < MIN_TIME_ID || idx > MAX_TIME_ID) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid HOUR");
return true;
}
gWorldStatus[0] = idx;
SetWorldTime(idx);
format(iString, 128, "[SUCCESS]: Time has changed to HOUR %d", idx);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_time(playerid, params[])
return dcmd_t(playerid, params);
dcmd_wsel(playerid, params[]) {
#pragma unused params
new cString[128];
if (gPlayerStatus[playerid] != 0) {
format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
SendClientMessage(playerid, COLOR_RED, cString);
return true;
}
new Float:x, Float:y, Float:z;
gPlayerStatus[playerid] = WORL_SEL_STAT;
GetPlayerPos(playerid, x, y, z);
SetPlayerCameraPos(playerid, x, y, z + 40.0);
GetXYInFrontOfPlayer(playerid, x, y, 100.0);
SetPlayerCameraLookAt(playerid, x, y, z + 5.0);
TogglePlayerControllable(playerid, 0);
gPlayerTimers[playerid] = SetTimerEx("WorldSelect", 200, 1, "i", playerid);
GameTextForPlayer(playerid, "WorldSelect", 1500, 3);
return true;
}
#endif
#if VEHI_SELECT == true
dcmd_v(playerid, params[])
{
new
idx,
iString[ 128 ];
if ( gPlayerStatus[ playerid ] != 0 )
{
format ( iString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[ gPlayerStatus[ playerid ] - 1 ] );
SendClientMessage ( playerid, COLOR_RED, iString );
return true;
}
if ( params[ 0 ] == '\0' ) // Same effect as a !strlen check.
return SendClientMessage( playerid, COLOR_RED, "[USAGE]: /v MODELID/NAME or /vehicle MODELID/NAME" );
//***************
// Fix by Mike! *
//***************
idx = GetVehicleModelIDFromName( params );
if( idx == -1 )
{
idx = strval(iString);
if ( idx < MIN_VEHI_ID || idx > MAX_VEHI_ID )
return SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid MODELID/NAME");
}
new
Float:x,
Float:y,
Float:z,
Float:a;
GetPlayerPos(playerid, x, y, z);
GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
GetPlayerFacingAngle(playerid, a);
curPlayerVehM[playerid] = idx;
curPlayerVehI[playerid] = CreateVehicle(idx, x, y, z + 2.0, a + 90.0, -1, -1, 5000);
LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
curServerVehP[curPlayerVehI[playerid]][spawn] = true;
curServerVehP[curPlayerVehI[playerid]][vmodel] = idx;
curServerVehP[curPlayerVehI[playerid]][vInt] = GetPlayerInterior(playerid);
format(iString, 128, "[SUCCESS]: Spawned a \"%s\" (MODELID: %d, VEHICLEID: %d)", aVehicleNames[idx - MIN_VEHI_ID], idx, curPlayerVehI[playerid]);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_vehicle(playerid, params[])
return dcmd_v(playerid, params);
dcmd_vsel(playerid, params[])
{
// /vsel allows players to select a vehicle using playerkeys.
#pragma unused params
new cString[128];
if (gPlayerStatus[playerid] != 0) {
format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
SendClientMessage(playerid, COLOR_RED, cString);
return true;
}
new Float:x, Float:y, Float:z, Float:a;
gPlayerStatus[playerid] = VEHI_SEL_STAT;
GetPlayerPos(playerid, x, y, z);
SetPlayerCameraPos(playerid, x, y, z + 3.0);
GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
SetPlayerCameraLookAt(playerid, x, y, z);
TogglePlayerControllable(playerid, 0);
GetPlayerFacingAngle(playerid, a);
curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
printf( "vsel vehicle start id = %d", curPlayerVehI[playerid] );
LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
curServerVehP[curPlayerVehI[playerid]][spawn] = true;
curServerVehP[curPlayerVehI[playerid]][vmodel] = curPlayerVehM[playerid];
curServerVehP[curPlayerVehI[playerid]][vInt] = GetPlayerInterior(playerid);
gPlayerTimers[playerid] = SetTimerEx("VehicleSelect", 200, 1, "i", playerid);
return true;
}
#endif
#if SKIN_SELECT == true
dcmd_ssel(playerid, params[])
{
// /ssel allows players to select a skin using playerkeys.
#pragma unused params
new cString[128];
if (gPlayerStatus[playerid] != 0) {
format(cString, 128, "[ERROR]: You are already using \"%s\".", aSelNames[gPlayerStatus[playerid] - 1]);
SendClientMessage(playerid, COLOR_RED, cString);
return true;
}
new Float:x, Float:y, Float:z;
gPlayerStatus[playerid] = SKIN_SEL_STAT;
GetPlayerPos(playerid, x, y, z);
SetPlayerCameraLookAt(playerid, x, y, z);
GetXYInFrontOfPlayer(playerid, x, y, 3.5);
SetPlayerCameraPos(playerid, x, y, z);
TogglePlayerControllable(playerid, 0);
gPlayerTimers[playerid] = SetTimerEx("SkinSelect", 200, 1, "i", playerid);
return true;
}
dcmd_s(playerid, params[])
{
// /s SKINID allows players to directly select a skin using it's ID.
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /s SKINID");
return true;
}
idx = strval(iString);
if (IsInvalidSkin(idx) || idx < MIN_SKIN_ID || idx > MAX_SKIN_ID) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid SKINID");
return true;
}
SetPlayerSkin(playerid, idx);
curPlayerSkin[playerid] = idx;
format(iString, 128, "[SUCCESS]: Changed skin to SKINID %d", idx);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_skin(playerid, params[])
{
dcmd_s(playerid, params);
return true;
}
#endif
#if MISCEL_CMDS == true
dcmd_goto(playerid, params[])
{
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /goto PLAYERID (X_OFFSET Y_OFFSET Z_OFFSET)");
return true;
}
new ID = strval(iString);
if (!IsPlayerConnected(ID)) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Not connected PLAYERID.");
return true;
}
new Float:X, Float:Y, Float:Z;
new Interior = GetPlayerInterior(ID);
GetPlayerPos(ID, X, Y, Z);
iString = strtok(params, idx);
if (!strlen(iString)) {
GetXYInFrontOfPlayer(ID, X, Y, 1.5);
SetPlayerInterior(playerid, Interior);
SetPlayerPos(playerid, X, Y, Z);
GetPlayerName(ID, iString, 128);
format(iString, 128, "[SUCCESS]: You have warped to %s (ID: %d).", iString, ID);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
X += floatstr(iString);
iString = strtok(params, idx);
if (!strlen(iString)) {
goto fwarpto;
}
Y += floatstr(iString);
iString = strtok(params, idx);
if (!strlen(iString)) {
goto fwarpto;
}
Z += floatstr(iString);
fwarpto:
new pVID = GetPlayerVehicleID( playerid );
if ( pVID )
{
SetVehiclePos( pVID, X, Y, Z );
LinkVehicleToInterior( pVID, Interior );
}
else
{
SetPlayerPos( playerid, X, Y, Z);
}
SetPlayerInterior( playerid, Interior);
GetPlayerName(ID, iString, 128);
format(iString, 128, "[SUCCESS]: You have warped to %s (ID: %d).", iString, ID);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_warpto(playerid, params[])
{
dcmd_goto(playerid, params);
return true;
}
dcmd_setloc(playerid, params[])
{
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /setloc X Y Z INTERIOR");
return true;
}
new Float:X, Float:Y, Float:Z;
new Interior;
X = floatstr(iString);
Y = floatstr(strtok(params,idx));
Z = floatstr(strtok(params,idx));
Interior = strval(strtok(params,idx));
new pVID = GetPlayerVehicleID( playerid );
if ( pVID )
{
SetVehiclePos( pVID, X, Y, Z );
LinkVehicleToInterior( pVID, Interior );
}
else
{
SetPlayerPos( playerid, X, Y, Z );
}
SetPlayerInterior(playerid, Interior);
return true;
}
dcmd_bring(playerid, params[])
{
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /bring PLAYERID (X_OFFSET Y_OFFSET Z_OFFSET)");
return true;
}
new ID = strval(iString);
if (!IsPlayerConnected(ID)) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Not connected PLAYERID.");
return true;
}
new Float:X, Float:Y, Float:Z;
new Interior = GetPlayerInterior(playerid);
GetPlayerPos(playerid, X, Y, Z);
iString = strtok(params, idx);
if (!strlen(iString)) {
GetXYInFrontOfPlayer(playerid, X, Y, 1.5);
SetPlayerInterior(ID, Interior);
SetPlayerPos(ID, X, Y, Z);
GetPlayerName(ID, iString, 128);
format(iString, 128, "[SUCCESS]: You have brought %s (ID: %d) to you.", iString, ID);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
X += floatstr(iString);
iString = strtok(params, idx);
if (!strlen(iString)) {
goto fbring;
}
Y += floatstr(iString);
iString = strtok(params, idx);
if (!strlen(iString)) {
goto fbring;
}
Z += floatstr(iString);
fbring:
new pVID = GetPlayerVehicleID( ID );
if ( pVID )
{
SetVehiclePos( pVID, X, Y, Z );
LinkVehicleToInterior( pVID, Interior );
}
else
{
SetPlayerPos( ID, X, Y, Z );
}
SetPlayerInterior(ID, Interior);
GetPlayerName(ID, iString, 128);
format(iString, 128, "[SUCCESS]: You have brought %s (ID: %d) to you.", iString, ID);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
dcmd_weapon(playerid, params[])
{
dcmd_w2(playerid, params);
return true;
}
dcmd_w2(playerid, params[])
{
new idx, iString[128];
iString = strtok(params, idx);
if (!strlen(iString)) {
SendClientMessage(playerid, COLOR_RED, "[USAGE]: /w2 WEAPONID/NAME (AMMO) or /weapon WEAPONID/NAME (AMMO)");
return true;
}
new weaponid = GetWeaponModelIDFromName(iString);
if (weaponid == -1) {
weaponid = strval(iString);
if (weaponid < 0 || weaponid > 47) {
SendClientMessage(playerid, COLOR_RED, "[ERROR]: Invalid WEAPONID/NAME");
return true;
}
}
if (!strlen(params[idx+1])) {
GivePlayerWeapon(playerid, weaponid, 500);
format(iString, 128, "[SUCCESS]: You were given weapon %s (ID: %d) with 500 ammo.", aWeaponNames[weaponid], weaponid);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
idx = strval(params[idx+1]);
GivePlayerWeapon(playerid, weaponid, idx);
format(iString, 128, "[SUCCESS]: You were given weapon %s (ID: %d) with %d ammo.", aWeaponNames[weaponid], weaponid, idx);
SendClientMessage(playerid, COLOR_GREEN, iString);
return true;
}
#endif
public OnFilterScriptInit()
{
print("\n *********************\n * SA:MP DEBUG 0.2 *");
print(" * By Simon Campbell *\n *********************");
printf(" * Version: %s *\n *********************", DEBUG_VERSION);
print(" * -- LOADED *\n *********************\n");
for ( new i = 0; i < MAX_PLAYERS; i++ )
{
curPlayerObjM[ i ][ OBJ_MDL ] = MIN_OBJE_ID;
pObjectRate[ i ][ OBJ_RATE_ROT ] = 1.0;
pObjectRate[ i ][ OBJ_RATE_MOVE ] = 1.0;
}
}
public OnFilterScriptExit()
{
print("\n *********************\n * SA:MP DEBUG 0.2 *");
print(" * -- SHUTDOWN *\n *********************\n");
}
public OnPlayerCommandText(playerid, cmdtext[])
{
#if ADMINS_ONLY == true
if(IsPlayerAdmin(playerid)) {
#endif
#if SKIN_SELECT == true
dcmd(s, 1, cmdtext);
dcmd(ssel, 4, cmdtext);
dcmd(skin, 4, cmdtext);
#endif
#if VEHI_SELECT == true
dcmd(v, 1, cmdtext);
dcmd(vsel, 4, cmdtext);
dcmd(vehicle, 7, cmdtext);
#endif
#if WORL_SELECT == true
dcmd(w, 1, cmdtext);
dcmd(t, 1, cmdtext);
dcmd(g, 1, cmdtext);
dcmd(wsel, 4, cmdtext);
dcmd(time, 4, cmdtext);
dcmd(weather, 7, cmdtext);
dcmd(gravity, 7, cmdtext);
#endif
#if MISCEL_CMDS == true
dcmd(w2, 2, cmdtext);
dcmd(goto, 4, cmdtext);
dcmd(bring, 5, cmdtext);
dcmd(warpto, 6, cmdtext);
dcmd(weapon, 6, cmdtext);
dcmd(setloc, 6, cmdtext);
#endif
#if CAME_SELECT == true
dcmd(csel, 4, cmdtext);
dcmd(camera, 6, cmdtext);
#endif
dcmd(osel, 4, cmdtext);
dcmd(object, 6, cmdtext);
dcmd(debug, 5, cmdtext);
#if ADMINS_ONLY == true
}
#endif
return 0;
}
public OnPlayerDisconnect(playerid,reason)
{
KillTimer(gPlayerTimers[playerid]);
gPlayerStatus[playerid] = 0;
gPlayerTimers[playerid] = 0;
curPlayerSkin[playerid] = MIN_SKIN_ID; // Current Player Skin ID
curPlayerVehM[playerid] = MIN_VEHI_ID; // Current Player Vehicle ID
curPlayerVehI[playerid] = -1;
return 0;
}
public OnPlayerConnect(playerid)
{
curPlayerCamD[playerid][CMODE] = CMODE_A;
curPlayerCamD[playerid][RATE] = 2.0;
return 0;
}
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) {
#if ADMINS_ONLY == true
if (IsPlayerAdmin(playerid)) {
#endif
SetPlayerPosFindZ(playerid, fX, fY, fZ);
#if ADMINS_ONLY == true
}
#endif
}
//==============================================================================
#if WORL_SELECT == true
public WorldSelect(playerid)
{ // Created by Simon
/*
// Make sure the player is not in world selection before continuing
if (gPlayerStatus[playerid] != WORL_SEL_STAT) {
KillTimer(skinTimerID[playerid]);
return;
}
*/
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
new cString[128];
// Right key increases World Time
if (leftright == KEY_RIGHT) {
if(gWorldStatus[0] == MAX_TIME_ID) {
gWorldStatus[0] = MIN_TIME_ID;
}
else {
gWorldStatus[0]++;
}
format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetWorldTime(gWorldStatus[0]);
}
// Left key decreases World Time
if (leftright == KEY_LEFT) {
if(gWorldStatus[0] == MIN_TIME_ID) {
gWorldStatus[0] = MAX_TIME_ID;
}
else {
gWorldStatus[0]--;
}
format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetWorldTime(gWorldStatus[0]);
}
// Up key increases Weather ID
if(updown == KEY_UP) {
if(gWorldStatus[1] == MAX_WEAT_ID) {
gWorldStatus[1] = MIN_WEAT_ID;
}
else {
gWorldStatus[1]++;
}
format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetWeather(gWorldStatus[1]);
}
// Down key decreases Weather ID
if(updown == KEY_DOWN) {
if(gWorldStatus[1] == MIN_WEAT_ID) {
gWorldStatus[1] = MAX_WEAT_ID;
}
else {
gWorldStatus[1]--;
}
format(cString, 128, "World Time: %d~n~Weather ID: %d", gWorldStatus[0], gWorldStatus[1]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetWeather(gWorldStatus[1]);
}
// Action key exits WorldSelection
if(keys & KEY_ACTION) {
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, 1);
format(cString, 128, "[SUCCESS]: Time changed to %d hours and weather changed to WEATHERID %d", gWorldStatus[0], gWorldStatus[1]);
SendClientMessage(playerid, COLOR_GREEN, cString);
new File:F_WORLD = fopen("TIME-WEATHER.txt", io_append);
if(F_WORLD) {
new h, m, s, Y, M, D;
getdate(Y, M, D);
gettime(h, m, s);
format(cString, 128, "// %d-%d-%d @ %d:%d:%d\r\nSetWeather(%d);\r\nSetWorldTime(%d);\r\n", D, M, Y, h, m, s);
fwrite(F_WORLD, cString);
fclose(F_WORLD);
printf("\n%s\n",cString);
}
else {
print("Failed to create the file \"TIME-WEATHER.txt\".\n");
}
gPlayerStatus[playerid] = 0;
KillTimer(gPlayerTimers[playerid]);
return;
}
}
#endif
#if SKIN_SELECT == true
public SkinSelect(playerid)
{ // Created by Simon
/*
// Make sure the player is not in skin selection before continuing
if (gPlayerStatus[playerid] != SKIN_SEL_STAT) {
KillTimer(skinTimerID[playerid]);
return;
}
*/
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
new cString[128];
// Right key increases Skin ID
if (leftright == KEY_RIGHT) {
if(curPlayerSkin[playerid] == MAX_SKIN_ID) {
curPlayerSkin[playerid] = MIN_SKIN_ID;
}
else {
curPlayerSkin[playerid]++;
}
while(IsInvalidSkin(curPlayerSkin[playerid])) {
curPlayerSkin[playerid]++;
}
format(cString, 128, "Skin ID: %d", curPlayerSkin[playerid]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetPlayerSkin(playerid, curPlayerSkin[playerid]);
}
// Left key decreases Skin ID
if(leftright == KEY_LEFT) {
if(curPlayerSkin[playerid] == MIN_SKIN_ID) {
curPlayerSkin[playerid] = MAX_SKIN_ID;
}
else {
curPlayerSkin[playerid]--;
}
while(IsInvalidSkin(curPlayerSkin[playerid])) {
curPlayerSkin[playerid]--;
}
format(cString, 128, "Skin ID: %d", curPlayerSkin[playerid]);
GameTextForPlayer(playerid, cString, 1500, 3);
SetPlayerSkin(playerid, curPlayerSkin[playerid]);
}
// Action key exits skin selection
if(keys & KEY_ACTION)
{
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, 1);
format(cString, 128, "[SUCCESS]: You have changed to SKINID %d", curPlayerSkin[playerid]);
SendClientMessage(playerid, COLOR_GREEN, cString);
gPlayerStatus[playerid] = 0;
KillTimer(gPlayerTimers[playerid]);
}
}
#endif
#if CAME_SELECT == true
public CameraSelect(playerid)
{
// CMODE_A 0 Up/Down = IncreaseZ/DecreaseZ; Left/Right = IncreaseX/DecreaseX; Num4/Num6 = IncreaseY/DecreaseY
// CMODE_B 1 Up/Down = Rotate Up/Down; Left/Right = Rotate Left/Right; Num4/Num6 = Move Left/Right
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
printf("Player (%d) keys = %d, updown = %d, leftright = %d", playerid, keys, updown, leftright);
if (curPlayerCamD[playerid][CMODE] == CMODE_A)
{
if (leftright == KEY_RIGHT) {
curPlayerCamD[playerid][CPOS_X] += curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_X] += curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
if (leftright == KEY_LEFT) {
curPlayerCamD[playerid][CPOS_X] -= curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_X] -= curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
if (updown == KEY_UP) {
curPlayerCamD[playerid][CPOS_Z] += curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_Z] += curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
if (updown == KEY_DOWN) {
curPlayerCamD[playerid][CPOS_Z] -= curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_Z] -= curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
if (keys & KEY_ANALOG_RIGHT) {
curPlayerCamD[playerid][CPOS_Y] += curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_Y] += curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
if (keys & KEY_ANALOG_LEFT) {
curPlayerCamD[playerid][CPOS_Y] -= curPlayerCamD[playerid][RATE];
curPlayerCamD[playerid][CLOO_Y] -= curPlayerCamD[playerid][RATE];
SetPlayerPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
}
if(curPlayerCamD[playerid][CMODE] == CMODE_B)
{
if (leftright == KEY_RIGHT) {
// Rotate Y +
}
if (leftright == KEY_LEFT) {
// Rotate Y -
}
if (updown == KEY_UP) {
// Rotate X +
}
if (updown == KEY_DOWN) {
// Rotate X -
}
if (keys & KEY_ANALOG_RIGHT) {
// Rotate Z +
}
if (keys & KEY_ANALOG_LEFT) {
// Rotate Z -
}
}
if (keys & KEY_ACTION)
{
SetCameraBehindPlayer(playerid);
new
File:F_CAMERA = fopen("CAMERA.txt", io_append);
if( F_CAMERA )
{
new
cString[512], h, m, s, Y, M, D;
getdate(Y, M, D);
gettime(h, m, s);
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]);
fwrite(F_CAMERA, cString);
fclose(F_CAMERA);
printf("\n%s\n",cString);
SendClientMessage( playerid, COLOR_GREEN, "Current camera data saved to 'CAMERA.txt'" );
}
else
print("Failed to create the file \"CAMERA.txt\".\n");
TogglePlayerControllable(playerid, 1);
KillTimer(gPlayerTimers[playerid]);
gPlayerStatus[playerid] = 0;
}
}
#endif
#if VEHI_SELECT == true
public VehicleSelect(playerid)
{
/*
// Make sure the player is not in skin selection before continuing
if (gPlayerStatus[playerid] != VEHI_SEL_STAT) {
KillTimer(skinTimerID[playerid]);
return;
}
*/
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
new cString[128];
// Right key increases Vehicle MODELID
if (leftright == KEY_RIGHT) {
if(curPlayerVehM[playerid] == MAX_VEHI_ID) {
curPlayerVehM[playerid] = MIN_VEHI_ID;
}
else {
curPlayerVehM[playerid]++;
}
format(cString, 128, "Model ID: %d~n~Vehicle Name: %s", curPlayerVehM, aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID]);
GameTextForPlayer(playerid, cString, 1500, 3);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
GetPlayerFacingAngle(playerid, a);
DestroyVehicle(curPlayerVehI[playerid]);
curServerVehP[curPlayerVehI[playerid]][spawn] = false;
curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
printf( "vsel vehicle select id = %d", curPlayerVehI[playerid] );
LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
curServerVehP[curPlayerVehI[playerid]][spawn] = true;
curServerVehP[curPlayerVehI[playerid]][vmodel] = curPlayerVehM[playerid];
curServerVehP[curPlayerVehI[playerid]][vInt] = GetPlayerInterior(playerid);
}
// Left key decreases Vehicle MODELID
if(leftright == KEY_LEFT) {
if(curPlayerVehM[playerid] == MIN_VEHI_ID) {
curPlayerVehM[playerid] = MAX_VEHI_ID;
}
else {
curPlayerVehM[playerid]--;
}
format(cString, 128, "Model ID: %d~n~Vehicle Name: %s", curPlayerVehM, aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID]);
GameTextForPlayer(playerid, cString, 1500, 3);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetXYInFrontOfPlayer(playerid, x, y, VEHI_DIS);
GetPlayerFacingAngle(playerid, a);
DestroyVehicle(curPlayerVehI[playerid]);
curServerVehP[curPlayerVehI[playerid]][spawn] = false;
curPlayerVehI[playerid] = CreateVehicle(curPlayerVehM[playerid], x, y, z + 2.0, a + 90.0, -1, -1, 5000);
printf( "vsel vehicle select id = %d", curPlayerVehI[playerid] );
LinkVehicleToInterior(curPlayerVehI[playerid], GetPlayerInterior(playerid));
curServerVehP[curPlayerVehI[playerid]][spawn] = true;
curServerVehP[curPlayerVehI[playerid]][vmodel] = curPlayerVehM[playerid];
curServerVehP[curPlayerVehI[playerid]][vInt] = GetPlayerInterior(playerid);
}
// Action key exits vehicle selection
if(keys & KEY_ACTION)
{
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, 1);
format(cString, 128, "[SUCCESS]: Spawned a \"%s\" (MODELID: %d, VEHICLEID: %d)", aVehicleNames[curPlayerVehM[playerid] - MIN_VEHI_ID], curPlayerVehM[playerid], curPlayerVehI[playerid]);
SendClientMessage(playerid, COLOR_GREEN, cString);
gPlayerStatus[playerid] = 0;
KillTimer(gPlayerTimers[playerid]);
}
}
#endif
#if OBJE_SELECT == true
public ObjectSelect( playerid )
{
new keys, updown, leftright;
GetPlayerKeys( playerid, keys, updown, leftright );
new cString[ 128 ];
switch ( curPlayerObjM[ playerid ][ OBJ_MOD ] )
{
case O_MODE_SELECTOR:
{
if ( updown == KEY_UP)
{
curPlayerObjM[ playerid ][ OBJ_MDL ] += 10;
if ( curPlayerObjM[ playerid ][ OBJ_MDL ] >= MAX_OBJE_ID )
{
curPlayerObjM[ playerid ][ OBJ_MDL ] = MIN_OBJE_ID;
}
while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
{
curPlayerObjM[ playerid ][ OBJ_MDL ]++;
}
DestroyObject( curPlayerObjI[ playerid ] );
curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
);
format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
GameTextForPlayer(playerid, cString, 1500, 3);
}
if ( updown == KEY_DOWN)
{
curPlayerObjM[ playerid ][ OBJ_MDL ] -= 10;
if ( curPlayerObjM[ playerid ][ OBJ_MDL ] <= MIN_OBJE_ID )
{
curPlayerObjM[ playerid ][ OBJ_MDL ] = MAX_OBJE_ID;
}
while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
{
curPlayerObjM[ playerid ][ OBJ_MDL ]--;
}
DestroyObject( curPlayerObjI[ playerid ] );
curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
);
format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
GameTextForPlayer(playerid, cString, 1500, 3);
}
if ( leftright == KEY_LEFT)
{
curPlayerObjM[ playerid ][ OBJ_MDL ]--;
if ( curPlayerObjM[ playerid ][ OBJ_MDL ] <= MIN_OBJE_ID )
{
curPlayerObjM[ playerid ][ OBJ_MDL ] = MAX_OBJE_ID;
}
while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
{
curPlayerObjM[ playerid ][ OBJ_MDL ]--;
}
DestroyObject( curPlayerObjI[ playerid ] );
curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
);
format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
GameTextForPlayer(playerid, cString, 1500, 3);
}
if ( leftright == KEY_RIGHT)
{
curPlayerObjM[ playerid ][ OBJ_MDL ]++;
if ( curPlayerObjM[ playerid ][ OBJ_MDL ] >= MAX_OBJE_ID )
{
curPlayerObjM[ playerid ][ OBJ_MDL ] = MIN_OBJE_ID;
}
while ( !IsValidModel( curPlayerObjM[ playerid ][ OBJ_MDL ] ) )
{
curPlayerObjM[ playerid ][ OBJ_MDL ]++;
}
DestroyObject( curPlayerObjI[ playerid ] );
curPlayerObjI[ playerid ] = CreateObject( curPlayerObjM[ playerid ][ OBJ_MDL ], curPlayerObjM[ playerid ][ OBJ_X ],
curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ],
curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ]
);
format( cString, 128, "Model ID: %d", curPlayerObjM[ playerid ][ OBJ_MDL ] );
GameTextForPlayer(playerid, cString, 1500, 3);
}
}
case O_MODE_MOVER:
{
if ( updown == KEY_UP)
{
curPlayerObjM[ playerid ][ OBJ_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_Z ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
if ( updown == KEY_DOWN)
{
curPlayerObjM[ playerid ][ OBJ_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_Z ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
if ( leftright == KEY_LEFT)
{
curPlayerObjM[ playerid ][ OBJ_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
if ( leftright == KEY_RIGHT)
{
curPlayerObjM[ playerid ][ OBJ_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_Y ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
if ( keys & KEY_ANALOG_LEFT )
{
curPlayerObjM[ playerid ][ OBJ_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_Y ] -= pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
if ( keys & KEY_ANALOG_LEFT )
{
curPlayerObjM[ playerid ][ OBJ_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CPOS_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
curPlayerCamD[ playerid ][ CLOO_X ] += pObjectRate[ playerid ][ OBJ_RATE_MOVE ];
}
SetPlayerPos( playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z] );
SetObjectPos( curPlayerObjI[ playerid ], curPlayerObjM[ playerid ][ OBJ_X ], curPlayerObjM[ playerid ][ OBJ_Y ], curPlayerObjM[ playerid ][ OBJ_Z ] );
SetPlayerCameraPos(playerid, curPlayerCamD[playerid][CPOS_X], curPlayerCamD[playerid][CPOS_Y], curPlayerCamD[playerid][CPOS_Z]);
SetPlayerCameraLookAt(playerid, curPlayerCamD[playerid][CLOO_X], curPlayerCamD[playerid][CLOO_Y], curPlayerCamD[playerid][CLOO_Z]);
}
case O_MODE_ROTATOR:
{
if ( updown == KEY_UP)
{
curPlayerObjM[ playerid ][ OBJ_RZ ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
if ( updown == KEY_DOWN)
{
curPlayerObjM[ playerid ][ OBJ_RZ ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
if ( leftright == KEY_LEFT)
{
curPlayerObjM[ playerid ][ OBJ_RY ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
if ( leftright == KEY_RIGHT)
{
curPlayerObjM[ playerid ][ OBJ_RY ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
if ( keys & KEY_ANALOG_LEFT )
{
curPlayerObjM[ playerid ][ OBJ_RY ] -= pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
if ( keys & KEY_ANALOG_LEFT )
{
curPlayerObjM[ playerid ][ OBJ_RX ] += pObjectRate[ playerid ][ OBJ_RATE_ROT ];
}
SetObjectRot( curPlayerObjI[ playerid ], curPlayerObjM[ playerid ][ OBJ_RX ], curPlayerObjM[ playerid ][ OBJ_RY ], curPlayerObjM[ playerid ][ OBJ_RZ ] );
}
}
if ( keys & KEY_ACTION )
{
gPlayerStatus[ playerid ] = 0;
TogglePlayerControllable( playerid, 1 );
SetCameraBehindPlayer( playerid );
KillTimer( gPlayerTimers[playerid] );
}
}
#endif
IsInvalidSkin(skinid)
{ // Created by Simon
// Checks whether the skinid parsed is crashable or not.
#define MAX_BAD_SKINS 14
new badSkins[MAX_BAD_SKINS] = {
3, 4, 5, 6, 8, 42, 65, 74, 86,
119, 149, 208, 273, 289
};
for (new i = 0; i < MAX_BAD_SKINS; i++) {
if (skinid == badSkins[i]) return true;
}
return false;
}
GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{ // Created by Y_Less
new Float:a;
GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);
if (GetPlayerVehicleID(playerid)) {
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
strtok(const string[], &index)
{ // Created by Compuphase
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(aVehicleNames[i], vname, true) != -1 )
return i + MIN_VEHI_ID;
}
return -1;
}
GetWeaponModelIDFromName(wname[])
{
for(new i = 0; i < 48; i++) {
if (i == 19 || i == 20 || i == 21) continue;
if (strfind(aWeaponNames[i], wname, true) != -1) {
return i;
}
}
return -1;
}
IsValidModel(modelid)
{
// Created by Y_Less.
static modeldat[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
-515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
-1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
-1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
-1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
-257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
-2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
-1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
-536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
-33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
-1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
-100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
-8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
-1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
-1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
-3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
-1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
-241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
-1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
};
if ((modelid >= 0) && ((modelid / 32) < sizeof (modeldat)) && (modeldat[modelid / 32] & (1 << (modelid % 32))))
{
return 1;
}
return 0;
}