Комментарии проекта WarCraft 3
1

Баг констант в JNGP

» WarCraft 3
Не знаю как давно это произошло, но при открытии любой карты в JNGP игровая константа GoldMineMaxGold равна стандартно нулю. Соответственно при сохранении карт золото во всех рудниках тоже сбрасывается к 0. В обычно идиторе если открыть с константами все нормально (1 миллион золота). Откуда редактор загружает данные по стандартному значению констант? Сталкивался ли кто с подобным?
quq_CCCP #1 - 3 часа назад 0
Странно, обычно 12500 золота в руднике...
Вы случаем ничего не меняли, когда речь идет о 100500 то редактор частенько сбрасывает на 0, как и слк оптимизатор (к примеру хп у деревьев ты выставил 9999999, а после слк оптимизации будет дефолт).
17

Ошибка в коде?

» WarCraft 3
GUI один раз - GUI навсегда, но для удобства переведу в код.

По причине своей некомпетентности в вопросах фатала не могу разобраться сам, почему и прошу помощи. Где-то в этом коде вызывается фатал. Про блок я уверен абсолютно, так как это способности, принадлежащие одному герою. Без него карта не фаталит, с ним - через некоторое время после начала игры. Закономерный вопрос: что же не так?
Код:
((код
function Trig_ElementsHammer1_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A02C' ) ) then
return false
endif
return true
endfunction

Читать далее...
quq_CCCP #1 - 3 часа назад 0
Там случаем не вручает абилку трупу? Обычно это заканчивается фаталом, а так же если шурудить абилки у трупов.
ClotPh #2 - 13 часов назад 0
Весь код нет желания смотреть, триггерного повышения уровня способности у мертвой боевой единицы нигде не могло быть?
DracoL1ch #3 - 14 часов назад 0
конкретно по этому типу фатала - никак. удали абилку целиком и проверь, будет ли фатал
Naadir #4 - 14 часов назад (отредактировано ) 0
DracoL1ch:
игра сканировала её данные, что-то еще об этом - тебе даже сам бог не ответит
ну либо движок решил пустить меня по ложному следу, как опытный маньяк
А как понять по .txt что делала игра перед вылетом? Я хочу попробовать просмотреть весь файл на предмет странных совпадений, т.к. скан данных этой способности происходит, скорее всего, каждую секунду, как и прописано в одном из скриншотов.
DracoL1ch #5 - 14 часов назад 0
игра сканировала её данные, что-то еще об этом - тебе даже сам бог не ответит
ну либо движок решил пустить меня по ложному следу, как опытный маньяк
Naadir #6 - 14 часов назад 0
DracoL1ch:
ну у тебя в куче последней абилкой вызывалась она, стоит проверить корректность её полей в целом или убрать вообще её и попробовать снова
Ты имеешь в виду, последней абилкой перед вылетом или она вызывалась другой абилкой?
Поля я проверил, всё чин-чином: отсутствует суффикс редактора и классификация (не герой, не предмет), переделано название. Остальные поля - без изменений.
DracoL1ch #7 - 15 часов назад 0
ну у тебя в куче последней абилкой вызывалась она, стоит проверить корректность её полей в целом или убрать вообще её и попробовать снова
Naadir #8 - 15 часов назад (отредактировано ) 0
DracoL1ch:
проверь настройки A01P, возможно, там кривые данные выше 3-го уровня
A01P - способность, которая даётся одному персонажу, пока живы два других. Это просто +40 к урону из этих блоков:
DracoL1ch #9 - 15 часов назад 0
проверь настройки A01P, возможно, там кривые данные выше 3-го уровня
Naadir #10 - 15 часов назад 0
DracoL1ch:
покажи txt от фатала, лучше - через pastebin
Что такое pastebin?
Нашёл .bin файл, возможно, он поможет? И дамп+txt файлы от последнего фатала.
прикреплены файлы
Bornikkeny #11 - 15 часов назад 0
Naadir, меня сильно смущает Wait в первом скриншоте. Пробуй обойтись без него.
DracoL1ch #13 - 15 часов назад 0
покажи txt от фатала, лучше - через pastebin
Hate #14 - 15 часов назад (отредактировано ) 0
тупой конверт с гуи как раз отвратителен. скриншоты в студию
и вообще. такие вопросы решаются удалением действий до тех пор пока фатал не пропадет. так и выясняется где он был
GF RaiseD #15 - 16 часов назад (отредактировано ) 2
GUI один раз - GUI навсегда, но для удобства переведу в код.
С каких это пор конверт с GUI - для удобства? Скрины давай.
Naadir #16 - 16 часов назад 0
Если нужно будет рассказать про идею конкретного куска, я постараюсь это сделать.
XGM Bot #17 - 16 часов назад 0
Похожие вопросы:

» ответ
низнаю какой спел у героя перезаряжается, на какой хватает маны, какие спелы у героя вообще есть, и в прочем на основе каких спелов они сделаны
да здравствует бд
FenikS1991:
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
» ответ
нет
no
» ответ
FenikS1991, убери стоимость в 15 маны.
» ответ
~8gabriel8:
mishanka122:
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
» ответ
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
    return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction

function DamageEnemy takes nothing returns nothing
    call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL,  DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction

function Temp takes nothing returns nothing
    local group grp = CreateGroup( ) //создаём группу юнитов
    local real dx = 0.00   // координата x 
    local real dy = 0.00   // координата y
    
    set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
    call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
    set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
    call ForGroup( grp, function DamageEnemy )
    
    call DestroyGroup( grp )
    
    set grp = null
endfunction
1 строчка бывает только у гуишников.

3

Атака Кавалерии

» WarCraft 3
Весьма простая наработка кавалерийской атаки, которую вы могли лицезреть во всяких фильмах про средневековье. Если я не ошибаюсь его называют рыцарский таран или как-то так.

Читать далее...
Int3r_Karma #3 - 4 часа назад (отредактировано ) 0
В общем, система хорошая. По крайней мере, идея правильная, но визуальное исполнение несколько страдает: юниты, которых отталкивают не то чтобы отлетают, они скорее телепортируются сразу на некоторое расстояние + во время рывка сами всадники проходят противников насквозь, хотя от системы с названием "Почти реальная кавалерийская атака" ждешь, что всадники, ударяясь о противников, буду все-таки тормозить.
Еще мне кажется слишком резкой разница в скорости между началом и концом рывка.
3712

Нужна модель? - Вам сюда!

» WarCraft 3
В данной теме вы можете сделать заказы на модели, и по возможности кто-нить сможет вам помочь в реализации данной модели.

Читать далее...
Эльрат #3704 - 7 часов назад 0
VetsaN, стать богом самому)
VetsaN #3705 - 7 часов назад 0
Эльрат:
Простите, детишки, бог оставил вас. Поэтому придется заключать сделку с дьяволом.
Что делать, если даже сам Дьявол не способен помочь?
Эльрат #3706 - 8 часов назад (отредактировано ) 0
Простите, детишки, бог оставил вас. Поэтому придется заключать сделку с дьяволом.
JesusHipster #3707 - 8 часов назад 0
Эльрат, это резонный упрёк, но я уже сделал свою долю заказов (и даже делал их полгода назад, правда преимущественно на Хайве, там как-то активнее заканчивают проекты).
Эльрат #3708 - 8 часов назад (отредактировано ) 0
JesusHipster, ну так прояви сочувствие, помоги людям с заказами, тут так много не сделанных. Святой Иисус, разве ты оставишь бедных страждущих деток в тяжелом положении? Разве твой моральный компас позволит тебе игнорировать их мучения? А то тут злой дядя Эльрат забирает их пирожки в школьных столовках. Детишки, давайте все вместе попросим доброго Иисуса помочь нам!
JesusHipster #3709 - 8 часов назад 0
DracoL1ch, Эльрат, ну не знаю, всегда хватало то ли гордости, то ли сочувствия не соглашаться делать модели для Варкрафта за деньги. Даже когда был студентом и не работал. Это конечно в рамках морального компаса каждого отдельного человека будет выглядеть по-разному, но хочу заметить, что этим как-то особенно так себе заниматься, работая на руководящем посту с госзаказами... Буду надеяться, что эти модели реально дотянут проекты ребят до релизов и не лишат их пирожков в школьных столовках.
DracoL1ch #3710 - 8 часов назад 4
если ты хорош в чем-то - никогда не делай это бесплатно
Эльрат #3711 - 10 часов назад 0
JesusHipster, деньги деток на школьные обеды самые лучшие, они так нежно шуршат...
JesusHipster #3712 - 10 часов назад 2
Эльрат, хватит красть деньги деток на школьные обеды, террорист
4

Есть ли продолжение?(OZLegionOrcsCampaign)

» WarCraft 3
Очень давно играл в эту кампанию. Когда я её прошёл, было написано что есть продолжение, но тогда я так и не смог его найти.
Сейчас вспомнил про неё опять, но продолжение найти так и не удалось.
Может быть кто-то знает где её искать?
(Главный персонаж - Повелитель Ужаса, Азерзил.)
Сюжет вкратце:
Кил-Джеден даёт приказ Азерзилу открыть портал для нового пришествия Пылающего Легиона.
Азерзил находит орков Чёрной скалы, и с их помощью находит книгу Медива(для открытия портала) и 2 камня измерений для поддержания врат открытыми. В последней главе нам предстоит 30 мин. охранять портал от людей и гномов. Когда портал наконец полностью открывается, приходит Демон Терринус и он говорит "ПРОДОЛЖЕНИЕ В МОЕЙ СЛЕДУЮЩЕЙ КАМПАНИИ ПРО ЛЕГИОН".
Ссылка на скачивание кампании, если кому интересно.(Зелёная кнопка "Скачать - 12 МБ" справа)
RunXM #4 - 14 часов назад 0
Всё ещё надеюсь, что кто-то знает что есть продолжение..
4

Проблема с воспроизведением звука

» WarCraft 3
Всем здарова!
Вообщем я в ратуше добавил 1 новую функцию, обмен ресурсов, золото на дерево или дерево на золото и вот тригерно всё отрегулировал как надо и добавил звук ошибки, когда игрок пытается обменять ресурс, а того или инного ресурса у него не хватает для обмена и звучит звук ошибки! Но тут появилась проблема, этот звук слышен всем игрокам, а не только тому, который использует это! Как это отрегулировать? как сделать в тригерах так, что бы этот звук ошибки при нехватке ресурса для обмена звучал только у одного игрока, того что нажимает обмен! Короче говоря, этот звук ошибки оповещающий о нехватке должен звучать только одному игроку который пытается сделать обмен. Как отдалить это?
Артес Менетил #4 - 14 часов назад 0
biridius:
GetLocalPlayer - функция с помощью которой можно указать код, выполняющийся только на компе определенного игрока.
управляешь пехотинцем синего игрока и красного. звук воспроизводится для хозяина юнита, зашедшего на траву.
А ясно! Ну вот это другое дело! Спс за наработку
Maniac_91:
А может, звук воспроизводить в точке? В которой ратуша построена. Если другой игрок не смотрит на ратушу в этот момент, то не услышит)
Не-не! Нето, я хочу полностью что бы ток для определённого игрока воспроизводился звук
Hate:
function PlayLocalSound takes string s, integer p returns nothing
        local sound snd
            if GetLocalPlayer() != Player(p) then
 				set s = ""
			endif
            set snd = CreateSound(s,false, false, false,10,10,"")
            call SetSoundChannel(snd,5)
            call SetSoundVolume(snd,127)
            call SetSoundPitch(snd, 1)
            call StartSound(snd)
            call KillSoundWhenDone(snd)
        set snd = null
    endfunction
