Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+1

Роблокс студио, команда чата изменяет текст неправильно

Сам скрипт работает, но изменяет текст не на то, что написано в команде, а на пробел. Как исправить?

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект

В вашем скрипте на Lua для Roblox Studio есть обработчик событий `Chatted`, который проверяет, начинается ли сообщение в чате с команды "/set diamonds". Если да, то он пытается присвоить значение переменной `v` текстовому полю `Amount.Text`, находящемуся по указанному пути в GUI игрока. Однако вы говорите, что вместо ожидаемого результата текст заменяется пробелом.

Давайте рассмотрим ваш код:

123456789
 local Command = "/set diamonds " 
local plr = script.Parent.Parent.Parent 
 
plr.Chatted:Connect(function(msg) 
    if msg:sub(1, Command:len()):lower() == Command then 
        local v = msg:sub(15, Command:len()):lower() 
        plr.PlayerGui.MainLeft.Currency.Diamonds.Diamonds.Amount.Text = v 
    end 
end) 

Проблема кажется связанной с тем, как вы извлекаете значение `v` из сообщения. Вы используете `msg:sub(15, Command:len())`, что берёт подстроку из `msg`, начиная с 15-го символа до длины `Command`. Но поскольку вы добавили пробел после команды в `Command`, его длина на один символ больше, чем нужно, и это может быть частью проблемы.

Чтобы исправить это, нужно корректно извлечь число из сообщения. Если команда начинается с начала строки и идёт до 15-го символа, то число должно начинаться сразу после команды:

1
 local v = msg:sub(Command:len()+1):lower()  

Здесь `Command:len()+1` указывает на начало числа, которое следует сразу за командой "/set diamonds ".

Вот исправленный вариант:

123456789
 local Command = "/set diamonds " 
local plr = script.Parent.Parent.Parent 
 
plr.Chatted:Connect(function(msg) 
    if msg:sub(1, Command:len()):lower() == Command then 
        local v = msg:sub(Command:len()+1) -- Забираем строку после команды 
        plr.PlayerGui.MainLeft.Currency.Diamonds.Diamonds.Amount.Text = v 
    end 
end)  

Теперь `v` будет содержать подстроку сообщения, следующую сразу за командой, без приведения к нижнему регистру, так как предполагается, что это число, и регистр для чисел не важен.