添加超殺機(jī)制(Overkill)

1.超殺機(jī)制的識(shí)別

1.silverfish_HB.cs

getMinions()方法下:

        m.Overkill= (entitiy.GetTag(GAME_TAG.OVERKILL) == 0) ? false : true;

在if (TritonHs.DoWeHaveWeapon)下添加

                ownWeapon.Overkill = (weapon.GetTag(GAME_TAG.OVERKILL) == 1) ? true : false;

同理在if (TritonHs.DoesEnemyHasWeapon)下添加

                enemyWeapon.Overkill = (weapon.GetTag(GAME_TAG.OVERKILL) == 1) ? true : false;

2.Minion.cs

Minion類中添加Overkill屬性:

        private bool _overkill = false;
        public bool Overkill { get => _overkill; set => _overkill = value; }

public Minion(Minion m)方法下:

            this.Overkill = m.Overkill;// 超殺

public void setMinionToMinion(Minion m)方法下:

            this.Overkill = m.Overkill;// 超殺

public void becomeSilence(Playfield p)方法:

            Overkill = false;

3.CardDB.cs

同Minion.cs

如果編譯失敗,屬性初始值應(yīng)寫為

            private bool _overkill = false;
            /// <summary>
            /// 超殺
            /// </summary>
            public bool Overkill
            {
                get { return _overkill; }
                set { _overkill = value; }
            }

構(gòu)造函數(shù)中讀取carddefs的地方:

                            case 923: c.Overkill = value == 1; break;//overkill

2.虛函數(shù)的增加

SimTemplate.cs:

        /// <summary>
        /// 超殺效果(武器)
        /// </summary>
        /// <param name="p">場(chǎng)面</param>
        /// <param name="w">武器</param>
        public virtual void OnOverkill(Playfield p, Weapon w)
        {
            return;
        }

        /// <summary>
        /// 超殺效果(隨從)
        /// </summary>
        /// <param name="p">場(chǎng)面</param>
        /// <param name="m">具有超殺效果的隨從</param>
        public virtual void OnOverkill(Playfield p, Minion m)
        {
            return;
        }

3.超殺機(jī)制的實(shí)現(xiàn)

Playfiled.cs:

在minionAttacksMinion方法下:
在//defender gets dmg下添加

            bool defenderHasDivineshild = defender.divineshild;//攻擊前,被攻擊隨從是否具有圣盾

            if (defender.isHero)//target is enemy hero
            {
                doDmgTriggers();
                return;
            }

下添加

            #region 隨從或武器攻擊后觸發(fā)超殺效果
            if (oldHp < attackerAngr && !defenderHasDivineshild)
            {
                if (!attacker.isHero)
                {
                    attacker.handcard.card.sim_card.OnOverkill(this, attacker); 
                }
                else
                {
                    Weapon weapon = attacker.own ? this.ownWeapon : this.enemyWeapon;
                    weapon.card.sim_card.OnOverkill(this, weapon);
                }
            }
            #endregion

解釋一下定義defenderHasDivineshild的原因:超殺在攻擊傷害結(jié)算之后進(jìn)行結(jié)算,此時(shí)原有圣盾效果已經(jīng)失效,所以必須在攻擊前定義

轉(zhuǎn)載來(lái)源https://www.cnblogs.com/dch0319/p/13544577.html
僅供個(gè)人研究學(xué)習(xí)之用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容