From c71e16c8737735c0b81b79e53346ce2fb792e0f6 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:41:42 -0600 Subject: [PATCH] Radio command --- scripts/server/command.js | 6 +- scripts/server/radio.js | 142 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 3 deletions(-) diff --git a/scripts/server/command.js b/scripts/server/command.js index 0be50045..f46785dd 100644 --- a/scripts/server/command.js +++ b/scripts/server/command.js @@ -360,11 +360,11 @@ function loadCommands() { new CommandData("buylist", listBusinessFloorInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items that can be bought from the business"), new CommandData("power", toggleItemEnabledCommand, "", getStaffFlagValue("None"), true, false, "Turns on or off an item"), - new CommandData("freq", setWalkieTalkieFrequencyCommand, "[frequncy number]", getStaffFlagValue("None"), true, false, "Sets a radio item's frequency"), + //new CommandData("freq", setRadioFrequencyCommand, "[frequency number]", getStaffFlagValue("None"), true, false, "Sets a vehicle or item radio frequency"), //new CommandData("call", callWithPhoneCommand, "[number]", getStaffFlagValue("None"), true, false), //new CommandData("speakerphone", togglePhoneSpeakerCommand, "", getStaffFlagValue("None"), true, false), - new CommandData("radio", walkieTalkieChatCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio item (item must be able to transmit)"), - new CommandData("r", walkieTalkieChatCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio item (item must be able to transmit)"), + new CommandData("radio", radioTransmitCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio (vehicle radio or item)"), + new CommandData("r", radioTransmitCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio (vehicle radio or item)"), new CommandData("additemtype", createItemTypeCommand, "", getStaffFlagValue("ManageItems"), true, false, "Adds a new item type"), new CommandData("itemtypeusetype", setItemTypeUseTypeCommand, " ", getStaffFlagValue("ManageItems"), true, false, "Sets an item type's use-type (what kind of action is performed when using it)"), diff --git a/scripts/server/radio.js b/scripts/server/radio.js index 193da78b..1927f004 100644 --- a/scripts/server/radio.js +++ b/scripts/server/radio.js @@ -329,4 +329,146 @@ function getRadioStationData(radioStationIndex) { return getServerData().radioStations[radioStationIndex]; } +// =========================================================================== + +function radioTransmitCommand(command, params, client) { + let possibleRadio = getPlayerFirstItemSlotByUseType(client, V_ITEM_USE_TYPE_WALKIETALKIE); + + let frequency = -1; + + if (possibleRadio != -1) { + if (getItemData(possibleRadio).enabled) { + frequency = getItemData(possibleRadio).value; + } + } else { + let vehicle = null; + + if (isPlayerInAnyVehicle(client)) { + vehicle = getPlayerVehicle(client); + } else { + let tempVehicle = getClosestVehicle(getPlayerPosition(client)); + if (getDistance(getPlayerPosition(client), getVehiclePosition(tempVehicle)) <= getGlobalConfig().vehicleTrunkDistance) { + vehicle = tempVehicle; + } + } + + if (vehicle == null) { + messagePlayerError(client, getLocaleString(client, "NoRadioToUse")); + return false; + } + + if (!doesVehicleHaveTransmitRadio(vehicle)) { + messagePlayerError(client, getLocaleString(client, "NoRadioToUse")); + return false; + } + + frequency = getVehicleData(vehicle).radioFrequency; + } + + if (frequency == -1) { + messagePlayerError(client, getLocaleString(client, "NoRadioToUse")); + return false; + } + + sendRadioTransmission(frequency, params, client); +} + +// =========================================================================== + +function sendRadioTransmission(frequency, messageText, sentFromClient) { + let seenClients = []; + seenClients.push(sentFromClient); + + let clients = getClients(); + + for (let i in clients) { + if (seenClients.indexOf(clients[i]) == -1) { + if (getDistance(getPlayerPosition(clients[i]), getPlayerPosition(sentFromClient)) <= getGlobalConfig().talkDistance) { + seenClients.push(clients[i]); + messagePlayerNormal(`[#CCCCCC]${getCharacterFullName(client)} {ALTCOLOUR}(to radio): {MAINCOLOUR}${messageText}`); + } + } + } + + let vehicles = getServerData().vehicles; + for (let i in vehicles) { + if (getVehicleData(vehicles[i]).radioFrequency == frequency) { + for (let j in clients) { + if (seenClients.indexOf(clients[j]) == -1) { + if (getDistance(getPlayerPosition(clients[j]), getVehiclePosition(getServerData().vehicles[j].vehicle)) <= getGlobalConfig().transmitRadioSpeakerDistance) { + seenClients.push(clients[j]); + messagePlayerNormal(clients[j], `📻 {ALTCOLOUR}(On Radio): {MAINCOLOUR}${messageText}`); + } + } + } + } + } + + let items = getServerData().items; + for (let i in items) { + if (items[i].enabled) { + if (getItemTypeData(items[i].itemTypeIndex).useType == V_ITEM_USE_TYPE_WALKIETALKIE) { + if (items[i].value == frequency) { + for (let j in clients) { + if (seenClients.indexOf(clients[j]) == -1) { + if (getDistance(getPlayerPosition(clients[j], getItemPosition(i))) <= getGlobalConfig().transmitRadioSpeakerDistance) { + seenClients.push(clients[j]); + messagePlayerNormal(clients[j], `📻 {ALTCOLOUR}(On Radio): {MAINCOLOUR}${messageText}`); + } + } + } + } + } + } + } +} + +// =========================================================================== + +function setRadioFrequencyCommand(command, params, client) { + // Needs finished + return false; + + /* + if (areParamsEmpty(params)) { + messagePlayerSyntax(client, getCommandSyntaxText(command)); + return false; + } + + if (isNaN(params)) { + messagePlayerError(client, ``); + return false; + } + + params = toInteger(params); + + if (params < 100 || params > 500) { + messagePlayerError(client, `The frequency channel must be between 100 and 500!`); + return false; + } + + if (!getPlayerActiveItem(client)) { + messagePlayerError(client, `You aren't holding a walkie talkie!`); + return false; + } + + if (!getItemData(getPlayerActiveItem(client))) { + messagePlayerError(client, `You aren't holding a walkie talkie!`); + return false; + } + + if (getItemData(getPlayerActiveItem(client)).enabled) { + if (!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "use")) { + messagePlayerError(client, `Your walkie talkie is turned off. Press ${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "use")).key)} to turn it on`); + } else { + messagePlayerError(client, `Your walkie talkie is turned off. Type {ALTCOLOUR}/use {MAINCOLOUR}to turn it on`); + } + return false; + } + + getItemData(getPlayerActiveItem(client)).value = params * 100; + messagePlayerSuccess(client, getLocaleString(client, "FrequencyChannelChanged", `Walkie Talkie`, `${getPlayerData(client).activeHotBarSlot + 1}`, `${getItemValueDisplayForItem(getPlayerActiveItem(client))}`)); + */ +} + // =========================================================================== \ No newline at end of file