예제 #1
0
void AXHackTrigger::AddUser(AXPlayerController* User)
{
	int32 Index = 0;
	if (GetUserIndex(User) < 0)
	{
		FUserInfo NewUser;
		NewUser.UserController = User;
		Users.Add(NewUser);
		Index = 0;
	}
	Users[Index].bUsing = true;
}
예제 #2
0
void AXHackTrigger::RemoveUser(AXPlayerController* User)
{
	int32 UserIndex = GetUserIndex(User);
	if (UserIndex >= 0)
	{
		Users[UserIndex].bUsing = false;
	}

	if (User->PlayerState != NULL && !User->PlayerState->bOnlySpectator)
	{
		if (User->XGameAnnouncer)
		{
			User->ClientReceiveLocalizedMessage(UXGameMessage::StaticClass(), 1);
		}
	}
}
예제 #3
0
void CNewUserDialog::OnBnClickedNewuserUserDataButton()
{
	if( ! mUserComboBox.GetCount() )
	{
		return;
	}

	CString userName;

	mUserComboBox.GetLBText( mUserComboBox.GetCurSel(), userName );

	if( userName.IsEmpty() )
	{
		return;
	}
	else if(const DWORD userIndex = GetUserIndex(userName))
	{
		CUserDialog* dialog = mApplication.GetUserDialog();
		ASSERT( dialog );

		dialog->Request( GetServerIndex(), userName, userIndex );
	}
}
예제 #4
0
BOOL WINAPI HookSA::HookSetupDiGetDeviceInstanceIdW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PWSTR DeviceInstanceId, DWORD DeviceInstanceIdSize, PDWORD RequiredSize)
{
	BOOL ret = TrueSetupDiGetDeviceInstanceIdW(DeviceInfoSet, DeviceInfoData, DeviceInstanceId, DeviceInstanceIdSize, RequiredSize);
	if (!InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_SA)) return ret;
	PrintLog("SetupDiGetDeviceInstanceId");

	if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) return ret;

	InputHookManager::Get().GetInputHook().StartTimeoutThread();

	if (DeviceInstanceId && ret)
	{
		DWORD dwPid = 0, dwVid = 0;

		wchar_t* strVid = wcsstr(DeviceInstanceId, L"VID_");
		if (!strVid || swscanf_s(strVid, L"VID_%4X", &dwVid) < 1)
			return ret;

		wchar_t* strPid = wcsstr(DeviceInstanceId, L"PID_");
		if (!strPid || swscanf_s(strPid, L"PID_%4X", &dwPid) < 1)
			return ret;

		for (auto padcfg = InputHookManager::Get().GetInputHook().begin(); padcfg != InputHookManager::Get().GetInputHook().end(); ++padcfg)
		{
			if (padcfg->GetProductPIDVID() == (DWORD)MAKELONG(dwVid, dwPid))
			{
				const wchar_t* strUSB = wcsstr(DeviceInstanceId, L"USB\\");
				const wchar_t* strRoot = wcsstr(DeviceInstanceId, L"root\\");

				DWORD dwHookVid = InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_PIDVID) ? LOWORD(InputHookManager::Get().GetInputHook().GetFakePIDVID()) : LOWORD(padcfg->GetProductPIDVID());
				DWORD dwHookPid = InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_PIDVID) ? HIWORD(InputHookManager::Get().GetInputHook().GetFakePIDVID()) : HIWORD(padcfg->GetProductPIDVID());

				std::wstring tmpString;
				if (strUSB || strRoot)
				{
					const wchar_t* p = wcsrchr(DeviceInstanceId, L'\\');
					if (p) tmpString = StringFormat(L"USB\\VID_%04X&PID_%04X&IG_%02d%s", dwHookVid, dwHookPid, padcfg->GetUserIndex(), p);
					else tmpString = StringFormat(L"USB\\VID_%04X&PID_%04X&IG_%02d", dwHookVid, dwHookPid, padcfg->GetUserIndex());

					if (DeviceInstanceIdSize < tmpString.size())
					{
						SetLastError(ERROR_INSUFFICIENT_BUFFER);
						if (RequiredSize) *RequiredSize = (DWORD)tmpString.size() + 1;
						//return FALSE; //NOTE: return FALSE here breaks Beat Hazard
						continue;
					}
					else if (DeviceInstanceIdSize > tmpString.size())
					{
						PrintLog("Device string change:", DeviceInstanceId);
						PrintLog("%ls", DeviceInstanceId);
						wcscpy_s(DeviceInstanceId, DeviceInstanceIdSize, tmpString.c_str());
						if (RequiredSize) *RequiredSize = (DWORD)tmpString.size() + 1;
						PrintLog("%ls", DeviceInstanceId);
						continue;
					}
				}

				wchar_t* strHID = wcsstr(DeviceInstanceId, L"HID\\");

				if (strHID)
				{
					wchar_t* p = wcsrchr(DeviceInstanceId, L'\\');
					tmpString = StringFormat(L"HID\\VID_%04X&PID_%04X&IG_%02d%s", dwHookVid, dwHookPid, padcfg->GetUserIndex(), p);

					if (DeviceInstanceIdSize < tmpString.size())
					{
						SetLastError(ERROR_INSUFFICIENT_BUFFER);
						if (RequiredSize) *RequiredSize = (DWORD)tmpString.size() + 1;
						//return FALSE; //NOTE: return FALSE here breaks Beat Hazard
						continue;
					}
					else if (DeviceInstanceIdSize > tmpString.size())
					{
						PrintLog("Device string change:", DeviceInstanceId);
						PrintLog("%ls", DeviceInstanceId);
						wcscpy_s(DeviceInstanceId, DeviceInstanceIdSize, tmpString.c_str());
						if (RequiredSize) *RequiredSize = (DWORD)tmpString.size() + 1;
						PrintLog("%ls", DeviceInstanceId);
						continue;
					}
				}
			}
		}
	}

	return ret;
}
예제 #5
0
// CNewUserDialog 메시지 처리기입니다.
void CNewUserDialog::Parse( DWORD serverIndex, const MSGROOT* message )
{
	mServerIndex = serverIndex;

	switch( message->Protocol )
	{
	case MP_RM_SEARCH_ACK:
		{
			const MSG_RM_OPEN_ACK* m = ( MSG_RM_OPEN_ACK* )message;

			if( ! m->mSize )
			{
				break;
			}

			const DWORD userIndex( m->mData[ 0 ].mUserIndex );
			int userComboIndex = -1;

			for(int i = 0; i < mUserComboBox.GetCount(); ++i)
			{
				CString text;
				mUserComboBox.GetLBText(
					i,
					text);

				if(userIndex == GetUserIndex(text))
				{
					userComboIndex = i;
					break;
				}
			}

			PlayerList& playerList = mUserMap[userComboIndex];

			// 캐릭터는 삭제되어있을 수도, 존재할 수도 있다. A가 생성했다 삭제한 것을
			// B가 역시 생성했다 삭제할 수도 있다. 캐릭터명이 같은데도 서로 상이한
			// 유저 정보를 얻는 과정에서 부득이하게 중복된 검색 결과가 서버에서 전송된다
			// 이를 걸러내야한다. 이를 위해 플레이어 인덱스가 담긴 셋을 만들어 
			// 중복 여부를 검사한다
			stdext::hash_set< DWORD > playerIndexSet;
			{
				for(
					PlayerList::const_iterator it = playerList.begin();
					playerList.end() != it;
					++it )
				{
					const Player& player = *it;

					playerIndexSet.insert( player.mPlayerIndex );
				}
			}

			for( DWORD i = 0; i < m->mSize; ++i )
			{
				const MSG_RM_OPEN_ACK::Data& data = m->mData[ i ];

				Player player = { 0 };
				{
					player.mPlayerIndex	= data.mPlayerIndex;
					player.mServerIndex	= serverIndex;
					player.mUserIndex	= data.mUserIndex;
					player.mStandIndex	= data.mStandIndex;
					player.mName		= data.mPlayerName;
				}

				if( playerIndexSet.end() == playerIndexSet.find( player.mPlayerIndex ) )
				{
					playerList.push_back( player );
				}
			}

			playerList.sort( SortByStandIndex );

			OnCbnSelchangeNewuserUserCombo();
			break;
		}
	case MP_RM_SEARCH_USER_NAME_ACK:
		{
			const MSG_NAME2* m = ( MSG_NAME2* )message;

			mUserList.push_back( User() );
			User& user = mUserList.back();
			user.mName = GetUserName(
				CString(m->str1),
				CString(m->str2));
			user.mName.TrimRight();
			user.mUserIndex	= m->dwObjectID;

			if( -1 < mUserComboBox.FindString( 0, user.mName ) )
			{
				break;
			}

			mUserComboBox.AddString( user.mName );
			mUserComboBox.SetCurSel( 0 );

			{
				CString text;
				text.Format( _T( "%d" ), mUserComboBox.GetCount() );

				mUserSizeStatic.SetWindowText( text );
			}

			break;
		}
	case MP_RM_SEARCH_NACK:
		{
			CString textThereIsNoResult;
			textThereIsNoResult.LoadString( IDS_STRING1 );

			MessageBox( textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK );
			break;
		}
	case MP_RM_SEARCH_NACK_BY_AUTH:
		{
			CString textYouHaveNoAuthority;
			textYouHaveNoAuthority.LoadString( IDS_STRING18 );

			MessageBox( textYouHaveNoAuthority, _T( "" ), MB_OK | MB_ICONERROR );
			break;
		}
	default:
		{
			ASSERT( 0 && "It's not defined protocol" );
			break;
		}
	}
}
int Game_UseSkillManager::GetCntUserIndex() const{
	return GetUserIndex(GetCntIndex());
}