| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636 |
- /*
- /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
- | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
- | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
- | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
- | $$\ $$$| $$ \ $$ | $$ \ $$| $$
- | $$ \ $$| $$$$$$/ | $$ | $$| $$
- |__/ \__/ \______/ |__/ |__/|__/
- Dynamic Camera System
- Next Generation Gaming, LLC
- (created by Next Generation Gaming Development Team)
-
- * Copyright (c) 2016, Next Generation Gaming, LLC
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are not permitted in any case.
- *
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #include <YSI\y_hooks>
- hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
- if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
- if (dialogid == SPEEDCAM_DIALOG_MAIN)
- {
- if (!response) return 1;
- switch (listitem)
- {
- case 0:
- {
- if (SpeedCameras[MAX_SPEEDCAMERAS - 1][_scActive])
- return SendClientMessageEx(playerid, COLOR_GREY, "No more static speed cameras can be created.");
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_RANGEC, DIALOG_STYLE_INPUT, "{FFFF00}Create a speed camera", "{FFFFFF}Enter the range of your camera.", "OK", "Back");
- }
- case 1:
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to edit.", "OK", "Back");
- }
- case 2:
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_DELETE, DIALOG_STYLE_INPUT, "{FFFF00}Delete a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to delete.", "OK", "Back");
- }
- case 3:
- {
- new Float:playerPos[3];
- GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
- new Float:distances[MAX_SPEEDCAMERAS];
- for (new c = 0; c < MAX_SPEEDCAMERAS; c++)
- {
- distances[c] = -1.000;
- if (SpeedCameras[c][_scActive] == true)
- {
- new Float:tmpPos[3];
- tmpPos[0] = SpeedCameras[c][_scPosX];
- tmpPos[1] = SpeedCameras[c][_scPosY];
- tmpPos[2] = SpeedCameras[c][_scPosZ];
- new Float:distance = floatsqroot(((playerPos[0] - tmpPos[0]) * (playerPos[0] - tmpPos[0])) + ((playerPos[1] - tmpPos[1]) * (playerPos[1] - tmpPos[1])) \
- + ((playerPos[2] - tmpPos[2]) * ((playerPos[2] - tmpPos[2]))));
- distances[c] = distance;
- }
- }
-
- new lowest_index = -1;
- for (new i = 0; i < MAX_SPEEDCAMERAS; i++)
- {
- if (distances[i] != -1.000)
- {
- if (lowest_index == -1.000)
- {
- lowest_index = i;
- }
- else
- {
- if (distances[i] < distances[lowest_index])
- lowest_index = i;
- }
- }
- }
- if (lowest_index == -1) // no cameras exist, the closest cannot be calculated
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_GETNEAREST, DIALOG_STYLE_MSGBOX, "{FFFF00}Nearest speed camera", "{FFFFFF}No speed cameras exist, and thus the closest cannot be found.", "OK", "");
- }
- else
- {
- new msg[128];
- format(msg, sizeof(msg), "{FFFFFF}The nearest speed camera is: {FFFF00}%i\n\n{FFFFFF}With a distance of {FFFF00}%f", lowest_index, distances[lowest_index]);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_GETNEAREST, DIALOG_STYLE_MSGBOX, "{FFFF00}Nearest speed camera", msg, "OK", "");
- }
- }
- }
- }
- if (dialogid == SPEEDCAM_DIALOG_RANGEC)
- {
- if (!response)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", \
- "Create a speed camera\nEdit a speed camera\nDelete a speed camera\nGet nearest speedcamera", "Select", "Cancel");
- new Float:range;
- if (sscanf(inputtext, "f", range))
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_RANGEC, DIALOG_STYLE_INPUT, "{FFFF00}Create a speed camera", "{FFFFFF}Enter the range of your camera.\
- \n\n{FFFF00}Value must be a number (decimal places allowed).", "OK", "Back");
- }
- SetPVarFloat(playerid, "_scCacheRange", range);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_LIMIT, DIALOG_STYLE_INPUT, "{FFFF00}Create a speed camera", "{FFFFFF}Enter the limit of your camera (mph).", "OK", "Back");
- }
- if (dialogid == SPEEDCAM_DIALOG_LIMIT)
- {
- if (!response)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_RANGEC, DIALOG_STYLE_INPUT, "{FFFF00}Create a speed camera", "{FFFFFF}Enter the range of your camera.", "OK", "Back");
- new Float:limit;
- if (sscanf(inputtext, "f", limit))
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_LIMIT, DIALOG_STYLE_INPUT, "{FFFF00}Create a speed camera", "{FFFFFF}Enter the limit of your camera (mph).\
- \n\n{FFFF00}Value must be a number (decimal places allowed).", "OK", "Back");
- }
- SetPVarFloat(playerid, "_scCacheLimit", limit);
- new Float:range = GetPVarFloat(playerid, "_scCacheRange");
- new content[256];
- format(content, sizeof(content), "{FFFF00}Range: {FFFFFF}%f\n{FFFF00}Limit: {FFFFFF}%f mph\n\nAre you sure you want to create this speed camera?", range, limit);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_OVERVIEW, DIALOG_STYLE_MSGBOX, "{FFFF00}Speed camera overview", content, "Confirm", "Cancel");
- }
- if (dialogid == SPEEDCAM_DIALOG_OVERVIEW)
- {
- if (!response)
- {
- DeletePVar(playerid, "_scCacheRange");
- DeletePVar(playerid, "_scCacheLimit");
- return SendClientMessageEx(playerid, COLOR_RED, "Cancelled creation of speed camera.");
- }
- if (SpeedCameras[MAX_SPEEDCAMERAS - 1][_scActive])
- {
- DeletePVar(playerid, "_scCacheRange");
- DeletePVar(playerid, "_scCacheLimit");
- return SendClientMessageEx(playerid, COLOR_RED, "Error: Limit was reached whilst you were creating this camera.");
- }
- new Float:range = GetPVarFloat(playerid, "_scCacheRange");
- new Float:limit = GetPVarFloat(playerid, "_scCacheLimit");
- DeletePVar(playerid, "_scCacheRange");
- DeletePVar(playerid, "_scCacheLimit");
- new Float:x, Float:y, Float:z, Float:angle;
- GetPlayerPos(playerid, x, y, z);
- GetPlayerFacingAngle(playerid, angle);
- z -= 3.00000; // for height issues
- angle += 180; // flip the angle
- new cam = CreateSpeedCamera(x, y, z, angle, range, limit);
- SendClientMessageEx(playerid, COLOR_GREEN, "Speed camera created!");
- new logText[128];
- format(logText, sizeof(logText), "%s(%d) has placed speed camera %d at [%f, %f, %f] with limit %f and range %f.",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), SpeedCameras[cam][_scDatabase], SpeedCameras[cam][_scPosX], SpeedCameras[cam][_scPosY], SpeedCameras[cam][_scPosZ], SpeedCameras[cam][_scLimit], SpeedCameras[cam][_scRange]);
- Log("logs/speedcam.log", logText);
- }
- if (dialogid == SPEEDCAM_DIALOG_EDIT)
- {
- if (!response)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera", \
- "Select", "Cancel");
- new id;
- if (sscanf(inputtext, "i", id))
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to edit.\n\n\
- {FFFF00}ID must be a number.", "OK", "Back");
- if (id >= MAX_SPEEDCAMERAS || id < 0)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to edit.\n\n\
- {FFFF00}ID must not be above the maximum or below 0.", "OK", "Back");
- if (SpeedCameras[id][_scActive] == false)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to edit.\n\n\
- {FFFF00}No active speed camera with that ID.", "OK", "Back");
- SetPVarInt(playerid, "_scCacheEditId", id);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- if (dialogid == SPEEDCAM_DIALOG_EDIT_IDX)
- {
- if (!response)
- {
- DeletePVar(playerid, "_scCacheEditId");
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera", \
- "Select", "Cancel");
- }
- switch (listitem)
- {
- case 0:
- {
- new Float:x, Float:y, Float:z, Float:angle;
- GetPlayerPos(playerid, x, y, z);
- GetPlayerFacingAngle(playerid, angle);
- new id = GetPVarInt(playerid, "_scCacheEditId");
- SpeedCameras[id][_scPosX] = x;
- SpeedCameras[id][_scPosY] = y;
- SpeedCameras[id][_scPosZ] = z;
- SpeedCameras[id][_scRotation] = angle - 180;
- SetDynamicObjectPos(SpeedCameras[id][_scObjectId], x, y, z-3.000);
- SetDynamicObjectRot(SpeedCameras[id][_scObjectId], 0, 0, angle - 180);
- SetPlayerPos(playerid, x + 1, y, z);
- SaveSpeedCamera(id);
- SendClientMessageEx(playerid, COLOR_WHITE, "Speed camera moved.");
- new logText[128];
- format(logText, sizeof(logText), "%s(%d) has moved speed camera %d to [%f, %f, %f]",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), SpeedCameras[id][_scDatabase], SpeedCameras[id][_scPosX], SpeedCameras[id][_scPosY], SpeedCameras[id][_scPosZ]);
- Log("logs/speedcam.log", logText);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- case 1:
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_ROT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new (Z) angle of the speed camera.", "OK", "Back");
- }
- case 2:
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_RANGE, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new range of the speed camera.", "OK", "Back");
- }
- case 3:
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_LIMIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new speed limit of the speed camera (mph).", "OK", "Back");
- }
- }
- }
- if (dialogid == SPEEDCAM_DIALOG_EDIT_ROT)
- {
- if (!response)
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- new Float:angle;
- if (sscanf(inputtext, "f", angle))
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_ROT, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new (Z) angle of the speed camera.\n\n\
- {FFFF00}The angle must be a number (decimals allowed).", "OK", "Back");
- }
- new id = GetPVarInt(playerid, "_scCacheEditId");
- SetDynamicObjectRot(SpeedCameras[id][_scObjectId], 0, 0, angle);
- SpeedCameras[id][_scRotation] = angle;
- SaveSpeedCamera(id);
- SendClientMessageEx(playerid, COLOR_WHITE, "Speed camera's Z-angle changed.");
- new logText[128];
- format(logText, sizeof(logText), "%s(%d) has changed speed camera %d's z-angle to %f",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), SpeedCameras[id][_scDatabase], SpeedCameras[id][_scRotation]);
- Log("logs/speedcam.log", logText);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- if (dialogid == SPEEDCAM_DIALOG_EDIT_RANGE)
- {
- if (!response)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- new Float:range;
- if (sscanf(inputtext, "f", range))
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_RANGE, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new range of the speed camera.\n\n\
- {FFFF00}Range must be a number (decimals allowed).", "OK", "Back");
- }
- new id = GetPVarInt(playerid, "_scCacheEditId");
- SpeedCameras[id][_scRange] = range;
- SaveSpeedCamera(id);
- SendClientMessageEx(playerid, COLOR_WHITE, "Speed camera's ranged changed.");
- new logText[128];
- format(logText, sizeof(logText), "%s(%d) has changed speed camera %d's range to %f",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), SpeedCameras[id][_scDatabase], SpeedCameras[id][_scRange]);
- Log("logs/speedcam.log", logText);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- if (dialogid == SPEEDCAM_DIALOG_EDIT_LIMIT)
- {
- if (!response)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- new Float:limit;
- if (sscanf(inputtext, "f", limit))
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_LIMIT, DIALOG_STYLE_INPUT, "{FFFF00}Edit a speed camera", "{FFFFFF}Enter the new speed limit of the speed camera (mph).\n\n\
- {FFFF00}Limit must be a number (decimals allowed).", "OK", "Back");
- }
- new id = GetPVarInt(playerid, "_scCacheEditId");
- SpeedCameras[id][_scLimit] = limit;
- new szLimit[50];
- format(szLimit, sizeof(szLimit), "{FFFFFF}Speed Limit\n{FF0000}%i {FFFFFF}MPH", floatround(SpeedCameras[id][_scLimit], floatround_round));
- UpdateDynamic3DTextLabelText(SpeedCameras[id][_scTextID], COLOR_TWWHITE, szLimit);
- SaveSpeedCamera(id);
- SendClientMessageEx(playerid, COLOR_WHITE, "Speed camera's limit changed.");
- new logText[128];
- format(logText, sizeof(logText), "%s(%d) has changed speed camera %d's limit to %f",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), SpeedCameras[id][_scDatabase], SpeedCameras[id][_scLimit]);
- Log("logs/speedcam.log", logText);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_EDIT_IDX, DIALOG_STYLE_LIST, "{FFFF00}Edit a speed camera", "Move position to player\nSet angle\nSet range\nSet limit", "Select", "Back");
- }
- if (dialogid == SPEEDCAM_DIALOG_DELETE)
- {
- if (!response)
- {
- DeletePVar(playerid, "_scCacheDeleteId");
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera (static only)", \
- "Select", "Cancel");
- }
- new id;
- if (sscanf(inputtext, "i", id))
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_DELETE, DIALOG_STYLE_INPUT, "{FFFF00}Delete a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to delete.\n\n\
- {FFFF00}ID must be a number.", "OK", "Back");
- if (id >= MAX_SPEEDCAMERAS || id < 0)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_DELETE, DIALOG_STYLE_INPUT, "{FFFF00}Delete a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to delete.\n\n\
- {FFFF00}ID must not be above the maximum or below 0.", "OK", "Back");
- if (SpeedCameras[id][_scActive] == false)
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_DELETE, DIALOG_STYLE_INPUT, "{FFFF00}Delete a speed camera", "{FFFFFF}Enter the ID of the speed camera you wish to delete.\n\n\
- {FFFF00}No active camera with that ID.", "OK", "Back");
- SetPVarInt(playerid, "_scCacheDeleteId", id);
- new msg[256];
- format(msg, sizeof(msg), "{FFFFFF}Are you sure you want to delete speed camera %i?\n\n{FFFF00}Range: {FFFFFF}%f\n\
- {FFFF00}Limit: {FFFFFF}%f", id, SpeedCameras[id][_scRange], SpeedCameras[id][_scLimit]);
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_CONFIRMDEL, DIALOG_STYLE_MSGBOX, "{FFFF00}Delete a speed camera", msg, "Delete", "Cancel");
- }
- if (dialogid == SPEEDCAM_DIALOG_CONFIRMDEL)
- {
- if (!response)
- {
- DeletePVar(playerid, "_scCacheDeleteId");
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera", \
- "Select", "Cancel");
- }
- new id = GetPVarInt(playerid, "_scCacheDeleteId");
- new db = SpeedCameras[id][_scDatabase];
- DespawnSpeedCamera(id);
- SpeedCameras[id][_scActive] = false;
- new query[256];
- mysql_format(MainPipeline, query, sizeof(query), "DELETE FROM speed_cameras WHERE id=%i", SpeedCameras[id][_scDatabase]);
- mysql_tquery(MainPipeline, query, "OnQueryFinish", "i", SENDDATA_THREAD);
- //SaveSpeedCamera(id); dafuq is this doing here
- SendClientMessageEx(playerid, COLOR_RED, "Speed camera deleted.");
- DeletePVar(playerid, "_scCacheDeleteId");
- new logText[56];
- format(logText, sizeof(logText), "%s(%d) has deleted speed camera %d",
- GetPlayerNameExt(playerid), GetPlayerSQLId(playerid), db);
- Log("logs/speedcam.log", logText);
- }
- if (dialogid == SPEEDCAM_DIALOG_GETNEAREST)
- {
- return ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera", \
- "Select", "Cancel");
- }
- return 0;
- }
- stock CreateSpeedCamera(Float:x, Float:y, Float:z, Float:rotation, Float:range, Float:limit)
- {
- new loadedCams = 0;
- new index;
- for (new i = 0; i < MAX_SPEEDCAMERAS; i++)
- {
- if (SpeedCameras[i][_scActive])
- {
- loadedCams++;
- }
- else
- {
- index = i;
- break;
- }
- }
- if (loadedCams == MAX_SPEEDCAMERAS)
- return -1;
- SpeedCameras[index][_scActive] = true;
- SpeedCameras[index][_scPosX] = x;
- SpeedCameras[index][_scPosY] = y;
- SpeedCameras[index][_scPosZ] = z;
- SpeedCameras[index][_scRotation] = rotation;
- SpeedCameras[index][_scRange] = range;
- SpeedCameras[index][_scLimit] = limit;
- SpeedCameras[index][_scObjectId] = -1;
- StoreNewSpeedCameraInMySQL(index);
- SpawnSpeedCamera(index);
- return index;
- }
- stock SpawnSpeedCamera(i)
- {
- if (SpeedCameras[i][_scActive] && SpeedCameras[i][_scObjectId] == -1)
- {
- SpeedCameras[i][_scObjectId] = CreateDynamicObject(18880, SpeedCameras[i][_scPosX], SpeedCameras[i][_scPosY], SpeedCameras[i][_scPosZ], 0, 0, SpeedCameras[i][_scRotation]);
- new szLimit[50];
- format(szLimit, sizeof(szLimit), "{FFFFFF}Speed Limit\n{FF0000}%i {FFFFFF}MPH", floatround(SpeedCameras[i][_scLimit], floatround_round));
- SpeedCameras[i][_scTextID] = CreateDynamic3DTextLabel(szLimit, COLOR_TWWHITE, SpeedCameras[i][_scPosX], SpeedCameras[i][_scPosY], SpeedCameras[i][_scPosZ]+5, 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1);
- }
- }
- stock DespawnSpeedCamera(i)
- {
- if (SpeedCameras[i][_scActive])
- {
- DestroyDynamicObject(SpeedCameras[i][_scObjectId]);
- DestroyDynamic3DTextLabel(SpeedCameras[i][_scTextID]);
- SpeedCameras[i][_scObjectId] = -1;
- }
- }
- stock SaveSpeedCameras()
- {
- for (new c = 0; c < MAX_SPEEDCAMERAS; c++)
- {
- SaveSpeedCamera(c);
- }
- }
- CMD:speedcam(playerid, params[])
- {
- if (IsPlayerInAnyVehicle(playerid))
- return SendClientMessageEx(playerid, COLOR_GREY, "You cannot manage speed cameras whilst inside a vehicle.");
- if (IsAGovernment(playerid) && PlayerInfo[playerid][pRank] == Group_GetMaxRank(PlayerInfo[playerid][pLeader]) || PlayerInfo[playerid][pAdmin] >= 1337)
- {
- ShowPlayerDialogEx(playerid, SPEEDCAM_DIALOG_MAIN, DIALOG_STYLE_LIST, "{FFFF00}Speed Cameras", "Create a speed camera\nEdit a speed camera\nDelete a speed camera\n\
- Get nearest speedcamera", "Select", "Cancel");
- }
- else
- {
- SendClientMessageEx(playerid, COLOR_GREY, "You do not have permission to use this command.");
- return 1;
- }
- return 1;
- }
- CMD:gotospeedcam(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1)
- {
- new i;
- if(sscanf(params, "d", i)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gotospeedcam [Speedcam id]");
- if(i < 0 || i > MAX_SPEEDCAMERAS) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gotospeedcam [Speedcam id]");
- if (SpeedCameras[i][_scActive] == true)
- {
- if (GetPlayerState(playerid) == 2)
- {
- new tmpcar = GetPlayerVehicleID(playerid);
- SetVehiclePos(tmpcar, SpeedCameras[i][_scPosX], SpeedCameras[i][_scPosY], SpeedCameras[i][_scPosZ]);
- LinkVehicleToInterior(tmpcar, 0);
- SetVehicleVirtualWorld(tmpcar, 0);
- fVehSpeed[playerid] = 0.0;
- }
- else
- {
- SetPlayerPos(playerid, SpeedCameras[i][_scPosX], SpeedCameras[i][_scPosY], SpeedCameras[i][_scPosZ]);
- }
- SendClientMessageEx(playerid, COLOR_GRAD1, " You have been teleported!");
- SetPlayerInterior(playerid,0);
- PlayerInfo[playerid][pInt] = 0;
- SetPlayerVirtualWorld(playerid, 0);
- PlayerInfo[playerid][pVW] = 0;
- return 1;
- }
- else return SendClientMessageEx(playerid, COLOR_GRAD2, "That speed camera isn't active!");
- }
- else
- {
- SendClientMessageEx(playerid, COLOR_GRAD2, " You are not authorized.");
- }
- return 1;
- }
- stock SaveSpeedCamera(i)
- {
- if (SpeedCameras[i][_scActive] != true)
- return;
- new query[1024];
- mysql_format(MainPipeline, query, sizeof(query), "UPDATE speed_cameras SET pos_x=%f, pos_y=%f, pos_z=%f, rotation=%f, `range`=%f, speed_limit=%f WHERE id=%i",
- SpeedCameras[i][_scPosX], SpeedCameras[i][_scPosY], SpeedCameras[i][_scPosZ], SpeedCameras[i][_scRotation], SpeedCameras[i][_scRange], SpeedCameras[i][_scLimit],
- SpeedCameras[i][_scDatabase]);
- mysql_tquery(MainPipeline, query, "OnQueryFinish", "i", SENDDATA_THREAD);
- }
- stock LoadSpeedCameras()
- {
- printf("[SpeedCameras] Loading data from database...");
- mysql_tquery(MainPipeline, "SELECT * FROM speed_cameras", "OnLoadSpeedCameras", "");
- return 1;
- }
- forward OnLoadSpeedCameras();
- public OnLoadSpeedCameras()
- {
- new rows, index;
- cache_get_row_count(rows);
- while((index < rows))
- {
- cache_get_value_name_int(index, "id", SpeedCameras[index][_scDatabase]);
- cache_get_value_name_float(index, "pos_x", SpeedCameras[index][_scPosX]);
- cache_get_value_name_float(index, "pos_y", SpeedCameras[index][_scPosY]);
- cache_get_value_name_float(index, "pos_z", SpeedCameras[index][_scPosZ]);
- cache_get_value_name_float(index, "rotation", SpeedCameras[index][_scRotation]);
- cache_get_value_name_float(index, "range", SpeedCameras[index][_scRange]);
- cache_get_value_name_float(index, "speed_limit", SpeedCameras[index][_scLimit]);
- if(SpeedCameras[index][_scPosX] != 0.0)
- {
- SpeedCameras[index][_scActive] = true;
- SpeedCameras[index][_scObjectId] = -1;
- SpawnSpeedCamera(index);
- }
- index++;
- }
- if (index == 0)
- printf("[SpeedCameras] No Speed Cameras loaded.");
- else
- printf("[SpeedCameras] Loaded %i Speed Cameras.", index);
- return 1;
- }
- stock StoreNewSpeedCameraInMySQL(index)
- {
- new string[512];
- mysql_format(MainPipeline, string, sizeof(string), "INSERT INTO speed_cameras (pos_x, pos_y, pos_z, rotation, `range`, speed_limit) VALUES (%f, %f, %f, %f, %f, %f)",
- SpeedCameras[index][_scPosX], SpeedCameras[index][_scPosY], SpeedCameras[index][_scPosZ], SpeedCameras[index][_scRotation], SpeedCameras[index][_scRange], SpeedCameras[index][_scLimit]);
- mysql_tquery(MainPipeline, string, "OnNewSpeedCamera", "i", index);
- return 1;
- }
- forward OnNewSpeedCamera(index);
- public OnNewSpeedCamera(index)
- {
- new db = cache_insert_id();
- SpeedCameras[index][_scDatabase] = db;
- }
- stock UpdateSpeedCamerasForPlayer(p)
- {
- if (!IsPlayerConnected(p) || !IsPlayerInAnyVehicle(p) || GetPlayerState(p) != PLAYER_STATE_DRIVER) return;
- // static speed cameras
- for (new c = 0; c < MAX_SPEEDCAMERAS; c++)
- {
- if (SpeedCameras[c][_scActive] == false) continue;
- if (IsPlayerInRangeOfPoint(p, SpeedCameras[c][_scRange], SpeedCameras[c][_scPosX], SpeedCameras[c][_scPosY], SpeedCameras[c][_scPosZ]))
- {
- if(PlayerInfo[p][pConnectHours] > 16)
- {
- new Float:speedLimit = SpeedCameras[c][_scLimit];
- new Float:vehicleSpeed = player_get_speed(p);
- if (vehicleSpeed > speedLimit && PlayerInfo[p][pTicketTime] == 0)
- {
- new vehicleid = GetPlayerVehicleID(p);
- if(!IsAPlane(vehicleid) && !IsAHelicopter(vehicleid) && GetVehicleModel(vehicleid) != 481 && GetVehicleModel(vehicleid) != 509 && GetVehicleModel(vehicleid) != 510)
- {
- if(GetPVarType(p, "LockPickPlayerSQLId") && GetPVarInt(p, "LockPickVehicle") == vehicleid) {
- new string[155], Amount = floatround(125*(vehicleSpeed-speedLimit), floatround_round)+2000;
- SetPVarInt(p, "VLPTickets", GetPVarInt(p, "VLPTickets")+Amount);
- mysql_format(MainPipeline, string, sizeof(string), "UPDATE `vehicles` SET `pvTicket` = '%d' WHERE `id` = '%d'", GetPVarInt(p, "VLPTickets"), GetPVarInt(p, "LockPickVehicleSQLId"));
- mysql_tquery(MainPipeline, string, "OnQueryFinish", "ii", SENDDATA_THREAD, p);
- PlayerInfo[p][pTicketTime] = 60;
- format(string, sizeof(string), "You were caught speeding and have received a speeding ticket of $%s", number_format(Amount));
- SendClientMessageEx(p, COLOR_WHITE, string);
- PlayerPlaySound(p, 1132, 0.0, 0.0, 0.0);
- PlayerTextDrawShow(p, _vhudFlash[p]);
- SetTimerEx("TurnOffFlash", 500, 0, "i", p);
- }
- foreach(new i: Player)
- {
- new v = GetPlayerVehicle(i, vehicleid);
- if(v != -1)
- {
- new string[128], Amount = floatround(125*(vehicleSpeed-speedLimit), floatround_round)+2000;
- PlayerVehicleInfo[i][v][pvTicket] += Amount;
- PlayerInfo[p][pTicketTime] = 60;
- format(string, sizeof(string), "You were caught speeding and have received a speeding ticket of $%s", number_format(Amount));
- SendClientMessageEx(p, COLOR_WHITE, string);
- PlayerPlaySound(p, 1132, 0.0, 0.0, 0.0);
- PlayerTextDrawShow(p, _vhudFlash[p]);
- SetTimerEx("TurnOffFlash", 500, 0, "i", p);
- g_mysql_SaveVehicle(i, v);
- }
- }
- }
- }
- }
- }
- }
- }
|