27

» WarCraft 3 / Миникарта

Принятый ответ
Есть команда, которая задает границы карты, а также изменяет и размер отображения мини-карты
SetCameraBounds
Можно попробовать через GetLocalPlayer задать, но не знаю, будет ли десинк.
Или попробовать скрыть миникарту другим способом, только наверняка это будет на всех. поискать надо на хгм

если можно было бы достать рисунок мини карты - war3mapmap.blp. Обычно чтобы затемнить, то отключить просто импортируют рисунок с альфо-прозрачностью. Но это постоянные изменения, то есть оно будет у всех, чтобы динамично - я думаю, никак.

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

» WarCraft 3 / Смерть юнитов определенного игрока вошедших в область

Принятый ответ
юнит входить в область (указываешь область)
условие - владелец triggerunit == красный
действие - убить (kill) triggerunit.
самый яркий пример этот footman 5.00 там вот не дают войти в область магазина
27

» WarCraft 3 / Играем в Reforged по локальной сети

Aws, меня вот тоже до сих пор мучила проблема батл-нета: с другом не получается играть. пробовал создать карту (игру), он меня не видит в окне списке онлайн мою карту, и наоборот, создает он, не вижу я. Только у второго товарища получается быть хостом. Такая вот муть. С хамачи такая проблема. Только гарена спасала
27

» WarCraft 3 / Как создать невидимую способность?

Принятый ответ
Не могу поставить отрицательное значение. "Графика - положение кнопки", я правильно понял?
Надо шифт зажать и кликнуть по строчке координат в ро абилы, тогда можете задать отрицательные (тогда не нужно лезь mpq-архив для топорика работает).
А если панельные комманды интерфейса (move, patrol, stop, attack или др) - это не будет так работать, им не задашь в ро. либо удалить коммандные способность (некоторые удаления могут привести к необратимым последствиям, или крит) или это текстовик надо для комманд (это вариант). текстовик также можно и абилки прятать, но есть в этом необходимость, если можно задать в ро? не все комманды интерфейса нужно прятать посредством текстовика, например кнопка "строительство" имеет абилку с иконкой

Изменяем CommandStrings.txt Редактирование приказов ссылка пример в комментах можно также задать координаты (-2147483648,-2147483648) - эти координаты не всегда работают (пример не мог спрятать кнопку строительства и move). лучше (0,-11)
Описание кнопок и горячие клавиши (hot keys) находятся в Units/CommandStrings.txt
Изменить также можно в "дополнительно"->"игровой интерфейс"
27

» WarCraft 3 / Как создать невидимую способность?

Extremator, я скрыл этим же методом у хуманского раба абилу, теперь он не может добывать дерево. И навести мышкой на дерево тоже никак. Получается не выгодно прятать, придется жертвовать чем-то другим
Добывать ресурсы (золото и древесина) 'Ahar'

А все можно, не того раба проверял
27

» WarCraft 3 / Как создать невидимую способность?

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

» WarCraft 3 / Как создать невидимую способность?

А будет ли работать добыча ресурсов если скрыть - вот вопрос. Даже скрытые абилы могут не работать.
27

» WarCraft 3 / Проблемы с постройкой зданий

ScopteRectuS:
8gabriel8, невозможно проверить, т.к. приказ 851994 сбивает очередь.
отследить открытие и закрытие меню строительства используется баг при переключении, можно открыть меню dummy и сразу переключится на своего рабочего. этот способ не сбивает приказ. в этой наработке текстуры земли багнутые - строить ничего не дает (ничего страшного - перекрасите в траву), видимо от порчи старых наработок перенеслось.
27

» WarCraft 3 / Отлов точки приказа постройки

Принятый ответ
событие - юнит получил приказ в точку
условие - Тип Юнита (GetTriggerUnit()) не равен ратуша если хотите, чтобы строил только определенный тип юнит
в условиях можете проверить куда ставите это здание: расстояие, расположено ли регионе или занято ли место итл
далее в действиях отменяете стройку
действие - пауза GetTriggerUnit()
действие - отдать приказ stop
действие -un пауза GetTriggerUnit()

