Ejemplo n.º 1
0
        // 判断能否进行正常攻击
        public bool cardNormalAttack(DZPlayer user, stCardAttackMagicUserCmd rev)
        {
            SceneCardItem pAtt = getCardItemByThisID(rev.dwAttThisID);
            SceneCardItem pDef = getCardItemByThisID(rev.dwDefThisID);
            if (pDef == null || pAtt == null)
            {
                return false;
            }
            if (pAtt == pDef)
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  怎么能自己打自己");
                return false;
            }
            if (pAtt.playerSide == pDef.playerSide)
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  普通攻击不能攻击自己的牌");
                return false;
            }
            if (pAtt.isFreeze())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  你自己处于冻结中无法攻击");
                return false;
            }
            if (!pDef.isHero() && !pDef.isAttend())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  你所攻击的对象既不是英雄也不是随从");
                return false;
            }
            if (!pDef.preAttackMe(pAtt, rev))
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  攻击验证失败");
                return false;
            }
            if (!pAtt.hasDamage())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  你都没有攻击力 不能发起攻击");
                return false;
            }
            if (pDef.isSneak())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  普通攻击不能打到潜行单位");
                return false;
            }
            if (!pDef.isSneak()) //被攻击者隐形情况下,嘲讽无效
            {
                if (Ctx.m_instance.m_dataPlayer.m_dzData.m_playerArr[(int)EnDZPlayer.ePlayerEnemy].checkTaunt() && !pDef.hasTaunt())
                {
                    (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("普通攻击失败  你得攻击一个具有嘲讽的随从才行");
                    return false;
                }
            }

            return true;
        }
Ejemplo n.º 2
0
        // 判断能否进行法术攻击
        public bool cardSkillAttack(DZPlayer user, stCardAttackMagicUserCmd rev)
        {
            SceneCardItem pAtt = getCardItemByThisID(rev.dwAttThisID);
            if (pAtt == null)
            {
                return false;
            }
            if (!pAtt.isMagicCard() && !pAtt.isHeroMagicCard())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("释放技能失败  技能拥有者既不是法术 也不是英雄能力");
                return false;
            }
            if (!user.checkMp(pAtt.m_cardTableItem.m_magicConsume))
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg(string.Format("释放技能失败  这个技能需要你有{0}个法力水晶才可以", pAtt.m_cardTableItem.m_magicConsume));
                return false;
            }
            if (pAtt.m_cardTableItem.m_bNeedFaShuTarget > 0 && (rev.dwDefThisID == 0))
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("释放技能失败  这个技能需要你手动选择一个目标");
                return false;
            }
            if (pAtt.isHeroMagicCard() && !pAtt.checkAttackTimes())
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("释放技能失败  英雄能力每回合只能使用一次");
                return false;
            }

            return true;
        }
Ejemplo n.º 3
0
        // 判断能否进行攻击
        public bool cardAttackMagic(DZPlayer user, stCardAttackMagicUserCmd rev)
        {
            if (!isHavePrivilege(user.m_side))
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Tips: [PK] 不是你的回合 你点个毛线");
                return false;
            }

            bool ret = false;
            if (rev.dwMagicType > 0)
            {
                if (rev.bZhanHou)
                {
                    ret = true;
                }
                else
                {
                    ret = cardSkillAttack(user, rev);
                }
            }
            else
            {
                ret = cardNormalAttack(user, rev);
            }

            return ret;
        }
