27

» WarCraft 3 / От чего зависит время каста?

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

Графика - Анимация: обратный ход броска и Графика - Анимация: точка броска - графическте составляющие, анима у юнитов проигрывается, и созданы для задержек. Для невидимого dummy-каста это и не нужно

если вам нужна пустышка, то таких есть есть несколько десятков. Но что вам нужно?
  1. чтобы не останавливался перед кастом, и шел дальше выполнять очередь приказов. но такое исключаем, вам же мгновенная нужна. к сожалению, такие абилки, требуют задержек. у меня есть список, но надо проверить CastTime = 0 будет работать на таких?
  2. а есть такие скилы: кастанул, и юнит применил (стремительность берсерк двойные кнопки щит и прочее) xgm.guru/p/blog-steal-nerves/ability4
  3. мб фреймы? вам же нужна кнопка?
27

» WarCraft 3 / Документация функций интерфейса - API DOC FDF

pro100master, ну я еще не знаком с фрэймами и fdf. И вот интересно, fdf что делает. Думал объяснишь. Ладно забей, это надо вкурить самому, чтобы понять. Так понял щас идет разбор, и расписываешь функции. надо найди того русского парня, на русский исправит ошибки
27

» WarCraft 3 / Работник бандитов

почему рабы на плечо дрова таскают. это немного странно что копируют. могли бы на спину дрова или руками
27

» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает

Короче при запуске игры или редактора вечно запускается лаунчер близзард. да, теперь буду использовать идее.

Bergi_Bear, я так понял, что он сканирует весь комп? что-то не сразу догадался. у меня кучу карт везде в компьютере в разных папках, надо чистить все. короче спрятал в архив rar те карты, которые он не может прогрузить и закрывается.
Загруженные файлы
27

» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает

кстати я папку удалил, теперь грузит соседнюю папку и закрывается. как будто ему что то надо загрузить

кстати при открытии редактора заметил такую ошибку
Загруженные файлы
27

» WarCraft 3 / Open map в редакторе варкрафт рефорджет не работает

ScopteRectuS, Почему же не подумал сразу. ладно ту карту переместил. папку переименовал, но все равно грузит эту не существующую папку. Эта карта система движения снарядов, скачанная годами ранее на 1.26 патч. Ни разу ее не использовал, что же он к этой карте привязался?
27

» WarCraft 3 / Duel

Принятый ответ
вот карта-пример тут чисто старт пример, но все не стал делать
странно в инете не найти было примеров?

Кстати забыл добавить действие: прибавить в счетчик +1
Загруженные файлы
27

» WarCraft 3 / Duel

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 игрока осталось? завести счетчик битв для каждого игрока, и игрока с меньшим кол-во добавлять в первую очередь на арену. Учитывайте и победы.
27

» Администрация XGM / Нестареющая классика — футболки XGM

Инквизитор, закажи еще 20 комплектов для футбольной команды. скоро деток нарожаешь, будешь ездить =) команда хгм против яндекса, кто кого.
27

» WarCraft 3 / Поле зрения юнита

Принятый ответ
не очень понятно, что вы имеете в виду видеть по вертикали. возможно имели в виду конусный обзор?
ссылка 1 тут кучу примеров, и есть примеры с полем видимости
ссылка 2 тут тоже больше инфы, пример с полем видимости внизу (но примеры себе так себе)
ссылка 3 код Hate
короче атаку запретить нельзя, можно выдать абилку склад, или кинуть бафф вроде тумана и его подобных. тогда юнит вообще не сможет атаковать. конечно можно подкорректировать и будет как надо.
раздел "влияет на атаку" кидать баффы это будет дурацким способом. можно триггерно добавлять воину склад, который совсем убирает атаку. тогда он и не сможет атаковать, когда надо
самый идеальный вариант работать с типами целей атаки, есть самоубийцы, древы, техника. xgm.guru/p/wc3/wc3targets С ними вот можно работать. настраивает всем воинам атаку (пример атаковать не могут самоубийц), и если твой юнит входит в стелс, триггерно задавай класс самоубийц. если юнита обнаруживают, то удаляем класс самоубийц, и вауля враги могут ударить. вам надо периодически таймером проверять попал ли кто в поле зрения
27

» WarCraft 3 / Reforged: В сингле компьютеры определяются как игроки

