添加休眠、流放机制(Dormant, Outcast)

休眠:双方玩家都无法触及。
流放:在手牌中的最左或最右侧使用时触发的额外效果。

1. silverfish_HB.cs

getMinions
在 silverfish_HB.cs 的 getMinions 函数加入对 dormant 数据的读取

m.dormant = entitiy.GetTag(GAME_TAG.DORMANT);
if (m.dormant > 0)
{
    m.untouchable = true;
    bool flag = false;
    foreach (var en in entitiy.AttachedCards)
    {
        if (en.Id == "BT_737e")
        {
            m.dormant = en.GetTag(GAME_TAG.SCORE_VALUE_1) - en.GetTag(GAME_TAG.SCORE_VALUE_2);
            flag = true;
            break;
        }
    }
    if (!flag) Helpfunctions.Instance.ErrorLog("未能读取到休眠信息");
}

2.SimTemplate.cs

public virtual void onOutcast(Playfield p, bool own)
{
    return;
}
public virtual void onOutcast(Playfield p, Minion m)
{
    return;
}
public virtual void onDormantEndsTrigger(Playfield p, Minion m)
{
    return;
}

这里解释一下,第一个 onOutcast 代表法术牌的流放事件
第二个 onOutcast 代表随从牌的流放事件,类似于战吼
onDormantEndsTrigger 指代随从唤醒事件。

3. Playfield.cs

搜索代码

public void playACard(Handmanager.Handcard hc, Minion target, int position, int choice, int penality)

函数下搜索

c.sim_card.onCardPlay(this, true, target, choice);

在这一行下添加

//position从1开始,可以自行测试
if (hc.position == 1 || hc.position == this.owncards.Count)
{
    c.sim_card.onOutcast(this, true);
}

搜索代码

public void placeAmobSomewhere(Handmanager.Handcard hc, int choice, int zonepos)

函数下搜索

public void placeAmobSomewhere(Handmanager.Handcard hc, int choice, int zonepos)

在这一行下添加

if (hc.position == 1 || hc.position == this.owncards.Count)
{
    m.handcard.card.sim_card.onOutcast(this, m);
}

函数下搜索

public void triggerStartTurn(bool ownturn)

函数下搜索

m.updateReadyness();

在这一行下添加

if (m.dormant > 0 && ownturn == m.own)
{
    m.dormant--;
    if (m.dormant == 0)
    {
        m.handcard.card.sim_card.onDormantEndsTrigger(this, m);
    }
}

到此修改结束,如果有卡要休眠则使用public override void onDormantEndsTrigger函数

例:
Sim_BT_004.cs

namespace HREngine.Bots
{
    class Sim_BT_004 : SimTemplate //* 被禁锢的眼魔 Imprisoned Observer
    {
        //<b>Dormant</b> for 2 turns.When this awakens,deal 2 damage to allenemy minions.
        //<b>休眠</b>两回合。唤醒时,对所有敌方随从造成2点伤害。
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            p.allMinionOfASideGetDamage(!m.own, 2);
        }

    }
}

Sim_BT_009.cs

namespace HREngine.Bots
{
    class Sim_BT_009 : SimTemplate //* 被禁锢的阳鳃鱼人 Imprisoned Sungill
    {
        //<b>Dormant</b> for 2 turns.When this awakens, summon two 1/1Murlocs.
        //<b>休眠</b>两回合。唤醒时,召唤两个1/1的鱼人。
        CardDB.Card kid = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.BT_009t);
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            p.callKid(kid, m.zonepos, m.own);
            p.callKid(kid, m.zonepos + 1, m.own);
        }

    }
}

Sim_BT_121.cs

namespace HREngine.Bots
{
    class Sim_BT_121 : SimTemplate //* 被禁锢的甘尔葛 Imprisoned Gan'arg
    {
        //<b>Dormant</b> for 2 turns.When this awakens,equip a 3/2 Axe.
        //<b>休眠</b>两回合。唤醒时,装备一把3/2的斧子。
        CardDB.Card weapon = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_106);
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            p.equipWeapon(weapon, m.own);
        }

    }
}

Sim_BT_127.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace HREngine.Bots
{
    class Sim_BT_127 : SimTemplate //* 被禁锢的萨特 Imprisoned Satyr
    {
        //[x]<b>Dormant</b> for 2 turns.When this awakens, reducethe Cost of a random minionin your hand by (5).
        //<b>休眠</b>两回合。唤醒时,使你手牌中的随机一张随从牌的法力值消耗减少(5)点。
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            if (m.own)
            {
                foreach (Handmanager.Handcard hc in p.owncards)
                {
                    hc.manacost = Math.Max(0, hc.manacost - 5);
                }
            }
        }

    }
}

Sim_BT_211.cs

namespace HREngine.Bots
{
    class Sim_BT_211 : SimTemplate //* 被禁锢的魔喉 Imprisoned Felmaw
    {
        //[x]<b>Dormant</b> for 2 turns.When this awakens,  attack a random enemy.
        //<b>休眠</b>两回合。唤醒时,随机攻击一个敌人。
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            Minion sm = p.searchRandomMinion(m.own ? p.enemyMinions : p.ownMinions, searchmode.searchHighestAttack);
            if (sm == null) sm = (m.own) ? p.enemyHero : p.ownHero;
            p.minionAttacksMinion(m, sm);
        }

    }
}

Sim_BT_305.cs

namespace HREngine.Bots
{
    class Sim_BT_305 : SimTemplate //* 被禁锢的拾荒小鬼 Imprisoned Scrap Imp
    {
        //<b>Dormant</b> for 2 turns.When this awakens,give all minions in your hand +2/+2.
        //<b>休眠</b>两回合。唤醒时,使你手牌中的所有随从牌获得+2/+2。
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            if (m.own)
            {
                foreach (Handmanager.Handcard hc in p.owncards)
                {
                    hc.addattack += 2;
                    hc.addHp += 2;
                }
            }
        }

    }
}

Sim_BT_934.cs

namespace HREngine.Bots
{
    class Sim_BT_934 : SimTemplate //* 被禁锢的安塔恩 Imprisoned Antaen
    {
        //[x]<b>Dormant</b> for 2 turns.When this awakens, deal10 damage randomly splitamong all enemies.
        //<b>休眠</b>两回合。唤醒时,造成10点伤害,随机分配到所有敌人身上。
        public override void onDormantEndsTrigger(Playfield p, Minion m)
        {
            p.allCharsOfASideGetRandomDamage(!m.own, 10);
        }
    }
}

转载来源http://wjh-blog.test.upcdn.net/blog/index.php/archives/18/
仅供个人研究学习之用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容