找回密码
 点一下
查看: 668|回复: 5

请问下如何实现这样的行为控制:Buff甲存在前提是Buff乙存在,乙的前提是丙

[复制链接]
发表于 2015-9-3 11:55:23 | 显示全部楼层 |阅读模式
本帖最后由 zt0616 于 2015-9-3 12:01 编辑

假设玩家1和2各有2个地堡和若干机枪,只要有一个机枪在地堡里,地堡就能保持Buff“A”(CAbilTransport里LoadTransportBehavior,施法者是机枪,目标是地堡。下面Buff“A”简称A),空地堡自动失去Buff“A”。
以上没有疑问,下面的没有成功实现:

在只使用地堡,不新建马甲的前提下,
当玩家1的所有地堡都有A,则他的所有地堡同时获得Buff“B”,期间只要有一个地堡因为卸载了机枪失去A,那他所有地堡同时失去B。
当玩家1和2所有地堡都有B,则他们所有地堡同时获得C,同上,只要任意玩家有一个地堡失去A,那两个玩家的所有地堡同时失去A和B。

问题描述完毕,希望大大们看到这还没被弄晕,简单的说就是C存在前提是B存在,B的前提是A。

我尝试过用A永久周期性运行效果ApplyBehavior来给施法者添加B,验证设过枚举全图“存在A的目标数量”和玩家所需条件“玩家拥有A的数量”,但都没管用,不知道问题出在什么地方。

    <CEffectApplyBehavior id="A"/>
这个A周期性运行的效果分别尝试过下面的验证器:

枚举的方法:
    <CValidatorUnitCompareBehaviorCount id="HasA">
        <Value value="1"/>
        <Behavior value="A"/>
    </CValidatorUnitCompareBehaviorCount>

    <CValidatorLocationEnumArea id="ASearch">
        <AreaArray Radius="500" Validator="HasA"/>
        <Count value="2"/>
    </CValidatorLocationEnumArea>


玩家所需条件的方法:
    <CRequirement id="PlayerReady">
        <NodeArray index="Show" Link="EqCountBehaviorACompleteOnlyAtUnit2"/>
    </CRequirement>


    <CValidatorPlayerRequirement id="AllUnitHaveA">
        <Value value="PlayerReady"/>
        <WhichUnit Value="Target"/>
    </CValidatorPlayerRequirement>


请大大帮忙看看错误,或者提出更好的方案,多谢!

发表于 2015-9-3 19:12:26 | 显示全部楼层
因为涉及到判定两个玩家,所以单纯使用验证器是不行的,验证器只能判定单一玩家或者是技能树下的目标涉及到的玩家,这样两个毫不相关的玩家是无法直接使用验证器判定的。
所以你需要借助触发器,这样一来就简单的很了,使用单位组筛选出玩家的地堡,判定buff即可。
回复

使用道具 举报

发表于 2015-9-3 20:40:46 | 显示全部楼层
这事儿其实容易得很。你先在碉堡的自带Buff里填写上B。

然后把B的需求条件弄成

CountBehavior(A,CompleteOnly) >= CountUnit(Bunker,CompleteOnly)

这样当玩家当前的A buff的数量等于或大于碉堡的数量时,就可认为所有碉堡都有了A了。那么B就自动生效。

至于C。这更容易了。因为B只有在所有碉堡都有A的时候才会出现,不可能出现同玩家的一个碉堡有B,但是另一个没有。因此对于C,你只要做个区域搜索验证,查找另一玩家的任意一个碉堡,只要该玩家任意一个碉堡有B,自己也有B,那么就添加C。这样你只需要检测两个单位。

点评

今天碰到个问题,又来麻烦下麦大,CAbilTransport 能不能指定卸载地点?我尝试修改最大卸载距离然后发布卸载指令到偏移点,但无论如何只能卸载到碉堡正下方。我想实现卸载点随地堡角度而改变,看图就明白啦 [at  详情 回复 发表于 2015-9-4 07:11
麦大威武,成功!无缝运行  详情 回复 发表于 2015-9-4 06:41
回复

使用道具 举报

发表于 2015-9-3 20:42:21 | 显示全部楼层
    <CRequirementCountBehavior id="CountBehaviorACompleteOnly">
        <Flags index="TechTreeCheat" value="0"/>
        <Tooltip value=""/>
        <Count Link="A" State="CompleteOnly"/>
    </CRequirementCountBehavior>
    <CRequirementCountUnit id="CountUnitBunkerCompleteOnly">
        <Flags index="TechTreeCheat" value="0"/>
        <Tooltip value=""/>
        <Count Link="Bunker" State="CompleteOnly"/>
    </CRequirementCountUnit>
    <CRequirementGTE id="GTECountBehaviorACompleteOnlyCountUnitBunkerCompleteOnly">
        <Tooltip value=""/>
        <OperandArray index="0" value="CountBehaviorACompleteOnly"/>
        <OperandArray index="1" value="CountUnitBunkerCompleteOnly"/>
    </CRequirementGTE>
回复

使用道具 举报

 楼主| 发表于 2015-9-4 06:41:54 | 显示全部楼层
麦德三世 发表于 2015-9-3 20:40
这事儿其实容易得很。你先在碉堡的自带Buff里填写上B。

然后把B的需求条件弄成

麦大威武,成功!无缝运行
回复

使用道具 举报

 楼主| 发表于 2015-9-4 07:11:06 | 显示全部楼层
本帖最后由 zt0616 于 2015-9-5 12:25 编辑

附带的小问题,已解决,删除回复
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 19:38 , Processed in 0.201211 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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