void CGModifyGuildMemberIntroHandler::execute (CGModifyGuildMemberIntro* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); SYSTEM_ASSERT(SYSTEM_GUILD); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); Creature* pCreature = pGamePlayer->getCreature(); Assert(pCreature != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); // 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPlayerCreature->getGuildID()); if (pGuild==NULL) return; // 길드 멤버 정보를 가져온다. GuildMember* pGuildMember = pGuild->getMember(pPlayerCreature->getName()); if (pGuildMember==NULL) return; pGuildMember->saveIntro(pPacket->getGuildMemberIntro()); #endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH }
void CGSelectGuildMemberHandler::execute (CGSelectGuildMember* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); SYSTEM_ASSERT(SYSTEM_GUILD); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature()); Assert(pPlayerCreature != NULL); // 선택한 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPlayerCreature->getGuildID()); //try { Assert(pGuild != NULL); } catch (Throwable& ) { return; } if (pGuild==NULL) return; // 선택한 길드 멤버를 가져온다. GuildMember* pGuildMember = pGuild->getMember(pPacket->getName()); //try { Assert(pGuildMember != NULL); } catch (Throwable& ) { return; } if (pGuildMember==NULL) return; GCShowGuildMemberInfo gcShowGuildMemberInfo; gcShowGuildMemberInfo.setGuildID(pGuildMember->getGuildID()); gcShowGuildMemberInfo.setName(pGuildMember->getName()); gcShowGuildMemberInfo.setGuildMemberRank(pGuildMember->getRank()); gcShowGuildMemberInfo.setGuildMemberIntro(pGuildMember->getIntro()); pPlayer->sendPacket(&gcShowGuildMemberInfo); #endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH }
void CGModifyGuildMemberHandler::execute (CGModifyGuildMember* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ //cout << "CGModifyGuildMember received." << endl; Assert(pPacket != NULL); Assert(pPlayer != NULL); SYSTEM_ASSERT(SYSTEM_GUILD); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); Creature* pCreature = pGamePlayer->getCreature(); Assert(pCreature != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); // 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPlayerCreature->getGuildID()); //try { Assert(pGuild != NULL); } catch (Throwable& t ) { return; } if (pGuild==NULL) return; // 길드 멤버 정보를 가져온다. GuildMember* pGuildMember = pGuild->getMember(pPlayerCreature->getName()); //try { Assert(pGuild != NULL); } catch (Throwable& t ) { return; } if (pGuildMember==NULL) return; //cout << "get guild" << endl; if (pPacket->getGuildMemberRank() == GuildMember::GUILDMEMBER_RANK_DENY ) { //////////////////////////////////////////////////////// // 길드 멤버를 추방한다. //////////////////////////////////////////////////////// // 마스터가 아니면 추방할 수 없다. if (pGuildMember->getRank() != GuildMember::GUILDMEMBER_RANK_MASTER ) return; if (g_pGuildManager->hasActiveWar(pGuild->getID() ) ) { GCSystemMessage msg; msg.setMessage(g_pStringPool->getString(STRID_CANNOT_KICK_DURING_WAR )); pPlayer->sendPacket(&msg); return; } GSExpelGuildMember gsExpelGuildMember; gsExpelGuildMember.setGuildID(pGuild->getID()); gsExpelGuildMember.setName(pPacket->getName()); gsExpelGuildMember.setSender(pPlayerCreature->getName()); //cout << "send GSExpelGuildMember" << endl; g_pSharedServerManager->sendPacket(&gsExpelGuildMember); } else { if (pGuild->getActiveMemberCount() >= MAX_GUILDMEMBER_ACTIVE_COUNT ) { GCSystemMessage msg; msg.setMessage(g_pStringPool->getString(STRID_CANNOT_ACCEPT_MORE_JOIN )); pPlayer->sendPacket(&msg); return; } /////////////////////////////////////////////////////// // 길드 가입을 승인한다. /////////////////////////////////////////////////////// // 마스터나 서브마스터 이어야 한다. if (pGuildMember->getRank() != GuildMember::GUILDMEMBER_RANK_MASTER && pGuildMember->getRank() != GuildMember::GUILDMEMBER_RANK_SUBMASTER ) return; if (g_pGuildManager->hasActiveWar(pGuild->getID() ) ) { GCSystemMessage msg; msg.setMessage(g_pStringPool->getString(STRID_CANNOT_ACCEPT_DURING_WAR )); pPlayer->sendPacket(&msg); return; } GSModifyGuildMember gsModifyGuildMember; gsModifyGuildMember.setGuildID(pGuild->getID()); gsModifyGuildMember.setName(pPacket->getName()); gsModifyGuildMember.setGuildMemberRank(pPacket->getGuildMemberRank()); gsModifyGuildMember.setSender(pPlayerCreature->getName()); //cout << "send GSModifyGuildMember" << endl; g_pSharedServerManager->sendPacket(&gsModifyGuildMember); } #endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH }
void CGQuitUnionAcceptHandler::execute (CGQuitUnionAccept* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature()); Assert(pPlayerCreature != NULL); #ifdef __OLD_GUILD_WAR__ GCSystemMessage gcSM; gcSM.setMessage("아직 지원되지 않는 기능입니다."); pGamePlayer->sendPacket(&gcSM); return; #endif SYSTEM_ASSERT(SYSTEM_GUILD); GCGuildResponse gcGuildResponse; GuildUnion *pUnion = GuildUnionManager::Instance().getGuildUnion(pPlayerCreature->getGuildID()); if(pUnion == NULL) { gcGuildResponse.setCode(GuildUnionOfferManager::NOT_IN_UNION); pPlayer->sendPacket(&gcGuildResponse); return; } // 요청한놈이 지가 속한 길드의 마스터인가? || 연합의 마스터길드가 내 길드가 맞나? if(!g_pGuildManager->isGuildMaster (pPlayerCreature->getGuildID(), pPlayerCreature ) || pUnion->getMasterGuildID() != pPlayerCreature->getGuildID() ) { // GC_GUILD_RESPONSE 날려준다. // 내용 : 길드 마스터가 아니자녀 -.-+ gcGuildResponse.setCode(GuildUnionOfferManager::SOURCE_IS_NOT_MASTER); pPlayer->sendPacket(&gcGuildResponse); return; } uint result = GuildUnionOfferManager::Instance().acceptQuit(pPacket->getGuildID()); gcGuildResponse.setCode(result); pPlayer->sendPacket(&gcGuildResponse); //////////////////// if(result == GuildUnionOfferManager::OK) { Guild* pGuild = g_pGuildManager->getGuild(pPacket->getGuildID()); if(pGuild == NULL) { return; } string TargetGuildMaster = pGuild->getMaster(); //cout << "연합탈퇴가 수락되었다. 통보받을 유저는 : " << TargetGuildMaster.c_str() << endl; Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN" )->createStatement(); pStmt->executeQuery("INSERT INTO Messages (Receiver, Message) values('%s','%s')", TargetGuildMaster.c_str(), g_pStringPool->c_str(375 )); // 탈퇴수락한뒤에 나 혼자 남아있다면? Result *pResult = pStmt->executeQuery("SELECT count(*) FROM GuildUnionMember WHERE UnionID='%u'", pUnion->getUnionID()); pResult->next(); if(pResult->getInt(1) == 0) { //cout << "연합탈퇴가 수락된후..남아있는 멤버가 없으면..연합장이면 안되니까..지워버린다" << endl; pStmt->executeQuery("DELETE FROM GuildUnionInfo WHERE UnionID='%u'", pUnion->getUnionID()); GuildUnionManager::Instance().reload(); } SAFE_DELETE(pStmt); } END_DB(pStmt) // 연합탈퇴하면 연합정보가 바뀌었을 수도 있다. 갱신된 정보를 다시 보내준다. Creature *pCreature = NULL; pCreature = pGamePlayer->getCreature(); if(pCreature == NULL) return; GCModifyInformation gcModifyInformation; makeGCModifyInfoGuildUnion(&gcModifyInformation, pCreature); pPlayer->sendPacket(&gcModifyInformation); // 통보받을 유저에게 길드Union정보를 다시 보낸다 Creature *pTargetCreature = NULL; __ENTER_CRITICAL_SECTION((*g_pPCFinder)) pTargetCreature = g_pPCFinder->getCreature_LOCKED(TargetGuildMaster); if (pTargetCreature==NULL) { g_pPCFinder->unlock(); return; } GCModifyInformation gcModifyInformation; makeGCModifyInfoGuildUnion(&gcModifyInformation, pTargetCreature); pTargetCreature->getPlayer()->sendPacket(&gcModifyInformation); __LEAVE_CRITICAL_SECTION((*g_pPCFinder)) sendGCOtherModifyInfoGuildUnion(pTargetCreature); sendGCOtherModifyInfoGuildUnion(pCreature); // 다른 서버에 있는 놈들에게 변경사항을 알린다. GuildUnionManager::Instance().sendModifyUnionInfo(dynamic_cast<PlayerCreature*>(pTargetCreature)->getGuildID()); GuildUnionManager::Instance().sendModifyUnionInfo(dynamic_cast<PlayerCreature*>(pCreature)->getGuildID()); }
void CGRequestUnionInfoHandler::execute (CGRequestUnionInfo* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); SYSTEM_ASSERT(SYSTEM_GUILD); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature()); Assert(pPlayerCreature != NULL); #ifdef __OLD_GUILD_WAR__ GCSystemMessage gcSM; gcSM.setMessage("아직 지원되지 않는 기능입니다."); pGamePlayer->sendPacket(&gcSM); return; #endif GCGuildResponse gcGuildResponse; GuildUnion *pGuildUnion = GuildUnionManager::Instance().getGuildUnion(pPlayerCreature->getGuildID()); // 자기가 속한 길드가 연합에 가입되어있는지 찾는다 if (pGuildUnion == NULL) { gcGuildResponse.setCode(GuildUnionOfferManager::NOT_IN_UNION); pPlayer->sendPacket(&gcGuildResponse); return; } // Master 길드의 정보를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pGuildUnion->getMasterGuildID()); if (pGuild == NULL) { gcGuildResponse.setCode(GuildUnionOfferManager::NO_TARGET_UNION); pPlayer->sendPacket(&gcGuildResponse); return; } GCShowUnionInfo gcShowUnionInfo; if (pGuild->getState() == Guild::GUILD_STATE_ACTIVE ) { gcShowUnionInfo.getMasterGuildInfo().setGuildID(pGuild->getID()); gcShowUnionInfo.getMasterGuildInfo().setGuildName(pGuild->getName()); gcShowUnionInfo.getMasterGuildInfo().setGuildState(pGuild->getState()); gcShowUnionInfo.getMasterGuildInfo().setGuildMaster(pGuild->getMaster()); gcShowUnionInfo.getMasterGuildInfo().setGuildMemberCount(pGuild->getActiveMemberCount()); gcShowUnionInfo.getMasterGuildInfo().setGuildIntro(pGuild->getIntro()); gcShowUnionInfo.getMasterGuildInfo().setJoinFee(0); } list<GuildID_t> gList = pGuildUnion->getGuildList(); list<GuildID_t>::iterator itr = gList.begin(); for (; itr != gList.end() ; ++itr ) { Guild* pGuild2 = g_pGuildManager->getGuild(*itr); if(pGuild2 != NULL) { SingleGuildInfo *GuildInfo = new SingleGuildInfo; GuildInfo->setGuildID(pGuild2->getID()); GuildInfo->setGuildName(pGuild2->getName()); GuildInfo->setGuildState(pGuild2->getState()); GuildInfo->setGuildMaster(pGuild2->getMaster()); GuildInfo->setGuildMemberCount(pGuild2->getActiveMemberCount()); GuildInfo->setGuildIntro(pGuild2->getIntro()); GuildInfo->setJoinFee(0); gcShowUnionInfo.addGuildInfoList(GuildInfo); } } pPlayer->sendPacket(&gcShowUnionInfo); #endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH }
void CGSelectGuildHandler::execute (CGSelectGuild* pPacket , Player* pPlayer) throw(Error) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); SYSTEM_ASSERT(SYSTEM_GUILD); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = dynamic_cast<Creature*>(pGamePlayer->getCreature()); // 선택한 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPacket->getGuildID()); //try { Assert(pGuild != NULL); } catch (Throwable& t ) { //cout << "GuildID:" << (int)(pPacket->getGuildID()) << endl; //} //cout << "GuildCount:" << (int)(g_pGuildManager->getGuilds().size()) << endl; if (pGuild==NULL) { return; } if (pGuild->getState() == Guild::GUILD_STATE_ACTIVE ) { GCShowGuildInfo gcShowGuildInfo; gcShowGuildInfo.setGuildID(pGuild->getID()); gcShowGuildInfo.setGuildName(pGuild->getName()); gcShowGuildInfo.setGuildState(pGuild->getState()); gcShowGuildInfo.setGuildMaster(pGuild->getMaster()); gcShowGuildInfo.setGuildMemberCount(pGuild->getActiveMemberCount()); gcShowGuildInfo.setGuildIntro(pGuild->getIntro()); gcShowGuildInfo.setJoinFee(0); pPlayer->sendPacket(&gcShowGuildInfo); //cout << gcShowGuildInfo.toString() << endl; } else if (pGuild->getState() == Guild::GUILD_STATE_WAIT ) { GCShowWaitGuildInfo gcShowWaitGuildInfo; gcShowWaitGuildInfo.setGuildID(pGuild->getID()); gcShowWaitGuildInfo.setGuildName(pGuild->getName()); gcShowWaitGuildInfo.setGuildState(pGuild->getState()); gcShowWaitGuildInfo.setGuildMaster(pGuild->getMaster()); gcShowWaitGuildInfo.setGuildMemberCount(pGuild->getActiveMemberCount()); gcShowWaitGuildInfo.setGuildIntro(pGuild->getIntro()); if (pCreature->isSlayer()) gcShowWaitGuildInfo.setJoinFee(REQUIRE_SLAYER_SUBMASTER_GOLD); else if (pCreature->isVampire()) gcShowWaitGuildInfo.setJoinFee(REQUIRE_VAMPIRE_SUBMASTER_GOLD); else if (pCreature->isOusters()) gcShowWaitGuildInfo.setJoinFee(REQUIRE_OUSTERS_SUBMASTER_GOLD); HashMapGuildMember& Members = pGuild->getMembers(); HashMapGuildMemberConstItor itr = Members.begin(); for (; itr != Members.end(); itr++ ) gcShowWaitGuildInfo.addMember(itr->first); pPlayer->sendPacket(&gcShowWaitGuildInfo); //cout << gcShowWaitGuildInfo.toString() << endl; } #endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH }