0
7
6 лет назад
0

» WarCraft 3 / Нагрузка карты

Триггеры это глобалки, зачем их делать больше, если можно обойтись одним. Но если ты на GUI делаешь, лаги пойдут в одном триггере, когда действий слишком много станет. Можешь в таком случаи несколько триггеров сделать. И всё-таки писать лучше всё на JASS
0
7
6 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Нужна наработка

Как сказал Hate, к переменной типа real можно присвоить расстояние между точками. Сейчас попробую сделать наработку.
Пример такой себе, на тяп ляп, и не совсем правильно, но принцип ясен, думаю. В твоём случаи, нужно придумать, как значения каждого проверить между друг другом, не должно составить труда, если каждого пронумеруешь (массив). Вычислишь расстояние каждого, и сравнишь расстояние, а потом по индексу от самого маленького расстояния убьёшь кого надо, для проверки.
Загруженные файлы
0
7
6 лет назад
0

» WarCraft 3 / ТЕКСТ

biridius, Спасибо.
7
7
6 лет назад
Отредактирован WoLLFeR
7

» WarCraft 3 / local integer i = GetUnitTypeId(GetTriggerUnit()

Ну как сказать
Загруженные файлы
1
7
6 лет назад
Отредактирован WoLLFeR
1

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

Круги уже написали, напишу квадрат, если надо будет.
local unit u
local real r =100 Максимальный размер / 2
local real x = GetUnitX(u)+GetRandomReal(-1*r, r)
local real y = GetUnitY(u)+GetRandomReal(-1*r, r)
local location l = Location(x,y) Если тебе прям точку надо
Загруженные файлы
0
7
6 лет назад
0

» WarCraft 3 / Способности, требующие траты ресурсов

Лучше всего через триггер сделать, как посоветовал Loran124,
Желательно так. При нехватки золота, просто не даём юзать скилл.
Загруженные файлы
0
7
7 лет назад
0

» WarCraft 3 / Compile error.

EnergyFrost:
WoLLFeR,
Если делаешь глобалки- делай их уж нормально в globals,а не во вкалдке Переменные.
Бр. Сорян, но это легче стереть и самому за тебя написать)
Вот воспользуйся этой статьей
Я так и делал но потом у меня были ошибки, сейчас
call SetUnitAbilityLevel(bj_lastCreatedUnit, bj_SkillTwo, Level)
Вот, это строчка не компилировалась, только, bj_SkillTwo, поменял на udg_SkillTwo, запустилась без проблем
EnergyFrost:
Спасибо, я просто не совсем знаком с jass, обязательно прочту
0
7
7 лет назад
0

» WarCraft 3 / Compile error.

Вот
Doc:
Ну так значит у тебя в коде ошибка.
Возможно, и не одна, я же написал, первый скилл, первый jass, я на gui всегда делал, привычка расписывать всё осталось, я скинул карту выше, можешь посмотреть
Загруженные файлы
0
7
7 лет назад
0

» WarCraft 3 / Compile error.

EnergyFrost:
Периода достаточно 0.025 (это прям край. Меньше не надо. Многие юзают 1\24)
Скинь короче целиком код. Может че подскажу
При нескольких юзаний одновременно, варик зависает
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Compile error.

EnergyFrost:
лагает не из-за этого. Лаги из-за слишком малого периода могут быть, из-за замкнутого цикла и прочих логических ошибок
Кстати, можешь не использовать call local
Если я уменьшу период, снаряды перестанут лететь с нормальной скоростью, и выглядить при увеличении скорости это будет не красиво
Загруженные файлы
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Compile error.

Так, всё, заработало, вот только использовать глобальную переменную не лучший выбор, лагает в игре сильно, хотя утечек нет, всё из-за таймера, в общем мне нужно, чтобы снаряд, который летел, всего их 9, при соприкосновении с противником умирал, и наносил урон, буду рад любым примером, если скинете, что-то типо отряд в отряде
0
7
7 лет назад
0

» WarCraft 3 / Compile error.

Спасибо, минутку ребят, я исправляю
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Compile error.

EnergyFrost:
Ну началось, только убрал аргумент, сразу другие косяки
Doc:
Записывать его в глобальные или перебирать группу циклом.
Хорошая идея, сейчас попробую
Загруженные файлы
0
7
7 лет назад
0

» WarCraft 3 / Compile error.

EnergyFrost:
ForGroup использует в аргументы группу и адрес функции. Аргументы ты передать не можешь.
Пиши ForGroup(твоя группа, function название функуии)
а что делать, если мне аргумент нужен?
0
7
7 лет назад
0

» WarCraft 3 / Способность с зарядами.

Я недавно делал такое, не самый лучший пример, но такое можно сделать, 3 скилл на мапе, посмотри
Загруженные файлы
0
7
7 лет назад
Отредактирован Raised
0

» WarCraft 3 / Compile error.

Для тех, кому нужен полный код
код
function Trig_QStartTaimerA_Func001A takes nothing returns nothing
    local unit enumunit= GetEnumUnit()
    local real x = GetUnitX(enumunit)
    local real y = GetUnitY(enumunit)
    call MoveUnit(enumunit,GetUnitFacing(enumunit),10)
    call GroupEnumUnitsInRange(udg_enemygroup,x,y, 64.00, Condition(EnemyFilter()))
    call ForGroup(udg_enemygroup,function SomeFunc(enumunit))