Принятый ответ
игрок как игрок
кто из юзеров на самом деле комп?
слот игрока может занять (юзер-игрок, ИИ-компьютер или бот, нейтрал, еще есть наблюдатель). это можно определить с помощью функции, смотри в условии. но щас конечно речь не об этом, а о том что наверн происходит. как такое выходит

Во время теста карты через WE второй игрок успешно определяется как комп (!= MAP_CONTROL_USER)
когда ты первый раз создаешь карту, у вас есть станд триггер инициализации. Короче триггер запускает melee-режим или melee-игру: там старт ресурсы, чистит площадку от нейтралов и ставит рабов и хату, и запускает ИИ-код каждому компьютеру, и задает условия поражения. Посмотрите есть ли этот триггер. Именно он запускает при тесте с вами второго компьютера, которого вы даже не задавали слот как комп. мне кажется, что мб ты путаешь это понятие MAP_CONTROL_USER? сложно сказать, что у вас. карту в студио
но когда карту запускаешь через саму игру - увы, все компьютеры определяются как юзеры
вы в сингл-плеере (одиночной игре) или на батл-нете?
27

» WarCraft 3 / Special Effect Height + рельеф (часть вторая)

Принятый ответ
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
код писал от руки, тк редактора не было. ошибки не должно быть,
27

» WarCraft 3 / Special Effect Height + рельеф (часть вторая)

Тут надо понять как деформируется рельеф по высоте. Проще брать сеточкой (карта состоит из клеток тайлов), как рассчитываете размер шага брать? мин шаг - 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 тут есть пример где порчей точечно круг портил землю
27

» WarCraft 3 / Заставить ИИ выбрать юнита

Lotus101, выше скидывал как приказом покупать у здания. ну и на гуи можно
там отдаем магазину приказ "smart" (короче переключаем абилкой выбор на юнита. локально интерфейс у игрока переключается на магазин) и затем отдаем иммитирующий от нужного игрока приказ IssueNeutralImmediateOrderById где id-приказ равен id-итему или id-юнита (если нанимаете юнитов)
xgm.guru/p/blog-steal-nerves/ability3 раздел для магазинов. там пишут: Побочным эффектом способности ‘Aneu’ (Выбрать героя) или ‘Ane2’ (Выбор воина) является доступ к другим заклинаниям боевой единицы. Даже, вражеский воин может использовать способности обладателя выборки. Это же очевидно, помните, есть способность "разведка" в мастерской гоблинов, чтобы обследовать территорию, нужно подойти и кликнуть. Или способность "поставка ресурсов" - производит обмен. Точно, также происходит и с наймом юнитов, игре нужно знать какой игрок нажал, затем продает ему юнита. Есть даже нативки с приказами, иммитирующие действия магазина от другого игрока. Даже атакующие абилки срабатывают.
27

» WarCraft 3 / Сброс кулдауна

можно удалить абилку и заново дать - на 1.26. с этим я не игрался, но помню, что можно. а про подводные камни неизвестно.
только так работает, но с предметами сложнее. Не знаю, можно у итемов удалить активную абилку, и заново пересоздать итем (в рефордже по-поему итему удаленную абилку вернуть можно было, а в 1.26 нельзя. поэтому итему удаленную активную абилку не вернуть. приходилось пересоздавать). Однако, кулдауны итемов привязаны к итемам героя, если взять запустить кулдаун итему, и дропнуть предмет, и затем заново вернуть в инвентарь - то кулдаун остается. А если этот же итем передать другому юниту, что будет? по-моему у другого юнита должен сброситься кулдаун. или нет? проверь
Кстати, там кулдаун у итемов не привязан к типам. Если у гера два посоха, и кастануть один, у второго посоха кулдаун же не пойдет? Это значит, меня наводит на мысль, что надо удалить этот итем, и заново пересоздать, и тогда кулдаун спадет


27

» WarCraft 3 / Заставить ИИ выбрать юнита

Lotus101, там нужно специальную абилку добавить, если правильно понял вашу проблему.

ссылка пункт 2.9
27

» WarCraft 3 / Из-за рефорджа не работает пиратский варик и JNGP

Bergi_Bear, тогда просто спросил. и рефорджа не было на тот момент. так что это бесмысленно без рефорджа. ты вот файл сделал, не понял куда пихать в регистре. Но ладно думаю это тоже самое что и удаление
27

» WarCraft 3 / Заставить ИИ выбрать юнита

даймика создал рядом с магазином, и через приказы купил xgm.guru/p/wc3/warden-buyitem, вернул бабло.