找回密码
 点一下
查看: 3221|回复: 30

如何實現互斥的建築升級?

[复制链接]
发表于 2008-3-19 00:28:33 | 显示全部楼层 |阅读模式
試了很多方法
可是沒辦法在點下升級的時候就禁用
如果把2個互斥的升級丟進排程裡就可以順利升級
用觸發好像也沒辦法很順利的達成
希望懂得人教一下阿,這種事一個人往死裡鑽是出不來的
发表于 2008-3-19 01:27:53 | 显示全部楼层
不好意思,没有看懂,能说得具体点吗???
回复

使用道具 举报

发表于 2008-3-19 09:55:00 | 显示全部楼层
貌似楼主要做到2个升级中只允许升一个  一但按下其中一个 另一个就不可用 但是我没空去解决问题
回复

使用道具 举报

 楼主| 发表于 2008-3-19 13:15:21 | 显示全部楼层
對,就是2選1的昇級或建築
一個建築(基礎)可以昇到ABC3種
選了B以後就不准出現C
選了C就不能用B,A不受影響都可以昇
但是作為建築升級的話只要在B建造完成前做C就可以2個都有
作為科技升級的話把B的需求科技跟C一起排程就可以並存
難道要做成2段升級第一段是虛假升級?
回复

使用道具 举报

发表于 2008-3-19 13:24:20 | 显示全部楼层
试了一下,貌似建筑升级没什么问题的啊
还是不太明白呢

比如一个建筑可以升级为ABC三种,同时只能执行一种,不可能造成冲突的啊,只要设好ABC这三个的相关数据就可以了啊
回复

使用道具 举报

发表于 2008-3-19 13:37:49 | 显示全部楼层
因为可以像造兵一样有升级序列~~所以用开始研究科技作为事件是不行的~~楼主想要的是一个科技被按下去后不管它是处于等待研究状态还是正在研究状态都能够取消另一个同级升级~~就跟限定造3个英雄一样~~其实如果是单位的话就可以直接用等价物实现了~~不过对于科技也不是没没法子~~


要按下去就响应是可以的~~捕捉命令ID就可以了~~不过别以为这样就完了~~还得注意这个升级被取消的状况~~因此研究被取消的事件也要有~~在取消后回退到2选1状态~~


其实造建筑也差不多~~不过必须多个锁住事件~~就是一个建筑升级完成后就要锁住目前的科技~~以免另一个建筑在升级过程中取消~~导致回到2选1状态~~



我一会帮你做个演示好了~~
回复

使用道具 举报

发表于 2008-3-19 14:14:25 | 显示全部楼层
如果是科技升级的话
还是假升级好  用训练单位代替  比如B和C都要木头或者人口 而A不要  或者 用 限制某单位只能存在一个(就是楼上提到的等价物 就像恶魔猎手变身还是被认为恶魔猎手存在一样)  1个等价于另一个  不知道需不需要双方互相等价
回复

使用道具 举报

发表于 2008-3-19 14:21:32 | 显示全部楼层
双方等价会导致游戏崩溃~~

所以我这个演示主要还是说说用触发来实现的法子~~
回复

使用道具 举报

发表于 2008-3-19 15:01:00 | 显示全部楼层
在这个演示中~~你升级了剑就不能升级火枪~~反之亦然~~升级了铁甲就不能升级钢甲~~反之亦然~~

而箭塔和炮塔则是2选1~~

其实比较复杂~~这里共用到了6个触发~~


有关科技研究的3段触发:

