XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Утечки в простом jass спеле
» код
function Trig_Opening_Streams_unit_Actions takes nothing returns nothing
local timer tu = GetExpiredTimer()
local integer ht = GetHandleId(tu)
local unit pilot = LoadUnitHandle(udg_hash,ht,1)
    local real dist = LoadReal(udg_hash,ht,2)
    local real speed = LoadReal(udg_hash,ht,3)
    local real angleu = LoadReal(udg_hash,ht,4)
    local real waitu = LoadReal(udg_hash,ht,5)
    local real waitucheck = LoadReal(udg_hash,ht,6)
    local unit caster = LoadUnitHandle(udg_hash,ht,7)
    local real x = GetUnitX(pilot) + speed * Cos(angleu * bj_DEGTORAD)
    local real y = GetUnitY(pilot) + speed * Sin(angleu * bj_DEGTORAD)
    if waitu>0 then
    set waitu = waitu-1
    call SaveReal(udg_hash,ht,5,waitu)
    if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
//call SetUnitPosition(pilot,x,y)
    call SetUnitX(pilot,x)
    call SetUnitY(pilot,y)
endif
call UnitDamageTarget(caster,pilot,(1.2 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    if waitu<= waitucheck then
call AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",pi​lot,"chest")
    call SetUnitFlyHeight(pilot,0,2*(dist+50))
    endif
    else
call UnitDamageTarget(caster,pilot,(15.00 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl",pi​lot,"origin")
call SetUnitPathing(pilot,true)
call FlushChildHashtable(udg_hash,ht)
call DestroyTimer(tu)
    endif
set tu = null
set pilot = null
set caster = null
endfunction

function Trig_Opening_Streams_periodic_Actions takes nothing returns nothing
local timer tper = GetExpiredTimer()
local integer hper = GetHandleId(tper)
local unit caster = LoadUnitHandle(udg_hash,hper,1)
local real xloc = LoadReal(udg_hash,hper,2)
local real yloc = LoadReal(udg_hash,hper,3)
local integer wait = LoadInteger(udg_hash,hper,4)
local real angle = 10.00*wait//10.00*25=250
local unit array water
local integer lop = 1
local real x
local real y
local timer tu
local integer ht
local group g 
local unit Picked
    local real dist
    local real angleu
    local real speed
    local real waitu
if wait < 50 then
loop
        exitwhen lop > 36
        set x = xloc + (350.00-(wait*5.00)) * Cos(angle * bj_DEGTORAD)
        set y = yloc + (350.00-(wait*5.00)) * Sin(angle * bj_DEGTORAD)
        if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
        set water[lop] = LoadUnitHandle(udg_hash,hper,5+lop)
        call SetUnitPosition(water[lop],x,y)
        endif
        set angle = angle + 10.00
        set lop = lop + 1
        set water[lop] = null
    endloop
    set wait = wait+1
    call SaveInteger(udg_hash,hper,4,wait)
    else
    set angle = 72.00
    loop
    set lop = lop + 1
    exitwhen lop>6
    set x = xloc + 125.00 * Cos(angle * bj_DEGTORAD)
    set y = yloc + 125.00 * Sin(angle * bj_DEGTORAD)
    call AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y)
    call AddSpecialEffect("war3mapImported\\AquaSpike.mdx",x,y)
    set angle = angle + 72.00
    endloop
    set lop = 1
    loop
        exitwhen lop > 36
        set water[lop] = LoadUnitHandle(udg_hash,hper,5+lop)
        call DestroyEffect(LoadEffectHandle(udg_hash,GetHandleId(water[lop]),1))
        call FlushChildHashtable(udg_hash,GetHandleId(water[lop]))
        call KillUnit(water[lop])
        set water[lop] = null
        set lop = lop + 1
    endloop
    set g = CreateGroup()
    call GroupEnumUnitsInRange(g,xloc,yloc,350.00,null)
    loop
    set Picked = FirstOfGroup(g)
    exitwhen Picked == null
    if IsUnitEnemy(Picked,GetOwningPlayer(caster)) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked, UNIT_TYPE_GROUND) == true then
    set tu = CreateTimer()
    set ht = GetHandleId(tu)
    call UnitAddAbility(Picked, 'Amrf')
    call UnitRemoveAbility(Picked, 'Amrf')
    call SetUnitPathing(Picked,false)
    set dist = 300.00-(SquareRoot((GetUnitX(Picked) - xloc) * (GetUnitX(Picked) - xloc) + (GetUnitY(Picked) - yloc) * (GetUnitY(Picked) - yloc)))//300-distance between unit and loc
    set speed = (2*dist)/40.0 + 3.125
    set angleu = bj_RADTODEG * Atan2(GetUnitY(Picked) - yloc, GetUnitX(Picked) - xloc)
    set waitu = ((2*dist)+50.00)/speed
    call SetUnitFlyHeight(Picked,dist+50,2*(dist+50))
    call SaveUnitHandle(udg_hash,ht,1,Picked)
    call SaveReal(udg_hash,ht,2,dist)
    call SaveReal(udg_hash,ht,3,speed)
    call SaveReal(udg_hash,ht,4,angleu)
    call SaveReal(udg_hash,ht,5,waitu)
    call SaveReal(udg_hash,ht,6,(waitu/2))
    call DisplayTextToForce(GetPlayersAll(),I2S(StringHash("Picked")))
    call DisplayTextToForce(GetPlayersAll(),I2S(GetHandleId(Picked)))
  //  call SaveUnitHandle(udg_hash,h,StringHash("caster"),caster)
    call SaveUnitHandle(udg_hash,ht,7,caster)
    call UnitDamageTarget(caster,Picked,(15.00 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
            call AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",Pi​cked,"chest")
    call TimerStart(tu,0.025,true,function Trig_Opening_Streams_unit_Actions)
    set tu = null
    endif
    call GroupRemoveUnit(g,Picked)
    endloop
    call FlushChildHashtable(udg_hash,hper)
    call DestroyTimer(tper)
endif
    set wait = wait+1
    call SaveInteger(udg_hash,hper,4,wait)
call DestroyGroup(g)
set g = null
set Picked = null
set tper = null
set caster = null 
endfunction

function Trig_Opening_Streams_Actions takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local player p = GetOwningPlayer(caster) 
    local location loc = GetSpellTargetLoc()
    local real xloc = GetLocationX(loc)
    local real yloc = GetLocationY(loc)
    local real angle = 0.00
    local integer wait = 0//to 25
    local unit array water
    local integer lop = 1
    local real x
    local real y
    local timer tper = CreateTimer()
    local integer hper = GetHandleId(tper)
    loop
        exitwhen lop > 36
        set x = xloc + 350.00 * Cos(angle * bj_DEGTORAD)
        set y = yloc + 350.00 * Sin(angle * bj_DEGTORAD)
        if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
        set water[lop] = CreateUnit(p,'h00C',x,y,0.00)
        call SaveUnitHandle(udg_hash,hper,5+lop,water[lop])
        call AddSpecialEffectTarget("war3mapImported\\s_WateryAura.mdx",water[lop],"chest")
        call SaveEffectHandle(udg_hash,GetHandleId(water[lop]),1,bj_lastCreatedEffect)
        endif
        set angle = angle + 10.00
        set lop = lop + 1
        set water[lop] = null
    endloop
    call SaveUnitHandle(udg_hash,hper,1,caster)
    call SaveReal(udg_hash,hper,2,xloc)
    call SaveReal(udg_hash,hper,3,yloc)
    call SaveInteger(udg_hash,hper,4,wait)
    call TimerStart(tper,0.04,true,function Trig_Opening_Streams_periodic_Actions)
    set caster = null
    set p = null
    call RemoveLocation(loc)
    set loc = null
    set tper = null
endfunction

function Trig_Opening_Streams_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A006'//rawcode
endfunction
//===========================================================================
function InitTrig_Opening_Streams takes nothing returns nothing
    local integer index = 0
    set gg_trg_Opening_Streams = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_Opening_Streams, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_Opening_Streams, Condition( function Trig_Opening_Streams_Conditions ) )
    call TriggerAddAction( gg_trg_Opening_Streams, function Trig_Opening_Streams_Actions )
endfunction
Вообщем ребят помогите найти где же эти утечки (мне хотябы понять где их искать)
Суть спела:
создаются 36 даммиков и движутся к точке в течении 1 сек.
потом в точке происходит взрыв и всех противников разбрасывает в стороны.
Старый 14.10.2012, 13:48
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Старый 14.10.2012, 13:52
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
((код jass
call AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y)
call AddSpecialEffect("war3mapImported\\AquaSpike.mdx",x,y)
))
не понял этого?
может лучше так:
((код jass
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y)​)
call DestroyEffect(AddSpecialEffect("war3mapImported\\AquaSpike.mdx",x,y))
или через хеш если там нету анимации "death"
))
Старый 14.10.2012, 14:03
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
asesmo, спс а больше нечего ненашел?
я просто думал эффект заменю позже ну и пока не обновил код.
Старый 14.10.2012, 14:29
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:54.