событие - юнит получил приказ в точку
условие - GetIssuedOrderId() == равкод строящего здания
в условиях и действиях выводите точку приказа через нативки (на гуи это еще проще)
constant native GetOrderPointLoc() returns location
или координаты
constant native GetOrderPointX() returns real
constant native GetOrderPointY() returns real

ты должен у строителя задать расстояние отдачи приказа:
че-то не увидел где можно задать дальность стройки. Но есть два варианта:
  1. делаем спелбук +игрушечные фермы. в абилке игрушечных ферм можно как раз задать дальность строительства. Но есть недостаток: абилки, созданные на основе игрушечных ферм имеют общий приказ. Короче сработает лишь одна.
  2. или в абилке ремонт задать радиус действия строительства (не работает)
27

» WarCraft 3 / Нахождение всех выбранных юнитов игроком

примерно делал такое один юзер ScopteRectuS, у него хорошая система. ссылка мне понрав

ну вообще бывает частенько гуи очень странно работает в подобные случаи. даже можно и не заметить.
27

» WarCraft 3 / Нахождение всех выбранных юнитов игроком

попробуй не через ForGroup? там как раз отдельные потоки создает на каждого PickedUnit. пробуй через loop + FirstOfGroup(g)
попробуй игрока в глобалку записать, мб константа TriggerPlayer теряет данные в потоках?
27

» MM Engine / MM Engine

quq_CCCP, ну я вот на мемхаке замучался. Хотел рабочие функции, но некоторые либо не работали как надо, или вызывали криты. Мне лично хотелось видеть только огромный набор рабочих функции почти на все, но не их производные функции (очень сильно отвлекают, было бы хорошо их скрыть как не нужное пользователю. А то при поиске всегда на производные натыкаюсь). И да чтобы собрать функцию, приходилось просить помощи. От одного один код, от другого другой код, и надо встроить было в свою систему. И с этими же функциями и прочих производных и переменных вставлять надо было, и да часто код разный от сборки к сборке, названия функции чуть отредактировали, и в старой сборке скопированная функция не работала уже. приходилось заниматься собственной сборкой, чем картостроительством. это для шарящих юзеров, чем для просто простых юзеров. неизвестно откуда вы берете информацию про ту или иную возможность. пришлось забросить, хорошо бы хорошую сборку иметь.
27

» WarCraft 3 / Белая защита юнита [Reforge]

wetalq, но зато вы можете узнать общий армор. Есть же нативка. А на 1.26 хрен узнаешь,только теоритически белый армор можно подсчитать. если ауру кинут или бафф рева от медведей кинут. надо опять доп костыли писать с проверками баффов.
27

» Администрация XGM / как получить мне уровень в этом сайте

Принятый ответ
опыт начисляется за каждый комментарии, вопросы, или ресурс. чем больше, тем выше опыт. и соответственно урпвень. чем выше уровень, тем больше опыта надо набирать. Заметил, что у людей, которые много ресурсов добавляют и много пишут, уровней дохера. з
а комментарии мало опыта дают. но есть специальные способности.
27

» StarCraft 2 / какой код используется в редакторе galaxy

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

» WarCraft 3 / Белая защита юнита [Reforge]

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

не помню есть ли абилки, изменяющие белый армор. Только абилы на бонусный армор есть. Если таких нет. То тогда проще фиксировать:
базовый армор - указанный в редакторе объектов + армор от базовой ловкости +фиксируем добавки через улучшение
бонусный армор = BlzGetUnitArmor(u)-базовый армор

Бонусы защиты так понимаю триггерно не завезли? придется писать систему добавления бонусов через предметные абилити. Можно взять готовые на хгм. Если хотите что-то такое динамичное.

нам нужно узнать точно ли в рефордже GetUnitArmor дает белую или общую (белую и зеленую). пока не понятна
27

» WarCraft 3 / Белая защита юнита [Reforge]

native GetUnitArmor takes unit whichUnit returns real
native SetUnitArmor takes unit whichUnit, real armorAmount returns nothing
возможно ошибаюсь, тк тоже не сижу в рефордже. и там название мб немного отличаться, там кучу приставок Blz
27

» WarCraft 3 / Остледить способность пердмета или героя

