Example #1
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;

    }
}
Example #2
0
void Role::decipher(QString command)
{
    this->command=command;
    QStringList arg=command.split(';');
    QStringList cardIDList;
    int targetID,targetArea;
    int sourceArea;
    int cardID;
    int hitRate;
    int i,howMany;
    int team,gem,crystal;
    int dir,show;

    Card*card;
    Player*player;    
    QList<Card*> cards;
    QString msg;
    QString flag;
    QString cardName;


    switch (arg[0].toInt())
    {
//回合开始
    case 3:
        targetID=arg[1].toInt();
        gui->logAppend("-----------------------------------");
        gui->logAppend(playerList[targetID]->getRoleName()+QStringLiteral("回合开始"));
        playerArea->setCurrentPlayerID(targetID);

        if(targetID==dataInterface->getFirstPlayerID())
            teamArea->addRoundBy1();
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else{
            myRole->turnBegin();
        }
        break;
//应战询问
    case 5:
        hitRate=arg[1].toInt();
        cardID=arg[2].toInt();
        targetID=arg[3].toInt();
        sourceID=arg[4].toInt();
        card=dataInterface->getCard(cardID);
        QSound::play("sound/Attack.wav");

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

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

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

        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(QStringLiteral("牌堆已重洗"));
        teamArea->setLeftCardNum(arg[1].toInt());
        teamArea->setDroppedCardNum(0);
        QSound::play("sound/Shuffle.wav");
        break;
//士气改变
    case 11:
        team=arg[1].toInt();
        howMany=arg[2].toInt();
        if(team)
        {
            red->setMorale(howMany);
            teamArea->update();
        }
        else
        {
            blue->setMorale(howMany);
            teamArea->update();
        }
        QSound::play("sound/Morale.wav");
        break;
//游戏结束
    case 12:
        team=arg[1].toInt();    
        tipArea->win(team);
        QSound::play("sound/KO.wav");
        break;
//弃牌公告
    case 13:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        msg=playerList[targetID]->getRoleName()+QStringLiteral("丢弃了")+arg[2]+QStringLiteral("张手牌");
        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;
            }
            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]->getRoleName()+QStringLiteral("未命中")+playerList[targetID]->getRoleName();
        else
            msg=playerList[sourceID]->getRoleName()+QStringLiteral("命中")+playerList[targetID]->getRoleName();
        gui->logAppend(msg);
        QSound::play("sound/Hit.wav");
        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();
        }
        QSound::play("sound/Stone.wav");
        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]->removeBasicStatus(card);
                break;
            case 6:
                player = playerList.at(sourceID);
                player->changeCoverCardNum(-howMany);

                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==QStringLiteral("中毒"))
                    playerList[targetID]->addBasicStatus(0,card);
                if(cardName==QStringLiteral("虚弱"))
                    playerList[targetID]->addBasicStatus(1,card);
                if(cardName==QStringLiteral("圣盾")||card->getSpecialityList().contains(QStringLiteral("天使之墙")))
                    playerList[targetID]->addBasicStatus(2,card);
                if(card->getType()=="attack"&&card->getProperty()==QStringLiteral("幻"))
                    playerList[targetID]->addBasicStatus(3,card);
                if(card->getSpecialityList().contains(QStringLiteral("威力赐福")))
                    playerList[targetID]->addBasicStatus(4,card);
                if(card->getSpecialityList().contains(QStringLiteral("迅捷赐福")))
                    playerList[targetID]->addBasicStatus(5,card);
                QSound::play("sound/Equip.wav");
                break;
            case 6:
                player=playerList.at(targetID);
                player->changeCoverCardNum(howMany);
                break;
            }
        }
        if(sourceID==-1){
            switch(sourceArea)
            {
            case 1:
                teamArea->changeLeftCardNum(-howMany);
                break;
            case 2:

            case 3:
                teamArea->changeDroppedCardNum(-howMany);
                break;
            }
            teamArea->update();
        }
        if(targetID==-1)
            if(targetArea==2||targetArea==3){
                teamArea->changeDroppedCardNum(howMany);
                teamArea->update();
            }

        playerArea->update();
        break;
