27

» WarCraft 3 / Тренировка Взаимоисключающих Юнитов


советую еще с требованием поиграться, можно добавить в требование юнита (пример башни альянса не могут построиться без наличия лесопилки, стрелки невозможно обучить без кузницы). Если играешь с классом, то удобнее было бы задать требования.
суть
Можно заранее добавить юнитов на карту, а в случае покупки классового юнита удалить. Можно добавить три dummy-юнита (воин, стрелок, маг), и если покупаешь мага, то удаляешь куклу "маг". Единственная проблема, это нужно под каждого игрока плодить по 3 даймика. Ну вообще подумал это не очень удобно, добавлять лишних dummy на карту. Но это тоже рабочий вариант
пример_2 делал карту с наглядным примером, там требования добавлял
27

» WarCraft 3 / Тренировка Взаимоисключающих Юнитов

задать лимит в разделе игрок. можно в ноль поставить, тогда у игрока пропадет иконка (станет недоступной)
27

» Шатер GenElCon'a / Кай Розенкранц и саундтрек Gothic 3 [Игровые композиторы]

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

» WarCraft 3 / Союз Рас

совет выше +

далее может пригодиться для проверки в каком клане состоит и прочее. есть еще такое понятие как группа игроков bj_FORCE_PLAYER[0-15]. у каждого игрока своя группа (правильно бы сказать объединены по каким-то свойствам, могли бы группировать). и проверять состоит ли в группе. добавлять убавлять и прочее. должны быть проверки в boolean что состоит ли игрок в группе. с этими группами редко имел дело, но возможно пригодилось бы для заключения союза и прочее.

есть еще где-то событие игрок меняет союз или аспект союза
27

» WarCraft 3 / Invasion of the dead v.0.1

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

