#include "stdafx.h" #include "GuildManager.h" #include "GameResourceManager.h" #include "ChatManager.h" #include "GameUIManager.h" #include "ObjectManager.h" #include "Hero.h" #include "UIMsgboxEvent.h" #include "Npc_Common.h" #include "GuildWindow.h" #include "ImageReader.h" #include "EngineFile.h" #include "FileSystem.h" cGuildManager* cGuildManager::mpSingleton = 0; cGuildManager::cGuildManager() : mConnectCount(0) , mTempNpcIndex(0) , mTempCutPlayerIdx(0) , mpPreviewMark(0) { assert( mpSingleton == 0 && "bad singleton!" ); mpSingleton = this; ::memset( &mGuildInfo, 0, sizeof(mGuildInfo) ); ::memset( &mMarkBuffer, 0, sizeof(mMarkBuffer) ); mGuildInfoInit = false; } cGuildManager::~cGuildManager() { { cGuildUserMap::cIterator i = mGuildUserMap.Begin(); cGuildUserMap::cIterator end = mGuildUserMap.End(); for( ; i != end; ++i ) { sGuildUserInfo* p = (sGuildUserInfo*)(i->mSecond); SAFE_DELETE( p ); } mGuildUserMap.Clear(); } mMarkTextureMap.Clear(); /// mRequestMarkSet.Clear(); /// mpSingleton = 0; } bool cGuildManager::Init() { return CheckGuildMarkFolder(); } void cGuildManager::Open() { Clear(); } void cGuildManager::Close() { Clear(); } // ±æµå¿¡¼­ ³ª°¨ void cGuildManager::Clear() { if( HERO ) HERO->ClearGuild(); // cGuildWindow* guildWindow = GAMEUI->GetGuildWindow(); if( guildWindow ) { guildWindow->Clear(); guildWindow->HideMark(); } // ::memset( &mGuildInfo, 0, sizeof(mGuildInfo) ); mConnectCount = 0; /// cGuildUserMap::cIterator i = mGuildUserMap.Begin(); cGuildUserMap::cIterator end = mGuildUserMap.End(); for( ; i != end; ++i ) { sGuildUserInfo* p = (sGuildUserInfo*)(i->mSecond); if( p ) { if( HERO->GetObjectID() == p->characterIdx ) continue; cPlayer* player = OBJECTMANAGER->GetPlayer( p->characterIdx ); if( player ) { player->UpdateNameCardTextValue(); } } SAFE_DELETE( p ); } mGuildUserMap.Clear(); ClearTempData(); mTempCutPlayerIdx = 0; // mpPreviewMark = 0; } void cGuildManager::ClearTempData() { mTempName.Clear(); mTempNpcIndex = 0; } bool cGuildManager::CheckGuildMarkFolder() { if( ::FileExist( "GuildMark" ) == false ) { ::CreateDirectory( L"GuildMark", 0 ); } return true; } void cGuildManager::ResGuildCreate( MSG_RES_NPC_GUILD_CREATE* pmsg ) { cStringT str; switch( pmsg->ErrorCode ) { case ERROR_NPC_GUILD_CREATE_SUCESS: // ¼º°ø str.Format( GAMERESOURCEMAN->GetGameText( 1200 ), (LPCTSTR)mTempName.Cstr() ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, (LPCTSTR)str.Cstr(), GAMERESOURCEMAN->GetGameText( 301 ) // ¾Ë¸² ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); break; case ERROR_NPC_GUILD_CREATE_FAIL: // ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1201 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_NPC_GUILD_CREATE_CONDITION: // ½ÇÆÐ - °¡ÀÔÁ¶°Ç ¾ÈµÊ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1232 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_NPC_GUILD_CREATE_ALREADY: // ½ÇÆÐ - ÀÌ¹Ì ±æµå °¡ÀÔÁß UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1202 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_NPC_GUILD_CREATE_ERRORNAME: // ½ÇÆÐ - ±æµå¸í ¾ø°Å³ª 12ÀÚ ³ÑÀ½ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1203 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_NPC_GUILD_CREATE_EXISTNAME: // ½ÇÆÐ - ±æµå¸í Áߺ¹ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1204 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_NPC_GUILD_CREATE_NPC: // ½ÇÆÐ - npcÀÎÁõ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 420 ), GAMERESOURCEMAN->GetGameText(301) ); break; } ClearTempData(); } void cGuildManager::NetworkMsgParser( char* msg ) { MSGROOT* tempMsg = (MSGROOT*)msg; cStringT str; switch( tempMsg->Protocol ) { case NM_GUILD_LIST_SYN: { MSG_SYN_GUILD_LIST* pmsg = (MSG_SYN_GUILD_LIST*)msg; /// ÃʱâÈ­ Clear(); /// ¼¼ÆÃ mGuildInfo = pmsg->data; sGuildUserInfo* user = pmsg->table; for( unsigned char i = 0; i < pmsg->rowCount; ++i, ++user ) { AddGuildUser( user ); } sGuildUserInfo* info = (sGuildUserInfo*)mGuildUserMap.GetAt( HERO->GetObjectID() ); if( info ) { /// ±âº»À¸·Î ä³Î ¼¼ÆÃ info->channelNum = HERO->GetChannelNum(); info->mapnum = (short)HERO->GetMapNum(); HERO->SetGuild( mGuildInfo.idx, info->position, mGuildInfo.name, mGuildInfo.markRegistDate, mGuildInfo.useMark ); } // °¢ ±æµåÀ¯ÀúÀÇ ÅØ½ºÆ® °»½Å cGuildUserMap::cIterator i = mGuildUserMap.Begin(); cGuildUserMap::cIterator end = mGuildUserMap.End(); for( ; i != end; ++i ) { sGuildUserInfo* playerInfo = (sGuildUserInfo*)(i->mSecond); if( playerInfo && playerInfo->characterIdx != HERO->GetObjectID() ) { cPlayer* player = OBJECTMANAGER->GetPlayer( playerInfo->characterIdx ); if( player ) { player->UpdateNameCardTextValue(); } } } /// UI °»½Å UpdateInfoSheet(); /// int len = ::_tcslen( mGuildInfo.notice ); if( len > 0 ) { if( mGuildInfoInit == false ) { cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 1251 ), mGuildInfo.notice ); CHATMANAGER->AddChatMsg( (LPCTSTR)str.Cstr(), eCHAT_GUILD_NOTICE ); } /// cGuildWindow* win = GAMEUI->GetGuildWindow(); if( win ) win->UpdateGuildNotice( mGuildInfo.notice ); } if( mGuildInfo.useMark == true ) { /// ±æµåÀ©µµ¿ì¿¡ ¸¶Å©µî·Ï NiTexture* tex = CheckMarkVersion( mGuildInfo.idx, mGuildInfo.markRegistDate ); if( tex ) { cGuildWindow* win = GAMEUI->GetGuildWindow(); if( win ) win->ChangeMark( tex ); } else { // Àç¿äû GuildMarkRequest( mGuildInfo.idx ); } } mGuildInfoInit = true; } break; case NM_GUILD_CREATEDATA_RES: { /// ±æµå »ý¼º MSG_RES_GUILD_CREATEDATA* pmsg = (MSG_RES_GUILD_CREATEDATA*)msg; /// ÃʱâÈ­ Clear(); /// 1. ±æµå µ¥ÀÌÅÍ ¼¼ÆÃ mGuildInfo.idx = pmsg->idx; mGuildInfo.masterIndex = HERO->GetObjectID(); mGuildInfo.position = eGUILD_MASTER; mConnectCount = 1; ::Sstrncpy( mGuildInfo.name, MAX_GUILDNAME_BUFFER_SIZE, pmsg->name, MAX_GUILDNAME_SIZE ); ::Sstrncpy( mGuildInfo.masterName, MAX_NAME_BUFFER_SIZE, HERO->GetName(), MAX_NAME_SIZE ); /// 2. À¯Àú¸®½ºÆ® ¼¼ÆÃ sGuildUserInfo* userInfo = new sGuildUserInfo; userInfo->characterIdx = HERO->GetObjectID(); userInfo->level = HERO->GetLevel(); userInfo->job = (unsigned short)HERO->GetJob(); userInfo->mapnum = (short)HERO->GetMapNum(); userInfo->position = eGUILD_MASTER; userInfo->channelNum = HERO->GetChannelNum(); ::Sstrncpy( userInfo->name, MAX_NAME_BUFFER_SIZE, HERO->GetName(), MAX_NAME_SIZE ); if( mGuildUserMap.Insert( userInfo->characterIdx, userInfo ) == false ) { assert( 0 && "failed to insert guild user" ); } /// UI ¼¼ÆÃ UpdateInfoSheet(); /// HERO->SetGuild( mGuildInfo.idx, mGuildInfo.position, mGuildInfo.name, mGuildInfo.markRegistDate, false ); } break; case NM_GUILD_ADD_RES: { // ±æµåÃÊ´ë °á°ú ( Ãë¼Ò°¡´ÉÇÏ°Ô ÇØÁÖ¾î¾ßÇÔ ) MSG_RES_GUILD_ADD* pmsg = (MSG_RES_GUILD_ADD*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_ADD_SUCCESS: // ¼º°ø - ±æµå ½Åû ¼º°ø { cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 1216 ), (LPCTSTR)mTempAddName.Cstr() ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } break; case ERROR_GUILD_ADD_FAIL: // ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1206 ) ); break; case ERROR_GUILD_ADD_REQUEST: // ½ÇÆÐ - ÀÌ¹Ì ½ÅûÁßÀÓ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1207 ) ); break; case ERROR_GUILD_ADD_NOTEXIST: // ½ÇÆÐ - »ó´ë°¡ Á¸ÀçÇÏÁö ¾ÊÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1208 ) ); break; case ERROR_GUILD_ADD_HAVEGUILD: // ½ÇÆÐ - »ó´ë°¡ ÀÌ¹Ì ±æµå °¡ÀÔÁß CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1209 ) ); break; case ERROR_GUILD_ADD_MAXGUILD: // ½ÇÆÐ - ±æµå Àοø Á¦ÇÑ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1210 ) ); break; case ERROR_GUILD_ADD_REFUSE: // ½ÇÆÐ - »ó´ë¹æ °¡ÀÔ °ÅÀý CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1218 ) ); break; case ERROR_GUILD_ADD_REFUSETIME: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1269 ) ); break; case ERROR_GUILD_ADD_STATUSHERO: // ½ÇÆÐ - ½Åû°¡´É »óÅ ¾Æ´Ô CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1267 ) ); break; case ERROR_GUILD_ADD_STATUS: // ½ÇÆÐ - »ó´ë¹æÀÌ ½Åû¹Þ±â °¡´É »óÅ ¾Æ´Ô CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1268 ) ); break; } mTempAddName.Clear(); } break; case NM_GUILD_ADD_SYN: { /// ´Ù¸¥ À¯Àú·ÎºÎÅÍ ±æµåÃÊ´ë ¹ÞÀ½ MSG_SYN_GUILD_ADD* pmsg = (MSG_SYN_GUILD_ADD*)msg; str.Format( GAMERESOURCEMAN->GetGameText( 1215 ), pmsg->name, pmsg->guildName ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_GUILD_ADD, eSKIN_YESNO, (LPCTSTR)str.Cstr(), // ±æµå¿äû ¸Þ½ÃÁö GAMERESOURCEMAN->GetGameText( 1214 ), // ±æµå ¿äû 0, 0, GUILD_WAIT_TIME, false, false ); } break; case NM_GUILD_REPLY_RES: { /// ±æµåÃÊ´ë ´äº¯¿¡ ´ëÇÑ °á°ú MSG_RES_GUILD_REPLY* pmsg = (MSG_RES_GUILD_REPLY*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_ADDREPLY_SUCCESS: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1211 ) ); break; case ERROR_GUILD_ADDREPLY_FAIL: case ERROR_GUILD_ADDREPLY_EXIST: case ERROR_GUILD_ADDREPLY_FAILUPDATE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1212 ) ); break; case ERROR_GUILD_ADDREPLY_REFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1213 ) ); break; case ERROR_GUILD_ADDREPLY_REFUSETIME: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1269 ) ); break; } } break; case NM_GUILD_USERADD_SYN: { /// Ãß°¡µÈ ±æµåÀ¯Àú Á¤º¸ MSG_SYN_GUILD_USERADD* pmsg = (MSG_SYN_GUILD_USERADD*)msg; // ±æµå À¯Àú Ãß°¡ AddGuildUser( &pmsg->user ); // UI °»½Å UpdateInfoSheetByUser(); // str.Format( GAMERESOURCEMAN->GetGameText( 1217 ), &pmsg->user.name ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, str.Cstr() ); } break; case NM_GUILD_OUT_RES: { /// ±æµå Å»Åð MSG_RES_GUILD_OUT* pmsg = (MSG_RES_GUILD_OUT*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_OUT_SUCCESS: { // Å»Å𠼺°ø Clear(); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1219 ) ); } break; case ERROR_GUILD_OUT_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1220 ) ); break; case ERROR_GUILD_OUT_MASTER: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1221 ) ); break; } } break; case NM_GUILD_OUT_SYN: { /// ±æµå Å»Åð MSG_SYN_GUILD_OUT* pmsg = (MSG_SYN_GUILD_OUT*)msg; cGuildUserMap::cIterator i = mGuildUserMap.Find( pmsg->characterIdx ); if( i != mGuildUserMap.End() ) { sGuildUserInfo* user = (sGuildUserInfo*)(i->mSecond); // Å»Åð ¾Ë¸² str.Format( GAMERESOURCEMAN->GetGameText( 1222 ), user->name ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); // »èÁ¦ SAFE_DELETE( user ); mGuildUserMap.Erase( i ); // UI °»½Å UpdateInfoSheetByUser(); } } break; case NM_GUILD_CUT_RES: { /// ±æµå¿ø Ãß¹æ¿äû °á°ú MSG_RES_GUILD_CUT* pmsg = (MSG_RES_GUILD_CUT*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_CUT_SUCCESS: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1256 ) ); break; case ERROR_GUILD_CUT_FAIL: // ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1223 ) ); break; case ERROR_GUILD_CUT_MASTER: // ½ÇÆÐ - ±æµåÀ常 Ã߹氡´É CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1224 ) ); break; } mTempCutPlayerIdx = 0; } break; case NM_GUILD_CUT_SYN: { /// ÀÚ±âÀÚ½ÅÀÌ Ãß¹æµÊ Clear(); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1225 ) ); } break; case NM_GUILD_USERCUT_SYN: { /// ±æµå¿øÀÌ Ãß¹æµÊ MSG_SYN_GUILD_USERCUT* pmsg = (MSG_SYN_GUILD_USERCUT*)msg; cGuildUserMap::cIterator i = mGuildUserMap.Find( pmsg->characterIdx ); if( i != mGuildUserMap.End() ) { sGuildUserInfo* user = (sGuildUserInfo*)(i->mSecond); // Å»Åð ¾Ë¸² str.Format( GAMERESOURCEMAN->GetGameText( 1226 ), user->name ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); // »èÁ¦ SAFE_DELETE( user ); mGuildUserMap.Erase( i ); // UI °»½Å UpdateInfoSheetByUser(); } } break; case NM_GUILD_DELETE_RES: { MSG_RES_GUILD_DELETE* pmsg = (MSG_RES_GUILD_DELETE*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_DELETE_SUCCESS: { // ±æµåÇØÃ¼ ¼º°ø Clear(); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1230 ) ); } break; case ERROR_GUILD_DELETE_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1229 ) ); break; case ERROR_GUILD_DELETE_MASTER: // ½ÇÆÐ - ±æµåÀ常 ÇØÃ¼ °¡´É CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1227 ) ); break; case ERROR_GUILD_DELETE_USEREXIST: // ½ÇÆÐ - ±æµåÀ¯Àú°¡ ³²¾ÆÀÖÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1228 ) ); break; } } break; case NM_GUILD_UPDATE_SYN: { /// ½Ã°£¿¡ ÀÇÇÑ ±æµå Á¤º¸ °»½Å MSG_SYN_GUILD_UPDATE* pmsg = (MSG_SYN_GUILD_UPDATE*)msg; // °»½Å sGuildUserUpdate* data = pmsg->table; for( unsigned char i = 0; i < pmsg->rowCount; ++i, ++data ) { sGuildUserInfo* user = (sGuildUserInfo*)mGuildUserMap.GetAt( data->characterIdx ); if( user ) { user->level = data->level; user->job = data->job; user->mapnum = data->mapnum; user->channelNum = data->channelNum; } } /// UI °»½Å UpdateInfoSheetByUser(); } break; case NM_GUILD_GIVEPOSITION_RES: { /// Á÷À§º¯°æ ¿äû °á°ú MSG_RES_GUILD_GIVEPOSITION* pmsg = (MSG_RES_GUILD_GIVEPOSITION*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILD_GIVEPOSITION_SUCCESS: break; case ERROR_GUILD_GIVEPOSITION_FAIL: /// ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1244 ) ); break; case ERROR_GUILD_GIVEPOSITION_POSITION: /// ±ÇÇÑ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1245 ) ); break; } } break; case NM_GUILD_GIVEPOSITION_SYN: { /// Á÷À§ º¯°æµÊ MSG_SYN_GUILD_GIVEPOSITION* pmsg = (MSG_SYN_GUILD_GIVEPOSITION*)msg; /// º»ÀÎÀÌ ±æµåÀåÀΰæ¿ì if( pmsg->position == eGUILD_MASTER && HERO->GetObjectID() == mGuildInfo.masterIndex ) { mGuildInfo.position = eGUILD_GENERAL; } else if( pmsg->characterIdx == HERO->GetObjectID() ) { mGuildInfo.position = pmsg->position; } /// ±æµå À¯Àú ¸®½ºÆ® °»½Å sGuildUserInfo* newInfo = (sGuildUserInfo*)mGuildUserMap.GetAt( pmsg->characterIdx ); if( newInfo ) { newInfo->position = pmsg->position; /// »õ·Î¿î ±æµåÀåÀÏ °æ¿ì Ãß°¡ ó¸® if( pmsg->position == eGUILD_MASTER ) { /// ±âÁ¸ ±æµåÀåÀÇ Á÷À§ º¯°æ sGuildUserInfo* userInfo = (sGuildUserInfo*)mGuildUserMap.GetAt( mGuildInfo.masterIndex ); if( userInfo ) { userInfo->position = eGUILD_GENERAL; } else { assert(0); } /// »õ ±æµåÀå Á¤º¸ ¼¼ÆÃ mGuildInfo.masterIndex = pmsg->characterIdx; ::Sstrncpy( mGuildInfo.masterName, MAX_NAME_BUFFER_SIZE, newInfo->name, MAX_NAME_SIZE ); } /// º¯°æÁ¤º¸ ¾Ë¸² str.Format( GAMERESOURCEMAN->GetGameText( 1246 ), newInfo->name, GetTextIndex( pmsg->position ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } else { assert(0); } /// UI ¼¼ÆÃ UpdateInfoSheet(); // cGuildWindow* win = GAMEUI->GetGuildWindow(); if( win ) win->UpdateGuildNotice( mGuildInfo.notice ); /// HERO->SetGuildPosition( mGuildInfo.position ); } break; case NM_GUILD_NOTICE_RES: { MSG_RES_GUILD_NOTICE* pmsg = (MSG_RES_GUILD_NOTICE*)msg; if( pmsg->ErrorCode == ERROR_GUILD_NOTICE_FAIL ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1250 ) ); } else if( pmsg->ErrorCode == ERROR_GUILD_NOTICE_MASTER ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1265 ) ); } } break; case NM_GUILD_NOTICE_SYN: { MSG_SYN_GUILD_NOTICE* pmsg = (MSG_SYN_GUILD_NOTICE*)msg; /// ÀúÀå ::Sstrncpy( mGuildInfo.notice, MAX_GUILD_NOTICE_BUFFER_SIZE, pmsg->notice, MAX_GUILD_NOTICE_SIZE ); /// UIÃâ·Â UpdateNotice(); } break; case NM_GUILDMARK_UPDATE_RES: { /// ±æµå¸¶Å© º¯°æ °á°ú MSG_RES_GUILDMARK_UPDATE* pmsg = (MSG_RES_GUILDMARK_UPDATE*)msg; switch( pmsg->ErrorCode ) { case ERROR_GUILDMARK_UPDATE_FAIL: // ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1252 ) ); break; case ERROR_GUILDMARK_UPDATE_POSITION: // ±ÇÇÑ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1253 ) ); break; } // mpPreviewMark = 0; } break; case NM_GUILDMARK_SEND_RES: { MSG_RES_GUILDMARK_SEND* pmsg = (MSG_RES_GUILDMARK_SEND*)msg; /// »õ·Î¿î ±æµå¸¶Å© Á¤º¸ ¹ÞÀ½ if( pmsg->ErrorCode == ERROR_GUILDMARK_SEND_SUCCESS ) { /// ±æµå¸¶Å© ¹Þ¾Æ¼­ »õ ÆÄÀÏ·Î »ý¼º CheckGuildMarkFolder(); /// »õ ±æµå¸¶Å© ÆÄÀÏ »ý¼º( ¹öÀü ÀúÀå ) SaveGuildMark( pmsg->guildIndex, pmsg->registDate, pmsg->mark ); NiTexture* tex = CheckMarkVersion( pmsg->guildIndex, pmsg->registDate ); if( tex ) { /// ±æµå¸¶Å© °»½Å OBJECTMANAGER->ChangeGuildMarkRegistDate( pmsg->guildIndex, pmsg->registDate ); /// ±æµå UI¿¡ µî·Ï if( pmsg->guildIndex == HERO->GetGuildIndex() ) { HERO->ChangeGuildMarkRegistDate( pmsg->registDate, true ); cGuildWindow* win = GAMEUI->GetGuildWindow(); if( win ) win->ChangeMark( tex ); else assert(0); } } else { assert(0); } } /// ¿äû ¸ÊÀ¸·ÎºÎÅÍ »èÁ¦ mRequestMarkSet.Erase( pmsg->guildIndex ); } break; case NM_GUILDUSER_CONNECT_SYN: { MSG_SYN_GUILDUSER_CONNECT* pmsg = (MSG_SYN_GUILDUSER_CONNECT*)msg; sGuildUserInfo* pInfo = (sGuildUserInfo*)mGuildUserMap.GetAt( pmsg->characterIndex ); if( pInfo != NULL ) { cStringT str; unsigned long infoIndex = CHATMANAGER->GetInfoTextIndex(eCHAT_SYSTEM); CHATMANAGER->AddChatMsgEx( (LPCTSTR)GAMERESOURCEMAN->GetGameText( 11100 ), COLOR_WHITE, infoIndex, false, true ); CHATMANAGER->AddChatMsgEx( (LPCTSTR)pInfo->name, COLOR_GUILD_EX, 0, true, true ); unsigned long textIndex = ( pmsg->connect ) ? 11103 : 11104; CHATMANAGER->AddChatMsgEx( (LPCTSTR)GAMERESOURCEMAN->GetGameText( textIndex ), COLOR_WHITE, 0, true, true ); // Á¤º¸ ÀúÀå pInfo->channelNum = pmsg->channelNum; /// UI °»½Å UpdateInfoSheetByUser(); } else assert(0); } break; } } void cGuildManager::AddGuildUser( sGuildUserInfo* user ) { sGuildUserInfo* userInfo = new sGuildUserInfo; /// º¹»ç *userInfo = *user; if( mGuildUserMap.Insert( userInfo->characterIdx, userInfo ) == false ) { assert( 0 && "failed to insert guild user" ); } } void cGuildManager::SetTempData( LPCTSTR name, unsigned long npcIdx ) { mTempName = name; mTempNpcIndex = npcIdx; } /// ±æµå »ý¼º ¿äû bool cGuildManager::GuildCreate() { if( HERO->GetGuildIndex() > 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1202 ) ); return false; } // ±æÀÌ °Ë»ç if( mTempName.IsEmpty() ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1203 ) ); return false; } // npc ÀÎÁõ½ÇÆÐ if( mTempNpcIndex == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 420 ) ); return false; } MSG_REQ_NPC_GUILD_CREATE msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_NPC; msg.Protocol = NM_NPC_GUILD_CREATE_REQ; msg.npcIndex = mTempNpcIndex; ::Sstrncpy( msg.name, MAX_GUILDNAME_BUFFER_SIZE, (LPCTSTR)mTempName.Cstr(), MAX_GUILDNAME_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); return true; } /// ±æµå ÃÊ´ë ¿äû void cGuildManager::GuildAdd( cStringT name ) { if( HERO->GetGuildIndex() == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1205 ) ); return; } if( name.IsEmpty() ) { cBaseObject* pTarget = HERO->GetTargetObject(); if( pTarget && pTarget->GetObjectType() == eOBJECTTYPE_PLAYER ) { name = pTarget->GetName(); } else { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 102 ) ); return; } } /// ÀÚ±âÀڽŠÃÊ´ëºÒ°¡ if( ::_tcscmp( (LPCTSTR)name.Cstr(), HERO->GetName() ) == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 142 ) ); return; } /// ÃÊ´ë Á÷À§ °Ë»ç char heroPos = HERO->GetGuildPosition(); if( !(heroPos == eGUILD_MASTER || heroPos == eGUILD_SUBMASTER || heroPos == eGUILD_ELDER ) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1266 ) ); return; } /// mTempAddName = name; /// MSG_REQ_GUILD_ADD msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_ADD_REQ; ::Sstrncpy( msg.name, MAX_NAME_BUFFER_SIZE, (LPCTSTR)name.Cstr(), MAX_NAME_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } /// ±æµå Å»Åð ¿äû void cGuildManager::GuildOut() { if( HERO->GetGuildPosition() == eGUILD_NONE ) { assert(0); return; } if( HERO->GetGuildPosition() == eGUILD_MASTER ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1221 ) ); return; } MSG_REQ_GUILD_OUT msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_OUT_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } /// ±æµå Ãß¹æ ¿äû void cGuildManager::GuildCut( unsigned long characterIdx ) { sGuildUserInfo* info = (sGuildUserInfo*)mGuildUserMap.GetAt( characterIdx ); if( info != NULL ) { mTempCutPlayerIdx = characterIdx; MSG_REQ_GUILD_CUT msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_CUT_REQ; msg.characterIdx = characterIdx; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } else { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1224 ) ); } } /// void cGuildManager::GuildDelete() { // ±æµå¿ø ³²¾ÆÀÖ´ÂÁö °Ë»ç if( mGuildUserMap.GetSize() > 1 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1228 ) ); return; } MSG_REQ_GUILD_DELETE msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_DELETE_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } /// void cGuildManager::GuildGivePosition( unsigned long characterIdx, unsigned char position, unsigned char newPosition ) { if( HERO->GetGuildIndex() == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1205 ) ); return; } char heroPos = HERO->GetGuildPosition(); if( !(heroPos == eGUILD_MASTER || heroPos == eGUILD_SUBMASTER) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1245 ) ); return; } /// ±æµåÀåÀÌ ¾Æ´Ñ°æ¿ì /// ÇØ´ç À¯ÀúÀÇ Á÷À§°¡ ÀڽŰú °°°Å³ª ³ôÀ»¼ö ¾ø´Ù /// º¯°æÇÒ Á÷À§°¡ ÀڽŰú °°°Å³ª ³ôÀ»¼ö ¾ø´Ù if( heroPos != eGUILD_MASTER ) { if( !(heroPos < position && heroPos < newPosition) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1245 ) ); return; } } else if( heroPos == eGUILD_MASTER ) { /// ÇØ´çÀ¯Àú°¡ ±æµåÀåÀϼö¾øÀ½ if( !(heroPos < position) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1245 ) ); assert(0); return; } } /// ¿äû MSG_REQ_GUILD_GIVEPOSITION msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_GIVEPOSITION_REQ; msg.characterIdx = characterIdx; msg.position = newPosition; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } void cGuildManager::GuildNotice( LPCTSTR notice ) { if( HERO->GetGuildIndex() == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1205 ) ); return; } /// MSG_REQ_GUILD_NOTICE msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILD_NOTICE_REQ; ::Sstrncpy( msg.notice, MAX_GUILD_NOTICE_BUFFER_SIZE, notice, MAX_GUILD_NOTICE_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } void cGuildManager::GuildMarkUpdate() { // ¶ô°É±â MSG_REQ_GUILDMARK_UPDATE msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_GUILD; msg.Protocol = NM_GUILDMARK_UPDATE_REQ; memcpy( &msg.mark, &mMarkBuffer, MARK_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } void cGuildManager::GuildMarkRequest( unsigned long guildIndex ) { /// ¼­¹ö¿¡ ÇØ´ç ±æµå ¸¶Å© ¿äû cRequestMarkSet::cIterator i = mRequestMarkSet.Find( guildIndex ); if( i == mRequestMarkSet.End() ) { MSG_REQ_GUILDMARK_SEND sendmsg; ::memset( &sendmsg, 0, sizeof(sendmsg) ); sendmsg.Category = NM_GUILD; sendmsg.Protocol = NM_GUILDMARK_SEND_REQ; sendmsg.guildIndex = guildIndex; NETWORK->SendNetworkMsg( (char*)&sendmsg, sizeof(sendmsg) ); /// ¿äû ¸Ê¿¡ ÀúÀå if( mRequestMarkSet.Insert( guildIndex ) == false ) { assert(0); } } } bool GuildUserSort( const void *arg1, const void *arg2 ) { sGuildUserInfo* data1 = (sGuildUserInfo*)arg1; sGuildUserInfo* data2 = (sGuildUserInfo*)arg2; return (data2->position - data1->position > 0); } /// UI ¼¼ÆÃ void cGuildManager::UpdateInfoSheet() { if( mGuildInfo.idx == 0 ) return; typedef tList cSortList; cSortList list; cGuildWindow* guildWindow = GAMEUI->GetGuildWindow(); if( guildWindow ) { mConnectCount = 0; guildWindow->Clear(); /// ±æµå Á¤º¸ ¼¼ÆÃ guildWindow->SetGuildName( mGuildInfo.name ); guildWindow->SetMasterName( mGuildInfo.masterName ); guildWindow->SetPosition( mGuildInfo.position ); guildWindow->SetTotalCount( mGuildUserMap.GetSize() ); /// À¯Àú¸®½ºÆ® °»½Å cGuildUserMap::cIterator i = mGuildUserMap.Begin(); cGuildUserMap::cIterator end = mGuildUserMap.End(); for( ; i != end; ++i ) { sGuildUserInfo* p = (sGuildUserInfo*)(i->mSecond); list.PushBack( p ); } if( list.GetSize() > 1 ) list.Sort( GuildUserSort ); /// cSortList::cIterator li = list.Begin(); cSortList::cIterator lend = list.End(); for( ; li != lend; ++li ) { sGuildUserInfo* p = (sGuildUserInfo*)(*li); guildWindow->AddGuildPlayer( p ); // Á¢¼ÓÀμö °è»ê if( p->channelNum > 0 ) mConnectCount++; } guildWindow->SetConnectCount( mConnectCount ); } } /// UI ¼¼ÆÃ - ±æµå¿ø °¡ÀÔ/Å»Åð¿¡ µû¸¥ °»½Å void cGuildManager::UpdateInfoSheetByUser() { typedef tList cSortList; cSortList list; cGuildWindow* guildWindow = GAMEUI->GetGuildWindow(); if( guildWindow ) { mConnectCount = 0; guildWindow->SetTotalCount( mGuildUserMap.GetSize() ); unsigned int selectrow = guildWindow->GetSelectRow(); /// À¯Àú¸®½ºÆ® °»½Å guildWindow->ClearList(); cGuildUserMap::cIterator i = mGuildUserMap.Begin(); cGuildUserMap::cIterator end = mGuildUserMap.End(); for( ; i != end; ++i ) { sGuildUserInfo* p = (sGuildUserInfo*)(i->mSecond); list.PushBack( p ); } if( list.GetSize() > 1) list.Sort( GuildUserSort ); /// cSortList::cIterator li = list.Begin(); cSortList::cIterator lend = list.End(); for( ; li != lend; ++li ) { sGuildUserInfo* p = (sGuildUserInfo*)(*li); guildWindow->AddGuildPlayer( p ); // Á¢¼ÓÀμö °è»ê if( p->channelNum > 0 ) mConnectCount++; } // guildWindow->SetConnectCount( mConnectCount ); guildWindow->SetSelectRow( selectrow ); } } /// ±æµå °øÁö °»½Å void cGuildManager::UpdateNotice() { int len = ::_tcslen( mGuildInfo.notice ); if( len > 0 ) { cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 1251 ), mGuildInfo.notice ); CHATMANAGER->AddChatMsg( (LPCTSTR)str.Cstr(), eCHAT_GUILD_NOTICE ); /// cGuildWindow* win = GAMEUI->GetGuildWindow(); if( win ) win->UpdateGuildNotice( mGuildInfo.notice ); } } /// Á÷À§¿¡ µû¸¥ ÅØ½ºÆ® À妽º LPCTSTR cGuildManager::GetTextIndex( unsigned char position ) { unsigned int textIdx = 0; switch( position ) { case eGUILD_NONE: textIdx = 1299; break; /// ±æµåÀå case eGUILD_MASTER: textIdx = 1300; break; /// ±æµåÀå case eGUILD_SUBMASTER: textIdx = 1301; break; /// ºÎ ±æµåÀå case eGUILD_ELDER: textIdx = 1302; break; /// Àå·Î case eGUILD_UPPERHOUSE: textIdx = 1303; break; /// »ó¿ø ÀÇ¿ø case eGUILD_LOWERHOUSE: textIdx = 1304; break; /// ÇÏ¿ø ÀÇ¿ø case eGUILD_GENERAL: textIdx = 1305; break; /// ÀÏ¹Ý default: assert(0); return 0; } return GAMERESOURCEMAN->GetGameText( textIdx ); } NiTexture* cGuildManager::CheckMarkVersion( unsigned long guildIndex, tm registDate ) { /// ÇØ´ç ±æµå¸¶Å©°¡ Á¸ÀçÇÏ´ÂÁö °Ë»ç cString str; str.Format( "./GuildMark/mark%d.bmp", guildIndex ); cFileToRead* file = FILESYSTEM->OpenFileToRead_NoPack( str ); if( file ) { // Á¸ÀçÇÏ¸é ¹öÀü °Ë»ç MARK_VERSION version; ::memset( &version, 0, sizeof(MARK_VERSION) ); file->Read( &version, sizeof(MARK_VERSION) ); file->Close(); SAFE_DELETE( file ); // ¹öÀü Á¤º¸°¡ µ¿ÀÏÇϸé if( version.guildIndex == guildIndex ) { mktime( &version.versionData ); mktime( ®istDate ); int ret = ::memcmp( &version.versionData, ®istDate, sizeof(version.versionData)); if( ret == 0 ) { // ÀÌ¹Ì °¡Áö°íÀÖ´Â ÅØ½ºÃİ¡ ÀÖÀ¸¸é ¸®ÅÏ NiTexture* tex = (NiTexture*)mMarkTextureMap.GetAt( guildIndex ); if( tex ) return tex; // ÆÄÀÏ¿¡¼­ »õ·Î ·ÎµåÇØ¼­ Á¸ÀçÇÏ¸é ¸®ÅÏ tex = LoadGuildMark( guildIndex ); if( tex ) return tex; } } } return 0; } /// ±æµå ¸¶Å© µî·Ï ui ¿ë ·Îµù NiTexture* cGuildManager::LoadGuildMark( unsigned long guildIndex ) { CheckGuildMarkFolder(); cString fileName; fileName.Format( "./GuildMark/mark%d.bmp", guildIndex ); cFileToRead* file = FILESYSTEM->OpenFileToRead_NoPack( fileName ); /// 1. ÆÄÀÏ À¯¹« °Ë»ç if( !file ) { assert(0); return 0; } /// BITMAPFILEHEADER bmpFileHeader; BITMAPINFOHEADER bmpInfoHeader; MARK_VERSION version; ::memset( &bmpFileHeader, 0, sizeof(BITMAPFILEHEADER) ); ::memset( &version, 0, sizeof(MARK_VERSION) ); // ¹öÀüÁ¤º¸ °¡Á®¿À±â file->Read( &version, sizeof(MARK_VERSION) ); file->Read( &bmpFileHeader, BMP_FILE_HEADER_SIZE ); file->Read( &bmpInfoHeader, BMP_INFO_HEADER_SIZE ); /// ÆÄÀÏ »çÀÌÁî °Ë»ç (Á¦ÇÑ »çÀÌÁî °Ë»ç) unsigned int len = file->GetSize(); if( len > MARK_MAX_SIZE ) { file->Close(); SAFE_DELETE( file ); return 0; } file->Close(); SAFE_DELETE( file ); // ÅØ½ºÃÄ ·Îµù NiTexture* nitex = 0; cString pathName; pathName.Format( "./GuildMark/mark%d.bmp", guildIndex ); /// ÅØ½ºÃ³ ÆÄÀÏÀ» ·Îµù NiPixelDataPtr pixelData = 0; NiFilename filename(pathName.Cstr()); if( _strcmpi( filename.GetExt(), ".bmp" ) == 0 ) { cEngineFile file( pathName.Cstr(), false ); if( file == false ) return 0; // ÀÏÁ¤ Çì´õ»çÀÌÁ ³Ñ¾î¼­ À̹ÌÁö¸¦ ÀоîµéÀδ٠file.Seek( sizeof(MARK_VERSION), SEEK_SET ); cBMPReader bmpReader; pixelData = bmpReader.ReadFile( file, 0 ); } else { assert( 0 ); return 0; } if( pixelData == 0 ) { assert( 0 ); return 0; } /// Çȼ¿ µ¥ÀÌŸ·ÎºÎÅÍ ¿£Áø ÅØ½ºÃ³¸¦ »ý¼º NiTexture::FormatPrefs prefs; prefs.m_eMipMapped = pixelData->GetNumMipmapLevels() <= 1 ? NiTexture::FormatPrefs::NO : NiTexture::FormatPrefs::YES; nitex = NiSourceTexture::Create( pixelData, prefs ); if( nitex == 0 ) { assert( 0 ); return 0; } if( mMarkTextureMap.Insert( guildIndex, nitex ) == false ) { assert( 0 ); } return nitex; } void cGuildManager::SaveGuildMark( unsigned long guildIndex, tm registDate, BYTE* mark ) { cString fileName; fileName.Format( "./GuildMark/mark%d.bmp", guildIndex ); cFileToWrite* newfile = FILESYSTEM->OpenFileToWrite( fileName.Cstr() ); if( newfile ) { // ¹öÀü ¸¸µé±â MARK_VERSION version; ::memset( &version, 0, sizeof(MARK_VERSION) ); version.guildIndex = guildIndex; version.versionData = registDate; // »õ ÆÄÀÏ ¹öÆÛ BYTE tempBuffer[MARK_MAX_SIZE]; ::memset( &tempBuffer, 0, MARK_MAX_SIZE ); ::memcpy( tempBuffer, &version, sizeof(MARK_VERSION) ); // ¹öÀü´ã±â ::memcpy( tempBuffer + sizeof(MARK_VERSION), mark, MARK_SIZE ); // µ¥ÀÌÅÍ ´ã±â // ¾²±â int writeLen = newfile->Write( tempBuffer, MARK_MAX_SIZE ); if( writeLen > MARK_MAX_SIZE ) { assert(0); } newfile->Close(); SAFE_DELETE( newfile ); /// ¸Þ¸ð¸®¿¡ ÀÖ´ø ÅØ½ºÃÄ »èÁ¦ NiTexture* p = (NiTexture*)mMarkTextureMap.GetAt( guildIndex ); if( p ) { mMarkTextureMap.Erase( guildIndex ); } } else { assert(0); } } void cGuildManager::ClearPreviewGuildMark() { mpPreviewMark = 0; } NiTexture* cGuildManager::LoadPreviewGuildMark( const cString& pathName ) { CheckGuildMarkFolder(); if( mpPreviewMark != NULL ) { assert(0); } cFileToRead* file = FILESYSTEM->OpenFileToRead_NoPack( pathName ); /// 1. ÆÄÀÏ À¯¹« °Ë»ç if( !file ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1270 ) ); return 0; } BITMAPFILEHEADER bmpFileHeader; BITMAPINFOHEADER bmpInfoHeader; ::memset( &bmpFileHeader, 0, sizeof(BITMAPFILEHEADER) ); file->Read( &bmpFileHeader, BMP_FILE_HEADER_SIZE ); file->Read( &bmpInfoHeader, BMP_INFO_HEADER_SIZE ); /// BMP ÆÄÀÏ ÇüÅ °Ë»ç( ¸ÅÁ÷ ³Ñ¹ö °Ë»ç ) if( bmpFileHeader.bfType != 0x4d42 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1271 ) ); file->Close(); SAFE_DELETE( file ); return 0; } /// BMP ¾ÐÃà ¿©ºÎ °Ë»ç(¹«¾ÐÃàÀÌ¿©¾ß ÇÔ) if ((bmpInfoHeader.biCompression == BI_RLE4) || (bmpInfoHeader.biCompression == BI_RLE8)) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1271 ) ); file->Close(); SAFE_DELETE( file ); return 0; } /// BMP À̹ÌÁö Å©±â °Ë»ç if( !(bmpInfoHeader.biWidth == 24 && bmpInfoHeader.biHeight == 24) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1262 ) ); file->Close(); SAFE_DELETE( file ); return 0; } /// BMP ÇØ»óµµ °Ë»ç 4, 8, 24, 32bit ÇØ»óµµ Áö¿ø if( !(bmpInfoHeader.biBitCount == 4 || bmpInfoHeader.biBitCount == 8 || bmpInfoHeader.biBitCount == 24 || bmpInfoHeader.biBitCount == 32 ) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1264 ) ); file->Close(); SAFE_DELETE( file ); return 0; } /// ÆÄÀÏ »çÀÌÁî °Ë»ç (Á¦ÇÑ »çÀÌÁî °Ë»ç) unsigned int len = file->GetSize(); if( len > MARK_SIZE ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1263 ) ); file->Close(); SAFE_DELETE( file ); return 0; } /// ¹öÆÛ ÀúÀå file->Seek( 0 ); ::memset( &mMarkBuffer, 0, sizeof(mMarkBuffer) ); file->Read( &mMarkBuffer, MARK_SIZE ); file->Close(); SAFE_DELETE( file ); /// ·Îµå cEngineFile enginefile( pathName.Cstr(), false ); if( enginefile == false ) return 0; NiPixelDataPtr pixelData = 0; cBMPReader bmpReader; pixelData = bmpReader.ReadFile( enginefile, 0 ); if( pixelData == 0 ) { assert( 0 ); return 0; } NiTexture::FormatPrefs prefs; prefs.m_eMipMapped = pixelData->GetNumMipmapLevels() <= 1 ? NiTexture::FormatPrefs::NO : NiTexture::FormatPrefs::YES; mpPreviewMark = NiSourceTexture::Create( pixelData, prefs ); if( mpPreviewMark == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1263 ) ); assert( 0 ); return 0; } return mpPreviewMark; }