请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 1648|回复: 4

求排泄,费好大劲做个技能放几次就卡

[复制链接]
发表于 2010-4-9 13:50:45 | 显示全部楼层 |阅读模式
实在找不到什么地方能释放的了,马甲单位我都释放过了,也没创建点。但是技能一放就会卡,我很郁闷所以大家有空帮我看一下到底是哪里有泄露。

[jass]function Scatter takes nothing returns nothing
local timer T = GetExpiredTimer()
local unit u = i2u(GetStoredInteger(udg_GG,"散射",I2S(h2i(T))))
local unit array mj
local unit mb
local real r
local real x
local real y
local integer i=1
local integer index = GetStoredInteger(udg_GG,"Scatter",I2S(h2i(T)))
local group g = CreateGroup()
if index < 50 then
loop
exitwhen i > 7
set mj = i2u(GetStoredInteger(udg_GG,"散射",(I2S(h2i(T))+I2S(i))))
set r = GetUnitFacing(mj)
set x = GetUnitX(mj)+20*CosBJ(r)
set y = GetUnitY(mj)+20*SinBJ(r)
if IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false then
if IsUnitAliveBJ(mj) == true then
call SetUnitX(mj,x)
call SetUnitY(mj,y)
call GroupEnumUnitsInRange(g,GetUnitX(mj),GetUnitY(mj),250,null)
loop
set mb = FirstOfGroup(g)
exitwhen mb==null
call GroupRemoveUnit(g,mb)
if ( (IsUnitAliveBJ(mb) == true) and (IsUnitEnemy(mb, GetOwningPlayer(mj)) == true and IsUnitInGroup(mb, udg_temp[1]) == false ) ) then
call UnitDamageTarget( u, mb, ( ( 200.00 + ( I2R(GetUnitAbilityLevelSwapped('A00A', u)) * 75.00 ) ) + ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, u, true)) * 0.80 ) ), false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
call RemoveUnit(mj)
call FlushStoredInteger(udg_GG, "散射",(I2S(h2i(T))+I2S(i)))
call GroupAddUnitSimple( mb, udg_temp[1] )
set mj = null
set mb = null
endif
endloop
call DestroyGroup( g )
else
call FlushStoredInteger(udg_GG, "散射",(I2S(h2i(T))+I2S(i)))
endif
else
call ExplodeUnitBJ( mj )
endif
set i = i + 1
endloop
set index = index + 1
call StoreInteger(udg_GG,"Scatter",I2S(h2i(T)),index)
else
loop
exitwhen i > 7
set mj = i2u(GetStoredInteger(udg_GG,"散射",(I2S(h2i(T))+I2S(i))))
call ExplodeUnitBJ(mj)
call FlushStoredInteger(udg_GG, "散射",(I2S(h2i(T))+I2S(i)))
set mj = null
set i = i + 1
endloop
call FlushStoredInteger(udg_GG,"散射",I2S(h2i(T)))
call DestroyTimer(T)
call GroupClear( udg_temp[1] )
set u = null
set mb = null
endif
set u = null
set mb = null
set mj = null
endfunction
[/jass]
发表于 2010-4-9 18:47:29 | 显示全部楼层
不会JASS,我只会T
回复

使用道具 举报

发表于 2010-4-9 19:25:47 | 显示全部楼层
可能问题不在这部分函数 index大于50  会多出一个单位组 没删除  用自爆单位还不如删除
call StoreInteger(udg_GG,"Scatter",I2S(h2i(T)),index) 这个没清空
udg_temp[1]这个单位组作用不明
set g=null
如果0.01秒的话
.....................
回复

使用道具 举报

发表于 2010-5-21 12:53:18 | 显示全部楼层
发个完整的上来撒!
回复

使用道具 举报

发表于 2010-5-21 16:24:11 | 显示全部楼层
用GC比较悲剧,过多的存读取缓存也慢,另外尽量不用BJ函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-3-28 20:50 , Processed in 0.041515 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表