call PlayLocalSound("tng_phaser1_clean.wav", 0)
Эм, чувак, я не пойму, а мне кого слушать, тебе или того первого чела? Кто из вас обоих прав то? А то ты дал код и он наработку. так какое из них лучше использовать?
7

Как сделать такую проходимость?

» WarCraft 3
Вот у меня карта Стратегия, на развитие стандартная, только я на неё каждой расе сделал новые здания и войска и вот я наткнулся на такую проблему! Вот знаете волшебниц Альянса, если присмотреться к этому юниту, то видно что волшебницы летают, тоесть парят над землёй, по стандарту они не могут со склонов или обрывов сходить вот так просто, они как и пешие имеют препятствия и это не правильно. Я хочу это исправить, но не знаю как! В триггерах я сделал, что бы отслеживало каждого нового обученного юнита категории Волшебница, но в тригерах нету такого, что бы новому обученному юниту дать возможность со склонов и утёсов сходить. Там есть только отключить препятствия, а это значит, что юнит будет сквозь всего проходить, а это тоже не то! Это подходит призраку, Банши к примеру, но не волшебнице! Волшебнице нужно отключить только наземные препятствия типо склонов и обрывов! Но они никак не могут проходить через деревья, здания и юнитов. И вот как это сделать?

Читать далее...
JaBeN_Симфер #5 - 14 часов назад (отредактировано ) 2
Единственный вариант - пожертвовать летающим типом передвижения в угоду Волшебнице, применив этот тип к ней, а все непроходимые для нее места сделать непроходимыми для летающего типа в общем.
DracoL1ch #6 - 17 часов назад 0
я-то уверен, я с этим раобтаю
quq_CCCP #7 - 17 часов назад (отредактировано ) 0
Артес Менетил:
Высчитать путь можно только в пустой карте с 1 юнитом, не с 10. А проверить проходима ли точка можно спец. функцией, пути это не такая уж и простая штука.
Просите за нескромный вопрос, а нахрена вам знать дойдет или нет, если можно просто проверять приказ. Можно ли стоять в точке или нет можно определить с помощью функции проверки пафинга или создать в этой точке предмет и сравить его текущие координаты с точкой создания, если координаты предмета не равны точке его создания - точка непроходимо, а текущее положение предмета есть ближайшая проходимая точка.
13

