不科学的小默默 发表于 2015-12-17 15:08:20

【浅谈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或者用触发——计算治疗量,最后作为生命值补偿。

另:附上简易的护盾测试。





一窍不开 发表于 2015-12-17 15:28:04

不愧是专业的RPG作者,像我绝对想不出来AI还能这么用,赞一个!

郁闷之神 发表于 2015-12-17 18:41:37

强悍如斯……{:167:}

这只话唠菜鹰是路人 发表于 2015-12-17 21:47:31

阿默的贴我都进来顶一下

VicViper 发表于 2015-12-17 22:21:41

哇,护盾效果!卡拉之光遍布寰宇!{:162:}

Howerds 发表于 2015-12-18 17:03:32

赞赞赞!!!(看来不用我写了好开心)

酸甜苦辣咸 发表于 2015-12-19 07:20:38

我来顶一下。。。

Redapple 发表于 2015-12-21 13:04:26

我也来顶一下……
页: [1]
查看完整版本: 【浅谈AI第二期】外置生命值,吸收伤害的护盾技能