Ejemplo n.º 4
0
 // 英雄卡、随从卡即可以作为攻击者也可以作为被击者,法术卡、技能卡、装备卡只能作为攻击者
 override public void onCardClick(IDispatchObject dispObj)
 {
     if (!m_card.m_sceneDZData.m_gameRunState.isInState(GameRunState.INITCARD))      // 如果处于初始化卡牌阶段
     {
         if (EnDZPlayer.ePlayerSelf != m_card.sceneCardItem.playerSide || CardArea.CARDCELLTYPE_HAND != m_card.sceneCardItem.cardArea)         // 如果点击的不是自己的手牌
         {
             if (m_card.sceneCardItem != null)
             {
                 if (m_card.m_sceneDZData.m_gameOpState.bInOp(EnGameOp.eOpNormalAttack))     // 选择攻击目标
                 {
                     if (m_card.m_sceneDZData.m_gameOpState.canAttackOp(m_card, EnGameOp.eOpNormalAttack))
                     {
                         // 发送攻击指令
                         stCardAttackMagicUserCmd cmd = new stCardAttackMagicUserCmd();
                         cmd.dwAttThisID = m_card.m_sceneDZData.m_gameOpState.getOpCardID();
                         cmd.dwDefThisID = m_card.sceneCardItem.svrCard.qwThisID;
                         UtilMsg.sendMsg(cmd);
                     }
                     else
                     {
                         m_card.behaviorControl.enterAttack();
                     }
                 }
                 else if ((m_card.m_sceneDZData.m_gameOpState.bInOp(EnGameOp.eOpFaShu)))        // 法术攻击
                 {
                     if (m_card.m_sceneDZData.m_gameOpState.canAttackOp(m_card, EnGameOp.eOpFaShu))     // 选择攻击目标
                     {
                         // 必然是有目标的法术攻击
                         // 发送法术攻击消息
                         stCardMoveAndAttackMagicUserCmd cmd = new stCardMoveAndAttackMagicUserCmd();
                         cmd.dwAttThisID = m_card.m_sceneDZData.m_gameOpState.getOpCardID();
                         cmd.dwMagicType = (uint)m_card.m_sceneDZData.m_gameOpState.getOpCardFaShu();
                         cmd.dwDefThisID = m_card.sceneCardItem.svrCard.qwThisID;
                         //m_sceneDZData.m_gameOpState.quitAttackOp(false);
                         UtilMsg.sendMsg(cmd);
                     }
                     else
                     {
                         m_card.behaviorControl.enterAttack();
                     }
                 }
                 else if (m_card.m_sceneDZData.m_gameOpState.bInOp(EnGameOp.eOpZhanHouAttack))      // 战吼攻击
                 {
                     if (m_card.m_sceneDZData.m_gameOpState.canAttackOp(m_card, EnGameOp.eOpZhanHouAttack))     // 选择攻击目标
                     {
                         // 发送攻击指令
                         stCardMoveAndAttackMagicUserCmd cmd = new stCardMoveAndAttackMagicUserCmd();
                         cmd.dwAttThisID = m_card.m_sceneDZData.m_gameOpState.getOpCardID();
                         cmd.dwMagicType = (uint)m_card.m_sceneDZData.m_gameOpState.getOpCardFaShu();
                         cmd.dwDefThisID = m_card.sceneCardItem.svrCard.qwThisID;
                         cmd.dst = new stObjectLocation();
                         cmd.dst.dwLocation = (uint)CardArea.CARDCELLTYPE_COMMON;
                         cmd.dst.y = (ushort)m_card.m_sceneDZData.m_gameOpState.getZhanHouCommonClientIdx();
                         UtilMsg.sendMsg(cmd);
                     }
                     else
                     {
                         m_card.behaviorControl.enterAttack();
                     }
                 }
                 else if (m_card.m_sceneDZData.m_gameOpState.bInOp(EnGameOp.eOpSkillAttackTarget))      // 技能目标攻击
                 {
                     if (m_card.m_sceneDZData.m_gameOpState.canAttackOp(m_card, EnGameOp.eOpSkillAttackTarget))     // 选择攻击目标
                     {
                         // 必然是有目标的法术攻击
                         // 发送法术攻击消息
                         stCardMoveAndAttackMagicUserCmd cmd = new stCardMoveAndAttackMagicUserCmd();
                         cmd.dwAttThisID = m_card.m_sceneDZData.m_gameOpState.getOpCardID();
                         cmd.dwMagicType = (uint)m_card.m_sceneDZData.m_gameOpState.getOpCardFaShu();
                         cmd.dwDefThisID = m_card.sceneCardItem.svrCard.qwThisID;
                         UtilMsg.sendMsg(cmd);
                     }
                 }
                 else        // 默认点击处理都走这里
                 {
                     m_card.behaviorControl.enterAttack();
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
        public bool preAttackMe(SceneCardItem pAtt, stCardAttackMagicUserCmd rev)
        {
            if (pAtt.isDie())
            {
                return false;
            }
            if (!pAtt.isAwake())
            {
                return false;
            }
            if (!pAtt.checkAttackTimes())
            {
                return false;
            }

            return true;
        }
Ejemplo n.º 6
0
        protected bool canSkillAttack(SceneCardBase card, EnGameOp gameOp, bool bZhanHou)
        {
            stCardAttackMagicUserCmd cmd = new stCardAttackMagicUserCmd();
            cmd.dwAttThisID = m_opCard.sceneCardItem.svrCard.qwThisID;
            cmd.dwDefThisID = card.sceneCardItem.svrCard.qwThisID;

            int attackTarget = 0;

            if (bZhanHou)
            {
                cmd.bZhanHou = true;
                attackTarget = m_opCard.sceneCardItem.m_cardTableItem.m_bNeedZhanHouTarget;
                cmd.dwMagicType = (uint)m_opCard.sceneCardItem.m_cardTableItem.m_zhanHou;
            }
            else
            {
                cmd.bZhanHou = false;
                attackTarget = m_opCard.sceneCardItem.m_cardTableItem.m_bNeedFaShuTarget;
                cmd.dwMagicType = (uint)m_opCard.sceneCardItem.m_cardTableItem.m_faShu;
            }

            if (Ctx.m_instance.m_dataPlayer.m_dzData.cardAttackMagic(Ctx.m_instance.m_dataPlayer.m_dzData.m_playerArr[(int)m_opCard.sceneCardItem.playerSide], cmd))
            {
                if (UtilMath.checkAttackState(AttackTarget.ATTACK_TARGET_SHERO, (uint)attackTarget))
                {
                    if (EnDZPlayer.ePlayerSelf == card.sceneCardItem.playerSide)       // 如果是自己
                    {
                        if (CardArea.CARDCELLTYPE_HERO == card.sceneCardItem.cardArea)     // 如果是主角
                        {
                            (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Client 法术攻击验证通过");
                            return true;
                        }
                    }
                }
                if (UtilMath.checkAttackState(AttackTarget.ATTACK_TARGET_SATTEND, (uint)attackTarget))
                {
                    if (EnDZPlayer.ePlayerSelf == card.sceneCardItem.playerSide)       // 如果是自己
                    {
                        if (CardArea.CARDCELLTYPE_COMMON == card.sceneCardItem.cardArea)     // 如果是出牌区
                        {
                            (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Client 法术攻击验证通过");
                            return true;
                        }
                    }
                }
                if (UtilMath.checkAttackState(AttackTarget.ATTACK_TARGET_EHERO, (uint)attackTarget))
                {
                    if (EnDZPlayer.ePlayerEnemy == card.sceneCardItem.playerSide)       // 如果是 enemy
                    {
                        if (CardArea.CARDCELLTYPE_HERO == card.sceneCardItem.cardArea)     // 如果是主角
                        {
                            (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Client 法术攻击验证通过");
                            return true;
                        }
                    }
                }
                if (UtilMath.checkAttackState(AttackTarget.ATTACK_TARGET_EATTEND, (uint)attackTarget))
                {
                    if (EnDZPlayer.ePlayerEnemy == card.sceneCardItem.playerSide)       // 如果是 enemy
                    {
                        if (CardArea.CARDCELLTYPE_COMMON == card.sceneCardItem.cardArea)     // 如果是出牌区
                        {
                            (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Client 法术攻击验证通过");
                            return true;
                        }
                    }
                }
            }

            return false;
        }
Ejemplo n.º 7
0
        protected bool canNormalAttack(SceneCardBase card, EnGameOp gameOp)
        {
            //if (m_opCard.sceneCardItem.m_playerSide != card.sceneCardItem.m_playerSide && !UtilMath.checkState(StateID.CARD_STATE_SLEEP, card.sceneCardItem.m_svrCard.state))
            //{
            //    return true;
            //}

            //return false;
            bool ret = false;
            stCardAttackMagicUserCmd cmd = new stCardAttackMagicUserCmd();
            cmd.dwAttThisID = m_opCard.sceneCardItem.svrCard.qwThisID;
            cmd.dwDefThisID = card.sceneCardItem.svrCard.qwThisID;
            cmd.dwMagicType = (uint)m_opCard.sceneCardItem.m_cardTableItem.m_faShu;
            ret = Ctx.m_instance.m_dataPlayer.m_dzData.cardAttackMagic(Ctx.m_instance.m_dataPlayer.m_dzData.m_playerArr[(int)m_opCard.sceneCardItem.playerSide], cmd);

            if(ret)
            {
                (Ctx.m_instance.m_uiMgr.getForm(UIFormID.eUIChat) as IUIChat).outMsg("Client 普通攻击验证通过");
            }

            return ret;
        }