В последней версии в интерфейсе не работает функция Лидерборд - всегда отключен
Иногда не показывает скилы в панели скилов при выделении своего другого юнита, скорее всего из-за перехвата панели скилов других игроков. Исправляется выделением уже другого юнита и снова выделением сломанного юнита, неужели никто не сталкивался с этим? И где в вфе отключить перехват скилов (или как правильно называть эту функцию)?
У меня в каком-то переводе еще было применяет эффекты способности, но и остальные что ты скинул на русском вроде тоже были, хотя возможно это как раз и было вместо приводит способность в действие
Proshel_Doty:
В оригинале как-то не понятно или мне так кажется, сначала на русском с этим работал и там
Начинает применять способность
Приводит способность в действие
Применяет эффекты способности
Прерывает способность
Завершает применение
Когда без рус установил, будто бы все перепуталось, до этого все как в событиях написано так и было.
UNIT_SPELL_ENDCAST насколько помню cast это подготовка перед применением способности, должно же тогда означать завершение подготовки и начало использования?
Юнит начинает применять способность или похоже UNIT_SPELL_EFFECT как у тебя указано, странно что не работает, в идеале можно давать приказ отставить и поворачивать мгновенно в точку способности, но тогда он прошлый приказ сбросит(для этого есть стандартный берсерк и другие) и перезарядки не будет(но можно например заставлять его после этого кастовать скил на созданного дамика и кд пойдет, и тд)
На гуи гигантское количество примеров, наработок и карт, поиск в помощь, а когда поймешь, то можно и через координаты будет сделать SetUnitPosition или SetUnitXY
Название: Небесная звезда Метод: GUI или Jass, главное как можно меньше утечек MUI: Не обязательно Цель: Точка Количество уровней: 1 Версия игры для 1.26, хотя если там никак такое нельзя, а на 1.32 можно, то лучше на нем(на самом последнем лицушном) Описание: При касте в точке "цель способности" создается даммик, он начинает каждые 0.01секунды подниматься в высоте(+5 постоянно) и в области вокруг себя(300+постоянное увеличение на 10) создавать рандомно огромные глыбы размером примерно с мост(рандомный размер), по которым можно ходить и текстура пути такая, что юниты которые ниже глыбы не могут на нее взобраться, а те что выше, могут на нее упасть, и притягивает эти глыбы к себе(скорость +5 в сторону даммика) и соответственно глыбы поднимаются в высоте к нему. И вот тут интересно, как это сделать получится, постоянное создание декорации и удаление прошлой путем GetLocationXYZ, а также как юниты будут ходить по ним, сделав им высоту как у глыбы? Продолжительность спелла 20 секунд. Технические характеристики: Прочие нюансы сам сделаю
Думаю у тебя при выборе группы приказ каждый раз переназначается и кастует только на последнего выбранного, надо наверно очередь приказов делать или автокаст с бафом на время, но намного проще сделать копии через триггер
Пока что стандартный редактор Рефоржа не дотягивает до JNGP.
В Рефорже работают преимущественно кодеры топящие за Lua.
GUI триггеры аналогичные JNGP не завезли.
По ощущениям играют больше в 1.26. На одном айкапе игр ощущается значительно, больше чем не всеевропейском сервере Близзард.
Вот только на айкапе играют лишь в одну мапу, поэтому рассматривать его для картоделов смысла нет
Итак удаляю, все что с группой связано Bergi_Bear:
цитата
Страшны не как сам утечки, а как количество юнитов в переборе
Продебаж количество вызовов, а конкретно количество юнитов при каждом переборе
Даже если указываю игрока, которого нет в карте, все равно есть утечка
Вообщем дело было в чертовом гуишном "Юниты игрока/юниты игрока типа/юнита игрока при условии/юниты игрока в области" в любом случае создавал утечку, и как удалять не знаю
set udg_Group = GetUnitsOfPlayerAll(GetEnumPlayer())
то все работает отлично.
Так что лучше это PlayerAll не использовать. Всем спасибо.
Осталось придумать как оптимизировать чтобы не провисало и проц не дымился при таком переборе, если юнитов на карте мало, то все нормально, если более 100 + даммики создаются, то начинаются проблемы... (а перед этой функцией еще спамятся даммики...) Есть идеи?
вот этот монстр
function Move_ConditTime10 takes nothing returns boolean
if ( not ( udg_Time == 10 ) ) then
return false
endif
return true
endfunction
function Move_ConditTypeDelete takes nothing returns boolean
if ( ( GetUnitTypeId(GetEnumUnit()) == 'h044' ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == 'h045' ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == 'h046' ) ) then
return true
endif
return false
endfunction
function Move_ConditDelete takes nothing returns boolean
if ( not Move_ConditTypeDelete() ) then
return false
endif
return true
endfunction
function Move_ConditTypeEnum takes nothing returns boolean
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
return false
endif
if ( not ( GetEnumUnit() != udg_Caster ) ) then
return false
endif
if ( not ( GetEnumUnit() != udg_DummyCaster ) ) then
return false
endif
return true
endfunction
function Move_ConditTime6000 takes nothing returns boolean
if ( not ( udg_Time >= 6000 ) ) then
return false
endif
return true
endfunction
function Move_GroupActions takes nothing returns nothing ??//двигаем всех юнитов от точки кастера??
local real Speed = 8 //скорость движения //снизу проверяем минимальное расстояние от выбранного юнита до точки кастера + Time
if SquareRoot((GetWidgetX(GetEnumUnit()) - udg_CasterX) * (GetWidgetX(GetEnumUnit()) - udg_CasterX) + (GetWidgetY(GetEnumUnit()) - udg_CasterY) * (GetWidgetY(GetEnumUnit()) - udg_CasterY)) <= udg_Time/10*8 then
if RAbsBJ(GetWidgetX(GetEnumUnit())) <= 4000 and RAbsBJ(GetWidgetY(GetEnumUnit())) <= 4000 then //чтобы не двигал если юнит на краю карты
if ( Move_ConditTime6000() ) then //выключение триггера спустя 6 секунд
if ( Move_ConditDelete() ) then
call RemoveUnit( GetEnumUnit() )
else
call UnitDamageTargetBJ( udg_Caster, GetEnumUnit(), 2000.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
endif
call PauseUnitBJ( false, udg_Caster )
call DisableTrigger( GetTriggeringTrigger() )
else
if ( Move_ConditTypeEnum() ) then
set udg_MoveAngle = Atan2(udg_CasterY-GetWidgetY(GetEnumUnit()), udg_CasterX-GetWidgetX(GetEnumUnit())) //угол между координатами кастера и коорд юнита
set udg_MoveX = GetWidgetX(GetEnumUnit())-Speed*Cos(udg_MoveAngle) //X куда двигать юнита??
set udg_MoveY = GetWidgetY(GetEnumUnit())-Speed*Sin(udg_MoveAngle) //Y куда двигать юнита??
if GetTerrainType(udg_MoveX, udg_MoveY) != 'Jdrt' then
call SetTerrainType( udg_MoveX, udg_MoveY, 'Jdrt', -1, 1, 0 ) //если тип земли не изменен на этот, изменить его
endif //снизу проверяем проходима ли местность для юнита чтобы двигать
if IsTerrainPathable(udg_MoveX+RAbsBJ(50), udg_MoveY+RAbsBJ(50), PATHING_TYPE_FLYABILITY) == false or GetUnitTypeId(GetEnumUnit()) == 'h045' or GetUnitTypeId(GetEnumUnit()) == 'h046' then
call UnitDamageTargetBJ( udg_Caster, GetEnumUnit(), 3.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
call SetUnitX(GetEnumUnit(), udg_MoveX) //двигаем юнита
call SetUnitY(GetEnumUnit(), udg_MoveY)
endif
else
endif
endif
endif
endif
endfunction
function MoveGetEnum takes nothing returns nothing //для каждого игрока выбираем всех его юнитов
set udg_Group = CreateGroup() //каждый раз создаем группу(надо ли?)
set bj_wantDestroyGroup = true //скрипт на автоудаление группы(надо ли?)
call GroupEnumUnitsOfPlayer( udg_Group, GetEnumPlayer(), null) //выбираем группу
call ForGroupBJ( udg_Group, function Move_GroupActions )
call GroupClear( udg_Group ) //очищаем группу(надо ли?)
call DestroyGroup(udg_Group) //удаляем группу(?)
set udg_Group = null ??//переменная группы равна 0(?, вроде и без этого всего не было утечек, но навсякий)
endfunction
function Move_Actions takes nothing returns nothing
set udg_Time = ( udg_Time + 10 )
if ( Move_ConditTime10() ) then //в начале создаются даммики 45 штук...
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 45
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set udg_MoveAngle = ( I2R(GetForLoopIndexA()) * 8.00 )
set udg_MoveX = udg_CasterX-200*Cos(udg_MoveAngle)
set udg_MoveY = udg_CasterY-200*Sin(udg_MoveAngle)
set udg_Dummy[GetForLoopIndexA()] = CreateUnit(GetOwningPlayer(udg_Caster), 'h045', udg_MoveX, udg_MoveY, ( I2R(GetForLoopIndexA()) * 8.00 ))
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
else
endif
call ForForce( GetPlayersAll(), function Move_GetEnum ) //выбор каждого игрока
endfunction
//===========================================================================
function InitTrig_Move takes nothing returns nothing
set gg_trg_Move = CreateTrigger( )
call DisableTrigger( gg_trg_Move )
call TriggerRegisterTimerEventPeriodic( gg_trg_Move, 0.01 )
call TriggerAddAction( gg_trg_Move, function Move_Actions )
endfunction
Lotus101, я раньше так и делал...спрашиваю как перенести зеленного на синий слот...мне только это нужно знать....от 1 до макс кол-во игроков сделал раньше и нормально работало
Тогда это другой вопрос, похоже никак, но с другой стороны зачем это если можно сделать не меняя слот
я создал сам эту систему, мне только нужно узнать как переносить игрока на слот который играет и создать виспа для него
Потому что у тебя в цикле указывается от 1 игрока до последнего, то есть их два, но плеер с индексом 2 тогда будет игрок синий(или бирюзовый, а индекс 0 - красный),а не зеленей, сделай вместо цикла выбор всех игроков по контроллеру юзер, статус играет
Lotus101, выше скидывал как приказом покупать у здания. ну и на гуи можно
там отдаем магазину приказ "smart" (короче переключаем абилкой выбор на юнита. локально интерфейс у игрока переключается на магазин) и затем отдаем иммитирующий от нужного игрока приказ IssueNeutralImmediateOrderById где id-приказ равен id-итему или id-юнита (если нанимаете юнитов)
xgm.guru/p/blog-steal-nerves/ability3раздел для магазинов. там пишут: Побочным эффектом способности ‘Aneu’ (Выбрать героя) или ‘Ane2’ (Выбор воина) является доступ к другим заклинаниям боевой единицы. Даже, вражеский воин может использовать способности обладателя выборки. Это же очевидно, помните, есть способность "разведка" в мастерской гоблинов, чтобы обследовать территорию, нужно подойти и кликнуть. Или способность "поставка ресурсов" - производит обмен. Точно, также происходит и с наймом юнитов, игре нужно знать какой игрок нажал, затем продает ему юнита. Есть даже нативки с приказами, иммитирующие действия магазина от другого игрока. Даже атакующие абилки срабатывают.
Lotus101, гуи нет, можно через кастом написать. IssueNeutralImmediateOrderById(твой_игрок, твоё_строение, равкод_предмета)
Спасибо большое, очень помогло чтобы не делать костыли. Сделал такую системку рандомного пика героев для ботов.
В иницилизации заносим переменную типа юнитов с массивом, указываем число типов.
При пике выбираем всех игроков-ботов, устанавливаем переменную случайного числа для массива переменнйо типа юнита и выбираем виспа, заставляем таверну с выпавшим типом кликать на этого виспа и продаем этого героя.
Есть вариант проще и красивее выбирать все таверны, заставлять кликать на виспа и продавать юнита, но цикл будет больше.
В триггере юнит продан узнаем под каким массивом проданный юнит и устанавливаем, что переменная типа юнита с этим массивом теперь тип юнита с последним текущем массивом, то есть меняем их местами, уменьшаем количество типов героев.
Таким образом при каждом пике героя все время выбирается новое случайно число, число типов героя уменьшается и последний на данный момент тип меняется на только что выпавший массив и каждый раз есть кого-то пикнуть. Проверял вроде повторов не было и у каждого компа всегда кто-то пикнут. Подправьте пожалуйста если есть серьезные ошибки или утечки.
Vlod:
Так реакция же и идёт от того, что игра на стратегию. Тут очевидная закономерность.
И для доты быть игрой тактичной - плохо. Возьмём мипо как пример невозможных требований к игроку как минимум в микро игре. Полный потенциал героя раскрыть не сможет ни один человек просто из-за физических ограничений рук и монитора игры. Но стоит понимать, что если бы все игроки на карте играли героями, которые были бы одинаково сложны также, как и мипо, то все были бы на изначально равных условиях.
Тактическая составляющая в доте же вещь абсолютно рандомная и от тактики игроков зависит частично. Неравные (но не очень критично) по макроигре плееры постоянно будут уступать друг другу, чередуясь поражениями, потому что в доте настолько огромное количество несбалансированных между собой факторов, что предугадать наверняка последствия большинства своих действий ты не сможешь. Не сможешь, потому что это не человеческого мозга уровень. Выходит, что в равной по скилу игре победит тот, кому сегодня зарандомит на тактическое преимущество, не более.
А что будет, если стереть границы, как между технарями и гуманитариями? Разграничение чисто условное, как и макроигра с микроигрой. Получится такая ядреная каша из явно неработающих в тесной связи механик, что это расписать никогда не выйдет, потому что, в случае доты, один фейл игровой механики налаживается на другую игровую механику и так до бесконечного рекурсивного цикла.
Вопрос о том, как же заставить играть между собой лишь равных игроков - это дикий баян. Просто хватит игроков заставлять наяривать на циферки и пусть рейтинг твоих способностей будет зависеть от твоих способностей, а не от побед или поражений. Рейтинг игрока не должен повышаться или понижаться до нужного уровня слишком долго. Игрок стал сильнее? Так поскорее закидывай его к тем, к какой касте он принадлежит, а не устраивай прелюдии.
Как вообще можно подумать, что человек может быть хорошим геймдизайнером и он способен принять хотя бы одно верное решение, если в его игре можно апнуть ммр на одном герое, при этом на апнутом рейтинге иметь возможность играть на всех остальных. Лягуха, как в целом и все остальные в моба жанре - бездарь, который не понимает того, что на каждого отдельного героя нужен отдельный рейтинг, с его динамическим изменением, как я предложил выше. А для этого нужно и систему пиков отменить, а для этой отмены нужно игру сбалансировать, а для баланса игры нужно убрать у героев принадлежность к разным импакт-таймам, принадлежность героя к пушащим/сплитящим/непушащим/скейлящимся/нескейлящимся/и-т.д.. Не должно в одной игре быть настолько много концептуально разных героев, при этом чтобы на эту концептуальность игрок никак не мог влиять, придумать как эти различия стереть и победить. Игра не даёт средств играть, а показывает какую-то визуальную новеллу, где ты просто кликаешь на одну кнопку и ждёшь пока игра сама за тебя решит весь сюжет.
Я не хочу сказать, что в доте совсем нет выбора, но игра тебя постоянно вынуждает принимать лишь одно верное решение и почти никогда не даёт выбор между несколькими равноценными решениями, которые порождают целую ветку остальных решений. А если и даёт, то это значит, что этот выбор слишком сложен для анализа человеком.
И, предвещая: да, я за то, чтобы полностью лишить героев "индивидуальности". Способности не должны иметь слишком разноплановый характер и должны иметь возможность соотносится друг с другом. А то один герой хорошо башни херачит, а другой героев бьёт. И кто из них победит, как это понять? Ты либо этого никогда не поймёшь, либо поймёшь сразу, зная про состояние экономики в игре, выгодно ли бить башни или же героев и т.д.. И тогда один из плейстайлов автоматически улетает в мусорку и здравствуй дисбаланс. В другом случае победа, как всегда, зависит от чистого рандома.
По поводу слтжности, казуальности героев полностью согласен. Или делать по сложности более менее всех равными, или пусть сложные персы при должном скиле выносят любого легкого, как бы тот не старался(скил то не нужен пару кнопок нажать)
Neo48, разброс атаки в 10 единиц ничего не решает, а решает критический удар x 10 рандомный, который может быть а может и не быть.
А по нормальному решают нормальные механики, такие как:
Разоружение
Конроль
Усиление/ослабление урона
Физическая неуязвимость
Есть ещё такие вещи как внезапность и право первого хода, вон они решают. Когда какой-нить герой наносящий 300 магического урона по площади бьёт толпу этих крипов с такой 35-45 единиц, и они вообще не бьют даже
А если в карте только такие юниты и у них ничего вообще нет, то сами играйте в эту карту
Про механики, была одна идея сделать герою пасиву при атаке сравниваются защита врага и ловкость твоего героя, если процент защиты минус шанс больше нужного атака как бы не проходит и у врага происходит блок урона с эффектом(типо щит подставил и тд), если же меньше, то герой попадает по врагу и получает другую способность для нанесения урона по врагу(или например урон по этому врагу увеличивается на время, не суть), вместо рандома как сейчас в одной карте, когда ты используешь полуультимативный скил есть 15/20/25/30/35 получить этот дополнительный скил по врагу с тонной урона. Не повезло, не убил и скорее всего умер. Повезло, то скорее всего убил или снес 50%+, повезло еще больше и ты сделаешь даблкил. Еще в моей задумке хп юнитов можно сделать как щит, соответственно когда хп заканчивается щит якобы уночтожается и по тебе начинают проходить уже прямые атаки с анимацией крови и юнит получает дебафы(кровотечение, замедление). Люблю реализм вообщем)
Lotus101, удалить можно только тех, кто был добавлен триггерно.
Да я понял так и сделал, а вот приказ нейтральному зданию продать игроку юниту где находится, на гуи нет? Нужно компьютеру продать или он сам купил, пришлось костыли использовать
NaxefirYT, уже обновил, надо подождать пока модератор утвердит
Спасибо огромное! На будущее, есть ли какой-то способ конвертировать на более новых версиях, может что-то в файлах карты прописать или проги? А то я новые нативки и прочее не использую, да их вроде и не добавляют.
Ошибка, это делается во вкладке Боевая Единица, да и то только в UMSWE и только для покупки юнита. Тем не менее, это можно сделать через CustomCode.
Не знаю почему, триггеры Нейтральное здание(не триггеры юнит) не работают на продажу юнитов. Пришлось удалять этого юнита из магазина и добавлять нового такого же
borissuworov, карты не расчитаны на открытие в игре
Их надо пересохранить в редакторе
10-20 КБ это нормально, если не ошибаюсь, конвертер не сжимает карту после конвертирования
Проверил карту, нормально конвертируется и открывается в игре
Надеюсь исходник не перепутан со сконвертированной картой?)
Т.к варкрафт не будет видеть исходник если он создавался в версии 1.31
Уже версия 1.32.5, на нее не работает конвертер, как быть?
Lotus101, ну хз что именно, это нужно сидеть и разбиратся, т.к рефорджа нет, то я этим и не занимался. Делал я лишь перенос старых патчей на актуальные, там были проблемы, Даже кодировка war3map.j бывала другой. Но что конкретно в твоей карте нетак с рефорджем я тебе помочь не смогу.
Смотреть какой кусок кода или наличие, отсуствие скрипта как влияют на работоспособность. Хекс защиты естественно снимать. Ну и так далее.
Подскажите какие программы или каким способом можно отменить дело оптимизатора, депротектор?
» WarCraft 3 / WFE - Warcraft Feature Extender
» WarCraft 3 / 120+ FPS interp и мультиплеер
» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.
» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.
В оригинале как-то не понятно или мне так кажется, сначала на русском с этим работал и там
Начинает применять способность
Приводит способность в действие
Применяет эффекты способности
Прерывает способность
Завершает применение
Когда без рус установил, будто бы все перепуталось, до этого все как в событиях написано так и было.
UNIT_SPELL_ENDCAST насколько помню cast это подготовка перед применением способности, должно же тогда означать завершение подготовки и начало использования?
Отредактирован Lotus101
» WarCraft 3 / ТРЕЙЛЕР - WarCraft 3 Reforged Beta 3.0 MOD
» WarCraft 3 / Анимация и её нюансы при использовании способности. Задержки.
» WarCraft 3 / Как притянуть юнита
Отредактирован Lotus101
» WarCraft 3 / Заклинания на заказ
Заказ
Метод: GUI или Jass, главное как можно меньше утечек
MUI: Не обязательно
Цель: Точка
Количество уровней: 1
Версия игры для 1.26, хотя если там никак такое нельзя, а на 1.32 можно, то лучше на нем(на самом последнем лицушном)
Описание: При касте в точке "цель способности" создается даммик, он начинает каждые 0.01секунды подниматься в высоте(+5 постоянно) и в области вокруг себя(300+постоянное увеличение на 10) создавать рандомно огромные глыбы размером примерно с мост(рандомный размер), по которым можно ходить и текстура пути такая, что юниты которые ниже глыбы не могут на нее взобраться, а те что выше, могут на нее упасть, и притягивает эти глыбы к себе(скорость +5 в сторону даммика) и соответственно глыбы поднимаются в высоте к нему. И вот тут интересно, как это сделать получится, постоянное создание декорации и удаление прошлой путем GetLocationXYZ, а также как юниты будут ходить по ним, сделав им высоту как у глыбы? Продолжительность спелла 20 секунд.
Технические характеристики: Прочие нюансы сам сделаю
» WarCraft 3 / Помогите с триггером
» WarCraft 3 / Чем сейчас пользуются для создания карт?
Отредактирован Lotus101
» WarCraft 3 / Группа - юниты игрока вызывает утечку
Bergi_Bear:
Так что лучше это PlayerAll не использовать. Всем спасибо.
» Melee RTS Raganrok / Главная страница
» WarCraft 3 / Рандомный Герой
» WarCraft 3 / Как отследить удар из невидимости?
» WarCraft 3 / Рандомный Герой
Отредактирован Lotus101
» WarCraft 3 / Рандомный Герой
Отредактирован Lotus101
» WarCraft 3 / Заставить ИИ выбрать юнита
При пике выбираем всех игроков-ботов, устанавливаем переменную случайного числа для массива переменнйо типа юнита и выбираем виспа, заставляем таверну с выпавшим типом кликать на этого виспа и продаем этого героя.
Есть вариант проще и красивее выбирать все таверны, заставлять кликать на виспа и продавать юнита, но цикл будет больше.
В триггере юнит продан узнаем под каким массивом проданный юнит и устанавливаем, что переменная типа юнита с этим массивом теперь тип юнита с последним текущем массивом, то есть меняем их местами, уменьшаем количество типов героев.
» WarCraft 3 / Мои мысли об устаревших механиках Warcraft 3 и....
» WarCraft 3 / Заставить ИИ выбрать юнита
» WarCraft 3 / Конвертер карты в 1.26
» WarCraft 3 / Заставить ИИ выбрать юнита
» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP
» WarCraft 3 / Конвертер карты в 1.26
» WarCraft 3 / Не хостит карту на 1.32.5 (лицуха, не рефорджед)