Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MAX_STREAM_OBJECTS 400
- #define OBJECT_STREAM_DISTANCE 250.0
- #define MAX_STREAM_CHECKPOINTS 100
- #define CHECKPOINT_STREAM_DISTANCE 50.0
- #define STREAM_RATE 500
- #undef MAX_PLAYERS
- #define MAX_PLAYERS 50
- #define CAR 0
- #define BIKE 1
- #define MOTORBIKE 2
- #define BOAT 3
- #define PLANE 4
- #define RC 5
- #define TRAIN 6
- #define TRAILER 7
- #define HELICOPTER 8
- forward InitStreamer();
- forward StreamCheck();
- forward OnPlayerDisconnectStream(playerid);
- forward StopMoving(objectid);
- forward OnStreamObjectMoved(objectid);
- forward OnPlayerEnterStreamCheckpoint(playerid, checkpointid);
- forward OnPlayerLeaveStreamCheckpoint(playerid, checkpointid);
- new Players[MAX_PLAYERS + 1];
- new const WeaponNames[][] =
- {
- "Bronzová päsť",
- "Golfová palica",
- "Obušok",
- "Nôž",
- "Baseballová pálka",
- "Lopata",
- "Biliardová palica",
- "Katana",
- "Motorová píla",
- "Obojstranný umelý penis",
- "Umelý penis",
- "Vibrátor",
- "Strieborný vibrátor",
- "Kvetiny",
- "Palica",
- "Granát",
- "Slzný plyn",
- "Zápalná fľaša",
- "Pištol 9mm",
- "Pištol 9mm s tlmičom",
- "Desert Eagle",
- "Brokovnica",
- "Upílená brokovnica",
- "Bojová brokovnica",
- "Micro SMG",
- "MP5",
- "AK-47",
- "M4",
- "Tec-9",
- "Country Rifle",
- "Sniperka",
- "Raketomet",
- "Teplom navádzaný raketomet",
- "Plameňomet",
- "Rotačný gulomet",
- "Bomba v batohu",
- "Detonátor",
- "Sprej",
- "Hasiaci prístroj",
- "Foťák",
- "Nočné videnie",
- "IR videnie",
- "Padák"
- };
- new const VehicleNames[][] =
- {
- "Landstalker",
- "Bravura",
- "Buffalo",
- "Linerunner",
- "Perenniel",
- "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",
- "Article Trailer",
- "Previon",
- "Coach",
- "Cabbie",
- "Stallion",
- "Rumpo",
- "RC Bandit",
- "Romero",
- "Packer",
- "Monster",
- "Admiral",
- "Squallo",
- "Seasparrow",
- "Pizzaboy",
- "Tram",
- "Article Trailer 2",
- "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",
- "SAN News Maverick",
- "Rancher",
- "FBI Rancher",
- "Virgo",
- "Greenwood",
- "Jetmax",
- "Hotring Racer",
- "Sandking",
- "Blista Compact",
- "Police Maverick",
- "Boxville",
- "Benson",
- "Mesa",
- "RC Goblin",
- "Hotring Racer 2",
- "Hotring Racer 3",
- "Bloodring Banger",
- "Rancher 2",
- "Super GT",
- "Elegant",
- "Journey",
- "Bike",
- "Mountain Bike",
- "Beagle",
- "Cropduster",
- "Stuntplane",
- "Tanker",
- "Roadtrain",
- "Nebula",
- "Majestic",
- "Buccaneer",
- "Shamal",
- "Hydra",
- "FCR-900",
- "NRG-500",
- "HPV1000",
- "Cement Truck",
- "Towtruck",
- "Fortune",
- "Cadrona",
- "FBI Truck",
- "Willard",
- "Forklift",
- "Tractor",
- "Combine Harvester",
- "Feltzer",
- "Remington",
- "Slamvan",
- "Blade",
- "Freight",
- "Brownstreak",
- "Vortex",
- "Vincent",
- "Bullet",
- "Clover",
- "Sadler",
- "Firetruck LA",
- "Hustler",
- "Intruder",
- "Primo",
- "Cargobob",
- "Tampa",
- "Sunrise",
- "Merit",
- "Utility Van",
- "Nevada",
- "Yosemite",
- "Windsor",
- "Monster A",
- "Monster B",
- "Uranus",
- "Jester",
- "Sultan",
- "Stratum",
- "Elegy",
- "Raindance",
- "RC Tiger",
- "Flash",
- "Tahoma",
- "Savanna",
- "Bandito",
- "Freight Flat Trailer",
- "Streak Trailer",
- "Kart",
- "Mower",
- "Dune",
- "Sweeper",
- "Broadway",
- "Tornado",
- "AT400",
- "DFT-30",
- "Huntley",
- "Stafford",
- "BF-400",
- "Newsvan",
- "Tug",
- "Petrol Trailer",
- "Emperor",
- "Wayfarer",
- "Euros",
- "Hotdog",
- "Club",
- "Freight Box Trailer",
- "Article Trailer 3",
- "Andromada",
- "Dodo",
- "RC Cam",
- "Launch",
- "Police Car (LSPD)",
- "Police Car (SFPD)",
- "Police Car (LVPD)",
- "Police Ranger",
- "Picador",
- "S.W.A.T.",
- "Alpha",
- "Phoenix",
- "Glendale Shit",
- "Sadler Shit",
- "Baggage Trailer A",
- "Baggage Trailer B",
- "Tug Stairs Trailer",
- "Boxville 2",
- "Farm Trailer",
- "Utility Trailer"
- };
- enum ObjectData
- {
- OObjectID[MAX_PLAYERS],
- OModelID,
- OMoveTimer,
- OMoveTC,
- Float:OMoveDistance,
- Float:OMoveSpeed,
- Float:OStreamDistance,
- Float:OOldPosX,
- Float:OOldPosY,
- Float:OOldPosZ,
- Float:OOPx,
- Float:OOPy,
- Float:OOPz,
- Float:OORx,
- Float:OORy,
- Float:OORz
- };
- enum CheckpointData
- {
- bool:CPStreamed[MAX_PLAYERS],
- Float:CPSize,
- Float:CPStreamDistance,
- Float:CPPx,
- Float:CPPy,
- Float:CPPz
- };
- new StreamObjectInfo[MAX_STREAM_OBJECTS][ObjectData];
- new StreamCheckpointInfo[MAX_STREAM_CHECKPOINTS][CheckpointData];
- new bool:Init;
- stock bool:IsValidStreamObject(objectid) return objectid != INVALID_OBJECT_ID && StreamObjectInfo[objectid][OModelID];
- stock Float:multifloatadd(Float:...)
- {
- new Float:Count;
- for(new i; i<numargs(); i++) Count += Float:getarg(i, 0);
- return Count;
- }
- stock bool:GetStreamObjectPos(objectid, &Float:X, &Float:Y, &Float:Z)
- {
- if(!IsValidStreamObject(objectid)) return false;
- if(StreamObjectInfo[objectid][OMoveSpeed])
- {
- new Float:CTS = floatdiv(floatmul(StreamObjectInfo[objectid][OMoveSpeed], floatsub(GetTickCount(), StreamObjectInfo[objectid][OMoveTC])), 1000.0);
- CTS /= StreamObjectInfo[objectid][OMoveDistance];
- X = floatadd(StreamObjectInfo[objectid][OOldPosX], floatmul(floatsub(StreamObjectInfo[objectid][OOPx], StreamObjectInfo[objectid][OOldPosX]), CTS));
- Y = floatadd(StreamObjectInfo[objectid][OOldPosY], floatmul(floatsub(StreamObjectInfo[objectid][OOPy], StreamObjectInfo[objectid][OOldPosY]), CTS));
- Z = floatadd(StreamObjectInfo[objectid][OOldPosZ], floatmul(floatsub(StreamObjectInfo[objectid][OOPz], StreamObjectInfo[objectid][OOldPosZ]), CTS));
- }
- else
- {
- X = StreamObjectInfo[objectid][OOPx];
- Y = StreamObjectInfo[objectid][OOPy];
- Z = StreamObjectInfo[objectid][OOPz];
- }
- return true;
- }
- stock Float:GetStreamObjectXPos(objectid)
- {
- if(StreamObjectInfo[objectid][OMoveSpeed])
- {
- new Float:CTS = floatdiv(floatmul(StreamObjectInfo[objectid][OMoveSpeed], floatsub(GetTickCount(), StreamObjectInfo[objectid][OMoveTC])), 1000.0);
- CTS /= StreamObjectInfo[objectid][OMoveDistance];
- return floatadd(StreamObjectInfo[objectid][OOldPosX], floatmul(floatsub(StreamObjectInfo[objectid][OOPx], StreamObjectInfo[objectid][OOldPosX]), CTS));
- }
- else return StreamObjectInfo[objectid][OOPx];
- }
- stock Float:GetStreamObjectYPos(objectid)
- {
- if(StreamObjectInfo[objectid][OMoveSpeed])
- {
- new Float:CTS = floatdiv(floatmul(StreamObjectInfo[objectid][OMoveSpeed], floatsub(GetTickCount(), StreamObjectInfo[objectid][OMoveTC])), 1000.0);
- CTS /= StreamObjectInfo[objectid][OMoveDistance];
- return floatadd(StreamObjectInfo[objectid][OOldPosY], floatmul(floatsub(StreamObjectInfo[objectid][OOPy], StreamObjectInfo[objectid][OOldPosY]), CTS));
- }
- else return StreamObjectInfo[objectid][OOPy];
- }
- stock Float:GetStreamObjectZPos(objectid)
- {
- if(StreamObjectInfo[objectid][OMoveSpeed])
- {
- new Float:CTS = floatdiv(floatmul(StreamObjectInfo[objectid][OMoveSpeed], floatsub(GetTickCount(), StreamObjectInfo[objectid][OMoveTC])), 1000.0);
- CTS /= StreamObjectInfo[objectid][OMoveDistance];
- return floatadd(StreamObjectInfo[objectid][OOldPosZ], floatmul(floatsub(StreamObjectInfo[objectid][OOPz], StreamObjectInfo[objectid][OOldPosZ]), CTS));
- }
- else return StreamObjectInfo[objectid][OOPz];
- }
- stock Float:GetDistanceBetweenPoints(Float:X, Float:Y, Float:Z, Float:PointX, Float:PointY, Float:PointZ) return floatsqroot(multifloatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0), floatpower(floatsub(Z, PointZ), 2.0)));
- stock bool:CheckObjectStream(playerid)
- {
- if(!IsPlayerConnected(playerid)) return false;
- new Float:Ox, Float:Oy, Float:Oz;
- for(new o; o<MAX_STREAM_OBJECTS; o++)
- {
- GetStreamObjectPos(o, Ox, Oy, Oz);
- if(IsPlayerInRangeOfPoint(playerid, StreamObjectInfo[o][OStreamDistance], Ox, Oy, Oz))
- {
- if(IsValidStreamObject(o) && !IsValidPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid])) StreamObjectInfo[o][OObjectID][playerid] = CreatePlayerObject(playerid, StreamObjectInfo[o][OModelID], Ox, Oy, Oz, StreamObjectInfo[o][OORx], StreamObjectInfo[o][OORy], StreamObjectInfo[o][OORz], StreamObjectInfo[o][OStreamDistance]);
- if(StreamObjectInfo[o][OMoveSpeed]) MovePlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid], StreamObjectInfo[o][OOPx], StreamObjectInfo[o][OOPy], StreamObjectInfo[o][OOPz], StreamObjectInfo[o][OMoveSpeed]);
- }
- else if(IsValidPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid])) DestroyPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid]), StreamObjectInfo[o][OObjectID][playerid] = INVALID_OBJECT_ID;
- }
- return true;
- }
- stock bool:CheckObjectStreamOnPos(playerid, Float:X, Float:Y, Float:Z)
- {
- if(!IsPlayerConnected(playerid)) return false;
- new Float:Ox, Float:Oy, Float:Oz;
- for(new o; o<MAX_STREAM_OBJECTS; o++)
- {
- GetStreamObjectPos(o, Ox, Oy, Oz);
- if(GetDistanceBetweenPoints(X, Y, Z, Ox, Oy, Oz) <= StreamObjectInfo[o][OStreamDistance])
- {
- if(IsValidStreamObject(o) && !IsValidPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid])) StreamObjectInfo[o][OObjectID][playerid] = CreatePlayerObject(playerid, StreamObjectInfo[o][OModelID], Ox, Oy, Oz, StreamObjectInfo[o][OORx], StreamObjectInfo[o][OORy], StreamObjectInfo[o][OORz], StreamObjectInfo[o][OStreamDistance]);
- if(StreamObjectInfo[o][OMoveSpeed]) MovePlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid], StreamObjectInfo[o][OOPx], StreamObjectInfo[o][OOPy], StreamObjectInfo[o][OOPz], StreamObjectInfo[o][OMoveSpeed]);
- }
- else if(IsValidPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid])) DestroyPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid]), StreamObjectInfo[o][OObjectID][playerid] = INVALID_OBJECT_ID;
- }
- return true;
- }
- stock bool:UpdateStreamObject(objectid)
- {
- if(!IsValidStreamObject(objectid)) return false;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsValidPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i]))
- {
- new Float:Pos[3];
- GetStreamObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
- SetPlayerObjectPos(i, StreamObjectInfo[objectid][OObjectID][i], Pos[0], Pos[1], Pos[2]);
- SetPlayerObjectRot(i, StreamObjectInfo[objectid][OObjectID][i], StreamObjectInfo[objectid][OORx], StreamObjectInfo[objectid][OORy], StreamObjectInfo[objectid][OORz]);
- }
- return true;
- }
- stock CreateStreamObject(modelid, Float:X, Float:Y, Float:Z, Float:Rx, Float:Ry, Float:Rz, Float:StreamDistance = OBJECT_STREAM_DISTANCE)
- {
- if(!modelid) return INVALID_OBJECT_ID;
- if(StreamDistance > OBJECT_STREAM_DISTANCE || StreamDistance < 2.0) StreamDistance = OBJECT_STREAM_DISTANCE;
- for(new o; o<MAX_STREAM_OBJECTS; o++) if(!IsValidStreamObject(o))
- {
- StreamObjectInfo[o][OModelID] = modelid;
- StreamObjectInfo[o][OStreamDistance] = floatabs(StreamDistance);
- StreamObjectInfo[o][OOPx] = X;
- StreamObjectInfo[o][OOPy] = Y;
- StreamObjectInfo[o][OOPz] = Z;
- StreamObjectInfo[o][OORx] = Rx;
- StreamObjectInfo[o][OORy] = Ry;
- StreamObjectInfo[o][OORz] = Rz;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) CheckObjectStream(i);
- return o;
- }
- return INVALID_OBJECT_ID;
- }
- stock bool:DestroyStreamObject(objectid)
- {
- if(!IsValidStreamObject(objectid)) return false;
- if(StreamObjectInfo[objectid][OMoveSpeed])
- {
- StreamObjectInfo[objectid][OMoveDistance] = 0.0;
- StreamObjectInfo[objectid][OMoveSpeed] = 0.0;
- StreamObjectInfo[objectid][OMoveTC] = 0;
- KillTimer(StreamObjectInfo[objectid][OMoveTimer]);
- }
- StreamObjectInfo[objectid][OModelID] = 0;
- StreamObjectInfo[objectid][OStreamDistance] = 0.0;
- StreamObjectInfo[objectid][OOldPosX] = 0.0;
- StreamObjectInfo[objectid][OOldPosY] = 0.0;
- StreamObjectInfo[objectid][OOldPosZ] = 0.0;
- StreamObjectInfo[objectid][OOPx] = 0.0;
- StreamObjectInfo[objectid][OOPy] = 0.0;
- StreamObjectInfo[objectid][OOPz] = 0.0;
- StreamObjectInfo[objectid][OORx] = 0.0;
- StreamObjectInfo[objectid][OORy] = 0.0;
- StreamObjectInfo[objectid][OORz] = 0.0;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsValidPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i])) DestroyPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i]), StreamObjectInfo[objectid][OObjectID][i] = INVALID_OBJECT_ID;
- return true;
- }
- stock bool:SetStreamObjectPos(objectid, Float:X, Float:Y, Float:Z)
- {
- if(!IsValidStreamObject(objectid)) return false;
- StreamObjectInfo[objectid][OOPx] = X;
- StreamObjectInfo[objectid][OOPy] = Y;
- StreamObjectInfo[objectid][OOPz] = Z;
- UpdateStreamObject(objectid);
- return true;
- }
- stock bool:SetStreamObjectRot(objectid, Float:Rx, Float:Ry, Float:Rz)
- {
- if(!IsValidStreamObject(objectid)) return false;
- StreamObjectInfo[objectid][OORx] = Rx;
- StreamObjectInfo[objectid][OORy] = Ry;
- StreamObjectInfo[objectid][OORz] = Rz;
- UpdateStreamObject(objectid);
- return true;
- }
- stock bool:SetStreamObjectXRot(objectid, Float:Rx)
- {
- if(!IsValidStreamObject(objectid)) return false;
- StreamObjectInfo[objectid][OORx] = Rx;
- UpdateStreamObject(objectid);
- return true;
- }
- stock bool:SetStreamObjectYRot(objectid, Float:Ry)
- {
- if(!IsValidStreamObject(objectid)) return false;
- StreamObjectInfo[objectid][OORy] = Ry;
- UpdateStreamObject(objectid);
- return true;
- }
- stock bool:SetStreamObjectZRot(objectid, Float:Rz)
- {
- if(!IsValidStreamObject(objectid)) return false;
- StreamObjectInfo[objectid][OORz] = Rz;
- UpdateStreamObject(objectid);
- return true;
- }
- stock bool:GetStreamObjectRot(objectid, &Float:Rx, &Float:Ry, &Float:Rz)
- {
- if(!IsValidStreamObject(objectid)) return false;
- Rx = StreamObjectInfo[objectid][OORx];
- Ry = StreamObjectInfo[objectid][OORy];
- Rz = StreamObjectInfo[objectid][OORz];
- return true;
- }
- stock Float:GetStreamObjectXRot(objectid) return StreamObjectInfo[objectid][OORx];
- stock Float:GetStreamObjectYRot(objectid) return StreamObjectInfo[objectid][OORy];
- stock Float:GetStreamObjectZRot(objectid) return StreamObjectInfo[objectid][OORz];
- stock GetStreamObjectModel(objectid) return StreamObjectInfo[objectid][OModelID];
- stock Float:GetStreamObjectStreamDistance(objectid) return StreamObjectInfo[objectid][OStreamDistance];
- stock bool:SetStreamObjectStreamDistance(objectid, Float:StreamDistance = OBJECT_STREAM_DISTANCE)
- {
- if(!IsValidStreamObject(objectid)) return false;
- if(StreamDistance < 2.0 || StreamDistance > OBJECT_STREAM_DISTANCE) StreamDistance = OBJECT_STREAM_DISTANCE;
- StreamObjectInfo[objectid][OStreamDistance] = floatabs(StreamDistance);
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) CheckObjectStream(i);
- return true;
- }
- stock bool:StopStreamObject(objectid)
- {
- if(!IsValidStreamObject(objectid) || !StreamObjectInfo[objectid][OMoveSpeed]) return false;
- GetStreamObjectPos(objectid, StreamObjectInfo[objectid][OOPx], StreamObjectInfo[objectid][OOPy], StreamObjectInfo[objectid][OOPz]);
- StreamObjectInfo[objectid][OMoveTC] = 0;
- StreamObjectInfo[objectid][OMoveDistance] = 0.0;
- StreamObjectInfo[objectid][OMoveSpeed] = 0.0;
- StreamObjectInfo[objectid][OOldPosX] = 0.0;
- StreamObjectInfo[objectid][OOldPosY] = 0.0;
- StreamObjectInfo[objectid][OOldPosZ] = 0.0;
- KillTimer(StreamObjectInfo[objectid][OMoveTimer]);
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsValidPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i])) StopPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i]);
- return true;
- }
- stock bool:MoveStreamObject(objectid, Float:X, Float:Y, Float:Z, Float:Speed)
- {
- if(!IsValidStreamObject(objectid) || !Speed) return false;
- new Float:Ox, Float:Oy, Float:Oz;
- GetStreamObjectPos(objectid, Ox, Oy, Oz);
- if(!GetDistanceBetweenPoints(X, Y, Z, Ox, Oy, Oz)) return false;
- StreamObjectInfo[objectid][OMoveDistance] = GetDistanceBetweenPoints(X, Y, Z, Ox, Oy, Oz);
- StreamObjectInfo[objectid][OMoveSpeed] = Speed;
- StreamObjectInfo[objectid][OOldPosX] = Ox;
- StreamObjectInfo[objectid][OOldPosY] = Oy;
- StreamObjectInfo[objectid][OOldPosZ] = Oz;
- StreamObjectInfo[objectid][OMoveTC] = GetTickCount();
- new Time = floatround(floatdiv(floatdiv(floatmul(StreamObjectInfo[objectid][OMoveDistance], 1000.0), Speed), 1.11));
- StreamObjectInfo[objectid][OMoveTimer] = SetTimerEx("StopMoving", Time, false, "i", objectid);
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsValidPlayerObject(i, StreamObjectInfo[objectid][OObjectID][i])) MovePlayerObject(i, StreamObjectInfo[objectid][OObjectID][i], X, Y, Z, Speed);
- StreamObjectInfo[objectid][OOPx] = X;
- StreamObjectInfo[objectid][OOPy] = Y;
- StreamObjectInfo[objectid][OOPz] = Z;
- return true;
- }
- stock bool:SetPlayerPosStream(playerid, Float:X, Float:Y, Float:Z)
- {
- if(!IsPlayerConnected(playerid)) return false;
- CheckObjectStreamOnPos(playerid, X, Y, Z);
- if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z);
- else SetPlayerPos(playerid, X, Y, Z);
- return true;
- }
- public StopMoving(objectid)
- {
- StopStreamObject(objectid);
- CallLocalFunction("OnStreamObjectMoved", "i", objectid);
- return true;
- }
- public InitStreamer()
- {
- if(!Init) SetTimer("StreamCheck", STREAM_RATE, true), Init = true;
- return true;
- }
- stock bool:IsValidCheckpoint(checkpointid) return StreamCheckpointInfo[checkpointid][CPSize] != 0.0;
- stock bool:GetCheckpointPos(checkpointid, &Float:X, &Float:Y, &Float:Z)
- {
- if(!IsValidCheckpoint(checkpointid)) return false;
- X = StreamCheckpointInfo[checkpointid][CPPx];
- Y = StreamCheckpointInfo[checkpointid][CPPy];
- Z = StreamCheckpointInfo[checkpointid][CPPz];
- return true;
- }
- stock Float:GetCheckpointXPos(checkpointid) return StreamCheckpointInfo[checkpointid][CPPx];
- stock Float:GetCheckpointYPos(checkpointid) return StreamCheckpointInfo[checkpointid][CPPy];
- stock Float:GetCheckpointZPos(checkpointid) return StreamCheckpointInfo[checkpointid][CPPz];
- stock Float:GetCheckpointSize(checkpointid) return StreamCheckpointInfo[checkpointid][CPSize];
- stock Float:GetCheckpointStreamDistance(checkpointid) return StreamCheckpointInfo[checkpointid][CPStreamDistance];
- stock GetNearestCheckpoint(playerid)
- {
- new Float:NearestPos = CHECKPOINT_STREAM_DISTANCE;
- new Float:X, Float:Y, Float:Z;
- new NearestCheckpoint;
- for(new c = 1; c<MAX_STREAM_CHECKPOINTS; c++)
- {
- if(!GetCheckpointPos(c, X, Y, Z) || GetCheckpointStreamDistance(c) < GetPlayerDistanceFromPoint(playerid, X, Y, Z)) continue;
- if(NearestPos > GetPlayerDistanceFromPoint(playerid, X, Y, Z)) NearestPos = GetPlayerDistanceFromPoint(playerid, X, Y, Z), NearestCheckpoint = c;
- }
- return NearestCheckpoint;
- }
- stock GetPlayerCheckpoint(playerid)
- {
- for(new c = 1; c<MAX_STREAM_CHECKPOINTS; c++) if(StreamCheckpointInfo[c][CPStreamed][playerid]) return c;
- return 0;
- }
- stock bool:CheckCheckpointStream(playerid)
- {
- if(!IsPlayerConnected(playerid)) return false;
- new checkpointid = GetNearestCheckpoint(playerid);
- if(checkpointid && checkpointid != GetPlayerCheckpoint(playerid))
- {
- new Float:X, Float:Y, Float:Z;
- GetCheckpointPos(checkpointid, X, Y, Z);
- SetPlayerCheckpoint(playerid, X, Y, Z, GetCheckpointSize(checkpointid));
- if(GetPlayerCheckpoint(playerid)) StreamCheckpointInfo[GetPlayerCheckpoint(playerid)][CPStreamed][playerid] = false;
- StreamCheckpointInfo[checkpointid][CPStreamed][playerid] = true;
- }
- if(!checkpointid)
- {
- DisablePlayerCheckpoint(playerid);
- if(GetPlayerCheckpoint(playerid)) StreamCheckpointInfo[GetPlayerCheckpoint(playerid)][CPStreamed][playerid] = false;
- }
- return true;
- }
- stock bool:IsPlayerInAnyStreamCheckpoint(playerid)
- {
- new checkpointid = GetPlayerCheckpoint(playerid);
- if(!checkpointid) return false;
- new Float:X, Float:Y, Float:Z;
- GetCheckpointPos(checkpointid, X, Y, Z);
- return IsPlayerInCheckpoint(playerid) && IsPlayerInRangeOfPoint(playerid, GetCheckpointSize(checkpointid), X, Y, Z);
- }
- stock bool:IsPlayerInStreamCheckpoint(playerid, checkpointid)
- {
- if(!checkpointid || GetPlayerCheckpoint(playerid) != checkpointid) return false;
- new Float:X, Float:Y, Float:Z;
- GetCheckpointPos(checkpointid, X, Y, Z);
- return IsPlayerInCheckpoint(playerid) && IsPlayerInRangeOfPoint(playerid, GetCheckpointSize(checkpointid), X, Y, Z);
- }
- stock bool:SetCheckpointStreamDistance(checkpointid, Float:StreamDistance = CHECKPOINT_STREAM_DISTANCE)
- {
- if(!IsValidCheckpoint(checkpointid)) return false;
- if(!StreamDistance || StreamDistance > CHECKPOINT_STREAM_DISTANCE) StreamDistance = CHECKPOINT_STREAM_DISTANCE;
- StreamCheckpointInfo[checkpointid][CPStreamDistance] = floatabs(StreamDistance);
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(GetPlayerCheckpoint(i) == checkpointid) StreamCheckpointInfo[checkpointid][CPStreamed][i] = false, CheckCheckpointStream(i);
- return true;
- }
- stock CreateCheckpoint(Float:X, Float:Y, Float:Z, Float:Size, Float:StreamDistance = CHECKPOINT_STREAM_DISTANCE)
- {
- if(!Size) return 0;
- if(!StreamDistance || StreamDistance > CHECKPOINT_STREAM_DISTANCE) StreamDistance = CHECKPOINT_STREAM_DISTANCE;
- for(new c = 1; c<MAX_STREAM_CHECKPOINTS; c++) if(!IsValidCheckpoint(c))
- {
- StreamCheckpointInfo[c][CPPx] = X;
- StreamCheckpointInfo[c][CPPy] = Y;
- StreamCheckpointInfo[c][CPPz] = Z;
- StreamCheckpointInfo[c][CPSize] = Size;
- StreamCheckpointInfo[c][CPStreamDistance] = floatabs(StreamDistance);
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) CheckCheckpointStream(i);
- return c;
- }
- return 0;
- }
- stock bool:DestroyCheckpoint(checkpointid)
- {
- if(!IsValidCheckpoint(checkpointid)) return false;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(GetPlayerCheckpoint(i) == checkpointid) DisablePlayerCheckpoint(i), StreamCheckpointInfo[checkpointid][CPStreamed][i] = false;
- StreamCheckpointInfo[checkpointid][CPPx] = 0.0;
- StreamCheckpointInfo[checkpointid][CPPy] = 0.0;
- StreamCheckpointInfo[checkpointid][CPPz] = 0.0;
- StreamCheckpointInfo[checkpointid][CPSize] = 0.0;
- StreamCheckpointInfo[checkpointid][CPStreamDistance] = 0.0;
- return true;
- }
- public StreamCheck()
- {
- for(new i, p; p<strlen(Players); i = Players[p++] - 1)
- {
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(i, X, Y, Z);
- CheckObjectStream(i);
- CheckCheckpointStream(i);
- }
- return true;
- }
- public OnPlayerDisconnectStream(playerid)
- {
- for(new o; o<MAX_STREAM_OBJECTS; o++) if(IsValidPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid])) DestroyPlayerObject(playerid, StreamObjectInfo[o][OObjectID][playerid]), StreamObjectInfo[o][OObjectID][playerid] = INVALID_OBJECT_ID;
- StreamCheckpointInfo[GetPlayerCheckpoint(playerid)][CPStreamed][playerid] = false;
- DisablePlayerCheckpoint(playerid);
- return true;
- }
- stock DoNothing() return true;
- stock Name(playerid)
- {
- new PlayerName[MAX_PLAYER_NAME];
- GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
- return PlayerName;
- }
- stock minusrandom(max)
- {
- new rana[2];
- rana[0] = random(max);
- rana[1] = random(max);
- return rana[0] - rana[1];
- }
- stock bool:IsLetter(character) return tolower(character) != toupper(character);
- stock Split(const string[], strdest[][], destsize = sizeof(strdest), mdestsize = sizeof(strdest[]), separator = 32)
- {
- new lenght = strlen(string);
- new splitter[80], index;
- if(!lenght || !destsize || !separator || !mdestsize) return splitter;
- if(separator == -1) for(new i; i<destsize; i++)
- {
- while(index < lenght && !IsLetter(string[index])) index++;
- if(i < sizeof(splitter)) splitter[i] = index;
- new offset = index;
- if(i < destsize - 1) while(index < lenght && IsLetter(string[index]) && index - offset < mdestsize) strdest[i][index - offset] = string[index++];
- else while(index <= lenght && index - offset < mdestsize) strdest[i][index - offset] = string[index++];
- strdest[i][index - offset] = 0;
- }
- else for(new i; i<destsize; i++)
- {
- while(index < lenght && string[index] == separator) index++;
- if(i < sizeof(splitter)) splitter[i] = index;
- new offset = index;
- if(i < destsize - 1) while(index < lenght && string[index] != separator && index - offset < mdestsize) strdest[i][index - offset] = string[index++];
- else while(index <= lenght && index - offset < mdestsize) strdest[i][index - offset] = string[index++];
- strdest[i][index - offset] = 0;
- }
- return splitter;
- }
- stock bool:IsNumericChar(character) return 47 < character < 58;
- stock GetCharsCount(const string[], ...)
- {
- new Count, num = numargs();
- for(new n = 1; n<num; n++) for(new i; i<strlen(string); i++) if(getarg(n, 0) && string[i] == getarg(n, 0)) Count++;
- return Count;
- }
- stock GetNumericCharsCount(const string[]) return GetCharsCount(string, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57);
- stock bool:IsNumeric(const string[]) return GetNumericCharsCount(string) == strlen(string) && strlen(string);
- stock bool:RemoveChars(string[], ...)
- {
- new lenght = strlen(string), num = numargs();
- if(!lenght || num < 2) return false;
- for(new n = 1; n<num; n++) for(new i; i<lenght; i++) if(getarg(n, 0) && string[i] == getarg(n, 0)) strdel(string, i, i + 1), lenght--, i--;
- return true;
- }
- stock bool:GetNumericPartOfString(const string[], output[], &index, maxlength = sizeof(output))
- {
- new lenght = strlen(string);
- if(IsNumeric(string))
- {
- format(output, maxlength, string);
- return true;
- }
- if(!lenght || !GetNumericCharsCount(string)) return false;
- while(index < lenght && !IsNumericChar(string[index])) index++;
- new offset = index;
- while(index < lenght && IsNumericChar(string[index]) && index - offset < maxlength) output[index - offset] = string[index], index++;
- output[index - offset] = 0;
- return true;
- }
- stock GetVehicleType(vehicleid)
- {
- switch(GetVehicleModel(vehicleid))
- {
- case 400 .. 416, 418 .. 424, 426 .. 429, 431 .. 434, 436 .. 440, 442 .. 445, 451, 455 .. 459, 466, 467, 470, 471, 474, 475, 477 .. 480, 482, 483, 485, 486, 489 .. 492, 494 .. 496, 498 .. 500, 502 .. 508, 514 .. 518, 524 .. 536, 539 .. 547, 549 .. 552, 554 .. 562, 565 .. 568, 571 .. 576, 578 .. 580, 582, 583, 585, 587 .. 589, 596 .. 605, 609: return CAR;
- case 481, 509, 510: return BIKE;
- case 448, 461 .. 463, 468, 521 .. 523, 581, 586: return MOTORBIKE;
- case 430, 446, 452 .. 454, 472, 473, 484, 493, 595: return BOAT;
- case 460, 476, 511 .. 513, 519, 520, 553, 577, 592, 593: return PLANE;
- case 441, 464, 465, 501, 564, 594: return RC;
- case 449, 537, 538, 569, 570, 590: return TRAIN;
- case 435, 450, 584, 591, 606 .. 608, 610, 611: return TRAILER;
- case 417, 425, 447, 469, 487, 488, 497, 548, 563: return HELICOPTER;
- }
- return -1;
- }
- stock GetVehicleName(modelid)
- {
- new VehicleName[25];
- if(modelid < 400 || modelid > 611) VehicleName = "Invalid Vehicle Model";
- else format(VehicleName, sizeof(VehicleName), VehicleNames[modelid - 400]);
- return VehicleName;
- }
- stock GetVehicleModelFromName(const name[])
- {
- if(IsNumeric(name)) return strval(name);
- for(new i; i<sizeof(VehicleNames); i++) if(strfind(VehicleNames[i], name, true) != -1) return i + 400;
- new output[3], index;
- if(GetNumericPartOfString(name, output, index, sizeof(output)) && strval(output) < 612 && strval(output) > 399) return strval(output);
- return 0;
- }
- stock bool:IsAnyPlayerInVehicle(vehicleid)
- {
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsPlayerInVehicle(i, vehicleid)) return true;
- return false;
- }
- stock Float:Average(Float:...)
- {
- new num = numargs();
- new Float:Count;
- for(new i; i<num; i++) Count += Float:getarg(i, 0);
- return floatdiv(Count, num);
- }
- stock Float:PlayerAngle(playerid)
- {
- new Float:Angle;
- if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle);
- else GetPlayerFacingAngle(playerid, Angle);
- return Angle;
- }
- stock Float:VehicleAngle(vehicleid)
- {
- new Float:Angle;
- GetVehicleZAngle(vehicleid, Angle);
- return Angle;
- }
- stock GetPlayerForwardVelocity(playerid, &Float:Velocity, &Float:Z)
- {
- new Float:SpeedX, Float:SpeedY, Float:SpeedZ;
- GetPlayerVelocity(playerid, SpeedX, SpeedY, SpeedZ);
- SpeedX *= floatsin(-PlayerAngle(playerid), degrees);
- SpeedY *= floatcos(-PlayerAngle(playerid), degrees);
- Velocity = floatadd(SpeedX, SpeedY);
- Z = SpeedZ;
- return true;
- }
- stock GetVehicleForwardVelocity(vehicleid, &Float:Velocity, &Float:Z)
- {
- new Float:SpeedX, Float:SpeedY, Float:SpeedZ;
- GetVehicleVelocity(vehicleid, SpeedX, SpeedY, SpeedZ);
- SpeedX *= floatsin(-VehicleAngle(vehicleid), degrees);
- SpeedY *= floatcos(-VehicleAngle(vehicleid), degrees);
- Velocity = floatadd(SpeedX, SpeedY);
- Z = SpeedZ;
- return true;
- }
- stock tolowerstring(string[], bool:EnableSmileys = false)
- {
- for(new i; i<strlen(string); i++)
- {
- if(EnableSmileys)
- {
- if(string[i - 1] != 58 && string[i - 1] != 120) string[i] = tolower(string[i]);
- }
- else string[i] = tolower(string[i]);
- }
- return true;
- }
- stock toupperstring(string[])
- {
- for(new i; i<strlen(string); i++) string[i] = toupper(string[i]);
- return true;
- }
- stock swapstring(string[])
- {
- for(new i; i<strlen(string); i++)
- {
- if(string[i] == tolower(string[i])) string[i] = toupper(string[i]);
- else string[i] = tolower(string[i]);
- }
- return true;
- }
- stock SetPlayerForwardVelocity(playerid, Float:Velocity, Float:Z) return SetPlayerVelocity(playerid, floatmul(Velocity, floatsin(-PlayerAngle(playerid), degrees)), floatmul(Velocity, floatcos(-PlayerAngle(playerid), degrees)), Z);
- stock SetVehicleForwardVelocity(vehicleid, Float:Velocity, Float:Z) return SetVehicleVelocity(vehicleid, floatmul(Velocity, floatsin(-VehicleAngle(vehicleid), degrees)), floatmul(Velocity, floatcos(-VehicleAngle(vehicleid), degrees)), Z);
- stock GetVehicleDriver(vehicleid)
- {
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
- return INVALID_PLAYER_ID;
- }
- stock bool:strreplace(dest[], const string[], const replacestr[], bool:ignorecase = true, bool:ReplaceAll = true, maxlenght = sizeof(dest))
- {
- new pos = strfind(dest, string, ignorecase);
- if(!strlen(dest) || !strlen(string) || pos == -1 || strfind(replacestr, string, ignorecase) != -1) return false;
- if(ReplaceAll) while(pos != -1)
- {
- strdel(dest, pos, pos + strlen(string));
- strins(dest, replacestr, pos, maxlenght);
- pos = strfind(dest, string, ignorecase);
- }
- else strdel(dest, pos, pos + strlen(string)), strins(dest, replacestr, pos, maxlenght);
- return true;
- }
- stock bool:Reverse(string[], maxlenght = sizeof(string))
- {
- new index, lenght, rev[128];
- index = strlen(string);
- lenght = index;
- if(lenght <= 1) return false;
- for(new i; i<lenght; i++, index--) rev[i] = string[index];
- if(!strcmp(string, rev, false)) return false;
- format(string, maxlenght, rev);
- return true;
- }
- stock Float:PlayerHealth(playerid)
- {
- new Float:PlayerHealthValue;
- GetPlayerHealth(playerid, PlayerHealthValue);
- return PlayerHealthValue;
- }
- stock Float:PlayerArmour(playerid)
- {
- new Float:PlayerArmourValue;
- GetPlayerArmour(playerid, PlayerArmourValue);
- return PlayerArmourValue;
- }
- stock GetPlayerID(const name[], bool:ignorecase = false)
- {
- if(IsNumeric(name) && IsPlayerConnected(strval(name))) return strval(name);
- new output[3], index;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(IsPlayerConnected(i) && strfind(Name(i), name, ignorecase) != -1) return i;
- if(GetNumericPartOfString(name, output, index, sizeof(output)) && IsPlayerConnected(strval(output))) return strval(output);
- return INVALID_PLAYER_ID;
- }
- stock Float:GetDistanceBetweenFlatPoints(Float:X, Float:Y, Float:PointX, Float:PointY) return floatsqroot(floatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0)));
- stock bool:IsPlayerInFlatRangeOfPoint(playerid, Float:Range, Float:X, Float:Y)
- {
- new Float:PosX, Float:PosY, Float:Z;
- GetPlayerPos(playerid, PosX, PosY, Z);
- return GetDistanceBetweenFlatPoints(X, Y, PosX, PosY) <= floatabs(Range);
- }
- stock Float:GetDistanceBetweenPlayers(playerid, otherplayerid)
- {
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(playerid, X, Y, Z);
- return GetPlayerDistanceFromPoint(otherplayerid, X, Y, Z);
- }
- stock Float:GetPlayerSpeed(playerid, bool:Z = true)
- {
- new Float:SpeedX, Float:SpeedY, Float:SpeedZ;
- new Float:Speed;
- if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid), SpeedX, SpeedY, SpeedZ);
- else GetPlayerVelocity(playerid, SpeedX, SpeedY, SpeedZ);
- if(Z) Speed = floatsqroot(multifloatadd(floatpower(SpeedX, 2.0), floatpower(SpeedY, 2.0), floatpower(SpeedZ, 2.0)));
- else Speed = floatsqroot(floatadd(floatpower(SpeedX, 2.0), floatpower(SpeedY, 2.0)));
- return floatmul(Speed, 200.0);
- }
- stock Float:GetPlayerForwardSpeed(playerid)
- {
- new Float:Speed, Float:Z;
- if(IsPlayerInAnyVehicle(playerid)) GetVehicleForwardVelocity(GetPlayerVehicleID(playerid), Speed, Z);
- else GetPlayerForwardVelocity(playerid, Speed, Z);
- return floatmul(Speed, 200.0);
- }
- stock bool:IsPlayerMoving(playerid) return GetPlayerSpeed(playerid) > 0.1;
- stock Float:SpecAngleValue(Float:Angle) return Angle < 0.0 ? floatadd(360.0, Angle) : (Angle > 360.0 ? floatsub(Angle, 360.0) : Angle);
- stock Float:GetAngleFromPosToPos(Float:X, Float:Y, Float:PointX, Float:PointY)
- {
- if(!GetDistanceBetweenFlatPoints(X, Y, PointX, PointY)) return 0.0;
- new Float:Angle;
- if(X > PointX && Y > PointY) Angle = floatabs(atan2(floatsub(PointX, X), floatsub(PointY, Y)));
- if(X > PointX && Y <= PointY) Angle = floatsub(floatabs(atan2(floatsub(Y, PointY), floatsub(PointX, X))), 90.0);
- if(X <= PointX && Y > PointY) Angle = floatadd(floatabs(atan2(floatsub(PointY, Y), floatsub(X, PointX))), 90.0);
- if(X <= PointX && Y <= PointY) Angle = floatadd(floatabs(atan2(floatsub(X, PointX), floatsub(Y, PointY))), 180.0);
- return Angle;
- }
- stock bool:IsPlayerFacingPoint(playerid, Float:PointX, Float:PointY, Float:Range = 10.0)
- {
- new Float:FacingAngle = PlayerAngle(playerid), Float:Angle;
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(playerid, X, Y, Z);
- Angle = GetAngleFromPosToPos(X, Y, PointX, PointY);
- return SpecAngleValue(floatsub(FacingAngle, floatdiv(Range, 2.0))) <= Angle && SpecAngleValue(floatadd(FacingAngle, floatdiv(Range, 2.0))) >= Angle;
- }
- stock bool:IsPlayerFacingPlayer(playerid, faceplayerid, Float:Range = 10.0)
- {
- if(playerid == faceplayerid) return false;
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(faceplayerid, X, Y, Z);
- return IsPlayerFacingPoint(playerid, X, Y, Range);
- }
- stock Float:SetPlayerFaceToPoint(playerid, Float:PointX, Float:PointY)
- {
- new Float:X, Float:Y, Float:Z;
- new Float:Angle;
- GetPlayerPos(playerid, X, Y, Z);
- Angle = GetAngleFromPosToPos(X, Y, PointX, PointY);
- if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) SetVehicleZAngle(GetPlayerVehicleID(playerid), Angle);
- else SetPlayerFacingAngle(playerid, Angle);
- return Angle;
- }
- stock Float:SetPlayerFaceFromPoint(playerid, Float:PointX, Float:PointY)
- {
- new Float:X, Float:Y, Float:Z;
- new Float:Angle;
- GetPlayerPos(playerid, X, Y, Z);
- Angle = floatadd(GetAngleFromPosToPos(X, Y, PointX, PointY), 180.0);
- if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) SetVehicleZAngle(GetPlayerVehicleID(playerid), Angle);
- else SetPlayerFacingAngle(playerid, Angle);
- return Angle;
- }
- stock Float:SetPlayerFaceToPlayer(playerid, faceplayerid)
- {
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(faceplayerid, X, Y, Z);
- return SetPlayerFaceToPoint(playerid, X, Y);
- }
- stock Float:SetPlayerFaceFromPlayer(playerid, faceplayerid)
- {
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(faceplayerid, X, Y, Z);
- return SetPlayerFaceFromPoint(playerid, X, Y);
- }
- stock GetNearestVehicle(playerid, Float:Distance = 1000.0)
- {
- if(!Distance) Distance = 1000.0;
- new Float:X, Float:Y, Float:Z, Float:NearestPos = floatabs(Distance), NearestVehicle = INVALID_VEHICLE_ID;
- for(new i; i<MAX_VEHICLES; i++)
- {
- if(!IsVehicleStreamedIn(i, playerid) || IsPlayerInVehicle(playerid, i)) continue;
- GetVehiclePos(i, X, Y, Z);
- if(NearestPos > GetPlayerDistanceFromPoint(playerid, X, Y, Z)) NearestPos = GetPlayerDistanceFromPoint(playerid, X, Y, Z), NearestVehicle = i;
- }
- return NearestVehicle;
- }
- stock GetNearestEmptyVehicle(playerid, bool:Mode, Float:Distance = 1000.0)
- {
- if(!Distance) Distance = 1000.0;
- new Float:X, Float:Y, Float:Z, Float:NearestPos = floatabs(Distance), NearestVehicle = INVALID_VEHICLE_ID;
- for(new i; i<MAX_VEHICLES; i++)
- {
- if(!IsVehicleStreamedIn(i, playerid) || IsPlayerInVehicle(playerid, i)) continue;
- if(Mode && GetVehicleDriver(i) != INVALID_PLAYER_ID) continue;
- else if(!Mode && IsAnyPlayerInVehicle(i)) continue;
- GetVehiclePos(i, X, Y, Z);
- if(NearestPos > GetPlayerDistanceFromPoint(playerid, X, Y, Z)) NearestPos = GetPlayerDistanceFromPoint(playerid, X, Y, Z), NearestVehicle = i;
- }
- return NearestVehicle;
- }
- stock GetNearestPlayer(playerid, Float:Distance = 100000.0)
- {
- if(!Distance) Distance = 100000.0;
- new Float:NearestPos = floatabs(Distance), NearestPlayer = INVALID_PLAYER_ID;
- for(new i, p; p<strlen(Players); i = Players[p++] - 1) if(NearestPos > GetDistanceBetweenPlayers(playerid, i)) NearestPos = GetDistanceBetweenPlayers(playerid, i), NearestPlayer = i;
- return NearestPlayer;
- }
- stock bool:IsBigChar(character) return tolower(character) == character ? false : true;
- stock GetBigCharsCount(const string[])
- {
- new Count;
- for(new i; i<strlen(string); i++) if(IsBigChar(string[i])) Count++;
- return Count;
- }
- stock PlayerIp(playerid)
- {
- new IP[15];
- GetPlayerIp(playerid, IP, sizeof(IP));
- return IP;
- }
- stock abs(value) return value < 0 ? -value : value;
- stock bool:GetPosInFrontOfPoint(&Float:OutputX, &Float:OutputY, Float:Angle, Float:Distance)
- {
- if(!Distance) return false;
- OutputX += floatmul(Distance, floatsin(-Angle, degrees));
- OutputY += floatmul(Distance, floatcos(-Angle, degrees));
- return true;
- }
- stock bool:GetPosInFrontOfPlayer(playerid, &Float:OutputX, &Float:OutputY, &Float:OutputZ, Float:Distance)
- {
- if(!IsPlayerConnected(playerid) || !Distance) return false;
- GetPlayerPos(playerid, OutputX, OutputY, OutputZ);
- GetPosInFrontOfPoint(OutputX, OutputY, PlayerAngle(playerid), Distance);
- return true;
- }
- stock bool:ExistAccount(playerid)
- {
- new Account[50];
- format(Account, sizeof(Account), "Source/Login/%s.acc", Name(playerid));
- return bool:fexist(Account);
- }
- stock bool:RemoveAccount(playerid)
- {
- new Account[50];
- format(Account, sizeof(Account), "Source/Login/%s.acc", Name(playerid));
- return bool:fremove(Account);
- }
- stock bool:IsValidEmail(const address[]) return strlen(address) > 10 && strlen(address) < 50 && !GetCharsCount(address, 32) && GetCharsCount(address, 64) == 1;
- stock bool:IsValidDate(day, month, year)
- {
- new actual_day, actual_month, actual_year;
- getdate(actual_year, actual_month, actual_day);
- if(day < 1 || month < 1 || year < 1 || day > 31 || month > 12 || year > actual_year) return false;
- if(year == actual_year)
- {
- if(month > actual_month) return false;
- if(month == actual_month && day > actual_day) return false;
- }
- switch(month)
- {
- case 2: if((year % 4 && day > 28) || day > 29) return false;
- case 4, 6, 9, 11: if(day == 31) return false;
- }
- return true;
- }
- stock Wait(interval)
- {
- new TickCount = GetTickCount();
- while(GetTickCount() - TickCount < interval) DoNothing();
- return true;
- }
- stock WriteToLog(const string[])
- {
- new File:Log;
- if(!fexist("Source/Server.log")) Log = fopen("Source/Server.log", io_write);
- else Log = fopen("Source/Server.log", io_append);
- new Year, Month, Day, Hour, Minute, Second;
- getdate(Year, Month, Day);
- gettime(Hour, Minute, Second);
- new LogMessage[128];
- format(LogMessage, sizeof(LogMessage), "[%i. %i. %i - %i:%i:%i] %s\r\n", Day, Month, Year, Hour, Minute, Second, string);
- fwrite(Log, LogMessage);
- fclose(Log);
- return true;
- }
- stock bool:IsKeyJustPressed(key, newkeys, oldkeys) return newkeys & key && !(oldkeys & key);
- stock bool:IsKeyJustReleased(key, newkeys, oldkeys) return !(newkeys & key) && oldkeys & key;
- stock GetVehiclePanelsDamageStatus(vehicleid, &FrontLeft, &FrontRight, &RearLeft, &RearRight, &WindShield, &FrontBumper, &RearBumper)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- FrontLeft = Panels & 15;
- FrontRight = Panels >> 4 & 15;
- RearLeft = Panels >> 8 & 15;
- RearRight = Panels >> 12 & 15;
- WindShield = Panels >> 16 & 15;
- FrontBumper = Panels >> 20 & 15;
- RearBumper = Panels >> 24 & 15;
- return true;
- }
- stock GetVehicleDoorsDamageStatus(vehicleid, &Bonnet, &Boot, &FrontLeft, &FrontRight, &RearLeft, &RearRight)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- Bonnet = Doors & 7;
- Boot = Doors >> 8 & 7;
- FrontLeft = Doors >> 16 & 7;
- FrontRight = Doors >> 24 & 7;
- RearLeft = Doors >> 32 & 7;
- RearRight = Doors >> 40 & 7;
- return true;
- }
- stock GetVehicleLightsDamageStatus(vehicleid, &First, &Second, &Third, &Fourth)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- First = Lights & 1;
- Second = Lights >> 1 & 1;
- Third = Lights >> 2 & 1;
- Fourth = Lights >> 3 & 1;
- return true;
- }
- stock GetVehicleTiresDamageStatus(vehicleid, &FrontLeft, &FrontRight, &RearLeft, &RearRight)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- if(GetVehicleType(vehicleid) == MOTORBIKE || GetVehicleType(vehicleid) == BIKE) FrontLeft = Tires >> 1 & 1, FrontRight = Tires & 1;
- else
- {
- RearRight = Tires & 1;
- FrontRight = Tires >> 1 & 1;
- RearLeft = Tires >> 2 & 1;
- FrontLeft = Tires >> 3 & 1;
- }
- return true;
- }
- stock UpdateVehiclePanelsDamageStatus(vehicleid, FrontLeft, FrontRight, RearLeft, RearRight, WindShield, FrontBumper, RearBumper)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- return UpdateVehicleDamageStatus(vehicleid, FrontLeft | (FrontRight << 4) | (RearLeft << 8) | (RearRight << 12) | (WindShield << 16) | (FrontBumper << 20) | (RearBumper << 24), Doors, Lights, Tires);
- }
- stock UpdateVehicleDoorsDamageStatus(vehicleid, Bonnet, Boot, FrontLeft, FrontRight, RearLeft, RearRight)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- return UpdateVehicleDamageStatus(vehicleid, Panels, Bonnet | (Boot << 8) | (FrontLeft << 16) | (FrontRight << 24) | (RearLeft << 32) | (RearRight << 40), Lights, Tires);
- }
- stock UpdateVehicleLightsDamageStatus(vehicleid, First, Second, Third, Fourth)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- return UpdateVehicleDamageStatus(vehicleid, Panels, Doors, First | (Second << 1) | (Third << 2) | (Fourth << 3), Tires);
- }
- stock UpdateVehicleTiresDamageStatus(vehicleid, FrontLeft, FrontRight, RearLeft, RearRight)
- {
- new Panels, Doors, Lights, Tires;
- GetVehicleDamageStatus(vehicleid, Panels, Doors, Lights, Tires);
- if(GetVehicleType(vehicleid) == MOTORBIKE || GetVehicleType(vehicleid) == BIKE) return UpdateVehicleDamageStatus(vehicleid, Panels, Doors, Lights, FrontRight | (FrontLeft << 1));
- else return UpdateVehicleDamageStatus(vehicleid, Panels, Doors, Lights, RearRight | (FrontRight << 1) | (RearLeft << 2) | (FrontLeft << 3));
- }
- stock ColorToRGBA(Color, &R, &G, &B, &A)
- {
- R = Color >> 24 & 255;
- G = Color >> 16 & 255;
- B = Color >> 8 & 255;
- A = Color & 255;
- return true;
- }
- stock RGBAToColor(R, G, B, A) return (R << 24) | (G << 16) | (B << 8) | A;
- stock CrashClient(playerid)
- {
- if(!IsPlayerConnected(playerid)) return false;
- return GameTextForPlayer(playerid, "~k~~INVALID_KEY~", 100, 4);
- }
- stock bool:IsValidVehicle(vehicleid) return GetVehicleModel(vehicleid) != 0;
- stock bool:strbool(const string[]) return strval(string) > 0 || !strcmp(string, "true", true, 4);
- stock boolstr(bool:Value)
- {
- new str[6];
- if(Value) str = "true";
- else str = "false";
- return str;
- }
- stock RandomColor(bool:Transparency = true) return RGBAToColor(random(256), random(256), random(256), Transparency ? 255 : random(256));
- stock bool:Invert(&bool:InvertVar) return InvertVar = !InvertVar;
- stock SimplifyText(string[], lower = false, iychange = false)
- {
- if(!strlen(string)) return false;
- new ChVar[13][4] = {"áä", "ćč", "ď", "éěë", "í", "ľĺł", "ňń", "óôö", "ŕř", "šś", "úüů", "ý", "žź"};
- new Edited, SVar[] = {'a', 'c', 'd', 'e', 'i', 'l', 'n', 'o', 'r', 's', 'u', 'y', 'z'};
- if(lower && GetBigCharsCount(string)) tolowerstring(string, false), Edited = true;
- for(new i; i<strlen(string); i++)
- {
- for(new c; c<sizeof(ChVar); c++) for(new s; s<sizeof(ChVar[]); s++) if(tolower(string[i]) == ChVar[c][s]) Edited++, string[i] = IsBigChar(string[i]) ? toupper(SVar[c]) : SVar[c];
- if(iychange && tolower(string[i]) == 'y') Edited++, string[i] = IsBigChar(string[i]) ? 'I' : 'i';
- }
- return Edited;
- }
- stock ShrinkText(string[], VowelOnly = true)
- {
- if(!strlen(string)) return false;
- new simplestr[250], Changes[100], Count;
- new Vowel[] = {'a', 'e', 'i', 'o', 'u', 'y'};
- format(simplestr, sizeof(simplestr), string);
- SimplifyText(simplestr, true, false);
- for(new i; i<strlen(string); i++) if(simplestr[i] == simplestr[i + 1])
- {
- if(VowelOnly)
- {
- for(new p; p<sizeof(Vowel); p++) if(simplestr[i] == Vowel[p]) Changes[Count++] = i;
- }
- else Changes[Count++] = i;
- }
- for(new i = strlen(Changes) - 1; i >= 0; i--) strdel(string, Changes[i], Changes[i] + 1);
- return Count;
- }
- stock bool:IsPlayerInZone(playerid, Float:X1, Float:Y1, Float:X2, Float:Y2, Float:Z = 0.0, Float:ZTolerance = 0.0)
- {
- new Float:PP[3];
- GetPlayerPos(playerid, PP[0], PP[1], PP[2]);
- if(!Z || !ZTolerance) return (X1 <= PP[0] <= X2 || X2 <= PP[0] <= X1) && (Y1 <= PP[1] <= Y2 || Y2 <= PP[1] <= Y1);
- else return (X1 <= PP[0] <= X2 || X2 <= PP[0] <= X1) && (Y1 <= PP[1] <= Y2 || Y2 <= PP[1] <= Y1) && floatsub(Z, ZTolerance) <= PP[2] && PP[2] <= floatadd(Z, ZTolerance);
- }
Advertisement
Add Comment
Please, Sign In to add comment