Duke911
offline
Опыт:
3,907Активность: |
RemoveUnit в Jass
Что конкретно делает RemoveUnit() ?
первоначально я думал что после неё все параметры юнита обнулятся ... однако после
call RemoveUnit(uBullet)
call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , " Жизни пули после удаления ") call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , R2S(GetUnitState(uBullet,UNIT_STATE_LIFE))) выдало: Жизни пули после удаления 1.000 |
22.12.2009, 00:31 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FREEZE_ball
Cataclysm => жара
offline
Опыт:
15,247Активность: |
Duke911, скорее всего, хендл сразу был занят другим объектом. Либо удаление занимает какое-либо время (внутри движка, имеется в виду).
|
22.12.2009, 00:54 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Duke911
offline
Опыт:
3,907Активность: |
немного уточню/изменю вопрос :
как в массиве вычиcлить что юнит удален с помощью RemoveUnit (а не был убит другим юнитом или expiration таймером),если перебор массива идет без задержки времени после применения этой функции (RemoveUnit)??? через wait(1.00) у меня получилось условием
GetUnitTypeId(udg_Units[i]) == 0 а как без wait? O_o P.S. самое интересное что условие udg_Units[i] == null не срабатывает даже через wait... Отредактировано Duke911, 24.12.2009 в 22:51. |
24.12.2009, 22:13 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,159Активность: |
Онли луп. Войт убивает поток, и вообще, может 1к , это стандартно стоящее значение переменное |
24.12.2009, 22:38 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Duke911
offline
Опыт:
3,907Активность: |
XiMiKs
поподробнее, что значит 1к? что сравнить с 1к? |
24.12.2009, 22:49 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Ты вообще уверен что ты его удалил, вернее ты уверен что uBullet == Player(0)?
|
25.12.2009, 09:25 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Duke911
offline
Опыт:
3,907Активность: |
RazArt:
причем тут плеер 0???? я пробовал и с DisplayTextToAllPlayers. если допустим на пустой карте удалить Footmana функцией RemoveUnit() то его жизни останутся 420.00. Так как мне вычислить етого удаленного футмена если их у меня 10 штук и они все в массиве? Причем вычислить мне нужно сразу же после удаления, не выжидая там 0.01 sec, а сразу. |
25.12.2009, 11:43 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Очевидно, что ссылка на юнит не была удалена (читай, переменная не была обнулена). Могу предложить задавать custom value для каждого юнита такое, что оно равнялось бы номеру ячейки юнита в массиве. Если юнит не был трупом и был удален через RemoveUnit(), то здоровье останется на прежнем уровне. |
25.12.2009, 13:01 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
9thNerZul
forum/warcraft3
offline
Опыт:
4,869Активность: |
Если не хочешь чтобы он был на карте, но отслеживался, как вариант киляй его и переноси в особое место которое никто никогда не увидит) |
10.01.2010, 11:39 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Артте
Open up your eyes
offline
Опыт:
23,423Активность: |
мне кажется он хочет изобрести пятиколесный велосипед.
Расскажи лучше суть всей затеи-тебе помогут лучше её оформить =) |
10.01.2010, 12:13 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
оно ставит в очередь на окончательное удаление походу
не бывает такого |
10.01.2010, 12:20 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
хендл никогда не будет занят сразу другим объектом, хотя бы потому что он освобождается только после завершения потока.
|
10.01.2010, 13:01 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
какая разница, если у тебя есть переменная, её никто другой просто так не займет |
10.01.2010, 13:40 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
Duke, call RemoveUnit(uBullet) call TriggerSleepAction()/TimerStart() Это не важно, главное что время прошло. call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , " Жизни пули после удаления ") call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , R2S(GetUnitState(uBullet,UNIT_STATE_LIFE))) что показывает? |
10.01.2010, 16:14 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
9thNerZul
forum/warcraft3
offline
Опыт:
4,869Активность: |
Показывает 0.000 следовательно афтор кран(шутка) всё удаляется |
10.01.2010, 17:01 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Duke911
offline
Опыт:
3,907Активность: |
9thNerZul, я же уже писал что спустя wait жизни обнуляются, всё ок
call RemoveUnit(uBullet)
call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , " Жизни пули после удаления ") call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , R2S(GetUnitState(uBullet,UNIT_STATE_LIFE))) покажет 420.0 call RemoveUnit(uBullet)
call TriggerSleepAction(0) call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , " Жизни пули после удаления ") call DisplayTimedTextToPlayer( Player(0) , 0, 0, 5 , R2S(GetUnitState(uBullet,UNIT_STATE_LIFE))) покажет 0.000 тока у меня там етот тригер с коротким периодом 0.02, не вредно ли будет TriggerSleepAction(0) часто вызывать?
Походу просто RemoveUnit() не сразу выполняется(unit помечается на удаление или чтото тип того)
P.S. Я уже обошел проблему заменив RemoveUnit() на KillUnit(),он вроде бы выполняется сразу. |
11.01.2010, 00:38 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
он не выполняется сразу, просто ремув и кил делают абсолютно разные вещи |
11.01.2010, 08:12 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
KillUnit() Отлов убитого RemoveUnit() Вроде должно работать, если тебе надо поймать юнита, которого убираешь. Kill тебе будет и анимации проигрывать, и труп оставлять. |
11.01.2010, 12:25 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
удалять юнитов ацкое зло. (их надо убивать и прятать... а природа сама всё остальное сделает)
|
11.01.2010, 16:02 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Duke911
offline
Опыт:
3,907Активность: |
Ясно, RemoveUnit в топку, просто раньше проблема была в том что у меня ещё один тригер срабатывал на Unit Dies, из-за етого KillUnit не подходил. В данный момент всё переделал и тему можно закрывать. |
11.01.2010, 16:11 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|