//---------------------------------------------------------------------- // // GSModifyGuildMemberHandler::execute() // //---------------------------------------------------------------------- void GSModifyGuildMemberHandler::execute (GSModifyGuildMember* pPacket, Player* pPlayer ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __SHARED_SERVER__ //cout << "GSModifyGuildMember received" << endl; Assert(pPacket != NULL); // 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPacket->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; // 보낸사람이 길드 마스터인지 확인한다. (길드 마스터를 바꿀때는 예외 ) if (pGuild->getMaster() != pPacket->getSender() && pPacket->getGuildMemberRank() != GuildMember::GUILDMEMBER_RANK_MASTER ) return; if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_WAIT && pPacket->getGuildMemberRank() == GuildMember::GUILDMEMBER_RANK_NORMAL ) { /////////////////////////////////////////////////////////////////////////////////////// // 길드 멤버 가입을 승인한 경우, DB에 Slayer, Vampire, Ousters 테이블의 GuildID 를 바꾼다. /////////////////////////////////////////////////////////////////////////////////////// Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN" )->createStatement(); if (pGuild->getRace() == Guild::GUILD_RACE_SLAYER ) { pStmt->executeQuery("UPDATE Slayer SET GuildID = %d WHERE Name = '%s'", pGuild->getID(), pGuildMember->getName().c_str()); pStmt->executeQuery("INSERT INTO Messages (Receiver, Message ) VALUES ('%s', '%s' )", pGuildMember->getName().c_str(), g_pStringPool->c_str(STRID_TEAM_JOIN_ACCEPT )); } else if (pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE ) { pStmt->executeQuery("UPDATE Vampire SET GuildID = %d WHERE Name = '%s'", pGuild->getID(), pGuildMember->getName().c_str()); pStmt->executeQuery("INSERT INTO Messages (Receiver, Message ) VALUES ('%s', '%s' )", pGuildMember->getName().c_str(), g_pStringPool->c_str(STRID_CLAN_JOIN_ACCEPT )); } else if (pGuild->getRace() == Guild::GUILD_RACE_OUSTERS ) { pStmt->executeQuery("UPDATE Ousters SET GuildID = %d WHERE Name = '%s'", pGuild->getID(), pGuildMember->getName().c_str()); pStmt->executeQuery("INSERT INTO Messages (Receiver, Message ) VALUES ('%s', '%s' )", pGuildMember->getName().c_str(), g_pStringPool->c_str(STRID_CLAN_JOIN_ACCEPT )); } SAFE_DELETE(pStmt); } END_DB(pStmt) // Guild Member 정보를 변경한다. pGuild->modifyMemberRank(pGuildMember->getName(), pPacket->getGuildMemberRank()); }
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 }
//---------------------------------------------------------------------- // // SGModifyGuildOKHandler::execute() // //---------------------------------------------------------------------- void SGModifyGuildOKHandler::execute (SGModifyGuildOK* pPacket ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Guild* pGuild = g_pGuildManager->getGuild(pPacket->getGuildID()); Assert(pGuild != NULL); if (pGuild->getState() == Guild::GUILD_STATE_WAIT && pPacket->getGuildState() == Guild::GUILD_STATE_ACTIVE ) { ///////////////////////////////////////////////////////////// // 존 추가 ///////////////////////////////////////////////////////////// /* if (pGuild->getServerGroupID() == g_pConfig->getPropertyInt("ServerID" ) ) { // 이 게임 서버에 길드 아지트를 만든다. ////////////// // Zone Info ////////////// ZoneInfo* pZoneInfo = new ZoneInfo(); pZoneInfo->setZoneID(pGuild->getZoneID()); pZoneInfo->setZoneGroupID(2); pZoneInfo->setZoneType("NPC_SHOP"); pZoneInfo->setZoneLevel(0); pZoneInfo->setZoneAccessMode("PUBLIC"); pZoneInfo->setZoneOwnerID(""); pZoneInfo->setPayPlay(""); if (pGuild->getRace() == Guild::GUILD_RACE_SLAYER ) { pZoneInfo->setSMPFilename("team_hdqrs.smp"); pZoneInfo->setSSIFilename("team_hdqrs.ssi"); string Name = "team - " + pGuild->getName(); pZoneInfo->setFullName(Name); pZoneInfo->setShortName(Name); } else if (pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE ) { pZoneInfo->setSMPFilename("clan_hdqrs.smp"); pZoneInfo->setSSIFilename("clan_hdqrs.ssi"); string Name = "clan - " + pGuild->getName(); pZoneInfo->setFullName(Name); pZoneInfo->setShortName(Name); } g_pZoneInfoManager->addZoneInfo(pZoneInfo); ///////// // Zone ///////// Zone* pZone = new Zone(pGuild->getZoneID()); Assert(pZone != NULL); ZoneGroup* pZoneGroup = g_pZoneGroupManager->getZoneGroup(2); Assert(pZoneGroup != NULL); pZone->setZoneGroup(pZoneGroup); pZoneGroup->addZone(pZone); pZone->init(); } */ // 정식 길드로 변경 pGuild->setState(Guild::GUILD_STATE_ACTIVE); HashMapGuildMember& Members = pGuild->getMembers(); HashMapGuildMemberItor itr = Members.begin(); for (; itr != Members.end(); itr++ ) { GuildMember* pGuildMember = itr->second; // 멤버가 접속해 있다면 __ENTER_CRITICAL_SECTION((*g_pPCFinder)) Creature* pCreature = g_pPCFinder->getCreature_LOCKED(pGuildMember->getName()); if (pCreature != NULL && pCreature->isPC() ) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); // 길드 아이디를 바꿔준다. pPlayerCreature->setGuildID(pGuild->getID()); // 클라이언트에 길드 아이디가 바꼈음을 알려준다. GCModifyGuildMemberInfo gcModifyGuildMemberInfo; gcModifyGuildMemberInfo.setGuildID(pGuild->getID()); gcModifyGuildMemberInfo.setGuildName(pGuild->getName()); gcModifyGuildMemberInfo.setGuildMemberRank(pGuildMember->getRank()); pPlayer->sendPacket(&gcModifyGuildMemberInfo); // 주위에 알린다. Zone* pZone = pCreature->getZone(); Assert(pZone != NULL); GCOtherModifyInfo gcOtherModifyInfo; gcOtherModifyInfo.setObjectID(pCreature->getObjectID()); gcOtherModifyInfo.addShortData(MODIFY_GUILDID, pPlayerCreature->getGuildID()); pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcOtherModifyInfo, pCreature); // 정식 길드가 되었음을 알림 Statement* pStmt = NULL; Result* pResult = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN" )->createStatement(); pResult = pStmt->executeQuery("SELECT Message FROM Messages WHERE Receiver = '%s'", pGuildMember->getName().c_str()); while (pResult->next() ) { GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage(pResult->getString(1)); pPlayer->sendPacket(&gcSystemMessage); } pStmt->executeQuery("DELETE FROM Messages WHERE Receiver = '%s'", pGuildMember->getName().c_str()); SAFE_DELETE(pStmt); } END_DB(pStmt) } __LEAVE_CRITICAL_SECTION((*g_pPCFinder)) }
//---------------------------------------------------------------------- // // SGDeleteGuildOKHandler::execute() // //---------------------------------------------------------------------- void SGDeleteGuildOKHandler::execute (SGDeleteGuildOK* pPacket ) throw(ProtocolException , Error ) { __BEGIN_TRY #ifdef __GAME_SERVER__ // 길드 아지트에 있는 멤버를 warp 시킨다. // 길드 아지트를 삭제한다. // 멤버 warp와 길드 아지트 삭제 시 다른 쓰레드에서 ZoneGroup Thread 내부에서 일어나게 해야 별탈이 없을 듯 하다. // 일단은 걍 둔다. Portal 이 막히므로 다시 들어갈 수 없을 것이다. Assert(pPacket != NULL); // 길드를 가져온다. Guild* pGuild = g_pGuildManager->getGuild(pPacket->getGuildID()); try { Assert(pGuild != NULL); } catch (Throwable& ) { return; } // 길드 활동 중인 상태에서의 해체인지 대기 중인 상태에서의 해체인지 구별한다. if (pGuild->getState() == Guild::GUILD_STATE_ACTIVE ) { HashMapGuildMember& Members = pGuild->getMembers(); HashMapGuildMemberItor itr = Members.begin(); for (; itr != Members.end(); itr++ ) { GuildMember* pGuildMember = itr->second; // 접속해 있으면 __ENTER_CRITICAL_SECTION((*g_pPCFinder)) Creature* pCreature = g_pPCFinder->getCreature_LOCKED(pGuildMember->getName()); if (pCreature != NULL && pCreature->isPC() ) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); // Slayer, Vampire 의 길드 아이디를 바꾼다. if (pPlayerCreature->isSlayer() ) { pPlayerCreature->setGuildID(99); // 슬레이어 가입안한 상태의 길드 ID // 클라이언트에 길드 아이디가 바꼈음을 알린다. GCModifyGuildMemberInfo gcModifyGuildMemberInfo; gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID()); gcModifyGuildMemberInfo.setGuildName(""); gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY); pPlayer->sendPacket(&gcModifyGuildMemberInfo); } else if (pPlayerCreature->isVampire() ) { pPlayerCreature->setGuildID(0); // 뱀파이어 가입안한 상태의 길드 ID // 클라이언트에 길드 아이디가 바꼈음을 알린다. GCModifyGuildMemberInfo gcModifyGuildMemberInfo; gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID()); gcModifyGuildMemberInfo.setGuildName(""); gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY); pPlayer->sendPacket(&gcModifyGuildMemberInfo); } else if (pPlayerCreature->isOusters() ) { pPlayerCreature->setGuildID(66); // 아우스터즈 가입안한 상태의 길드 ID // 클라이언트에 길드 아이디가 바꼈음을 알린다. GCModifyGuildMemberInfo gcModifyGuildMemberInfo; gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID()); gcModifyGuildMemberInfo.setGuildName(""); gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY); pPlayer->sendPacket(&gcModifyGuildMemberInfo); } // 주위에 클라이언트에 길드 아이디가 바꼈음을 알린다. GCOtherModifyInfo gcOtherModifyInfo; gcOtherModifyInfo.setObjectID(pCreature->getObjectID()); gcOtherModifyInfo.addShortData(MODIFY_GUILDID, pPlayerCreature->getGuildID()); Zone* pZone = pCreature->getZone(); Assert(pZone != NULL); pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcOtherModifyInfo, pCreature); } __LEAVE_CRITICAL_SECTION((*g_pPCFinder)) // Guild Member 객체를 삭제한다. SAFE_DELETE(pGuildMember); } // 길드 멤버 맵을 삭제한다. Members.clear(); // 길드 매니저에서 길드를 삭제한다. g_pGuildManager->deleteGuild(pGuild->getID()); // 길드 객체를 삭제한다. SAFE_DELETE(pGuild); } else if (pGuild->getState() == Guild::GUILD_STATE_WAIT ) { HashMapGuildMember& Members = pGuild->getMembers(); HashMapGuildMemberItor itr = Members.begin(); Statement* pStmt = NULL; Result* pResult = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN" )->createStatement(); for (; itr != Members.end(); itr++ ) { GuildMember* pGuildMember = itr->second; // 접속해 있으면 __ENTER_CRITICAL_SECTION((*g_pPCFinder)) Creature* pCreature = g_pPCFinder->getCreature_LOCKED(pGuildMember->getName()); if (pCreature != NULL && pCreature->isPC() ) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); // 등록비를 환불한다. Gold_t Gold = pPlayerCreature->getGold(); if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_MASTER ) { Gold = min((uint64_t)(Gold + RETURN_SLAYER_MASTER_GOLD), (uint64_t)2000000000); } else if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_SUBMASTER ) { Gold = min((uint64_t)(Gold + RETURN_SLAYER_SUBMASTER_GOLD), (uint64_t)2000000000); } pPlayerCreature->setGoldEx(Gold); GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_GOLD, Gold); pPlayer->sendPacket(&gcModifyInformation); // 메시지를 보낸다. pResult = pStmt->executeQuery("SELECT Message FROM Messages WHERE Receiver = '%s'", pCreature->getName().c_str()); while (pResult->next() ) { GCSystemMessage message; message.setMessage(pResult->getString(1)); pPlayer->sendPacket(&message); } pStmt->executeQuery("DELETE FROM Messages WHERE Receiver = '%s'", pCreature->getName().c_str()); } __LEAVE_CRITICAL_SECTION((*g_pPCFinder)) // 길드 멤버 객체를 삭제한다. SAFE_DELETE(pGuildMember); } // 길드 멤버 해쉬 맵을 지운다. Members.clear(); // 길드 매니저에서 길드를 삭제한다. g_pGuildManager->deleteGuild(pGuild->getID()); GuildUnionManager::Instance().removeMasterGuild(pGuild->getID()); // 길드 객체를 삭제한다. SAFE_DELETE(pGuild); SAFE_DELETE(pStmt); } END_DB(pStmt) }
//---------------------------------------------------------------------- // // SGAddGuildMemberOKHandler::execute() // //---------------------------------------------------------------------- void SGAddGuildMemberOKHandler::execute (SGAddGuildMemberOK* pPacket ) throw(ProtocolException , Error ) { __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ // 길드 멤버 object 를 만든다. GuildMember* pGuildMember = new GuildMember(); pGuildMember->setGuildID(pPacket->getGuildID()); pGuildMember->setName(pPacket->getName()); pGuildMember->setRank(pPacket->getGuildMemberRank()); // 길드에 추가한다. Guild* pGuild = g_pGuildManager->getGuild(pGuildMember->getGuildID()); pGuild->addMember(pGuildMember); // 멤버에게 메세지를 보낸다. __ENTER_CRITICAL_SECTION((*g_pPCFinder)) Creature* pCreature = g_pPCFinder->getCreature_LOCKED(pGuildMember->getName()); if (pCreature != NULL && pCreature->isPC() ) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_MASTER || pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_SUBMASTER ) // 길드마스터나 서브마스터일 경우 { PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert(pPlayerCreature != NULL); Gold_t Fee; if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_MASTER ) Fee = REQUIRE_SLAYER_MASTER_GOLD; else if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_SUBMASTER ) Fee = REQUIRE_SLAYER_SUBMASTER_GOLD; else Fee = 0; Gold_t CurMoney = pPlayerCreature->getGold(); if (CurMoney < Fee ) { // 큰일났군 CurMoney = 0; } else CurMoney -= Fee; pPlayerCreature->setGoldEx(CurMoney); if (Fee != 0 ) { GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_GOLD, CurMoney); // 바뀐정보를 클라이언트에 보내준다. pPlayer->sendPacket(&gcModifyInformation); } // 길드 가입 메시지를 보여준다. GCSystemMessage gcSystemMessage; if (pGuild->getRace() == Guild::GUILD_RACE_SLAYER ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_TEAM_JOIN_ACCEPTED )); else if (pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CLAN_JOIN_ACCEPTED )); else if (pGuild->getRace() == Guild::GUILD_RACE_OUSTERS ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CLAN_JOIN_ACCEPTED )); pPlayer->sendPacket(&gcSystemMessage); } else if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_WAIT ) { // 길드 가입 신청 메시지를 보낸다. GCSystemMessage gcSystemMessage; if (pGuild->getRace() == Guild::GUILD_RACE_SLAYER ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_TEAM_JOIN_TRY )); else if (pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CLAN_JOIN_TRY )); else if (pGuild->getRace() == Guild::GUILD_RACE_OUSTERS ) gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CLAN_JOIN_TRY )); pPlayer->sendPacket(&gcSystemMessage); } } else { // 접속이 안되어 있다. // 마스터나 서브마스터일 경우 // DB 에서 돈을 까도록 한다. if ((pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_MASTER || pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_SUBMASTER ) // 길드마스터나 서브마스터일 경우 && pPacket->getServerGroupID() == g_pConfig->getPropertyInt("ServerID" ) ) // 이 게임 서버에서 추가한 길드원인가? { Gold_t Fee; if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_MASTER ) Fee = REQUIRE_SLAYER_MASTER_GOLD; else if (pGuildMember->getRank() == GuildMember::GUILDMEMBER_RANK_SUBMASTER ) Fee = REQUIRE_SLAYER_SUBMASTER_GOLD; else Fee = 0; string table = ""; if (pGuild->getRace() == Guild::GUILD_RACE_SLAYER ) { table = "Slayer"; } else if (pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE ) { table = "Vampire"; } else if (pGuild->getRace() == Guild::GUILD_RACE_OUSTERS ) { table = "Ousters"; } if (table != "" && Fee != 0 ) { Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery("UPDATE %s SET Gold = IF (%u > Gold , 0, Gold - %u ) WHERE Name = '%s'", table.c_str(), Fee, Fee, pGuildMember->getName().c_str()); } END_DB(pStmt) } }