То есть создать свою систему что-бы переменная локации не содержала хэндл, а только 3 значения X, Y, Z, возможно ли обойтись через массив реалок? Или такое без UjApi не осуществить?

Вроде структуры есть, сделай свою структуру, которая будет принимать X, Y, Z и пользуйся ей
`
ОЖИДАНИЕ РЕКЛАМЫ...
8
Вроде структуры есть, сделай свою структуру, которая будет принимать X, Y, Z и пользуйся ей
Принятый ответ
Ответы (12)
8
LastUchiha, тебе нужно запихать значения X, Y, Z в одну переменную?
15
Мне же нужно как то записать в одну переменную 3 значения одной строкой, верно?
8
LastUchiha, я не понял конкретно что ты хочешь, у меня есть 2 варианта решения, сейчас расспишу оба...
8
LastUchiha, Вот я для себя библиотеку делал (мне тоже нужно было запихивать всё в одну переменную)
Объяснить как работает или сам разберёшься? (В ней нету гайдов, делал для себя)
library PANACEA000Nui000Srting000Lib

    globals
        string PANACEA000Nui000Srting000Lib_DefaultPoint = "&"
    endglobals
    
    //Выводит Выбранную Точку Записи
    //"&0"
    function PANACEA000Nui000Srting000Lib_GetStringByPoint takes string s, integer numberPoint returns string
        local integer counter = 0 
        local integer counterStr = 0
        local string ret_str = ""
        loop
        exitwhen counter > numberPoint
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                counterStr = counterStr + 1
                if counter == numberPoint
                    ret_str = ret_str+SubString(s, -1+counterStr, 0+counterStr)
                endif
            endloop
            counterStr = counterStr + 1
            counter = counter + 1
        endloop
        counter = 0
        return ret_str
    endfunction
    
    //Добавляет Точку Записи в начало или в конец
    function PANACEA000Nui000Srting000Lib_AddPoint takes string s, string s_add, string metod returns string
        if metod == "start"
            s = s_add+PANACEA000Nui000Srting000Lib_DefaultPoint+s
        elseif metod == "end"
            s = s+s_add+PANACEA000Nui000Srting000Lib_DefaultPoint
        endif
        return s
    endfunction
    
    //Добавляет Точку Записи в середину (по позиции)
    function PANACEA000Nui000Srting000Lib_InjectPoint takes string s, string s_inject, integer numberPoint returns string
        local integer counter = 0 
        local integer counterStr = 0
        loop
        exitwhen counter > numberPoint-1
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                counterStr = counterStr + 1
            endloop
            counterStr = counterStr + 1
            counter = counter + 1
        endloop
        counterStr = counterStr + 1
        s = SubString(s, 0, counterStr-1)+s_inject+PANACEA000Nui000Srting000Lib_DefaultPoint+SubString(s, counterStr-1, StringLength(s))
        counter = 0
        return s
    endfunction
    
    //Убирает Точку Записи из середины (по позиции)
    function PANACEA000Nui000Srting000Lib_OutjectPoint takes string s, integer numberPoint returns string
        local integer counter = 0 
        local integer counterStr = 0
        local integer outject = 0
        loop
        exitwhen counter > numberPoint
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                counterStr = counterStr + 1
                if counter == numberPoint
                    outject = outject + 1
                endif
            endloop
            counterStr = counterStr + 1
            counter = counter + 1
        endloop
        counterStr = counterStr + 1
        s = SubString(s, 0, counterStr-1-outject-1)+SubString(s, counterStr-1, StringLength(s))
        counter = 0
        return s
    endfunction
    
    //Заменяет Точку Записи в середине (по позиции)
    function PANACEA000Nui000Srting000Lib_ReplacePoint takes string s, string s_replace, integer numberPoint returns string
        s = PANACEA000Nui000Srting000Lib_OutjectPoint(s,numberPoint)
        s = PANACEA000Nui000Srting000Lib_InjectPoint(s,s_replace,numberPoint)
        return s
    endfunction
    
    //Создаёт Стартовые Точки Записи для юнита с количеством параметров
    function PANACEA000Nui000Srting000Lib_CreatePointsForUnit takes unit u, integer countPoints, hashtable hash, string stringhash returns string
        local integer counter = 1
        local string s = ""
        loop
        exitwhen counter > countPoints
            counter = counter + 1
            s = s+"0"+PANACEA000Nui000Srting000Lib_DefaultPoint
        endloop
        counter = 0
        SaveStr(hash, GetHandleId(u), StringHash(stringhash), s)
        return s
    endfunction
    
    //Меняет Две Выбранные Точки Записи Местами
    function PANACEA000Nui000Srting000Lib_ReplaceTwoPoints takes string s, integer swapPoint_1, integer swapPoint_2 returns string
        local string s1 = PANACEA000Nui000Srting000Lib_GetStringByPoint(s, swapPoint_1)
        local string s2 = PANACEA000Nui000Srting000Lib_GetStringByPoint(s, swapPoint_2)
        s = PANACEA000Nui000Srting000Lib_ReplacePoint(s, s1, swapPoint_2)
        s = PANACEA000Nui000Srting000Lib_ReplacePoint(s, s2, swapPoint_1)
        return s
    endfunction
    
    //Подсчитывает количество Точек Записи
    function PANACEA000Nui000Srting000Lib_TotalPointCount takes string s returns integer
        local integer counter = 0 
        local integer counterStr = 0
        local integer counterPoint = 0
        loop
        exitwhen counter > StringLength(s)
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint or counterStr > StringLength(s)
                counterStr = counterStr + 1
            endloop
            if SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                counterPoint = counterPoint + 1 
            endif
            counterStr = counterStr + 1
            counter = counter + 1
            
        endloop
        return counterPoint
    endfunction
    
    //Проверяет и добавляет Выбранную Точку Записи (в начало или в конец), если Точки Записи с таким же названием - не существует
    function PANACEA000Nui000Srting000Lib_AddNewPointWithNewName takes string s, string s_new, string metod returns string
        local integer counter = 0 
        local integer counterStr = 0
        local string s_check = ""
        loop
        exitwhen counter >= PANACEA000Nui000Srting000Lib_TotalPointCount(s)
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                s_check = s_check+SubString(s, 0+counterStr, 1+counterStr)
                counterStr = counterStr + 1
            endloop
            if s_check == s_new
                return s
            endif
            s_check = ""
            counterStr = counterStr + 1
            counter = counter + 1
        endloop
        s = PANACEA000Nui000Srting000Lib_AddPoint(s, s_new, metod)
        counter = 0
        return s
    endfunction
    
    //Ищет Выбранную Точку Записи и Отсылает её Номер
    function PANACEA000Nui000Srting000Lib_FindPointNumber takes string s, string s_find returns integer
        local integer pNumber = 1000000
        local integer counter = 0 
        local integer counterStr = 0
        local string s_check = ""
        loop
        exitwhen counter >= PANACEA000Nui000Srting000Lib_TotalPointCount(s)
            
            loop
            exitwhen SubString(s, 0+counterStr, 1+counterStr) == PANACEA000Nui000Srting000Lib_DefaultPoint
                s_check = s_check+SubString(s, 0+counterStr, 1+counterStr)
                counterStr = counterStr + 1
            endloop
            if s_check == s_find
                return counter
            endif
            s_check = ""
            counterStr = counterStr + 1
            counter = counter + 1
        endloop
        counter = 0  
            
        return pNumber
    endfunction
    
endlibrary
8
LastUchiha, Вкратце, она соединяет строки, и разделяет их значком "&", а потом с помощью функций может удалять, заменять, получать и т.д. нужные
8
LastUchiha, P.S. Она не очень оптимизированная, так как я только учусь программировать и ещё на уровне "Любитель"
15
Tredor46, я вот тоже только учусь, уже один годик прошёл)
30
Tredor46, учитывая что строки это слоупочная структура и не выгружаются из памяти, то эта либа слишком пахнет.
Ответы (15)
30
мне муи нужно
И что? У тебя буквально в принятых ответах структуры которые под капотом и есть паралельные массивы.
15
nazarpunk, вообще, мне просто нужна та же переменная типа location, но что-бы включала в себя 3 значения вместо хэндла, создавать собственный тип переменной на ванилле нельзя, тут и заключается главная проблема, через массив сделать не получиться, ведь мне нужно указывать индекс при выгрузке, а тут без него нужно.
Хочу сделать это для того что-бы оптимизировать стандартные локации, убрать утечки, и в целом быстрее будет чем каждый раз x, y, z сохранять или выгружать для чего либо.
25
мне просто нужна та же переменная типа location, но что-бы включала в себя 3 значения вместо хэндла
LastUchiha, переходи на lua
30
и в целом быстрее будет
Ты уверен? Судя по твоим вопросам получится ещё более слоупочная и дырявая вещь.
30
это же UjApi юзать прийдётся?
Зачем? Можно просто перейти на реф. А если юзать ужопу, то там вообще есть AngelScript.
15
nazarpunk, я не буду переходить на реф, даже не из-за того что пк не потянет у меня.
15
nazarpunk, если бы AngelScript можно было юзать без UjApi, то на нём бы и делал)
30
По сути я уменьшаю кол-во кода.
По сути? Открой скомпилированный код и расскажи как ты уменьшил количество. Если ты про структуры.
15
nazarpunk, к примеру кода для спелла который написанный на локациях, а не на координатах будет меньше.
Потому что переменная будет одна, а не две, аргумент один, а не два или три, сохранять \ выгружать в хэш-таблице нужно будет только одну переменную.
11
LastUchiha, без индекса даже sql строчка в таблице не смотрится.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.