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; }
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); } } }
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 ); } }
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; }
// 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()); }