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

GA地精研究院

 找回密码
 立即注册
查看: 1287|回复: 4

[演示&系统] 减速系统

[复制链接]
发表于 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<=1  then
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
 楼主| 发表于 2013-11-16 16:13:01 | 显示全部楼层
另一个减速为当前百分比,其余类似
回复 支持 0 反对 1

使用道具 举报

发表于 2014-8-15 19:06:00 | 显示全部楼层
表示不懂
回复 支持 反对

使用道具 举报

发表于 2014-11-5 20:55:22 | 显示全部楼层
看不懂啊
回复 支持 反对

使用道具 举报

发表于 2014-11-7 14:56:47 | 显示全部楼层
好好好非常好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2019-12-13 19:44 , Processed in 0.353770 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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