27

» WarCraft 3 / Как сделать спелл Wild Axes?

мб поможет
еще вот это
еще это
да автор хочет все готовое. сам понимать и учиться не хочет, и поэтому сделать не сможет. еще поиском юзать не хочет. вбей это название, посмотри. есть кстати раздел - заклинание на заказ
этот спел использует хитрую математику отличающую от типичного движения. Это JASS
  • Ax, Ay - координаты точки кастера
  • Cx, Cy - координаты точки цели (если цель-юнит пустой, берем точку)
  • создаем двух даймиков: lAxe1 и lAxe2
  • создаем два таймера: lTimer1 и lTimer2 и аттачим на их хэндлы все: ID1 и ID2. хэндл - номер объекта
даймиков то мы создали, теперь нужно нам получить начальные точки смещения даймиков (смещаем 300 вперед по углом 45 градусов. одного влево +45, другого вправо -45):
  • set angle = Atan2(Cy-Ay,Cx-Ax) Аркстангенс, угол между двумя точками, возвращает радианы
координаты для первого даймика
  • set x3 = (Ax+300*Cos(angle+45))
  • set y3 = (Ay+300*Sin(angle+45))
координаты для второго даймика
  • set x4 = (Ax+300*Cos(angle-45))
  • set y4 = (Ay+300*Sin(angle-45))
  • получаем и смещаем даймиков под эти координаты
  • даем им абилку ворона - чтоб летал, и немножко приподнимаем (для красоты видимо, топоры летят же)
теперь сохраняем в хэш-таблицу данные для каждого даймика (вы должны заранее инициировать ее)
  1. сохраняем кастера
  2. самого даймика
  3. координаты кастера (могли и не сохранять, можно напрямую у кастера брать нативками корды. но кастер может переместиться, и позиция будет не та, и вся система может сбиться, поэтому запоминаем позицию каста)
  4. координаты цели (конечная цель, тоже самое, чтоб не сбилось)
  5. координаты даймика x3, y3 или x4, y4 в зависимости от того какого даймика храним
  6. сохраняем единицу (a=1). так понял это с каждым тиком таймера на 0.2 становится меньше или больше. Короче это не совсем радиан, как я думал, а множитель. Такая хитрая математика. Пропорция короче. 1.00 = 100% в одну сторону становится меньше, а когда дойдет до нуля, то обратно будет увеличиваться до 1.
  7. сохраняем угол. Если даймик был смещен слева под углом 45, то сохраняем -45 (короче будем вычитать). Если второй даймик был смещен слева под углом -45, то сохраняем 45 (короче будем прибавлять).
  8. сохраняем группу g. (для работ и вычислении всяких)
  9. сохраняем логическую истину. RD2 = true
все сохранили, запускаем периодичные таймеры
каждый раз/через каждый период времени запускаем функцию
загружаем из хэш-таблицы по хэндлу таймера:
  • юнита и даймика, группу
  • A - точка кастера (не текущая). Ax, Ay - координаты
  • C - точка цели. Cx, Cy - координаты
  • B - третья точка = смещенная точка Cx, Cy - координаты (это координаты x3, y3 или x4,y4)
  • a - процент выгружаем из хэша (он каждый раз меняется)
  • RD2 - логическая для проверки, истина говорит, что движемся к цели. когда дойдет до цели, мы изменим на ложь, перевернем даймиков. И теперь будем двигать обратно к цели
далее вычисления
b = 1 - a
новые координаты ниже, смещаем по этим координатам. Меня вот эти ниже заинтересовали, очень похоже на квадрат суммы, откуда эти вычисления координат. порылся, ничего не нашел.
Ax*a*a + Bx*2*a*b +Cx*b*b
Ay*a*a + By*2*a*b +Cy*b*b
по этим координатам выделяем в группу, наносим урон, выделяем деревья и уничтожаем их
  • далее в конец каждый раз проверки идут
function RMaxBJ takes real a, real b returns real
    if (a < b) then
        return b
    else
        return a
    endif
endfunction

//функция PAI вычисляет расстояние
function PAI takes real x1,real y1,real x2,real y2 returns real
return SquareRoot(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))
endfunction

