Сейчас 00:47:02 Понедельник, 6 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Лаги непонятного происхождения
[Вопрос] Лаги непонятного происхождения
xomachДата: Понедельник, 26 Ноября 2012, 18:03:33 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
в общем, есть у меня довольно большой код , при его срабатывание игра начинает дико лагать, и почти виснет. Фишка в том, что гуи версия этого работала нормально - это 1 . И в том, что лично я не понимаю, откуда тут лаги, вроде все ок-) - это 2.

 

NaturekidДата: Понедельник, 26 Ноября 2012, 18:06:39 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
пик еври юнит-ов не перебарщено?

 

xomachДата: Понедельник, 26 Ноября 2012, 18:15:09 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
Naturekid, в гуишном стоко же было-)
Кстати, забыл добавить, этот триггер не выполняет своей функкции успешно-) . Дамми остаются стоять на месте, и непонятно на врагов действуют-)

Добавлено (26 Ноября 2012, 18:15:09)
---------------------------------------------
а еще сюда прилагется такой триггер:

Code

function Trig_QDummyDead_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local timer t
if GetUnitAbilityLevel( u, 'B000') > 0 then
     t = LoadTimerHandle(udg_hash,GetHandleId(u),0)
     if t!=null then
         FlushChildHashtable(udg_hash,GetHandleId(u))
         FlushChildHashtable(udg_hash,GetHandleId(t))
         PauseTimer(t)
         DestroyTimer(t)
     endif
endif
u=null
t=null
endfunction

//===========================================================================
function InitTrig_QDummyDead takes nothing returns nothing
     set gg_trg_QDummyDead = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_QDummyDead, EVENT_PLAYER_UNIT_DEATH )
     call TriggerAddAction( gg_trg_QDummyDead, function Trig_QDummyDead_Actions )
endfunction



 

[SeKtOR]Дата: Пятница, 30 Ноября 2012, 22:27:06 | Сообщение # 4
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Код очень дикий и утечный....

 

Ty3uKДата: Пятница, 30 Ноября 2012, 22:49:20 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Quote (|SeKtOR|)
GUI очень дикий и утечный....

fxd trollface


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

[SeKtOR]Дата: Суббота, 01 Декабря 2012, 18:09:26 | Сообщение # 6
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Code
function Trig_QCast_Func002C takes nothing returns boolean
     if ( ( GetSpellAbilityId() == 'A000' ) ) then
         return true
     endif
     if ( ( GetSpellAbilityId() == 'A002' ) ) then
         return true
     endif
     if ( ( GetSpellAbilityId() == 'A007' ) ) then
         return true
     endif
     return false
endfunction

function Trig_QCast_Conditions takes nothing returns boolean
     if ( not Trig_QCast_Func002C() ) then
         return false
     endif
     return true
endfunction

function Q_Loop takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer hid = GetHandleId(t)
     local unit dummy = LoadUnitHandle(udg_hash, hid, 2)
     local real angle = LoadReal(udg_hash, hid, 1)
     //local location tpoint = LoadLocationHandle(udg_hash, hid, 2)
     local group g = CreateGroup()
     local unit u
     local real p
     //if dummy!=null then
     GroupEnumUnitsInRangeOfLoc(g, GetUnitLoc(dummy),200,null)  
     loop  
         u=FirstOfGroup(g)
         if IsUnitEnemy(u, GetOwningPlayer(dummy)) then
             if GetUnitAbilityLevel(u, 'B000') > 0 then
                 PlaySoundOnUnitBJ(udg_CollisionSound[ GetRandomInt(1, 4)],100, u)
                 p=GetUnitState(u, UNIT_STATE_LIFE)
                 SetUnitState(u, UNIT_STATE_LIFE, p-GetUnitState(dummy, UNIT_STATE_LIFE))
                 SetUnitState(dummy, UNIT_STATE_LIFE, GetUnitState(dummy, UNIT_STATE_LIFE)-p)
                 if (GetUnitState(dummy, UNIT_STATE_LIFE) / GetUnitState(dummy, UNIT_STATE_MAX_LIFE)) < 0.1 then  
                     KillUnit(dummy)  
                 endif
                 if (GetUnitState(u, UNIT_STATE_LIFE) / GetUnitState(u, UNIT_STATE_MAX_LIFE)) < 0.1 then  
                     KillUnit(u)  
                 endif
             else
                 GroupClear(g)
                 GroupEnumUnitsInRangeOfLoc(g, GetUnitLoc(dummy),220,null)
                 loop
                     u=FirstOfGroup(g)
                     if IsUnitEnemy(u,GetOwningPlayer(dummy)) then
                         Damage( dummy, u, GetUnitState(dummy,UNIT_STATE_LIFE))
                         if udg_QExplosionBool[GetPlayerId(GetOwningPlayer(dummy))+1] then
                             PauseUnit(u,true)
                             //SetUnitInvulnerable(u,true)
                             //Push(u,200,10)
                         else
                             DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPriest.mdl", u, "chest"))
                             PlaySoundAtPointBJ(udg_QStrickeSound[GetRandomInt(1,4)],100, GetUnitLoc(u), 0)
                         endif
                         exitwhen u==null  
                     endif
                 endloop
                 if udg_QExplosionBool[GetPlayerId(GetOwningPlayer(dummy))+1] then
                     u = CreateUnit(GetOwningPlayer(dummy), 'h00B', GetUnitX(dummy),GetUnitY(dummy),0)
                     SetUnitTimeScale(u, 5)
                     UnitApplyTimedLife(u, 'BTLF', 5)
                 endif
                 if GetUnitTypeId(LoadUnitHandle(udg_hash, hid, 0))=='H008' then
                     u = CreateUnit(GetOwningPlayer(dummy), 'h00C', GetUnitX(dummy),GetUnitY(dummy),0)
                     UnitApplyTimedLife(u, 'BTLF', 5)
                 endif
                 t=null
                 u=null
                 g=null
                 dummy=null
                 KillUnit(dummy)
                 return
             endif
         endif
         GroupRemoveUnit(g,u)
         exitwhen u==null  
     endloop
     SetUnitPositionLoc(dummy, LocProj(GetUnitLoc(dummy), 20, angle))
     //endif
     t=null
     u=null
     g=null
     dummy=null
