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; } }
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; } }