Ситуация:
На карте есть 6 игроков, трое из них "стандартные " (ратуша и рабочие, созданы не триггером, а вручную ). Другая троица имеет несколько зданий(без ратуши) и триггер на Спавн юнитов. Теперь суть вопроса:
Как сделать условия победы схожие со стандартными ?
Если ставить стандартные, то 3-их открывает. Можно ли совместить стандарт с тригером по типу юнит умирает?

Принятый ответ

Saturin, в стандарте игрок проигрывает, если у него 0 строений. Стоит отметить, что стандартные условия победи и поражения - это куча триггеров, которые создаются 1 действием в GUI. Необходимо изучить blizzard.j и в карте написать аналоги функций по победе и поражению.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
5 лет назад
0
Похожие вопросы:

ответ
Editor, игроков на карте 12
для каждого делать......
ответ
надо создавать несколько групп для зданий и группировывать их если игроки входят в союз между собой, для каждого главного здания нужно будет создавать переменную и связывать её со зданием, ничего тут сложного нет, главное внимательность.
ответ
"Далеко твоя рпг не уйдёт" моя рпг тебя переживет.
Ты тоже когда родился не умел так нагло хамить незнакомым людям, научился же как то. Люди с более серьезным отношением к миру чем "изменить систему один не могу но буду плакать об этом" могут изучить все что захотят и даже в одиночку будут стоить больше чем тысяча "всегда сдающихся" людей,
и тот человек (Да удалось, даже был лаунчер для этой игры. Forgotten Land) это подтвердил, хотя я уверен что он быстро опустил руки.
p.s чел прекращай настраивать других людей на поражение, если ты что-то можешь дать - дай, если хочешь чтобы другие не добились успеха чтобы ты оказался прав и не чувствовал себя ущербным то просто отойди в сторону.
Я на все твои выпады отвечу лишь одной фразой:
"Dota была обычной картой для warcraft 3 и она поначалу тоже была пустой ".
Ответы получены, пару шарящих людей нашел, (дай бог каждому такого человека который рассказал мне о многом что тут считают до сих пор невозможным)
Спасибо за поддержку! и особенно одному пользователю. Ведь именно благодаря таким людям как life2smiler, люди не делают хорошие проэкты а другие люди соответственно вынуждены играть в некачественные карты и в течении нескольких лет не находить решения наболевших проблем
(если нет хотя бы 1 го человека кому удалось сделать что-то необычное то все остальные продолжат считать это невозможным) А сегодня стало ясно что могут не знать о чем либо не только потому что никто не делал этого, а потому что человек на самом деле сделал но никому говорить не стал :)
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat 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
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
ответ
eriel222, например, у тебя есть 8 рас: 4 стандартные + тролли, иглогривы, огры, големы. Игрок не сделал выбор, в результате чего запускаем триггер с действиями: установить значение переменной равным случайному числу от 1 до 8 (переменная должна быть целочисленной), а потом проходиться условиями. Если число равно 1, то создать юнитов для расы альянс (в списке действий для режима сражения такая функция даже есть) в указанной точке и т.д. Следует уточнить, что для нестандартных рас расписывать создаваемых юнитов придется самостоятельно (например, создать домик троллей + 5 троллей-рабочих).
Увы, в игре игроку расу не назначить функцией. Можно лишь создать необходимых юнитов.

2
29
5 лет назад
2
Дайте им скрытую неуязвимую ратушу.
0
28
5 лет назад
0
Не совсем понимаю чуть вопроса. Какие именно нужны условия победы и поражения?
0
2
5 лет назад
0
PT153:
Не совсем понимаю чуть вопроса. Какие именно нужны условия победы и поражения?
Представим, что у игрока есть пару башен, казармы и фермы. Ратуши при этом нет. Я ставлю стандартные условия и получается, что этот игрок проиграет. Мне по-хорошему нужны стандартные условия победы или поражения.
0
28
5 лет назад
0
ставлю стандартные условия и получается, что этот игрок проиграет.
Нет, его строения будут просто показаны врагам.
Опиши конкретнее, что нужно, для всех типов игроков.
0
16
5 лет назад
0
NazarPunk, если скрыть, то юнит уже неуязвим для урон по площади.
0
2
5 лет назад
0
PT153:
ставлю стандартные условия и получается, что этот игрок проиграет.
Нет, его строения будут просто показаны врагам.
Опиши конкретнее, что нужно, для всех типов игроков.
Как раз-таки мне нужно это отключить, Но тогда не будет этих условий Победы поражения.
На карте пять игроков. Трое из них развиваются как в стандартном Warcraft е, Ну изначальные юниты я создавал вручную А не триггером. А двое игроков пользуется тем что создает Trigger на спавн юнитов. То есть они имеют всё кроме ратуши с рабочими. Я хочу сделать так как и в Варкрафте, то есть ратуша уничтожена если не построишь новую тебя раскрывает. Но каким-то образом обойти этих двух игроков которые сидят без ратуши, потому что для них Я указал другие юниты. Например, уничтожена башня игрок проиграл. Можно было бы указать это всем, но на карте есть другие рудники, А значит базы может быть и 2 и тогда при уничтожении основной Игра окончена. Такой расклад меня не устраивает.
0
29
5 лет назад
0
Например, уничтожена башня игрок проиграл.
Дайте башне классификацию ратуша и все дела.
0
2
5 лет назад
0
NazarPunk:
Например, уничтожена башня игрок проиграл.
Дайте башне классификацию ратуша и все дела.
Спасибо. Попробую
Saturin:
NazarPunk:
Например, уничтожена башня игрок проиграл.
Дайте башне классификацию ратуша и все дела.
Спасибо. Попробую
Поставил юниту классификацию ратуша. С башней прокатило. А вот с другим юнитом-нет. Он создан на основе обычной ратуши нежити, но способен двигаться. Может ли быть в этом проблема?
0
26
5 лет назад
0
Вариант 1: Надо тестировать, попробовать другие варианты, из кого этого юнита создавать, попробовать разные типы движения для стандартного Некрополя, может быть проблема вовсе не в них.
Вариант 2: Сделать свою реализацию победы/поражения, где можно указывать всё необходимое.
0
28
5 лет назад
0
Saturin, в стандарте игрок проигрывает, если у него 0 строений. Стоит отметить, что стандартные условия победи и поражения - это куча триггеров, которые создаются 1 действием в GUI. Необходимо изучить blizzard.j и в карте написать аналоги функций по победе и поражению.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.