убийство гидры
[DS] Дата: Среда, 08 Июня 2011, 19:21:42 | Сообщение # 26
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды:
0
Репутация:
527
Блокировки:
Чтобы копии рексара не появлялись
Zabei Дата: Среда, 08 Июня 2011, 19:23:06 | Сообщение # 27
7 уровень
Группа: Проверенные
Сообщений: 479
Награды:
0
Репутация:
125
Блокировки:
Quote (BuРyC )
нет, мне нужно, что бы не создавались копии героев, которые их убивают.
BuРyC Дата: Среда, 08 Июня 2011, 19:24:29 | Сообщение # 28
3 уровень
Группа: Пользователи
Сообщений: 74
Награды:
0
Репутация:
-27
Блокировки:
да, копии рексара и т.п
Ajaccio Дата: Среда, 08 Июня 2011, 19:45:45 | Сообщение # 29
7 уровень
Группа: Проверенные
Сообщений: 299
Награды:
1
Репутация:
239
Блокировки:
Попробуйте-ка это:
library Respawn initializer Init { private constant hashtable hash = new hashtable private int number = 0 private bool UnitRespawnCondition () { unit who = GetDyingUnit() if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == false && !IsUnitType(who, UNIT_TYPE_SUMMONED) {return true} who = null; return false } private void UnitRespawnTimer () { timer on_time = GetExpiredTimer() int INDEX = LoadInteger(hash, GetHandleId(on_time), 0), TYPE = LoadInteger(hash, INDEX, 3) real x = LoadReal(hash, INDEX, 0), y = LoadReal(hash, INDEX, 1), a = LoadReal(hash, INDEX, 2) unit respawn = CreateUnit(Player(12), TYPE, x, y, a) SaveInteger(hash, GetHandleId(respawn), 0, INDEX) DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", respawn, "origin")) /*----------------------------------------*/ FlushChildHashtable(hash, GetHandleId(on_time)) DestroyTimer(on_time) on_time = null; respawn = null } private void UnitRespawn () { timer on_time = new timer unit who = GetTriggerUnit() SaveInteger(hash, GetHandleId(on_time), 0, LoadInteger(hash, GetHandleId(who), 0)) TimerStart(on_time, 10.0, false, function UnitRespawnTimer) on_time = null; who = null } private bool SaveUnitPosition () { unit filt = GetFilterUnit() SaveReal(hash, number, 0, GetWidgetX(filt)) SaveReal(hash, number, 1, GetWidgetY(filt)) SaveReal(hash, number, 2, GetUnitFacing(filt)) SaveInteger(hash, number, 3, GetUnitTypeId(filt)) SaveInteger(hash, GetHandleId(filt), 0, number++) filt = null; return false } private void Init () { group timed = new group; boolexpr action = Condition(function SaveUnitPosition) GroupEnumUnitsInRect(timed, bj_mapInitialPlayableArea, action) /*----------------------------------------*/ trigger on_death = new trigger TriggerRegisterPlayerUnitEvent(on_death, Player(12), EVENT_PLAYER_UNIT_DEATH, null) TriggerAddCondition(on_death, Condition(function UnitRespawnCondition)) TriggerAddAction(on_death, function UnitRespawn) /*----------------------------------------*/ DestroyGroup(timed); DestroyBoolExpr(action) action = null; timed = null; on_death = null } }
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
[DS] Дата: Среда, 08 Июня 2011, 19:58:19 | Сообщение # 30
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды:
0
Репутация:
527
Блокировки:
Химичил химичил получилось то, что вместо рексара теперь та самая гидра вылезает на своем месте.
BuРyC Дата: Среда, 08 Июня 2011, 20:00:00 | Сообщение # 31
3 уровень
Группа: Пользователи
Сообщений: 74
Награды:
0
Репутация:
-27
Блокировки:
ты это уже тестил?
Ajaccio Дата: Среда, 08 Июня 2011, 20:08:38 | Сообщение # 32
7 уровень
Группа: Проверенные
Сообщений: 299
Награды:
1
Репутация:
239
Блокировки:
У меня никаких проблем не обнаружено (копий нет).
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
[DS] Дата: Среда, 08 Июня 2011, 20:09:19 | Сообщение # 33
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды:
0
Репутация:
527
Блокировки:
BuРyC , у Ajaccio все работает, вроде.
SirNikolas Дата: Среда, 08 Июня 2011, 20:15:08 | Сообщение # 34
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (Ajaccio )
if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == false && !IsUnitType(who, UNIT_TYPE_SUMMONED) {return true}
Утечка локального юнита who.Добавлено (08-06-2011, 20:15) --------------------------------------------- А вообще все должно работать.
SunCreep Дата: Среда, 08 Июня 2011, 20:16:33 | Сообщение # 35
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды:
0
Репутация:
141
Блокировки:
"Гуёвые" как говорит одна общеизвестная личность триггеры,но всё же. тык!
Ajaccio Дата: Среда, 08 Июня 2011, 20:26:07 | Сообщение # 36
7 уровень
Группа: Проверенные
Сообщений: 299
Награды:
1
Репутация:
239
Блокировки:
Quote (SirNikolas )
Утечка локального юнита who.
А я вообще не трогал код, да-да. Только заменял имена переменных на понятные, когда разбирался в принципе работы. Не спрашиваете меня где была ошибка. Я не знаю, оно само заработало.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
[DS] Дата: Среда, 08 Июня 2011, 20:38:00 | Сообщение # 37
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды:
0
Репутация:
527
Блокировки:
я думал еще на вджассе сделать Code
library CreepRevive globals private constant integer EnemyPlayerId = 12 private constant string ReviveEffect = "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" //the effect at respawn private constant real TimeTillRevive = 10.00 private filterfunc filter private trigger CreepReviveTrigger = CreateTrigger() private hashtable Hash = InitHashtable() endglobals private function TrueFilter takes nothing returns boolean return true endfunction private function CreepRevive takes nothing returns nothing local unit u3 = GetTriggerUnit() local unit u4 if GetOwningPlayer(u3) == Player(EnemyPlayerId) then call TriggerSleepAction(TimeTillRevive) set u4 = CreateUnit(Player(EnemyPlayerId),LoadInteger(Hash, GetHandleId(u3), 0),LoadReal(Hash, GetHandleId(u3), 1),LoadReal(Hash, GetHandleId(u3), 2),LoadReal(Hash, GetHandleId(u3), 3)) call DestroyEffect(AddSpecialEffect(ReviveEffect,LoadReal(Hash, GetHandleId(u3), 1),LoadReal(Hash, GetHandleId(u3), 2))) call SaveInteger(Hash,GetHandleId(u4), 0, LoadInteger(Hash, GetHandleId(u3), 0)) call SaveReal(Hash,GetHandleId(u4), 1, LoadReal(Hash, GetHandleId(u3), 1)) call SaveReal(Hash,GetHandleId(u4), 2, LoadReal(Hash, GetHandleId(u3), 2)) call SaveReal(Hash,GetHandleId(u4), 3, LoadReal(Hash, GetHandleId(u3), 3)) call FlushChildHashtable(Hash, GetHandleId(u3)) endif set u3 = null set u4 = null endfunction function vJass_Creep_Revive takes nothing returns nothing local unit u3 local group grooup = CreateGroup() set filter = Filter(function TrueFilter) call GroupEnumUnitsOfPlayer(grooup, Player(EnemyPlayerId),filter) loop set u3 = FirstOfGroup(grooup) exitwhen u3 == null call SaveInteger(Hash,GetHandleId(u3), 0, GetUnitTypeId(u3)) call SaveReal(Hash,GetHandleId(u3), 1, GetUnitX(u3)) call SaveReal(Hash,GetHandleId(u3), 2, GetUnitY(u3)) call SaveReal(Hash,GetHandleId(u3), 3, GetUnitFacing(u3)) call GroupRemoveUnit(grooup,u3) set u3 = null endloop call TriggerRegisterAnyUnitEventBJ(CreepReviveTrigger, EVENT_PLAYER_UNIT_DEATH ) call TriggerAddAction(CreepReviveTrigger, function CreepRevive) set CreepReviveTrigger = null call DestroyGroup(grooup) set grooup = null endfunction endlibrary
BuРyC Дата: Среда, 08 Июня 2011, 20:43:29 | Сообщение # 38
3 уровень
Группа: Пользователи
Сообщений: 74
Награды:
0
Репутация:
-27
Блокировки:
Ajaccio , Спасибо, действительно работает. Только мне очень интересно, почему после записи юнитов через bool, все заработоло, а через for group нет.