找回密码
 点一下
查看: 2580|回复: 3

中立敌对一拥而上的解决方法&&非中立单位夜晚会睡眠模拟

[复制链接]
发表于 2011-8-1 05:28:21 | 显示全部楼层 |阅读模式
        中立敌对在被攻击的时候周围单位会一拥而上,要解决这个
        通过游戏平衡常数的“战斗——救援范围”可以更改,但前提是只能改玩家或者无人控制的单位。而“战斗——救援范围(中立)”则几乎为无效项,原因在于“中立敌对”是有AI控制的。无论是怎么样改,或者让他游戏胜利失败等T出游戏等,都不能摆脱AI的控制。
        所以用模拟来解决。
魔兽有0-15个玩家,这里提供一种方法用player(14)也就是中立特殊来代替 野怪。

*“中立特殊” 除了“中立无敌意”以外,所有玩家与其互相为敌,这个也可以之后在更改。
*好在这个玩家初始给予奖励打开 遵守 游戏平衡常数里的 战斗——救援范围(中立) 因此这个可以用了 还有警戒范围、警戒返回时间,但不遵守 警戒返回距离
*还有关键的一点就是 它到夜间是不会自动睡眠的,就跟我现在5点也没睡一样。而动作设置单位夜晚睡眠 玩家也只能是 中立敌对的player(12)才有效。于是就要添加一个 早6点 晚6点的触发来控制它的睡眠状态。


[jass]
function Sleep takes nothing returns nothing
    call UnitRemoveAbility(GetEnumUnit(), 'Asla')
    call UnitAddAbility( GetEnumUnit(), 'Asla' )
    call UnitAddSleepPerm( GetEnumUnit(), GetFloatGameState(GAME_STATE_TIME_OF_DAY)>18.or GetFloatGameState(GAME_STATE_TIME_OF_DAY)<6.)
endfunction

function FilterLive takes nothing returns boolean
    return GetWidgetLife(GetFilterUnit())>0. and UnitCanSleep(GetFilterUnit())
endfunction
function TimeofDay takes nothing returns nothing
    local group g=CreateGroup()
    local boolexpr b=Condition(function FilterLive)
    call GroupEnumUnitsOfPlayer(g, Player(14), b)
    call ForGroup(g,function Sleep)
    call DestroyBoolExpr(b)
    call DestroyGroup(g)
    set g=null
    set b=null
endfunction

//===========================================================================
function InitTrig_Sleep takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterGameStateEvent(t, GAME_STATE_TIME_OF_DAY, GREATER_THAN_OR_EQUAL, 6.01)
    call TriggerRegisterGameStateEvent(t, GAME_STATE_TIME_OF_DAY, GREATER_THAN_OR_EQUAL,18.01)
    call TriggerAddAction(t,function TimeofDay)
    set t=null
endfunction
[/jass]

加了UnitCanSleep函数,因此像傀儡之类的单位夜晚也是清醒的。
而用这个方法就可以让非中立敌对的单位夜晚睡眠,当然要在物编提前设置睡眠允许



当然 中立单位重新刷怪后 也要加上UnitAddSleepPerm(bj_lastCreatedUnit, GetFloatGameState(GAME_STATE_TIME_OF_DAY)>18.or GetFloatGameState(GAME_STATE_TIME_OF_DAY)<6.)让他判断是否入睡
这种模拟方法自然醒,到点儿睡,被打返回后也继续睡,跟用中立敌对一样。


上图,里面附带简单的野怪复活系统 CreepCallForHelp.w3x (16 KB, 下载次数: 47)

评分

参与人数 1威望 +31 收起 理由
希瓦 + 31 不错的演示

查看全部评分

发表于 2011-8-1 05:52:29 | 显示全部楼层
原来lz素中立特殊的说。沙发没收~
回复

使用道具 举报

 楼主| 发表于 2011-8-1 13:37:47 | 显示全部楼层

回 1楼(幻之皮卡丘) 的帖子

近来昼夜颠倒,方才投靠中立特殊,难道LS也是深夜党?
回复

使用道具 举报

 楼主| 发表于 2011-8-17 16:31:03 | 显示全部楼层
才发现写漏了一点,刚修正。
[jass]or GetFloatGameState(GAME_STATE_TIME_OF_DAY)<6.)[/jass]
经验还是按原来的一样计算的,不足只是少了单位名字和等级的显示。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 23:21 , Processed in 0.069794 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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