Пути

» WarCraft 3
Как определить, может ли пройти юнит в определённую точку на карте или к другому юниту?
GF RaiseD #12 - 15 часов назад (отредактировано ) 0
Можно проверить только проходимость отдельной точки. Тебе стоит разобраться с тем как работает поиск пути в игре и, возможно, написать копию системы расчета пути.
Дальше правильно настроить даммика/предмет и прогнать его по этому пути. Если координаты, в которые ты его перенесешь не совпадут с координатами, которые вернет проверка - на пути есть препятствие, к точке пройти нельзя. Не уверен что это будет работать в цикле и не знаю что будет с производительностью.
Vampir_kolik #13 - 17 часов назад 0
Я ещё подумаю пока. Может быть, через 4 массива сделать ту же самую систему.
12

Озвучка персонажей в Heroes of the Storm

» WarCraft 3
Где в игровых архивах Heroes of the Storm можно найти аудиофайлы озвучки персонажей?
[RIP] удалил весь бред
Hate #6 - 17 часов назад 0
Артес Менетил:
ClotPh, Ну а я выбрал это! Мне не трудно из архивов игры доставать что либо! Просто в некоторых играх вроде героев шторма нужная озвучка хз где находиться
Hate, Это что из ВОВ озвучка или из героев шторма?
делал из фраз вов
Артес Менетил #7 - 17 часов назад -4
ClotPh, Ну а я выбрал это! Мне не трудно из архивов игры доставать что либо! Просто в некоторых играх вроде героев шторма нужная озвучка хз где находиться
Hate, Это что из ВОВ озвучка или из героев шторма?
Hate #8 - 17 часов назад 0
если вы ищите озвучку конкретно короля лича, то может вас устроит эта
звуки можно ужать при необходимости
прикреплены файлы
13

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