//тут RE2 - выбирает макс. время между полученным и 0.4 сек. короче расстояние PAI поделенное на скорость 1300.
local real RE2=RMaxBJ(PAI(Ax,Ay,Cx,Cy)/1300,0.4) 
если RD2 истинно, то изменяем и сохраняем только "a", иначе, еще и кастера
if(RD2)then
	call SaveReal(udg_Hash,(id),(137),((a-.02/RE2))) //изменяется a
else
    call SaveReal(udg_Hash,(id),(137),((a+.02/RE2))) //изменяется a
    //сохраняем координаты кастера
    call SaveReal(udg_Hash,(id),(284),GetUnitX(N0I)) //N0I - кастер
    call SaveReal(udg_Hash,(id),(285),GetUnitY(N0I))
endif
если a становится меньше нуля, то переворачиваем даймиков и RD2 = false
if(a<0 and RD2)then
	call SaveBoolean(udg_Hash,(id),(291),(false)) //это RD2
    //пересохраняем координаты третьей точки, короче та что смещается под углом
    //тут изменились координаты, так как мы прибавили или убавили угол на 45
	call SaveReal(udg_Hash,(id),(288),((Ax+300*Cos(Atan2(Cy-Ay,Cx-Ax)+(LoadReal(udg_Hash,(id),(292)))))*1.0))
	call SaveReal(udg_Hash,(id),(289),((Ay+300*Sin(Atan2(Cy-Ay,Cx-Ax)+(LoadReal(udg_Hash,(id),(292)))))*1.0))
endif
27

» WarCraft 3 / Надо ли очищать группу перед уничтожением

не надо. основные утечки: это объекты и необнуленные локалки. группа эта как автобус, а пассажиры автобуса - юниты, при удалении удаляешь автобус с пассажирами, если ли смысл чистить группу перед удалением тогда? это же не спасательная операция или это вместо автобуса можно представить как таблицу. по идее нативка Destroy сама удалять и подчищать
27

» WarCraft 3 / Memory Hack: GetUnitAttackSpeed( )

Скорость атаки - задержка между первой атакой и второй. Эти проценты прицепляют к формуле
тема
В процентах же конечно.
27

» WarCraft 3 / Как правильно установить текстурку?