endfunction

function Q_Wait2 takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer hid = GetHandleId(t)
     local unit caster = LoadUnitHandle(udg_hash, hid, 0)
     local real angle = LoadReal(udg_hash, hid, 1)
     //local location tpoint = LoadLocationHandle(udg_hash, hid, 2)
     FlushChildHashtable(udg_hash, hid)
     //PlaySoundOnUnitBJ( udg_QLaunchSound[ GetRandomInt(1, 4)], 100, caster)  
     //KillSoundWhenDone(GetLastPlayedSound())
     //PauseUnit(caster, false)
     local unit dummy = CreateUnitAtLoc( GetOwningPlayer(caster), udg_QDummyType[GetPlayerId(GetOwningPlayer(caster))+1], LocProj(GetUnitLoc(caster), 60, angle), angle )
     DestroyTimer(t)
     set t= CreateTimer()
     set hid= GetHandleId(t)
     SaveUnitHandle(udg_hash, hid, 0, caster)
     SaveReal(udg_hash, hid, 1, angle)
     SaveUnitHandle(udg_hash, hid, 2, dummy)
     SaveTimerHandle(udg_hash, GetHandleId(dummy),0,t)
     //SaveLocationHandle(udg_hash, hid, 2, tpoint)
     TimerStart(t, 0.02, TRUE, function Q_Loop)
     set dummy = null
     set caster = null
     //set tpoint = null
     set t = null
endfunction

function Q_Wait1 takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer hid = GetHandleId(t)
     local unit caster = LoadUnitHandle(udg_hash, hid, 0)
     local real angle = LoadReal(udg_hash, hid, 1)
     //local location tpoint = LoadLocationHandle(udg_hash, hid, 2)
     local integer n = GetPlayerId(GetOwningPlayer(caster))+1
     FlushChildHashtable(udg_hash, hid)  
     SetUnitAnimation( caster, udg_QAni[n] )
     //PlaySoundAtPointBJ(udg_QSound[n], 100, GetUnitLoc(caster), 0)
     //KillSoundWhenDone(GetLastPlayedSound())
     DestroyTimer(t)
     set t= CreateTimer()
     set hid= GetHandleId(t)
     SaveUnitHandle(udg_hash, hid, 0, caster)
     SaveReal(udg_hash, hid, 1, angle)
     //SaveLocationHandle(udg_hash, hid, 2, tpoint)
     TimerStart(t, 0.25, false, function Q_Wait2)
     set caster = null
     //set tpoint = null
     set t = null
endfunction

function Trig_QCast_Actions takes nothing returns nothing
     local unit caster = GetTriggerUnit()
     local location tpoint = GetUnitLoc(udg_Target[GetPlayerId(GetOwningPlayer(caster))])
     local real angle = bj_RADTODEG * Atan2(GetLocationY(tpoint) - GetLocationY(GetUnitLoc(caster)), GetLocationX(tpoint) - GetLocationX(GetUnitLoc(caster)))
     local timer t = CreateTimer()
     local integer hid = GetHandleId(t)
     SetUnitFacing(caster, angle)
     //PauseUnit(caster, true)
     SetUnitAnimation(caster, "stand")
     SaveUnitHandle(udg_hash, hid, 0, caster)
     SaveReal(udg_hash, hid, 1, angle)
     //SaveLocationHandle(udg_hash, hid, 2, tpoint)
     TimerStart(t, 0.1, false, function Q_Wait1)
     set caster = null
     //set tpoint = null
     set t = null
endfunction

//===========================================================================
function InitTrig_Q takes nothing returns nothing
     set gg_trg_Q = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Q, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Q, Condition( function Trig_QCast_Conditions ) )
     call TriggerAddAction( gg_trg_Q, function Trig_QCast_Actions )
endfunction

GUI божественно посравнению с этим


 

BorodachДата: Воскресенье, 02 Декабря 2012, 08:53:04 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Code
           loop
                      u=FirstOfGroup(g)
                      if IsUnitEnemy(u,GetOwningPlayer(dummy)) then
                          Damage( dummy, u, GetUnitState(dummy,UNIT_STATE_LIFE))
                          if udg_QExplosionBool[GetPlayerId(GetOwningPlayer(dummy))+1] then
                    PauseUnit(u,true)
                    //SetUnitInvulnerable(u,true)
                    //Push(u,200,10)
                          else
                    DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPriest.mdl", u, "chest"))
                    PlaySoundAtPointBJ(udg_QStrickeSound[GetRandomInt(1,4)],100, GetUnitLoc(u), 0)
                          endif
                          exitwhen u==null   
                      endif
                  endloop

1 что заметил юнит не удаляется из группы

PlaySoundAtPointBJ(udg_QStrickeSound[GetRandomInt(1,4)],100, GetUnitLoc(u), 0)
endif
call GroupRemoveUnit(g,u)
exitwhen u==null


Karamba
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Лаги непонятного происхождения
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz