Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
Не тестировал, но попробуй не при инициализации, а при событий "Время - спустя 0.00". Многие вещи устанавливаются не при старте игры, то же самое мультиборд
раскрыть
Во-вторых, есть три команды (см. скрин):
Игра - Turn the day/nigth cycle Вклразрешает смену дня и ночи, наверняка из-за этого не идет смена дня ночи у тебя Игра - Set the time of day to .... устанавливает время суток (от 0 до 24), можно устанавливать время ночи (от 0 до 12) или для дня (от 12 до 24). Ночные эльфы любят использовать камень затмения (см. там у эльфов как) Игра - Set time of day speed to .... % of the defaut speedпросто меняет скорость смены времени. Смена дня может происходит быстро, поэтому можно замедлить время. Или наоборот. ускорить, например чтобы затестить. Там берутся проценты: 100 - начальная скорость, ниже 100% - снижение, больше 100% - ускорение
способности кодоя (ээх посмотрел бы): Проглотить 'Adev' - проглатывает указанное существо и переваривает, нанося урон указанный в скиле "Еда" Еда 'Advc' - здесь можно указать сколько урона наносит перевариваемым существам в секунду. И сколько может вместить в желудок существ.
Эти способности друг с другом связаны
Да. Сам id-приказ - равкод постройки (или тип постройки). У рабочего открывается меню строительства, выбираешь постройку, нажимаешь на иконку. Но ничего не происходит, так как надо еще для окончательного результата выбрать место строительства. Через событие "юнит - получил приказ (точка)" ловится приказ в тот момент, когда юнит получил приказ и побежал устанавливать основание. И точку приказа можно отследить.
Если посмотреть в IsTerrainPathable (Проходима ли местность)
у него есть кучу проверок, и возникает вопрос а где "плавать", где "амфибии" и прочее.
Кстати PATHING_TYPE_PEONHARVESTPATHING за что отвечает? я тыкал на рельеф/ландшафт/дом/декор с помощью канала везде, такое чувство, что никаких изменений, везде одинаково, будто бы говорило, то что-то неправильно. Единственное где были противоположные результаты на склонах, клифах и в воде.
PATHING_TYPE_PEONHARVESTPATHING - точка, в пределах которой могут передвигаться работники (добывая золото и дерево). Какое назначение этого паффинга? даже на рудник и дерево тыкал, ничего.
есть утилита (не помню как называется) Оптимайзер или Депректор, или виджитайзер. Одна из них. Короче она этот файл разбивает на несколько таблиц slk (юниты, способности, предметы, декорации. юниты и способности еще на расы разбиваются) и текстовики, где все описано. А редактировать можно Excel таблицы или блокнотом. Но это лучше делать в конце карты, а то каждый раз не удобно будет.
А ты попробуй вот что сделать:
сыммитируй ошибку, если это не нужно. когда нужно это, ловим приказ.
А вообще анимация замаха начинается с атаки, но тут каст. поэтому вместо атаки будем ловить приказ каста. Вообще не тестировал, но мне кажется "юнит получил приказ" и "юнит атакован" похоже одновременно начинают. По идее когда каст накидывается на вражескую цель, у него всплывает в системе урона нолик, даже, если там не указан никакой бафф. Это своего рода effect, есть же событие "юнит приводит в действие" на англ. EVENT_PLAYER_UNIT_SPELL_EFFECT. Кстати анимацию можно ускорить попробовать ну и все.
Попробуй триггерно сделать. Если дальность каста будет превышать, то выдай ошибку, выдай текст со звуком (у Diod-а где была в библиотеке, вбей слово sim error). xgm.guru/p/wc3/58159 А так в нужный момент, когда нужно снять ограничение - используем задуманное, двигаем.
В этом не очень шарю, я с памятью работать только начинаю. У меня работают только те функции, которые есть.
Обзор видимости юнитов (ночью и днем разные обзоры) - заданы в РО. Есть еще одна маленькая деталь: если ты стоишь под холмом, то ты не видишь того, что сверху, а тебя, наоборот видят...
у декорации есть опции - будет ли видно в тумане войны
у разрушаемых декорации, вроде деревьев и др.
для того, чтобы блокировать видимость - нужно в РО в разрушаемых декорациях поставить параметр "Увеличение поля зрения" - да. Обычно делают блокираторы поле зрения/стенки, за которыми не видно будет, что делает другой герой-сосед.
деревья без модели и карты путей будут блокировать обзор но не путь
способности открывают обзор, вроде просветка и др. "Разведать"
ps есть предмет повышающий дальность зрения, флейта прозрения или подзорная труба, у неё иконка как подзорная труба. Еще есть улучшения
Параметры -> Игровые параметры -> скрытые области частично видимы убирай галку.
Общий обзор видимости создается по всей карте:
в триггерах в разделе "Видимость". есть черная маска в черных тонах, и в ней ничего не видно. Как только юниты откроют область, пройдут мимо, то область закрывается туманом войны. туман войны, короче прозрачно-затемненная область. В ней не видно юнитов. Но можно заметить открытые ландшафт, горы, травы и здания. Если туман войны и черную маску отключить, то будет видно полностью карту
Есть модификатор видимости, который создается в игре. он вот может работать в определенной области, регионе, или вокруг точки и так далее. включает определенные настройки видимости (туман войны, черная маска, видимость).
есть такой параметр при создании модикатора видимости "как 'заблокировать' или 'разблокировать' модификатор видимости". Если при создании модификатор видимости заблокирован, то модификатор видимости не будет работать, проще говоря не покажется игроку (карта, на карте черная маска или туман войны). Чтобы показался, нужно включить модификатор видимости.
У модификатора видимости есть определенное преимущество, если юнит пойдет в неразведанную область, покрытой черной маской с помощью модификатора видимости, то когда пройдет мимо участка, область заново покроется черной маской. Это отличие от обычной видимости карты.
Знаю что это не по теме. Но нашел еще как затемнить ночного освещения
а для того, чтобы увеличить обзор видимости можно создать dummy-бнита,
SetDayNightModel(null, null)
DemonoiD, просто посмотрел в интернете. И как всегда нахожу в интернете. Удивительно, но 99% ответов нахожу в интернете. Ответов на тему туман войны еще много
союзные, и лечащие скилы:
Духовное пламя 'Ainf' - повышение урона и защиты союзникам. У него особый случай. Автокаст сам по себе не будет работать и накидывать на союзников и на себя баффы. Работает только когда союзников рядом бьют, и идет сражение. Сам кастер при включенном автокасте не будет накидывать, увы. Вот такие дела.
Лечение 'Ahea'/'ANre' - лечит здоровье ближним союзникам, в том числе и себя. не работает, если здоровье у всех полное
Восстановить ману 'Amb2' - схожа с автокастом колодца
Власть порчи 'Arpl' - ближащему юниту восстанавливает хп, поправляет здоровье себе и ближнему, если здоровья мало.
Восстановление маны 'Arpm'/'Arpb' - ближащему юниту восстанавливает ману, поправляет ману себе и ближнему, если маны мало.
Восстановить ману и здоровья 'Ambt' - колодец маны и здоровья. автокаст не работает сам на себя или не работает, когда здоровье полное
Короче у лечащих, пополняющих хп и ману способностей есть недостаток, они не работают, если здоровье полное. Автокаст этих способностей не будет работать на юнитах, у которых здоровье или мана полная
работает автокаст, если кто-то атакует:
Бегство в астрал 'Apsh' - убегает в астрал. автокаст работает, если враги пробуют кастера атаковать
работает и на союзников и на врагов:
Рассеивание 'Aadm' - рассеивает полож. бафы, наложенные на врагов, и рассеивает отриц. бафы наложенные на союзников. Требует наличие вредных баффов у союзников, или чтобы были рядом противники, с наложенных на них положительными баффами.
Ледяная броня (авто) 'Aufu' - повышает защиту союзника, а, противника, наоборот, сковывает. Накидывает бафф на юнита. Но если бафф у юнита есть, то не будет накидывать снова. Короче автокаст на союзника не кидает бафф просто так, только в бою, когда кто-то бьет вашего соратника в бою.
Особые случаи работы автокастов:
Кровожадность/Ярость 'Afzy'/'Ablo' - по сути одна же и та же способность. скорости атаки и перемещения повышаются, меняется масштаб. Если нажать на иконку, тут же сработает на кастера способность, и на него накидывается бафф. Можно использовать автокаст, который применяет скилл. Но автокаст просто так не срабатывает, работает только при атаке. Срабатывает автокаст, если рядом идет сражение, и вашего союзника бьют.
эти способности нужно указывать на врагов (есть автокасты, но работают при атаке на противника, и сами по себе не робят)
Похищение маны 'Asps' - похищает ману у ближащих врагов
Замедление 'Aslo' - замедляет ближних врагов
Волшебный огонь 'Afae'/'Afa2'/'ACff' - вешает бафф. позволяет уменьшить защиту врагу, и смотреть его глазами.
Проклятие 'Acrs' - кидает ослабляющие заклинание. юнит промахивается
Паразит 'Acpa' - внедряет личинку паразита в тело врага, наносит урон, и, если умрет, то вылупляется юнит-паразит
Паутина 'Aweb' - ловит в паутину летающих. Работает только на летающих
безумные способности со взрывами, здесь тоже нужно указывать на врагов (автокаст сработает при атаке):
Самоубийство 'Auco' - взрывается с противником. действует на летающих
Взорвать (заводной гоблин) 'Asds'/'Asdg'/'Asd2'/'Asd3'. Это особая способность. Ею можно указать на юнитов или на точку в качестве цели. Также срабатывает и после смерти (указана галочка).
работают с трупами (для использования пустой кнопки юзайте способность "создать труп"):
Погрузить труп 'Amel' - работает при наличий трупа. Необходимо еще иметь воину способность "Пассажир (трупововка)"
Трупоеды 'Aucb' - вызывает жука-трупоеда (можно указать другого юнита). работает при наличий трупа
Оживить мертвых 'Arai' - работает при наличий трупа
Для их создания вы просто можете дать тому же воину скрытый спеллбук со способностями 'Amtc' (Пассажир) и 'Agyd' (Создать труп).
ремонт (автокаст работает, если хп у зданий и древ мало):
Ремонтировать 'Ahrp'/'Arep' - у рабов орков, людей разные автокасты, но действуют одинаково
Обновление 'Arst' - короче типа ремонт у нежити
Обновление 'Aren' - ремонт у эльфов
Работают стрелы при атаке (эффекты полетов снарядов - стрел, ловится бафф при нанесений урона):
Огненные стрелы 'AHfa'/'ACsa'
Ледяные стрелы 'ANfa'/'ANca'
Отравленные стрелы 'AEpa'
Черная стрела 'ANba'
отдельный случай
Похищение магии 'Asps' - ворует заклинания для себя у врага, и наоборот. Работает при атаке противника
где
whichUnit - кастер
widget target - цель-объект (юнит, предмет, декорация и прочее)
real amount - значение урона
boolean attack - является ли атакой (юнит агрится и прочее, короче не будет работать промах от змеиной атаки итд), можно на этом ауру сделать, которая сама себя дамажить, и при этом не будет считаться за атакой
boolean ranged - является ли дальней атакой или ближней. Короче, некоторые способности будут блочит дальнюю атаку (укрыться щитом блочит урон дальней атаки) или ближнюю (у героя-паука щипы, которые возвращают урон работают в ближнем бою)
attacktype attackType - типа атаки (снижается от определенного типа защита - константы). Есть некоторые типы коротые блочатся абилками. Например, тип заклинание - тип который не имеет своей иконки и прочее, но активно используется в активных способностях.
damagetype damageType - тип урона (например влияет на защиту, магическая защита не блочит физический урон, а магический. Магический урон легко проходит физ. урон
В функции урона обычно пишут, нанес с дальнего боя или с ближнего боя (true/false). Это влияет на защиту. Например, каменные доспехи могут так ближнем бою так и в дальнем бою. или "укрыться щитом", "благословление элуны" блочат атаки дальнего боя, или у героя-жука пассивка - "панцирь с шипами" возврата урона в ближнем бою, и так далее. Что ты хочешь сделать?
можно установить иконку вместо мини-карты (указываете путь иконки, если там один слэш "\" пишете два "\\". Только не помню, какой слэш обратный "\" или передний "/")
l_Avenger_l, не так поняли. сначала выбираешь в группу, проверяешь каждого - свой ли. Если юнит является союзником, то лечим. Если враг, и он к тому же нежить, то дамажим (нежить же не любит свет и жизнь).
Случайного юнита дамажить или лечить - нужно рандомить целое число. Сначала узнаем сколько всего юнитов в группе, а потом можно рандомить (это все делается быстро).
Только триггерно. Каждую секунду выбираешь всех рядом своих раненных союзников на карте, поправляешь здоровье и эффект света создаешь над целью. Над нежитью, напротив, наносишь урон.
Точно также дайми-кастом
Можно еще в сферу засунуть благодать, которая при атаке будет наносить урон.
852000 (skillmenu): Приказ (без указания цели), при выполнении которого открывается меню навыков героев. Если же триггерно заставить выполнить этот приказ обычную боевую единицу, то исчезнет ее карта команд, которая возвратится, если выбрать боевую единицу.
851994 (buildmenu): Приказ (без указания цели), открывающий меню строительства воина, способного возводить здания.
Но эти приказы 852000 и 851994 не ловятся при нажатии, эти приказы нужно чтобы отдать боевой единице открыть меню скилов или строительства, а вот отловить не получится.
function AISetItem takes nothing returns nothing
set bj_lastRemovedItem=GetEnumItem()
endfunction
function AIItemFilter takes nothing returns boolean
return IsItemVisible(GetFilterItem()) and GetWidgetLife(GetFilterItem()) > 0
endfunction
function AIHasEmptyInventorySlot takes unit u returns boolean
return UnitItemInSlot(u, 0) == null or UnitItemInSlot(u, 1) == null or UnitItemInSlot(u, 2) == null or UnitItemInSlot(u, 3) == null or UnitItemInSlot(u, 4) == null or UnitItemInSlot(u, 5) == null
endfunction
function AIFilterEnemyConditions takes nothing returns boolean
return GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0 and IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetAttachedUnit(GetExpiredTimer(), "hero")))
endfunction
function AILearnSkill takes unit h returns nothing
local integer id = GetUnitTypeId(h)
local integer lv
local integer i = LoadInteger(Hsh,id,4)
if i == 1 or i == 4 or i == 8 then
set lv = LoadInteger(Hash,id,0)
call SelectHeroSkill(h, lv)
elseif i == 2 or i == 5 or i == 9 then
set lv = LoadInteger(Hash,id,1)
call SelectHeroSkill(h, lv)
elseif i == 3 or i == 7 or i == 10 then
set lv = LoadInteger(Hash,id,2)
call SelectHeroSkill(h, lv)
elseif i == 6 then
set lv = LoadInteger(Hash,id,3)
call SelectHeroSkill(h, lv)
endif
call SaveInteger(Hash, id, 4, i+1)
endfunction
function AILoop takes nothing returns nothing
local integer id = GetHandleId(GetExpiredTimer())
local unit h = LoadUnitHandle(Hash, id, 0)
local integer a = LoadInteger(Hash, GetUnitTypeId(h),4)
local rect i
local location r
local real x = GetUnitX(h)
local real y = GetUnitY(h)
local group g
local boolexpr b
local boolexpr be
local unit f
local string o = OrderId2String(GetUnitCurrentOrder(h))
local real l = GetUnitState(h, UNIT_STATE_LIFE)
local real e = 5 local string a = GetAttachmentTable(GetExpiredTimer()) local unit h = GetTableUnit(a, "hero")
if l <= 0 then
set e = 1.5
elseif l < GetUnitState(h, UNIT_STATE_MAX_LIFE)/5 then
call IssuePointOrder(h, "move", GetUnitX(gg_unit_nfoh_0001), GetUnitY(gg_unit_nfoh_0001))
set e = 3
else
if ((o == "smart") or (o == "attack") or (o == "patrol") or (o == "move") or (o == "stop") or (o == "hold") or (o == null)) then
set g = CreateGroup()
set b = Condition(function AIFilterEnemyConditions)
call GroupEnumUnitsInRange(g, x, y, 500, b)
set f = FirstOfGroup(g)
if f == null then
set i = Rect(x-800, y-800, x+800, y+800)
set be = Condition(function AIItemFilter)
set bj_lastRemovedItem=null
call EnumItemsInRect(i, be, function AISetItem)
if bj_lastRemovedItem != null and (GetItemType(bj_lastRemovedItem) == ITEM_TYPE_POWERUP or AIHasEmptyInventorySlot(h)) then
call IssueTargetOrder(h, "smart", bj_lastRemovedItem)
else
set r = GetRandomLocInRect(bj_mapInitialPlayableArea)
call IssuePointOrderLoc(h, "patrol", r)
call RemoveLocation(r)
endif
call RemoveRect(i)
call DestroyBoolExpr(be)
else
call IssueTargetOrder(h, "attack", f)
endif
call DestroyGroup(g)
call DestroyBoolExpr(b)
endif
endif
if GetHeroSkillPoints(h) > 0 and l > 0 then
call AILearnSkill(h)
endif
call TimerStart(GetExpiredTimer(), e, true, function AILoop)
set h = null
set i = null
set r = null
set g = null
set b = null
set f = null
set be = null
endfunction
function StartAI takes unit hero returns nothing
local timer m = CreateTimer()
local integer id = GetHandleId(m) call AttachObject(m, "hero", hero)
call SaveUnitHandle(Hash, id, 0, hero)
call TimerStart(m, 0, false, function AILoop)
set m = null
endfunction
function SetupSkills takes nothing returns nothing
local integer h Paladin
set Hash = InitHashtable()
set h =('Hpal')
call SaveInteger(Hash, h, 0, 'AHhb') BaseSkill1
call SaveInteger(Hash, h, 1, 'AHds') BaseSkill2
call SaveInteger(Hash, h, 2, 'AHad') BaseSkill3
call SaveInteger(Hash, h, 3, 'AHre') UltimateSkill
call SaveInteger(Hash, h, 4, 1) общий скилл
endfunction
но не знаю заработает ли. Короче переделал на хэш-таблицу (хотя можно было оставить кэш, но зэш-таблица роднее), так как многих функции отсутствует, пришлось переделывать. Вот например GetAttachedUnit оставил в коде без изменении. Не знаю, сможешь ли хэш-таблица в качестве ключей-равкодов нормально хранить, никогда не пробовал. А так нужно серьезно подумать/переделать все. Точно не отвечаю, что все сразу заработает, потому что не тестил.
Ред. MpW
» WarCraft 3 / Про блокираторы путей и тип движения
Ред. MpW
» WarCraft 3 / Зависает время
Игра - Set the time of day to .... устанавливает время суток (от 0 до 24), можно устанавливать время ночи (от 0 до 12) или для дня (от 12 до 24). Ночные эльфы любят использовать камень затмения (см. там у эльфов как)
Игра - Set time of day speed to .... % of the defaut speed просто меняет скорость смены времени. Смена дня может происходит быстро, поэтому можно замедлить время. Или наоборот. ускорить, например чтобы затестить. Там берутся проценты: 100 - начальная скорость, ниже 100% - снижение, больше 100% - ускорение
Ред. MpW
» WarCraft 3 / Как изменить урон способности "Проглотить" (Кодой)?
Проглотить 'Adev' - проглатывает указанное существо и переваривает, нанося урон указанный в скиле "Еда"
Еда 'Advc' - здесь можно указать сколько урона наносит перевариваемым существам в секунду. И сколько может вместить в желудок существ.
Эти способности друг с другом связаны
Ред. MpW
» WarCraft 3 / Как создать блокираторы путей
Еще нашел другой способ, см. карту
Ред. MpW
» WarCraft 3 / Приказ на строительство
» WarCraft 3 / Альтернативный способ наложения карты путей
у него есть кучу проверок, и возникает вопрос а где "плавать", где "амфибии" и прочее.
» WarCraft 3 / Неограниченный рендж каста
Ред. MpW
» WarCraft 3 / Фатальная ошибка
инфы то мало, нужна карта.
Ред. MpW
» WarCraft 3 / боевые единицы
Ред. MpW
» WarCraft 3 / боевые единицы
Ред. MpW
» WarCraft 3 / Неограниченный рендж каста
сыммитируй ошибку, если это не нужно. когда нужно это, ловим приказ.
» WarCraft 3 / Неограниченный рендж каста
Ред. MpW
» WarCraft 3 / Неограниченный рендж каста
Ред. MpW
» WarCraft 3 / Неограниченный рендж каста
» WarCraft 3 / Скачал библиотеку Phys_X, попытался вставить в свою карту -> ???
Ред. MpW
» WarCraft 3 / Не сохранение карты.
» WarCraft 3 / Не сохранение карты.
https://www.xgm.guru/forum/showthread.php?t=45474
https://www.xgm.guru/forum/showthread.php?t=42326
Ред. MpW
» WarCraft 3 / Способности
Духовное пламя 'Ainf' - повышение урона и защиты союзникам. У него особый случай. Автокаст сам по себе не будет работать и накидывать на союзников и на себя баффы. Работает только когда союзников рядом бьют, и идет сражение. Сам кастер при включенном автокасте не будет накидывать, увы. Вот такие дела.
Восстановить ману 'Amb2' - схожа с автокастом колодца
Власть порчи 'Arpl' - ближащему юниту восстанавливает хп, поправляет здоровье себе и ближнему, если здоровья мало.
Восстановление маны 'Arpm'/'Arpb' - ближащему юниту восстанавливает ману, поправляет ману себе и ближнему, если маны мало.
Восстановить ману и здоровья 'Ambt' - колодец маны и здоровья. автокаст не работает сам на себя или не работает, когда здоровье полное
Бегство в астрал 'Apsh' - убегает в астрал. автокаст работает, если враги пробуют кастера атаковать
Рассеивание 'Aadm' - рассеивает полож. бафы, наложенные на врагов, и рассеивает отриц. бафы наложенные на союзников. Требует наличие вредных баффов у союзников, или чтобы были рядом противники, с наложенных на них положительными баффами.
Ледяная броня (авто) 'Aufu' - повышает защиту союзника, а, противника, наоборот, сковывает. Накидывает бафф на юнита. Но если бафф у юнита есть, то не будет накидывать снова. Короче автокаст на союзника не кидает бафф просто так, только в бою, когда кто-то бьет вашего соратника в бою.
Кровожадность/Ярость 'Afzy'/'Ablo' - по сути одна же и та же способность. скорости атаки и перемещения повышаются, меняется масштаб. Если нажать на иконку, тут же сработает на кастера способность, и на него накидывается бафф. Можно использовать автокаст, который применяет скилл. Но автокаст просто так не срабатывает, работает только при атаке. Срабатывает автокаст, если рядом идет сражение, и вашего союзника бьют.
Похищение маны 'Asps' - похищает ману у ближащих врагов
Замедление 'Aslo' - замедляет ближних врагов
Волшебный огонь 'Afae'/'Afa2'/'ACff' - вешает бафф. позволяет уменьшить защиту врагу, и смотреть его глазами.
Проклятие 'Acrs' - кидает ослабляющие заклинание. юнит промахивается
Паразит 'Acpa' - внедряет личинку паразита в тело врага, наносит урон, и, если умрет, то вылупляется юнит-паразит
Паутина 'Aweb' - ловит в паутину летающих. Работает только на летающих
Самоубийство 'Auco' - взрывается с противником. действует на летающих
Взорвать (заводной гоблин) 'Asds'/'Asdg'/'Asd2'/'Asd3'. Это особая способность. Ею можно указать на юнитов или на точку в качестве цели. Также срабатывает и после смерти (указана галочка).
Погрузить труп 'Amel' - работает при наличий трупа. Необходимо еще иметь воину способность "Пассажир (трупововка)"
Трупоеды 'Aucb' - вызывает жука-трупоеда (можно указать другого юнита). работает при наличий трупа
Оживить мертвых 'Arai' - работает при наличий трупа
Ремонтировать 'Ahrp'/'Arep' - у рабов орков, людей разные автокасты, но действуют одинаково
Обновление 'Arst' - короче типа ремонт у нежити
Обновление 'Aren' - ремонт у эльфов
Огненные стрелы 'AHfa'/'ACsa'
Ледяные стрелы 'ANfa'/'ANca'
Отравленные стрелы 'AEpa'
Черная стрела 'ANba'
Похищение магии 'Asps' - ворует заклинания для себя у врага, и наоборот. Работает при атаке противника
» WarCraft 3 / Вопрос по Библиотекам
Ред. MpW
» WarCraft 3 / Обратка против дальнего боя.
whichUnit - кастер
widget target - цель-объект (юнит, предмет, декорация и прочее)
real amount - значение урона
boolean attack - является ли атакой (юнит агрится и прочее, короче не будет работать промах от змеиной атаки итд), можно на этом ауру сделать, которая сама себя дамажить, и при этом не будет считаться за атакой
boolean ranged - является ли дальней атакой или ближней. Короче, некоторые способности будут блочит дальнюю атаку (укрыться щитом блочит урон дальней атаки) или ближнюю (у героя-паука щипы, которые возвращают урон работают в ближнем бою)
attacktype attackType - типа атаки (снижается от определенного типа защита - константы). Есть некоторые типы коротые блочатся абилками. Например, тип заклинание - тип который не имеет своей иконки и прочее, но активно используется в активных способностях.
damagetype damageType - тип урона (например влияет на защиту, магическая защита не блочит физический урон, а магический. Магический урон легко проходит физ. урон
Ред. MpW
» WarCraft 3 / Как триггерами скрыть/открыть мини-карту?
ищи в триггере - действие - в разделе камера
Ред. MpW
» WarCraft 3 / Благодать - пасивка
Ред. MpW
» WarCraft 3 / Благодать - пасивка
Ред. MpW
» WarCraft 3 / id приказа "Способности"
Ред. MpW
» WarCraft 3 / JASS => vJASS
hashtable Hash
endglobals
set bj_lastRemovedItem=GetEnumItem()
endfunction
return IsItemVisible(GetFilterItem()) and GetWidgetLife(GetFilterItem()) > 0
endfunction
return UnitItemInSlot(u, 0) == null or UnitItemInSlot(u, 1) == null or UnitItemInSlot(u, 2) == null or UnitItemInSlot(u, 3) == null or UnitItemInSlot(u, 4) == null or UnitItemInSlot(u, 5) == null
endfunction
return GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0 and IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetAttachedUnit(GetExpiredTimer(), "hero")))
endfunction
local integer id = GetUnitTypeId(h)
local integer lv
local integer i = LoadInteger(Hsh,id,4)
if i == 1 or i == 4 or i == 8 then
set lv = LoadInteger(Hash,id,0)
call SelectHeroSkill(h, lv)
elseif i == 2 or i == 5 or i == 9 then
set lv = LoadInteger(Hash,id,1)
call SelectHeroSkill(h, lv)
elseif i == 3 or i == 7 or i == 10 then
set lv = LoadInteger(Hash,id,2)
call SelectHeroSkill(h, lv)
elseif i == 6 then
set lv = LoadInteger(Hash,id,3)
call SelectHeroSkill(h, lv)
endif
call SaveInteger(Hash, id, 4, i+1)
endfunction
local integer id = GetHandleId(GetExpiredTimer())
local unit h = LoadUnitHandle(Hash, id, 0)
local integer a = LoadInteger(Hash, GetUnitTypeId(h),4)
local rect i
local location r
local real x = GetUnitX(h)
local real y = GetUnitY(h)
local group g
local boolexpr b
local boolexpr be
local unit f
local string o = OrderId2String(GetUnitCurrentOrder(h))
local real l = GetUnitState(h, UNIT_STATE_LIFE)
local real e = 5
local string a = GetAttachmentTable(GetExpiredTimer())
local unit h = GetTableUnit(a, "hero")
if l <= 0 then
set e = 1.5
elseif l < GetUnitState(h, UNIT_STATE_MAX_LIFE)/5 then
call IssuePointOrder(h, "move", GetUnitX(gg_unit_nfoh_0001), GetUnitY(gg_unit_nfoh_0001))
set e = 3
else
if ((o == "smart") or (o == "attack") or (o == "patrol") or (o == "move") or (o == "stop") or (o == "hold") or (o == null)) then
set g = CreateGroup()
set b = Condition(function AIFilterEnemyConditions)
call GroupEnumUnitsInRange(g, x, y, 500, b)
set f = FirstOfGroup(g)
if f == null then
set i = Rect(x-800, y-800, x+800, y+800)
set be = Condition(function AIItemFilter)
set bj_lastRemovedItem=null
call EnumItemsInRect(i, be, function AISetItem)
if bj_lastRemovedItem != null and (GetItemType(bj_lastRemovedItem) == ITEM_TYPE_POWERUP or AIHasEmptyInventorySlot(h)) then
call IssueTargetOrder(h, "smart", bj_lastRemovedItem)
else
set r = GetRandomLocInRect(bj_mapInitialPlayableArea)
call IssuePointOrderLoc(h, "patrol", r)
call RemoveLocation(r)
endif
call RemoveRect(i)
call DestroyBoolExpr(be)
else
call IssueTargetOrder(h, "attack", f)
endif
call DestroyGroup(g)
call DestroyBoolExpr(b)
endif
endif
if GetHeroSkillPoints(h) > 0 and l > 0 then
call AILearnSkill(h)
endif
call TimerStart(GetExpiredTimer(), e, true, function AILoop)
set h = null
set i = null
set r = null
set g = null
set b = null
set f = null
set be = null
endfunction
local timer m = CreateTimer()
local integer id = GetHandleId(m)
call AttachObject(m, "hero", hero)
call SaveUnitHandle(Hash, id, 0, hero)
call TimerStart(m, 0, false, function AILoop)
set m = null
endfunction
local integer h
Paladin
set Hash = InitHashtable()
set h =('Hpal')
call SaveInteger(Hash, h, 0, 'AHhb') BaseSkill1
call SaveInteger(Hash, h, 1, 'AHds') BaseSkill2
call SaveInteger(Hash, h, 2, 'AHad') BaseSkill3
call SaveInteger(Hash, h, 3, 'AHre') UltimateSkill
call SaveInteger(Hash, h, 4, 1) общий скилл
endfunction