BinGO | Дата: Вторник, 27 Июля 2010, 07:33:08 | Сообщение # 1 |
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
| Code function Trig_Pistol_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function Trig_Pistol_Check takes nothing returns boolean return IsUnitEnemy(GetFilterUnit(), Player(1)) endfunction
function Trig_Pistol_Move takes nothing returns nothing local timer t = GetExpiredTimer() local unit u = LoadUnitHandle(udg_HashTable, GetHandleId(t), 1) local integer i = LoadInteger(udg_HashTable, GetHandleId(t), 1) local unit shooter = LoadUnitHandle(udg_HashTable, GetHandleId(t), 2) local real x = GetUnitX(u) local real y = GetUnitY(u) local real f = GetUnitFacing(u)*.01745 local group g = CreateGroup() local unit target = null call SetUnitPosition(u, x+10*Cos(f), y+10*Sin(f)) call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 100, Condition(function Trig_Pistol_Check)) set target = FirstOfGroup(g) if target != null then call UnitDamageTarget(u, target, 150-udg_Difficulty*5, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) call KillUnit(u) call PauseTimer(t) call DestroyTimer(t) call GroupEnumUnitsInRange(g, GetUnitX(target), GetUnitY(target), 200+udg_Difficulty*100, Condition(function Trig_Pistol_Check)) call GroupPointOrder(g, "attack", GetUnitX(shooter), GetUnitY(shooter)) call FlushChildHashtable(udg_HashTable, GetHandleId(t)) endif if i == 500 then call FlushChildHashtable(udg_HashTable, GetHandleId(t)) call KillUnit(u) call PauseTimer(t) call DestroyTimer(t) else set i = i + 1 call SaveInteger(udg_HashTable, GetHandleId(t), 1, i) endif set t = null set u = null set shooter = null set target = null call DestroyGroup(g) set g = null endfunction
function Trig_Pistol_Actions takes nothing returns nothing local unit u = CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()), 'hdhw', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), GetUnitFacing(GetSpellAbilityUnit())) local timer t = CreateTimer() call SaveUnitHandle(udg_HashTable, GetHandleId(t), 1, u) call SaveUnitHandle(udg_HashTable, GetHandleId(t), 2, GetSpellAbilityUnit()) call SaveInteger(udg_HashTable, GetHandleId(t), 1, 1) call SetUnitPathing(u, false) call TimerStart(t, 0.01, true, function Trig_Pistol_Move) set u = null set t = null endfunction
//=========================================================================== function InitTrig_Pistol takes nothing returns nothing set gg_trg_Pistol = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Pistol, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Pistol, Condition( function Trig_Pistol_Conditions ) ) call TriggerAddAction( gg_trg_Pistol, function Trig_Pistol_Actions ) endfunction
Работает исправно, но после каждого применения постепенно прибавляются лаги, в итоге после 15-20 применений играть становится некомфортно, а после 30 уже просто невозможно.
|
|
|
|
-Arypt- | Дата: Вторник, 27 Июля 2010, 10:26:36 | Сообщение # 2 |
5 уровень
Группа: Заблокированные
Сообщений: 126
Награды: 0
Репутация: 18
Блокировки:
| ты не удаляеш локальные переменные, либо это, либо я незнаю Добавлено (27-07-2010, 10:26) --------------------------------------------- скорее всего локальные, тк у тебя событие с очень малым периодом если нельзя удалять локальные переменные (если это повредит процессу), то попробуй через присваивание локальных глобальным после дейсвий , ну если я в чемто не прав, то я в этом нуб
Я могу ошибаться Но не ошибается, тот, кто ничего не делает Я стал проверенным, и поставил аватарку^^
|
|
|
|
BinGO | Дата: Вторник, 27 Июля 2010, 12:32:23 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
| Ошибка была довольно глупой. В редакторе объектов в настройках спелла-пустышки "Скорость дистанционной атаки" стояла 0, поэтому и были лаги. Топик можно закрыть/удалить
|
|
|
|