18

» WarCraft 3 / Как ускорить загрузку карты?

Это в одну кнопку не делается, это делается иногда достаточно геморройно и для каждой третьей карты - нужны индивидуальные настройки и подходы.
И то, приходится держать ухо востро и надеяться что где то не всплывет баг или какое то несоответствие параметров.
Проще говоря - это SLK оптимизация, т.е переделывание объектов из стандарта редактора в стандарт варкрафта (в последнем объекты быстрее грузятся).
Постоянно терпеть неожиданные баги и вечное ручное ковыряние готовых SLK таблиц при выпуске новых версий карты - так себе.
Самый стабильный SLK оптимизатор это War3SLKOpt, единственный недостаток в нём - он криво конвертит крупные числа типа 100000000, на выходе просто получается 1e+09.
Ну и ещё с кругами выбора беда, т.к в игре до оптимизации и после - круги выбора меньше 1.00 отличаются по размеру и что самое странное - значения круга выбора в РО и в SLK одинаковы.
18

» WarCraft 3 / Покраска ника в цвета

об этих цветах идет речь?
Если да, то A - это 1 вариант синего, B - 2 вариант синего, а C - это ColorNative.
На вид и в paint, цвет ника WorldEdit и цвет "C" совпадают
18

» WarCraft 3 / Покраска ника в цвета

PT153:
Где их найти, я уже писал.
Scenario -> Map Options -> Use Water Tinting Color; File -> Preferences -> Test Colors
как думаешь откуда они там взялись? Вдруг там просто подогнали на глаз)
Ещё был алгоритм, который мог делать подобное с ником в мультиборде:
Темные оттенки на скриншоте плавно передвигались по строке в любом направлении (как было задано в конфиге)
И когда темные оттенки удалялись, они могли заменяться другими и даже мог меняться фоновый цвет
Вообще можно бесконечно перечислять то что мог делать алгоритм, т.к там конфиг был ну просто огромный, там могли меняться очень много оттенков (оттенки генерировались алгоритмом и вносились в массив) и движение могло быть в любые стороны и даже "разбивание" с центра или наоборот "столкновение" оттенков
В том числе можно было регулировать скорость и ширину оттенка на фоновом цвете
Помню даже делал возможность совмещать несколько видов оттенков на одном фоновом цвете
Жаль конечно, я потерял этот алгоритм, но приблизительно помню как он работал
Загруженные файлы
18

» WarCraft 3 / Покраска ника в цвета

Diaboliko
был ещё вариант, чтобы задавался новый ник и сразу красился, что то типа "-setcolor 1 WorldEdit123 [1-1] [2-2] [3-3] [4-4]"
18

» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4

Неужели без ошибок?
Без русских букв в путях к варкрафту/JNGP?
В основном он не запускается из за отсутствия net framework, но это лечится режимом совместимости.
18

» WarCraft 3 / Возникла проблема с оптимизаторами!

Рабочий вариант:
  1. Сначала вытаскиваешь из карты листфайл
2. Далее SLKOpt (настройки как на скрине)
  1. Далее собираешь в RMPQex новый листфайл из карты после SLKOpt, используя листфайл из пункта 1
  1. Далее Wc3MapOptimizer, главное не забудь в "Выходной листфайл" задать листфайл из пункта 3
  1. Если ты в редакторе объектов используешь числа типа 100000000, то будь готов что на выходе в карте вместо этих чисел будет что то типа этого - "1e+09" и т.д, это правится в нормальном блокноте (открываешь в блокноте все SLK и далее ctrl+f по всем файлам, потом F3 и ctrl+v)
  1. Ещё карта может быть не видна при слишком длинном названии файла карты
Загруженные файлы
18

» WarCraft 3 / Триггеры не работают

PrincePhoenix:
UrsaBoss, prog, ClotPh, Absolute, ребята, давайте тему jass vs gui и тему, какой я мастер и умею работать с кодом вне карты оставим для другого треда.
это не понт, реально удобно работать с крупными картами именно так
18

» WarCraft 3 / Триггеры не работают

лучше бы инклюды из cjass юзал или другие аналоги
ну так всё равно же придется редактор открывать и там компилить карту
(заранее извиняюсь что встреваю в "диалог", вдруг повторится одна история)
18

» WarCraft 3 / Триггеры не работают

ClotPh:
Taurenus, что рассказывать?
у меня код в WE вообще пустой
я все пишу в war3map.j через Блокнот и его вставляю в карту через MPQ Editor после сохранения карты
если какое-то слово тебе тут не понятно, значит, пока (или вообще) и не нужно понимать
а я даже умудряюсь редактить на ходу слк, лишь бы не ждать часами пока откроется РО))))
(.j так же редактирую и могу сказать, это удобно)
Taurenus:
Джас много времени
я за одну ночь прочитал кучу статей про jass и смог начать кодить. Потом через некоторое время за полчаса-час врубился в принцип работы структур.
А всё остальное приходит с опытом, чем больше кодишь. Разом всё нельзя выучить
18

» WarCraft 3 / Триггеры не работают

Absolute:
GUI намного проще и удобнее.
jass намного проще и удобнее. И не нужно быть программистом чтобы писать на jass, там всё достаточно легко.
"1. Что есть jass и для чего он нужен"
18

» WarCraft 3 / Триггеры не работают

8gabriel8:
Там всего 100 небольших триггеров.
это ещё фигня, я в одной карте дефайном чекал кол-во триггеров, ну просто отлавливал кол-во вызовов CreateTrigger, насчитал 400 с лишним. И всё прекрасно работало
И при этом, там не было ни одного ExecuteFunc
18

» WarCraft 3 / Вопрос по Jass

Skolz:
UrsaBoss, хм... можно ещё пример если мне например нужно будет двигать этих юнитов каждые 0.03 сек в позицию юнита цели (таргета)?
ты уже отклоняешься от основного вопроса, "движение юнитов" и т.д есть в других темах
18

» WarCraft 3 / Вопрос по Jass

Skolz:
UrsaBoss, есть какой-нибудь простой пример перебора группы? Допустим, чтоб разом удалить всех юнитов из группы?
чтобы разом удалить используй GroupClear
Или вот пример:
function MyFunc takes nothing returns nothing
    call BJDebugMsg(GetUnitName(GetEnumUnit()))
endfunction

ForGroup(MyGroup, function MyFunc)
Напишет имена всех юнитов из группы
18

» WarCraft 3 / Вопрос по Jass

"TES" будет вызываться для каждого юнита в группе, а чтобы обратиться к юниту в этом случае - используй это:
GetEnumUnit()
18

» WarCraft 3 / Про JNGP

Macghoul:
А при сохранении, пишет, что найдена незарегестрированная функция
Убери русификатор триггеров, если он есть
18

» WarCraft 3 / Анти-афк

uranus:
Пушистый, я про то, что он будет агриться под ним, получать станы и т.д. Будет ли юнит корректно продолжать патруль после рута, например?
самоагр юнитов это не приказ. А вот некоторые виды стана, да
18

» WarCraft 3 / Анти-афк

