11

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

Svintus, Да необязательно их в группу добавлять, ты их просто подсчитай любым способом и выведи ту переменную, в которой подсчитал
11

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

LastUchiha, P.S. Она не очень оптимизированная, так как я только учусь программировать и ещё на уровне "Любитель"
11

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

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

» 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
11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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