void Logic::onError(int error) { TipArea* tipArea; if(gui && (tipArea = gui->getTipArea())){ tipArea->setMsg(QStringLiteral("错误代码:") + QString::number(error) + QStringLiteral(";可尝试等待系统重发")); } }
void Logic::onOkClicked() { QMutexLocker locker(&mutex); switch(state) { case JOIN_TEAM: { TipArea *tipArea = gui->getTipArea(); int chosen = tipArea->getBoxCurrentText().split(".")[0].toInt(); network::JoinTeamRequest *join = new network::JoinTeamRequest(); join->set_team((network::JoinTeamRequest_Team)(chosen - 1)); emit sendCommand(network::MSG_JOIN_TEAM_REQ, join); normal(); break; } case 46: { network::PickBan* pick; TipArea *tipArea = gui->getTipArea(); int chosen = tipArea->getBoxCurrentText().split(".")[0].toInt(); pick = new network::PickBan(); pick->add_role_ids(chosen); pick->set_strategy(network::ROLE_STRATEGY_31); pick->set_is_pick(true); emit sendCommand(network::MSG_PICK_BAN, pick); disconnect(gui->getDecisionArea(),SIGNAL(okClicked()),this,SLOT(onOkClicked())); gui->reset(); break; } /* TODO:BP case 52: bpArea=gui->getBPArea(); roles = bpArea->getSelectedRoles(); emit sendCommand("53;"+QString::number(roles[0])+";"); role= bpArea->getRoleByID(roles[0]); role->setY(role->y()+20); bpArea->reset(); gui->reset(); break; case 55: bpArea=gui->getBPArea(); roles = bpArea->getSelectedRoles(); emit sendCommand("56;"+QString::number(roles[0])+";"); role= bpArea->getRoleByID(roles[0]); role->setY(role->y()+20); bpArea->reset(); gui->reset(); break; */ } }
void Logic::joinTeam() { state = JOIN_TEAM; TipArea *tipArea = gui->getTipArea(); DecisionArea *decisionArea = gui->getDecisionArea(); tipArea->addBoxItem(QStringLiteral("1.蓝B")); tipArea->addBoxItem(QStringLiteral("2.红A")); tipArea->addBoxItem(QStringLiteral("3.随机")); tipArea->showBox(); tipArea->setMsg(QStringLiteral("请选择")); decisionArea->enable(0); }
void Logic::onOkClicked() { QMutexLocker locker(&mutex); int chosen = 0; SafeList<int> selected; BPArea* bpArea = NULL; network::PickBan* pick; switch(state) { case JOIN_TEAM: { TipArea *tipArea = gui->getTipArea(); int chosen = tipArea->getBoxCurrentText().split(".")[0].toInt(); network::JoinTeamRequest *join = new network::JoinTeamRequest(); join->set_team((network::JoinTeamRequest_Team)(chosen - 1)); emit sendCommand(network::MSG_JOIN_TEAM_REQ, join); normal(); break; } case 46: { network::PickBan* pick; TipArea *tipArea = gui->getTipArea(); int chosen = tipArea->getBoxCurrentText().split(".")[0].toInt(); pick = new network::PickBan(); pick->add_role_ids(chosen); pick->set_strategy(network::ROLE_STRATEGY_31); pick->set_is_pick(true); emit sendCommand(network::MSG_PICK_BAN, pick); gui->reset(); break; } case 52: bpArea=gui->getBPArea(); selected = bpArea->getSelectedRoles(); chosen = selected[0]; pick = new network::PickBan(); pick->add_role_ids(chosen); pick->set_strategy(network::ROLE_STRATEGY_BP); pick->set_is_pick(false); emit sendCommand(network::MSG_PICK_BAN, pick); bpArea->reset(); gui->reset(); break; case 53: bpArea=gui->getBPArea(); selected = bpArea->getSelectedRoles(); chosen = selected[0]; pick = new network::PickBan(); pick->add_role_ids(chosen); pick->set_strategy(network::ROLE_STRATEGY_BP); pick->set_is_pick(true); emit sendCommand(network::MSG_PICK_BAN, pick); bpArea->reset(); gui->reset(); break; } }
void Logic::getCommand(unsigned short proto_type, google::protobuf::Message* proto) { QMutexLocker locker(&mutex); TipArea *tipArea; DecisionArea* decisionArea; BPArea* bpArea; SafeList<int> roleIDs; SafeList<int> options; PlayerArea* playerArea; int targetID,roleID,howMany; network::RoleRequest* char_pick; switch (proto_type) { case network::MSG_ROOMLIST_REP: lobby->fill((network::RoomListResponse*) proto); break; case network::MSG_GAME: { network::GameInfo* game_info = (network::GameInfo*) proto; if(game_info->has_player_id()){ myID = game_info->player_id(); dataInterface->setID(myID); cleanRoom(); if(myID == GUEST) gui->logAppend(QStringLiteral("<font color=\'pink\'>房间已满,进入观战模式</font>")); else gui->logAppend(QStringLiteral("<font color=\'pink\'>请准备</font>")); } if(game_info->has_room_id()){ gui->getTeamArea()->setRoomID(game_info->room_id()); } setupRoom(game_info->is_started(), game_info); for (int i = 0; i < game_info->player_infos_size(); ++i) { network::SinglePlayerInfo* player_info = (network::SinglePlayerInfo*)&(game_info->player_infos(i)); targetID = player_info->id(); if(player_info->has_role_id()) { roleID = player_info->role_id(); roles[targetID] = roleID; count++; } if(player_info->has_nickname()){ dataInterface->setNickName(targetID, QString::fromStdString(player_info->nickname())); } if(player_info->has_team()){ dataInterface->getPlayerById(targetID)->setTeam(player_info->team()); } gui->getPlayerArea()->getPlayerItem(targetID)->setReady(player_info->ready()); } if(count==dataInterface->getPlayerMax()) { disconnect(getClient(),0,this,0); disconnect(gui->getDecisionArea(), 0, this, 0); disconnect(gui->getBPArea(),0,this,0); for(int i=0;i<dataInterface->getPlayerMax();i++){ dataInterface->getPlayerList().at(i)->setRole(roles[i]); gui->getPlayerArea()->getPlayerItem(i)->setToolTip(dataInterface->getRoleSkillInfo(roles[i])); } roleID = myID == GUEST ? roles[0] : roles[myID]; setMyRole(roleID); network::GameInfo* toRole = new network::GameInfo; toRole->CopyFrom(*game_info); myRole->decipher(network::MSG_GAME, toRole); gui->hideBP(); } gui->getPlayerArea()->update(); break; } case network::MSG_GOSSIP: if(gui!=NULL) { network::Gossip* gossip = (network::Gossip*) proto; gui->chatAppend(gossip->id(), QString::fromStdString(gossip->txt())); } break; case network::MSG_ERROR: { network::Error* error = (network::Error*)proto; if(error->dst_id() == myID){ gui->reset(); } switch(error->id()) { //GE_DISCONNECTED case GE_DISCONNECTED: { int targetId = error->dst_id(); gui->logAppend(QStringLiteral("<font color=\'red\'>玩家") + QString::number(targetId) + QStringLiteral("离开房间</font>")); dataInterface->setNickName(targetId, ""); dataInterface->getPlayerById(targetId)->setTeam(-1); gui->getPlayerArea()->getPlayerItem(targetId)->setReady(false); gui->getPlayerArea()->update(); break; } case GE_NOT_WELCOME: gui->logAppend(QStringLiteral("<font color=\'red\'>这个房主比较高冷,下个房间见。。</font>")); break; case GE_WRONG_PASSWORD: gui->logAppend(QStringLiteral("<font color=\'red\'>瞎蒙果然是不行的。。</font>")); break; default: gui->logAppend(QStringLiteral("<font color=\'red\'>错误代码") + QString::number(error->id()) + "</font>"); break; } break; } //选择角色 case network::MSG_ROLE_REQ: char_pick = (network::RoleRequest*) proto; int targetId = char_pick->id(); if(targetId != -1) gui->logAppend(QStringLiteral("等待玩家") + QString::number(targetId) + QStringLiteral("选择角色")); if(char_pick->strategy() == ROLE_STRATEGY_31) { if(targetId != myID) break; state=46; tipArea=gui->getTipArea(); decisionArea=gui->getDecisionArea(); tipArea->reset(); howMany=char_pick->role_ids_size(); for(int i=0;i<howMany;i++){ roleID=char_pick->role_ids(i); tipArea->addBoxItem(QString::number(roleID)+"."+dataInterface->getRoleName(roleID)); } tipArea->setMsg(QStringLiteral("请选择角色:")); tipArea->showBox(); decisionArea->enable(0); gui->alert(); break; } else if(char_pick->strategy() == ROLE_STRATEGY_BP) { state = 51; tipArea=gui->getTipArea(); decisionArea=gui->getDecisionArea(); bpArea = gui->getBPArea(); tipArea->reset(); howMany=char_pick->role_ids_size(); for(int i=0;i<howMany;i++){ roleIDs << char_pick->role_ids(i); options << char_pick->args(i); } bpArea->BPStart(howMany, roleIDs, options, char_pick->opration()); if(targetId != myID) break; if(char_pick->opration() == BP_BAN ) { state = 52; bpArea = gui->getBPArea(); bpArea->setMsg(QStringLiteral("请禁用一角色")); bpArea->setQuota(1); bpArea->enableAll(); playerArea = gui->getPlayerArea(); gui->alert(); } else if(char_pick->opration() == BP_PICK ) { state = 53; bpArea = gui->getBPArea(); bpArea->setMsg(QStringLiteral("请选择一角色")); bpArea->setQuota(1); bpArea->enableAll(); playerArea = gui->getPlayerArea(); gui->alert(); } break; } } delete proto; }
void Logic::getCommand(unsigned short proto_type, google::protobuf::Message* proto) { TipArea *tipArea; DecisionArea* decisionArea; BPArea* bpArea; SafeList<int> roleIDs; SafeList<int> options; PlayerArea* playerArea; int targetID,roleID,howMany; network::RoleRequest* char_pick; int targetId; switch (proto_type) { case network::MSG_ROOMLIST_REP: lobby->fill((network::RoomListResponse*) proto); break; case network::MSG_GAME: { network::GameInfo* game_info = (network::GameInfo*) proto; if(game_info->has_player_id()){ myID = game_info->player_id(); dataInterface->setID(myID); cleanRoom(); if(myID == GUEST) gui->logAppend(QStringLiteral("<font color=\'pink\'>房间已满,进入观战模式</font>")); else{ gui->logAppend(QStringLiteral("<font color=\'pink\'>请准备</font>")); gui->logAppend(QStringLiteral("<font color=\'pink\'>觉得某人烦的话,可以“mute n”,n是该玩家座次;“unmute n”恢复</font>")); } } if(game_info->has_room_id()){ gui->getTeamArea()->setRoomID(game_info->room_id()); } int count = 0; setupRoom(game_info -> is_started(), game_info); for (int i = 0; i < game_info->player_infos_size(); ++i) { network::SinglePlayerInfo* player_info = (network::SinglePlayerInfo*)&(game_info->player_infos(i)); targetID = player_info->id(); if(player_info->has_role_id()) { roleID = player_info->role_id(); roles[targetID] = roleID; dataInterface->getPlayerList().at(targetID)->setRole(roleID); gui->getPlayerArea()->getPlayerItem(targetID)->setToolTip(dataInterface->getRoleSkillInfo(roleID)); count++; } if(player_info->has_nickname()){ dataInterface->setNickName(targetID, QString::fromStdString(player_info->nickname())); } if(player_info->has_team()){ dataInterface->getPlayerById(targetID)->setTeam(player_info->team()); } gui->getPlayerArea()->getPlayerItem(targetID)->setReady(player_info->ready()); if(player_info->has_leader()){ gui->getPlayerArea()->getPlayerItem(targetID)->setLeader(player_info->leader()); } } if(count == dataInterface->getPlayerMax()) { disconnect(getClient(),0,this,0); disconnect(gui->getDecisionArea(), 0, this, 0); disconnect(gui->getBPArea(),0,this,0); roleID = myID == GUEST ? roles[0] : roles[myID]; setMyRole(roleID); network::GameInfo* toRole = new network::GameInfo; toRole->CopyFrom(*game_info); myRole->decipher(network::MSG_GAME, toRole); gui->hideBP(); } gui->getPlayerArea()->update(); break; } case network::MSG_BECOME_LEADER_REQ: state = 60; gui->reset(); tipArea = gui->getTipArea(); tipArea->setMsg(QStringLiteral("要申请做队长吗?")); decisionArea = gui->getDecisionArea(); decisionArea->enable(0); decisionArea->enable(1); gui->alert(); break; case network::MSG_GOSSIP: if(gui!=NULL) { network::Gossip* gossip = (network::Gossip*)proto; switch (gossip->type()) { case network::GOSSIP_TALK: gui->chatAppend(gossip->id(), QString(gossip->txt().c_str())); break; case network::GOSSIP_NOTICE: gui->logAppend(QString(gossip->txt().c_str())); break; } } break; case network::MSG_ERROR: { network::Error* error = (network::Error*)proto; if(error->dst_id() == myID){ gui->reset(); } switch(error->id()) { case GE_DISCONNECTED: { int targetId = error->dst_id(); gui->logAppend(QStringLiteral("<font color=\'red\'>玩家") + QString::number(targetId) + QStringLiteral("离开房间</font>")); dataInterface->setNickName(targetId, ""); dataInterface->getPlayerById(targetId)->setTeam(-1); gui->getPlayerArea()->getPlayerItem(targetId)->setReady(false); gui->getPlayerArea()->update(); break; } case GE_NOT_WELCOME: gui->logAppend(QStringLiteral("<font color=\'red\'>这个房主比较高冷,下个房间见。。</font>")); break; case GE_WRONG_PASSWORD: gui->logAppend(QStringLiteral("<font color=\'red\'>瞎蒙果然是不行的。。</font>")); break; default: gui->logAppend(QStringLiteral("<font color=\'red\'>错误代码") + QString::number(error->id()) + "</font>"); break; } break; } //选择角色 case network::MSG_ROLE_REQ: { char_pick = (network::RoleRequest*) proto; targetId = char_pick->id(); if(char_pick->strategy() == ROLE_STRATEGY_31) { gui->logAppend(QStringLiteral("<font color=\'white\'>等待玩家") + QString::number(targetId) + QStringLiteral("选择角色")+"</front"); if(targetId != myID) break; state=46; tipArea=gui->getTipArea(); decisionArea=gui->getDecisionArea(); tipArea->reset(); howMany=char_pick->role_ids_size(); for(int i=0;i<howMany;i++){ roleID=char_pick->role_ids(i); tipArea->addBoxItem(QString::number(roleID)+"."+dataInterface->getRoleName(roleID)); } tipArea->setMsg(QStringLiteral("请选择角色:")); tipArea->showBox(); decisionArea->enable(0); gui->alert(); break; } else if(char_pick->strategy() == ROLE_STRATEGY_BP) { state = 51; tipArea=gui->getTipArea(); decisionArea=gui->getDecisionArea(); bpArea = gui->getBPArea(); tipArea->reset(); howMany=char_pick->role_ids_size(); for(int i=0;i<howMany;i++){ roleIDs << char_pick->role_ids(i); options << char_pick->args(i); } bpArea->BPStart(howMany, roleIDs, options, char_pick->opration()); if(char_pick->opration() == BP_NULL ) { int lastChosen = -1; int step = 0; for(int i = 0; i < howMany; i++){ if(options[i] > step){ step = options[i]; lastChosen = i; } } if(step == 0){ gui->logAppend(QStringLiteral("以下英雄响应了召唤:")); QString msg; foreach(int id, roleIDs) msg += QStringLiteral("<font color=\'yellow\'>%1 </font>").arg(dataInterface->getRoleName(id)); gui->logAppend(msg); } else { QString msg = QStringLiteral("<font color=\'yellow\'>%1</font> %2 了<font color=\'yellow\'>%3</font>"); QString nickname = dataInterface->getPlayerList().at(targetId)->getNickname(); gui->logAppend(msg.arg(nickname, ((options[lastChosen]-1) % 4) < 2 ? "BAN" : "PICK", dataInterface->getRoleName(roleIDs[lastChosen]))); } }