Всем привет!
написал небольшой алгоритм предназначенный для проверки Списка команд который игрок может ввести в чате.
а именно команды для изменения камеры
Столкнулся с проблемой
Блок кода!
call TriggerRegisterPlayerChatEvent(trig[4], Player(pi), "-", false)
//регистрация ивента для написания команды
//false Как Подстрока
local string array CommandsList
local integer array CommandsListGroupStart
local integer array CommandsListGroupEnd
local integer array CommandsListSubstringEnd
local integer CommandsListMaxCounter
local integer CommandsListGroupCounter
local integer CommandsListCounter
local integer CommandsListMax
set CommandsListGroupStart[1] = 1
set CommandsList[1] = "-cam"
set CommandsListSubstringEnd[1] = 4 // длина строки Первой команды
set CommandsList[2] = "-Cam"
set CommandsListSubstringEnd[2] = 4
set CommandsList[3] = "-camm"
set CommandsListSubstringEnd[3] = 5
set CommandsList[4] = "-Camm"
set CommandsListSubstringEnd[4] = 5
set CommandsList[5] = "-zoom"
set CommandsListSubstringEnd[5] = 5
set CommandsList[6] = "-Zoom"
set CommandsListSubstringEnd[6] = 5
set CommandsList[7] = "-кам"
set CommandsListSubstringEnd[7] = 7
set CommandsList[8] = "-Кам"
set CommandsListSubstringEnd[8] = 7
set CommandsList[9] = "-камм"
set CommandsListSubstringEnd[9] = 9
set CommandsList[10] = "-Камм"
set CommandsListSubstringEnd[10] = 9
set CommandsList[11] = "-зум"
set CommandsListSubstringEnd[11] = 7
set CommandsList[12] = "-Зум"
set CommandsListSubstringEnd[12] = 7
set CommandsListGroupEnd[1] = 12 // 1 group = 12

set CommandsListMax = 20

if CommandsListMax != 0 then
set CommandsListMaxCounter = 1
loop
exitwhen CommandsListMaxCounter > CommandsListMax // от 1 до 20 команд

if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) == CommandsList[CommandsListMaxCounter] then //-cam, -Cam

endif
set CommandsListMaxCounter = CommandsListMaxCounter + 1
endloop
endif
SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) 
//проверка Подстроки на наличие команды работает неправильно!
а именно для нее нет никакой разницы между
CommandsList[1] = "-cam"
и
CommandsList[3] = "-camm"
напишу команду
-camm сработает 2 раза
упростил его до банальной проверки в одном цикле, он все равно выводит 2 раза
Грешу на то что нельзя проверять
CommandsListSubstringEnd[CommandsListMaxCounter]
в цикле

чтож


оказывается допустил ошибку при высчитывании

Нельзя
if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) == CommandsList[CommandsListMaxCounter] then //-cam, -Cam
// высчитывать Значение Цикла CommandsListMaxCounter внутри переменной CommandsListSubstringEnd
endif
он подберет Индекс CommandsListMaxCounter и будет проверять CommandsListSubstringEnd на наличие Меньшего Значения начиная с 1 до
CommandsListMax
его сразу надо высчитывать чтобы значения цикла не высчитывались

if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMax]) == CommandsList[CommandsListMaxCounter] then
так должно выглядеть

отработает 1 раз для CommandsList с привязкой к СommandsListSubstringEnd

Centyrion, если удалить комментарии, то у тебя пустое условие.
Спасибо! воспользуюсь ссылкой
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
18
function SubStringBJ takes string source, integer start, integer end returns string
    return SubString(source, start-1, end)
endfunction

start-1 = 0

//===========================================================================
// The parameters for the API Substring function are unintuitive, so this
// merely performs a translation for the starting index.
//
function SubStringBJ takes string source, integer start, integer end returns string
    return SubString(source, start-1, end)
endfunction  

