28

» WarCraft 3 / Остаток от деления (mod)

Это при условии, что 5 / 2 выдаст 2.5, а не 2, тогда вообще 0 будет. На каком патче пишется карта?
TeX13, а что писать то. В ModuloInteger тоже самое.
function ModuloN takes integer a, integer n returns integer
    return a - a / n * n
endfunction

function ModuloNPos takes integer a, integer n returns integer
    set a = a - a / n * n
    if a < 0 then
        return a + n
    endif
    return a
endfunction
28

» WarCraft 3 / Остаток от деления (mod)

i = (5 / 2 - [5 / 2]) * 100 = (2.5 - 2) * 100 = 50. Остаток от деления на 2 равен 50? Вот это реально бред, а ModuloInteger как раз и использует основы математики.
28

» WarCraft 3 / Остаток от деления (mod)

TeX13, то что ты написал бред. Как это относится к остатку от деления? Ты находишь дробную часть и умножаешь на 100.
28

» WarCraft 3 / Остаток от деления (mod)

TeX13, какой патч? Если 1.31, нужно отключить vJass. Если ниже, то только ModuloInteger и ModuloReal.
Открой blizzard.j и посмотри.
28

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

KingMaximax, нет, это не так работает.
TeX13, потому что TriggerRegisterAnyUnitEventBJ делает регистрацию для всех игроков, то есть событие playerunitevent и нужно использовать следующее.
EVENT_PLAYER_UNIT_DAMAGED - событие после брони.
EVENT_PLAYER_UNIT_DAMAGING - событие до брони.
28

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

Но в 1.31 есть же общее событие получения урона. Даже два - до обсчета брони и после.
Но их нет в GUI.
28

» WarCraft 3 / Где найти стандартные ИИ и как запустить

Cancel, Player(2) - это бирюзовый игрок, потому что в JASS индексы игроков с 0, 0 - красный, 1 - синий и так далее.
В настройках игрока дай имя синему, а после старта игры выведи имя Player(2) через CustomScript.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 10., GetPlayerName(Player(2)))
Исправь на Player(1) и убери повторный запуск ИИ, ибо PickMeleeAI() и так стартует ИИ.

Отпишись о результате и выбери лучший ответ.
28

» WarCraft 3 / Выбор игроков плохо работает

Принятый ответ
Все игроки - это группа, в которой есть все играющие игроки. Если играет 2 игрока - 2 игрока в группе.
Ну а 2, потому что при нефиксированных кланах и доступных слотах >=2 помимо человека добавляется Компьютер Средний.
28

» WarCraft 3 / Генератор псевдослучайных чисел

KingMaximax, полезность в том, что ты прекрасно знаешь, как работает генерация, гугл в помощь.
Если тебе не особо важно, то забей, используй обычный вариковский (как я, но с небольшими улучшениями).
28

» WarCraft 3 / Генератор псевдослучайных чисел

Какая разница, что ты имеешь на руках его принцип работы, если смысл в СЛУЧАЙНОМ результате?
Большая, потому рандом может быть разный. Мат. ожидание и дисперсия у разных распределений разные. Вдруг мне нужно normal, а варик использует uniform, или наоборот.
28

» WarCraft 3 / Генератор псевдослучайных чисел

8gabriel8, нет исходников -> не понятно, как работает -> лучше использовать свой, работа которого понятна.
28

» WarCraft 3 / Где найти стандартные ИИ и как запустить

Cancel, это вообще код из blizzard.j, его можно получить, создав новую карту и сконвертировав её в JASS.
PickMeleeAI() так-то стартует ИИ.
раскрыть
function PickMeleeAI takes player num, string s1, string s2, string s3 returns nothing
    local integer pick

    // easy difficulty never uses any custom AI scripts
    // that are designed to be a bit more challenging
    //
    if GetAIDifficulty(num) == AI_DIFFICULTY_NEWBIE then
        call StartMeleeAI(num,s1)
        return
    endif

    if s2 == null then
        set pick = 1
    elseif s3 == null then
        set pick = GetRandomInt(1,2)
    else
        set pick = GetRandomInt(1,3)
    endif

    if pick == 1 then
        call StartMeleeAI(num,s1)
    elseif pick == 2 then
        call StartMeleeAI(num,s2)
    else
        call StartMeleeAI(num,s3)
    endif
endfunction

Cancel, у ошибка, Player(2) - это бирюзовый игрок, а не синий. Синий - это Player(1). Потому и не работало.
28

» WarCraft 3 / Где найти стандартные ИИ и как запустить

Принятый ответ
function MeleeStartingAI takes nothing returns nothing
    local integer index
    local player  indexPlayer
    local race    indexRace

    set index = 0
    loop
        set indexPlayer = Player(index)
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set indexRace = GetPlayerRace(indexPlayer)
            if (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER) then
                // Run a race-specific melee AI script.
                if (indexRace == RACE_HUMAN) then
                    call PickMeleeAI(indexPlayer, "human.ai", null, null)
                elseif (indexRace == RACE_ORC) then
                    call PickMeleeAI(indexPlayer, "orc.ai", null, null)
                elseif (indexRace == RACE_UNDEAD) then
                    call PickMeleeAI(indexPlayer, "undead.ai", null, null)
                    call RecycleGuardPosition(bj_ghoul[index])
                elseif (indexRace == RACE_NIGHTELF) then
                    call PickMeleeAI(indexPlayer, "elf.ai", null, null)
                else
                    // Unrecognized race.
                endif
                call ShareEverythingWithTeamAI(indexPlayer)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop
endfunction
28

» WarCraft 3 / Пассивка - восстановление маны в проценте

TeX13, чародейская аура и в процентах регенить может. И зачем создавать 100500 способностей, если можно сделать несколько уровней?
28

» WarCraft 3 / Плавающий текст (texttag) черет туман войны

а в итоге я вас не так понял
А что не понятного-то, IsVisibleToPlayer(x, y, GetLocalPlayer()) вернёт правду для тех, кто видит точку, и ложь для тех, кто не видит.