Графика - Анимация: обратный ход броска и Графика - Анимация: точка броска - графическте составляющие, анима у юнитов проигрывается, и созданы для задержек. Для невидимого dummy-каста это и не нужно
если вам нужна пустышка, то таких есть есть несколько десятков. Но что вам нужно?
чтобы не останавливался перед кастом, и шел дальше выполнять очередь приказов. но такое исключаем, вам же мгновенная нужна. к сожалению, такие абилки, требуют задержек. у меня есть список, но надо проверить CastTime = 0 будет работать на таких?
pro100master, ну я еще не знаком с фрэймами и fdf. И вот интересно, fdf что делает. Думал объяснишь. Ладно забей, это надо вкурить самому, чтобы понять. Так понял щас идет разбор, и расписываешь функции. надо найди того русского парня, на русский исправит ошибки
Короче при запуске игры или редактора вечно запускается лаунчер близзард. да, теперь буду использовать идее.
Bergi_Bear, я так понял, что он сканирует весь комп? что-то не сразу догадался. у меня кучу карт везде в компьютере в разных папках, надо чистить все. короче спрятал в архив rar те карты, которые он не может прогрузить и закрывается.
ScopteRectuS, Почему же не подумал сразу. ладно ту карту переместил. папку переименовал, но все равно грузит эту не существующую папку. Эта карта система движения снарядов, скачанная годами ранее на 1.26 патч. Ни разу ее не использовал, что же он к этой карте привязался?
Qulore, вам нужно составить рандомный матч?
1 ) создаете структуру игроков: заводите переменную-массив игроков player[a], в котором будет записаны все игроки. И счетчик игроков max, который скажет сколько игроков имеется.
2 ) в начала дуэли циклом пробегаешь по слотам игроков, проверяя игроков: есть на карте и играют в данный момент. и добавляешь в массив игрока и в счетчик+1. Внимание: номер массива не может соответствовать номеру игрока player[0] ==Player(0) player[1] ==Player(1) итд. так может быть не всегда, к примеру синий игрок ливнул, и значит его место займет след игрок пример: player[1] ==Player(2) , короче таким образом составляется структура
добавляем так:
player[max] = Player(a) a - счетчик цикла
max = max + 1 нумерация структуры начинается с нуля, а счетчик игроков +1. как пример добавляете Player(0), а счетчик скажет что добавлено всего 1 игрок
3 ) у вас имеется арена, не знаю как у вас игра идет (1х1 или 2х2 или у вас может быть множество пар), короче вам нужно найти несколько пар игроков, которые будут драться друг с другом:
3.1) создаем блок цикла, пишем условие выхода из цикла: max <= 1 (это для 1х1 пары идеал, для 2х2 придется чуть чуть изменить условие) Короче если игроков меньше чем 2, то нельзя из этого составить пару, прекращаем искать
3.2) внутри цикла, ищем два игрока:
когда мы находим с помощью рандома число, т.е. номера массива (игрока), мы удаляем его из структуры. короче делаем таким образом (структура становится короче на 1 игрока):
player[max]=player[random] последний игрок в структуре меняется с рандомным, тк. рандомный вычеркивается из структуры
max = max - 1 уменьшаем на единичку счетчик
Получается что мы таким образом не будем два раза находить одного и того же игрока, поскольку из структуры удаляется найденные игроки, и их не будут находить.
Другой вопрос, что делать с нечестным числом игроков, если среди них несколько раз из-за рандома не учавствовал? к примеру 3 игрока осталось? завести счетчик битв для каждого игрока, и игрока с меньшим кол-во добавлять в первую очередь на арену. Учитывайте и победы.
не очень понятно, что вы имеете в виду видеть по вертикали. возможно имели в виду конусный обзор? ссылка 1тут кучу примеров, и есть примеры с полем видимости ссылка 2тут тоже больше инфы, пример с полем видимости внизу (но примеры себе так себе) ссылка 3код Hate
короче атаку запретить нельзя, можно выдать абилку склад, или кинуть бафф вроде тумана и его подобных. тогда юнит вообще не сможет атаковать. конечно можно подкорректировать и будет как надо. раздел "влияет на атаку"кидать баффы это будет дурацким способом. можно триггерно добавлять воину склад, который совсем убирает атаку. тогда он и не сможет атаковать, когда надо
самый идеальный вариант работать с типами целей атаки, есть самоубийцы, древы, техника. xgm.guru/p/wc3/wc3targets С ними вот можно работать. настраивает всем воинам атаку (пример атаковать не могут самоубийц), и если твой юнит входит в стелс, триггерно задавай класс самоубийц. если юнита обнаруживают, то удаляем класс самоубийц, и вауля враги могут ударить. вам надо периодически таймером проверять попал ли кто в поле зрения
слот игрока может занять (юзер-игрок, ИИ-компьютер или бот, нейтрал, еще есть наблюдатель). это можно определить с помощью функции, смотри в условии. но щас конечно речь не об этом, а о том что наверн происходит. как такое выходит
Во время теста карты через WE второй игрок успешно определяется как комп (!= MAP_CONTROL_USER)
когда ты первый раз создаешь карту, у вас есть станд триггер инициализации. Короче триггер запускает melee-режим или melee-игру: там старт ресурсы, чистит площадку от нейтралов и ставит рабов и хату, и запускает ИИ-код каждому компьютеру, и задает условия поражения. Посмотрите есть ли этот триггер. Именно он запускает при тесте с вами второго компьютера, которого вы даже не задавали слот как комп. мне кажется, что мб ты путаешь это понятие MAP_CONTROL_USER? сложно сказать, что у вас. карту в студио
но когда карту запускаешь через саму игру - увы, все компьютеры определяются как юзеры
вы в сингл-плеере (одиночной игре) или на батл-нете?
EviLInside, шаг меньше можно, только это увеличит работу цикла. Обычно шаг 32 используется для задачи мин клетке 32х32 тип паффинга, это я к примеру говорю что у варика сетка. даже ректы и регионы используют. А как высота строится, не знаю, сеточно ли? помню мне один пользователь Ральз скидывал на хайв xgm.guru/p/100/201676 А если у вас окружность огромная, то это сколько работы. можешь выложить в алгоритмы
код
library TerrainHeight
globals
private location loc = Location(0, 0)
real XH
real YH
endglobals
function GetTerrainZ takes real x, real y returns real
call MoveLocation(loc, x, y)
return GetLocationZ(loc)
endfunction
function IsCoordsInCircle takes real x,real y,real rad,real cx,real cy returns boolean
return (cx-x)*(cx-x)+(cy-y)*(cy-y)<rad*rad
endfunction
//Возвращает макс высоту в круге (а координаты в глобалках XH,YH)
function GetTerrainMaxZinRadius real cx, real cy, real rad returns real
local real maxH = GetTerrainZ(cx,cy)
//вершины квадрата
local real minx = cx-rad
local real miny = cy-rad
local real maxx = cx+rad
local real maxy = cy+rad
//координаты смещения
local real x = minx
local real y = miny
//мин шаг
local real block = 32.00
//инициирует координаты
set XH=cx
set YH=cy
loop
exitwhen y>maxy
set x = minx
loop
exitwhen x>maxx
if IsCoordsInCircle(x,y,rad,cx,cy) then
//если высота меньше, то записывает в maxH
if maxH < GetTerrainZ(x,y) then
set maxH = GetTerrainZ(x,y)
set XH = x
set YH = y
endif
endif
set x = x + block
endloop
set y = y + block
endloop
return maxH
endfunction
endlibrary
код писал от руки, тк редактора не было. ошибки не должно быть,
Тут надо понять как деформируется рельеф по высоте. Проще брать сеточкой (карта состоит из клеток тайлов), как рассчитываете размер шага брать? мин шаг - 32 или 128?
1 берете заводите темп глобалку maxH, и координаты XH YH. в ней записываете высоту центра окружности и координаты XH YH
2 Можно взять квадрат, который вписан в окружность. или правильно сказать окружность вписанная в квадрат. путаю эти понятия. далее циклом пробегаете по каждой точке квадрата. и сравниваете размер высоты с maxH.
Цикл происходит так (описываю примерно): сначала от левого верхнего угла квадрата берем точку, и проверяем
2.1 лежит ли точка в окружности, это надо сравнить: расстояние этой точки от центра окружности <= radius круга. Если меньше значит попала точка, иначе если больше расстояние, значит точка не лежит в круге (значит лежит уголке квадрата), следовательно, высоту не имеет смысла проверять.
2.2 проверяем высоту. сравниваем высоту выбранной точки, если оно больше чем maxH, значит берем эту высоту и записываем в maxH и координаты этой точки в XH YH
А да не рассказал как цикл происходит. От левой границы квадрата смещаем точку справа шагом 32, короче смещается координата X - и расстояние и проверяем высоту. и так до сих пор пока не упрется в правую границу. Потом опускаем координату Y на 32, и снова двигаем от левой стороны до правой, и так до сих пор пока не упрется в нижнюю границу и цикл завершаем.
вот такое делал здесь xgm.guru/p/wc3/226281тут есть пример где порчей точечно круг портил землю
Lotus101, выше скидывал как приказом покупать у здания. ну и на гуи можно
там отдаем магазину приказ "smart" (короче переключаем абилкой выбор на юнита. локально интерфейс у игрока переключается на магазин) и затем отдаем иммитирующий от нужного игрока приказ IssueNeutralImmediateOrderById где id-приказ равен id-итему или id-юнита (если нанимаете юнитов)
xgm.guru/p/blog-steal-nerves/ability3раздел для магазинов. там пишут: Побочным эффектом способности ‘Aneu’ (Выбрать героя) или ‘Ane2’ (Выбор воина) является доступ к другим заклинаниям боевой единицы. Даже, вражеский воин может использовать способности обладателя выборки. Это же очевидно, помните, есть способность "разведка" в мастерской гоблинов, чтобы обследовать территорию, нужно подойти и кликнуть. Или способность "поставка ресурсов" - производит обмен. Точно, также происходит и с наймом юнитов, игре нужно знать какой игрок нажал, затем продает ему юнита. Есть даже нативки с приказами, иммитирующие действия магазина от другого игрока. Даже атакующие абилки срабатывают.
можно удалить абилку и заново дать - на 1.26. с этим я не игрался, но помню, что можно. а про подводные камни неизвестно.
только так работает, но с предметами сложнее. Не знаю, можно у итемов удалить активную абилку, и заново пересоздать итем (в рефордже по-поему итему удаленную абилку вернуть можно было, а в 1.26 нельзя. поэтому итему удаленную активную абилку не вернуть. приходилось пересоздавать). Однако, кулдауны итемов привязаны к итемам героя, если взять запустить кулдаун итему, и дропнуть предмет, и затем заново вернуть в инвентарь - то кулдаун остается. А если этот же итем передать другому юниту, что будет? по-моему у другого юнита должен сброситься кулдаун. или нет? проверь
Кстати, там кулдаун у итемов не привязан к типам. Если у гера два посоха, и кастануть один, у второго посоха кулдаун же не пойдет? Это значит, меня наводит на мысль, что надо удалить этот итем, и заново пересоздать, и тогда кулдаун спадет
Bergi_Bear, тогда просто спросил. и рефорджа не было на тот момент. так что это бесмысленно без рефорджа. ты вот файл сделал, не понял куда пихать в регистре. Но ладно думаю это тоже самое что и удаление
Ред. MpW
» WarCraft 3 / От чего зависит время каста?
Ред. MpW
» WarCraft 3 / Документация функций интерфейса - API DOC FDF
» WarCraft 3 / Документация функций интерфейса - API DOC FDF
Ред. MpW
» WarCraft 3 / Молнии на любых эффектах
» WarCraft 3 / Работник бандитов
Ред. MpW
» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает
» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает
Ред. MpW
» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает
» WarCraft 3 / Duel
странно в инете не найти было примеров?
Ред. MpW
» WarCraft 3 / Duel
1 ) создаете структуру игроков: заводите переменную-массив игроков player[a], в котором будет записаны все игроки. И счетчик игроков max, который скажет сколько игроков имеется.
2 ) в начала дуэли циклом пробегаешь по слотам игроков, проверяя игроков: есть на карте и играют в данный момент. и добавляешь в массив игрока и в счетчик+1. Внимание: номер массива не может соответствовать номеру игрока player[0] ==Player(0) player[1] ==Player(1) итд. так может быть не всегда, к примеру синий игрок ливнул, и значит его место займет след игрок пример: player[1] ==Player(2) , короче таким образом составляется структура
добавляем так:
player[max] = Player(a) a - счетчик цикла
max = max + 1 нумерация структуры начинается с нуля, а счетчик игроков +1. как пример добавляете Player(0), а счетчик скажет что добавлено всего 1 игрок
3 ) у вас имеется арена, не знаю как у вас игра идет (1х1 или 2х2 или у вас может быть множество пар), короче вам нужно найти несколько пар игроков, которые будут драться друг с другом:
player[max]=player[random] последний игрок в структуре меняется с рандомным, тк. рандомный вычеркивается из структуры
max = max - 1 уменьшаем на единичку счетчик
Получается что мы таким образом не будем два раза находить одного и того же игрока, поскольку из структуры удаляется найденные игроки, и их не будут находить.
» Администрация XGM / Нестареющая классика — футболки XGM
Ред. MpW
» WarCraft 3 / Поле зрения юнита
ссылка 1 тут кучу примеров, и есть примеры с полем видимости
ссылка 2 тут тоже больше инфы, пример с полем видимости внизу (но примеры себе так себе)
ссылка 3 код Hate
короче атаку запретить нельзя, можно выдать абилку склад, или кинуть бафф вроде тумана и его подобных. тогда юнит вообще не сможет атаковать. конечно можно подкорректировать и будет как надо.
раздел "влияет на атаку" кидать баффы это будет дурацким способом. можно триггерно добавлять воину склад, который совсем убирает атаку. тогда он и не сможет атаковать, когда надо
самый идеальный вариант работать с типами целей атаки, есть самоубийцы, древы, техника. xgm.guru/p/wc3/wc3targets С ними вот можно работать. настраивает всем воинам атаку (пример атаковать не могут самоубийц), и если твой юнит входит в стелс, триггерно задавай класс самоубийц. если юнита обнаруживают, то удаляем класс самоубийц, и вауля враги могут ударить. вам надо периодически таймером проверять попал ли кто в поле зрения
Ред. MpW
» WarCraft 3 / Reforged: В сингле компьютеры определяются как игроки
» WarCraft 3 / Поясните за утечки
Ред. MpW
» WarCraft 3 / Special Effect Height + рельеф (часть вторая)
Ред. MpW
» WarCraft 3 / Special Effect Height + рельеф (часть вторая)
1 берете заводите темп глобалку maxH, и координаты XH YH. в ней записываете высоту центра окружности и координаты XH YH
2 Можно взять квадрат, который вписан в окружность. или правильно сказать окружность вписанная в квадрат. путаю эти понятия. далее циклом пробегаете по каждой точке квадрата. и сравниваете размер высоты с maxH.
Цикл происходит так (описываю примерно): сначала от левого верхнего угла квадрата берем точку, и проверяем
2.1 лежит ли точка в окружности, это надо сравнить: расстояние этой точки от центра окружности <= radius круга. Если меньше значит попала точка, иначе если больше расстояние, значит точка не лежит в круге (значит лежит уголке квадрата), следовательно, высоту не имеет смысла проверять.
2.2 проверяем высоту. сравниваем высоту выбранной точки, если оно больше чем maxH, значит берем эту высоту и записываем в maxH и координаты этой точки в XH YH
Ред. MpW
» WarCraft 3 / Заставить ИИ выбрать юнита
там отдаем магазину приказ "smart" (короче переключаем абилкой выбор на юнита. локально интерфейс у игрока переключается на магазин) и затем отдаем иммитирующий от нужного игрока приказ IssueNeutralImmediateOrderById где id-приказ равен id-итему или id-юнита (если нанимаете юнитов)
Ред. MpW
» WarCraft 3 / Сброс кулдауна
только так работает, но с предметами сложнее. Не знаю, можно у итемов удалить активную абилку, и заново пересоздать итем (в рефордже по-поему итему удаленную абилку вернуть можно было, а в 1.26 нельзя. поэтому итему удаленную активную абилку не вернуть. приходилось пересоздавать). Однако, кулдауны итемов привязаны к итемам героя, если взять запустить кулдаун итему, и дропнуть предмет, и затем заново вернуть в инвентарь - то кулдаун остается. А если этот же итем передать другому юниту, что будет? по-моему у другого юнита должен сброситься кулдаун. или нет? проверь
Кстати, там кулдаун у итемов не привязан к типам. Если у гера два посоха, и кастануть один, у второго посоха кулдаун же не пойдет? Это значит, меня наводит на мысль, что надо удалить этот итем, и заново пересоздать, и тогда кулдаун спадет
Ред. MpW
» WarCraft 3 / Заставить ИИ выбрать юнита
» WarCraft 3 / Адмирал Праудмур HD
» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP
Ред. MpW
» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP
Ред. MpW
» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP
ссылка
» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP
Ред. MpW
» WarCraft 3 / Заставить ИИ выбрать юнита