【浅谈AI第二期】外置生命值,吸收伤害的护盾技能
本帖最后由 不科学的小默默 于 2015-12-18 19:52 编辑第一期是生命锁链效果
所谓的护盾,指的是外置生命值,严格意义上来讲护盾不属于生命值的一部分,但是却能够为单位抵挡伤害。护盾通常都不是持续存在的,伴随着一两个技能而产生,在被攻击的时候抵挡大部分伤害,然后护盾就会消失。是保命技能中最重要的几个之一。那么今天我们就来谈一谈帝国战役里实现护盾技能的方法。
假设Taka的护盾技能可以在9秒内增加自己300的护盾,那么,这个技能的效果通常是这样的:
1.发动的一瞬间,在目前的生命值上临时增加额外的300生命值。
2.护盾持续时间内,如果自己损失生命值超过300,意味着护盾被击破。
3.9秒持续时间结束后,若护盾没有被击破(假设敌人造成了238点伤害),那么强制移除剩余的护盾(那么就会扣除62点生命值)。
这部分通过触发没办法实现,但是通过AI的话还是可以实现的。
;=========================================定义变量,方便理解和修改===============================================
(defconst truehp 101)
(defconst sufhp 102)
(defconst hpdif 103)
;===================================数字AI,输入“111”增加电脑一点木材==========================================
(defrule
(taunt-detected 1 111)
=>
(acknowledge-taunt 1 111)
(cc-add-resource wood 1)
)
;==============当你没输入“111”时,电脑无时无刻不在读取你的单位生命值,也就是使用护盾之前的生命值===============
(defrule
(food-amount == 0)
(wood-amount == 0)
(stone-amount == 0)
=>
(up-set-target-by-id c: 0)
(up-get-object-data 10 truehp)
)
;用触发检测到木材大于等于1时,说明玩家使用了护盾,这个时候增加一点石头,然后移除一点木材
;============使用护盾后,电脑会在护盾消失时计算你的剩余护盾的血量,利用总生命值减去之前的生命值来计算==============
(defrule
(stone-amount > 0)
=>
(up-set-target-by-id c: 0)
(up-get-object-data 10 sufhp)
(up-modify-goal sufhp g:- truehp)
(up-modify-goal hpdif g:= sufhp)
)
;护盾持续时间结束后,用触发移除一点石头,然后增加一点食物
;========当你的剩余护盾的血量小于0时,说明护盾已经被击破,这个时候不需要做任何动作,只需要把差值重置即可=========
(defrule
(food-amount > 0)
(stone-amount == 0);
(up-compare-goal hpdif <= 0)
=>
(up-modify-goal hpdif c:= 0)
)
;========当你的剩余护盾的血量大于0时,说明护盾没有被击破,这个时候要对单位生命值进行补偿,减去剩余的护盾=========
;先把剩余的护盾数转为电脑的黄金数
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 256)
=>
(cc-add-resource gold 256)
(up-modify-goal hpdif c:- 256)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 128)
=>
(cc-add-resource gold 128)
(up-modify-goal hpdif c:- 128)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 64)
=>
(cc-add-resource gold 64)
(up-modify-goal hpdif c:- 64)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 32)
=>
(cc-add-resource gold 32)
(up-modify-goal hpdif c:- 32)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 16)
=>
(cc-add-resource gold 16)
(up-modify-goal hpdif c:- 16)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 8)
=>
(cc-add-resource gold 8)
(up-modify-goal hpdif c:- 8)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 4)
=>
(cc-add-resource gold 4)
(up-modify-goal hpdif c:- 4)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 2)
=>
(cc-add-resource gold 2)
(up-modify-goal hpdif c:- 2)
)
(defrule
(food-amount > 0)
(up-compare-goal hpdif >= 1)
=>
(cc-add-resource gold 1)
(up-modify-goal hpdif c:- 1)
)
这个时候,再用之前说过的2进制法进贡掉电脑的黄金数,同时扣除单位的生命值。
触发循环开启
条件:堆积黄金:……、512、256、128、64、32、16、8、4、2、1
效果:减损单位生命值:……、512、256、128、64、32、16、8、4、2、1
效果:进贡黄金:……、512、256、128、64、32、16、8、4、2、1
最后,别忘了开启另外一个触发,在几秒后把电脑的食物数量还原为0,如此便可以重复使用护盾。
这样,一个创新又实用的护盾技能就做好了。不过仍需注意,在此期间内,单位所收到的任何治疗后超过原有生命值的部分都会失效,比如你的生命值为119/450,增加了一个护盾到419/450,然后用僧侣治疗到450/450,那么技能结束后还是119/450的生命值。所以当你使用僧侣或回血技能时,记得写个AI或者用触发——计算治疗量,最后作为生命值补偿。
另:附上简易的护盾测试。
不愧是专业的RPG作者,像我绝对想不出来AI还能这么用,赞一个! 强悍如斯……{:167:} 阿默的贴我都进来顶一下 哇,护盾效果!卡拉之光遍布寰宇!{:162:} 赞赞赞!!!(看来不用我写了好开心) 我来顶一下。。。 我也来顶一下……
页:
[1]