#include "SunClientPrecompiledHeader.h" #include "Chatdialog.h" #include "CommandManager.h" #include "Hero.h" #include "HeroData.h" #include "CooltimeManager.h" #include "InterfaceManager.h" #include "ResourceManager.h" #include "LoadScene.h" #include "MapInfoParser.h" #include "../../Utility/Nstring.h" #include "Camera.h" #include "HeroActionInput.h" #include "EquipmentContainer.h" #include #include "StyleInfoParser.h" #include "SkillInfoParser.h" #include "ItemInfoParser.h" #include "ObjectManager.h" #include "gamefunc.h" #include "uiTradeMan/uiTradeMan.h" #include "uiGuildMan/uiGuildMan.h" #include "uiPartyLeavePopup/uiPartyLeavePopup.h" #include "uiGuildMan/uiGuildMan.h" #include "uiPartyMan/uiPartyMan.h" #include "map.h" #include "globalfunc.h" #include "BattleScene.h" #include "HeroActionInput.h" #include "RadarDialog.h" #include "RadarPlusDialog.h" #include "RadarFullDialog.h" #include "ObjectManager.h" #include "TargetDialog.h" #include "uiTargetMan/uiTargetMan.h" #include "uiBattleZoneMan/uiBattleZoneMan_def.h" #include "uiVendorMan/uiVendorMan_def.h" #include "uiRadarMan/uiRadarMan.h" #include "uiHelpMan/uiHelpMan.h" #include "uiQuestMan/uiQuestMan.h" #include "uiChatMan/uiChatMan_def.h" #include "uiInventoryMan/uiInventoryDef.h" #include "InventoryDialog.h" #ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #include "uiBankMan/uiBankDef.h" #include "uiBankMan/uiBankDialog.h" #else #include "BankDialog.h" #endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER #include "GuildSystem/GuildSystemFunction.h" #include "GuildSystem/GuildSystemData.h" #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER #include "message.h" #include "Sound.h" #include "Application.h" #include "cLua.h" #include "GraphicResourceList.h" #include "NPCInfoParser.h" #include "Const.h" #include "uiMissionObjectMan/uiMissionObjectMan.h" #include "uiMissionObject/uiMissionObject.h" #ifdef _DEV_VER #include "ContinentMapDlg.h"//_DH_FULL_MAP_PORTAL #include "uiContinentMapEP2/ContinentMapEp2Dialog.h" #include "uiTargetAggro/uiTargetAggro.h" #include "uiGMWindowMan/uiGMWindowMan.h" #ifdef _NA_003027_20111013_HONOR_SYSTEM #include "HonorSystem/HonorSystem.h" #endif //_NA_003027_20111013_HONOR_SYSTEM #if WZENGINEVER >= 370 #include "LogManager.h" #endif // WZENGINEVER >= 370 #include "SkillMain.h" #include "uiOptionMan.h" #include "uiOptionMenuMan/uiOptionMenuMan.h" #endif//_DEV_VER #ifdef _DEV_VER #ifdef _NA_006519_20130311_TEXTURE_VIEWER #include "uiTextureViewerMan/uiTextureViewerMan.h" #endif #ifdef _NA_007086_20140318_MONSTERBOOK #include "uiMonsterBookMan/uiMonsterBookMan.h" #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM #include "uiAttendanceCheck/uiAttendanceCheckDialog.h" #endif _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM #endif //--------------------------------------------------------------------------------------- // // 一般说明 // //--------------------------------------------------------------------------------------- CommandManager g_CommandManager; CommandManager::CommandManager( void ) { } CommandManager::~CommandManager( void ) { } //--------------------------------------------------------------------------------------- // //通过实际命令处理部分 //如果回车值是TRUE,那么就成功地执行了指令功能, //如果回车值是FALSE,就视为不是命令语,在调用此函数的地方 //转到处理聊天命令的地方。 //因此,如果输入的string是命令,那么功能执行失败的成功 //回球价格要成为TRUE。 // //--------------------------------------------------------------------------------------- BOOL CommandManager::isChatCommand(TCHAR firstString) { if(firstString == _T('/') || firstString == _T('@') || firstString == _T('!') || firstString == _T('#') || firstString == _T('$') || firstString == _T('&') || firstString == _T('"')) { return TRUE; } else { return FALSE; } } DWORD CommandManager::ParseCommand(TCHAR * pszString) { if (g_pHero == NULL) { return TRUE; } TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szCommand[INTERFACE_STRING_LENGTH] = {0,}; ChatDialog * pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG); int iEmoCommandStart = eGAME_COMMAND_EMOTICON_START_INDEX;//启动动作命令. int iEmoCommandcnt = NUM_GAME_COMMAND_COUNT;//移动端. int iCommandcnt = eGAME_COMMAND_ACTION_END_CODE;//普通命令端. int iCommandLen = 0; int ChatStringLen = lstrlen(pszString); TCHAR szTemp[MAX_MESSAGE_LENGTH]; TCHAR szTemp2[MAX_MESSAGE_LENGTH]; TCHAR szTemp3[MAX_MESSAGE_LENGTH]; if (isChatCommand(pszString[0])) { for( int k = eCHAT_COMMAND_START_INDEX; k < eCHAT_COMMAND_MAX; ++k) { g_InterfaceManager.GetInterfaceString( k, szCommand, INTERFACE_STRING_LENGTH ); iCommandLen = _tcslen( szCommand ); if (iCommandLen > ChatStringLen ) continue; int iCmdLen = _tcslen(szCommand); int iTotalLen = _tcslen(pszString); TCHAR szString[MAX_MESSAGE_LENGTH] = {0,}; TCHAR szString2[MAX_MESSAGE_LENGTH] = {0,}; int iMsgLen = 0; if(iCmdLen == iTotalLen) { iMsgLen = 0; } else if(iTotalLen > iCmdLen) { StrnCopy(szString, pszString+iCmdLen+1, iTotalLen-iCmdLen-1); iMsgLen = _tcslen(szString); } else { continue; } _stscanf(pszString,_T("%s %s %s"),szTemp, szTemp2, szTemp3); _strlwr(szTemp); _strlwr(szCommand); if ( CSTR_EQUAL == CompareString( LOCALE_USER_DEFAULT, NULL, szTemp, _tcslen(szTemp), szCommand, iCommandLen) ) { switch( k ) { case eCHAT_COMMAND_NORMAL_HOTKEY2: case eCHAT_COMMAND_NORMAL_HOTKEY3: case eCHAT_COMMAND_NORMAL: { if(pDlg) { pDlg->OnNoramlChat(); if(iMsgLen) { pDlg->SendChatMsg( szString ); } } return TRUE; } break; case eCHAT_COMMAND_SHOUT_HOTKEY2: case eCHAT_COMMAND_SHOUT_HOTKEY3: case eCHAT_COMMAND_SHOUT: { if(pDlg) { if(iMsgLen) { pDlg->SendShoutMsg( szString ); } } return TRUE; } break; case eCHAT_COMMAND_PARTY_HOTKEY2: case eCHAT_COMMAND_PARTY_HOTKEY3: case eCHAT_COMMAND_PARTY: { if(pDlg) { pDlg->OnPartyChat(); if(iMsgLen) { uiPartyMan* partyMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY)); if (partyMan && partyMan->IsParty()) { pDlg->SendChatPartyMsg(szString); } else { // 队伍不存在 g_InterfaceManager.GetInterfaceString( eST_PARTY_NOT_EXIST, szString, MAX_MESSAGE_LENGTH ); pDlg->AddString( szString ); } } } return TRUE; } break; case eCHAT_COMMAND_GUILD_HOTKEY2: case eCHAT_COMMAND_GUILD: { if(pDlg) { pDlg->OnGuildChat(); if(iMsgLen) { bool join_guild = false; #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER join_guild = GuildSystem::GetGuildSystemData().is_recv_guild_info(); #else uiGuildMan* guildMan = static_cast( g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD)); if (guildMan != NULL) { join_guild = guildMan->IsGuildInfo(); } #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER if (join_guild == true) { // 行会存在 #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER GUILD_INFO& guild_info = GuildSystem::GetGuildSystemData().GetGuildInfo(); #else stGUILD_INFO& guild_info = static_cast(guildMan->GetGuildInfo()); #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER pDlg->SendGuildMsg( szString, guild_info.m_GuildGuid ); } else { // 如果没有行会 g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_GUILD, szString, MAX_MESSAGE_LENGTH ); pDlg->AddString( szString ); } } } return TRUE; } break; case eCHAT_COMMAND_CHANNEL_HOTKEY2: case eCHAT_COMMAND_CHANNEL_HOTKEY3: case eCHAT_COMMAND_CHANNEL_CHAT: { pDlg->OnChannelChat(); if(iMsgLen) { pDlg->SendChatChannelMsg(szString); } return TRUE; } break; case eCHAT_COMMAND_WHISPER: { if(iMsgLen) { if(_stscanf(szString,_T("%s"),szString2)) { int iCharNameLen = _tcslen(szString2); TCHAR szSendMsg[MAX_MESSAGE_LENGTH] ={0,}; StrnCopy(szSendMsg, szString+iCharNameLen+1, iMsgLen-iCharNameLen+1); if(pDlg) pDlg->SendWhisperMsg(szSendMsg, szString2); } } return TRUE; } break; case eCHAT_COMMAND_GUILD_NOTICE: // 公会公告 { #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER // [GUILD_RENEWAL] #else if(iMsgLen) { uiGuildMan * guildMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD)); assert(guildMan); if (guildMan) { guildMan->Notice(szString); } } #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER return TRUE; } break; case eCHAT_COMMAND_CHANNEL_JOIN_ENG: case eCHAT_COMMAND_CHANNEL_JOIN: { //设有房间. //没有开室。开设. ChatDialog * pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);//( ChatDialog * )g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CHAT); if ( pDlg ) { pDlg->SendChatChannelCreate( szString ); } return TRUE; } break; case eCHAT_COMMAND_CHANNEL_EXIT_ENG: case eCHAT_COMMAND_CHANNEL_EXIT: { MSG_CW_CHAT_CHANNEL_OUT_SYN Packet; GlobalFunc::SendPacket(CI_CHATSERVERIDX,&Packet,sizeof(Packet)); return TRUE; } break; case eCHAT_COMMAND_CHANNEL_INVITE_ENG: case eCHAT_COMMAND_CHANNEL_INVITE: { if(iMsgLen) { ChatDialog * pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);//( ChatDialog * )g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CHAT); if ( pDlg ) { pDlg->SendChatChannelInvite( szString ); } } return TRUE; } break; case eCHAT_COMMAND_CHANNEL_INFO_REQ: { pDlg->SendChatChannelInfoREQ(); return TRUE; } break; case eCHAT_COMMAND_TARGET: { TargetDialog* target_dialog = GET_CAST_DIALOG(TargetDialog, IM_TARGET_MANAGER::TARGET_DIALOG); if (target_dialog != NULL) { target_dialog->SetTargetName(szString); } return TRUE; } break; default: break; } } } int count = iCommandcnt; for( int i = eGAME_COMMAND_ACTION_START_INDEX ; i < count ; ++i ) { g_InterfaceManager.GetInterfaceString( i, szCommand, INTERFACE_STRING_LENGTH ); iCommandLen = _tcslen( szCommand ); if (iCommandLen > ChatStringLen ) continue; TCHAR szParameter[512]; TCHAR * pszPos = NULL; // 继续寻找参数时使用 if ( CSTR_EQUAL == CompareString( LOCALE_USER_DEFAULT, NULL, pszString, iCommandLen, szCommand, iCommandLen) ) { switch( i ) { //--------------------------------------------------------------------------------------------- // 游戏指令 //--------------------------------------------------------------------------------------------- //ck: 交易 case eGAME_COMMAND_TRADE: { if (GlobalFunc::IsSSQScene()) { return TRUE; } if(g_pHero&&g_pHero->GetChaoState()==eCHAO_STATE_CHAO) { //5375 在混沌状态下无法使用. g_InterfaceManager.GetInterfaceString(5375 , szMessage ,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return TRUE; } if (_stscanf(pszString,_T("%s %s"),szTemp,szTemp2)==2) { uiTradeMan* tradeMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_TRADE)); assert (tradeMan); if (tradeMan) { TCHAR buf[64]; for (i=6; i<64; ++i) { if (pszString[i] == _T('\r')) break; buf[(i-6)] = pszString[i]; } buf[(i-6)] = 0; tradeMan->Ask(buf); } } else if (_stscanf(pszString,_T("%s"),szTemp)==1) { uiTradeMan* tradeMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_TRADE)); assert (tradeMan); if (tradeMan) { tradeMan->Ask(NULL); } } else { // /交易 g_InterfaceManager.GetInterfaceString( eST_GM_TRADE_HELP, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } return TRUE; //ck: 颇萍: 檬措 case eGAME_COMMAND_PARTY_INVITE: { uiPartyMan * partyMan = GET_DIALOG_MANAGER( uiPartyMan, UIMAN_PARTY ); if( partyMan == NULL ) return FALSE; if( _stscanf(pszString,_T("%s %s"),szTemp,szTemp2) == 2 ) { if (partyMan->IsParty()) { if (partyMan->IsLeader()) { partyMan->AskJoinParty( szTemp2 ); } else { // 邀请只有队长可以使用. g_InterfaceManager.GetInterfaceString( eST_GM_PARTY_INVITE_MSG, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } else { partyMan->AskJoinParty( szTemp2 ); } } else { TargetDialog * pTargetDlg = GET_CAST_DIALOG(TargetDialog, IM_TARGET_MANAGER::TARGET_DIALOG);//GET_CAST_DIALOG( TargetDialog, InterfaceManager::DIALOG_TARGET ); if( pTargetDlg != NULL ) { Object * pObj = g_ObjectManager.GetObject( pTargetDlg->GetTargetKey() ); if( g_pHero && g_pHero->GetObjectKey() == pTargetDlg->GetTargetKey() ) return FALSE; if( pObj != NULL ) { partyMan->AskJoinParty( pObj->GetName() ); return TRUE; } } // /邀请角色名 g_InterfaceManager.GetInterfaceString( eST_GM_PARTY_INVITE_HELP, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } return TRUE; // 个人商店 case eGAME_COMMAND_PRIVATE_TRADE: { if(g_pHero&&g_pHero->GetChaoState()==eCHAO_STATE_CHAO) { //5375 在混沌状态下无法使用. g_InterfaceManager.GetInterfaceString(5375, szMessage ,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return TRUE; } if (_stscanf(pszString,_T("%s"),szTemp)==1) { if ((GameFramework::GetCurScene() == SCENE_TYPE_VILLAGE ) && (!GET_DIALOG( IM_BATTLEZONE_MANAGER::BATTLEZONE_CREATE )->IsVisible()) && (!GET_DIALOG( IM_BATTLEZONE_MANAGER::BATTLEZONE_CREATE_EP2 )->IsVisible()) && (!GET_DIALOG( IM_BATTLEZONE_MANAGER::BATTLEZONE_LIST )->IsVisible()) && (g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_BATTLE_LOBBY) == FALSE)) { if ( GET_DIALOG( IM_VENDOR_MANAGER::VENDOR_SELL )->IsVisible() == FALSE && (g_InterfaceManager.IsShowDialog(IM_BANK_MANAGER::BANK_DIALOG) == FALSE) ) GET_DIALOG( IM_VENDOR_MANAGER::VENDOR_SELL )->ShowWindow(TRUE); } else { // 开个人商店只能在村子里. const int c_iPRIVATE_TRADE = 70399; g_InterfaceManager.GetInterfaceString( c_iPRIVATE_TRADE, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } else { // '/请输入“个人商店”. const int c_iPRIVATE_TRADE = 70384; g_InterfaceManager.GetInterfaceString( c_iPRIVATE_TRADE, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } return TRUE; case eGAME_COMMAND_SCREEN_SHOT: { if( _stscanf( pszString, _T("%s %s"), szTemp, szTemp2 ) == 2 ) { // 脑, 阐 TCHAR szON[INTERFACE_STRING_LENGTH], szOFF[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( eST_GM_INVINCIBLE_ON, szON, INTERFACE_STRING_LENGTH ); g_InterfaceManager.GetInterfaceString( eST_GM_INVINCIBLE_OFF, szOFF, INTERFACE_STRING_LENGTH ); if( _tcsnccmp( szTemp2, szON, 4 ) == 0 ) { BattleScene::SetScreenShotState( eSCREEN_SHOT_NOT_UI_AND_HERO ); g_InterfaceManager.ShowInterface( FALSE ); } else if( _tcsnccmp( szTemp2, szOFF, 4 ) == 0 ) { BattleScene::SetScreenShotState( eSCREEN_SHOT_FULL ); g_InterfaceManager.ShowInterface( TRUE ); } else { // 参数错误. pDlg->AddString(pszString); g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } } else { // 参数错误. pDlg->AddString(pszString); g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } return TRUE; } break; case eGAME_COMMAND_SET_WHISPER: { { ChatDialog * pDlg = NULL; pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);//(ChatDialog *)g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CHAT); assert(pDlg); if (_stscanf(pszString,_T("%s %s %s"),szTemp,szTemp2,szTemp3) == 3) { if (pDlg) { // 庇富 pszPos = util::GetToken( pszString + iCommandLen, szParameter, _T(" ") ); pDlg->GetCurChatMessage(); pDlg->SendWhisperMsg( pszPos, szTemp2); } } else if (_stscanf(pszString,_T("%s %s"),szTemp,szTemp2)==2) { BOOL bFlag; // 脑, 阐 TCHAR szON[INTERFACE_STRING_LENGTH], szOFF[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( eST_GM_INVINCIBLE_ON, szON, INTERFACE_STRING_LENGTH ); g_InterfaceManager.GetInterfaceString( eST_GM_INVINCIBLE_OFF, szOFF, INTERFACE_STRING_LENGTH ); if( _tcsnccmp( szTemp2, szON, 4 ) == 0 ) { // 庇富瞒窜( 脑 ) bFlag = FALSE; } else if( _tcsnccmp( szTemp2, szOFF, 4 ) == 0 ) { // 庇富倾侩( 阐 ) bFlag = TRUE; } else { // 颇扼固磐啊 肋给登菌嚼聪促. pDlg->AddString(pszString); g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); return TRUE; } MSG_CW_WHISPER_SET_SYN SendPacket; SendPacket.bWhisper = bFlag; GlobalFunc::SendPacket(CI_CHATSERVERIDX, &SendPacket, sizeof( SendPacket )); return TRUE; } else { // [/庇富] [Char Name] [Message] g_InterfaceManager.GetInterfaceString( eST_SHOW_CHAT_MESSAGE_INFO, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } return TRUE; } break; case eGAME_COMMAND_SIT: { //Todo:sit肺 洒绢肺 胶抛捞飘 官曹巴 if( g_HeroInput.CanSitState() &&!g_pHero->IsTransForm()) { MSG_CG_STATUS_CONDITION_CHANGE_SYN Packet; Packet.m_byCategory = CG_STATUS; Packet.m_byProtocol = CG_STATUS_CONDITION_CHANGE_SYN; Packet.m_byConditionType = eCHAR_CONDITION_SITDOWN; if( FALSE == g_pHero->SendPacket( &Packet, sizeof(MSG_CG_STATUS_CONDITION_CHANGE_SYN) ) ) { assert(!"旧扁 菩哦 傈价 角菩"); return TRUE; } #ifdef _NA_008546_20151029_SITTING_PACKET_DELAY_POSITION_SYNC_BUG g_pHero->set_sitting_packet_delay(TRUE); #endif //_NA_008546_20151029_SITTING_PACKET_DELAY_POSITION_SYNC_BUG } return TRUE; } break; case eGAME_COMMAND_STAND: { //Todo:菩哦 焊尘巴 if(g_pHero->GetCurState()==STATE::SIT) { MSG_CG_STATUS_CONDITION_CHANGE_SYN Packet; Packet.m_byCategory = CG_STATUS; Packet.m_byProtocol = CG_STATUS_CONDITION_CHANGE_SYN; Packet.m_byConditionType = eCHAR_CONDITION_STANDUP; if( FALSE == g_pHero->SendPacket( &Packet, sizeof(MSG_CG_STATUS_CONDITION_CHANGE_SYN) ) ) { assert(!"辑扁 菩哦 傈价 角菩"); return TRUE; } } return TRUE; } break; case eGAME_COMMAND_FOLLOW_PLAYER: { DWORD dwTarget = 0; szTemp2[0] = NULL; if( _stscanf( pszString, _T("%s %s"), szTemp, szTemp2 ) == 2 ) { // 捞抚栏肺 茫酒辑 利侩 Object *pObj = g_ObjectManager.GetObject( szTemp2 ); if( pObj ) { dwTarget = pObj->GetObjectKey(); g_HeroInput.SetFollowState( TRUE, dwTarget ); return TRUE; } else { // 荤侩磊甫 茫阑 荐 绝嚼聪促. g_InterfaceManager.GetInterfaceString( eST_USER_NOT_FOUND, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); return TRUE; } } else { // 捞抚阑 涝仿窍瘤 臼疽促. 鸥百芒俊辑 掘绢坷磊 dwTarget = g_HeroInput.GetCurrentTarget(); if( dwTarget ) { g_HeroInput.SetFollowState( TRUE, dwTarget ); return TRUE; } else { // 急琶等 敲饭捞绢啊 绝嚼聪促. g_InterfaceManager.GetInterfaceString( eST_NOT_SELECTED_PLAYER, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); return TRUE; } } } break; case eGAME_COMMAND_PARTY_LEAVE: { if ( g_pHero->IsParty() ) { uiPartyLeavePopup *partyLeavePopup = GET_CAST_DIALOG( uiPartyLeavePopup, IM_PARTY_MANAGER::PARTY_LEAVE_POPUP ); if( partyLeavePopup ) { if( ( GameFramework::GetCurScene() == SCENE_TYPE_VILLAGE ) || ( GameFramework::GetCurScene() == SCENE_TYPE_FIELD ) ) partyLeavePopup->LeaveParty(); else partyLeavePopup->ShowInterface(TRUE); } } else { // 颇萍俊 加秦 乐瘤 臼嚼聪促. g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_PARTY, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } return TRUE; } break; case eGAME_COMMAND_GUILD_INVITE: { if (_stscanf(pszString,_T("%s %s"),szTemp,szTemp2)==2) { TCHAR buf[64]; for (i=10; i<64; ++i) { if (pszString[i] == _T('\r')) break; buf[(i-10)] = pszString[i]; } buf[(i-10)] = 0; #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER GuildSystem::Function::InvitePlayer(buf); #else uiGuildMan* guildMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD)); assert (guildMan); guildMan->Invite(buf); #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER } return TRUE; } break; // 咀记 疙飞绢 狐柳 郴侩 眠啊 #ifdef _NA_004612_120329_ADD_ACTION_COMMAND case eGAME_COMMAND_AUTO_ATTACK: { g_HeroInput.ProcessUserAction( eACTION_AUTO_ATTACK + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_PICK_ITEM: { g_HeroInput.ProcessUserAction( eACTION_PICK_ITEM + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_SIT_AND_STAND: { g_HeroInput.ProcessUserAction( eACTION_SIT_AND_STAND + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_ASSIST: { g_HeroInput.ProcessUserAction( eACTION_ASSIST + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_ASSIST_AND_ATTACK: { g_HeroInput.ProcessUserAction( eACTION_ASSIST_AND_ATTACK + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_PARTY_MEMBER_SUMMON: { g_HeroInput.ProcessUserAction( eACTION_PARTY_MEMBER_SUMMON + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_PARTY_MEMBER_WARP: { g_HeroInput.ProcessUserAction( eACTION_PARTY_MEMBER_WARP + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_NORMAL_ATTACK: { g_HeroInput.ProcessUserAction( eACTION_NORMAL_ATTACK + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_FRIEND_ADD: { g_HeroInput.ProcessUserAction( eACTION_FRIEND_ADD + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_CRYSTAL_WARP_CREATE: { g_HeroInput.ProcessUserAction( eACTION_CRYSTAL_WARP_CREATE + eACTION_START_SKILL_CODE); return TRUE; } break; case eGAME_COMMAND_IDENTIFY_SOCKET: { g_HeroInput.ProcessUserAction( eACTION_IDENTIFY_SOCKET + eACTION_START_SKILL_CODE); return TRUE; } break; #endif //_NA_004612_120329_ADD_ACTION_COMMAND } // switch( i ) } // if } // for (int i = 0; i < iCommandcnt; ++i) //#if _GLOBAL #ifdef _YMS_LANGUAGE_KIND { TCHAR string_command[64] = {NULL, }; LanguageType new_type = kLanguageGlobal; bool result = (_stscanf(pszString, _T("%s %d"), string_command, &new_type) == 2); if (result && (Stricmp(string_command, _T("//changelang")) == 0)) { ChangeLanguage(new_type); return TRUE; } } #endif #ifdef _NA_004756_120504_SHOW_SSQ_PLAYER_NAME { // 鸥遏茄荤盔俊辑 敲饭捞绢 捞抚 焊捞扁(GM傈侩) TCHAR string_command[64] = {0,}; TCHAR flag_command[64] = {0,}; bool result = (_stscanf(pszString, _T("%s %s"), string_command, flag_command) == 2); if (result && (Stricmp(string_command, _T("//ssq_player_name")) == 0)) { if (g_pHero->IsGM()) { _strlwr(flag_command); if (Stricmp(flag_command, _T("on")) == 0) { GENERALPARAM->SetShowSSQPlayerName(true); } else if (Stricmp(flag_command, _T("off")) == 0) { GENERALPARAM->SetShowSSQPlayerName(false); } } return TRUE; } } #endif //_NA_004756_120504_SHOW_SSQ_PLAYER_NAME #ifdef _DEV_VER //find keyword : eGM_CMD_GET_MONSTER_ATTACK_SPEED, //阁胶磐傍加 免仿 { TCHAR string_command[64] = {NULL, }; BYTE attackspeed_type = 0; bool result = (_stscanf(pszString, _T("%s"), string_command) == 1); if (result && (Stricmp(string_command, _T("//attackspeed")) == 0)) { attackspeed_type = 1; // changed } else if (result && (Stricmp(string_command, _T("//attackspeedall")) == 0)) { attackspeed_type = 2; // all } if (attackspeed_type == 1 || attackspeed_type == 2) { FILE *fp = fopen("attackspeed.txt", "w+"); if (fp == NULL) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "error: Can not open file"); return FALSE; } fprintf(fp, "MonsterCode\tAttSpeed1\tAttSpeed2\tName\tAniFile01\tAniFile02"); for (int j = 0; j < BASE_NPCINFO::MAX_SKILL_NUM; ++j) { fprintf(fp, "\tSkillCode%d\tSkillDelay%d", j, j); } fprintf(fp, "\n"); SkillScriptInfo* skill_info = NULL; NPCInfoParser::Instance()->SetFirst(); //int npc_count = 0; //int ani_count = 0; DWORD monster_code = 0; bool is_change = false; float max_frame1 = 0; float max_frame2 = 0; DWORD animation_code[10] = {0,}; float skill_max_frame[10] = {0.0f,}; TCHAR monster_name[MAX_MONSTERNAME_LENGTH] = {0,}; TCHAR animation_file_name1[INTERFACE_STRING_LENGTH] = {0,}; TCHAR animation_file_name2[INTERFACE_STRING_LENGTH] = {0,}; TCHAR temp_string[5] = {0,}; const BASE_NPCINFO* npc_info = NPCInfoParser::Instance()->GetNext(); while (npc_info != NULL) { if (attackspeed_type == 2) { is_change = true; } else { is_change = false; } max_frame1 = 0; max_frame2 = 0; RESOURCE_INFO* res_info = GraphicResourceList::Instance()->GetItemInfo(npc_info->m_dwICode); monster_code = npc_info->m_MonsterCode;//monster code if (res_info) { const int temp_resource_id = SCRIPT_RESOURCE_ID_OFFSET + 120003; WzID temp_id = g_pSunRenderer->x_pManagerWzUnitLoader->LoadWzUnit(temp_resource_id, res_info->szFilename); CWzUnit* unit = g_pSunRenderer->x_pManagerWzUnitLoader->GetWzUnit(temp_id); if (unit) { //++npc_count; WzAnimationInfo* ani_info = NULL; ani_info = unit->GetAnimationInfo(StrToWzID("A001")); if (ani_info) { float max_frame = (float)g_pSunRenderer->GetNumFrameOfAnimation(ani_info->m_hWzdAni) - 1; max_frame1 = (max_frame*1000/30+1000);//attspeed1 max_frame1 = (max_frame1)?floor(max_frame1+0.5f):ceil(max_frame1-0.5f); Sprintf(animation_file_name1, _T("%s"), ani_info->m_lpszFileName); if (max_frame1 != npc_info->m_wAttSpeed) { is_change |= true; } //++ani_count; } else { strncpy(animation_file_name1, "empty_file", sizeof(animation_file_name1)); } ani_info = unit->GetAnimationInfo(StrToWzID("A002")); if (ani_info) { float max_frame = (float)g_pSunRenderer->GetNumFrameOfAnimation(ani_info->m_hWzdAni) - 1; max_frame2 = (max_frame*1000/30+1000);//attspeed2 max_frame2 = (max_frame2)?floor(max_frame2+0.5f):ceil(max_frame2-0.5f); Sprintf(animation_file_name2, _T("%s"), ani_info->m_lpszFileName); if (max_frame2 != npc_info->m_wAttSpeed2) { is_change |= true; } //++ani_count; } else { strncpy(animation_file_name2, "empty_file", sizeof(animation_file_name1)); } //////////////////////////////////////////////////////////////////////////// for (int skill_index = 0; skill_index < BASE_NPCINFO::MAX_SKILL_NUM; ++skill_index) { if (npc_info->m_wSkillCode[skill_index] != 0) { skill_info = SkillInfoParser::Instance()->GetSkillInfo(npc_info->m_wSkillCode[skill_index]); animation_code[skill_index] = skill_info->m_wzidAnimationCode[0].id; ani_info = unit->GetAnimationInfo(animation_code[skill_index]); if(ani_info != NULL) { float max_frame = (float)g_pSunRenderer->GetNumFrameOfAnimation(ani_info->m_hWzdAni) - 1; skill_max_frame[skill_index] = (max_frame*1000/30);//skill_frame if (skill_max_frame[skill_index] > 0) { skill_max_frame[skill_index] = floor(skill_max_frame[skill_index]+0.5f); } else { skill_max_frame[skill_index] = ceil(skill_max_frame[skill_index]-0.5f); } } else { skill_max_frame[skill_index] = -1.0f;//ani_info啊 绝阑 版快 -1 蔼 } } else { animation_code[skill_index] = 0; skill_max_frame[skill_index] = 0.0f; } } //////////////////////////////////////////////////////////////////////////// if (is_change == true) { ZeroMemory(monster_name, sizeof(monster_name)); strncpy(monster_name, npc_info->m_pszName, sizeof(monster_name)); //npc name } g_pSunRenderer->x_pManagerWzUnitLoader->DestroyWzUnit(temp_id); } else { fprintf(fp, "%d\t%d\t府家胶啊 绝嚼聪促.\n", monster_code, npc_info->m_dwICode); } } if (is_change == true && res_info != NULL) { monster_name[MAX_MONSTERNAME_LENGTH-1] = '\0'; fprintf(fp, "%d\t%d\t%d\t%s\t%s\t%s", monster_code, (int)max_frame1, (int)max_frame2, monster_name, animation_file_name1, animation_file_name2); for (int i = 0; i < BASE_NPCINFO::MAX_SKILL_NUM; ++i) { if (animation_code[i] == 0) { fprintf(fp, "\t%d\t%d", animation_code[i], (int)skill_max_frame[i]); } else { WzIDToString(temp_string, animation_code[i]); temp_string[4] = '\0'; fprintf(fp, "\t%s\t%d", temp_string, (int)skill_max_frame[i]); } } fprintf(fp, "\n"); } else if(res_info == NULL) { fprintf(fp, "%d\t%d\t府家胶 内靛啊 绝嚼聪促.\n", monster_code, npc_info->m_dwICode); } npc_info = NPCInfoParser::Instance()->GetNext(); } fflush(fp); fclose(fp); } } #endif//_DEV_VER #ifdef _USE_LUA_SCRIPT #ifdef _NA_007192_20140428_CLIENT_LUA_MACRO_SYSTEM { // 概农肺 矫累 if ((Stricmp(pszString, _T("//RunMacro")) == 0)) { GET_LUA()->RunScript("Run"); return TRUE; } if ((Stricmp(pszString, _T("//ResetMacro")) == 0)) { xGetHeroData()->macro_system()->ResetMacro(); return TRUE; } if ((Stricmp(pszString, _T("//lua")) == 0)) { cLuaMain::instance()->ToggleLuaConsole(); return TRUE; } } #endif //_NA_007192_20140428_CLIENT_LUA_MACRO_SYSTEM #endif //_USE_LUA_SCRIPT } g_InterfaceManager.GetInterfaceString( eCHAT_COMMAND_WHISPER, szCommand, INTERFACE_STRING_LENGTH ); if(NULL == strstr(pszString, szCommand)) { for(int idx = iEmoCommandStart; idx < iEmoCommandcnt; idx++) { g_InterfaceManager.GetInterfaceString( idx, szCommand, INTERFACE_STRING_LENGTH ); iCommandLen = _tcslen( szCommand ); //鸥捞俏等 巩磊凯俊 秦寸 目盖靛 乐绰瘤 八荤. if(NULL != strstr(pszString, szCommand)) { switch( idx ) { case eGAME_COMMAND_BOW: // 牢荤 case eGAME_COMMAND_LEAVE: // 累喊 case eGAME_COMMAND_QUESTION: // 狼巩 case eGAME_COMMAND_SIGH: // 茄见 case eGAME_COMMAND_CHEER: // 券龋 case eGAME_COMMAND_DENIAL: // 芭何 case eGAME_COMMAND_CONSENT: // 铰倡 case eGAME_COMMAND_ATTACK: // 傍拜 case eGAME_COMMAND_THANKS: // 皑荤 case eGAME_COMMAND_APOLOGY: // 荤苞 case eGAME_COMMAND_KISS: // 虐胶 case eGAME_COMMAND_LAUGH: // 眶澜 case eGAME_COMMAND_CRYING: // 匡澜 case eGAME_COMMAND_WELCOME: // 券康 case eGAME_COMMAND_HANDCLAP: // 冠荐 case eGAME_COMMAND_AWE: // 版寇 case eGAME_COMMAND_BEST: // 弥绊 case eGAME_COMMAND_SULKINESS: // 贿魔 case eGAME_COMMAND_PROVOCATION: // 档惯 case eGAME_COMMAND_SLEEP: // 荐搁 case eGAME_COMMAND_POSE: // 器令 case eGAME_COMMAND_DANCE: // 错胶 case eGAME_COMMAND_GAG: // 俺弊 case eGAME_COMMAND_MIMICRY: // 悼拱 case eGAME_COMMAND_SHOCK: // 碱农 { SLOTCODE wSkillID = (SLOTCODE)(idx - eGAME_COMMAND_BOW); TCHAR szTemp[MAX_MESSAGE_LENGTH] = {0,}; TCHAR szResult[MAX_MESSAGE_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(idx, szTemp, MAX_MESSAGE_LENGTH); Sprintf(szResult, "/%s", szTemp); int temp = Strcmp(szResult,pszString); if(0 == temp) // '/'啊 嘿菌阑 版快 官肺 捞葛记 贸府 { //------------------------------------------------------------------------------ // 荐沥 : define _YMS_CANNOT_EMOTION // 郴侩 : if 巩阑 ProcessUserEmoticon() 窃荐 郴肺 捞悼 // 荤蜡 : 吝汗等 内靛 昏力 // : ProcessUserEmoticon() 窃荐 救俊辑 false 啊 瞪荐 乐绰单 惑包绝捞 // ProcessUserEmoticon() 郴侩苞 惑包绝捞 stop 菩哦阑 焊郴霸凳 //if(g_pHero->IsMove()) // g_pHero->SendStopMovePacket(); //------------------------------------------------------------------------------ g_HeroInput.ProcessUserEmoticon( (SLOTCODE)(wSkillID + eEMOTION_START_CODE) ); return TRUE; } else // '/'啊 救嘿菌阑 版快 盲泼 皋技瘤 免仿饶 捞葛记 贸府 { return wSkillID + eEMOTION_START_CODE; } } break; } } } } return FALSE; } //------------------------------------------------------------------------------ void CommandManager::ChangeLanguage(LanguageType new_type) { LanguageType old_type = (LanguageType)CGameOption::Instance()->GetLanguageType(); if ((new_type < kLanguageGlobal) || (new_type > kLanguageGermany)) { GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_CHAT, "Not support the language"); return; } if (old_type == new_type) { GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_CHAT, "The same as the language"); return; } //------------------------------------------------------------------------------ //! 颇老 眉农 bool result = true; if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\StringTable.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\StringTableForProgram.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\StringTableForName.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\StringTable_InstantHelp.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\messagetext.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\HelpLoadingMessage.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\QuestText.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\MissionText.txt", new_type); } if (result) { result = GlobalFunc::HasFile_Nation("Data\\Interface\\Text\\LibraryText.txt", new_type); } if (result == false) { TCHAR error_message[INTERFACE_STRING_LENGTH] = {NULL,}; _tcscpy(error_message, _T("Has not language file")); GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_CHAT, error_message); return; } //------------------------------------------------------------------------------ //! 攫绢 官操扁 #ifdef _DH_OS_LANGUAGETYPE CGameOption::Instance()->SetLanguageType(kLanguageGlobal); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTable.txt"), ELUIT_NEW); SUN_ASSERT_MSG(result, "StringTable.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTableForProgram.txt")); SUN_ASSERT_MSG(result, "StringTableForProgram.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTableForName.txt")); SUN_ASSERT_MSG(result, "StringTableForName.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTable_InstantHelp.txt")); SUN_ASSERT_MSG(result, "StringTable_InstantHelp.txt load failed"); #endif//_DH_OS_LANGUAGETYPE CGameOption::Instance()->SetLanguageType(new_type); #ifdef _DH_OS_LANGUAGETYPE result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTable.txt")); #else result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTable.txt"), ELUIT_NEW); #endif//_DH_OS_LANGUAGETYPE SUN_ASSERT_MSG(result, "StringTable.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTableForProgram.txt")); SUN_ASSERT_MSG(result, "StringTableForProgram.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTableForName.txt")); SUN_ASSERT_MSG(result, "StringTableForName.txt load failed"); result = g_InterfaceManager.GetDialogManager()->LoadStringTable(GlobalFunc::AddNationName("Data\\Interface\\Text\\StringTable_InstantHelp.txt")); SUN_ASSERT_MSG(result, "StringTable_InstantHelp.txt load failed"); util::_tstring old_file_name; util::_tstring new_file_name; GlobalFunc::AddNationName(old_type, "Data\\Interface\\Text\\messagetext.txt", old_file_name); GlobalFunc::AddNationName(new_type, "Data\\Interface\\Text\\messagetext.txt", new_file_name); result = g_pClientScriptParserManager->ReloadScript(old_file_name.c_str(), new_file_name.c_str(), MESSAGE_TOTAL_MAX); SUN_ASSERT_MSG(result, "messagetext.txt load failed"); GlobalFunc::AddNationName(old_type, "Data\\Interface\\Text\\HelpLoadingMessage.txt", old_file_name); GlobalFunc::AddNationName(new_type, "Data\\Interface\\Text\\HelpLoadingMessage.txt", new_file_name); result = g_pClientScriptParserManager->ReloadScript(old_file_name.c_str(), new_file_name.c_str(), 100); SUN_ASSERT_MSG(result, "HelpLoadingMessage.txt load failed"); GlobalFunc::AddNationName(old_type, "Data\\Interface\\Text\\QuestText.txt", old_file_name); GlobalFunc::AddNationName(new_type, "Data\\Interface\\Text\\QuestText.txt", new_file_name); result = g_pClientScriptParserManager->ReloadScript(old_file_name.c_str(), new_file_name.c_str(), MAX_QUEST_TEXT_INFO); SUN_ASSERT_MSG(result, "QuestText.txt load failed"); GlobalFunc::AddNationName(old_type, "Data\\Interface\\Text\\MissionText.txt", old_file_name); GlobalFunc::AddNationName(new_type, "Data\\Interface\\Text\\MissionText.txt", new_file_name); result = g_pClientScriptParserManager->ReloadScript(old_file_name.c_str(), new_file_name.c_str(), MAX_QUEST_TEXT_INFO); SUN_ASSERT_MSG(result, "MissionText.txt load failed"); GlobalFunc::AddNationName(old_type, "Data\\Interface\\Text\\LibraryText.txt", old_file_name); GlobalFunc::AddNationName(new_type, "Data\\Interface\\Text\\LibraryText.txt", new_file_name); result = g_pClientScriptParserManager->ReloadScript(old_file_name.c_str(), new_file_name.c_str(), MAX_HELP_INFO); SUN_ASSERT_MSG(result, "LibraryText.txt load failed"); ////------------------------------------------------------------------------------ ////! 鞘磐傅 //g_slangFilter.Destroy(); //g_slangFilter.Create(); //g_slangNameFilter.Destroy(); //g_slangNameFilter.Create(); //if( CGeneralGameParam::Instance()->IsUsePackFile() ) //{ // HRESULT hres = 1; // hres = g_slangFilter.LoadFromPack(GlobalFunc::AddNationName("Data\\Filter.txt"),false); // assert(hres && "Filter.txt 肺爹 角菩"); // hres = g_slangNameFilter.LoadFromPack(GlobalFunc::AddNationName("Data\\FilterName.txt")); // assert(hres && "Data\\FilterName.txt 肺爹 角菩"); //} //else //{ // HRESULT hres = 1; // hres = g_slangFilter.Load(GlobalFunc::AddNationName("Data\\Filter.txt"),false); // assert(hres && "Filter.txt 肺爹 角菩"); // hres = g_slangNameFilter.Load(GlobalFunc::AddNationName("Data\\FilterName.txt")); // assert(hres && "Data\\FilterName.txt 肺爹 角菩"); //} //! UI g_InterfaceManager.RestoreCaptionFromStringTable(); //! 固聪甘 uiRadarMan* radar_man = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_RADAR)); if (radar_man) { radar_man->SetMapName(g_pMap->GetFieldName()); } #ifdef _SCJ_REMOVE_ANNOUNCE_WINDOW #else //! 档框富 uiHelpMan* help_man = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP)); if (help_man) { help_man->RestoreHelpInfo(); } #endif //_SCJ_REMOVE_ANNOUNCE_WINDOW //! 涅胶飘 柳青 惑怕 uiQuestMan* quest_man = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_QUEST)); if (quest_man) { quest_man->updateViewQuestForProgress(); } //! NPC, PET 捞抚 官厕 g_ObjectManager.RestoreObjectName(); } //--------------------------------------------------------------------------------------- // // 叼滚彪侩 疙飞绢 // //--------------------------------------------------------------------------------------- DebugCommandManager g_DebugCommandManager; DebugCommandManager::DebugCommandManager( void ) { } DebugCommandManager::~DebugCommandManager( void ) { } BOOL DebugCommandManager::ParseStyle( TCHAR * pszString ) { DWORD dwStyleCode = 0; TCHAR szTemp[256]; _stscanf(pszString, _T("%s"),szTemp); dwStyleCode = GetStyleCode(szTemp); if(dwStyleCode==0xFFFFFFFF) { return FALSE; } //利侩 g_pHero->SetCurrentAttackStyle(dwStyleCode); return TRUE; } //------------------------------------------------------------------------------ /** */ DWORD DebugCommandManager::GetStyleCode(TCHAR * pszString) { TCHAR szText[INTERFACE_STRING_LENGTH]; SkillInfoParser::Instance()->SetFirst(); BASE_STYLEINFO *pBASE_STYLEINFO = NULL; while( true ) { pBASE_STYLEINFO = SkillInfoParser::Instance()->GetNextStyle(); if( pBASE_STYLEINFO == NULL ) { return 0xFFFFFFFF; } // 老窜 滴锅掳 匙烙内靛父 捞侩( 芒, 瘤莆捞, 坷宏 殿殿 ) g_InterfaceManager.GetInterfaceString( pBASE_STYLEINFO->m_dwStyleNCode, szText, INTERFACE_STRING_LENGTH ); if( Strcmp( szText, pszString ) == 0 ) { // 茫疽促. return pBASE_STYLEINFO->m_SkillCode; } } return 0xFFFFFFFF; } //------------------------------------------------------------------------------ /** 胶农赋飘俊辑 佬绢辑 眉农且巴 */ BOOL DebugCommandManager::ParseWeapon(TCHAR * pszString) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; SLOTCODE dwWeaponCode = 0; TCHAR szTemp[256]; _stscanf(pszString,_T("%s"),szTemp); dwWeaponCode = ( SLOTCODE )GetWeaponCode(szTemp); if(dwWeaponCode==0xFFFFFFFF) { return FALSE; } enum { eWT_TWOHANDAXE = 5, eWT_TWOHANDSWORD = 16, eWT_ONEHANDSWORD = 31, eWT_SPEAR = 46, eWT_STAFF = 137, eWT_ORB = 152, }; if( GENERALPARAM->IsNet() )//匙飘亏 葛靛老版快 { //秦寸 公扁甫 官蹿俊 冻焙促. MSG_CG_GM_CREATE_ITEM_SYN SendPacket; SendPacket.m_byCategory = CG_GM; SendPacket.m_byProtocol = CG_GM_CREATE_ITEM_SYN; DWORD dwCode = eWT_TWOHANDAXE; if(dwWeaponCode==eWEAPONTYPE_TWOHANDAXE) { dwCode = eWT_TWOHANDAXE; } else if(dwWeaponCode==eWEAPONTYPE_TWOHANDSWORD) { dwCode = eWT_TWOHANDSWORD; } else if(dwWeaponCode==eWEAPONTYPE_ONEHANDSWORD) { dwCode = eWT_ONEHANDSWORD; } else if(dwWeaponCode==eWT_SPEAR) { dwCode = eWT_SPEAR; } else if(dwWeaponCode==eWEAPONTYPE_STAFF) { dwCode = eWT_STAFF; } else if(dwWeaponCode==eWEAPONTYPE_ORB) { dwCode = eWT_ORB; } SendPacket.m_ItemCode = ( SLOTCODE )dwCode; SendPacket.m_dwItemCount = 1; GlobalFunc::SendPacket( CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket) ); } else//教臂老版快 碍力 厘馒 矫挪促. { BASE_PLAYERINFO* bp = g_pHero->GetCharInfo(); //胶农赋飘俊辑 佬绢 眉农 且巴 if(bp&&bp->m_byClassCode==eCHAR_BERSERKER) { if(dwWeaponCode==eWEAPONTYPE_TWOHANDAXE) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_TWOHANDAXE ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else if(dwWeaponCode==eWEAPONTYPE_TWOHANDSWORD) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_TWOHANDSWORD ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else if(dwWeaponCode==eWEAPONTYPE_PUNCH) { SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); } else { // 秦寸 某腐磐俊 利侩且荐 绝绰 公扁 涝聪促. g_InterfaceManager.GetInterfaceString( eST_INVALID_WEAPON_EQUIP, szMessage, INTERFACE_STRING_LENGTH ); //g_InterfaceManager.ShowMessageBox( szMessage, 2000 ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return FALSE; } } else if(bp&&bp->m_byClassCode==eCHAR_DRAGON) { if(dwWeaponCode==eWEAPONTYPE_ONEHANDSWORD) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_ONEHANDSWORD ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else if(dwWeaponCode==eWEAPONTYPE_SPEAR) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_SPEAR ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else if(dwWeaponCode==eWEAPONTYPE_INVALID) { SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); } else { // 秦寸 某腐磐俊 利侩且荐 绝绰 公扁 涝聪促. g_InterfaceManager.GetInterfaceString( eST_INVALID_WEAPON_EQUIP, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return FALSE; } } else if(bp&&bp->m_byClassCode==eCHAR_MAGICIAN) { if(dwWeaponCode==eWEAPONTYPE_PUNCH) { SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); } else if(dwWeaponCode==eWEAPONTYPE_STAFF) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_STAFF ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else if(dwWeaponCode==eWEAPONTYPE_ORB) { SCItemSlot ItemSlot; ItemSlot.SetCode( eWT_ORB ); SCSlotContainer * pContainer = g_pHero->GetSlotContainer(SI_EQUIPMENT); pContainer->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1,NULL); pContainer->InsertSlot(EquipmentContainer::EQUIP_WEAPON1, ItemSlot); } else { // 秦寸 某腐磐俊 利侩且荐 绝绰 公扁 涝聪促. g_InterfaceManager.GetInterfaceString( eST_INVALID_WEAPON_EQUIP, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return FALSE; } } else { return FALSE; } // 公扁 厘馒 己傍 //胶鸥老 眉农 公扁客 救嘎阑锭 胶鸥老 绝澜栏肺 汲沥 g_pHero->CheckStyleForWeapon(dwWeaponCode); } return TRUE; } //------------------------------------------------------------------------------ /** */ DWORD DebugCommandManager::GetWeaponCode(TCHAR * pszString) { TCHAR szText[INTERFACE_STRING_LENGTH]; ItemInfoParser::Instance()->SetFirst(); BASE_ITEMINFO *pBASE_ITEMINFO = NULL; while( true ) { pBASE_ITEMINFO = ItemInfoParser::Instance()->GetNext(); if( pBASE_ITEMINFO == NULL ) { return 0xFFFFFFFF; } // 老窜 滴锅掳 匙烙内靛父 捞侩( 芒, 瘤莆捞, 坷宏 殿殿 ) g_InterfaceManager.GetInterfaceString( pBASE_ITEMINFO->m_SCNCode, szText, INTERFACE_STRING_LENGTH ); if( Strcmp( szText, pszString ) == 0 ) { // 茫疽促. return pBASE_ITEMINFO->m_Code; } } return 0xFFFFFFFF; } //------------------------------------------------------------------------------ /** */ DWORD DebugCommandManager::GetSkillCode(TCHAR * pszSkillName) { TCHAR szText[INTERFACE_STRING_LENGTH]; SkillInfoParser::Instance()->SetFirst(); SkillScriptInfo *pSkill = NULL; while( true ) { pSkill = SkillInfoParser::Instance()->GetNextSkill(); if( pSkill == NULL ) { return 0xFFFFFFFF; } g_InterfaceManager.GetInterfaceString( pSkill->m_dwSkillNcode, szText, INTERFACE_STRING_LENGTH ); if( Strcmp( szText, pszSkillName ) == 0 ) { // 茫疽促. return pSkill->m_SkillCode; } } return 0xFFFFFFFF; } // ////------------------------------------------------------------------------------ ///** //*/ //BOOL DebugCommandManager::ParseSkill(TCHAR * pszString) //{ // DWORD dwSkillCode = 0; // int iLevel = 1; // TCHAR szTemp[256]; // // _stscanf(pszString,_T("%s %d"),szTemp,&iLevel); // // dwSkillCode = GetSkillCode(szTemp); // if( dwSkillCode == 0xFFFFFFFF ) // { // return FALSE; // } // // if (iLevel <= 0) // { // iLevel = 1; // } // else if (iLevel > 10) // { // iLevel = 10; // } // // DWORD dwFinalSkillCode; // // if (dwSkillCode == 0) // { // dwFinalSkillCode = 0; // // } // else // { // dwFinalSkillCode = dwSkillCode + iLevel - 1; // } // // g_HeroInput.SetCurrentSkillID((SLOTCODE)dwFinalSkillCode); // return TRUE; //} void DebugCommandManager::SaveItemList(eDEBUG_COMMAND eCOMD) { #ifdef _DEV_VER char szFilename[512] = {0, }; SYSTEMTIME t; util::TimeSync::GetLocalTime( &t ); // 牧抛捞呈 酒捞袍 沥焊 府胶飘诀 SCItemSlotContainer* pContainer = NULL; if (eCOMD == eDEBUG_COMMAND_SAVE_INVENTORY) { pContainer = (SCItemSlotContainer*)GET_CAST_DIALOG(InventoryDialog, IM_INVENTORY_MANAGER::INVEN_DLG); _snprintf(szFilename, 511, "./log/InventoryItemList-%d-%d-%d.txt", t.wYear, t.wMonth, t.wDay); SaveItemContainer(szFilename, pContainer); GlobalFunc::DebugOutputMsg( eOUTPUT_MSG_CENTER_SHOW, _T("保存物品清单")); } else if (eDEBUG_COMMAND_SAVE_WAREHOUSE) { //芒绊 #ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM pContainer = (SCItemSlotContainer*)GET_CAST_DIALOG(uiBankDialog, IM_BANK_MANAGER::BANK_DIALOG); #else pContainer = (SCItemSlotContainer*)GET_CAST_DIALOG(BankDialog, IM_BANK_MANAGER::BANK_DIALOG); #endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM _snprintf(szFilename, 511, _T("./log/WareHouseItemList-%d-%d-%d.txt"), t.wYear, t.wMonth, t.wDay); SaveItemContainer(szFilename, pContainer); GlobalFunc::DebugOutputMsg( eOUTPUT_MSG_CENTER_SHOW, _T("仓库物品清单保存(仓库至少要打开一次)")); } #endif//_DEV_VER } void DebugCommandManager::SaveItemContainer(TCHAR* szFilename, SCItemSlotContainer* pCont) { #ifdef _DEV_VER HANDLE hFile = CreateFile( szFilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); SetFilePointer( hFile, 0, NULL, FILE_END); { DWORD written; DWORD ItemCount = 0;; char szData[512] = {0, }; // 矫埃钎扁 SYSTEMTIME t; util::TimeSync::GetLocalTime( &t ); _snprintf(szData, 511, _T("\n//%2d点%2d分%2d秒 - %s\r\n"), t.wHour, t.wMinute, t.wSecond, g_pHero->GetName()); WriteFile( hFile, szData, strlen( szData), &written, NULL); //阿 酒捞袍沥焊 钎扁 DURATYPE ContMaxNum = pCont->GetMaxSlotNum(); SCItemSlot* pSlot = NULL; // 鞘靛疙 钎扁 _snprintf(szData, 511, _T("\t物品名\t物品分类\t类\t数量\t道具代码\t in chart \t排名\t当前耐久度\t插口\t剩余时间\r\n")); WriteFile( hFile, szData, strlen( szData), &written, NULL); for (DURATYPE Index = 0; Index < ContMaxNum; ++Index) { pSlot = (SCItemSlot*)(&(pCont->GetSlot(Index))); if (pSlot->GetItemInfo()->m_Code) { TCHAR szItemName[64] = {0, }; TCHAR szItemType[64] = {0, }; TCHAR szEquipClass[64] = {0, }; DWORD dwQuantity = 0; DWORD dwItemCode = 0; DWORD dwEnchant = 0; DWORD dwRank = 0; DWORD dwDura = 0; DWORD dwMaxDura = 0; DWORD dwSokect = 0; DWORD64 dwExpiredTime = 0; SYSTEMTIME ExpiredTime; ZeroMemory(&ExpiredTime,sizeof(SYSTEMTIME)); TCHAR szExpiredTime[64] = {0, }; //酒捞袍疙 if (pSlot->GetItemInfo()->IsWeapon() || pSlot->GetItemInfo()->IsArmor()) { TCHAR szTemp1[64] = {0, }; TCHAR szTemp2[64] = {0, }; g_InterfaceManager.GetInterfaceString(pSlot->GetItemInfo()->m_NCode, szTemp1, 63); g_InterfaceManager.GetInterfaceString(pSlot->GetItemInfo()->m_SCNCode, szTemp2, 63); Snprintf(szItemName, 63, _T("%s %s"),szTemp1, szTemp2); } else { g_InterfaceManager.GetInterfaceString(pSlot->GetItemInfo()->m_NCode, szItemName, 63); } //项目分类 switch (pSlot->GetItemInfo()->m_wSubType) { case eITEMSUBTYPE_GENERAL: { if (pSlot->IsDivine()) { StrnCopy(szItemType, _T("调试"), 63); } else { StrnCopy(szItemType, _T("正常"), 63); } break; } case eITEMSUBTYPE_ELITE_SSQ: case eITEMSUBTYPE_ELITE:StrnCopy(szItemType, _T("精英"), 63); break; case eITEMSUBTYPE_UNIQUE: StrnCopy(szItemType, _T("独特的"), 63); break; case eITEMSUBTYPE_FATE: StrnCopy(szItemType, _T("幸运的"), 63); break; } //荤侩努贰胶 if ( pSlot->GetItemInfo()->m_wEqClass1 && pSlot->GetItemInfo()->m_wEqClass2 && pSlot->GetItemInfo()->m_wEqClass4 && pSlot->GetItemInfo()->m_wEqClass5 || !(pSlot->GetItemInfo()->m_wEqClass1 || pSlot->GetItemInfo()->m_wEqClass2 || pSlot->GetItemInfo()->m_wEqClass4 || pSlot->GetItemInfo()->m_wEqClass5)) { Snprintf(szEquipClass, 63, _T("全部")); } else if( pSlot->GetItemInfo()->m_wEqClass1 ) { g_InterfaceManager.GetInterfaceString( 10001, szEquipClass, INTERFACE_STRING_LENGTH ); } else if ( pSlot->GetItemInfo()->m_wEqClass2) { g_InterfaceManager.GetInterfaceString( 10003, szEquipClass, INTERFACE_STRING_LENGTH ); } else if ( pSlot->GetItemInfo()->m_wEqClass3) { g_InterfaceManager.GetInterfaceString( 10005, szEquipClass, INTERFACE_STRING_LENGTH ); } else if ( pSlot->GetItemInfo()->m_wEqClass4) { g_InterfaceManager.GetInterfaceString( 10007, szEquipClass, INTERFACE_STRING_LENGTH ); } else if ( pSlot->GetItemInfo()->m_wEqClass5) { g_InterfaceManager.GetInterfaceString( 10009, szEquipClass, INTERFACE_STRING_LENGTH ); } // 荐樊 棺 郴备档 if (pSlot->IsContainValidItem() && pSlot->WithDura()) { dwQuantity = 1; dwDura = pSlot->GetDura(); dwMaxDura = pSlot->GetMaxDura(); } else { dwQuantity = pSlot->GetNum(); dwDura = 0; dwMaxDura = 0; } //酒捞袍内靛 dwItemCode = pSlot->GetItemInfo()->m_Code; //牢忙飘 dwEnchant = pSlot->GetEnchant(); //珐农 dwRank = pSlot->GetRank(); //家南 dwSokect = pSlot->GetSocketNum(); //巢篮矫埃 if (pSlot->GetDateTimeToSYSTEMTIME(ExpiredTime)) { _snprintf(szData, 511, _T("\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d年%d月%d日%d点%d分%d秒为止\r\n"), szItemName, szItemType, szEquipClass, dwQuantity, dwItemCode, dwEnchant, dwRank, dwDura, dwMaxDura, dwSokect, ExpiredTime.wYear, ExpiredTime.wMonth, ExpiredTime.wDay, ExpiredTime.wHour, ExpiredTime.wMinute, ExpiredTime.wSecond); } else { _snprintf(szData, 511, _T("\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\r\n"), szItemName, szItemType, szEquipClass, dwQuantity, dwItemCode, dwEnchant, dwRank, dwDura, dwMaxDura, dwSokect, dwExpiredTime); } WriteFile( hFile, szData, strlen( szData), &written, NULL); ++ItemCount; } } if (ItemCount < 1) { _snprintf(szData, 511, _T("\t<无道具>\r\n")); WriteFile( hFile, szData, strlen( szData), &written, NULL); } } // 颇老 摧扁 CloseHandle( hFile); #endif//_DEV_VER } BOOL DebugCommandManager::ParseCommand( TCHAR * pszString ) { #ifdef _DEV_VER // no operation #else return FALSE; //如果不是dev版本,无条件FALSE #endif if( g_pHero == NULL ) { return FALSE; } #ifdef _DEV_VER #else if( GENERALPARAM->GetSpecialMode() == eSPECIAL_MODE_NONE ) { return FALSE; } #endif if(pszString[0] != '/') { return FALSE; } TCHAR szDevCommand[64] = {0}; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0}; TCHAR szTemp[64] = {0}; TCHAR szTemp2[64] = {0}; TCHAR szTemp3[64] = {0}; TCHAR szParam[64] = {0}; _stscanf(pszString,_T("%s %s"),szDevCommand, szTemp); //累诀夸没辑[001039]:服务器上处理的GM指令虽然不由Clara管理,但需要在Clara处理的特殊指令是硬编码 -_-; ChatDialog * pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG); if(GENERALPARAM->IsNet()==FALSE) // 只能在单身模式下使用的GM指令 { if(0 == Stricmp(szDevCommand, _T("//召唤怪物"))) { int monsterCode; DWORD num; if (_stscanf(pszString,_T("%s %d %d"),szTemp,&monsterCode,&num)==3) { Monster *pMon = GameFunc::SpawnMonster(monsterCode); if(!pMon) pDlg->AddString(_T("怪物生成失败")); } else { // 参数数错误. pDlg->AddString(pszString); g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } return TRUE; } else if(0 == Stricmp(szDevCommand, _T("//生成"))) { SCSlotContainer* pContainer = g_pHero->GetSlotContainer(SI_INVENTORY); if(NULL == pContainer) return TRUE; DWORD iMax = pContainer->GetMaxSlotNum(); TCHAR szTemp[16 + 1] = {0,}; DWORD dwItemCode = 0; DWORD dwItemCnt = 0; BOOL bVal = FALSE; if (3 == _stscanf(pszString,_T("%s %d %d"),szTemp, &dwItemCode, &dwItemCnt)) { for(DWORD k = 0; k < dwItemCnt; k++) { for(DWORD i =0; i < iMax; i++) { if(pContainer->IsEmpty((BYTE)i)) { SCItemSlot ItemSlot; ItemSlot.SetCode((WORD)dwItemCode); pContainer->InsertSlot((BYTE)i, ItemSlot); bVal = TRUE; break; } else { bVal = FALSE; } } } if(FALSE == bVal) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, _T("没有空余位置")); } } return TRUE; } else if(0 == Stricmp(szDevCommand, _T("//速度")) || 0 == Stricmp(szDevCommand, _T("//speed"))) { TCHAR temp_string[INTERFACE_STRING_LENGTH] = {'\0', }; int speed_value; if (_stscanf(pszString,_T("%s %d"), temp_string, &speed_value) == 2) { speed_value = max(speed_value, 1); speed_value = min(speed_value, 5); g_pHero->SetCustomMoveSpeed(TRUE, static_cast(speed_value)); ChatDialog * chat_dialog = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG); if (chat_dialog != NULL) { // GM角色移动速度等级:%d TCHAR message_string[INTERFACE_STRING_LENGTH] = {'\0', }; g_InterfaceManager.GetInterfaceString(70383, temp_string); Sprintf(message_string, temp_string, speed_value); chat_dialog->AddString(message_string); } } } #ifdef _USE_LUA_SCRIPT else if (0 == Stricmp(szDevCommand, _T("//lua"))) { #ifdef _DEV_VER cLuaMain::instance()->ToggleLuaConsole(); #endif //_DEV_VER } #endif //_USE_LUA_SCRIPT } else { if(0 == Stricmp(szDevCommand, _T("/renderoption"))) { if (_stscanf(pszString,_T("%s %s"),szTemp,szTemp2)==2) { if (!Strcmp(szTemp2,_T("light"))) { if (GameFramework::GetCurrentScene()) { BattleScene *pScene = (BattleScene *)GameFramework::GetCurrentScene(); pScene->ShowLightDirection(); if (g_pMap) { if (g_pMap->GetWorldBase()->IsEnabledIndoorLight()) { // 正在使用室内光源 g_InterfaceManager.GetInterfaceString( eST_GM_USING_INDOOR_LIGHT_HELP, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } else { // 正在使用室外光源 g_InterfaceManager.GetInterfaceString( eST_GM_USING_OUTDOOR_LIGHT_HELP, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } WzVector vDir = g_pMap->GetWorldBase()->GetSunLightDir(); Sprintf(szMessage,_T("Light Direction : %f %f %f"),vDir.x,vDir.y,vDir.z); pDlg->AddString( szMessage ); } } } else if (!Strcmp(szTemp2,_T("lightcolor"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { if (g_pMap) { WzVector vDir = g_pMap->GetWorldBase()->GetSunLightDir(); WzColor wcLightColor = WzColor_RGBA(iR,iG,iB,255); g_pMap->GetWorldBase()->SetSunLightColor(wcLightColor); } } WzColor color; color = g_pMap->GetWorldBase()->GetSunLightColor(); Sprintf(szTemp3,_T("Current Light Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("shadowbias"))) { float fDepthBias; if (_stscanf(pszString,_T("%*s %*s %f"),&fDepthBias)== 1) { g_pSunRenderer->x_pManagerShadowMap->SetDepthBias(fDepthBias); } fDepthBias = g_pSunRenderer->x_pManagerShadowMap->GetDepthBias(); Sprintf(szTemp3,_T("Current Shadow Depth Bias : %e"),fDepthBias); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("mapambient"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { if (g_pMap) { WzColor wcLightColor = WzColor_RGBA(iR,iG,iB,255); g_pMap->GetWorldBase()->SetMapAmbientColor(wcLightColor); } } WzColor color; color = g_pMap->GetWorldBase()->GetMapAmbientColor(); Sprintf(szTemp3,_T("Current Mapambient Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("ambient"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { WzColor wcLightColor = WzColor_RGBA(iR,iG,iB,255); g_pSunRenderer->SetColor(wcLightColor,WRIC_AMBIENT); } WzColor color; color = g_pSunRenderer->GetAmbientColor(); Sprintf(szTemp3,_T("Current Ambient Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("shadowcolor"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { WzColor wcShadowColor = WzColor_RGBA(iR,iG,iB,255); g_pSunRenderer->SetShadowColor(wcShadowColor); } WzColor color; color = g_pSunRenderer->GetShadowColor(); Sprintf(szTemp3,_T("Current Shadow Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("projection"))) { float fNear,fFar; if (_stscanf(pszString,_T("%*s %*s %f %f"),&fNear,&fFar)== 2) { g_Camera.SetProjection(fNear,fFar,g_Camera.GetFOV()); } pDlg->AddString(_T("Current Projection Setting")); Sprintf(szTemp3,_T("NearClip : %f FarClip : %f FOV : %f"),g_Camera.GetNearClip(),g_Camera.GetFarClip(),g_Camera.GetFOV() * 180.0f / WZ_PI); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("fov"))) { float fFOV; if (_stscanf(pszString,_T("%*s %*s %f"),&fFOV)== 1) { fFOV *= WZ_PI / 180.0f; g_Camera.SetProjection(g_Camera.GetNearClip(),g_Camera.GetFarClip(),fFOV); } pDlg->AddString(_T("Current Projection Setting")); Sprintf(szTemp3,_T("NearClip : %f FarClip : %f FOV : %f"),g_Camera.GetNearClip(),g_Camera.GetFarClip(),g_Camera.GetFOV() * 180.0f / WZ_PI); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("warp"))) { int iID; if (_stscanf(pszString,_T("%*s %*s %d"),&iID)== 1) { Object *pObject = g_ObjectManager.GetObject(iID); if (pObject) { WzVector vPos = pObject->GetPosition(); if (g_pHero) { MSG_CG_MAP_TELEPORT_SYN SendPacket; SendPacket.m_byCategory = CG_MAP; SendPacket.m_byProtocol = CG_MAP_TELEPORT_SYN; SendPacket.vPos = vPos; g_pHero->SendPacket( &SendPacket, sizeof(SendPacket) ); } } } } else if (!Strcmp(szTemp2,_T("cambient"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { if (g_pMap) { WzColor wcLightColor = WzColor_RGBA(iR,iG,iB,255); g_pMap->SetCharacterAmbientColor(wcLightColor); g_pMap->SetApplyAnotherLight(TRUE); } } WzColor color; color = g_pMap->GetCharacterAmbientColor(); Sprintf(szTemp3,_T("Current Character Ambient Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("trate"))) { float fRate; if (_stscanf(pszString,_T("%*s %*s %f"),&fRate)== 1) { if (g_pMap) { GRAPHICPARAM->SetTerrainColorRate(fRate); } } fRate = GRAPHICPARAM->GetTerrainColorRate(); Sprintf(szTemp3,_T("Current Character Terrain Color Rate: %f"),fRate); pDlg->AddString(szTemp3); } else if (!Strcmp(szTemp2,_T("clight"))) { int iR,iG,iB; if (_stscanf(pszString,_T("%*s %*s %d %d %d"),&iR,&iG,&iB)== 3) { if (g_pMap) { WzColor wcLightColor = WzColor_RGBA(iR,iG,iB,255); WzVector vDir = g_pMap->GetWorldBase()->GetSunLightDir(); g_pSunRenderer->x_pManagerLight->SetCustomDirectionalLight(wcLightColor,vDir); g_pSunRenderer->x_pManagerLight->SetCustomLightStyle(CLS_DEFAULT); } } const St_LightInformation *pInfo = g_pSunRenderer->x_pManagerLight->GetCustomLightInfo(0); if (pInfo) { WzColor color; color = pInfo->m_wcColor; Sprintf(szTemp3,_T("Current Character Directional Light Color : %d %d %d"),Red_WzColor(color),Green_WzColor(color),Blue_WzColor(color)); pDlg->AddString(szTemp3); } } else if (!Strcmp(szTemp2,_T("maxcameradistance"))) { float fDistance; if (_stscanf(pszString,_T("%*s %*s %f"),&fDistance)== 1) { if (g_pMap) { GENERALPARAM->SetMaxCameraDistance(fDistance); } } fDistance = GENERALPARAM->GetMaxCameraDistance(); Sprintf(szTemp3,_T("Current Max Camera Distance: %f"),fDistance); pDlg->AddString(szTemp3); } } return TRUE; } else if((0 == Stricmp(szDevCommand, _T("//击杀"))) || (0 == Stricmp(szDevCommand, _T("//kill")))) { //获得角色所选中的目标 Object *pObj = g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if(pObj) { //判断是否为怪物类型 if(pObj->IsKindOfObject(MONSTER_OBJECT)) { //" "+加上怪物目标键的价格发送到服务器. _tcscat( pszString , _T(" ") ); TCHAR szObjectKey[30]; _itoa(g_HeroInput.GetCurrentTarget(),szObjectKey,10); _tcscat( pszString , szObjectKey); return FALSE; // 必须向服务器发送GM指令和目标密钥。为了发送分组,将return值处理为FALSE } } g_InterfaceManager.GetInterfaceString( 7006, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); return TRUE; } else if((0 == Stricmp(szDevCommand, _T("//冷却时间"))) || (0 == Stricmp(szDevCommand, _T("//ctime")))) { xGetCooltimeManager()->ResetSkillCooltime(); xGetCooltimeManager()->ResetItemCooltime(); // //技能冷却时间初始化 // xGetHeroData()->ResetCooltime(); ////g_pHero->GetSCCharacter().InitializeCooltime(); ////物品冷却时间初始化 //g_pHero->GetSCPlayer().InitializeItemCooltime(); } #ifdef _DEV_VER #if (WZENGINEVER >= 480) else if(0 == Strcmp(pszString, _T("//控制台") ) || 0 == Strcmp(pszString, _T("//console") ) ) { LogManager::ToggleConsoleView(); } else if( StrStr( pszString, _T("//控制台 ") ) ) { LogManager::ProcessCommand( pszString + _tcslen(_T("//控制台 ")) ); } else if( StrStr( pszString, _T("//console ") ) ) { LogManager::ProcessCommand( pszString + _tcslen(_T("//console ")) ); } #ifdef _DEBUG else if( StrStr( pszString, _T("//polymorph") ) ) { static DWORD s_ObjectKey = 112211; if( Object* pObject = g_ObjectManager.GetObject( s_ObjectKey )) { if( pObject->IsKindOfObject( CHARACTER_OBJECT ) ) { Character* pCharacter = (Character*)pObject; pCharacter->SetPolymorph( pCharacter->IsPolymorph() == FALSE ); } } } #endif #ifdef _DEV_VER else if( Strcmp( pszString, _T("//option") ) == 0 ) { uiOptionMan::ShowOptionDialog(0); } else if( Strcmp( pszString, _T("//option2") ) == 0 ) { uiOptionMan::ShowKeyBindingDialog(); } else if( Strcmp( pszString, _T("//skill_max") ) == 0 ) { std::vector new_code_array; if( xGetSkillData()->MakeMaxSkillCodeArray( new_code_array ) == true ) { { MSG_CG_GM_STRING_CMD_SYN SendPacket; ZeroMemory(SendPacket.m_szStringCmd,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); strcpy(SendPacket.m_szStringCmd, "技能点数上升333" ); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&SendPacket,sizeof(SendPacket)); } { MSG_CG_SKILL_SELECT_SKILLPOINT_SYN send_packet; send_packet.skill_count = new_code_array.size(); for( size_t i=0;i!=new_code_array.size();++i) { send_packet.skill_code_array[i] = new_code_array[i]; } GlobalFunc::SendPacket( CI_GAMESERVERIDX, &send_packet, sizeof(send_packet) ); } } } #endif //_DEV_VER #endif // (WZENGINEVER >= 480) else if( StrStr( pszString, _T("//skill_log") ) ) { g_InterfaceManager.ToggleSkillResultMessage(); } #endif // _DEV_VER #ifdef _USE_LUA_SCRIPT else if (0 == Stricmp(szDevCommand, _T("//lua"))) { #ifdef _DEV_VER cLuaMain::instance()->ToggleLuaConsole(); #endif //_DEV_VER } #endif else if((0 == Stricmp(szDevCommand, _T("//保存背包物品"))) || (0 == Stricmp(szDevCommand, _T("//savei")))) { SaveItemList(eDEBUG_COMMAND_SAVE_INVENTORY); return TRUE; } else if((0 == Stricmp(szDevCommand, _T("//保存仓库物品"))) || (0 == Stricmp(szDevCommand, _T("//savew")))) { SaveItemList(eDEBUG_COMMAND_SAVE_WAREHOUSE); return TRUE; } else if(0 == Stricmp(szDevCommand, _T("//autoefflv"))) { TCHAR szOption[8] = {0}; if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on"))) { g_pEffectManager->SetOption( EOPT_AUTOEFFLVLCTL ); GlobalFunc::OutputMsg_SysMsg(_T("效果等级自动调整On")); } else if (!Stricmp(szTemp2,_T("off"))) { g_pEffectManager->UnsetOption( EOPT_AUTOEFFLVLCTL ); GlobalFunc::OutputMsg_SysMsg(_T("效果等级自动调整Off")); } else { g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_SysMsg(szMessage); } } else { g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_SysMsg(szMessage); } return TRUE; } else if(0 == Stricmp(szDevCommand, _T("//autoeffrate"))) { TCHAR szOption[8] = {0}; if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on"))) { g_pEffectManager->SetOption( EOPT_AUTOEFFRATECTL ); GlobalFunc::OutputMsg_SysMsg(_T("自动调整效果生成比例 On")); } else if (!Stricmp(szTemp2,_T("off"))) { g_pEffectManager->UnsetOption( EOPT_AUTOEFFRATECTL ); GlobalFunc::OutputMsg_SysMsg(_T("自动调整效果生成比例 Off")); } else { g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_SysMsg(szMessage); } } else { g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_SysMsg(szMessage); } return TRUE; } #ifdef _DEV_VER_UI else if (0 == Stricmp(szDevCommand, _T("//仇恨")) || (0 == Stricmp(szDevCommand, _T("//show_aggro")))) { uiTargetAggro* target_aggro_dialog = GET_CAST_DIALOG(uiTargetAggro, IM_TARGET_MANAGER::TARGET_AGGRO); if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { target_aggro_dialog->set_display_type(atoi(szTemp2)); } else { target_aggro_dialog->set_display_type(0);//uiTargetAggro::kDisplay_Normal } } else if (0 == Stricmp(szDevCommand, _T("//通用物品")) || (0 == Stricmp(szDevCommand, _T("//gmitem")))) { if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on")) || !Stricmp(szTemp2,_T("脑"))) { ShowGMWin(UI_GM_ITEM_WINDOW, true); } else if (!Stricmp(szTemp2,_T("off")) || !Stricmp(szTemp2,_T("阐"))) { ShowGMWin(UI_GM_ITEM_WINDOW, false); } else { ItemSearch(szTemp2); } } else { OpenGMWin(UI_GM_ITEM_WINDOW); } } #ifdef _DEV_VER #ifdef _NA_006519_20130311_TEXTURE_VIEWER else if(0 == Stricmp(szDevCommand, _T("//查看器")) || (0 == Stricmp(szDevCommand, _T("//viewer")))) { OpenTextureViewerWin(UI_TEXTURE_VIEWER_SEARCH_WINDOW); OpenTextureViewerWin(UI_TEXTURE_VIEWER_TEXTURE_WINDOW); } #endif #endif #ifdef _DH_GM_NPC_WINDOW else if (0 == Stricmp(szDevCommand, _T("//通用实体")) || (0 == Stricmp(szDevCommand, _T("//gmnpc")))) { if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on")) || !Stricmp(szTemp2,_T("脑"))) { ShowGMWin(UI_GM_ITEM_NPC_WINDOW, true); } else if (!Stricmp(szTemp2,_T("off")) || !Stricmp(szTemp2,_T("阐"))) { ShowGMWin(UI_GM_ITEM_NPC_WINDOW, false); } else { ItemSearch(szTemp2); } } else { OpenGMWin(UI_GM_ITEM_NPC_WINDOW); } } #endif//_DH_GM_NPC_WINDOW #ifdef _DEV_VER else if (0 == Stricmp(szDevCommand, _T("//autokill"))) { if (CGeneralGameParam::Instance()->IsEnableAutoKill()) { CGeneralGameParam::Instance()->SetEnableAutoKill(false); } else { CGeneralGameParam::Instance()->SetEnableAutoKill(true); } } else if (0 == Stricmp(szDevCommand, _T("//autocooltime"))) { if (CGeneralGameParam::Instance()->IsEnableAutoCooltimeReset()) { CGeneralGameParam::Instance()->SetEnableAutoCooltimeReset(false); } else { CGeneralGameParam::Instance()->SetEnableAutoCooltimeReset(true); } } #endif else if (0 == Stricmp(szDevCommand, _T("//show_trigger"))) { if (CGeneralGameParam::Instance()->IsShowTrigger()) { CGeneralGameParam::Instance()->SetShowTrigger(false); } else { CGeneralGameParam::Instance()->SetShowTrigger(true); } } //#ifdef _DEV_VER //_DH_FULL_MAP_PORTAL else if (0 == Stricmp(szDevCommand, _T("//set_map_portal"))) { enum { kToggle = 0, kOpen = 1, kClose = 2, }; BYTE open_type = kToggle; ContinentMapDlg* continent_map_dialog = GET_CAST_DIALOG(ContinentMapDlg, IM_RADAR_MANAGER::CONTINENT_MAP_DLG); if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on")) || !Stricmp(szTemp2,_T("脑"))) { open_type = kOpen; } else if (!Stricmp(szTemp2,_T("off")) || !Stricmp(szTemp2,_T("阐"))) { open_type = kClose; } else { g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_SysMsg(szMessage); } } else { open_type = kToggle; } if (continent_map_dialog) { bool is_usable = continent_map_dialog->get_is_useable_map_portal(); if (open_type == kToggle) { is_usable = !(is_usable); } else { is_usable = (open_type == kOpen) ? true:false; } continent_map_dialog->set_is_useable_map_portal(is_usable); } ContinentEp2MapDlg* continent_map_dialog2 = GET_CAST_DIALOG(ContinentEp2MapDlg, IM_RADAR_MANAGER::CONTINENT_MAP_EP2_DLG); if (continent_map_dialog2) { bool is_usable = continent_map_dialog2->get_is_useable_map_portal(); if (open_type == kToggle) { is_usable = !(is_usable); } else { is_usable = (open_type == kOpen) ? true:false; } continent_map_dialog2->set_is_useable_map_portal(is_usable); } } //#endif//_DEV_VER //_DH_FULL_MAP_PORTAL //#ifdef _DH_SHOW_UI_NAME else if (0 == Stricmp(szDevCommand, _T("//show_ui_name"))) { if (CGeneralGameParam::Instance()->IsShowUIName()) { CGeneralGameParam::Instance()->SetShowUIName(false); } else { CGeneralGameParam::Instance()->SetShowUIName(true); } } //#endif//_DH_SHOW_UI_NAME //#ifdef _DEBUG_STRINGIDEX_SHOW else if (0 == Stricmp(szDevCommand, _T("//show_string_id"))) { if (CGeneralGameParam::Instance()->IsShowStringId()) { CGeneralGameParam::Instance()->SetShowStringId(false); } else { CGeneralGameParam::Instance()->SetShowStringId(true); } } //#endif//_DEBUG_STRINGIDEX_SHOW //#ifdef _SCJ_SHOW_ITEM_ID else if (0 == Stricmp(szDevCommand, _T("//show_item_id"))) { if (CGeneralGameParam::Instance()->IsShowItemId()) { CGeneralGameParam::Instance()->SetShowItemId(false); } else { CGeneralGameParam::Instance()->SetShowItemId(true); } } //#endif //#ifdef _SCJ_SHOW_ITEM_ID //#ifdef _SCJ_SHOW_NPC_ID else if (0 == Stricmp(szDevCommand, _T("//show_npc_id"))) { if (CGeneralGameParam::Instance()->IsShowNpcId()) { CGeneralGameParam::Instance()->SetShowNpcId(false); } else { CGeneralGameParam::Instance()->SetShowNpcId(true); } } //#endif _SCJ_SHOW_NPC_ID else if(0 == Stricmp(szDevCommand, _T("//get_skill_tick"))) { if (_stscanf(pszString,_T("%s"),szTemp)==1) { FILE *fp = fopen("skillspeed.txt", "w+"); if (fp == NULL) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "错误:skillspeed.txt文件打开失败"); return FALSE; } int pre_resource_code = 0; int pre_skill_class_code = 0; int resource_code = 0; int animation_code = 0; WzID temp_id = 0; CWzUnit* unit = NULL; const int temp_resource_id = SCRIPT_RESOURCE_ID_OFFSET + 120003; char code[6] = {0,}; SkillInfoParser::Instance()->SetFirst(); SkillScriptInfo* skill_info = SkillInfoParser::Instance()->GetNextSkill(); fprintf(fp, "SkillCode\tSkillClassCode\tMaxTick\tAttacTick\tAniPlayTime\tAniCode\tSkillName\tClassDefine\n"); while(skill_info != NULL) { if (skill_info->m_bySkillUserType == 0)// 0 = 玩家 { //if (pre_skill_class_code != skill_info->m_SkillClassCode)(相同技能类重复防止代码)-全部拔掉注释 { pre_skill_class_code = skill_info->m_SkillClassCode; resource_code = GetCharacterResourceCode(skill_info->m_dwClassDefine); animation_code = (skill_info->m_wzidAnimationCode[0].id); WzIDToString(code, animation_code); code[5] = '\0'; if (Stricmp("NULL", code) == 0) { // m_SkillClassCode, 没有动画代码., resource_code, AniCode, SkillName, ClassDefine fprintf(fp, "%d\t%d\t没有动画代码.\tResource_code(%d)\t%s\t%s\t%d\n", skill_info->m_SkillCode, skill_info->m_SkillClassCode, 0, code, skill_info->m_szSkillName, skill_info->m_dwClassDefine); skill_info = SkillInfoParser::Instance()->GetNextSkill(); continue; } RESOURCE_INFO* res_info = GraphicResourceList::Instance()->GetItemInfo(resource_code); if (res_info != NULL) { if (resource_code != pre_resource_code)// 新加载 { if (pre_resource_code != 0)// 以前WzUnit不是0就解除 { g_pSunRenderer->x_pManagerWzUnitLoader->DestroyWzUnit(temp_id); } temp_id = g_pSunRenderer->x_pManagerWzUnitLoader->LoadWzUnit(temp_resource_id, res_info->szFilename); unit = g_pSunRenderer->x_pManagerWzUnitLoader->GetWzUnit(temp_id); pre_resource_code = resource_code; } if (unit != NULL) { float custom_frame = -1.0f; WzAnimationInfo* animation_info = unit->GetAnimationInfo(animation_code); float max_frame = (float)g_pSunRenderer->GetNumFrameOfAnimation(animation_info->m_hWzdAni) - 1; // 2014.09.03 增加技能播放时间 float play_time = (max_frame*1000/30) / animation_info->m_fAnimationSpeed; // (帧输出时间/播放速度)=>动画播放时间 play_time = (play_time)?floor(play_time+0.5f):ceil(play_time-0.5f); max_frame = (max_frame*1000/30) * animation_info->m_fAnimationSpeed;//技能总框架=>tick max_frame = (max_frame)?floor(max_frame+0.5f):ceil(max_frame-0.5f); int max_custom_count = animation_info->GetNumCustomInfo(); if (max_custom_count > 0) { WzCustomInfo* custom_info_ptr = animation_info->GetCustomInfo(0); if (custom_info_ptr != NULL) { custom_frame = custom_info_ptr->m_fCustomFrame; custom_frame = (custom_frame*1000/30) * animation_info->m_fAnimationSpeed;//第一个event的第一个效果框架=>tick custom_frame = (custom_frame)?floor(custom_frame+0.5f):ceil(custom_frame-0.5f); } } // m_SkillClassCode, MaxTick, AttacTick, AniPlayTime, AniCode, SkillName, ClassDefine fprintf(fp, "%d\t%d\t%d\t%d\t%d\t%s\t%s\t%d\n", skill_info->m_SkillCode, skill_info->m_SkillClassCode, (int)(max_frame), (int)(custom_frame),(int)(play_time), code, skill_info->m_szSkillName, skill_info->m_dwClassDefine); } else { // m_SkillClassCode, 没有资源., resource_code, AniCode, SkillName, ClassDefine fprintf(fp, "%d\t%d\t没有资源.\tResource_code(%d)\t%s\t%s\t%d\n", skill_info->m_SkillCode, skill_info->m_SkillClassCode, resource_code, code, skill_info->m_szSkillName, skill_info->m_dwClassDefine); } } else { // m_SkillClassCode, 没有资源代码., resource_code, AniCode, SkillName, ClassDefine fprintf(fp, "%d\t%d\t没有资源代码.\tResource_code(%d)\t%s\t%s\t%d\n", skill_info->m_SkillCode, skill_info->m_SkillClassCode, resource_code, code, skill_info->m_szSkillName, skill_info->m_dwClassDefine); } } /*else { // 如果之前的技能代码和现在的技能代码相同。 }*/ } skill_info = SkillInfoParser::Instance()->GetNextSkill(); } g_pSunRenderer->x_pManagerWzUnitLoader->DestroyWzUnit(temp_id); //删除最后的unit fflush(fp); fclose(fp); } else { // 参数数错误. pDlg->AddString(pszString); g_InterfaceManager.GetInterfaceString( eST_GM_INVALID_NUM_PARAM, szMessage, INTERFACE_STRING_LENGTH ); pDlg->AddString( szMessage ); } return TRUE; } //_SCJ_GM_CMD_CREATE_ITEM_TO else if((0 == Stricmp(szDevCommand, _T("//连续生成"))) || (0 == Stricmp(szDevCommand, _T("//maketo")))) { SendMaketoPacket(pszString); return TRUE; } else if ((0 == Stricmp(szDevCommand, _T("//区域占领战面板"))) || (0 == Stricmp(szDevCommand, _T("//dominationchannel")))) { int channel_id = atoi(szTemp); if (channel_id > 0) { PROGRAMPARAM->SetDominationChannel(channel_id); } } #ifdef _NA_003027_20111013_HONOR_SYSTEM else if (0 == Stricmp(szDevCommand, _T("//title_change"))) { int title_code = atoi(szTemp); HonorSystem::HonorSystemFunction::UseTitleNameForHero(title_code); } else if (0 == Stricmp(szDevCommand, _T("//fame_point"))) { int fame_code; int fame_point; _stscanf(pszString,_T("%s %d %d"), szTemp, &fame_code, &fame_point); HonorSystem::HonorSystemFunction::OnChangeFamePoint(fame_code, (DWORD)fame_point); HonorSystem::GetHonorSystemData().ChangeFamePoint(fame_code, (DWORD)fame_point); } else if (0 == Stricmp(szDevCommand, _T("//repute_point"))) { int repute_code; int repute_point; _stscanf(pszString,_T("%s %d %d"), szTemp, &repute_code, &repute_point); HonorSystem::HonorSystemFunction::OnChangeReputePoint(repute_code, (DWORD)repute_point); HonorSystem::GetHonorSystemData().ChangeReputePoint(repute_code, (DWORD)repute_point); } #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA_007086_20140318_MONSTERBOOK else if (0 == Stricmp(szDevCommand, _T("//怪物图鉴")) || (0 == Stricmp(szDevCommand, _T("//monsterbook")))) { uiMonsterBookMan* monsterbook_man = GET_DIALOG_MANAGER(uiMonsterBookMan, UIMAN_MONSTERBOOK); if (monsterbook_man == NULL) { return FALSE; } if (_stscanf(pszString,_T("%s %s"),szTemp, szTemp2)==2) { if (!Stricmp(szTemp2,_T("on")) || !Stricmp(szTemp2,_T("脑"))) { monsterbook_man->ActiveMonsterIconAll(TRUE); } else if (!Stricmp(szTemp2,_T("off")) || !Stricmp(szTemp2,_T("阐"))) { monsterbook_man->ResetMonsterBookData(); } } else { monsterbook_man->ActiveMonsterIconAll(TRUE); } } #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM else if (0 == Stricmp(szDevCommand, _T("//签到")) || (0 == Stricmp(szDevCommand, _T("//attendance")))) { int year=0, month=0; if (_stscanf(pszString,_T("%s %d %d"),szTemp, &year, &month)==3) { uiAttendanceCheckDialog* ui_attendance_check_dialog = GET_CAST_DIALOG(uiAttendanceCheckDialog, IM_ATTENDANCE_CHECK_MANAGER::ATTENDANCE_CHECK_DIALOG); if (ui_attendance_check_dialog) { ui_attendance_check_dialog->set_default_month(month); ui_attendance_check_dialog->UpdateCalendar(year, month); } } } #endif //_NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM #endif//_DEV_VER } return FALSE; } #ifdef _DEV_VER //#ifdef _SCJ_GM_CMD_CREATE_ITEM_TO bool DebugCommandManager::SendMaketoPacket(TCHAR* command_string) { TCHAR error_string[MAX_MESSAGE_LENGTH] = {0,}; TCHAR command[MAX_MESSAGE_LENGTH]; TCHAR temp_buffer[MAX_MESSAGE_LENGTH]; int from_item_code; int to_item_code; _stscanf(command_string,"%s %d %d %s",command,&from_item_code,&to_item_code,temp_buffer); const int maketo_max_count = 15; //一次最多可生成15个 int count = 0; if((0 == Stricmp(command, _T("//连续生成"))) || (0 == Stricmp(command, _T("//maketo")))) { TCHAR message_string[MAX_MESSAGE_LENGTH]; TCHAR* first_item_str = NULL; TCHAR* second_item_str = NULL; TCHAR* message = NULL; first_item_str = util::GetToken( command_string, temp_buffer, _T(" ") ); if (first_item_str && _ttoi(first_item_str) != 0) { second_item_str = util::GetToken( first_item_str, temp_buffer, _T(" ") ); } if (second_item_str && _ttoi(second_item_str) != 0) { message = util::GetToken( second_item_str, temp_buffer, _T(" ") ); } if (message == NULL || _ttoi(message) <= 0 || from_item_code <= 0 || to_item_code <= 0) { Sprintf(error_string, "连续生成参数错误."); } else { int start = min(from_item_code,to_item_code); int end = max(from_item_code,to_item_code); for (int i=start; i<=end; ++i, ++count) { if (count>=maketo_max_count) { Sprintf(error_string, "一次最多生成15个。生成%d到%d.", start,start+maketo_max_count-1); break; } _stprintf(message_string,"make %d%s",i,message); MSG_CG_GM_STRING_CMD_SYN msg; ZeroMemory(msg.m_szStringCmd,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); StrnCopy(msg.m_szStringCmd,message_string,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } } } if (error_string != "\0") { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, error_string); } return (count>0)?true:false; } #endif//_DEV_VER int DebugCommandManager::GetCharacterResourceCode(DWORD class_define_code) { int resource_code = 0; switch (class_define_code) { case eCHAR_BERSERKER: case (eCHAR_BERSERKER+10): // 兑换角色+10 resource_code = 40001; break; case eCHAR_DRAGON: case (eCHAR_DRAGON+10): // 兑换角色+10 resource_code = 40002; break; case eCHAR_SHADOW: case (eCHAR_SHADOW+10): // 兑换角色+10 resource_code = 40003; break; case eCHAR_VALKYRIE: case (eCHAR_VALKYRIE+10): // 兑换角色+10 resource_code = 40004; break; case eCHAR_MAGICIAN: case (eCHAR_MAGICIAN+10): // 兑换角色+10 resource_code = 40005; break; case eCHAR_MYSTIC: //_NA_004965_20120613_NEW_CHARACTER_MYSTIC case (eCHAR_MYSTIC + 10): resource_code = 40012; break; case eTRANSFORM_TYPE_DRAGON1: case (eTRANSFORM_TYPE_DRAGON1+10): // 兑换角色+10 resource_code = 59051; break; case eTRANSFORM_TYPE_DRAGON2: case (eTRANSFORM_TYPE_DRAGON2+10): // 兑换角色+10 resource_code = 59052; break; case eCHAR_HELLROID: //_NA_000000_20130812_NEW_CHARACTER_HELLROID case (eCHAR_HELLROID+10): // 兑换角色+10 resource_code = 40013; break; case eCHAR_WITCHBLADE: //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case (eCHAR_WITCHBLADE+10): // 兑换角色+10 resource_code = 40015; break; default: resource_code = 0; break; } return resource_code; } #ifdef _DEV_VER void DebugCommandManager::OpenGMWin(BYTE gm_window_type) { uiGMWindowMan* ui_gm_window_manager_ptr = GET_DIALOG_MANAGER(uiGMWindowMan, UIMAN_GM_WINDOW); if (ui_gm_window_manager_ptr) { ui_gm_window_manager_ptr->ToggleGMWindow(gm_window_type); } } void DebugCommandManager::ShowGMWin(BYTE gm_window_type, bool value) { uiGMWindowMan* ui_gm_window_manager_ptr = GET_DIALOG_MANAGER(uiGMWindowMan, UIMAN_GM_WINDOW); if (ui_gm_window_manager_ptr) { ui_gm_window_manager_ptr->ShowGMWindow(gm_window_type, value); } } void DebugCommandManager::ItemSearch(TCHAR* search_word) { uiGMWindowMan* ui_gm_window_manager_ptr = GET_DIALOG_MANAGER(uiGMWindowMan, UIMAN_GM_WINDOW); if (ui_gm_window_manager_ptr) { ui_gm_window_manager_ptr->ItemSearch(search_word); } } #endif _DEV_VER //------------------------------------------------------------------------------ bool DebugCommandManager::Check_MashGroup() { TCHAR szFName[_MAX_FNAME] = { 0, }; TCHAR szExt[_MAX_EXT] = { 0, }; FILE* wirte_fp = fopen("check_wzm_meshgroup.txt", "wt"); if (wirte_fp == NULL) { return false; } fprintf(wirte_fp, "================================================\n"); fprintf(wirte_fp, "== wzm文件mesh group check ==\n"); fprintf(wirte_fp, "== 1. 没有资源。=>GraphicResourceList.txt的目录中有,但实际上没有资源时. ==\n"); fprintf(wirte_fp, "== 2. 没有mesh组。=>在该wzm文件中未设置mesh组的状态 ==\n"); fprintf(wirte_fp, "== 上述两项内容均需修改. ==\n"); fprintf(wirte_fp, "================================================\n"); util::SolarHashTable::iterator begin = GraphicResourceList::Instance()->Begin(); util::SolarHashTable::iterator end = GraphicResourceList::Instance()->End(); for (; begin != end; ++begin) { RESOURCE_INFO* res_info = *begin; if (res_info == NULL) { continue;; } //! 1. 检查文件 FILE *fp = fopen(res_info->szFilename,"rb"); if (fp == NULL) { //fprintf(wirte_fp, "没有资源.\t%d\t%s\n", res_info->dwCode, res_info->szFilename); continue; } fclose(fp); _splitpath(res_info->szFilename, NULL, NULL, szFName, szExt); if (_tcsicmp(szExt, _T(".wzu")) != 0) { continue; } //! 2. 检查wzu文件mesh组 const int temp_resource_id = SCRIPT_RESOURCE_ID_OFFSET + 120004; WzID temp_id = g_pSunRenderer->x_pManagerWzUnitLoader->LoadWzUnit(temp_resource_id, res_info->szFilename, TRUE, ULS_CHECK_VALID_ANIMATION | ULS_NO_MULTITHREAD); CWzUnit* unit = g_pSunRenderer->x_pManagerWzUnitLoader->GetWzUnit(temp_id); if (unit == NULL) { continue; } for( int i = 0; i <= WZ_MAX_LOD; ++i ) { CWzdBase* wzd_base = unit->GetWzdPtr(i); if (wzd_base == NULL) { continue;; } //! 2.1 只检查wzm文件是否有mesh组. _splitpath(wzd_base->GetFileName(), NULL, NULL, szFName, szExt); if (_tcsicmp(szExt, _T(".wzm")) != 0) { continue; } if ((wzd_base->GetNumberOfMeshGroup() <= 0) #if WZENGINEVER >= 400 || (wzd_base->GetMaxMeshGroup() <= 0) #endif //#if WZENGINEVER >= 400 ) { fprintf(wirte_fp, "没有mesh组.\tLOD:%d\t%s\n", i, wzd_base->GetFileName()); } else { // 获得单元子类型 for (int sub_index = 0; sub_index < unit->GetNumSubType(); ++sub_index) { CWzUnitSubType* unit_sub_type = unit->GetSubType(sub_index); for (int render_index = 0; render_index < unit_sub_type->GetNumRenderInfo(); ++render_index) { const WzRenderInfo* render_info = unit_sub_type->GetRenderInfo(render_index); #if WZENGINEVER >= 400 if (render_info->m_iMesh >= wzd_base->GetMaxMeshGroup()) { fprintf(wirte_fp, "没有消息组[%d].\tLOD:%d\t%s\n", render_info->m_iMesh, i, wzd_base->GetFileName()); } #endif //#if WZENGINEVER >= 400 } } } } g_pSunRenderer->x_pManagerWzUnitLoader->DestroyWzUnit(temp_id); } fclose(wirte_fp); return true; } #ifdef _DEV_VER #ifdef _NA_006519_20130311_TEXTURE_VIEWER void DebugCommandManager::OpenTextureViewerWin(BYTE gm_window_type) { uiTextureViewerMan* ui_texture_viewer_manager_ptr = GET_DIALOG_MANAGER(uiTextureViewerMan, UIMAN_TEXTURE_VIEWER_MANAGER); if(gm_window_type == UI_TEXTURE_VIEWER_SEARCH_WINDOW) { ui_texture_viewer_manager_ptr->textureviewer_search_start(); } if (ui_texture_viewer_manager_ptr) { ui_texture_viewer_manager_ptr->ToggleTextureViewerWindow(gm_window_type); } } #endif #endif