// 判断能否进行法术攻击 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); }
// 判断能否进行攻击 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); }
// 判断能否进行正常攻击 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); }
public bool preAttackMe(SceneCardItem pAtt, stCardAttackMagicUserCmd rev) { if (pAtt.isDie()) { return(false); } if (!pAtt.isAwake()) { return(false); } if (!pAtt.checkAttackTimes()) { return(false); } return(true); }
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); }
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); }
// 英雄卡、随从卡即可以作为攻击者也可以作为被击者,法术卡、技能卡、装备卡只能作为攻击者 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(); } } } } }