ну она сыроватая что ли. делать пока что нечего в карте. только ждать крипов. не хватает универсальности. Всяких нестандартных абил, итемов, итемов больше, куда то там сходить и прочее. Меня абилы паладина и итемы слабо выручают, слабоваты =(( наверн это из-за того что один играл
27

» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука

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

» WarCraft 3 / Здание без крыши

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

» WarCraft 3 / Отмена исследования технологии

Obelick, должно работать. правда отменяет это одно текущее исследование. возможно не моментально же исследование или тренировка будут загружены в слоты здания. события "юнит начинает исследование/тренировку" говорят, что это начато. Но не загружены в слоты бараков, поэтому как отменить зданию то чего нет? надо это сделать позже таймером, когда будет загружено. такая херня в варе везде есть (вот событие "юнит дропает предмет". Говорит не то, что он дропнул в данный момент. итем пока никуда не выброшен, это говорит о том что будет дропнут), везде надо задержки пихать. не говорю, что есть это везде, но такое есть.
(для отмены очереди нужно отдать несколько приказов отмены)

отмена освобождает вроде не добавленный новый слот, а последний слот
27

» WarCraft 3 / Помогите! Проблема с магазином в редакторе!

Принятый ответ
тут раздел для магазинов. в способности выбора нужно отключить галочку "Показать Кнопку выбора боевой единицы (да/нет)"
27

» WarCraft 3 / Выбор игроком

Принятый ответ
  1. есть проверка boolean "юнит выделен игроком"
constant native IsUnitSelected takes unit whichUnit, player whichPlayer returns boolean
  1. есть пик в группу, которая выделяет всех выбранных игроком
native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
  1. событие "юнит выбран игроком"/"юнит не выбран"
call TriggerRegisterPlayerUnitEvent( trig, Player( 0 ), EVENT_PLAYER_UNIT_SELECTED,  null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 0 ), EVENT_PLAYER_UNIT_DESELECTED,   null )

  1. В мем хаке можно узнать первого выделенного юнита
много букв
Выдает адрес выделенного юнита, панель интерфейса, которая отображена на экране у локального игрока. Допустим выделив рамкой 2 юнитов: героя и раба, у вас будет отображаться в окне посерединке 2 иконки выделенных юнитов. Но сбоку меню будет переключено на героя (механика вара)
Если взять нажать Tab, можно переключать меню на другого юнита, так с героя на раба
так функции GetActiveUnitInSelection можно было узнать какой юнит нажал кнопку строить
globals    
	integer pGameUICurrentSelection
	integer pConvertUnitAddressToHandleIDNative=0
endglobals

//где-нибудь при инициализации
	set pGameClass2 = GameDLL + 0xAB4F80
	set pGameUICurrentSelection = RMem(RMem(pGameClass2)+0x3F4) //для выделения юнита
	set pConvertUnitAddressToHandleIDNative=GameDLL+0x2DCC40
	
	//конвентирует адрес в handle объекта
	//короче обратная сторона ConvertHandle
	function ConvertUnitAddressToHandleIDNative takes integer address returns integer
		return CallThisCallWith1Args(pConvertUnitAddressToHandleIDNative,address)
	endfunction

	//конвентирует адрес юнита в юнита
	//# +nosemanticerror
	function I2Unit takes integer i returns unit
		call setInt2Unit(ConvertUnitAddressToHandleIDNative(i))
		return l__Int2Unit
	endfunction
	
	//возвращает адрес активного юнита
	function GetActiveUnitInSelection takes nothing returns integer
        return RMem(pGameUICurrentSelection+0x238)
    endfunction
Загруженные файлы
27

» WarCraft 3 / Доступность предмета от Улучшения

Принятый ответ
PyCCKuu_4eJl, исследования доступны только в зданиях игрока. короче видит эти исследования владелец этих здании.

в магазин можно выставлять вместо апгрейда юнита (в качестве обучения, полоска идти будет. в обучении можно лимит ставить. лимит = 0 или -1 вроде спрячет иконку юнита), абилу (можно удалять добавлять), итем (можно вернуть деньги и удалить итем при покупке, и выдать требование, предмет ты никак не спрячешь. Если сам триггерно не выдашь). Ну и в требованиях можно задавать, можно так и юнитов в требование задать, так и технолошки.
27

» WarCraft 3 / Скрыть всплывающие цифры голды и дерева

PyCCKuu_4eJl, у меня эта штука не работает =(
ставлю прозрачность ARGB.
вместо 255,255,220,0 меняю на 0,255,220,0 и сохраняю текстовик и импортирую его в карту по этому же пути UI/MiscData.txt
пробовал цвета менять, время и скорость всплытия
27

» WarCraft 3 / Как управлять этими камерами??

dsgsdgdsgsdg, не все функции могут работать. признаюсь что CameraSetupApplyForceDuration не работает при time = 0.00 sec. вот при time>0 работает. для начала ты должен разобраться сам что у тебя не работает/работает. ты же не можешь работать с тем что не понимаешь. надо разобраться. пробуй тогда другую нативку
native PanCameraToTimed takes real x, real y, real duration returns nothing
ты же не безмозглый, есть другие похожие функции. Эта точно должна сработать, берешь координаты камеры и через GetLocalPlayer

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

» WarCraft 3 / Как управлять этими камерами??

Принятый ответ
Drulia_san, потому что никто из близзардов и видимо не рассчитывал еще на динамичные повороты юнитов. функции камер надо разобрать
нативки камеры
сместить обзор (положение) камеры в обзор другой камеры (camerasetup)
камера GetLocalPlayer() смещается в камеру camerasetup
real duration - время перехода, которое влияет на смещение камеры. 0.00 - смещает мгновенно камеру, time>0 - камера постепенно двигается в эту точку (и изменить положение камеры за это время не дают, и смотришь как смещается камера). Чем больше это время, тем медленнее движется в эту точку
native CameraSetupApplyForceDuration takes camerasetup whichSetup, boolean doPan, real forceDuration returns nothing
временно сместить камеру игрока в точку
центр камеры игрока смещается в заданную точку (x,y), и держит несколько секунд в этом положении
real duration - время, которое влияет на смещение камеры. 0.00 - смещает мгновенно камеру, time>0 - камера постепенно двигается в эту точку (и изменить положение камеры за это время не дают, и смотришь как смещается камера). Чем больше это время, тем медленее движется в эту точку
native PanCameraToTimed takes real x, real y, real duration returns nothing
временно сместить камеру игрока с интерполиров. высотой в точку
центр камеры игрока смещается в заданную точку (x,y)
Камера не будет погружаться под землю при перемещении по маршруту.
Эта функция очень хороша, если вы находитесь на раздражающе холмистой карте. Это в основном сделает так, что он будет подниматься по местности, чтобы высота была несколько постоянной от земли. Это добавит 300 к высоте земли под ним, а не к фактической контрольной точке Z, равной 0. (Таким образом, если вы перемещаете что-либо, оно не будет оставаться на постоянной высоте, оно будет меняться в зависимости от местности)
real duration - время перехода, которое влияет на смещение камеры. 0.00 - смещает мгновенно камеру, time>0 - камера постепенно двигается в эту точку (и изменить положение камеры за это время не дают, и смотришь как смещается камера). Чем больше это время, тем медленее движется в эту точку
native PanCameraToTimedWithZ takes real x, real y, real zOffsetDest, real duration returns nothing
native CameraSetupApplyWithZ takes camerasetup whichSetup, real zDestOffset returns nothing
временно сместить камеру игрока в точку (при необходимости)
real duration - время перехода, которое влияет на смещение камеры. 0.00 - смещает мгновенно камеру, time>0 - камера постепенно двигается в эту точку (и изменить положение камеры за это время не дают, и смотришь как смещается камера). Чем больше это время, тем медленее движется в эту точку
Если камера очень далеко, она переключится, а не переместится. Если камера очень близко, то запрос на перемещение будет пропущен.
Это BJ-функция. Определяет, находится ли объект камеры слишком близко или слишком далеко. Если он слишком близко, он ничего не сделает. (Камера вообще не будет перемещаться). Если она находится слишком далеко, камера мгновенно передвинет к месту через 0 секунд. Если расстояние между камерой и точкой находится в определенном диапазоне, то камеру будет смещать. За исключением того, что это вызывает рассинхронизацию! Он использует "GetCameraTargetPositionLoc ()"
function SmartCameraPanBJ takes player whichPlayer, location loc, real duration returns nothing
    local real dist
    if (GetLocalPlayer() == whichPlayer) then
        // Use only local code (no net traffic) within this block to avoid desyncs.

        set dist = DistanceBetweenPoints(loc, GetCameraTargetPositionLoc())
        if (dist >= bj_SMARTPAN_TRESHOLD_SNAP) then
            // If the user is too far away, snap the camera.
            call PanCameraToTimed(GetLocationX(loc), GetLocationY(loc), 0)
        elseif (dist >= bj_SMARTPAN_TRESHOLD_PAN) then
            // If the user is moderately close, pan the camera.
            call PanCameraToTimed(GetLocationX(loc), GetLocationY(loc), duration)
        else
            // User is close enough, so don't touch the camera.
        endif
    endif
endfunction
установить Поле Камеры (или настройки обзора текущей камеры)
native SetCameraField takes camerafield whichField, real value, real duration returns nothing
есть несколько настроек (camerafield):
    constant camerafield CAMERA_FIELD_TARGET_DISTANCE       = ConvertCameraField(0)
    constant camerafield CAMERA_FIELD_FARZ                  = ConvertCameraField(1)
    constant camerafield CAMERA_FIELD_ANGLE_OF_ATTACK       = ConvertCameraField(2)
    constant camerafield CAMERA_FIELD_FIELD_OF_VIEW         = ConvertCameraField(3)
    constant camerafield CAMERA_FIELD_ROLL                  = ConvertCameraField(4)
    constant camerafield CAMERA_FIELD_ROTATION              = ConvertCameraField(5)
    constant camerafield CAMERA_FIELD_ZOFFSET               = ConvertCameraField(6)
константы (это настройки по умолчанию). Если вам надо сбросить настройки, вот вы знаете где взять. Еще можно в редакторе карт создать камеру, и посмотреть характеристики.
Созданная камера по умолчанию задает эти характеристики.
constant integer bj_CAMERA_DEFAULT_AOA=304
constant integer bj_CAMERA_DEFAULT_DISTANCE=1650
constant integer bj_CAMERA_DEFAULT_FARZ=5000
constant integer bj_CAMERA_DEFAULT_FOV=70
constant integer bj_CAMERA_DEFAULT_ROLL=0
constant integer bj_CAMERA_DEFAULT_ROTATION=90
constant integer bj_CAMERA_MIN_FARZ=100
CAMERA_FIELD_TARGET_DISTANCE - расстояние до цели - это расстояние между глазом камеры и цели. Можете так отдалить камеру от земли, так и приблизить. Это также влияет и на область обзора, чем ближе камера, тем меньше обзора охватывает камера (просто видите увеличенную картинку в маалюсенькой области). Значение по умолчанию равно 1650.
CAMERA_FIELD_FARZ - дальность по оси Z - так понял это определяет как далеко видит камера, объекты прорисовывают и так далее. Если значение прописать слишком маленькие, то это у вас уйдет за черный экран (то есть вообще ничего не видит, обычно дальние объекты за черный туман уходят, даже если у вас карта открыта). По умолчанию значение равно 5000. Еще раз для тех кто в танке
Far Z - изменяет диапазон, в котором видны удаленные объекты. Допустим, дерево находится на расстоянии 10000 координат. Вы можете установить 10 000, чтобы увидеть это дерево. Максимум на самом деле 10000. Даже если вы установите его выше в триггерах, он, скорее всего, будет иметь тот же эффект, что и 10000. Будьте осторожны, делая это, может помочь улучшить видимость местности издалека, но в реальных играх это может привести к фаталу. Это, вероятно, один из самых впечатляющих визуальных эффектов. Если вы установите слишком высокое значение и увидите слишком много объектов, это может снизить FPS (количество кадров в секунду, тип / fps в игре) на 20 или больше. В конечном счете, это зависит от угла атаки, но если будет видно слишком много объектов, то это, как правило, вызывает большое отставание.
CAMERA_FIELD_FIELD_OF_VIEW - поле зрения или величина обзора камеры - это в основном влияет на количество области, которую вы видите в вашей камере. Своего рода zoom. Зум это по-русски «масштаб» или «мера приближения». Есть определенный диапазон от 20 до 120. Ниже или выше этого диапазона невозможно ввести, ты вводишь, но ничего не происходит. Значение по умолчанию равна 70.
CAMERA_FIELD_ANGLE_OF_ATTACK - угол атаки (от 0 до 360) - Наклон камеры относительно земли:
0 = горизонтальный вид (половина камеры лежит в земле, вторая половина на поверхности)
90 - вид снизу, камера направлена вверх и находится под землей;
180 - горизонтальный вид (это перевернутая сверх ногами камера, половина камеры лежит в земле, вторая половина на поверхности)
270 = вид сверху, камера напрвлена вниз и находится над землей
304 градуса это стандартная игровая камера AoA.
Приблизительно 345 градусов или около того обычно используется для RPG-подобных камер.
CAMERA_FIELD_ROLL - крен - угол вращения камеры вокруг оси. камеру можно вращать вбок (влево-вправо). По умолчанию значение равно 0. Значения для ввода должны быть в диапазоне 1-360 градусов.
CAMERA_FIELD_ROTATION - повороты (вращения) - вращает объект. 90 градусов направлены на север, 180 градусов - на запад, 270 градусов - на юг, а 360/0 градусов - на восток. Значения для ввода должны быть в диапазоне 1-360 градусов.
CAMERA_FIELD_ZOFFSET - граница высот (смещение камеры по оси Z) - Z-Offset - высота камеры от земли. Вся камера перемещается вверх и, таким образом, имеет увеличенное значение «Z». Z-координаты - это, в основном, высота объектов, то, как высоко что-то от стандартной позиции на земле, равной 0.
вращение камеры вокруг точки
делает повороты вокруг точки (x,y). текущий угол поворота камеры по умолчанию равен 0. узнать текущий угол поворота можно еще с помощью этой функции GetCameraField(CAMERA_FIELD_ROTATION). Так вот, если вы вводите значение угла, то будет происходить поворот камеры от текущего угла к нужному. измеряется в радианах (можете перевести из градусов)
native SetCameraRotateMode takes real x, real y, real radiansToSweep, real duration returns nothing
прикрепить камеру к юниту
центром камеры является юнит. Куда сдвинется юнит, туда и камера последует. Камеру за все время следования невозможно сдвинуть за границы, чтобы посмотреть и тд. Это отлично подходит для RPG и односимвольных карт, так как вы можете легко прикрепить камеру к герою. Камера будет прикреплена, даже, если герой умрет.
  • Центр камеры можно сместить, это ввести координату смещения (x,y) от позиции юнита. Тогда положение камеры будет гулять относительно позиции героя (это мб сбоку находиться, ниже или наверху. в зависимости от значении координат. Может и пропасть из виду герой, если ввести большое значение координаты)
  • Можно еще поворачивать камеру. Rotation Source (источник поворота, на jass boolean inheritOrientation) - true (Поворот боевой единицы)/false (По умолчанию). По умолчанию = 0 град, Поворот боевой единицы - на самом деле это никакой не поворот боевой единицы, в гуи неправильно перевели. Это берут за основу поворот текущей камеры, ее можно изменять. И относительно ее вращают камеру. У вас всегда будет повернут на этот угол. Возможно можно изменять триггерно, и камера примет другой поворот.
  • Если нужно открепить камеру от героя, используйте сброс Reset Game Camera
native SetCameraTargetController takes unit whichUnit, real xoffset, real yoffset, boolean inheritOrientation returns nothing
прикрепить ориентир камеры к юниту
центром камеры является юнит. Куда сдвинется юнит, туда и камера будет поворачиваться. Отличие от SetCameraTargetController в том, что камера не двигается следом за юнитом, она находится в одной точке, глаз камеры наблюдает за юнитом с этой позиции (юнит может убежать далеко и его будет не видно), где он находился до SetCameraOrientController. Эта штука очень хорошо работает, если нужно наблюдать со стороны за движением юнита (когда приезжает издалека, и уезжает в даль). Камеру за все время следования невозможно сдвинуть за границы, чтобы посмотреть и тд. Это отлично подходит для RPG и односимвольных карт, так как вы можете легко прикрепить камеру к герою. Камера будет прикреплена, даже, если герой умрет.
  • Центр камеры можно сместить, это ввести координату смещения (x,y) от позиции юнита. Тогда положение камеры будет гулять относительно позиции героя (это мб сбоку находиться, ниже или наверху. в зависимости от значении координат. Может и пропасть из виду герой, если ввести большое значение координаты)
  • Можете проверять расстояние между юнитом и текущей камерой для смены позиции
  • Если нужно открепить камеру от героя, используйте сброс Reset Game Camera
native SetCameraOrientController takes unit whichUnit, real xoffset, real yoffset returns nothing
Запустить Кинематографическую камеру
Play Cinematic Camera - Применяет файл модели камеры. В MPQ содержатся специальные модели камер, о которых я расскажу позже (см. внизу ссылки).
native SetCinematicCamera takes string cameraModelFile returns nothing
Остановить камеру - прекращает движение камеры. Такие вещи, как «Apply Camera Object (Timed)» или панорамирование, будут остановлены.
native StopCamera takes nothing returns nothing
Сброс игровой камеры - полезная камера, которая сбрасывает значения текущей камеры по умолчанию (значения в константах выше). (Например: dist = 1650, AoA = 304)
native ResetToGameCamera takes real duration returns nothing
Изменить Сглаживающий фактор камеры
Изменить коэффициент сглаживания камеры - Да, вы можете подумать: «Эй, я могу сделать свои камеры более плавными». Ну, это не совсем то, что делает, к сожалению. Это делает прокрутку более плавной, с помощью кнопок со стрелками или с помощью мыши.
Так понял плавность имеется в виду, насколько быстро смещается камера при поворотах, разворотах, смещении. Можно ставить самое большое значение 999999к. Чтобы сбросить, нужно ввести значене по умолчанию 0 (в BJ функции там так и сделано).
native CameraSetSmoothingFactor takes real factor returns nothing
Трясти Камеру по Горизонтали
Повернуть камеру по Горизонтали для ", Player," с увеличением ", Magnitude," и скоростью ", Velocity
Это приведет к небольшому «колебанию» камеры, перемещая ее вперед-вниз. Величина магнитуды определяет, насколько разрушительным / экстремальным является влияние. Низкая величина вряд ли будет заметна. Скорость velocity определяет, как быстро она будет колебаться. Установите их оба высоко, и вы будете в поездке. Это полезно для кинематографа, когда вы хотите, чтобы произошло какое-то большое событие. Это повлияет на источник или точку птичьего полета.
Подсказка: Будет трясти камеру до тех пор, пока не вызовут функции 'Камера - Сбросить Игровую Камеру' или 'Камера - Прекратить Тряску/Поворот Камеры
Мнение: эта штука напоминает из эпизодов одного фильма, где-нибудь в каком-нибудь автобусе сладкая парочка занимается энтимным делом.
native CameraSetSourceNoise takes real mag, real velocity returns nothing
Вращать Цель Камеры (раскачивать камеру)
Вращать Цель Камеры для ", Player," с увеличением ", Magnitude," и скоростью ", Velocity
Sway Camera Target - та же, что и выше, но вместо этого она качает цель. Это будет иметь другой вид эффекта, но все же так же круто.
Подсказка: Будет трясти камеру до тех пор, пока не вызовут функции 'Камера - Сбросить Игровую Камеру' или 'Камера - Прекратить Тряску/Поворот Камеры
Мнение: эта штука напоминает так будто тебя в море лодку раскачивает
native CameraSetTargetNoise takes real mag, real velocity returns nothing
Трясти камеру
Трясти камеру для ", Player," с увеличением ", Magnitude
Трясти камеру - вызовет эффект тряски при землетрясении или обвале шахты, сильно трясется. Blizzard делает хорошие вычисления. Это просто продолжительный эффект раскачивания. По сути, он умножит входную величину на 2, а для скорости он умножит величину * 10 ^ Рихтера. Если входная величина больше 5, то значение Рихтера будет 5. Если оно равно 2-5, тогда оно будет установлено на это значение, а если оно меньше 2, оно будет установлено на 2. Так что вы вводите величина 10, это будет 10 * 10 ^ 5 для скорости, или 1 000 000. Это приводит к очень высоким частотам изменения, напоминающим эффект «грохота». Отличная функция для "мощных" способностей и боевой кинематографии.
Подсказка: Будет трясти камеру до тех пор, пока не вызовут функции 'Камера - Сбросить
Игровую Камеру' или 'Камера - Прекратить Тряску/Поворот Камеры
function CameraSetEQNoiseForPlayer takes player whichPlayer, real magnitude returns nothing
    local real richter = magnitude
    if (richter > 5.0) then
        set richter = 5.0
    endif
    if (richter < 2.0) then
        set richter = 2.0
    endif
    if (GetLocalPlayer() == whichPlayer) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
        call CameraSetTargetNoiseEx(magnitude*2.0, magnitude*Pow(10,richter),true)
        call CameraSetSourceNoiseEx(magnitude*2.0, magnitude*Pow(10,richter),true)
    endif
endfunction
Прекратить Тряску/Поворот Камеры
Прекратить Тряску/Поворот камеры для ", Player
Это прекращает действие 'Вращать Цель Камеры' или 'Трясти Камеру. Короче по факту обнуляет значения.
function CameraClearNoiseForPlayer takes player whichPlayer returns nothing
    if (GetLocalPlayer() == whichPlayer) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
        call CameraSetSourceNoise(0, 0)
        call CameraSetTargetNoise(0, 0)
    endif
endfunction
Установить границы камеры
Чтобы вернуть назад:
call ResetToGameCameraForPlayer( Player(0), 0 )
call SetCameraBoundsToRectForPlayerBJ( Player(0), GetCameraBoundsMapRect() )
native SetCameraBounds takes real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns nothing
за границы камеры берут границы rect
function SetCameraBoundsToRect takes rect r returns nothing
    local real minX = GetRectMinX(r)
    local real minY = GetRectMinY(r)
    local real maxX = GetRectMaxX(r)
    local real maxY = GetRectMaxY(r)
    call SetCameraBounds(minX, minY, minX, maxY, maxX, maxY, maxX, minY)
endfunction
Установить точку пробела - это позволит вам нажать клавишу пробела, чтобы привязать камеру к определенной точке.
Установить точку пробела для ", Player," в ", Point
Точка пробела - это место, в которое перемещается камера, когда игрок нажимает пробел.
Вывод: Пробел не только привязан к точке этой функции. У игрока может быть несколько точек. Пробел изначально возвращает в стартовую позицию, а потом к последнему звуковому сообщению интерфейса, например, здание построено, герой погиб, рудник истощён, юнит атакован. Повторное нажатие на пробел возвращает предыдущую позицию. Последовательность точек, чем позже событие, тем первее точка. Это сделано специально, чтобы сместить камеру к последнему событию, и посмотреть что происходить. Как очистить точки - неизвестно. Можно овер дохера точек наплодить, чтобы игрок не смог вернуться к предыдущей точке
native SetCameraQuickPosition takes real x, real y returns nothing
27

» WarCraft 3 / Абилка ботинка

ArchOracle, похоже немного ошибся. давно работал с мемхаком, и что то по тестам не то дают. Default movement speed - дает указанное в ро скорость юнита.

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

» WarCraft 3 / Абилка ботинка

ArchOracle, не говорил что не подходит. она со способностью AIms не очень сочетается. ну и есть ограничения у юнита в скорости, которая упирается в констант минимум и максимум скорости. при расчетах не те данные может получить просто см ниже.
Предмет: увеличение скорости перемещения 'AIms' (Ботинки скорости) - повышает скорость перемещения юнита (иконки не имеет). Единственная абилка, которая колличественно (не процентами!) поднимает скорость. Максимум можно поднять до 522.
Но, имеет некоторые свойства:
  • скорости движения от разных таких абилок не суммируется. Константа "Баланс: повышение скорости перемещения суммируется" (англ. MoveSpeed Bonuses Stack) - (да/нет)" - Как пишут в одном источнике: "Определяет, будут ли суммироваться свойства предметов, повышающих скорость перемещения героя. По умолчанию константа равна "Нет"." Ставил в константе "да", но это все равно не видно, как между собой суммируются. В варкрафте в триггерах есть нативка GetUnitMoveSpeed, которая возвращает текущую скорость юнита (с помощью нее дебагом проверял, также сравнивал кто из них быстрее бегает). Вывод: не суммируется, константа неизвестно что дает.
  • как показывает дебаг, бонус дает та абилка, что сильнее. Например, есть два разные ботинка: один дает 50 скорости, другой дает 150. У моего юнита скорость движения равна 150. При получений двух шмоток у него становится 300 скорости (а должно сложится в 350). Не получится стэки. Как видим берется самый высокий бонус из двух скилов
  • Отрицательные значения в способности не убавляют скорость - проверял. Единственное, что заметил, что при константе "Баланс: повышение скорости перемещения суммируется" - да, у юнита становится надпись красная. Хотя, дебаг показывает, что скорость не изменилась (все такая же положительная).
  • есть ограничения, установленных в константах (мин = 150, макс = 400). Если у юнита меньше минималки, например, 100 скорости. То игра автоматически подправляет до минимального значения до 150. Вышла забавная фишка: хотел дать ботинки с 100 скорости перемещения. Должно быть 150+100=250. Но дебаг показывает 200. Получается отталкивается не от минималки (150), а от текущей скорости (100).
  • Можно устанавливать скорость через триггеры "Боевая единица - Set movement speed"
Действие - "Боевая единица - Set (Triggering Unit) movement speed to ( Current movement speed of (Triggering Unit) + 50. )" //Прибавляю 50. к текущей скорости. 
Пробовал также убавлять до нуля (в ноль не получится убавить, единица остается)
НО совмещая эту абилку и действие "Боевая единица - Set movement speed" может приводить к багам: до получения ботинок убавление и добавление через триггеры работало нормально. После получения ботинок получается баг.
Примеры
  1. Например, у рабочего 100 скорости (минималку поставил ноль в константах), ботинки дают +100 скорости. В сумме получает 200 скорости. Триггерно добавляю 50 скорости.
Действие - "Боевая единица - Set (Triggering Unit) movement speed to ( Current movement speed of (Triggering Unit) + 50. )" //Прибавляю 50. к текущей скорости. 
В итоге получается 350. Откуда взялось 350? Должно быть 250. Откуда то взял лишние 100.
Пробую еще раз добавить. Добавляю триггером еще 50 скорости. Получается 500 скорости. Должно быть 400, получил 500.
Каждый раз добавляется 50+100=150 (лишние 100 берет от ботинок, пробовал бонус к ботинкам вместо +100 ставить +60 скорости, так и прибавляет +60. Это баг, случается из-за неверно предоставленных данных триггерной нативкой Current movement speed of (Unit), из-за чего прибавляет лишнее ).
Default movement speed of (Unit) - учитывает только скорость юнита + бонусы
Current movement speed of (Unit) - учитывает только скорость юнита + бонусы + триггерные добавки может давать current ms неверные значения
Только "Default movement speed of (Triggering Unit)" - "скорость по умолчанию" возвращает 200 (100 - скорость юнита, 100 - скорость ботинок).
  1. Возьмем, другой пример. Теперь триггерно буду убавлять. У рабочего 100 скорости (минималку поставил ноль в константах), ботинки дают +60 скорости. В сумме получает 160 скорости.
"Боевая единица - Set (Triggering Unit) movement speed to ( Current movement speed of (Triggering Unit) - 50. )".
Триггерно убавляю 50 скорости. В итоге получается 170=160+60-50. (здесь нам опять дают неверное значение из-за current ms, добавляют непонятный доп бонус от ботинок +60)
Второй раз убавляю 50, 180=170+60-50 Получается 180.
Короче не советую юзать Current movement speed of (Triggering Unit)
Только "Default movement speed of (Triggering Unit)" - "скорость по умолчанию" возвращает 160 (100 - скорость юнита, 60 - скорость ботинок).
  1. Кто-то писал на форуме, что триггерное изменение может привести к проблемам. "учти что меняя текущую скорость ты меняешь её вместе с бонусами и бонусы уже становяться частью базовой скорости героя." Проверял на множестве абилках (ауры, баффы) с дебагом, пока не нашел такого ничего.
Приведу пример. У рабочего 100 скорости (минималку поставил ноль в константах), ботинки дают +60 скорости. В сумме становится 160 скорости. Триггерно убавляю 50 скорости действием "Боевая единица - Set (Triggering Unit) movement speed to ( Default movement speed of (Triggering Unit) - 50. )". Убавляю с помощью Default movement speed - учитывает скорость юнита и бонусы (но не учитывает триггерные добавки). Убавляю 50, становится 110. Пробовал убавить еще на 50, но не получается (видимо там корректируется так, чтобы осталось у юнита что-то). Снимаю ботинки с +60 скоростями, становится у юнита 50 скорости.
Хотя возможно что действительно бонусы могут стать частью системы. Например, если а какой-то момент снять ботинки или одеть их. У вас значения могут упираться об ограничительные константы.
Надо проверять это. Что будет, если у раба скорость 190 (максималка 300), ботинки 200. Должно получится 390, но упрется в константу 300. Если потом снять бутсы +200, вернется ли в норму скорость раба +190, иди станет меньше?
27

» WarCraft 3 / Как создавать MapHack

спроси у драколича. как-то искать можно через Cheat Engine (но там значения-value в проге и варкрафте совсем разные выдают. Я не понимаю как) даже у меня нет навыков в этом.
27

» WarCraft 3 / Абилка ботинка

PyCCKuu_4eJl, возможно раньше и работало. как вот у "укрыться за щита" с отскоками стрел в 1.26 (пока не натыкаешься в константах) или едкого дыхание химеры (она не работает)
PyCCKuu_4eJl, но есть баги с этими триггерными прибавками (по ссылке описано). изменяя ты можешь изменить навсегда параметр скорости например и так далее. будьте осторожны, дебагами перепроверяйте
27

» WarCraft 3 / Абилка ботинка

Принятый ответ
да не стакаются
тут посмотри раздел скорости про эту абилу. разбирал и тесты проводил
27

» WarCraft 3 / Вопрос по модели...

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

» WarCraft 3 / ChangeUnitModelTo после хекса, ветров и иллюзий

обычно у разных объектов разные адреса, и соответственно и разные функции нахождения адресов.

адрес на конкретного юнита, итема, декора и др короче объект хэндл ConvertHandle. см пример функции SetUnitModelUFAddress. есть функции которые возвращают адрес, или требуют адрес. да и большая часть кода в мемхаке требует ConvertHandle
пример
    //Выдает адрес выделенного юнита, панель интерфейса, которая отображена на экране у локального игрока
    //допустим выделив рамкой 2 юнитов: героя и раба, у вас будет отображаться в окне посерединке 2 иконки выделенных юнитов. Но сбоку меню будет переключено на героя (механика вара)
    //если взять нажать Tab, можно переключать меню на другого юнита, так с героя на раба
    //так этой функции можно было узнать какой юнит нажал кнопку строить, или если контроль за юнитом расшарен между игроками можно узнать кто из игроков отдал приказ (или купил)
    function GetActiveUnitInSelection takes nothing returns integer
        return RMem(pGameUICurrentSelection+0x238)
    endfunction

адрес на тип uiobjectaddr GetUnitUIDefByIdCaching(id-rawcode ). см пример функции SetUnitModelUF.