Использование содержимого переменной для генерации имени переменной

#variables #lua

#переменные #lua

Вопрос:

У меня есть скрипт для игрового сервера, и я застрял в каком-то дерьме, которое, похоже, легко решить

Существует переменная, которая получает содержимое динамически на основе действий пользователя, поэтому мы назовем эту переменную: example и присвоим некоторое случайное значение

 local example = Potato
  

Затем у меня есть функция, которая отправляет сообщение на веб-узел discord

 SendWebhookMessage(varNAME, "Message content")
  

Где varname — переменная, содержащая ссылку на веб-хук.

Я хочу использовать содержимое переменной example для генерации имени переменной, например

 webhook_ds_example
  

Итак, в этом случае это будет

 webhook_ds_potato
  

Надеюсь, вы, ребята, могли бы понять и помочь решить

 local menu = { name = "Baú" }
local cb_take = function(idname)
local citem = chest.items[idname]
local amount = vRP.prompt(source,"Quantidade:","")

amount = parseInt(amount)

if amount >= 0 and amount <= citem.amount then
    local new_weight = vRP.getInventoryWeight(user_id) vRP.getItemWeight(idname)*amount

if new_weight <= vRP.getInventoryMaxWeight(user_id) then                            
    citem.amount = citem.amount - amount

local temp = os.date("%x  %X")
vRP.logs("savedata/bau.txt","Bau: "..name.."        [ID]: "..user_id.." /"..temp.." [FUNÇÃO]: Retirar / [ITEM]: "..idname.." / [QTD]: "..amount)
local webhook_bau_fac1 = ""
local webhook_bau_fac2 = ""
local webhook_bau_fac3 = ""
local webhook_bau_fac4 = ""

SendWebhookMessage(webhook_bau_..name,"```prologn[ID]: "..user_id.." "..identity.name.." "..identity.firstname.." n[GUARDOU]: "..vRP.format(parseInt(amount)).." "..vRP.itemNameList(itemName).." n[BAU]: "..chestName.." "..os.date("n[Data]: %d/%m/%Y [Hora]: %H:%M:%S").." r```")
  

Ответ №1:

Вы ищете таблицы, которые позволяют хранить множество различных именованных значений в одной переменной.

 local webhook_bau -- make a variable

-- create a table with 4 entries, put it in the variable 
webhook_bau = {fac1="", fac2="", fac3="", fac4=""}

-- if you want to start with an empty table, use {} instead

-- change one of them based on the name
webhook_bau[name] = "something"

-- use one of the entries based on the name
SendWebhookMessage(webhook_bau[name], "whatever you want to send")
  

Записи таблицы «волшебным образом» появляются, когда вы их используете, вам не нужно сначала их создавать. Если вы получите доступ к записи, которая не существует, вы прочитаете значение nil . Вы также можете удалить запись, вставив nil запись.

Ответ №2:

В приведенном вами примере у вас есть:

 SendWebhookMessage(webhook_bau_..name,"```prologn[ID]: "..user_id.." "..identity.name.." "..identity.firstname.." n[GUARDOU]: "..vRP.format(parseInt(amount)).." "..vRP.itemNameList(itemName).." n[BAU]: "..chestName.." "..os.date("n[Data]: %d/%m/%Y [Hora]: %H:%M:%S").." r```")
  

У вас отсутствуют кавычки вокруг webhook_bau_ , что приведет к ошибке при попытке объединить нулевую переменную.

Я также не вижу, где name установлено значение (только menu.name ), поэтому я предполагаю, что у вас есть это в другом месте в вашей программе, если нет, это также будет равно нулю, поэтому просто убедитесь, что это тоже где-то установлено.