Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local BUG_CHECKBUG_RADIUS = 1.1;
- local BUG_CAPTUREVOICE_RADIUS = 4.0;
- tbFrequencies = {};
- tbBugs = {};
- addEventHandler("onScriptInit", function()
- print("Bug script activated - By Nexus");
- end)
- addEventHandler("onDialogResponse", function(playerid, dialogid, response, listitem, inputtext)
- if (dialogid == 3) then
- if (response == 1) then
- -- Notify players in the frequency that the bug has been removed
- for n=0, getPlayerPoolSize() do
- for fn=1, 3 do
- if (Player[n]["DetectiveFrequency"..fn] == tbBugs[nRemoveBugID].Frequency) then
- sendClientMessage(n, -1, "{00ad17}[Frequency: "..tbBugs[nRemoveBugID].Frequency.."] Bug #"..tbBugs[nRemoveBugID].ID.." removed by "..Player[playerid].Name..".")
- end
- end
- end
- table.remove(tbBugs, nRemoveBugID);
- end
- end
- end)
- addEventHandler("onPlayerText", function(playerid, text)
- pInt = getPlayerInterior(playerid);
- pWorld = getPlayerVirtualWorld(playerid);
- for i=1, #tbBugs do
- if (tbBugs[i].Active == true) then
- local playerDistanceFromBug = getPlayerDistanceFromPoint(playerid,tbBugs[i].X,tbBugs[i].Y,tbBugs[i].Z);
- if (pInt == tbBugs[i].Interior) and (pWorld == tbBugs[i].World) then
- if (playerDistanceFromBug <= BUG_CAPTUREVOICE_RADIUS) then
- -- Send the text to whoever is connected to the frequency.
- for n=0, getPlayerPoolSize() do
- for fn=1, 3 do
- if (Player[n]["DetectiveFrequency"..fn] == tbBugs[i].Frequency) then
- sendClientMessage(n, -1, "{00ad17}[BUG F: "..tbBugs[i].Frequency.."; #"..tbBugs[i].ID.."] "..getPlayerName(playerid).." says: "..text)
- end
- end
- end
- end
- end
- end
- end
- end)
- addCommandHandler("placebug", function(playerid, frequency, ...)
- if (Player[playerid].Job ~= 1) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a detective.")
- else
- if (Player[playerid].Rank ~= 10) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a state detective.")
- end
- end
- if (not frequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /placebug [frequency] [reference text]");
- end
- local reference = table.concat({ ... }, " ", 1);
- if (reference == "") then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /placebug [frequency] [reference text]");
- end
- if (tonumber(frequency) == nil) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Frequency must be a number.");
- end
- frequency = tonumber(frequency);
- isFreqFound = false;
- for i=1, 3 do
- if (Player[playerid]["DetectiveFrequency"..i] == frequency) then
- isFreqFound = true;
- break;
- end
- end
- if (isFreqFound == false) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not in this frequency. Use /joinfrequency before trying again.")
- end
- isFreqFound = nil;
- --[[if (export['lvdm'].CheckPlayer(playerid, "Frequency") ~= tonumber(frequency)) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not in this frequency. Use /joinfrequency before trying again.")
- end]]
- if (getPlayerState(playerid) == 2) or (getPlayerState(playerid) == 3) then
- return sendClientMessage(playerid, -1, "{ff573d}ERROR: Can't place a bug while in a vehicle.");
- end
- if (#tbBugs == 0) then
- nFreeID = 1;
- else
- nFreeID = tbBugs[#tbBugs].ID+1;
- end
- local px,py,pz = getPlayerPos(playerid);
- local vworld = getPlayerVirtualWorld(playerid);
- local int = getPlayerInterior(playerid);
- -- Prevents from spamming the players with multiple bugs in the same location (only for the same frequency)
- anotherBugInRadius = false;
- for i=1, #tbBugs do
- if (tbBugs[i].Frequency == tonumber(frequency)) then
- if (getPlayerDistanceFromPoint(playerid,tbBugs[i].X,tbBugs[i].Y,tbBugs[i].Z) <= BUG_CAPTUREVOICE_RADIUS) then
- anotherBugInRadius = true;
- break;
- end
- end
- end
- if (anotherBugInRadius) then
- return sendClientMessage(playerid, -1, "{ff573d}ERROR: There's another bug in the listening radius.");
- end
- tbBugs[#tbBugs+1] = {ID=nFreeID, Reference=reference, Active=true, World=vworld, Interior=int, X=px, Y=py, Z=pz, Detective=Player[playerid].Name, Frequency=tonumber(frequency)};
- -- Notify players in the frequency that the bug has been placed
- for n=0, getPlayerPoolSize() do
- for fn=1, 3 do
- if (Player[n]["DetectiveFrequency"..fn] == frequency) then
- sendClientMessage(n, -1, "{00ad17}[Frequency: "..frequency.."] Bug #"..nFreeID.." placed by "..Player[playerid].Name..".")
- end
- end
- end
- end)
- addCommandHandler("checkbug", function(playerid)
- if (Player[playerid].Job ~= 1) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a detective.")
- end
- for i=1, #tbBugs do
- if (tbBugs[i].Active == true) then
- if (getPlayerDistanceFromPoint(playerid,tbBugs[i].X,tbBugs[i].Y,tbBugs[i].Z) <= BUG_CHECKBUG_RADIUS) then
- return sendClientMessage(playerid, -1, "{00ad17}There's a bug nearby. (ID: "..tbBugs[i].ID..")")
- end
- end
- end
- sendClientMessage(playerid, -1, "{ff573d}No bugs found nearby.")
- end)
- addCommandHandler("removebug", function(playerid, nFrequency, nBugID)
- if (Player[playerid].Job ~= 1) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a detective.")
- else
- if (Player[playerid].Rank ~= 10) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a state detective.")
- end
- end
- if (not nFrequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /removebug [frequency] [bug id]");
- end
- if (not nBugID) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /removebug [frequency] [bug id]");
- end
- if (tonumber(nFrequency) == nil) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Frequency must be a number.");
- end
- if (tonumber(nBugID) == nil) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Bug ID must be a number.");
- end
- nFrequency = tonumber(nFrequency);
- nBugID = tonumber(nBugID);
- isFreqFound = false;
- for i=1, 3 do
- if (Player[playerid]["DetectiveFrequency"..i] == nFrequency) then
- isFreqFound = true;
- break;
- end
- end
- if (isFreqFound == false) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not in this frequency. Use /joinfrequency before trying again.")
- end
- isFreqFound = nil;
- for i=1, #tbBugs do
- if (tbBugs[i].Frequency == nFrequency) and (tbBugs[i].ID == nBugID) then
- nRemoveBugID = i;
- showPlayerDialog(playerid, 3, 0, "Frequency "..nFrequency, "You're about to remove bug ID "..nBugID..".\nAre you sure?", "Yes", "No")
- return false;
- end
- end
- return sendClientMessage(playerid, -1, "{ff573d}Bug with that ID doesn't exist.")
- end)
- addCommandHandler("listbugs", function(playerid, nFrequency)
- if (Player[playerid].Job ~= 1) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a detective.")
- else
- if (Player[playerid].Rank ~= 10) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not a state detective.")
- end
- end
- if (not nFrequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /listbugs [frequency]");
- end
- if (tonumber(nFrequency) == nil) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Frequency must be a number.");
- end
- nFrequency = tonumber(nFrequency);
- isFreqFound = false;
- for i=1, 3 do
- if (Player[playerid]["DetectiveFrequency"..i] == nFrequency) then
- isFreqFound = true;
- break;
- end
- end
- if (isFreqFound == false) then
- return sendClientMessage(playerid, -1, "{ff573d}You are not in this frequency. Use /joinfrequency before trying again.")
- end
- isFreqFound = nil;
- sBugsTable = "";
- for i=1, #tbBugs do
- if (tbBugs[i].Frequency == nFrequency) then
- sBugsTable = sBugsTable.."\n"..tbBugs[i].ID.."\t"..tbBugs[i].Reference;
- end
- end
- showPlayerDialog(playerid, 2, 5, "Frequency "..nFrequency, "ID\tReference"..sBugsTable, "Close", "")
- end)
- addCommandHandler("joinfrequency", function(playerid, nFrequency, sPassword)
- if (not nFrequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /joinfrequency [frequency] [password]");
- end
- if (not sPassword) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /joinfrequency [frequency] [password]");
- end
- if (tonumber(nFrequency == nil)) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Frequency must be a number.");
- end
- nFrequency = tonumber(nFrequency);
- foundFreq = false;
- wrongPassFreq = false;
- noFreeSlotsFreq = false;
- if (Player[playerid].DetectiveFrequency1 == nFrequency) or (Player[playerid].DetectiveFrequency2 == nFrequency) or (Player[playerid].DetectiveFrequency3 == nFrequency) then
- return sendClientMessage(playerid, -1, "{00ad17}You are already in this frequency.")
- end
- for i=1, #tbFrequencies do
- if (tbFrequencies[i].ID == nFrequency) then
- -- Find available slot
- if (Player[playerid].DetectiveFrequency1 == 0) then
- if (tbFrequencies[i].Password == sPassword) then
- Player[playerid].DetectiveFrequency1 = nFrequency;
- else
- wrongPassFreq = true;
- end
- foundFreq = true;
- break;
- end
- if (Player[playerid].DetectiveFrequency2 == 0) then
- if (tbFrequencies[i].Password == sPassword) then
- Player[playerid].DetectiveFrequency2 = nFrequency;
- else
- wrongPassFreq = true;
- end
- foundFreq = true;
- break;
- end
- if (Player[playerid].DetectiveFrequency3 == 0) then
- if (tbFrequencies[i].Password == sPassword) then
- Player[playerid].DetectiveFrequency3 = nFrequency;
- else
- wrongPassFreq = true;
- end
- foundFreq = true;
- break;
- end
- noFreeSlotsFreq = true;
- break;
- end
- end
- if (noFreeSlotsFreq) then
- return sendClientMessage(playerid, -1, "{00ad17}All frequency slots taken.");
- end
- if (wrongPassFreq) then
- return sendClientMessage(playerid, -1, "{00ad17}Wrong password.");
- end
- if (foundFreq) then
- sendClientMessage(playerid, -1, "{00ad17}Joined frequency successfully.")
- else
- sendClientMessage(playerid, -1, "{00ad17}Frequency not found.")
- end
- end)
- addCommandHandler("leavefrequency", function(playerid, nFrequency)
- if (not nFrequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /leavefrequency [frequency]");
- end
- if (tonumber(nFrequency == nil)) then
- return sendClientMessage(playerid, -1, "{ff573d}[ERROR] Frequency must be a number.");
- end
- nFrequency = tonumber(nFrequency);
- if (Player[playerid].DetectiveFrequency1 == nFrequency) then
- Player[playerid].DetectiveFrequency1 = 0;
- return sendClientMessage(playerid, -1, "{00ad17}Frequency left successfully.")
- elseif (Player[playerid].DetectiveFrequency2 == nFrequency) then
- Player[playerid].DetectiveFrequency2 = 0;
- return sendClientMessage(playerid, -1, "{00ad17}Frequency left successfully.")
- elseif (Player[playerid].DetectiveFrequency3 == nFrequency) then
- Player[playerid].DetectiveFrequency3 = 0;
- return sendClientMessage(playerid, -1, "{00ad17}Frequency left successfully.")
- end
- return sendClientMessage(playerid, -1, "{ff573d}You're not in that frequency.")
- end)
- addCommandHandler("listfrequencies", function(playerid)
- sendClientMessage(playerid, -1, "Frequencies: S1: "..Player[playerid].DetectiveFrequency1.." | S2: "..Player[playerid].DetectiveFrequency2.." | S3: "..Player[playerid].DetectiveFrequency3..".")
- end)
- addCommandHandler("createfrequency", function(playerid, nFrequency, sPassword)
- if (not nFrequency) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /createfrequency [frequency] [password]");
- end
- if (not sPassword) then
- return sendClientMessage(playerid, -1, "{ff573d}[USAGE] /createfrequency [frequency] [password]");
- end
- if (tonumber(nFrequency == nil)) then
- return sendClientMessage(playerid, -1, "{ff573d}ERROR: Frequency must be a number.");
- end
- nFrequency = tonumber(nFrequency);
- freqAlreadyExists = false;
- for i=1, #tbFrequencies do
- if (tbFrequencies[i].ID == nFrequency) then
- -- Frequency already exists
- freqAlreadyExists = true;
- break;
- end
- end
- if (freqAlreadyExists) then
- return sendClientMessage(playerid, -1, "{ff573d}ERROR: Frequency already exists.");
- end
- if (getPlayerMoney(playerid) < 5000) then
- return sendClientMessage(playerid, -1, "{ff573d}ERROR: Ordering a frequency costs $5,000. You can't afford it.");
- end
- givePlayerMoney(playerid, -5000);
- table.insert(tbFrequencies, {ID=nFrequency, Password=sPassword, Owner=Player[playerid].Name});
- sendClientMessage(playerid, -1, "{00ad17}Purchased the frequency successfully. Don't forget to join it.")
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement