globals
real Mana = 0.
unit BadUnit = null
real Range = 700.
group CastGroup = CreateGroup()
endglobals
function Conditions takes nothing returns boolean
local real mana = GetUnitState(GetFilterUnit(), UNIT_STATE_MANA)
if inRange and mana > Mana then // Чтобы отсеять с наибольшей маной.
// Чтобы отсеять с наименьшей, нужно написать mana < Mana и начальное значение Mana должно быть 999999.
// Это значение также должно восстанавливаться после каста.
// Аналогично и с расстоянием до феи.
set Mana = mana
set BadUnit = GetFilterUnit()
endif
return true
endfunction
function Trig_Cast_Actions takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local real x = GetUnitX(caster)
local real y = GetUnitY(caster)
call GroupEnumUnitsInRange(CastGroup, x, y, Range, function Conditions)
call GroupRemoveUnit(CastGroup, BadUnit)
// Другие действия.
call GroupClear(CastGroup)
set caster = null
endfunction
// Функция для расстояния:
function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction
function GetDistanceUnitPoint takes unit u, real x, real y returns real
local real dx = GetUnitX(u) - x
local real dy = GetUnitY(u) - y
return SquareRoot(dx * dx + dy * dy)
endfunction
function GetDistanceUnits takes unit u1, unit u2 returns real
local real dx = GetUnitX(u1) - GetUnitX(u2)
local real dy = GetUnitY(u1) - GetUnitY(u2)
return SquareRoot(dx * dx + dy * dy)
endfunction
native UnitHasItem takes unit whichUnit, item whichItem returns boolean
function UnitHasItemOfTypeBJ takes unit whichUnit, integer itemId returns boolean
return GetInventoryIndexOfItemTypeBJ(whichUnit, itemId) > 0
endfunction
// Данная функция утечна, так как indexItem не обнуляется
function GetInventoryIndexOfItemTypeBJ takes unit whichUnit, integer itemId returns integer
local integer index
local item indexItem
set index = 0
loop
set indexItem = UnitItemInSlot(whichUnit, index)
if (indexItem != null) and (GetItemTypeId(indexItem) == itemId) then
return index + 1
endif
set index = index + 1
exitwhen index >= bj_MAX_INVENTORY
endloop
return 0
endfunction
function UnitHasItemOfType takes unit whichUnit, integer itemId returns boolean
local integer index = 0
loop
if GetItemTypeId(UnitItemInSlot(whichUnit, index)) == itemId then
return true
endif
set index = index + 1
exitwhen index == bj_MAX_INVENTORY
endloop
return false
endfunction
// Можно ещё так написать
function UnitHasItemOfType takes unit whichUnit, integer itemId returns boolean
local integer index = 0
loop
exitwhen GetItemTypeId(UnitItemInSlot(whichUnit, index)) == itemId
set index = index + 1
exitwhen index == bj_MAX_INVENTORY
endloop
return index < bj_MAX_INVENTORY
endfunction
Какое сообщение должно бы введено? Если "t 6", то тогда должно быть Подстрока(Строка чата, 3, 3) или Подстрока(Строка чата, 3, ДлинаСтроки(Строка чата)).
Символы в нашей строке: 't', ' ', '6'.
't' находится между 0 и 1, ' ' между 1 и 2, '6' находится между 2 и 3. Нам нужно вытащить '6', то есть нужно передать 2 и 3 как начало и конец подстроки соответственно, но из-за SubStringBJ, нужно передать 3 как начало подстроки.
function SubStringBJ takes string source, integer start, integer end returns string
return SubString(source, start-1, end)
endfunction
Естественно, я сначала прочел все что смог и только потом задал вопрос, так как мне ничего не подошло)
Создать 40 спелбуков - не проблема, на самом деле. Более того, так ты можешь отсеять ненужные заклинания, которые нельзя копировать. Минус в том, что лимит на копирование будет 11 способностей, если не удалять старые.
Прикреплю торренты для нормального WC3. Также скачай JNPG:R с XGM, обнови pjass.exe и TESH.
Решение твое проблемы:
Ты делаешь кратер в точке X шириной Y и глубиной Z. Чтобы после его убрать, нужно сделать кратер в точке Х шириной Y и глубиной -Z.
» WarCraft 3 / Как узнать на джассе есть ли у героя предмет или нет?
Ред. PT153
» WarCraft 3 / Триггерный автокаст?
Ред. PT153
» WarCraft 3 / Как узнать на джассе есть ли у героя предмет или нет?
» WarCraft 3 / Мана уходит в минус, и видимость после реса.
Ред. PT153
» WarCraft 3 / Преобразовать подстроку в реальное
Символы в нашей строке: 't', ' ', '6'.
't' находится между 0 и 1, ' ' между 1 и 2, '6' находится между 2 и 3. Нам нужно вытащить '6', то есть нужно передать 2 и 3 как начало и конец подстроки соответственно, но из-за SubStringBJ, нужно передать 3 как начало подстроки.
Ред. PT153
» WarCraft 3 / Нахождение атаки героя
» WarCraft 3 / Нахождение атаки героя
Ред. PT153
» WarCraft 3 / Добавление способности в спеллбук тригером
» WarCraft 3 / Добавление способности в спеллбук тригером
» WarCraft 3 / Добавление способности в спеллбук тригером
Читайте тут в пункте 1.24 как добавить в спелбук способность.
» WarCraft 3 / Есть ли объяснение каждого параметра в редакторе объектов?
» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4
» WarCraft 3 / Есть ли в vJass аналог констант, который переносит их в код?
Ред. PT153
» WarCraft 3 / Исходный код MdlVis
» WarCraft 3 / RemoveUnit или KillUnit?
Ред. PT153
» WarCraft 3 / Зеленый квадратик
» WarCraft 3 / Лава
» WarCraft 3 / Лава
Ред. PT153
» WarCraft 3 / Насчет ландшафта
Решение твое проблемы:
Ты делаешь кратер в точке X шириной Y и глубиной Z. Чтобы после его убрать, нужно сделать кратер в точке Х шириной Y и глубиной -Z.
Ред. PT153
» WarCraft 3 / Насчет ландшафта
Кидаю снова.
» WarCraft 3 / Вопрос по Jass
Ред. PT153
» WarCraft 3 / Насчет ландшафта
» WarCraft 3 / Вопрос по Jass
» WarCraft 3 / Редактор обьектов
» WarCraft 3 / Насчет ландшафта