» WarCraft 3
Доброго времени суток дорогие друзья!

Читать далее...
WoLLFeR #7 - 17 часов назад 0
quq_CCCP:
WoLLFeR, Поэтому я предложил создать систему мили побед\порожений (да и целиком весь сценарий вашего сражения) своими руками, для разминки могу порекомендовать карту -Монолит (от Blizzard), там реализованы нестандартные рассы, мили ии для нестандартных расс и победа\поражение.
Для изучения если вы совсем не представляете как это реализовать думаю вам подойдет.
Спасибо, что-то я совсем забыл про монолит, обязательно учту, спасибо за помощь!
quq_CCCP:
Я просто превратил эту функцию в триггер с событием каждые 2 секунды, это тоже подойдёт да?
quq_CCCP #8 - 17 часов назад 1
WoLLFeR, Поэтому я предложил создать систему мили побед\порожений (да и целиком весь сценарий вашего сражения) своими руками, для разминки могу порекомендовать карту -Монолит (от Blizzard), там реализованы нестандартные рассы, мили ии для нестандартных расс и победа\поражение.
Для изучения если вы совсем не представляете как это реализовать думаю вам подойдет.
WoLLFeR #9 - 17 часов назад (отредактировано ) 0
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
quq_CCCP #10 - 17 часов назад 0
WoLLFeR, эмм зачем, чувак я описал принцип работы дефольтного мили, где ты проиграешь если у тебя не осталось юнитов. Я так понимаю у вас не мили карта и вы не в лиге будите играть в неё. Определяем победу считая здания игрока, т.к вы на гуях пишите, пример на jass я предоставил не для копипаста а чтобы вы сами осилили аналог на гуи.
WoLLFeR #11 - 17 часов назад 0
quq_CCCP:
Ну разумеется, если скопировать стандартную функцию из Blizzard.j тебе редактор выдаст ошибку, что функция с таким именем уже обявлена...
Я не понимаю в чем проблема, я подробно описал что к чему.
Описал, но не описал, как это засунуть в мапу
quq_CCCP #12 - 17 часов назад 1
Ну разумеется, если скопировать стандартную функцию из Blizzard.j тебе редактор выдаст ошибку, что функция с таким именем уже обявлена...
Я не понимаю в чем проблема, я подробно описал что к чему.
WoLLFeR #13 - 17 часов назад (отредактировано ) 0
А всё скомпилировал, вписал Trig_...
прикреплены файлы