//物伤通告
    case 20:
        targetID=arg[1].toInt();
        sourceID=arg[3].toInt();
        gui->logAppend(playerList[sourceID]->getRoleName()+QStringLiteral("对")+playerList[targetID]->getRoleName()+QStringLiteral("造成了")+arg[2]+QStringLiteral("点攻击伤害"));
        break;
//法术通告
    case 21:
        targetID=arg[1].toInt();
        sourceID=arg[3].toInt();
        gui->logAppend(playerList[sourceID]->getRoleName()+QStringLiteral("对")+playerList[targetID]->getRoleName()+QStringLiteral("使用的")+arg[4]+QStringLiteral("造成了")+arg[2]+QStringLiteral("点法术伤害"));
        break;
//虚弱询问
    case 22:
        targetID=arg[1].toInt();
        gui->logAppend(QStringLiteral("等待")+playerList[targetID]->getRoleName()+QStringLiteral("虚弱响应"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            gui->reset();
            state=7;
            decisionArea->enable(0);
            decisionArea->enable(1);
            tipArea->setMsg(QStringLiteral("你被虚弱了,【确定】跳过行动阶段,【取消】摸")+arg[2]+QStringLiteral("张牌"));
        }
        break;
//虚弱结果
    case 24:
        targetID=arg[1].toInt();
        if(arg[2]=="0")
            gui->logAppend(playerList[targetID]->getRoleName()+QStringLiteral("选择跳过行动阶段"));
        else
            gui->logAppend(playerList[targetID]->getRoleName()+QStringLiteral("选择摸")+arg[3]+QStringLiteral("张牌挣脱"));
        break;
//圣盾移除通告
    case 25:
        targetID=arg[1].toInt();
        gui->logAppend(playerList[targetID]->getRoleName()+QStringLiteral("的圣盾被移除"));
        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]->getRoleName()+QStringLiteral("对")+playerList[targetID]->getRoleName()+QStringLiteral("使用了魔弹,目前伤害为:")+arg[3]+QStringLiteral("点"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);            
            myRole->moDaned(nextID,sourceID,howMany);
        }
        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]->getRoleName()+QStringLiteral("对")+playerList[targetID]->getRoleName()+QStringLiteral("使用了")+cardName);
        else
            gui->logAppend(playerList[sourceID]->getRoleName()+QStringLiteral("使用圣光抵御"));
        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")
                myRole->normal();
            else if(flag=="1")
                myRole->attackAction();
            else if(flag=="2")
                myRole->magicAction();
            else if(flag=="4")
                myRole->attackOrMagic();
            if(arg[3]=="1")
                decisionArea->enable(3);
        }
        break;
//无法行动公告
    case 31:
        targetID=arg[1].toInt();
        msg=playerList[targetID]->getRoleName()+QStringLiteral("宣告无法行动");
        gui->logAppend(msg);
        break;
//治疗改变
    case 32:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        playerList[targetID]->setCrossNum(howMany);
        playerArea->update();
        QSound::play("sound/Cure.wav");
        break;
//治疗询问
    case 33:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        gui->reset();
        if(targetID==myID)
            myRole->cure(playerList[myID]->getCrossNum(),howMany,flag.toInt(),arg[4].toInt());
        break;
//技能响应询问
    case 35:
        targetID=arg[1].toInt();
        flag=arg[2];
        msg=QStringLiteral("等待")+playerList[targetID]->getRoleName()+flag+QStringLiteral("响应");
        gui->logAppend(msg);
        gui->reset();
        gui->setEnable(0);
        if(targetID==myID)
        {
            gui->setEnable(1);
            myRole->askForSkill(flag);
        }
        else
            gui->setEnable(0);
        break;
//信息通告
    case 38:
        gui->logAppend(arg[1]);
        if(arg[1].contains(QStringLiteral("发动")))
            QSound::play("sound/Skill.wav");
        break;
