Amrf 发表于 2013-11-16 16:11:59

减速系统

本帖最后由 Amrf 于 2013-11-17 01:27 编辑

function yjiansu0 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer i=GetHandleId(t)
local unit u1=LoadUnitHandle(BX,i,0)
local real add=LoadReal(BX,i,1)
local real dang=GetUnitMoveSpeed(u1)
local real future=dang+add
if future<=1then
call SetUnitMoveSpeed( u1,1)
call SaveReal(BX,i,1, dang+add-1))//原本写反了,注意本系统不要与自带的混用
elseif future<=522 then
call SetUnitMoveSpeed( u1,future)
call FlushChildHashtable(BX, i)
call PauseTimer(t)
call DestroyTimer(t)
elseif future>522 then
call SetUnitMoveSpeed( u1,522)
call SaveReal(BX,i,1,future-522)
endif
set t=null
set u1=null
endfunction
function yjiansu takes unit u1,real un,real last returns nothing//un 为原始百分比 正为减速
local timer t=CreateTimer()                              
local integer i=GetHandleId(t)
local real dang=GetUnitMoveSpeed(u1)
local real cha=un*GetUnitDefaultMoveSpeed(u1)//减去值
call DisplayTextToPlayer( Player(1), 0, 0, R2S(dang) )
if dang-cha>=522 then
call SetUnitMoveSpeed( u1,522)
call SaveUnitHandle(BX,i,0,u1)
call SaveReal(BX,i,1,dang-522)
call TimerStart(t,last,true,function yjiansu0)
elseif dang-cha>1 then
call SetUnitMoveSpeed( u1,dang-cha)
call SaveUnitHandle(BX,i,0,u1)
call SaveReal(BX,i,1,cha)
call TimerStart(t,last,true,function yjiansu0)
elseif dang-cha<=1 then
call SetUnitMoveSpeed( u1,1)
call SaveUnitHandle(BX,i,0,u1)
call SaveReal(BX,i,1,dang-1)
call TimerStart(t,last,true,function yjiansu0)
endif
set t=null
endfunction
有个前提,物编单位速度上下限已经打开
拓展:按当前/默认速度百分比加减速,按具体点数加减速,速度偷取,
通过该函数进行补偿法速度保持,补偿一次例如德玛q,补偿的次数更多例如易的R免疫减速;

辅助用的加buff系统
function debuff takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer i=GetHandleId(t)
local unit u1=LoadUnitHandle(BX,i,0)
local integer abli=LoadInteger(BX,i,1)
call UnitRemoveAbility(u1,abli)
set u1=null
endfunction
function addbuff takes unit u1,integer level,integer abli,real last returns nothing//加buff,缺归位
local real x=GetUnitX(u1)
local real y=GetUnitY(u1)
local unit dum=gg_unit_h00C_0063//霜冻
local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
local timer t=CreateTimer()
local integer i=GetHandleId(t)
call SaveUnitHandle(BX,i,0,u1)
call SaveInteger(BX,i,1,abli)
call TimerStart(t,last,false,function debuff)
if GetOwningPlayer(u1) != p then
call SetUnitOwner( dum,p, true )
call SetUnitAbilityLevel(dum,'A08S',level)
call SetUnitX(dum,x)
call SetUnitY(dum,y)
call IssuePointOrder(dum, "breathoffrost",x,y)
else
call SetUnitOwner( dum,Player(0), true )
call SetUnitAbilityLevel(dum,'A08S',level)
call SetUnitX(dum,x)
call SetUnitY(dum,y)
call IssuePointOrder(dum, "breathoffrost",x,y)
call SetUnitOwner( dum,p, true )
endif
set t=null
endfunction

Amrf 发表于 2013-11-16 16:13:01

另一个减速为当前百分比,其余类似

2730366 发表于 2014-8-15 19:06:00

表示不懂

2985401706 发表于 2014-11-5 20:55:22

看不懂啊

qq8100201352qq. 发表于 2014-11-7 14:56:47

好好好非常好
页: [1]
查看完整版本: 减速系统