Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Наработка позволяет разделить string на массив string'ов, 1 элемент - 1 слово. "Раз, dva, три" > "Раз", ",", "dva", ",", "три"
Также возможно разделить string на набор символов. "text" > "t", "e", "x", "t" | "Текст" > "Т", "е", "к", "с", "т"
Перемешивание всех букв слова. "text" > "xtte" | "Текст" > "eТстк"
Перемешивание всех букв, кроме первого и последнего, в таком случае сохраняется читабельность. "text" > "txet" | "Текст" > "Тксет"
function Split takes string s returns nothing
function SplitLetter takes string s, boolean cyrillic returns nothing
function Shuffle takes string s, boolean cyrillic returns string
function HalfShuffle takes string s, boolean cyrillic returns string
Соответственно.
Так как, jass не позволяет вернуть массив, есть переменные SplitedString, SplitedLetter, которые хранят последние массивы.
Функции очистки
function ClearSplitedString takes nothing returns nothing
function ClearSplitedLetter takes nothing returns nothing
Пример использования
	call Split("some text, можно на русском, можно и так и сяк, можно что-то такое даже")
    loop
        exitwhen(i >= 500)
        if SplitedString[i] != "" then
            call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 10, SplitedString[i])
        else
            set i = 500
        endif
        set i = i + 1
    endloop
    call ClearSplitedString()
Поднимается резонный вопрос, зачем?
  • Функциями тасовки можно скрыть текст от игрока или показать сложность текста для понимания. изображение ниже
  • С помощью split можно позволить прописывать команды одним сообщением. (Передача аргументов также возможна) изображение ниже
  • С помощью того-же split можно искать и модифицировать отдельные слова и например, сделать такой rp чат изображение ниже
Код всех функций
globals
    string array SplitedString[500]
    string array SplitedLetter[50]
endglobals

function ClearSplitedString takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen(i >= 500)
        set SplitedString[i] = ""
        set i = i + 1
    endloop
endfunction

function Split takes string s returns nothing
    local integer i = 0
    local integer j = 0
    local string ts = ""
    local string st
    
    call ClearSplitedString()
    
    set s = s + "   "
    loop
        exitwhen(i >= StringLength(s))
        set st = SubString(s, i, i + 1)
        if st != " " then
            if st != "." and st != "," and st != "!" and st != "?" and st != "'" and st != ":" then // можно еще знаков препинания добавить
                set ts = ts + st
            else
                set SplitedString[j] = ts
                set ts = st
                set j = j + 1
            endif
        else
            set SplitedString[j] = ts
            set ts = ""
            set j = j + 1
        endif
        
        set i = i + 1
    endloop

endfunction

function ClearSplitedLetter takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen(i >= 50)
        set SplitedLetter[i] = ""
        set i = i + 1
    endloop
endfunction

function SplitLetter takes string s, boolean cyrillic returns nothing
    local integer i = 0
    local integer x = 1
    if cyrillic then
        set x = 2
    endif
    call ClearSplitedLetter()
    
    set s = s + " "
    loop
        exitwhen(i >= StringLength(s))
        set SplitedLetter[i] = SubString(s, i, i + x)
        set i = i + 1
    endloop
endfunction

function Shuffle takes string s, boolean cyrillic returns string
    local integer i = 0
    local integer r = 0
    local integer len
    local string ts
    local string array ss
    local integer x = 1
    if cyrillic then
        set x = 2
    endif
    if s != "." and s != "," and s != "!" and s != "?" and s != "'" and s != ":" then
        call SplitLetter(s, cyrillic)
        
        loop
            exitwhen(i >= 50)
            if SplitedLetter[i] != "" then
                set ss[i] = SplitedLetter[i]
                set len = i
            else
                set i = 50
            endif
            set i = i + x
        endloop
        
        set i = 0
        loop
            exitwhen(i >= len-1)
            set r = GetRandomInt(0, len-1)
            
            set ts = ss[r]
            set ss[r] = ss[i]
            set ss[i] = ts
            
            set i = i + 1
        endloop
        
        call ClearSplitedLetter()
        
        set ts = ""
        set i = 0
        loop
            exitwhen(i >= len)
            set ts = ts + ss[i]
            set i = i + 1
        endloop
        return ts
    
    else
        return s
    endif
endfunction

function HalfShuffle takes string s, boolean cyrillic returns string
    local string f
    local string l
    local string c
    local integer x = 1
    if cyrillic then
        set x = 2
    endif
    if s != "." and s != "," and s != "!" and s != "?" and s != "'" and s != ":" then
        set f = SubString(s, 0, x)
        set l = SubString(s, StringLength(s) - x, StringLength(s))
        set c = Shuffle(SubString(s, x, StringLength(s) - x), cyrillic)
        
        return f + c + l
        
    else
        return s
    endif
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
17
3 года назад
0
Так как, jass не позволяет вернуть массив, есть переменные SplitedString, SplitedLetter, которые хранят последние массивы.
Jass не может, vJass может. Если vJass уже используется, возвращай vJass массив.
0
22
3 года назад
0
GetLocalPlayer:
Так как, jass не позволяет вернуть массив, есть переменные SplitedString, SplitedLetter, которые хранят последние массивы.
Jass не может, vJass может. Если vJass уже используется, возвращай vJass массив.
А как?
0
26
3 года назад
0
ofeerist:
GetLocalPlayer:
Так как, jass не позволяет вернуть массив, есть переменные SplitedString, SplitedLetter, которые хранят последние массивы.
Jass не может, vJass может. Если vJass уже используется, возвращай vJass массив.
А как?
структуры курите
1
17
3 года назад
1
А как?
Здесь подробно.
0
8
3 года назад
0
Очень странное применение shuffle, конечно) Может соединить с этим и что-то мощное запилить?
0
22
3 года назад
0
build:
Очень странное применение shuffle, конечно) Может соединить с этим и что-то мощное запилить?
Единственное, что пришло в голову :D
Могу переписать на vjass и добавить свой функционал, если не лень будет
0
14
3 месяца назад
Отредактирован host_pi
0
	call Split("some text, можно на русском, можно и так и сяк, можно что-то такое даже")
    loop
        exitwhen(i >= 500)
какая же классика
что за мода у этих кодописарей задавать границы чисел на свой рандомный лад?
что тут 500 кусков вместо 8192, доступных в жасе
что в 99,9999% камерахаков вечно от 1650 до 3300 вместо 0-10000
я уж молчу, что такой код сплита благополучно загнётся на первом же оплимите, это база
ещё интереснее, что автору пришлось самому пилить сплит в 2к21, ведь до него никто этого для джаса не делал? иначе зачем
Чтобы оставить комментарий, пожалуйста, войдите на сайт.