если использовать юнит заканчивает каст то цель теряется
Для подобного рода манипуляций отдельно записывают кастера и цель каста.
А уже по окончанию каста обращаются к этой паре юнитов (кастер+цель).
Я не настаиваю на том что бы ты делал именно так, но если смотреть в общем - то да, так можно сделать, и если бы мне нужно было, то именно так бы я и сделал.
А в чем плюс такого рода действий?
то что я сам не хочу
-Отдельный триггер
-Сохранения юнитов
-Загрузка юнитов
То что я сделал
-Написал одну строчку
Гугли "как добавить альфу", к варкарфту это отношение не имеет, удаляешь белый фон хоть в паинте, созраняешь в PNG, потом конвертируешь в блп через блп-лаб, в пункте прозрачность оставляешь галочку на "оставить без изменений". Готово!
при событии
Юнит входит в область
зачитывается все кто туда заходит и если туда зайдет например 3 пехотинца то действия будут происходить 3 раза, если хочешь что бы при вхождении определенного юнита например паладина то в условии указываешь его
EnteringUnit() == 'Hpal"
Входящий юнит равно Паладин
далее действия
Проясню кое-что для тебя, это не "двигается невероятно быстро от одного места к другому", это телепортация к печати - пространственно-временное ниндзюцу подробнее...
у тебя же никаких печатей нет, соответственно техникой летящего бога грома назвать это нельзя
способ реализации не Jass, а vJass, библиотеки и возможность объявлять глобалки прямо в коде это фишки вджасса, сам спелл хорош, только настройки урона и периодичности урона вынести бы в очевидное место
проверил спелл, не так уж и хорош как казался, у тебя карта зависает/крашается если кастануть спелл у границы карты
я ее еле как сделал и по моему для моего уровня знаний нет так уж плохо, насчет печатей, я не имею модельки печати, и этот спелл я увидел на карте BvO New World 5.0 и там не было печатей или другого и там спелл применялся на юнита а не на точку я так сказать создал и изменил чутка то что увидел и да, какой чел станет делать карту убрав границы? я нигде такого не видел да, есть такие люди которые так делают и может даже есть такие карты не отрицаю, а так сойдет для новичков вроде меня
Проясню кое-что для тебя, это не "двигается невероятно быстро от одного места к другому", это телепортация к печати - пространственно-временное ниндзюцу подробнее...
у тебя же никаких печатей нет, соответственно техникой летящего бога грома назвать это нельзя
способ реализации не Jass, а vJass, библиотеки и возможность объявлять глобалки прямо в коде это фишки вджасса, сам спелл хорош, только настройки урона и периодичности урона вынести бы в очевидное место
проверил спелл, не так уж и хорош как казался, у тебя карта зависает/крашается если кастануть спелл у границы карты
и что же тебя не устроило в этом спеле кроме того что игра выдает краш при столкновении с границей?
Гуванч, если ты закидываешь юнитов в группу одновременно и хочешь чтобы они все исчезнули, то достаточно одного таймера, а иначе на каждый локальный таймер сохраняешь юнита и его текущую прозрачность, каждый раз изменяя её
Название: Омнислеш
Методы: GUI+MUI/Jass/vJass(что бы можно было настроить под себя желательно с комментами)
Цель: Область(Радиус 700)
Уровни: 3
Описание: В указанной области герой с огромной скоростью перемещается на случайную точку задевая противников тем самым нанося 125 + (AGI x 4) урона.
Длительность заклинания: 3 сек.
Промежуток времени нанесения урона: 0.75(тоесть за 3 сек. 4 раза)
П.С при касте нужно создать вот этот эффект:
Abilities\Spells\NightElf\Rejuvenation\RejuvenationTarget.mdl
а при скачке на точку на месте героя вот эту:
Название: Омнислеш
Методы: GUI+MUI/Jass/vJass(что бы можно было настроить под себя желательно с комментами)
Цель: Область(Радиус 700)
Уровни: 3
Описание: В указанной области герой с огромной скоростью перемещается на случайную точку задевая противников тем самым нанося 125 + (AGI x 4) урона.
Длительность заклинания: 3 сек.
Промежуток времени нанесения урона: 0.75(тоесть за 3 сек. 4 раза)
П.С при касте нужно создать вот этот эффект:
Abilities\Spells\NightElf\Rejuvenation\RejuvenationTarget.mdl
а при скачке на точку на месте героя вот эту:
Помоему для вашей цели лучше всего пойдет создание AI скрипта и подключение его через функцию SetMeleeAI
Пример AI скрипта ниже (если понимаете JASS, проблем в дальнешем в написании/изменении текущего не составит проблем)
AI Script
globals
constant integer HOLY_BOLT = 1095264354
constant integer FOOTMAN = 1751543663
constant integer KNIGHT = 1751871081
constant integer PRIEST = 1752002674
constant integer UTHER = 1215657064
group g_hHurtUnitGroup = CreateGroup()
integer g_iCaptainHomeX
integer g_iCaptainHomeY
integer g_iFountainOfLifeX
integer g_iFountainOfLifeY
unit g_hHero
endglobals
function B2S takes boolean b returns string
if b then
return "true"
else
return "false"
endif
endfunction
function Dig2Str takes integer i returns string
if i == 1 then
return "1"
elseif i == 2 then
return "2"
elseif i == 3 then
return "3"
elseif i == 4 then
return "4"
elseif i == 5 then
return "5"
elseif i == 6 then
return "6"
elseif i == 7 then
return "7"
elseif i == 8 then
return "8"
elseif i == 9 then
return "9"
else
return "0"
endif
endfunction
// Courtesy of AIAndy and Tommi. See source:
// http://www.hiveworkshop.com/threads/two-custom-campaign-ais-examples.8939/
function Int2Str takes integer ic returns string
local string s = ""
local integer i = ic
local integer ialt = 0
local boolean neg = false
if i == 0 then
return "0"
endif
if i < 0 then
set neg = true
set i = (-1)*i
endif
loop
exitwhen i == 0
set ialt = i
set i = i / 10
set s = Dig2Str( ialt - 10*i ) + s
endloop
if neg then
set s = "-"+s
endif
return s
endfunction
function Event_OnHeroLevelGain takes nothing returns integer
local integer DEVOTION_AURA = 1095262564
local integer DIVINE_SHIELD = 1095263347
local integer RESURRECTION = 1095266917
local integer iLevel = GetHeroLevelAI()
if iLevel == 1 then
return HOLY_BOLT
elseif iLevel == 2 then
return DEVOTION_AURA
elseif iLevel == 3 then
return HOLY_BOLT
elseif iLevel == 4 then
return DIVINE_SHIELD
elseif iLevel == 5 then
return HOLY_BOLT
elseif iLevel == 6 then
return RESURRECTION
elseif iLevel == 7 then
return DIVINE_SHIELD
elseif iLevel == 8 then
return DEVOTION_AURA
elseif iLevel == 9 then
return DEVOTION_AURA
elseif iLevel == 10 then
return DIVINE_SHIELD
endif
return STAT_UP
endfunction
function InitAssaultGroup takes nothing returns nothing
call InitAssault()
call AddAssault(GetUnitCountDone(FOOTMAN) - IgnoredUnits(FOOTMAN) , FOOTMAN )
call AddAssault(GetUnitCountDone(KNIGHT) - IgnoredUnits(KNIGHT) , KNIGHT )
call AddAssault(GetUnitCountDone(PRIEST) - IgnoredUnits(PRIEST) , PRIEST )
call AddAssault(GetUnitCountDone(UTHER) - IgnoredUnits(UTHER) , UTHER )
endfunction
function FindFountainOfLive takes nothing returns nothing
local integer FOUNTAIN_OF_LIFE = 1852206952
local integer PLAYER_NEUTRAL_PASSIVE = 15
local group hGroup = CreateGroup()
local unit hUnit
call GroupEnumUnitsOfPlayer(hGroup, Player(PLAYER_NEUTRAL_PASSIVE), null)
loop
set hUnit = FirstOfGroup(hGroup)
exitwhen hUnit == null
if UnitAlive(hUnit) then
if IsUnitType(hUnit, UNIT_TYPE_STRUCTURE) then
if GetUnitTypeId(hUnit) == FOUNTAIN_OF_LIFE then
set g_iFountainOfLifeX = R2I(GetWidgetX(hUnit)) + 200
set g_iFountainOfLifeY = R2I(GetWidgetY(hUnit)) - 200
exitwhen true
endif
endif
endif
call GroupRemoveUnit(hGroup, hUnit)
endloop
call DestroyGroup(hGroup)
set hGroup = null
set hUnit = null
endfunction
function ChangeCaptainHome takes nothing returns nothing
local integer BOTH_CAPTAINS = 3
set g_iCaptainHomeX = -3700
set g_iCaptainHomeY = 0
call SetCaptainHome(BOTH_CAPTAINS, g_iCaptainHomeX, g_iCaptainHomeY)
endfunction
function CreateUnits takes nothing returns nothing
local integer MASK_OF_DEATH = 1836016756
local integer POTION_OF_HEALTH = 1885825125
set g_hHero = CreateUnit(g_hPlayerAI, UTHER , -1095 , -54 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1302 , -722 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1231 , -728 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1154 , -730 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1091 , -730 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1014 , -730 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -951 , -728 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -858 , -722 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -918 , 257 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1049 , 329 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -1118 , 374 , 0)
call CreateUnit(g_hPlayerAI, FOOTMAN , -982 , 295 , 0)
call CreateUnit(g_hPlayerAI, KNIGHT , -1099 , 106 , 0)
call CreateUnit(g_hPlayerAI, KNIGHT , -1234 , 5 , 0)
call CreateUnit(g_hPlayerAI, PRIEST , -1001 , -809 , 0)
call CreateUnit(g_hPlayerAI, PRIEST , -991 , -112 , 0)
call CreateUnit(g_hPlayerAI, PRIEST , -1152 , -818 , 0)
call CreateUnit(g_hPlayerAI, PRIEST , -1103 , -232 , 0)
call UnitAddItemToSlotById(g_hHero, MASK_OF_DEATH , 0)
call UnitAddItemToSlotById(g_hHero, POTION_OF_HEALTH, 1)
endfunction
function IsEnemyInRangeXY takes integer iX, integer iY, integer iRadius returns boolean
local boolean bIsFindEnemy = false
local group hGroup = CreateGroup()
local unit hUnit
call GroupEnumUnitsInRange(hGroup,iX, iY, I2R(iRadius), null)
loop
set hUnit = FirstOfGroup(hGroup)
exitwhen hUnit == null
if UnitAlive(hUnit) then
if IsUnitEnemy(hUnit, g_hPlayerAI) then
set bIsFindEnemy = true
exitwhen true
endif
endif
endloop
call DestroyGroup(hGroup)
set hGroup = null
set hUnit = null
return bIsFindEnemy
endfunction
function CheckUnitHealth takes nothing returns nothing
local integer ORDER_SMART = 851971
local integer ORDER_MOVE = 851986
local integer MIN_SAFE_RANGE = 200
local integer MIN_UNIT_HEALTH = 150
local boolean bIsUnitInHurtGroup
local group hGroup = CreateGroup()
local integer iOffsetX
local integer iOffsetY
local real flUnitHealth
local unit hUnit
call GroupEnumUnitsOfPlayer(hGroup, g_hPlayerAI, null)
loop
set hUnit = FirstOfGroup(hGroup)
exitwhen hUnit == null
set bIsUnitInHurtGroup = IsUnitInGroup(hUnit, g_hHurtUnitGroup)
if UnitAlive(hUnit) then
if not (IsUnitType(hUnit, UNIT_TYPE_SUMMONED) or hUnit == g_hHero) then
set flUnitHealth = GetWidgetLife(hUnit)
if R2I(flUnitHealth) < MIN_UNIT_HEALTH then
set iOffsetX = GetRandomInt(-50, 50)
set iOffsetY = GetRandomInt(-50, 50)
call RemoveGuardPosition(hUnit)
if not bIsUnitInHurtGroup then
call GroupAddUnit(g_hHurtUnitGroup, hUnit)
endif
if IsEnemyInRangeXY(g_iFountainOfLifeX, g_iFountainOfLifeY, 1000) then
if not IsUnitInRangeXY(hUnit, g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
call PrintToChat("Unit go home")
call IssuePointOrderById(hUnit, ORDER_MOVE, g_iCaptainHomeX + iOffsetX, g_iCaptainHomeY + iOffsetY)
endif
else
if not IsUnitInRangeXY(hUnit, g_iFountainOfLifeX, g_iFountainOfLifeX, MIN_SAFE_RANGE) then
call IssuePointOrderById(hUnit, ORDER_SMART , g_iFountainOfLifeX + iOffsetX , g_iFountainOfLifeY + iOffsetY)
endif
endif
elseif flUnitHealth * 1.5 > GetUnitState(hUnit, UNIT_STATE_MAX_LIFE) then
if bIsUnitInHurtGroup then
call PrintToChat("Unit back to captain control")
call RecycleGuardPosition(hUnit)
call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
endif
endif
endif
else
if bIsUnitInHurtGroup then
call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
endif
endif
call GroupRemoveUnit(hGroup, hUnit)
endloop
if FirstOfGroup(g_hHurtUnitGroup) != null then //NOTE: Some hurt units under attack at home
if not CaptainIsHome() then
if IsEnemyInRangeXY(g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
if not CaptainRetreating() then
call ClearCaptainTargets()
call CaptainGoHome()
call SetGroupsFlee(true) // NOTE: Tested
call SetUnitsFlee(true)
endif
endif
endif
endif
call DestroyGroup(hGroup)
set hGroup = null
set hUnit = null
endfunction
function DevelopmentSequence takes nothing returns nothing
loop
call InitAssaultGroup()
call CheckUnitHealth()
call Sleep(DEFAULT_SLEEP)
endloop
endfunction
function main takes nothing returns nothing
set g_hPlayerAI = Player(GetAiPlayer())
call SetHeroLevels(function Event_OnHeroLevelGain)
call CreateUnits()
call PrintToChat("AI Script started")
call CreateCaptains()
call GroupTimedLife(true)
call SetCampaignAI()
call SetHeroesFlee(true)
call SetHeroesTakeItems(true)
call SetWatchMegaTargets(true)
call Sleep(0.1)
call ChangeCaptainHome()
call FindFountainOfLive()
call StartThread(function DevelopmentSequence)
loop
call Sleep(1)
endloop
endfunction
» WarCraft 3 / Просьба проверить мой код
» WarCraft 3 / Франкский лесоруб
» WarCraft 3 / Что за объект или integer вызывает фатал на Варкрафт III?
» WarCraft 3 / Что за объект или integer вызывает фатал на Варкрафт III?
» WarCraft 3 / Время каста триггерных спелов
то что я сам не хочу
-Отдельный триггер
-Сохранения юнитов
-Загрузка юнитов
То что я сделал
-Написал одну строчку
» WarCraft 3 / Время каста триггерных спелов
если использовать юнит заканчивает каст то цель теряется
» WarCraft 3 / альфа каналы
» WarCraft 3 / Нужна модель? - Вам сюда!
https://xgm.guru/files/100/123536/comments/472541/2.zip
» WarCraft 3 / Герой заходит в зону и начинается действие
Юнит входит в область
зачитывается все кто туда заходит и если туда зайдет например 3 пехотинца то действия будут происходить 3 раза, если хочешь что бы при вхождении определенного юнита например паладина то в условии указываешь его
EnteringUnit() == 'Hpal"
Входящий юнит равно Паладин
далее действия
» WarCraft 3 / Hiraishin no Jutsu (Техника летающего бога грома)
Ред. N7 Molot
» WarCraft 3 / Hiraishin no Jutsu (Техника летающего бога грома)
» WarCraft 3 / Плавное исчезновение
» WarCraft 3 / Плавное исчезновение
» WarCraft 3 / Плавное исчезновение
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / cJass Парсер выдает ошибку
» WarCraft 3 / крипы после боя не идут к центру
» WarCraft 3 / Нужна модель? - Вам сюда!
» WarCraft 3 / Способности и алгоритмы на заказ
Ред. Гуванч
» WarCraft 3 / Способности и алгоритмы на заказ
Методы: GUI+MUI/Jass/vJass(что бы можно было настроить под себя желательно с комментами)
Цель: Область(Радиус 700)
Уровни: 3
Описание: В указанной области герой с огромной скоростью перемещается на случайную точку задевая противников тем самым нанося 125 + (AGI x 4) урона.
Длительность заклинания: 3 сек.
Промежуток времени нанесения урона: 0.75(тоесть за 3 сек. 4 раза)
П.С при касте нужно создать вот этот эффект:
а при скачке на точку на месте героя вот эту:
» WarCraft 3 / Обучение jass
» WarCraft 3 / интересные карты
» WarCraft 3 / Создание ИИ
» WarCraft 3 / интересные карты
» WarCraft 3 / Создание ИИ