找回密码
 点一下
查看: 1455|回复: 15

如何单位魔法值0时停止单位并使其无法移动

[复制链接]
发表于 2010-7-26 18:37:26 | 显示全部楼层 |阅读模式
任意单位里找不到魔法值变化.
直接指定的话又必须用地图上已经摆放的单位.
如果用注册单位..这个确实不知道该怎么写事件或者其它两项?
发表于 2010-7-26 18:53:57 | 显示全部楼层
既然是注册单位,那当然不写事件。
而注册事件的时候就用“XX单位—魔法值变为 等于 0”.

至于静止移动,可以使用技能(如:诱捕)也可以直接禁用单位的'Amov'技能。
回复

使用道具 举报

 楼主| 发表于 2010-7-26 19:25:55 | 显示全部楼层
继续问,这方法好像有个弊端..
假如恢复为不为0时以上的值.如果去掉了移动技能就再也无法加回来.
不过好像听说过用ShiftMoveSpeed(u,-XX.0)方法,不过试过了不起作用.

function FuelSystemConditions takes nothing returns boolean
    local integer i = GetUnitTypeId(GetTriggerUnit())
    return i=='H00J'
endfunction

function FuelSystem takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local real fuel = GetUnitState(u,UNIT_STATE_MANA)
    if fuel<0.5 then
        call IssueImmediateOrder(u,"stop")
        call ShiftMoveSpeed(u,-522.0)
        endif
        call SetUnitState(u,UNIT_STATE_MANA,fuel)
    endif
    set u = null
endfunction

//===========================================================================
function InitTrig_FuelSystem takes nothing returns nothing
    set gg_trg_FuelSystem = CreateTrigger()
    call TriggerAddCondition( gg_trg_FuelSystem, Condition( function FuelSystemConditions ) )
    call TriggerAddAction( gg_trg_FuelSystem, function FuelSystem )
endfunction
回复

使用道具 举报

发表于 2010-7-26 20:07:52 | 显示全部楼层
我说的是禁用。。不过那是针对一个玩家只有一个英雄的地图。。
也可以用诱捕。。。
回复

使用道具 举报

发表于 2010-7-26 20:11:36 | 显示全部楼层
引用第2楼kimjongmin于2010-07-26 19:25发表的  :
继续问,这方法好像有个弊端..
假如恢复为不为0时以上的值.如果去掉了移动技能就再也无法加回来.
不过好像听说过用ShiftMoveSpeed(u,-XX.0)方法,不过试过了不起作用.

function FuelSystemConditions takes nothing returns boolean
.......
ShiftMoveSpeed(u,-XX.0)如果“游戏平衡性参数”里的“最小移动速度”不为0,那就没用。(建议使用诱捕)
还有,如果你要动态注册“魔法为0”的事件,就不用再检查魔法了。
你上面的方法看起来像计时器检查时用的。。
还有,你准备什么时候把那个单位的移动速度加回来呢?

另外:为什么有两个END IF呢??
回复

使用道具 举报

 楼主| 发表于 2010-7-27 15:14:38 | 显示全部楼层
另外个endif是本来中间还有段调试用的判定代码复制过来的时候没去掉.
不过基本明白了..其实已经将最低速度设为0.
移动速度加回来指获得魔法值增加的物品时返还原先的速度

local item i = GetManipulatedItem()
    local unit u = GetTriggerUnit()
    local integer id = GetItemTypeId(i)
    if id=='pres' then
        call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)+(100*I2R(GetItemCharges(i))))
        SetUnitMoveSpeed(u,GetUnitDefaultMoveSpeed(GetTriggerUnit()))
        call RemoveItem(i)
    else
        call DoNothing()
    endif
    set i = null
    set u = null

最后一点问题-_-添加诱捕的话是添加一个BUFF吧?好像删除容易,可在添加的时候估计还得用一个马甲单位..
回复

使用道具 举报

发表于 2010-7-27 15:23:53 | 显示全部楼层
禁用是“玩家”分类里面的。
诱捕有BUFF
回复

使用道具 举报

 楼主| 发表于 2010-7-27 15:40:06 | 显示全部楼层
好吧..添加Buff依然不懂如何制作..因为搜索了下还得用一些底层的东西..
回复

使用道具 举报

发表于 2010-7-27 15:47:47 | 显示全部楼层
SetUnitPropWindow(u, 0)
回复

使用道具 举报

发表于 2010-7-27 16:08:46 | 显示全部楼层
。。。不是添加BUFF,而是创建马甲释放技能。。。
恢复移动时直接删除BUFF就可以了。
回复

使用道具 举报

 楼主| 发表于 2010-7-27 16:57:52 | 显示全部楼层
无奈了..越做越乱..
求整个问题演示求扣分..
回复

使用道具 举报

发表于 2010-7-27 17:45:50 | 显示全部楼层
完成。。。

test.w3x

15 KB, 下载次数: 14

回复

使用道具 举报

 楼主| 发表于 2010-7-28 01:23:10 | 显示全部楼层
好吧我已经无奈了..合并自己的系统后停止单位无问题,魔法也增加了,可是就是不删除掉buff..
部分地方的确是T转J..

注意第一次是绝对没有问题的.然后多试几次问题就出现了.不是为0时还可以移动就是明明多于0了无法移动..

test.w3x

64 KB, 下载次数: 6

回复

使用道具 举报

发表于 2010-7-28 01:38:22 | 显示全部楼层
同8楼
只要把u改成你要的单位即可

当单位的魔法不为0时,再设置为
SetUnitPropWindow(u, 1)
回复

使用道具 举报

发表于 2010-7-28 08:50:25 | 显示全部楼层
对啊!
还可以设置转向角度。
不过应该用SetUnitPropWindow(u, GetUnitDefaultPropWindow(u)),直接设为1还是不好。
引用第12楼kimjongmin于2010-07-28 01:23发表的  :
好吧我已经无奈了..合并自己的系统后停止单位无问题,魔法也增加了,可是就是不删除掉buff..
部分地方的确是T转J..

注意第一次是绝对没有问题的.然后多试几次问题就出现了.不是为0时还可以移动就是明明多于0了无法移动..
发现问题,貌似是魔兽实数计算太不精确的原因。
把“等于0”改成了“小于1”就没事了。

不久前也遇到类似问题:在游戏中显示12.400的实数,实际上的值是12.39999.
而实际上,这个值也应该是12.400....

teswt.w3x

16 KB, 下载次数: 19

回复

使用道具 举报

 楼主| 发表于 2010-7-28 12:57:08 | 显示全部楼层
行了感谢..没问题了..
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-28 12:29 , Processed in 0.074816 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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