8

» WarCraft 3 / Что вообще делает в триггере Initially on?

TeX13, EnableTrigger включает Триггер, может включить как минимум тот что был выключен функцией DisableTrigger
На счёт изначально выключенныъ в редакторе, я не знаю, врядтли, их же даже на ошибки не проверяет перед стартом
8

» WarCraft 3 / Функция сложения или вычитания шансов по Формуле убывающей полезности из Dota 2

Makeba, changing_chance это текущий шанс (например у нас сейчас шанс уклонения 50%)
change это насколько изменить шанс (например если у нас сейчас шанс уклонения 50% и change = 50%, то 50% + 50% = 75%)
Эти 75% и вернуться
function RecalculateChance takes real changing_chance, real change returns real
        local real new_changing_chance = 0
        if change >= 0 then //+ Шансы
            if changing_chance >= 0 and changing_chance >= change
                new_changing_chance = changing_chance+((100 - changing_chance)/100*change)
                //60+((100 - 60)/100*50 = 80
                //80+((100 - 80)/100*80 = 96
            elseif changing_chance >= 0 and changing_chance < change
                new_changing_chance = changing_chance+((100 - changing_chance)/100*change)
                //50+((100 - 50)/100*60 = 80
                
            elseif changing_chance < 0 and -changing_chance >= change
                changing_chance = -changing_chance
                new_changing_chance = -(100 - ((100 - changing_chance) / (1-(change/100))))
                //100 - (100 - 80) / (1 - 50/100) = 60
            elseif changing_chance < 0 and -changing_chance < change
                changing_chance = -changing_chance
                new_changing_chance = 100 - (100 - change) / (1 - changing_chance/100)                
                //-(100 - ((100 - 80) / (1-(50/100)))) = -60
            endif
        else //Минус шансы
            change = -change
            if changing_chance >= 0 and changing_chance >= change
                new_changing_chance = 100 - ((100 - changing_chance) / (1-(change/100)))
                //100 - ((100 - 80) / (1-(50/100))) = 60
            elseif changing_chance >= 0 and changing_chance < change
                new_changing_chance = -(100 - (100 - change) / (1 - changing_chance/100)) 
                //-(100 - (100 - 80) / (1 - 50/100)) = -60
                
            elseif changing_chance < 0 and -changing_chance >= change
                changing_chance = -changing_chance
                new_changing_chance = -(changing_chance -((100-changing_chance) * (1/(1-(change/100))) - (100-changing_chance)))
                //80-((100 - 80)/100*60 = 50
                
                //1-(60/100) = 0.4 = 80 -((100-80) * (1/0.4) - (100-80))
                //(1-(60/100)) = 0.4 = 80 -((100-80) * (1/(1-(60/100))) - (100-80))
                //-(90 -((100-90) * (1/(1-(50/100))) - (100-90))) = -80
            elseif changing_chance < 0 and -changing_chance < change
                changing_chance = -changing_chance
                new_changing_chance = 100 - (100 - change) / (1 - changing_chance/100)
                //100 - (100 - 80) / (1 - 50/100) = 60
            endif
        endif
        
        return new_changing_chance
    endfunction
8

» WarCraft 3 / Функция сложения или вычитания шансов по Формуле убывающей полезности из Dota 2

ScorpioT1000, Ну блин, ставить значения >= 100 Бессмысленно, нужна ли тут проверка или дописать комментай типа не ставите значния >= 100?
8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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