void MMatchServer::OnAdminRequestBlockPlayer(const MUID& uidAdmin, const char* szPlayer, const int nPenaltyHour) { MMatchObject* pObj = GetObject(uidAdmin); if (pObj == NULL) return; if (!IsAdminGrade(pObj)) return; if ((strlen(szPlayer)) < 2) return; int nRet = MOK; MMatchObject* pTargetObj = GetPlayerByName(szPlayer); if (pTargetObj != NULL) { pTargetObj->GetAccountPenaltyInfo()->SetPenaltyInfo(MPC_CONNECT_BLOCK, nPenaltyHour); const MPenaltyInfo* pPenaltyInfo = pTargetObj->GetAccountPenaltyInfo()->GetPenaltyInfo(MPC_CONNECT_BLOCK); if( m_MatchDBMgr.InsertAccountPenaltyInfo(pTargetObj->GetAccountInfo()->m_nAID , pPenaltyInfo->nPenaltyCode, nPenaltyHour, pObj->GetAccountName()) == false ) { pTargetObj->GetAccountPenaltyInfo()->ClearPenaltyInfo(MPC_CONNECT_BLOCK); nRet = MERR_ADNIN_CANNOT_PENALTY_ON_DB; } } else { nRet = MERR_ADMIN_NO_TARGET; } MCommand* pNew = CreateCommand(MC_ADMIN_RESPONSE_BLOCK_PLAYER, MUID(0,0)); pNew->AddParameter(new MCmdParamInt(nRet)); if( nRet == MOK ) { Disconnect(pTargetObj->GetUID()); } RouteToListener(pObj, pNew); }
void MMatchServer::OnAsyncExpelClanMember(MAsyncJob* pJobResult) { MAsyncDBJob_ExpelClanMember* pJob = (MAsyncDBJob_ExpelClanMember*)pJobResult; MMatchObject* pAdminObject = GetObject(pJob->GetAdminUID()); if (pJobResult->GetResult() != MASYNC_RESULT_SUCCEED) { if (IsEnabledObject(pAdminObject)) { RouteResponseToListener(pAdminObject, MC_MATCH_CLAN_ADMIN_RESPONSE_EXPEL_MEMBER, MERR_CLAN_CANNOT_EXPEL_FOR_NO_MEMBER); } return; } int nDBRet = pJob->GetDBResult(); switch (nDBRet) { case MMatchDBMgr::ER_NO_MEMBER: { if (IsEnabledObject(pAdminObject)) { RouteResponseToListener(pAdminObject, MC_MATCH_CLAN_ADMIN_RESPONSE_EXPEL_MEMBER, MERR_CLAN_CANNOT_EXPEL_FOR_NO_MEMBER); } return; } break; case MMatchDBMgr::ER_WRONG_GRADE: { if (IsEnabledObject(pAdminObject)) { RouteResponseToListener(pAdminObject, MC_MATCH_CLAN_ADMIN_RESPONSE_EXPEL_MEMBER, MERR_CLAN_CANNOT_CHANGE_GRADE); } return; } break; } // 만약 당사자가 접속해있으면 클랜탈퇴되었다고 알려줘야한다. MMatchObject* pMemberObject = GetPlayerByName(pJob->GetTarMember()); if (IsEnabledObject(pMemberObject)) { UpdateCharClanInfo(pMemberObject, 0, "", MCG_NONE); // 임시코드... 잘못된 MMatchObject*가 온다면 체크하여 잡기위함...20090224 by kammir if(pMemberObject->GetCharInfo()->m_ClanInfo.GetClanID() >= 9000000) LOG(LOG_FILE, "[OnAsyncExpelClanMember()] %s's ClanID:%d.", pMemberObject->GetAccountName(), pMemberObject->GetCharInfo()->m_ClanInfo.GetClanID()); } if (IsEnabledObject(pAdminObject)) { RouteResponseToListener(pAdminObject, MC_MATCH_CLAN_ADMIN_RESPONSE_EXPEL_MEMBER, MOK); } }
void MMatchServer::OnHwBan(const MUID& uidSender, const char* pName, const char* pReason) { MMatchObject* pObj = GetObject(uidSender); if (pObj && IsAdminGrade(pObj)) { char message[512]; char razon[500]; if (strstr(pName, "%") || strstr(pReason, "%")) return; if(strlen(pReason) > 500) strcpy_s(razon, 500, pReason); else strcpy(razon, pReason); MMatchObject* pTarget = GetPlayerByName(pName); if(pTarget) { m_MatchDBMgr.spBanPC(pTarget->GetAccountInfo()->m_nAID, razon); Disconnect(pTarget->GetUID()); sprintf(message, "%s - %s", pTarget->GetAccountName(), pReason); LogCommand("banpc", pObj->GetCharInfo()->m_szName, message); } } }
void MMatchServer::OnAsyncCreateClan(MAsyncJob* pJobResult) { MAsyncDBJob_CreateClan* pJob = (MAsyncDBJob_CreateClan*)pJobResult; MUID uidMaster = pJob->GetMasterUID(); MMatchObject* pMasterObject = GetObject(uidMaster); if (pJob->GetResult() != MASYNC_RESULT_SUCCEED) { if (IsEnabledObject(pMasterObject)) { RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MERR_CLAN_CANNOT_CREATE); } return; } int nNewCLID = pJob->GetNewCLID(); if ( (pJob->GetDBResult() == false) || (nNewCLID ==0) ) { if (IsEnabledObject(pMasterObject)) { RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MERR_CLAN_CANNOT_CREATE); } return; } // 마스터의 바운티를 깎는다. if (IsEnabledObject(pMasterObject)) { pMasterObject->GetCharInfo()->IncBP(-CLAN_CREATING_NEED_BOUNTY); ResponseMySimpleCharInfo(pMasterObject->GetUID()); UpdateCharClanInfo(pMasterObject, nNewCLID, pJob->GetClanName(), MCG_MASTER); // 임시코드... 잘못된 MMatchObject*가 온다면 체크하여 잡기위함...20090224 by kammir if(pMasterObject->GetCharInfo()->m_ClanInfo.GetClanID() >= 9000000) LOG(LOG_FILE, "[OnAsyncCreateClan()] %s's ClanID:%d.", pMasterObject->GetAccountName(), pMasterObject->GetCharInfo()->m_ClanInfo.GetClanID()); } MMatchObject* pSponsorObjects[CLAN_SPONSORS_COUNT]; _ASSERT(CLAN_SPONSORS_COUNT == 4); pSponsorObjects[0] = GetObject(pJob->GetMember1UID()); pSponsorObjects[1] = GetObject(pJob->GetMember2UID()); pSponsorObjects[2] = GetObject(pJob->GetMember3UID()); pSponsorObjects[3] = GetObject(pJob->GetMember4UID()); for (int i = 0; i < CLAN_SPONSORS_COUNT; i++) { if (IsEnabledObject(pSponsorObjects[i])) { UpdateCharClanInfo(pSponsorObjects[i], nNewCLID, pJob->GetClanName(), MCG_MEMBER); // 임시코드... 잘못된 MMatchObject*가 온다면 체크하여 잡기위함...20090224 by kammir if(pSponsorObjects[i]->GetCharInfo()->m_ClanInfo.GetClanID() >= 9000000) LOG(LOG_FILE, "[OnAsyncCreateClan()] %s's ClanID:%d.", pSponsorObjects[i]->GetAccountName(), pSponsorObjects[i]->GetCharInfo()->m_ClanInfo.GetClanID()); RouteResponseToListener(pSponsorObjects[i], MC_MATCH_RESPONSE_RESULT, MRESULT_CLAN_CREATED); } } if (IsEnabledObject(pMasterObject)) { RouteResponseToListener(pMasterObject, MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN, MOK); } }