10

» WarCraft 3 / Как создать свою систему локаций? - [Jass]

LastUchiha, Вкратце, она соединяет строки, и разделяет их значком "&", а потом с помощью функций может удалять, заменять, получать и т.д. нужные
10

» WarCraft 3 / Как создать свою систему локаций? - [Jass]

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
10

» WarCraft 3 / Как создать свою систему локаций? - [Jass]

LastUchiha, я не понял конкретно что ты хочешь, у меня есть 2 варианта решения, сейчас расспишу оба...
10

» WarCraft 3 / Как создать свою систему локаций? - [Jass]

Принятый ответ
Вроде структуры есть, сделай свою структуру, которая будет принимать X, Y, Z и пользуйся ей
10

» WarCraft 3 / Убрать надпись герой(союзника) погиб

OVOgenez, ого, спасибо, действительно много чего там, а я думал это скрыто, как "Герой ли юнит" (я знаю что буква большая нужна для героя если что)
10

» WarCraft 3 / Убрать надпись герой(союзника) погиб

OVOgenez, Так я и думал что всё знаю, а оказывается не всё, там кстати не всё есть, например я так и не понял где менять древо это или не древо и может юнит атаковать в упор или не может (как баллиста)
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Svintus, ты скрин так и не скинул, у тебя там вообще что-нибудь работает?
Я посмотрел, да ничем там особо написание не должно различаться, язык то JASS и там и там есть, а vJass и cJass не знаю
Они там есть?
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Svintus, скинь скрин что ты там где делаешь, я просто сейчас не понимаю что у тебя там происходит и почему ничего не получается
И GUI это триггеры, код это не GUI
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Вот, там рабочие, каждую секунду подсчитывается количество рабочих игрока красного и выводится на экран
Загруженные файлы
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Svintus, если честно я вообще не понимаю что ты пишешь, и как вообще это должно работать, давай я сейчас карты сделаю, там будет 4 работника и их количество будет выводить на экран, подожди чучуть
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Svintus, ну засунь в группу всех нужных (я бы кстати так изначально и сделал) и посчитай их
CountUnitsInGroup(GroupEnumUnitsOfPlayer())
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

Svintus, А тьфу, это AIшные функции, я их из подсветки убрал, пока что не было надобности ими пользоваться
GetPlayerUnitTypeCount - Может вот эта нужна?
Или можешь их в группу добавить и посчитать GroupEnumUnitsOfPlayer()
10

» WarCraft 3 / Как начать писать свой код ИИ?

Svintus, Если это просто для себя, то просто установи им логику действий через функции, я пока что так и не понял в чём корень проблемы
Если то-то, делают то-то, если это, делают это, во время того-то, делают это или то-то и т.д.
10

» WarCraft 3 / Вывод сообщения на экран о количестве юнитов (I2S не работает в ИИ)

А вообще я не знаю такой функции GetUnitCount()
Можешь скинуть что она делает? Это же не варкарфтавская функция вроде как (по крайней мере у меня не высвечивается)
10

» WarCraft 3 / Как начать писать свой код ИИ?

А к чему все эти humans.ai, ты именно Общий ИИ пишешь?
Если ты просто пишешь ИИ для своей карты/карт, можно просто через JASS его написать, разве так будет не проще?

Ты его пишешь просто для себя или ты хочешь написать что-то наподобие ботов AMAI?
10

» WarCraft 3 / Как сделать полоску хп у юнита/здания невидимой?

human1, Кстати там от расширения зависит, то есть у меня 1920х1080 и требуется 1.000.000.000 хп чтобы не видно было, а на какой-нибудь 1024х768 и 1.000.000 достаточно будет, ну и как уже сказали, у неуязвимых тоже не видно