Nutty | Дата: Пятница, 30 Марта 2012, 08:59:07 | Сообщение # 1 |
1 уровень
Группа: Пользователи
Сообщений: 4
Награды: 0
Репутация: 0
Блокировки:
| есть некий unit u, при смерти которого срабатывает функция onDeath, при чём на этого юнита повешано это событие(смерть), поэтому воскресив его, нужно умудриться не сбить ивент повешанный на него. пробовал так: Code unit u = GetTriggerUnit(); int ut = GetUnitTypeId(u); real ux = GetUnitX(u); real uy = GetUnitY(u); real face = GetUnitFacing(u); RemoveUnit(u); u=CreateUnit(Player(10), ut, ux, uy, face); SetWidgetLife(u, 1.0); SetUnitAnimation(u, "death"); PauseUnit(u, true); SetUnitInvulnerable(u, true); timer t = CreateTimer(); SaveUnitHandle(Hash, GetHandleId(t), 0, u); TimerStart(t, 5.0, false, function AllyUp); t=null; но под u заного выделяется память => меняется хэндл => ивент повешан на не существующего юнита, что вполне логично, есть ли способ избежать этого, не вешая каждый раз ивент на нового юнита? это система реса npc - если умирают, то падают и через время встают, если нужно покажу весь код, но думаю всё и так ясно.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете." (с) Стив Макконнелл
.MODEL TINY CODE SEGMENT ASSUME CS:CODE, DS:CODE ORG 100h START: mov ah,9 mov dx,OFFSET Msg int 21h int 20h Msg DB 'Hello World',13,10,'$' CODE ENDS END START
|
|
|
|
Ty3uK | Дата: Пятница, 30 Марта 2012, 09:19:05 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Мб не создавать нового юнита а просто ловить событие юнит атакован и когда жизни - урон будет меньше 1, то делать неуязвимым, проигрывать анимацию и прочее
|
|
|
|
SirNikolas | Дата: Пятница, 30 Марта 2012, 09:25:58 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Можно дать юниту классификацию "Минотавр" и воскрешать его способностью Служителя Предков.
|
|
|
|
Hexing | Дата: Пятница, 30 Марта 2012, 10:35:08 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Мб не создавать нового юнита а просто ловить событие юнит атакован и когда жизни - урон будет меньше 1, то делать неуязвимым, проигрывать анимацию и прочее геморно + могут убить 1ним ударом(магия и прочее) Quote (SirNikolas) Можно дать юниту классификацию "Минотавр" и воскрешать его способностью Служителя Предков. хороший вариант, но не хотелось менять юнитам классификацию, заменил EVENT_UNT на EVENT_PLAYER_UNIT и проблема отпала. спс за ответы
|
|
|
|
Ty3uK | Дата: Пятница, 30 Марта 2012, 10:51:45 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Как убьют, если событие отловит нанесение урона до факта нанесения?
|
|
|
|
Hexing | Дата: Пятница, 30 Марта 2012, 11:48:28 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Как убьют, если событие отловит нанесение урона до факта нанесения? ну тогда будет не честно по отношению к мобу или атакующему герою ибо у меня система опыт за урон, в общем не хочется никого обижать отменяя урон
|
|
|
|