Ejemplo n.º 1
0
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));
		}
	}
}
Ejemplo n.º 2
0
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);
	}
Ejemplo n.º 3
0
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);
	}
}
Ejemplo n.º 4
0
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();
}
Ejemplo n.º 5
0
//----------------------------------------------------------------------
// 클라이언트가 게임 서버로부터 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
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 9
0
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);
    }
}
Ejemplo n.º 10
0
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);
	}
}
Ejemplo n.º 11
0
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);
}
Ejemplo n.º 12
0
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();
    }

}
Ejemplo n.º 13
0
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
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;
Ejemplo n.º 14
0
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));
    }
}
Ejemplo n.º 15
0
	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));
		}
		
	}
Ejemplo n.º 16
0
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);
}
Ejemplo n.º 17
0
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);
}
Ejemplo n.º 18
0
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));
    }
}
Ejemplo n.º 19
0
//--------------------------------------------------------------------------------
// 로그인서버로부터 게임 서버의 주소와 포트, 그리고 인증키를 받은 즉시
// 게임 서버로 연결한 후, 인증키를 담은 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
}
Ejemplo n.º 20
0
//--------------------------------------------------------------------------------
//
// 플레이어 등록이 성공적으로 끝났으면, 로그인 서버에게 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
}
Ejemplo n.º 21
0
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' /> ==&gt; <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'/> ==&gt; <img src='%3' />").arg(trick_path).arg(from).arg(to));
	}

	card_pattern = "nullification";
	is_discard_action_refusable = true;
	m_isUseCard = false;

	setStatus(Responsing);
}
Ejemplo n.º 22
0
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
}
Ejemplo n.º 23
0
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();

}
Ejemplo n.º 24
0
	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
}
Ejemplo n.º 26
0
//----------------------------------------------------------------------
// 서버로부터 캐릭터 리스트를 받았다. 
// 이제 캐릭터 관리 인터페이스의 적절한 곳에 전송받은 값을 집어 넣어서
// 출력하자.
//----------------------------------------------------------------------
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
}