это упрощенный вариант
этот полный
if CommandsListMax != 0 then
set CommandsListMaxCounter = 1
loop
exitwhen CommandsListMaxCounter > CommandsListMax // от 1 до 20 команд
//проверить в массиве список Групп Комманд 
//set CommandsListGroupCounter = CommandsListGroupStart[1]
//loop
//exitwhen CommandsListGroupCounter > CommandsListGroupEnd[CommandsListMax] //от 1 до 20 Групп
//проверить в Группе команд Список Команд
set CommandsListCounter = 1
loop
exitwhen CommandsListCounter > CommandsListGroupCounter
//проверить список внутри группы комманд
//if CommandsList[CommandsListCounter] == CommandsList[CommandsListMax] then

//set CommandsListSubstringEnd[CommandsListGroupCounter] = CommandsListGroupCounter

if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListCounter]) == CommandsList[CommandsListCounter] then //-cam, -Cam



endif

//endif

set CommandsListCounter = CommandsListCounter + 1
endloop
//set CommandsListGroupCounter = CommandsListGroupCounter + 1
//endloop
set CommandsListMaxCounter = CommandsListMaxCounter + 1
endloop
endif

и тоже самое выводит
выводит как
CommandsList[1] = "-cam"
так и
CommandsList[3] = "-camm"

простым языком что пытаюсь сделать
Занести в некий...Глобальный Массив Список команд
и одной проверкой SubString указать то что должно происходить в определенных блоках
проверяя Группу Команд Внутри этого массива и проверки Списка команд Определенной Группы Команд

Плодить Одинаковые Блоки кода которые будут делать Одно и тоже Нет Никакого Желания

заметил что Обращение по индексу Массива работает нормально
if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) == CommandsList[CommandsListMaxCounter] then //-cam, -Cam
//повторяется 2 раза
if SubString(ChatString, 0, CommandsListSubstringEnd[CommandsListMaxCounter]) == CommandsList[3] then //-cam, -Cam
срабатывает только 1 раз и нормально

set CommandsListMax = 20

if CommandsListMax != 0 then
set CommandsListMaxCounter = 1
loop
exitwhen CommandsListMaxCounter > CommandsListMax // от 1 до 20 команд
цикл запущен

выяснил
if SubString(ChatString, 0, CommandsListSubstringEnd[3]) == CommandsList[1] then
он выводит 2 раза
но это невозможно
CommandsListSubstringEnd[3] = 5
CommandsListSubstringEnd[1] = 4 // длина строки Первой команды

local real CamA = S2R(SubString(ChatString, 5, StringLength(ChatString)))

нужно как-то...добавить == но переменная и так
= 4
что может быть ровнее этого числа?

положить -1
call TriggerRegisterPlayerChatEvent(trig[4], Player(pi), "-", false)
начнет работать после Пробела
18
CommandsListSubstringEnd[3]
Призван задать ограничение чисто для Команды
дальше
будет работать
local real CamA = S2R(SubString(ChatString, 5, StringLength(ChatString)))

Посмотри в этой системе там это в примерах есть.
Хм...это я реализовал
где
requires CustomChatEvent
18
либа принимает только 1 команду
а у меня Список

а вот
    function onInit(){
        msg("Чтобы изменить имя напечатайте |cffffff00-zoom |cff909090" + I2S(R2I(Min)) + "<>" + I2S(R2I(Max)));
        
        CustomChatEvent
            .create("zoom") // ловим -zoom
            .addSynonym("зум") // ловим -зум
            .addSynonym("ящщь") // не забываем тех, кто перепутал раскладку
            .onSuccess(function setZoom) // указываем функцию, которая сработает при удачном отлове
        ;

а если без Либы
Стандартным методом проверки Подстроки?
30
либа принимает только 1 команду
Ты внимательно пробовал описание либы читать?

а если без Либы
Открываем исходники либы, и копируем всю логику себе в код.
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.