Если умирает нейтральний крип я обнуляю умирающего нейтральнего крипа UU[i] == null, после проверяю периодическим таймером и вставлю условие которое проверяет пустой ли UU[i] == null или нет (внизу код), потом создаю нового нейтральнего крипа. Почему не работает условие null в цикле. И еще я правильно устанавливаю цикл переменные типа UU[62] = 'nsbd' и.т.д. Поэтому не работает только условие это странно. Условие работает когда юнит не имеет переменную цикл.
Пример кода:
  local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
  local integer i=62
  loop
  if UU[i] == null then
  set UU[i] = CreateUnit(p,II[i],RR[i],RE[i],RU[i])
  endif
  set i = i + 1
  exitwhen i == 89
  endloop 
  set p = null
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
Ну так ты отладочку добавь-то.
Если строка "if UU[i] == null then" отрабатывает, то выведи один текст.
Если НЕ отрабатывает (через 'else'), то выведи другой, и дополни ещё данными: выведи ID юнита, его имя, текущее и максимальное ХП, координаты, игрока владельца.
27
Проверяй через
function IsUnitDead takes unit u returns boolean 
		return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction
Можно проверять смерть юнита через кол-во здоровья, меньше 0.405 означает, что юнит мертв.
Также классификация UNIT_TYPE_DEAD показывает, что юнит труп/мертв (иногда полезно при реинкарнации).
И еще проверять тип, если юнит удалился из игры после разложения, вам выдадут GetUnitTypeId( u )==0 (наверн также если переменная пуста сработает)
Возможно после окончательного разложения трупа не получить имя, координаты и пр.
Интересно трупы еще сохраняют владельцев?
11
МрачныйВорон, можно поинтересоваться, а какой это язык программирования?
27
МрачныйВорон, можно поинтересоваться, а какой это язык программирования?
Jass 😓
29
Автор вопроса думает. что переменная обнуляется автоматически после смерти юнита. Но нет, если хочешь, чтобы переменная была null, то тебе ещё записывать индекс массива в специально поле юнита с помощью функции SetUnitUserData( unit, integer ), и через него, после смерти юнита, отдельным триггером обнулять ту переменную по индексу, полученного с умирающего юнита при помощи функции GetUnitUserData( unit ).

А так вариант проверки, как предложили другие товарищи.
Есть ещё вариант использовать нативку UnitAlive
    native UnitAlive takes unit id returns boolean
Вставляешь этот код выше в начале, в нестандартном сценарии. А затем проверяешь через UnitAlive:
  if not UnitAlive( UU[i] ) then
  set UU[i] = CreateUnit(p,II[i],RR[i],RE[i],RU[i])
  endif
38
Волчачка, я бы добавил что лучше на юзер дату хештейбл ключ вешать. Юзер дата одна, а данных много
29
ScorpioT1000, такое лучше для продвинутых RPG карт или AoS'ок. Думаю ав делает нечто простое. Да и можно вешать целую структуру на юзердату, не только ключ хетаблицы) А структура может быть не только из данных но иметь ссылки на другие структуры.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.