endfunction

function SomeFunc takes unit witcunit returns nothing
local unit Thisunit = GetEnumUnit()
local real x=GetUnitX(witcunit)
local real y=GetUnitY(witcunit)
call RemoveUnit(witcunit)
call CreateUnit( GetOwningPlayer(witcunit), bj_STRELAQWeerEffect ,x,y, 0 )
call UnitApplyTimedLife(bj_lastCreatedUnit, 'BTLF', 1.00)
endfunction

function Trig_QStartTaimerA_Actions takes nothing returns nothing
    call ForGroup( udg_GroupQWeer, function Trig_QStartTaimerA_Func001A)
endfunction

//===========================================================================
function InitTrig_QStartTaimerA takes nothing returns nothing
    set gg_trg_QStartTaimerA = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_QStartTaimerA, udg_TaimerQStart )
    call TriggerAddAction( gg_trg_QStartTaimerA, function Trig_QStartTaimerA_Actions )
endfunction
говорит ошибка тут
Загруженные файлы
замечание от GF RaiseD: Используй пожалуйста форматирование: http://xgm.guru/p/help/txt2
0
7
7 лет назад
0

» WarCraft 3 / Утечки

quq_CCCP:
WoLLFeR, ну да, все очень просто...
Просто на словах, а на деле я очень не внимателен, и пропускаю многое, спасибо!
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Утечки

quq_CCCP:
Так, значит, с начало создаю фильтр, потом другую функцию, которая будет выполнять действия над юнитами в группе, потом назначаю группу используя GroupEnumUnitsInRange, затем используя группу, выполняю над юнитами действие?
0
7
7 лет назад
0

» WarCraft 3 / Утечки

quq_CCCP:
Я пытаюсь разобраться, хорошо фильтр, я могу его сделать, как отдельную функцию, если он возвращает только bool, то как работать дальше? ну одни юниты true, другие false, это через условие проверять?
и groupEnumOwningPlayer - это вражеские Игроки, как их записать?
0
7
7 лет назад
0

» WarCraft 3 / Утечки

Diaboliko:
При использовании JNGP: Конвертируешь в код -> избавляешься от функций, подсвеченных красным, заменяя их на нативные эквиваленты -> по возможности избегаешь создания объектов вроде точек, даммиков -> чистишь локалки, которые не очищаются сами по себе
Хммм,
Как я найду нативную?
Загруженные файлы
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Утечки

quq_CCCP:
А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.
Ты предлагаешь мне переписать это на jass? Я почти нечего не понимаю на jass(вру). Хорошо, как предлагает jass использовать группы? Gui использует полярные координаты, что при точках, что при диапазонах, и использует он их очень коряво! Как написать группу на jass правильно?
0
7
7 лет назад
0

» WarCraft 3 / Как заставить редактор распознавать ратушу

quq_CCCP:
WoLLFeR, Поэтому я предложил создать систему мили побед\порожений (да и целиком весь сценарий вашего сражения) своими руками, для разминки могу порекомендовать карту -Монолит (от Blizzard), там реализованы нестандартные рассы, мили ии для нестандартных расс и победа\поражение.
Для изучения если вы совсем не представляете как это реализовать думаю вам подойдет.
Спасибо, что-то я совсем забыл про монолит, обязательно учту, спасибо за помощь!
quq_CCCP:
Я просто превратил эту функцию в триггер с событием каждые 2 секунды, это тоже подойдёт да?
0
7
7 лет назад
Отредактирован Uber
0

» WarCraft 3 / Как заставить редактор распознавать ратушу

quq_CCCP:
WoLLFeR, эмм зачем, чувак я описал принцип работы дефольтного мили, где ты проиграешь если у тебя не осталось юнитов. Я так понимаю у вас не мили карта и вы не в лиге будите играть в неё. Определяем победу считая здания игрока, т.к вы на гуях пишите, пример на jass я предоставил не для копипаста а чтобы вы сами осилили аналог на гуи.
В том то и дело, что melee, но при этом не стандартные расы, и с выбором союза, ну вот, когда два игрока, против одного играют, один сливается(Триггер его считает проигравшим), а двое продолжают играть, стандартным методом, Главное здание не считается главным, вот в том-то и дело.
Код я переписал, и вроде работает
function Trig_MeleeInitVictoryDefeat_Actions takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

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

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction

//===========================================================================
function InitTrig_MeleeInitVictoryDefeat takes nothing returns nothing
    set gg_trg_MeleeInitVictoryDefeat = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_MeleeInitVictoryDefeat, 2.00 )
    call TriggerAddAction( gg_trg_MeleeInitVictoryDefeat, function Trig_MeleeInitVictoryDefeat_Actions )
endfunction
0
7
7 лет назад
0

» WarCraft 3 / Как заставить редактор распознавать ратушу

quq_CCCP:
Ну разумеется, если скопировать стандартную функцию из Blizzard.j тебе редактор выдаст ошибку, что функция с таким именем уже обявлена...
Я не понимаю в чем проблема, я подробно описал что к чему.
Описал, но не описал, как это засунуть в мапу
0
7
7 лет назад
Отредактирован WoLLFeR
0

» WarCraft 3 / Как заставить редактор распознавать ратушу

А всё скомпилировал, вписал Trig_...
Загруженные файлы