Закидываешь все нужные области в событие, в условия закидываешь что входящий юнит это герой, а через если тогда иначе проверяешь в какую именно область юнит зашёл
По поводу локальной группы, перед ней нужно поставить set bj_wantDestroyGroup = true
Нужен таймер. Первым способом это каждые 0.01 сек проверять координаты юнита, а вторым, это все те же твои действия, но перед ними ещё таймер в 0.00 сек
library HC initializer init
private leaderboard HB
private function HCU takes nothing returns nothing
local integer i = 0
local integer id
local location array P
local real result = 0
loop
exitwhen i >= 50
set i = i+1
set P[i] = Location(0,0)
set id = GetHandleId(P[i])
set result = result+(id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i-1
endloop
call LeaderboardSetItemValue(HB,0,R2I(result))
endfunction
private function HCA takes nothing returns nothing
set HB = CreateLeaderboard()
call LeaderboardSetLabel(HB,"Handle Counter")
call PlayerSetLeaderboard(GetLocalPlayer(),HB)
call LeaderboardDisplay(HB,true)
call LeaderboardAddItem(HB,"Handles",0,Player(0))
call LeaderboardSetSizeByItemCount(HB,1)
call HCU()
call TimerStart(GetExpiredTimer(),.05,true,function HCU)
endfunction
private function init takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HCA)
endfunction
endlibrary
Нет, тебе это вообще ничем не грозит и ты лишь облегчишь работу варика, чутка ускорив его, оптимизация проще говоря
То есть варик же bj зачем то делал и не начнет ли он тупить, как обычно?
Близзарды создавали бж для удобства использования другими людьми
Та же гуишная функция с созданием юнитов позволяет человеку в последующем обращаться к юниту/группе как последний созданный/последняя группа (хотя для создания одного юнита действительно дочерта написано)
Другой пример это:
bj_RADTODEG / bj_DEGTORAD (radians to degrees / degrees to radians)
согласись, куда удобнее писать эти слова, нежели искать/запоминать эти цифры 57.2958 / .0174532
Ну а так же, если заменять некоторые бж функции можно знатно раздуть свой код, например
ReplaceUnitBJ
function ReplaceUnitBJ takes unit whichUnit, integer newUnitId, integer unitStateMethod returns unit
local unit oldUnit = whichUnit
local unit newUnit
local boolean wasHidden
local integer index
local item indexItem
local real oldRatio
// If we have bogus data, don't attempt the replace.
if (oldUnit == null) then
set bj_lastReplacedUnit = oldUnit
return oldUnit
endif
// Hide the original unit.
set wasHidden = IsUnitHidden(oldUnit)
call ShowUnit(oldUnit, false)
// Create the replacement unit.
if (newUnitId == 'ugol') then
set newUnit = CreateBlightedGoldmine(GetOwningPlayer(oldUnit), GetUnitX(oldUnit), GetUnitY(oldUnit), GetUnitFacing(oldUnit))
else
set newUnit = CreateUnit(GetOwningPlayer(oldUnit), newUnitId, GetUnitX(oldUnit), GetUnitY(oldUnit), GetUnitFacing(oldUnit))
endif
// Set the unit's life and mana according to the requested method.
if (unitStateMethod == bj_UNIT_STATE_METHOD_RELATIVE) then
// Set the replacement's current/max life ratio to that of the old unit.
// If both units have mana, do the same for mana.
if (GetUnitState(oldUnit, UNIT_STATE_MAX_LIFE) > 0) then
set oldRatio = GetUnitState(oldUnit, UNIT_STATE_LIFE) / GetUnitState(oldUnit, UNIT_STATE_MAX_LIFE)
call SetUnitState(newUnit, UNIT_STATE_LIFE, oldRatio * GetUnitState(newUnit, UNIT_STATE_MAX_LIFE))
endif
if (GetUnitState(oldUnit, UNIT_STATE_MAX_MANA) > 0) and (GetUnitState(newUnit, UNIT_STATE_MAX_MANA) > 0) then
set oldRatio = GetUnitState(oldUnit, UNIT_STATE_MANA) / GetUnitState(oldUnit, UNIT_STATE_MAX_MANA)
call SetUnitState(newUnit, UNIT_STATE_MANA, oldRatio * GetUnitState(newUnit, UNIT_STATE_MAX_MANA))
endif
elseif (unitStateMethod == bj_UNIT_STATE_METHOD_ABSOLUTE) then
// Set the replacement's current life to that of the old unit.
// If the new unit has mana, do the same for mana.
call SetUnitState(newUnit, UNIT_STATE_LIFE, GetUnitState(oldUnit, UNIT_STATE_LIFE))
if (GetUnitState(newUnit, UNIT_STATE_MAX_MANA) > 0) then
call SetUnitState(newUnit, UNIT_STATE_MANA, GetUnitState(oldUnit, UNIT_STATE_MANA))
endif
elseif (unitStateMethod == bj_UNIT_STATE_METHOD_DEFAULTS) then
// The newly created unit should already have default life and mana.
elseif (unitStateMethod == bj_UNIT_STATE_METHOD_MAXIMUM) then
// Use max life and mana.
call SetUnitState(newUnit, UNIT_STATE_LIFE, GetUnitState(newUnit, UNIT_STATE_MAX_LIFE))
call SetUnitState(newUnit, UNIT_STATE_MANA, GetUnitState(newUnit, UNIT_STATE_MAX_MANA))
else
// Unrecognized unit state method - ignore the request.
endif
// Mirror properties of the old unit onto the new unit.
//call PauseUnit(newUnit, IsUnitPaused(oldUnit))
call SetResourceAmount(newUnit, GetResourceAmount(oldUnit))
// If both the old and new units are heroes, handle their hero info.
if (IsUnitType(oldUnit, UNIT_TYPE_HERO) and IsUnitType(newUnit, UNIT_TYPE_HERO)) then
call SetHeroXP(newUnit, GetHeroXP(oldUnit), false)
set index = 0
loop
set indexItem = UnitItemInSlot(oldUnit, index)
if (indexItem != null) then
call UnitRemoveItem(oldUnit, indexItem)
call UnitAddItem(newUnit, indexItem)
endif
set index = index + 1
exitwhen index >= bj_MAX_INVENTORY
endloop
endif
// Remove or kill the original unit. It is sometimes unsafe to remove
// hidden units, so kill the original unit if it was previously hidden.
if wasHidden then
call KillUnit(oldUnit)
call RemoveUnit(oldUnit)
else
call RemoveUnit(oldUnit)
endif
set bj_lastReplacedUnit = newUnit
return newUnit
endfunction
Ну и отдельный тип бж функций, которые просто бесполезны, вроде DoNothing, ChooseRandomCreepBJ, ChooseRandomItemBJ, CopySaveGameBJ и т.д., где тупо добавили BJ в конце
А то исправлю 90 % красноты от карты и еще что ни будь не так будет?
Всё что может пойти не так - твоя криворукость и невнимательность
Проиграется только то, что ты и указал, это раз, во вторых, локалка бы тебе ничем не помогла проиграть звук, потому что всё что ты делаешь с ней, это пытаешься уничтожить
как правильно написать, чтобы в указанной точке появился юнит?
На примере с позицией юнита
local unit u = GetTriggerUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
set bj_lastCreatedUnit = CreateUnit(GetOwningPlayer(u),'u000',x,y,GetUnitFacing(u))
Создаст какого-то там юнита в позиции юнита триггера
совместимость с JNGP (т.к. данный редактор является основной надстройки);
Так что можешь возвращаться на джнгп если что, хотя в этом нет необходимости
Я всё время пользовался вджассом и сджассом, и единственные проблемы что возникали, были благодаря моей криворукости. Хотя приходилось лично видеть у другого чела несовместимость сджасса с зинком. Так и не понял в чем проблема была
без этих библиотек естевстенно работать не будет
Работать будет, потому что, как и указал PT153, подключаемые библиотеки это cjass, который, судя по всему, уже используется в твоём редакторе)
po1son, какая-то ерунда))
Ему не спецэффект нужен, а чтобы при нажатии на предмет не нужно было выбирать цель, чтобы повесить бафф, чтобы целью сразу становится кастующий. Другое, у тебя уже есть утечка, ты повешал эффект, а удалять его кто будет? + триггер низя выключать, предмет же вряд ли один раз заюзается в игре
Вот пример, у предмета способность-пустышка (канал), при касте которой вызывается дамми юнит и накладывает духовное пламя на кастера
В джнгп есть библиотека для замены бж функций на нативки, называется "cj_antibj_base"
Находится в JNGP -> AdicHelper -> lib -> cj_antibj_base. Можешь посмотреть что она там заменяет. Замена происходит с помощью дефайнов, по коду пробегается компилятор и заменяет такие-то значения на другие
Ну и подключается примерно так
От себя добавлю, что некоторые функции действительно очень странные и не понятно зачем созданы, например GetHandleIdBJ, GetPlayableMapRect и конечно же DoNothing))
map_maiker, событие нет, но можно случайно создать бесконечный цикл, когда при получении предмета выкидывают какой-то предмет и дают другой, снова активировав событие
» WarCraft 3 / Области и перемещение между ними
» WarCraft 3 / Как реализовать наложение дебаффов?
Ред. rsfghd
» WarCraft 3 / Отмена приказа
» WarCraft 3 / Нашел баг! (или утечку)
Ред. rsfghd
» WarCraft 3 / Нашел баг! (или утечку)
» WarCraft 3 / Панель приказов
Ред. rsfghd
» WarCraft 3 / Звука смерти у юнита
Звуки модели
Ищешь там звук и вместо добавления удаляешь его
» Блог им. rsfghd / HandleCounter
» WarCraft 3 / Переход к анимации движения
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
Ред. rsfghd
» WarCraft 3 / Вопрос от Вдохновленного Нативками Трггерщика
Та же гуишная функция с созданием юнитов позволяет человеку в последующем обращаться к юниту/группе как последний созданный/последняя группа (хотя для создания одного юнита действительно дочерта написано)
Другой пример это:
bj_RADTODEG / bj_DEGTORAD (radians to degrees / degrees to radians)
согласись, куда удобнее писать эти слова, нежели искать/запоминать эти цифры 57.2958 / .0174532
Ну а так же, если заменять некоторые бж функции можно знатно раздуть свой код, например
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
Ред. rsfghd
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
Попробуй этот вариант
» WarCraft 3 / Чем заменить CreateNUnitsAtLoc
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
Ред. rsfghd
» WarCraft 3 / Чем заменить CreateNUnitsAtLoc
» WarCraft 3 / Чем заменить CreateNUnitsAtLoc
» WarCraft 3 / Чем заменить CreateNUnitsAtLoc
Ред. rsfghd
» WarCraft 3 / Утечка function PlaySound takes string soundName returns nothing
Посмотри Function List используя ключевые слова, например Sound
Ред. rsfghd
» WarCraft 3 / Вопрос от Вдохновленного Нативками Трггерщика
» WarCraft 3 / WarCraft 3 Как создать предмет без цели наведения
Ему не спецэффект нужен, а чтобы при нажатии на предмет не нужно было выбирать цель, чтобы повесить бафф, чтобы целью сразу становится кастующий. Другое, у тебя уже есть утечка, ты повешал эффект, а удалять его кто будет? + триггер низя выключать, предмет же вряд ли один раз заюзается в игре
» WarCraft 3 / Вопрос от Вдохновленного Нативками Трггерщика
» WarCraft 3 / Вопрос от Вдохновленного Нативками Трггерщика
Находится в JNGP -> AdicHelper -> lib -> cj_antibj_base. Можешь посмотреть что она там заменяет. Замена происходит с помощью дефайнов, по коду пробегается компилятор и заменяет такие-то значения на другие
Ну и подключается примерно так
» WarCraft 3 / Можно узнать почему произошёл краш?