//角色形态转换通知
    case 39:
        targetID=arg[1].toInt();
        flag=arg[2];
        if(flag=="0")
        {
            playerList[targetID]->setTap(0);
            msg=playerList[targetID]->getRoleName()+QStringLiteral("返回")+arg[3];
        }
        else
        {
            playerList[targetID]->setTap(1);
            msg=playerList[targetID]->getRoleName()+QStringLiteral("进入")+arg[3];
        }
        playerArea->update();
        gui->logAppend(msg);
        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]->getRoleName()+QStringLiteral("获得")+arg[3]+QStringLiteral("张手牌"));

        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(QStringLiteral("等待")+playerList[targetID]->getRoleName()+QStringLiteral("额外行动响应"));
        if(targetID==myID)
        {
            gui->setEnable(1);
            myRole->additionalAction();
        }
        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 48:
                targetID=arg[1].toInt();
                howMany=arg[2].toInt();
                dir = arg[4].toInt();
                show = arg[5].toInt();
                cardIDList=arg[3].split(',');

                if(targetID==myID)
                {

                    for(i=0;i<howMany;i++)
                    {
                        cardID=cardIDList[i].toInt();
                        card=dataInterface->getCard(cardID);
                        if(dir == 0)
                            dataInterface->addCoverCard(card);
                        else
                            dataInterface->removeCoverCard(card);
                    }
                }

                if(dir == 0)
                    gui->logAppend(arg[2]+QStringLiteral("张牌加入玩家") + playerList[targetID]->getRoleName()+QStringLiteral("盖牌区"));
                else
                {
                    if(show == 0)
                        gui->logAppend(QStringLiteral("玩家") + playerList[targetID]->getRoleName() + QStringLiteral("移除") + arg[2] + QStringLiteral("张盖牌"));
                    else
                    {
                        QList<Card*> cards;

                        QString log = QStringLiteral("玩家") + playerList[targetID]->getRoleName() + QStringLiteral("移除") + arg[2] + QStringLiteral("张盖牌:");
                        for(int i = 0;i < howMany;i++)
                        {
                            cards << dataInterface->getCard(cardIDList[i].toInt());
                            log += QStringLiteral("[") + cards.at(i)->getName() + QStringLiteral("]");
                        }
                        gui->logAppend(log);
                        showArea->showCards(cards);


                    }
                }

                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 49:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        flag=arg[3];
        msg=playerList[targetID]->getRoleName()+QStringLiteral("需要弃")+arg[2]+QStringLiteral("张盖牌");
        if(flag=="y")
            gui->logAppend(msg+QStringLiteral("(明弃)"));
        else
            gui->logAppend(msg+QStringLiteral("(暗弃)"));
        if(targetID!=myID)
        {
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            gui->reset();
            dropCover(howMany);
            tipArea->setMsg(QStringLiteral("你需要弃")+arg[2]+QStringLiteral("张盖牌"));
        }
        break;
//天使祝福
    case 750:
        targetID=arg[1].toInt();
        howMany=arg[2].toInt();
        msg=QStringLiteral("等待")+playerList[targetID]->getRoleName()+QStringLiteral("天使祝福(给牌)响应");
        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=QStringLiteral("等待")+playerList[targetID]->getRoleName()+QStringLiteral("魔爆冲击(弃牌)响应");
        gui->logAppend(msg);
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            MoBaoChongJi();
        }
        break;
//充盈(弃牌)
    case 2950:
        targetID=arg[1].toInt();
        int color=arg[2].toInt();
        msg=QStringLiteral("等待")+playerList[targetID]->getRoleName()+QStringLiteral("充盈(弃牌)响应");
        gui->logAppend(msg);
        if(targetID!=myID)
        {
            isMyTurn=0;
            gui->setEnable(0);
        }
        else
        {
            gui->setEnable(1);
            ChongYing(color);
        }
        break;    
    }
}