Принятый ответ
Есть два события - юнит использует предмет и юнит приводит способность в действие. и событие юнит приводит способность в действие срабатывает раньше чем событие юнит использует предмет.
таймер и флаг
В первом срабатывании триггера (событие юза абилы) ставим flag = true, и запускаем таймер на 0.00 сек. Во втором триггере (если сработало событие юза итема, оно срабатываем сразу же после событие каста) мы должны поставить flag = false. И если по истечению таймера flag изменился, значит сработал итем.
Раз вы не хотите бд делать, то можно было использовать какое-нибудь поле ро для выдачи информации о том, что оно является предметом или способностью. в патче 1.26 только уровень или название абилы GetObjectName или GetAbilityEffect. К сожалению нет больше нативных функции, и мы не может достать информации из абил.
Можно еще использовать равкоды - задаете бд из равкодов. на итемы создал равкоды I000, I001,I002,I003 и так далее. потом сравнивает предел.
if not(id >= I000 and id <= I008) then

endif
Либо в ро название итема в строках пишите "итем". И потом сравниваете название

можно где-нибудь в углу временно создать точно такого же юнита нейтралу только без предметов. и проверить уровень. Если LV = 0 значит такой у юнита нет или не выучил еще. Конечно это не будет работать на выученных навыках героя, тк он их не изучил. Но часто в равкодах геройских абилок есть две заглавные буквы: пример: AOwk - A - ability, O - orc, AHab и пр
27

» WarCraft 3 / Помогите разобраться с опытом

Принятый ответ
заведи массив = макс опыт за каждый уровень. (если вам нужно знать скока осталось. хотя зачем?)
XP[1] = 200 макс опыт за 1 уровень
XP[2] = 300 макс опыт за 2 уровень
А можно использовать готовую формулу вместо массивов
я не нашел нужной нативки для узнавания макс опыта за уровень. А значит надо самим создать. это не трудно самому подсчитать, но надо знать как.
чтобы подсчитать надо залезать в константы
Максимальный опыт героя - 1200 <= не ясно, 1200 опыта = требования до повышения к следующему уровню. Возможно близарды ввели это, из-за того, что константы могут завести слишком сильное требование очков опыта, и вам придеться очень долго качать. А тут не зря ограничение.
Максимальный уровень боевой единицы - 20
Максимальный уровень героя - Максимально достижимый уровень героя. По умолчанию константа равна 10.
==============
ТРЕБОВАНИЕ ОЧКОВ ОПЫТА ДО СЛЕДУЮЩЕГО УРОВНЯ:
Константы, в которых задано кол-во опыта на новый уровень:
Герою требуется опыт: таблица (NeedHeroXP) = 200.00 <=сюда можно несколько значении задать, ведь эта таблица - обозначим за BASE
Герою требуется опыт: предыдущие значения фактора (NeedHeroXPFormulaA) = 1.00 - обозначим за A
Герою требуется опыт: фактор константы (NeedHeroXPFormulaB) = 0 - обозначим за B
Герою требуется опыт: фактор уровня (NeedHeroXPFormulaC) = 100 - обозначим за C
Следует отметить, что в поле NeedHeroXP может содержаться массив чисел, в этом случае в качестве требований опыта берутся эти числа, в том порядке в котором они записаны. Если этих чисел не хватает, то последнее из них берется в качестве числа BASE и дальнейшие требования высчитываются по описанной ниже формуле. Если поле пустое, то используется одно стандартное значение 200.
Не указанные в таблице NeedHeroXP требования находятся по рекурсивной формуле, то есть требование опыта для текущего уровня находится исходя из требований предыдущего:
Требования(для уровня N) = Требования(для уровня N-1) * A + B * N + С
Тогда таблица требований опыта будет выстраиваться следующим образом:
2 уровень 200
3 уровень 200*1+0*200+100=300
4 уровень 300*1+0*200+100=400
5 уровень 400*1+0*200+100=500
6 уровень 500*1+0*200+100=600
и так далее