Принятый ответ
узнать путь расположения текстуры (записано в импортируемой модели, если вы хотите поменять в существуемой стандартной модели вара, то тоже нужно узнать путь и заменить: то есть импортировать текстуру по этому пути). В этом поможет mpq-архив и прога работающая с моделью
приблизительно рассказываю
  1. открываете РО юнитов, ищите нужного юнита, смотрите что за модель (там обычно прописан путь)
  2. с помощью mpq-архиватора (проги: mpqmaster или Ladik's MPQ Editor) находите эту модель и вытаскиваете из архива вара (возможно просмотреть можно напрямую и с модельными прогами (War3ModelEditor и MdlVis) - неизвестно мне)
  3. в программах, работающих с моделями (War3ModelEditor и MdlVis), смотрите какие текстуры используются, по какому пути лежат.
  4. заменяете по этому же пути. Замена одной текстуры может быть повлиять и на другие модели.
Примечание: В случае с импортной моделью, обычно авторы дают модели и текстуры, текстовик приклепляют с этим, в нем указывают путь текстур, нужные для модели. Если нет там такого, используйте проги War3ModelEditor и MdlVis, чтоб посмотреть (можно даже самому изменить). Но и не редко, бывает, что текстура в модели есть, или использует стандартную варкрафтовскую, так что не нужно ничего импортировать и указывать пути. Кстати есть еще прога zmodeler-2.2.3-build971, скачал, у себя лежит, не пользовался
27

» WarCraft 3 / Туман войны

Принятый ответ
есть в триггерах раздел "Видимость". Есть черная маска (Black Mask) и туман войны (Fog of war). Черная маска заграждает обзор юнита черным, на мини-карте отображается, открыть можно если войти в нее юнитом, но разведанные участки ранее обратно не покрывается черной маской, остается туман. Туман - это тоже заграждение, но здесь оставляет разведанные участки, можем видеть какие здания поставил и прочее.
Можно периодично включать и выключать эти настройки (EnableBlackMask/DisableBlackMask или EnableWarOfFog/DisableWarOfFog), но получается не очень красиво (юниты пропадают на секунду). Мгновенно туман или маска не может появится и тут же сразу же исчезнуть, одновременно с этим пропадают юниты, не сами юниты, а их изображение на секунду (типа баг).
Для того, чтобы ранее разведанные участки покрывали туманом войны или черной маской, достаточно создать модификатор видимости один раз на всю игру. можно без Enable - в скрине не нужное действие.
модификатор видимости можно выключить (disable), так и включить (enable). не нужно плодить. единственное, что нужно ли для каждого 12 игроков создавать свой модификатор или через гетлокалплеер заработает без десинка? по идее можно ли сделать, чтоб каждый игрок будет на своей машине видеть разные участки?
ссылка
единственное вопрос, как сделать черную маску настолько темной (или как скрыть мини-карту), что даже не видно будет деревьев и прочее. не помню уже как это делал. вспомнил. Сценарий>>Параметры Карты>>Скрытые области частично видны, снимаем галочку. И все, мини-карта черная, и сама карта. ссылка
есть система реалистичного обзора на jass
Загруженные файлы
27

» WarCraft 3 / Как задетектить число в сообщении?

может поможет эта тема
английские буквы принимает как за 1 символ, русские буквы как за 2 символа принимает
27

» WarCraft 3 / Едкое дыхание

DemonoiD, да ничего она не делает, по зданиям, не зданиям проверял. Видимо и правду убрали в ранних версиях. Теперь это чисто визуалка.Только можно этим скиллом модель анимации снаряда указать. Поменяет на указанную. Даешь лучнице, стреляет не стрелами, а чем-то другим. Все конец.
27

» WarCraft 3 / Новые нативные функции в 1.29

awesomesk1ll, да ладно. уж не страшно, это бж-функция, самому можно написать такую
27

» WarCraft 3 / Новые нативные функции в 1.29

awesomesk1ll, ModuloInteger - это остаток от деления, что не так то? что добавили там? эта функция очень полезна
27

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

А можно ли сделать бафф отрицательным или положительным? Например, бафф от от скилла "Рев" друида. По идее это положительный бафф, а если сделать дебафф (там отрицательный реген, мана, защита, урон), то все равно это дебаффом то не будет. У меня вот есть автокастовый скилл дриады "Рассеять чары", вот она рассеивает эти бафы с врагов. Глупо.
27

» WarCraft 3 / Помогите убрать утечку в триггерном заклинании

Принятый ответ
Alexey103, а у меня работает, проверял. тут ошибка в названии переменной, скорее всего, зачем ты задал такое. Мб оно слишком длинное и через нижнее подчеркивание? и путь модель указывают в jass не через один обратный слэш "/", а через двойной слэш "//". Это на гуи один, на джаз два слэша
27

» WarCraft 3 / Помогите убрать утечку в триггерном заклинании

Maniac_91, Хм, посмотрю, хотя не вижу разницы между удалением джассом и обычным.
ну есть предположение, что переменная "последний созданный спецэффект" перезаписывается, и возможно из-за этого что-то не до конца работает. По идее так не должно быть. тогда либо локалка либо сразу удаляй как выше сказали
ForGroup - цикл, вызывает функцию.
но лучше сразу удаляй
Ну так если там не обнуляются локалки то как обнулить?
необнуленная локалка приводит к утечке
Загруженные файлы
27

» WarCraft 3 / Помогите убрать утечку в триггерном заклинании

утечки: Units within 300 pos - бж функция, если раскрыть ее, то можно увидеть как там не обнуляются локалки
по поводу спецэффектов - попробуй воткнуть внутрь цикла ForGroup (на гуи Pick Every unit in group and do (action) ) локалки. Тогда точно все будут удаляться. Еще точнее прописать CS
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl",GetEnumUnit(),"overhead"))
27

» WarCraft 3 / Работа с w3o

Cancel, в генерированной карте, открываешь mpq-архиватором карту, и смотришь slk и тексты. Юниты и абилки например в папке Units находятся и др. Обратно в w3o преобразует программа w3map Restorer (но не всегда работает, в сложных картах типа доты пишет: "не удалось извлечь файлы", и дальше не может, все. Хотя нет, также и простые не работают тоже пишет: "не удалось извлечь файлы" )
27

» WarCraft 3 / Работа с w3o

Cancel, инструкция? там нужно правильные настройки ставить. так тоже пробовал, оказалось, что там в одной из папок внутри папки Widgitizer-а отредактированную карту сохраняет. Короче смотри в папке Widgitizer-а. Папка называется Output, в ней будет все сохраняться
там есть инструкция, найти текстовик, правда на английском
  1. Запустите виджетайзер, нажмите кнопку «Добавить» и найдите карту, которую вы хотите виджетировать. Затем карта появится в списке исходных файлов.
  2. Теперь вам нужно будет решить, какие типы объектов вы хотите конвертировать, как правило, вы захотите конвертировать все типы объектов, просто активировать соответствующие флажки (Units добавляют таблицы slk и тексты юнитов, Items добавляют таблицы slk и тексты предметов и др.).
  3. Теперь у нас есть некоторые дополнительные настройки.
-> Remove Unused Objects (Удалить неиспользуемые объекты): эти семь флажков позволяют указать, какие неиспользуемые объекты будут удалены из выходных файлов, отключение этих параметров оставляет стандартные объекты без изменении, короче так и хранятся в исходных файлах
-> Keep Placed Objects (Сохранить размещенные на карте объекты): этот флажок определяет, все ли элементы: units, doodads и destructables, размещенные на карте, будут сохранены, а также единицы и элементы на случайных таблицах будут сохранены, если этот параметр включен
-> Keep Trigger Referenced Objects (Сохранить связь между триггерами и объектами): этот флажок определяет, будут ли объекты, на которые ссылаются где-то в триггере карты будут сохранены, а также технические элементы, которые изменить их доступность на экране свойств карты будут сохранены, а также
-> Keep Referenced Objects (Сохранить ссылочные объекты): этот флажок определяет, проверяются ли все сохраненные объекты для ссылок к другим объектам, они будут сохранены, если этот параметр включен, это вариант часто приводит к сохранению целой технологии расы не понял что пишут
-> Ignore Basic References (Игнорировать основные ссылки): в ini-файле этого инструмента вы найдете основной список исключений с Идентификаторы объектов, которые не следует удалять (например, перемещение и атака способности и крестьянская единица), теперь, если включен второй флажок, объекты, на которые ссылаются эти объекты (например, все построенные здания крестьянином) также будет сохранено, вы, вероятно, этого не хотите, так что вы может активировать эту опцию, чтобы игнорировать те ссылки основных объектов не понял что пишут
-> Clean Trigger Strings (Очистить строки из триггеров): множество строк, таких как имена элементов, суффиксы редактора, подсказки и т. д. сохраняются в WTS-файле карты, во время преобразования ссылки эти строки будут заменены фактическими строками, в большинстве случаев запись строки в файле WTS будет устаревшей, поэтому может быть удаляется, вот что делает этот флажок (только если одна и та же строка повторно используется в других местах, например, в скрипте карты, это может вызвать проблемы)
-> Clean SLK Tables (Очистить slk-таблицы): удаляет необязательные данные из таблиц SLK, таких как комментарии, бета-флаги и дефисы, и удалит комментарии и пустые строки из полученного TXT-файлы, если это не проверено, будут сохранены комментарии и комментарии, которые начало с :: будет добавлено в конец каждого файла
-> Custom Keys Resistant (отменить изменения в Custom Keys.txt): гарантирует, что результирующая карта будет работать с файлами CustomKeys.txt точно так же, как исходная карта (что означает, что ваши изменения будут отменены возможные файлы CustomKeys.txt)
-> Reference Logging: создаст файл ReferenceLog.txt в выходной папке, где вы можете почему некоторые объекты не очищаются
  1. Итак, теперь мы готовы нажать кнопку компиляции, чтобы начать конвертацию.
Будьте терпеливы с инструментом, особенно на больших картах, конверсия может занять довольно много времени (до 5 минут на старых процессорах или больших картах, обычно около 1 минуты).
  1. Найдите сгенерированные файлы в папке Output \ виджета. Вы, скорее всего, будете только интересуется созданным файлом карты. Он будет иметь то же имя, что и исходная карта. Чтобы открыть преобразованную карту в редакторе World без ошибок (и иметь возможность редактировать ее после конверсия) запустите редактор сгенерированным файлом Editor Patch.exe.

    Для модов и итоговых преобразований он также скомпилирует ROC Patch.exe и файл TFT Patch.exe. Они могут использоваться, чтобы не импортировать скомпилированные файлы в каждую из ваших карт. Если вы собираетесь
    для использования такого патча обязательно удалите все данные пользовательских объектов с карт, которые вы используете на нем (w3u, w3t, w3b, w3d, w3a, w3h, w3q). Скрытая опция конвертирования постоянных игр и игры
    настройки интерфейса могут быть активированы с помощью констант ключа INI.
Вы можете заставить Виджеты автоматически заменять идентификатор ваших настроенных объектов на идентификатор твой выбор. Поэтому измените имя объекта в редакторе объектов на формат Имя :: newid (fex Blast :: Abla изменит идентификатор способности от A000 до Abla). После id был заменен, добавленный идентификатор будет удален из имени объекта.
27

» WarCraft 3 / Патч 1.29 вышел на основных серверах

ScopteRectuS, нет, в старой карте не может быть больше 12 слотов.
Тем не менее, войска нейтрала перестанут быть нейтральными и станут войсками неактивного игрока, что может что-нибудь сломать
Если в старой 12 игроков, то теперь стало 24. Действительно может сломать карту. я думаю, может быть так, что.в новых картах должна стоять галочка "Обновление 1.29" - Да. И тогда ничего не собьет. Они такое делали. Недавно, просматривал скилл "Похищение маны", там написано похищает ману у врага, а еще передает ее союзнику. Меня смутило, что может передавать. Пока на форуме на нашел ответ. В параметрах где-то галочка
27

» WarCraft 3 / Патч 1.29 вышел на основных серверах

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

» WarCraft 3 / Патч 1.29 вышел на основных серверах

Clamp, а нейтральные игроки где? они останутся? будет 27 или 24? и почему цвета у последних игроков белые (а все понял, типа наблюдатели)
Лимит на размеры карты увеличен до 480 x 480.
помню была проблема_с_порчей пришлось делать костыль как меллиса писал, интересно исправили?
27

» WarCraft 3 / Оптимизация: Количество событий

Vadik29, если в хэше ничего не сохранено, то оно вернет для хэндлов = null или для чисел = ноль. возможно и ничего не случится.
27

» WarCraft 3 / Патч 1.29 вышел на основных серверах

а что такое
SetSpecialEffectPitch              takes effect whichEffect, real pitch returns nothing
SetSpecialEffectRoll               takes effect whichEffect, real roll returns nothing
SetSpecialEffectYaw                takes effect whichEffect, real yaw returns nothing
ну это классно. думаю по-тихонечко добавлять будут. Не нравится что крит изменили
27

» WarCraft 3 / Оптимизация: Количество событий

посмотри здесь тему, примеры
Используйте хэш-таблицу. С помощью нее делаете базу данных при инициализации. В ней сохраняете строку, название функции. Вызываете через ExecuteFunc. Выводы какие:
  1. не надо перебирать if-ами условия, проще напрямую
  2. можно было в качестве ключа строки использовать, но быстрее было бы использовать числа, что есть у хэш-таблицы.
  3. Используйте фильтр boolexpr для отсеивания тех, на кого событие не должно работать. см. внизу нативку, вместо null ставите условие
TriggerRegisterPlayerUnitEvent(trig, whichPlayer, whichEvent, null)
Что тут не понятно то?
пример ExecuteFunc
function ASWE takes nothing returns nothing
действие........
endfunction
call ExecuteFunc("ASWE")
27

» WarCraft 3 / Проверка заполненности логического массива

Alexey103, тогда по-другому делать надо. Не до конца понимаю. У тебя скрещивание итемов или просто подборка итемов. Итемы случайны или что. Мог бы и сделать, но что-то сегодня лень.