当获得研究命令时,禁止等价的另一科技的升级能力。
[trigger]
Order
    Events
        Unit - A unit Is issued an order with no target
    Conditions
    Actions
        Custom script:   if (GetIssuedOrderId()=='Rhme') then
        Player - Set the max research level of Black Gunpowder to 0 for (Triggering player)
        Custom script:   endif
        Custom script:   if (GetIssuedOrderId()=='Rhra') then
        Player - Set the max research level of Iron Forged Swords to 0 for (Triggering player)
        Custom script:   endif
        Custom script:   if (GetIssuedOrderId()=='Rhar') then
        Player - Set the max research level of Studded Leather Armor to 0 for (Triggering player)
        Custom script:   endif
        Custom script:   if (GetIssuedOrderId()=='Rhla') then
        Player - Set the max research level of Iron Plating to 0 for (Triggering player)
        Custom script:   endif
[/trigger]

用于研究方向的反悔。当取消任意一科技时,恢复与其对应的科技的升级能力,但是由于所有科技都有3级,我们必须在1级以后就将科技锁定。否则在第二级和第三级时如果取消了升级就也会运行这个触发,导致等价的科技再次变得可用,所以这里也必须增加一个是否已锁定的判断。
[trigger]
Cancel
    Events
        Unit - A unit Cancels research
    Conditions
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                AtkLock[(Player number of (Triggering player))] Equal to False
                Or - Any (Conditions) are true
                    Conditions
                        (Researched tech-type) Equal to Iron Forged Swords
                        (Researched tech-type) Equal to Black Gunpowder
            Then - Actions
                Player - Set the max research level of Iron Forged Swords to 3 for (Triggering player)
                Player - Set the max research level of Black Gunpowder to 3 for (Triggering player)
            Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                DefLock[(Player number of (Triggering player))] Equal to False
                Or - Any (Conditions) are true
                    Conditions
                        (Researched tech-type) Equal to Iron Plating
                        (Researched tech-type) Equal to Studded Leather Armor
            Then - Actions
                Player - Set the max research level of Iron Plating to 3 for (Triggering player)
                Player - Set the max research level of Studded Leather Armor to 3 for (Triggering player)
            Else - Actions
[/trigger]

用于锁定科技的触发,任意一个科技研发完毕后就将之死锁,取消今后级别的科技的话就不会导致重新激活等价科技
[trigger]
Finsh
    Events
        Unit - A unit Finishes research
    Conditions
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                Or - Any (Conditions) are true
                    Conditions
                        (Researched tech-type) Equal to Iron Forged Swords
                        (Researched tech-type) Equal to Black Gunpowder
            Then - Actions
                Set AtkLock[(Player number of (Triggering player))] = True
            Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                Or - Any (Conditions) are true
                    Conditions
                        (Researched tech-type) Equal to Iron Plating
                        (Researched tech-type) Equal to Studded Leather Armor
            Then - Actions
                Set DefLock[(Player number of (Triggering player))] = True
            Else - Actions
[/trigger]


有关建筑升级的三段触发:


当开始建筑升级时,禁止另外一种升级方向,其目的并非影响正在升级的塔本身,而是影响其它未升级的塔。并将其编入正在进行关键升级的单位组。
[trigger]
Start
    Events
        Unit - A unit Begins an upgrade
    Conditions
        Or - Any (Conditions) are true
            Conditions
                (Unit-type of (Triggering unit)) Equal to Guard Tower
                (Unit-type of (Triggering unit)) Equal to Cannon Tower
    Actions
        Unit Group - Add (Triggering unit) to UpgGroup[(Player number of (Triggering player))]
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Unit-type of (Triggering unit)) Equal to Guard Tower
            Then - Actions
                Player - Limit training of Cannon Tower to 0 for (Triggering player)
            Else - Actions
                Player - Limit training of Guard Tower to 0 for (Triggering player)
[/trigger]


撤销升级的话首先退出单位组,在看看里面是不是已经没单位了(也就是自己是最后一个退出的),再检查升级方向是否已经被锁死,如果没有锁死,就恢复2种升级方向。

[trigger]
UCancel
    Events
        Unit - A unit Cancels an upgrade
    Conditions
        UpgLock[(Player number of (Triggering player))] Equal to False
        ((Triggering unit) is in UpgGroup[(Player number of (Triggering player))]) Equal to True
    Actions
        Unit Group - Remove (Triggering unit) from UpgGroup[(Player number of (Triggering player))]
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (UpgGroup[(Player number of (Triggering player))] is empty) Equal to True
            Then - Actions
                Player - Limit training of Guard Tower to -1 for (Triggering player)
                Player - Limit training of Cannon Tower to -1 for (Triggering player)
            Else - Actions
[/trigger]

2种升级任意中完成后锁死科技,避免其后的取消事件导致2种升级方向的恢复,另外必须判断完成的升级是否处于2种方向之一,否则会造成奥术塔升级后直接死锁,炮塔和箭塔无法通过取消第一次升级来反悔的情况。
建造完成的塔也需要退出单位组,确保组中的单位全部是正在建造关键升级的单位
[trigger]
UFinish
    Events
        Unit - A unit Finishes an upgrade
    Conditions
        Or - Any (Conditions) are true
            Conditions
                (Unit-type of (Triggering unit)) Equal to Guard Tower
                (Unit-type of (Triggering unit)) Equal to Cannon Tower
    Actions
        Set UpgLock[(Player number of (Triggering player))] = True
        Unit Group - Remove (Triggering unit) from UpgGroup[(Player number of (Triggering player))]
[/trigger]

UniqueResearch.w3x

20 KB, 下载次数: 25

回复

使用道具 举报

发表于 2008-3-19 16:12:39 | 显示全部楼层
从哨塔 升级到 防御塔 该事件

触发单位是后者吗?
回复

使用道具 举报

发表于 2008-3-19 16:58:18 | 显示全部楼层
其实吧,我觉得楼主的问题应该属于TD图的炮台制作~但其实跟本没必要做这么复杂吧~
因为炮台升级以后会不再需要其它升级,所以只要给替换的单位不同线路的升级技能就可以了……
回复

使用道具 举报

发表于 2008-3-19 17:25:21 | 显示全部楼层
才怪~~难道你的地图上只造一个塔?~~
回复

使用道具 举报

发表于 2008-3-19 17:39:57 | 显示全部楼层
好吧,我承认我还没看懂楼主的意思……
如果是升级,比如A可以升到B、C、D,B可以升到D、E……相对的并不会有什么冲突吧?
回复

使用道具 举报

发表于 2008-3-19 17:42:57 | 显示全部楼层
没冲突才怪~~我不是说了嘛~~难道你只造一个塔的?~~

地图上造了2个A怎么办~~
回复

使用道具 举报

发表于 2008-3-19 17:48:51 | 显示全部楼层
--,问题就是这个~不知道楼主的意思是限制一条线路还是限制一个科技~因为如果TD图是用替换的方式改变单位的话,注意,是单位哦,那么只要添加和删除单位用以升级的技能就可以了!好吧,我还是没明白~~
回复

使用道具 举报

发表于 2008-3-19 17:50:32 | 显示全部楼层
没明白还跟我扯那么多废话~~

还跟我说注意哦哦哦哦~~

你到现在连我的演示要做些什么都看不懂~~还自顾自说~~还替换单位~~升级个塔要用替换个头的单位啊~~
回复

使用道具 举报

发表于 2008-3-19 17:53:41 | 显示全部楼层
呜,我知道错了~好吧~我还是没懂,我也看不懂JASS~吃饭去了……今天估计又要交水费了,唉
回复

使用道具 举报

发表于 2008-3-19 18:37:42 | 显示全部楼层
这楼主的意思不是很明显了么~~2选1的建筑升级方向或者科技升级方向~~


这里面有哪点涉及了替换单位了?~~升级科技和塔又不是用魔法~~那可是需要时间的~~假设我现在有3个哨塔~~都可以升级为箭塔、炮塔、奥术塔三者之一~~