Давно делал, когда ещё только только на jass начал кодить:
Нужен редактор JNGP и не расчитано на то, если игрок даст кому то контроль
library AFK initializer Init

    globals
        private integer array afkInt
                boolean array afkBool
    endglobals

    private function AFK takes player p returns nothing
        call BJDebugMsg(GetPlayerName(p))
    endfunction
    
    private function afkTrigger_Actions takes nothing returns nothing
        local integer i = 0
        
        loop
            exitwhen i > 11
            if( GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and afkBool[i] != true ) then
                set afkInt[i] = afkInt[i] + 1
                
                if( afkInt[i] == 120 ) then
                    call AFK(Player(i))
                endif
            else
                set afkInt[i] = 0
            endif
            set i = i + 1
        endloop
    endfunction
    
    private function afkRemove_Actions takes nothing returns nothing
        if( afkInt[GetPlayerId(GetTriggerPlayer())] > 0 ) then
            set afkInt[GetPlayerId(GetTriggerPlayer())] = 0
        endif
    endfunction

    //===========================================================================

    private function afkRemove2_Actions takes nothing returns nothing
        if GetIssuedOrderId() == 851973 then
            return
        endif
        if( afkInt[GetPlayerId(GetOwningPlayer(GetOrderedUnit()))] > 0 ) then
            set afkInt[GetPlayerId(GetOwningPlayer(GetOrderedUnit()))] = 0
        endif
    endfunction

    private function AnyPlayersEvent takes trigger trig returns nothing
        local integer i = 0
        loop
        exitwhen i > 11
        
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_END_CINEMATIC)
            call TriggerRegisterPlayerChatEvent( trig, Player(i), "", false )
            call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SELECTED, null)
            call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_DESELECTED, null)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_LEFT_DOWN)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_RIGHT_DOWN)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_DOWN_DOWN)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_UP_DOWN)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_LEFT_UP)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_RIGHT_UP)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_DOWN_UP)
            call TriggerRegisterPlayerEvent(trig, Player(i), EVENT_PLAYER_ARROW_UP_UP)
            
        set i = i + 1
        endloop
    endfunction
    //===========================================================================
    private function Trig_afkRemove2 takes nothing returns nothing
        local trigger trg_afkRemove2 = CreateTrigger(  )
        
        call TriggerRegisterAnyUnitEventBJ( trg_afkRemove2, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
        call TriggerRegisterAnyUnitEventBJ( trg_afkRemove2, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
        call TriggerRegisterAnyUnitEventBJ( trg_afkRemove2, EVENT_PLAYER_UNIT_ISSUED_ORDER )
        call TriggerAddAction( trg_afkRemove2, function afkRemove2_Actions )
        
        set trg_afkRemove2 = null
    endfunction
    private function Trig_afkRemove takes nothing returns nothing
        local trigger trg_afkRemove = CreateTrigger(  )
        
        call AnyPlayersEvent(trg_afkRemove)
        call TriggerAddAction( trg_afkRemove, function afkRemove_Actions )
        
        set trg_afkRemove = null
    endfunction
    //===========================================================================
    private function Trig_afkTrigger takes nothing returns nothing
        local trigger trg_afkTrigger = CreateTrigger(  )
        
        call TriggerRegisterTimerEvent( trg_afkTrigger, 1.00, true )
        call TriggerAddAction( trg_afkTrigger, function afkTrigger_Actions )
        
        set trg_afkTrigger = null
    endfunction
    
    private function Init takes nothing returns nothing
        call Trig_afkRemove2()
        call Trig_afkRemove()
        call Trig_afkTrigger()
    endfunction

endlibrary
  1. В строке if( afkInt[i] == 120 ) then настраиваешь нужное время в секундах
  2. afkBool это исключение для некоторых игроков, например если true, то система не считает что он афк
  3. В функции AFK делаешь то что тебе нужно, например отправляешь воина игрока куда надо
18

» WarCraft 3 / GetRealId( )

LordDracula
хм
novjass вообще текст убирает из конечной карты, надо пошаманить
А так, варкрафт это должен без ошибок читать, не понимаю почему pjass считает это за ошибку
Загруженные файлы
18

» WarCraft 3 / Кол-во переменных и возможные проблемы (ГУИ)

Свиборг:
Но я подумывал не оставлять эти переменные в теле карты, а врезать их в Blizzard.j
Не получится, т.к Blizzard j на всех компьютерах должен быть одинаковым и по нагрузке ничем не будет отличаться, даже если импортируешь его в карту, т.к BJ подгружается наравне с jass скриптом
18

» WarCraft 3 / GetRealId( )

И где тут RB?
Всё отлично работает
function R2Inew takes real r returns integer
    return r
endfunction
18

» WarCraft 3 / Кол-во переменных и возможные проблемы (ГУИ)

Свиборг:
Fakov, насчёт фризов... Имеются ввиду фризы во время загрузки карты или же непосредственно в ходе игры? А нюансы, например, какие? Сама по себе система работает, главное, чтоб не фризило-крашило.
от большого кол-ва забитых массивов не должно лагать, т.к по сравнению с реальной нагрузкой - это копейки
Свиборг:
UrsaBoss, я все эти переменные делал на гуи, не на жассе.
и учти, тебе придется сделать отдельный поток для инициализации твоих массивов, это чтобы исключить вероятность того, что завершится поток main из за лимита операций
Вот инструкция если ты не шаришь в jass:
На скриншоте 1, там где
call ExecuteFunc("Trig_MyTrig_Actions")
Это Custom Script, а MyTrig - это название нужного тебе триггера
На скриншоте 2 уже твой триггер с инициализацией массива, главное в событиях ничего не ставь
Загруженные файлы
18

» WarCraft 3 / Кол-во переменных и возможные проблемы (ГУИ)

Fakov:
нет, крашей не будет
чепуха, ещё как крашит
Ты попробуй для эксперимента засорить варкрафтом память, к примеру утечки и т.д.
У меня на ГБ с лишним варкрафт крашнул
Fakov:
8192* ))
нужно было ещё дописать кое что, т.к при использовании индексов больше 8190 могут быть всякие чудеса и т.д