Рекурсивную формулу можно записать в общем виде:
В этой формуле L - это уровень, для которого мы считаем требования опыта(то есть не текущий уровень юнита, а следующий), а S - это последний уровень, для которого задано табличное значение, а BASE - это как раз это последнее заданное табличное значение.
Хотя она не так проста для понимания как рекурсивная она работает не хуже =)
Пример:
Пусть заданы значения
BASE = 100
A = 2
B = 50
C = 9
Тогда таблица требований опыта будет выстраиваться следующим образом:
2 уровень 100
3 уровень 359 = 100 * 2 + 50 * 3 + 9
4 уровень 927 = 359 * 2 + 50 * 4 + 9
5 уровень 2113 = 927 * 2 + 50 * 5 + 9
6 уровень 4535 = 2113 * 2 + 50 * 6 + 9
...
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 2, а в качестве параметра BASE использовать последнее заданное в таблице значение 100.
Стандартная таблица опыта имеет параметры:
BASE = 200
A = 1
B = 100
C = 0
и выглядит следующим образом:
2 уровень 200
3 уровень 500 = 200 * 1 + 100 * 3
4 уровень 900 = 500 * 1 + 100 * 4
5 уровень 1400 = 900 * 1 + 100 * 5
6 уровень 2000 = 1400 * 1 + 100 * 6
7 уровень 2700 = 2000 * 1 + 100 * 7
8 уровень 3500 = 2700 * 1 + 100 * 8
9 уровень 4400 = 3500 * 1 + 100 * 9
10 уровень 5400 = 4400 * 1 + 100 * 10
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 2, а в качестве параметра BASE использовать последнее заданное в таблице значение 200.
Почему я так много внимания уделил этой формуле? Потому что она широко используется в этой игре.
НО не все так просто. Если это был крип то тут вмешивается другая константа "Набранный героем опыт: таблица сокращения монстров: баз. значение:80%, 70%, 60%, 50%, 0%." и сокращает эти 25 на величину из этой константы (пример: убил ты крипа 1-го лвл и получаешь не 25 а 20 (80% от 25 = 20). Формула вступает в силу со второго лвл, т.к насчет первого все прописано. За убийство героев, опыт рассчитывает тоже отдельно, точных данных пока не знаю. На форуме все давно есть.
=============
СКОЛЬКО ДАЮТ ОПЫТА ЗА УБИЙСТВА:
Опыт указать можно не только у юнита (напомню, у юнита можно указать награды), но и в константах.
Опыт по формуле:
Опыт = Опыт(для уровня N-1) * A + B * N + С , где N - уровень убитого крипа или умершего героя
ЗА УБИЙСТВО ГЕРОЯ:
Набранный героем опыт: герой, таблица: 100, 120, 160, 220, 300
Набранный героем опыт: герой, фактор константы: 100
Набранный героем опыт: герой, фактор предыдущего значения: 1.00
Набранный героем опыт: герой, фактор уровня = 0
Набранный героем опыт: дополнительные факторы класса 1-9 (думаю за каждое развитие ратуши противника вам начисляют доп опыт, тут точнее зависимость от героев. Тк чем развита ратуша, тем больше героев можно нанять)
Таблица наград опыта за убийство героев рассчитывается по той же формуле, по умолчанию имеет параметры:
BASE(GrantHeroXP) = 100,120,160,220,300
A(GrantHeroXPFormulaA) = 1
B(GrantHeroXPFormulaB) = 0
C(GrantHeroXPFormulaC) = 100
Тогда стандартная таблица наград опыта имеет вид:
1 уровень 100
2 уровень 120
3 уровень 160
4 уровень 220
5 уровень 300
6 уровень 400 = 300 * 1 + 100
7 уровень 500 = 400 * 1 + 100
8 уровень 600 = 500 * 1 + 100
9 уровень 700 = 600 * 1 + 100
10 уровень 800 = 700 * 1 + 100
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 5, а в качестве параметра BASE использовать последнее заданное в таблице значение 300.
ЗА УБИЙСТВО КРИПА:
Набранный героем опыт: норма, таблица: 25
Набранный героем опыт: норма, фактор константы: 5
Набранный героем опыт: норма, фактор предыдущего значения: 1.00
Набранный героем опыт: норма, фактор уровня = 5
Набранный героем опыт: фактор вызываемой боевой единицы: 0.5 за вызываемую боевую единицу получаете меньше опыта
Таблица наград опыта за убийство крипа рассчитывается по той же формуле, по умолчанию имеет параметры:
BASE(GrantNormalXP) = 25
A(GrantNormalXPFormulaA) = 1
B(GrantNormalFormulaB) = 5
C(GrantNormalXPFormulaC) = 5
Тогда стандартная таблица наград опыта имеет вид:
1 уровень 25
2 уровень 40 = 25 * 1 + 5 * 2 + 5
3 уровень 60 = 40 * 1 + 5 * 3 + 5
4 уровень 85 = 60 * 1 + 5 * 4 + 5
5 уровень 115 = 85 * 1 + 5 * 5 + 5
6 уровень 150 = 115 * 1 + 5 * 6 + 5
7 уровень 190 = 150 * 1 + 5 * 7 + 5
8 уровень 235 = 190 * 1 + 5 * 8 + 5
9 уровень 285 = 235 * 1 + 5 * 9 + 5
10 уровень 340 = 285 * 1 + 5 * 10 + 5
...
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 1, а в качестве параметра BASE использовать последнее заданное в таблице значение 25.
======================================================================
константа Набранный героем опыт: таблица сокращения монстров - 80, 70, 60, 50, 0
Если убитый героем воин является монстром (нейтральным крипом), в полном объёме опыт вы не получите. Это нормально - ведь герой, допустим, 42 уровня, может убить гнолла за взмах оружия.
Опыт за крипа рассчитывается, как дают за обычного юнита, но с небольшим отличием - помимо всего этого применяется таблица сокращения монстров.
Кратко: по идее игра берет базовый опыт, который указан у юнита в ро, и по формуле выдает новое значение. для примера пусть игра выдаст 25 опыта. От крипов еще меньше получаем, тк от константы сокращается опыт. Пример от убийства воина герой 1-го уровня получает не 25 опыта, а 20 опыта
От убийства крипа герой 1 уровня получит 80% от 25. 20 опыта
От убийства крипа герой 2 уровня получит 70% от 25. 17,5 опыта
От убийства крипа герой 3 уровня получит 60% от 25. 15 опыта
От убийства крипа герой 4 уровня получит 50% от 25. 12,5 опыта
От убийства крипа герой 5 уровня получит 0% от 25. 0 опыта
Последнее значение таблицы применяется к остальным уровням. Вот, почему после достижения 5 уровня герой опыта не получает. В таблице написано "0".
Чтобы позволить герою прокачку выше 5 уровня, требуется просто изменить его на какое-либо значение выше нуля. Оно определит процент получаемого опыта на других уровнях.
==============
Опыт героя: максимальный уровень героя : 25
Опыт героя: общее распределение = да - опыт за убитого распределяется между героями (тут есть определеннный радиус действия)
Опыт героя: разрушении здании дает опыт = нет

взято из faq форума 4 раздел, формулы
27

» WarCraft 3 / Утекает ли область?

Принятый ответ
при использовании группы, там выделения юнитов в области и прочее не утекает. Утекает если локалку ректа не обнулить или создать через
native Rect (real minx, real miny, real maxx, real maxy) returns rect
Если периодически создавать rect, и не удалять. То могут и утекать.

Вызывает подвисание, если постоянно удалять-создавать. У меня было такое - за одну сек делил многоугольник на ректы, и создавал set r = Rect(...), удалял call RemoveRect(r), и заново создавал в след такте цикла set r = Rect(...). Я в своей системе решил один раз создать Rect в начале игры, и если нужно использовать рект: сдвигаете центр ректа MoveRectTo и задаете размеры SetRect - подвисания пропадают. Короче получилось добавить несколько областей в регион, используя одну область

А так остальные вроде GetPlayableMapRect () возвращают там область, записанную в глобалку
native RemoveRect (rect whichRect) returns nothing

используйте библиотеку в JNGP тут
раскрыть
в окошко справо (см. 2 рис) вводите "Rect" и вам выдаст названия функции где встречается данное слово. плюс еще можно мышкой навести и нажать Ctrl + левый клик и вам откроется функция
27

» WarCraft 3 / Как сделать событие срабатывания пассивки

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

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

Bergi_Bear, не моя вина. мне иногда нужно работать с иконками вара. я хочу 1 тарабайт взять
27

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

А у этой штуки не проблем с долгой прогрузкой, когда память забита под конец. Обычно фото-просмотрщик долго грузит, папки грузятся