现在我的要求是每个玩家都只能在哨塔和炮塔之中选择一种方向~~一旦某玩家的第一个塔被升级为箭塔~~他的所有的哨塔都不能选择升级为炮塔了~~

升级是升级~~又不是放个技能一样点了下就好的~~是有进度条的好不好~~你要确保第一个塔选择了箭塔以后其他的塔全部失去升级到炮塔的能力~~而且必须是在开始升级以后就禁用而不是升级完毕后~~因为在这段时间内其他塔如果点了炮塔方向结果就会出现2种塔了~~而且既然有进度条~~那么那次选择路线的升级就是可以取消的~~就像你第一个英雄造了一半取消的话~~又可以在4个英雄中选择一个一样~~所以才要有取消判断~~

而且不是每次取消都退回到2选1状态,而是仅限于第一次,第一次升级彻底完成后其他这种类型的塔都只能选择升级为炮塔而不能变成箭塔了,即使是在升级过程中取消也必须不能退回到2选1状态~~

简单地举例说明~~我有ABC3个哨塔~~都能升级为箭塔、炮塔、奥术塔。现在我想要箭塔和炮塔互斥,而奥术塔可以无关地升级~~那么以下情况都是必须被避免的~~

1]A正在升级成箭塔,但尚未完成时,B却也可以点炮塔升级。(必须的规避方案:在任意一座塔按下左右升级方向的升级按钮后立刻禁用另一种等价塔的升级能力)
2]A点了炮塔升级但并非完成,还在读进度条,其他2座塔没动,这时我反悔想选择箭塔路线,于是取消了炮塔升级,结果发现箭塔的按钮永远地消失了。(必须的规避方案:在左右升级方向的那次升级中按下取消可以恢复到未选择升级方向状态)
3]A升级炮塔完毕,B随即也按下炮塔的升级按钮,但是在读进度时取消,结果却发现箭塔的按钮又回来了。(必须的规避方案:反悔的机会应该限制在第一次左右升级方向的升级中,一旦第一次升级完成,就必须将方向锁定)





以上是塔的建筑升级~~楼主还提到了科技研究~~科技研究和直接的建筑升级最大的区别是~~科技是有科技队列的,你可以预先决定好几个科技是研发顺序~~

假设我现在有建筑A,里面可以研究ABC3项科技,现在想要AB科技互斥,C无关,其中A和B共有3个研发等级,那么必须避免以下情况出现:
1]C正在研发进度中,我在研发队列里追加了A,结果B没有消失,于是我又可以在队列里追加B(必须的规避方案:不能用开始研发来进行判断,而应该用研发的命令被发布来判断)
2]我在研发A,突然后悔了,觉得还是升B好,这时候我取消A却发现B还是没出现(必须的规避方案:捕捉决定研发方向的那一次研究的取消事件,然后回退到2选1状态)
3]我现在A的第一级已经研发完成,所以B按钮已经消失了,这时候我开始研发A的第二级(A有3级),在第二级的研发过程中我突然按了取消,这时候我突然发现,B按钮竟然又冒出来了(必须的规避方案:反悔的机会必须仅限于A或者B的第一次研究,因此必须捕捉研究完成事件,然后将研究方向锁定,使得之后的取消事件不会再使得选择方向退回到2选1)
回复

使用道具 举报

发表于 2008-3-19 19:03:08 | 显示全部楼层
引用第9楼zj54891于2008-03-19 16:12发表的  :
从哨塔 升级到 防御塔 该事件

触发单位是后者吗?


这里有一个特别之处~~

如果你在地图属性设置里选择最新版数据那就是前者~~而选用默认数据就是后者~~

你如果在我的演示里把数据改成最新版~~就会发现那个触发没用了~~
回复

使用道具 举报

发表于 2008-3-19 19:23:27 | 显示全部楼层
如果选用默认数据
取消建筑升级  触发单位是哨塔吧

不知道 对不
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-9 06:15 , Processed in 0.105726 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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