3332 lines
242 KiB
C++
3332 lines
242 KiB
C++
|
|
|
|
#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 <SCItemSlot.h>
|
|
#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<uiPartyMan *>(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<uiGuildMan*>(
|
|
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<stGUILD_INFO>(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<uiGuildMan *>(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<uiTradeMan *>(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<uiTradeMan *>(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<uiGuildMan *>(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<uiRadarMan*>(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<uiHelpMan*>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP));
|
|
if (help_man)
|
|
{
|
|
help_man->RestoreHelpInfo();
|
|
}
|
|
#endif //_SCJ_REMOVE_ANNOUNCE_WINDOW
|
|
|
|
//! 涅胶飘 柳青 惑怕
|
|
uiQuestMan* quest_man = static_cast<uiQuestMan*>(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<float>(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<int> 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<RESOURCE_INFO *>::iterator begin = GraphicResourceList::Instance()->Begin();
|
|
util::SolarHashTable<RESOURCE_INFO *>::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 |