Пример #1
0
void MoDao::onCancelClicked()
{
    Role::onCancelClicked();
    switch(state)
    {
//魔弹融合(回合内)
    case 801:
//魔爆冲击
    case 803:
//毁灭风暴
    case 804:
        normal();
        break;
//魔弹融合(回合外)
    case 802:
        moDaned(moDanNextID,sourceID,moDanHarm);
        break;
    }
}
Пример #2
0
void Role::decipher(QString command)
{
    QStringList arg=command.split(';');
    QStringList cardIDList;
    int targetID,targetArea;
    int sourceID,sourceArea;
    int cardID;
    int howMany;
    int hitRate;
    int i;
    int team,gem,crystal;

    Card*card;
    Player*player;
    Team *red=dataInterface->getRedTeam();
    Team *blue=dataInterface->getBlueTeam();
    QList<Card*> cards;
    QString msg;
    QString flag;
    QString cardName;
    QList<Player*>playerList=dataInterface->getPlayerList();
    ShowArea* showArea=gui->getShowArea();

    switch (arg[0].toInt())
    {
//回合开始
    case 3:
        targetID=arg[1].toInt();
        gui->logAppend("-----------------------------------");
        gui->logAppend(playerList[targetID]->getName()+tr("回合开始"));
        playerArea->setCurrentPlayerID(targetID);
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else{
            isMyTurn=true;
            onceUsed=false;
            start=false;
            usedAttack=usedMagic=usedSpecial=false;
        }
        break;
//应战询问
    case 5:
        hitRate=arg[1].toInt();
        cardID=arg[2].toInt();
        targetID=arg[3].toInt();
        sourceID=arg[4].toInt();
        card=dataInterface->getCard(cardID);

        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            msg=playerList[sourceID]->getName()+tr("对")+tr("你")+tr("使用了")+card->getName();
            if (hitRate==2)
                return;

            if(hitRate==1)
                msg+=tr(",该攻击无法应战");

            sourcePlayerID=sourceID;
            gui->reset();
            tipArea->setMsg(msg);
            attacked(card->getElement(),hitRate);
        }
        break;
//弃牌询问
    case 7:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        msg=playerList[targetID]->getName()+tr("需要弃")+arg[2]+tr("张手牌");
        if(flag=="y")
            gui->logAppend(msg+tr("(明弃)"));
        else
            gui->logAppend(msg+tr("(暗弃)"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            gui->reset();
            drop(howMany);
            tipArea->setMsg(tr("你需要弃")+arg[2]+tr("张手牌"));
        }
        break;
//摸牌
    case 9:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        gui->logAppend(playerList[targetID]->getName()+tr("摸取")+arg[2]+tr("张手牌"));

        if(targetID==myID)
        {
            cardIDList=arg[3].split(',');
            for(i=0;i<howMany;i++)
            {
                cardID=cardIDList[i].toInt();
                card=dataInterface->getCard(cardID);
                dataInterface->addHandCard(card);
            }
        }
        break;
//牌堆重洗
    case 10:
        gui->logAppend(tr("牌堆已重洗"));
        break;
//士气改变
    case 11:
        team=arg[1].toInt();
        howMany=arg[2].toInt();
        if(team)
        {
            red->setMorale(howMany);
            teamArea->update();
        }
        else
        {
            blue->setMorale(howMany);
            teamArea->update();
        }

        break;
//游戏结束
    case 12:
        team=arg[1].toInt();
        msg=tr("游戏结束,");
        if(team)
            msg+=tr("红队获胜");
        else
            msg+=tr("蓝队获胜");
        gui->logAppend(msg);
        tipArea->setMsg(msg);
        break;
//弃牌公告
    case 13:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        msg=playerList[targetID]->getName()+tr("丢弃了")+arg[2]+tr("张手牌");
        if(flag=="y")
        {
            cardIDList=arg[4].split(',');
            msg+=":";
            cards.clear();
            for(i=0;i<howMany;i++)
            {
                cardID=cardIDList[i].toInt();
                card=dataInterface->getCard(cardID);
                msg+=card->getName()+"-"+card->getProperty()+" ";
                cards<<card;
                dataInterface->removeHandCard(card);
            }
            showArea->showCards(cards);
        }
        gui->logAppend(msg);
        break;
//命中公告
    case 14:
        flag=arg[1];
        targetID=arg[3].toInt();
        sourceID=arg[4].toInt();
        if(flag=="1")
            msg=playerList[sourceID]->getName()+tr("未命中")+playerList[targetID]->getName();
        else
            msg=playerList[sourceID]->getName()+tr("命中")+playerList[targetID]->getName();
        gui->logAppend(msg);
        break;
//星石改变
    case 15:
        team=arg[1].toInt();
        gem=arg[2].toInt();
        crystal=arg[3].toInt();
        if(team)
        {
            red->setGem(gem);
            red->setCrystal(crystal);
            teamArea->update();
        }
        else
        {
            blue->setGem(gem);
            blue->setCrystal(crystal);
            teamArea->update();
        }
        break;
//星杯改变
    case 17:
        team=arg[1].toInt();
        howMany=arg[2].toInt();
        if(team)
        {
            red->setGrail(howMany);
            teamArea->update();
        }
        else
        {
            blue->setGrail(howMany);
            teamArea->update();
        }
        break;
//能量改变
    case 18:
        targetID=arg[1].toInt();
        gem=arg[2].toInt();
        crystal=arg[3].toInt();
        player=playerList.at(targetID);
        player->setGem(gem);
        player->setCrystal(crystal);
        playerArea->update();
        break;
//移牌通告
    case 19:
        howMany=arg[1].toInt();
        cardIDList=arg[2].split(",");
        sourceID=arg[3].toInt();
        sourceArea=arg[4].toInt();
        targetID=arg[5].toInt();
        targetArea=arg[6].toInt();
        if(sourceID!=-1)
        {
            switch(sourceArea)
            {
            case 4:
                player=playerList.at(sourceID);
                player->changeHandCardNum(-howMany);
                break;
            case 5:
                cardID=cardIDList[0].toInt();
                card=dataInterface->getCard(cardID);
                playerList[sourceID]->removeStatus(card);
                break;
            }
        }
        if(targetID!=-1)
        {
            switch(targetArea)
            {
            case 4:
                player=playerList.at(targetID);
                player->changeHandCardNum(howMany);
                break;
            case 5:
                cardID=cardIDList[0].toInt();
                card=dataInterface->getCard(cardID);
                cardName=card->getName();
                if(cardName==tr("中毒"))
                    playerList[targetID]->addStatus(0,card);
                if(cardName==tr("虚弱"))
                    playerList[targetID]->addStatus(1,card);
                if(cardName==tr("圣盾")||card->getSpecialityList().contains(tr("天使之墙")))
                    playerList[targetID]->addStatus(2,card);
                if(card->getType()=="attack"&&card->getProperty()=="幻")
                    playerList[targetID]->addStatus(3,card);
                break;
            }
        }
        playerArea->update();
        break;
//物伤通告
    case 20:
        targetID=arg[1].toInt();
        sourceID=arg[3].toInt();
        gui->logAppend(playerList[sourceID]->getName()+tr("对")+playerList[targetID]->getName()+tr("造成了")+arg[2]+tr("点攻击伤害"));
        break;
//法术通告
    case 21:
        targetID=arg[1].toInt();
        sourceID=arg[3].toInt();
        gui->logAppend(playerList[sourceID]->getName()+tr("对")+playerList[targetID]->getName()+tr("使用的")+arg[4]+tr("造成了")+arg[2]+tr("点法术伤害"));
        break;
//虚弱询问
    case 22:
        targetID=arg[1].toInt();
        gui->logAppend(tr("等待")+playerList[targetID]->getName()+tr("虚弱响应"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            gui->reset();
            state=7;
            decisionArea->enable(0);
            decisionArea->enable(1);
            tipArea->setMsg(tr("你被虚弱了,选是跳过行动阶段,选否摸")+arg[2]+tr("张牌"));
        }
        break;
//虚弱结果
    case 24:
        targetID=arg[1].toInt();
        if(arg[2]=="0")
            gui->logAppend(playerList[targetID]->getName()+tr("选择跳过行动阶段"));
        else
            gui->logAppend(playerList[targetID]->getName()+tr("选择摸")+arg[3]+tr("张牌挣脱"));
        break;
//圣盾移除通告
    case 25:
        targetID=arg[1].toInt();
        gui->logAppend(playerList[targetID]->getName()+tr("的圣盾被移除"));
        break;
//魔弹询问
    case 26:
        int nextID;
        targetID=arg[1].toInt();
        sourceID=arg[2].toInt();
        howMany=arg[3].toInt();
        nextID=arg[4].toInt();
        gui->logAppend(playerList[sourceID]->getName()+tr("对")+playerList[targetID]->getName()+tr("使用了魔弹,目前伤害为:")+arg[3]+tr("点"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            msg=playerList[sourceID]->getName()+tr("对")+tr("你")+tr("使用了魔弹,目前伤害为:")+arg[3]+tr("点");
            gui->reset();
            tipArea->setMsg(msg);
            moDaned(nextID);
        }
        break;
//卡牌通告
    case 28:
        cardID=arg[1].toInt();
        targetID=arg[2].toInt();
        sourceID=arg[3].toInt();
        flag=arg[4];
        card=dataInterface->getCard(cardID);
        cardName=card->getName();
        if(flag=="1"){
            cards.clear();
            cards<<card;
            showArea->showCards(cards);
        }
        if(card->getElement()!="light")
            gui->logAppend(playerList[sourceID]->getName()+tr("对")+playerList[targetID]->getName()+tr("使用了")+cardName);
        else
            gui->logAppend(playerList[sourceID]->getName()+tr("使用圣光抵御"));
        break;
//行动阶段 flag 0-所有行动,1-攻击行动,2-法术行动,3-特殊行动,4-攻击或法术行动
    case 29:
        targetID=arg[1].toInt();
        flag=arg[2];
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
            actionFlag=-1;
        }
        else
        {
            gui->setEnable(1);
            if(flag=="0")
                normal();
            else if(flag=="1")
                attackAction();
            else if(flag=="2")
                magicAction();
            else if(flag=="4")
                attackOrMagic();
            if(arg[3]=="1")
                decisionArea->enable(3);
        }
        break;
//无法行动公告
    case 31:
        targetID=arg[1].toInt();
        msg=playerList[targetID]->getName()+tr("宣告无法行动");
        gui->logAppend(msg);
        break;
//治疗改变
    case 32:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        playerList[targetID]->setCrossNum(howMany);
        break;
//治疗询问
    case 33:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        gui->reset();
        if(targetID==myID)
            cure(playerList[myID]->getCrossNum(),howMany,flag.toInt());
        break;
//技能响应询问
    case 35:
        targetID=arg[1].toInt();
        flag=arg[2];
        msg=tr("等待")+playerList[targetID]->getName()+flag+tr("响应");
        gui->logAppend(msg);
        gui->reset();
        gui->setEnable(0);
        break;
//信息通告
    case 38:
        gui->logAppend(arg[1]);
        break;
//角色形态转换通知
    case 39:
        targetID=arg[1].toInt();
        flag=arg[2];
        if(flag=="0")
        {
            playerList[targetID]->setTap(0);
            msg=playerList[targetID]->getName()+tr("返回")+arg[3];
        }
        else
        {
            playerList[targetID]->setTap(1);
            msg=playerList[targetID]->getName()+tr("进入")+arg[3];
        }
        playerArea->update();
        gui->logAppend(msg);
        gui->reset();
        gui->setEnable(0);
        break;
//手牌上限变更通知
    case 40:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        playerList[targetID]->setHandCardsMax(howMany);
        playerArea->update();
        break;
//获得手牌通告
    case 41:
        targetID=arg[1].toInt();
        flag=arg[2];
        howMany=arg[3].toInt();
        gui->logAppend(playerList[targetID]->getName()+tr("获得")+arg[3]+tr("张手牌"));

        if(targetID==myID)
        {
            cardIDList=arg[4].split(',');
            for(i=0;i<howMany;i++)
            {
                cardID=cardIDList[i].toInt();
                card=dataInterface->getCard(cardID);
                dataInterface->addHandCard(card);
            }
        }
        break;
//额外行动询问
    case 42:
        targetID=arg[1].toInt();
        gui->logAppend(tr("等待")+playerList[targetID]->getName()+tr("额外行动响应"));
        if(targetID==myID)
        {
            gui->setEnable(1);
            addtionalAction();
        }
        else
            gui->setEnable(0);
        break;
//专属变更
    case 43:
        targetID=arg[1].toInt();
        msg=arg[2];
        playerList.at(targetID)->setSpecial(msg.toInt(),arg[3].toInt());
        playerArea->update();
        break;
//标记变更
    case 45:
        targetID=arg[1].toInt();
        flag=arg[2];
        howMany=arg[3].toInt();
        playerList.at(targetID)->setToken(flag.toInt(),howMany);
        playerArea->update();
        break;
//天使祝福
    case 750:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        msg=tr("等待")+playerList[targetID]->getName()+tr("天使祝福(给牌)响应");
        gui->logAppend(msg);
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            TianShiZhuFu(howMany);
        }
        break;
//魔爆冲击(弃牌)
    case 850:
        targetID=arg[1].toInt();
        msg=tr("等待")+playerList[targetID]->getName()+tr("魔爆冲击(弃牌)响应");
        gui->logAppend(msg);
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            MoBaoChongJi();
        }
        break;

    }
}