void Client::setPlayerProperty(const QJsonValue &cmd){ QJsonArray texts = cmd.toArray(); bool self = texts.at(0).toBool(); if(self){ //client it Self if(Self){ QString property = texts.at(1).toString(); QVariant value = texts.at(2).toVariant(); Self->setProperty(property.toLatin1().data(), value); } }else{ //others QString object_name = texts.at(1).toString(); QString property = texts.at(2).toString(); QVariant value = texts.at(3).toVariant(); ClientPlayer *player = getPlayer(object_name); if(player){ player->setProperty(property.toLatin1().data(), value); }else{ QMessageBox::warning(NULL, tr("Warning"), tr("There is no player named %1").arg(object_name)); } } }
void Client::gameOver(const QJsonValue &argdata){ if(!argdata.isArray()) return; QJsonArray arg = argdata.toArray(); is_game_over = true; setStatus(Client::NotActive); QString winner = arg[0].toString(); QStringList roles; BP::tryParse(arg[1], roles); Q_ASSERT(roles.length() == players.length()); for(int i = 0; i < roles.length(); i++){ QString name = players.at(i)->objectName(); getPlayer(name)->setRole(roles.at(i)); } if(winner == "."){ emit standoff(); return; } QSet<QString> winners = winner.split("+").toSet(); foreach(const ClientPlayer *player, players){ QString role = player->getRole(); bool win = winners.contains(player->objectName()) || winners.contains(role); ClientPlayer *p = const_cast<ClientPlayer *>(player); p->setProperty("win", win); }
void OnNetMsg( NetSocket& rSocket,NetMsgHead* pMsg ,int32 nSize ) { ClientPlayer* gPlayer = ClientPlayerMgr::Instance()->GetClientPlayer(rSocket); // 解密处理 static char msgBuffer[65536]; memcpy(&msgBuffer[0], pMsg,nSize); Encrypt::XorCode(nSize,gPlayer->GetEncryptKey(),msgBuffer,nSize); pMsg = ( NetMsgHead*)&msgBuffer[0]; NetMsgHandlerMapIter iter = gMsgHeandlerMap.find( pMsg->nType ); if ( iter == gMsgHeandlerMap.end() ) { FLOG_INFO("Not find Pro:%d", pMsg->nType); ASSERT(0); } else { ClientPlayer* pClientPlayer = ClientPlayerMgr::Instance()->GetClientPlayer(rSocket); (iter->second.pFun)(pClientPlayer,pMsg ,nSize); FLOG_INFO("OnNetMsg %d", pMsg->nType); } }
ClientStage::ClientStage(const Stage& stage,const STRING gameObjectName):Stage(stage, gameObjectName) { PlayerMap tempPlayerMap = this->m_PlayerMap; MonsterMap tempMonsterMap = this->m_MonsterMap; this->m_PlayerMap.clear(); this->m_MonsterMap.clear(); std::for_each(tempPlayerMap.begin(), tempPlayerMap.end(), [this,&stage](PlayerMap::value_type& playerInfoPair){ Player* player = playerInfoPair.second; ASSERT_DEBUG(player != nullptr); ClientPlayer* clientPlayer = new ClientPlayer(*player); this->AddPlayer(clientPlayer->GetActorID(), clientPlayer); delete player; }); tempPlayerMap.clear(); // NOTE : replacing Monster object to ClientMonster object std::for_each(tempMonsterMap.begin(), tempMonsterMap.end(), [this](MonsterMap::value_type& monsterInfoPair){ Monster* monster = monsterInfoPair.second; ASSERT_DEBUG(monster != nullptr); ClientMonster* clientMonster = new ClientMonster(*monster); this->AddMonster(clientMonster->GetActorID(), clientMonster); delete monster; }); tempMonsterMap.clear(); }
//---------------------------------------------------------------------- // 클라이언트가 게임 서버로부터 GCUpdateInfo 패킷을 받게 되면, // 패킷 안의 데이터들을 클라이언트에 저장한 후, 데이터 로딩이 // 끝이 나면 게임 서버로 CGReady 패킷을 보내면 된다. //---------------------------------------------------------------------- void GCUpdateInfoHandler::execute (GCUpdateInfo * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); //cout << pPacket->toString() << endl; //-------------------------------------------------- // 데이터 로딩을 시작한다. //-------------------------------------------------- pClientPlayer->setPlayerStatus(CPS_WAITING_FOR_LOADING); // ... 로딩 로딩 ... //-------------------------------------------------- // 게임 서버로 CGReady 패킷을 보낸다. //-------------------------------------------------- CGReady cgReady; pClientPlayer->sendPacket(&cgReady); pClientPlayer->setPlayerStatus(CPS_WAITING_FOR_GC_SET_POSITION); #endif __END_DEBUG_EX __END_CATCH }
void Client::arrangeSeats(const QJsonValue &seats_data){ QJsonArray player_names = seats_data.toArray(); players.clear(); for(int i = 0; i < player_names.size(); i++){ ClientPlayer *player = findChild<ClientPlayer*>(player_names.at(i).toString()); Q_ASSERT(player != NULL); player->setSeat(i + 1); players << player; } QList<const ClientPlayer*> seats; int self_index = players.indexOf(Self); Q_ASSERT(self_index != -1); for(int i = self_index+1; i < players.length(); i++) seats.append(players.at(i)); for(int i = 0; i < self_index; i++) seats.append(players.at(i)); Q_ASSERT(seats.length() == players.length() - 1); emit seats_arranged(seats); }
void OnNetMsg( NetSocket& rSocket,NetMsgHead* pMsg ,int32 nSize ) { ClientPlayer* gPlayer = ClientPlayerMgr::Instance()->GetClientPlayer(rSocket); // 解密处理 static char msgBuffer[65536]; memcpy(&msgBuffer[0], pMsg,nSize); Encrypt::XorCode(nSize,gPlayer->GetEncryptKey(),msgBuffer,nSize); pMsg = ( NetMsgHead*)&msgBuffer[0]; NetMsgHandlerMapIter iter = gMsgHeandlerMap.find( pMsg->nType ); if ( iter == gMsgHeandlerMap.end() ) { printf("Not find Pro:%d\n", pMsg->nType); ASSERT(0); return ; } NetMsgHandler pHandler = iter->second; printf("OnNetMsg %d %s \n", pMsg->nType,pHandler.strBrief.c_str()); ClientPlayer* pClientPlayer = ClientPlayerMgr::Instance()->GetClientPlayer(rSocket); (pHandler.pFun)(pClientPlayer,pMsg ,nSize); }
void RoleAssignDialog::updateRole(int index) { QString name = list->currentItem()->data(Qt::UserRole).toString(); QString role = role_ComboBox->itemData(index).toString(); ClientPlayer *player = ClientInstance->getPlayer(name); QString text = QString("%1[%2]").arg(player->screenName()).arg(Sanguosha->translate(role)); list->currentItem()->setText(text); role_mapping[name] = role; }
void Client::removePlayer(const QString &player_name){ ClientPlayer *player = findChild<ClientPlayer*>(player_name); if(player){ player->setParent(NULL); alive_count--; emit player_removed(player_name); } }
void Client::removePlayer(const QJsonValue &player_name){ QString name = player_name.toString(); ClientPlayer *player = findChild<ClientPlayer*>(name); if(player){ player->setParent(NULL); alive_count--; emit player_removed(name); } }
QString Client::getPlayerName(const QString &str){ QRegExp rx("sgs\\d+"); QString general_name; if(rx.exactMatch(str)){ ClientPlayer *player = getPlayer(str); general_name = player->getGeneralName(); general_name = Bang->translate(general_name); if(ServerInfo.EnableSame || player->getGeneralName() == "anjiang") general_name = QString("%1[%2]").arg(general_name).arg(player->getSeat()); return general_name; }else return Bang->translate(str); }
void ActorLayer::ChangeActorStateToMoving(CCObject* object) { ActorNode* actorNode = static_cast<ActorNode*>(object); if(IsPlayerID(actorNode->GetActorID())) { ClientPlayer* clientPlayer = static_cast<ClientPlayer*>(GameClient::Instance().GetClientStage()->FindActor(actorNode->GetActorID())); clientPlayer->ChangeToMovingState(); } else if(IsMonsterID(actorNode->GetActorID())) { ClientMonster* clientMonser = static_cast<ClientMonster*>(GameClient::Instance().GetClientStage()->FindActor(actorNode->GetActorID())); clientMonser->ChangeToMovingState(); } }
//-------------------------------------------------------------------------------- //-------------------------------------------------------------------------------- void GCUnburrowOKHandler::execute (GCUnburrowOK * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); // 다음 좌표를 플레이어에 지정해 놓는다. pClientPlayer->setX(pPacket->getX()); pClientPlayer->setY(pPacket->getY()); pClientPlayer->setDir(pPacket->getDir()); //cout << "Unburrow OK to (" << (int)pPacket->getX() << "," << (int)pPacket->getY() << "," << Dir2String[pPacket->getDir()] << ")" << endl;
void Client::processReply(char *reply){ if(strlen(reply) <= 2) return; static char self_prefix = '.'; static char other_prefix = '#'; if(reply[0] == self_prefix){ // client it Self if(Self){ buffer_t property, value; sscanf(reply, ".%s %s", property, value); Self->setProperty(property, value); } }else if(reply[0] == other_prefix){ // others buffer_t object_name, property, value; sscanf(reply, "#%s %s %s", object_name, property, value); ClientPlayer *player = getPlayer(object_name); if(player){ player->setProperty(property, value); }else QMessageBox::warning(NULL, tr("Warning"), tr("There is no player named %1").arg(object_name)); }else{ // invoke methods buffer_t method_name, arg; sscanf(reply, "%s %s", method_name, arg); QString method = method_name; if(replayer && (method.startsWith("askFor") || method.startsWith("do") || method == "activate")) return; static QSet<QString> deprecated; if(deprecated.isEmpty()){ deprecated << "increaseSlashCount" // replaced by addHistory << "addProhibitSkill"; // add all prohibit skill at game start } Callback callback = callbacks.value(method, NULL); if(callback){ QString arg_str = arg; (this->*callback)(arg_str); }else if(!deprecated.contains(method)) QMessageBox::information(NULL, tr("Warning"), tr("No such invokable method named \"%1\"").arg(method_name)); } }
void ChatWidget::playerJoinedGame( const std::string& player,int seatNo ) { if(!m_shared) { return; } if(seatNo != -1) return; ClientPlayer* p = m_shared->getPlayerManager()->getSelfPlayer(); if(p && p->getUsername() != player) { m_toolbar->addPlayer(player,getGamePlayerColor(player)); m_toolbar->setPlayerMuted(player,isMutedG(player)); } }
void Client::addPlayer(const QString &player_info){ QStringList texts = player_info.split(":"); QString name = texts.at(0); QString base64 = texts.at(1); QByteArray data = QByteArray::fromBase64(base64.toAscii()); QString screen_name = QString::fromUtf8(data); QString avatar = texts.at(2); ClientPlayer *player = new ClientPlayer(this); player->setObjectName(name); player->setScreenName(screen_name); player->setProperty("avatar", avatar); alive_count ++; emit player_added(player); }
void Client::addPlayer(const QJsonValue &player_info){ QJsonArray texts = player_info.toArray(); QString name = texts.at(0).toString(); QString screen_name = texts.at(1).toString(); QString avatar = texts.at(2).toString(); ClientPlayer *player = new ClientPlayer(this); player->setObjectName(name); player->setScreenName(screen_name); player->setProperty("avatar", avatar); players << player; alive_count++; emit player_added(player); }
void Client::processReply(char *reply){ if(strlen(reply) <= 2) return; static char self_prefix = '.'; static char other_prefix = '#'; if(reply[0] == self_prefix){ // client it Self if(Self){ buffer_t property, value; sscanf(reply, ".%s %s", property, value); Self->setProperty(property, value); } }else if(reply[0] == other_prefix){ // others buffer_t object_name, property, value; sscanf(reply, "#%s %s %s", object_name, property, value); ClientPlayer *player = getPlayer(object_name); if(player){ bool declared = player->setProperty(property, value); if(!declared){ QMessageBox::warning(NULL, tr("Warning"), tr("There is no such property named %1").arg(property)); } }else QMessageBox::warning(NULL, tr("Warning"), tr("There is no player named %1").arg(object_name)); }else{ // invoke methods buffer_t method_name, arg; sscanf(reply, "%s %s", method_name, arg); Callback callback = callbacks.value(method_name, NULL); QString method = method_name; if(replayer && (method.startsWith("askFor") || method.startsWith("do") || method == "activate")) return; if(callback){ QString arg_str = arg; (this->*callback)(arg_str); }else QMessageBox::information(NULL, tr("Warning"), tr("No such invokable method named \"%1\"").arg(method_name)); } }
//-------------------------------------------------------------------------------- // 로그인서버로부터 게임 서버의 주소와 포트, 그리고 인증키를 받은 즉시 // 게임 서버로 연결한 후, 인증키를 담은 CGConnect 패킷을 전송한다. //-------------------------------------------------------------------------------- void LCReconnectHandler::execute (LCReconnect * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); // 로그인 서버와의 연결을 종료한다 // 이때 로그인 서버는 LCReconnect 패킷을 보내면서 연결을 종료한다는 사실에 유의하라. //cout << "Disconnecting from login server" << endl; pClientPlayer->disconnect(); // LCReconnect 패킷에 들어있는 정보를 사용해서, 게임 서버로 연결한다. //cout << "Reconnecting to " << pPacket->getGameServerIP() << ":" << pPacket->getGameServerPort() << endl; try { pClientPlayer->getSocket()->reconnect(pPacket->getGameServerIP() , pPacket->getGameServerPort()); // reconnect하게 되면 소켓이 새로 만들어지게 된다. // 따라서, 이 소켓 역시 옵션을 새로 지정해줘야 한다. pClientPlayer->getSocket()->setNonBlocking(); pClientPlayer->getSocket()->setLinger(0); } catch (ConnectException & ce ) { throw Error(ce.toString()); } // 연결이 이루어지면, 바로 CGConnect 패킷을 전송한다. // 이전에 Select 한 PC의 타입과 이름을 클라이언트 플레이어 객체에 저장해둔다. //cout << "Sending CGConnect with Key(" << pPacket->getKey() << ")" << endl; CGConnect cgConnect; cgConnect.setKey(pPacket->getKey()); cgConnect.setPCType(pClientPlayer->getPCType()); cgConnect.setPCName(pClientPlayer->getPCName()); pClientPlayer->sendPacket(&cgConnect); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CG_CONNECT); #endif __END_DEBUG_EX __END_CATCH }
//-------------------------------------------------------------------------------- // // 플레이어 등록이 성공적으로 끝났으면, 로그인 서버에게 PC LIST 를 요청한다. // //-------------------------------------------------------------------------------- void LCRegisterPlayerOKHandler::execute (LCRegisterPlayerOK * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); //cout << "Player Registeration Successfull." << endl; CLGetPCList clGetPCList; pClientPlayer->sendPacket(&clGetPCList); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_GET_PC_LIST); #endif __END_DEBUG_EX __END_CATCH }
void Client::askForNullification(const QJsonValue &argdata){ if(!argdata.isArray()) return; QJsonArray arg = argdata.toArray(); if(arg.size() != 3 || !arg[0].isString() || !(arg[1].isNull() ||arg[1].isString()) || !arg[2].isString()) return; QString trick_name = arg[0].toString(); QJsonValue source_name = arg[1].toString(); ClientPlayer* target_player = getPlayer(arg[2].toString()); if(!target_player || !target_player->getGeneral()) return; const Card *trick_card = Bang->findChild<const Card *>(trick_name); ClientPlayer *source = NULL; if(!source_name.isNull()) source = getPlayer(source_name.toString()); if(Config.NeverNullifyMyTrick && source == Self){ if(trick_card->inherits("SingleTargetTrick") || trick_card->objectName() == "tama_dragon"){ onPlayerResponseCard(NULL); return; } } QString trick_path = trick_card->getPixmapPath(); QString to = target_player->getGeneral()->getPixmapPath("big"); if(source == NULL){ prompt_doc->setHtml(QString("<img src='%1' /> ==> <img src='%2' />").arg(trick_path).arg(to)); }else{ QString from = source->getGeneral()->getPixmapPath("big"); prompt_doc->setHtml(QString("<img src='%1' /> <img src='%2'/> ==> <img src='%3' />").arg(trick_path).arg(from).arg(to)); } card_pattern = "nullification"; is_discard_action_refusable = true; m_isUseCard = false; setStatus(Responsing); }
void GCUntransformFailHandler::execute (GCUntransformFail* pPacket , Player * pPlayer ) throw(Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); pClientPlayer->setX(pPacket->getX()); pClientPlayer->setY(pPacket->getY()); //cout << "Untransform Back To (" << (int)pPacket->getX() << "," << (int)pPacket->getY() << ")" << endl; #elif __WINDOWS__ AfxMessageBox(pPacket->toString().c_str()); #endif __END_DEBUG_EX __END_CATCH }
void ClientInit() { InitNetMsg(); for (int32 i = 0; i < MAX_CLIENT_COUNT; ++i) { NetClient* gNetClient = new NetClient(); gNetClient->SetAddress("127.0.0.1", 9900); gNetClient->SetHandler(OnNetMsgEnter, OnNetMsg, OnNetMsgExit); gNetClient->Start(); ClientPlayer* gPlayer = new ClientPlayer(); gPlayer->SetSocket(gNetClient->GetSocket()); ClientPlayerMgr::Instance()->AddSocket(gNetClient,gPlayer); } //命令调试 //gGameCommond.Init(gNetClient->GetSocket()); //GameCommand::CommandHelp(); }
void ChatWidget::loadSettings( ClientShared* shared ) { m_shared = shared; m_toolbar->getCensorButton()->setToggleState(getBoolSetting("chat.censored")); m_fontRatio = getNumericSetting("chat.game.font"); Log::write("ChatWidget","loaded game chat settings"); m_toolbar->getFontSlider()->setValue( ((m_toolbar->getFontSlider()->getMaxValue() - m_toolbar->getFontSlider()->getMinValue()) * m_fontRatio) + m_toolbar->getFontSlider()->getMinValue()); //all this code just adds players to mute list int tbl = getTableG(); LobbyCache::Table* t = shared->getLobbyCache()->getTableAt(tbl); if(t) { ClientPlayer* s = shared->getPlayerManager()->getSelfPlayer(); /* for(int i = 0; i < t->getNumChairs(); ++i) { ClientPlayer* p = t->getChairAt(i)->getPlayer(); //valid and not me if(s && p && p->getUsername() != s->getUsername()) { m_toolbar->addPlayer(p->getUsername(),getGamePlayerColor(p->getUsername())); m_toolbar->setPlayerMuted(p->getUsername(),isMutedG(p->getUsername())); } } */ for(int i = 0; i < t->getNumWatchers(); ++i) { ClientPlayer* p = t->getWatcherAt(i); if(s && p && p->getUsername() != s->getUsername()) { m_toolbar->addPlayer(p->getUsername(),getGamePlayerColor(p->getUsername())); m_toolbar->setPlayerMuted(p->getUsername(),isMutedG(p->getUsername())); } } } std::string chatStyle = getStringSetting("chat.style"); chatStyleChanged(chatStyle); }
//-------------------------------------------------------------------------------- // // // //-------------------------------------------------------------------------------- void LCRegisterPlayerErrorHandler::execute (LCRegisterPlayerError * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ ClientPlayer * pClientPlayer = dynamic_cast<ClientPlayer*>(pPlayer); cout << endl << "+-------------------------+" << endl << "| FAIL TO REGISTER PLAYER |" << endl << "+-------------------------+" << endl << endl << pPacket->getMessage() << endl; cout << endl << "+-----------------+" << endl << "| REGISTER PLAYER |" << endl << "+-----------------+" << endl << endl; CLRegisterPlayer clRegisterPlayer; char cmd[80]; cout << "아이디 : "; cin.getline(cmd,80); clRegisterPlayer.setID(cmd); cout << "패스워드 : "; cin.getline(cmd,80); clRegisterPlayer.setPassword(cmd); cout << "이름 : "; cin.getline(cmd,80); clRegisterPlayer.setName(cmd); cout << "성별 (남/여) : "; cin.getline(cmd,80); Sex sex; if (strcmp(cmd,"남") == 0 ) sex = MALE; if (strcmp(cmd,"여") == 0 ) sex = FEMALE; else sex = MALE; cout << "Sex : " << Sex2String[sex] << endl; clRegisterPlayer.setSex(sex); clRegisterPlayer.setSSN("800101-2000111"); clRegisterPlayer.setTelephone("02-222-3333"); clRegisterPlayer.setCellular("011-222-3333"); clRegisterPlayer.setZipCode("700-441"); clRegisterPlayer.setAddress("서울특별시 영등포구 여의도동 사서함 300번지"); clRegisterPlayer.setNation(KOREA); clRegisterPlayer.setEmail("*****@*****.**"); clRegisterPlayer.setHomepage("www.jhkim.com"); clRegisterPlayer.setProfile("테크노의 여왕 전지현"); clRegisterPlayer.setPublic(false); cout << clRegisterPlayer.toString() << endl; // 등록 패킷을 전송한다. pClientPlayer->sendPacket(&clRegisterPlayer); // 플레이어의 상태를 바꾼다. pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_REGISTER_PLAYER); #endif __END_DEBUG_EX __END_CATCH }
//---------------------------------------------------------------------- // 서버로부터 캐릭터 리스트를 받았다. // 이제 캐릭터 관리 인터페이스의 적절한 곳에 전송받은 값을 집어 넣어서 // 출력하자. //---------------------------------------------------------------------- void LCPCListHandler::execute (LCPCList * pPacket , Player * pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_CLIENT__ #if __LINUX__ || __WIN_CONSOLE__ ClientPlayer * pClientPlayer = (ClientPlayer*)pPlayer; cout << endl << "+----------------------+" << endl << "| CHARACTER MANAGEMENT |" << endl << "+----------------------+" << endl << endl; uint nPCs = 0; for (uint i = 0 ; i < SLOT_MAX ; i ++ ) { try { PCInfo * pPCInfo = pPacket->getPCInfo(Slot(i)); nPCs ++; switch (pPCInfo->getPCType() ) { case PC_SLAYER : { PCSlayerInfo * pPCSlayerInfo = dynamic_cast<PCSlayerInfo*>(pPCInfo); cout << pPCSlayerInfo->toString() << endl; } break; case PC_VAMPIRE : { PCVampireInfo * pPCVampireInfo = dynamic_cast<PCVampireInfo*>(pPCInfo); cout << pPCVampireInfo->toString() << endl; } break; case PC_OUSTERS : { PCOustersInfo * pPCOustersInfo = dynamic_cast<PCOustersInfo*>(pPCInfo); cout << pPCOustersInfo->toString() << endl; } break; default : throw InvalidProtocolException("invalid pc type"); } } catch (NoSuchElementException ) { } } if (nPCs == 0 ) { //cout << "캐릭터가 하나도 없습니다." << endl; } char cmd[80+1]; do { cout << endl << "+--------------+" << endl << "| 1. Create PC |" << endl << "| 2. Delete PC |" << endl << "| 3. Select PC |" << endl << "| 4. To Board |" << endl << "+--------------|" << endl << "select > "; cin.getline(cmd,80); } while (strcmp(cmd,"1") != 0 && strcmp(cmd,"2") != 0 && strcmp(cmd,"3") != 0 && strcmp(cmd, "4") !=0); if (strcmp(cmd,"1") == 0 ) { cout << endl << "+--------------------+" << endl << "| CHARACTER CREATION |" << endl << "+--------------------+" << endl << endl; CLCreatePC clCreatePC; cout << "Name : "; cin.getline(cmd,80); clCreatePC.setName(cmd); cout << "Slot (1-3) : "; cin.getline(cmd,80); Slot slot; if (strcmp(cmd,"1") == 0 ) slot = SLOT1; else if (strcmp(cmd,"2") == 0 ) slot = SLOT2; else if (strcmp(cmd,"3") == 0 ) slot = SLOT3; else slot = SLOT1; clCreatePC.setSlot(slot); cout << "Sex (남/여) : "; cin.getline(cmd,80); Sex sex = (strcmp(cmd,"남") == 0 ) ? sex = MALE : sex = FEMALE; clCreatePC.setSex(sex); cout << "Sex : " << Sex2String[sex] << endl; cout << "HairStyle (1-3) : "; cin.getline(cmd,80); HairStyle hairStyle; if (strcmp(cmd,"1") == 0 ) hairStyle = HAIR_STYLE1; else if (strcmp(cmd,"2") == 0 ) hairStyle = HAIR_STYLE2; else if (strcmp(cmd,"3") == 0 ) hairStyle = HAIR_STYLE3; else hairStyle = HAIR_STYLE1; clCreatePC.setHairStyle(hairStyle); cout << "HairColor (0-255) : "; cin.getline(cmd,80); clCreatePC.setHairColor(atoi(cmd )); cout << "SkinColor (0-255) : "; cin.getline(cmd,80); clCreatePC.setSkinColor(atoi(cmd )); cout << "ShirtColor (0-255) : "; cin.getline(cmd,80); clCreatePC.setSkinColor(atoi(cmd )); cout << "JeansColor (0-255) : "; cin.getline(cmd,80); clCreatePC.setSkinColor(atoi(cmd )); cout << "Try to creating PC : " << clCreatePC.toString() << endl; pClientPlayer->sendPacket(&clCreatePC); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_CREATE_PC); } else if (strcmp(cmd,"2") == 0 ) { cout << endl << "+------------------+" << endl << "| DELETE CHARACTER |" << endl << "+------------------+" << endl << endl; CLDeletePC clDeletePC; cout << "Name : "; cin.getline(cmd,80); clDeletePC.setName(cmd); cout << "Slot (1-3) : "; cin.getline(cmd,80); Slot slot; if (strcmp(cmd,"1") == 0 ) slot = SLOT1; else if (strcmp(cmd,"2") == 0 ) slot = SLOT2; else if (strcmp(cmd,"3") == 0 ) slot = SLOT3; else slot = SLOT1; clDeletePC.setSlot(slot); pClientPlayer->sendPacket(&clDeletePC); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_DELETE_PC); } else if (strcmp(cmd,"3") == 0 ) { cout << endl << "+------------------+" << endl << "| SELECT CHARACTER |" << endl << "+------------------+" << endl << endl; CLSelectPC clSelectPC; cout << "Name : "; cin.getline(cmd,80); clSelectPC.setPCName(cmd); cout << "PCType (S/V) : "; cin.getline(cmd,80); if (strcmp(cmd,"S") == 0 || strcmp(cmd,"s") == 0 ) clSelectPC.setPCType(PC_SLAYER); else if (strcmp(cmd,"V") == 0 || strcmp(cmd,"v") == 0 ) clSelectPC.setPCType(PC_VAMPIRE); else clSelectPC.setPCType(PC_SLAYER); // CGConnect 때 사용하려면 여기서 저장해둬야 한다. pClientPlayer->setPCType(clSelectPC.getPCType()); pClientPlayer->setPCName(clSelectPC.getPCName()); cout << endl << clSelectPC.toString() << endl; pClientPlayer->sendPacket(&clSelectPC); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_SELECT_PC); } else if (strcmp(cmd, "4") == 0 ) { cout<< endl; cout<<"Choose BBS" <<endl << "+------------------+" << endl << "| 1. Beta BBS |" << endl << "| 2. Quit |" << endl << "| |" << endl << "+------------------+" << endl << "select > "; // 여기에 게시판 관련 처리 부분이 들어가면 된다.. // CLSelectBBS 패킷을 만들어서 보내면 되겠군... cin.getline(cmd,80); if (strcmp(cmd, "1") == 0 ) { CLSelectBoard clSelectBoard; clSelectBoard.setBoardName("BetaBBS"); cout << clSelectBoard.toString() << endl; pClientPlayer->sendPacket(&clSelectBoard); pClientPlayer->setPlayerStatus(CPS_AFTER_SENDING_CL_SELECT_BOARD); } } #endif #endif __END_DEBUG_EX __END_CATCH }