Example #1
0
File: Player.cpp Project: ozt88/GSP
void Player::ResponseLogin(bool success, int pid, float x, float y, float z, const char* name)
{
	if(success)
	{
		mPlayerId = pid;
		mPosX = x;
		mPosY = y;
		mPosZ = z;
		
		mVecX = rand() + pid*1 % 100 - 50;
		mVecY = rand() + pid*2 % 100 - 50;
		mVecZ = rand() + pid*3 % 100 - 50;

		mPlayerName = name;

		std::stringstream reslog;
		reslog << "LOG: Player Login : PID[" << mPlayerId << "], X[" << mPosX << "], Y[" << mPosY << "], Z[" << mPosZ << "], NAME[" << mPlayerName << "]" << std::endl;
		std::string logString = reslog.str();

		EVENT_LOG(logString.c_str(), 0);
		std::cout << logString;

		DoSyncAfter(HEART_BEAT, GetSharedFromThis<Player>(), &Player::OnTick);
	}
	else
	{
		//이름 넣어서 새로가입
		RequestSignIn(mPlayerName);
	}
}
Example #2
0
void Player::OnTick()
{
	if (!IsAlive())
		return;

	
	/// 랜덤으로 이벤트를 발생시켜보기 (예: 다른 모든 플레이어에게 버프 주기)
	if (rand() % 100 == 0) ///< 1% 확률
	{
		int buffId = mPlayerId * 100;
		int duration = (rand() % 3 + 2) * 1000;
	
		//GCE 예. (lock-order 귀찮고, 전역적으로 순서 보장 필요할 때)
		auto playerEvent = std::make_shared<AllPlayerBuffEvent>(buffId, duration);
		GCEDispatch(playerEvent, &AllPlayerBuffEvent::DoBuffToAllPlayers, mPlayerId);
	}


	//TODO: AllPlayerBuffDecay::CheckBuffTimeout를 GrandCentralExecuter를 통해 실행

	
	
	if (mHeartBeat > 0)
		DoSyncAfter(mHeartBeat, GetSharedFromThis<Player>(), &Player::OnTick);
		
}
Example #3
0
void Player::OnTick()
{
	if (!IsAlive() || !mSession->IsConnected())
		return;
	if( LTickCount - mLastTick > TIME_ALLOW_WITHOUT_ACT ){
		mSession->DisconnectRequest( DR_TIMEOUT );
		return;
	}
	
	/// 랜덤으로 이벤트를 발생시켜보기 (예: 다른 모든 플레이어에게 버프 주기)
	if (rand() % 100 == 0) ///< 1% 확률
	{
		int buffId = mPlayerId * 100;
		int duration = (rand() % 3 + 2) * 1000;
	
		//GCE 예. (lock-order 귀찮고, 전역적으로 순서 보장 필요할 때)
		auto playerEvent = std::make_shared<AllPlayerBuffEvent>(buffId, duration);
		GCEDispatch(playerEvent, &AllPlayerBuffEvent::DoBuffToAllPlayers, mPlayerId);
	}


	//TODO: AllPlayerBuffDecay::CheckBuffTimeout를 GrandCentralExecuter를 통해 실행
	auto timeoutEvent = std::make_shared<AllPlayerBuffDecay>();
	GCEDispatch( timeoutEvent, &AllPlayerBuffDecay::CheckBuffTimeout );
	
	if (mHeartBeat > 0)
		DoSyncAfter(mHeartBeat, GetSharedFromThis<Player>(), &Player::OnTick);
		
}
Example #4
0
void Player::ResponseLoad(int pid, float x, float y, float z, bool valid, wchar_t* name, wchar_t* comment)
{
	mPlayerId = pid;
	mPosX = x;
	mPosY = y;
	mPosZ = z;
	mIsValid = valid;

	wcscpy_s(mPlayerName, name);
	wcscpy_s(mComment, comment);

	//TODO: 아래는 나중에 로그로...
	wprintf_s(L"PID[%d], X[%f] Y[%f] Z[%f] NAME[%s] COMMENT[%s]\n", mPlayerId, mPosX, mPosY, mPosZ, mPlayerName, mComment);
	
	MyPacket::LoginResult loginResult;
	loginResult.set_playerid(mPlayerId);
	loginResult.set_playername("TEST_LogonSuccess");

	MyPacket::Position* pos = loginResult.mutable_playerpos();
	pos->set_x(mPosX);
	pos->set_y(mPosY);
	pos->set_z(mPosZ);

	mSession->SendRequest(MyPacket::PKT_SC_LOGIN, loginResult);

	DoSyncAfter(HEART_BEAT, &Player::OnTick);
}
Example #5
0
File: Player.cpp Project: ozt88/GSP
void Player::OnTick()
{
	if(!IsValid())
		return;

	Move();
	RandomChat();

	DoSyncAfter(HEART_BEAT, GetSharedFromThis<Player>(), &Player::OnTick);
}
Example #6
0
void Player::Start(int heartbeat)
{
	mIsAlive = true;
	mHeartBeat = heartbeat;
	
	/// ID 발급 및 플레이어 맵에 등록
	mPlayerId = GPlayerManager->RegisterPlayer(GetSharedFromThis<Player>());

	/// 생명 불어넣기 ㄱㄱ
	DoSyncAfter(0, GetSharedFromThis<Player>(), &Player::OnTick);

}
Example #7
0
void Player::OnTick()
{
	if (!IsValid())
		return;

// lock order 테스트
// 	FastSpinlock lock1(LO_BUSINESS_CLASS);
// 	lock1.EnterLock();
// 	printf("tick: use count %d\n", GetThisPtr().use_count());
// 	lock1.LeaveLock();

	DoSyncAfter(HEART_BEAT, &Player::OnTick);
}