//------------------------------------------------------------------------------ // BattleScene.cpp // (C) 2005 Webzen Sunstudio //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "SceneBase.h" #include "GameFramework.h" #include "Player.h" #include "Monster.h" #include "BattleScene.h" #include "varpacket.h" #include "Camera.h" #include "ItemManager.h" #include "HotKeyManager.h" #include "HeroActionInput.h" #include "Battle.h" #include "SoundBGM.h" #include "SolarDialog.h" #include "LoadScene.h" #include "Map.h" #include "GameFunc.h" #include "ObjectManager.h" #include "RewardDialog.h" #include "Hero.h" #include "InterfaceManager.h" #include "Clone.h" #include "CloneManager.h" #include "ProjectileManagerEx.h" #include "ChatDialog.h" #include "HeroGaugeDialog.h" #include "TriggerParser.h" #include #include #include "TriggerManEx.h" #include "OptimizationManager.h" #include "HelpMessageParser.h" #include "Message.h" #include "MapUnitCacher.h" #include "NPCInfoParser.h" #include "SkillEffectInfoParser.h" #include "MouseHandler.h" #include "SystemDialog.h" #include "EquipmentContainer.h" #include "SkillInfoParser.h" #include "CommonCharacterFormula.h" #include "Mouse.h" #include "ItemInfoParser.h" #include "GameOptionParser.h" #include "PlayerAttributes.h" #include #include "VillageScene.h" #include "NPC.h" #include "EventInfoParser.h" #include "uiPartyMember/uiPartyMember.h" #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER #include "GuildSystem/GuildSystemFunction.h" #else #include "uiGuildMan/uiGuildMan.h" #include "uiGuildCreate/uiGuildCreate.h" #include "uiGuildWindow/uiGuildWindow.h" #include "uiGuildMenu/uiGuildMenu.h" #include "uiGuildMain/uiGuildMain.h" #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER #include "uiItemCompositeMan/uiItemCompositeMan.h" #include "uiPartyMan/uiPartyMan.h" #include "uiChaoSystemMan/uiChaoSystemMan.h" #include "TargetDialog.h" #include "tiredsystemdialog.h" #include "uiMissionRelayMan/uiMissionRelayMan.h" #include "MissionRelay.h" #include "ChatPersonalOption.h" #include "uiAreaConquestMan/uiAreaConquestMan.h" #include "BattleLobby.h" #include "Global.h" #include "uiBattleZoneMan/uiBattleZoneMan.h" #include "uiSystemMan/uiSystemMan.h" #include "BGMSoundInfoParser.h" #include "MouseCursor.h" #include "KeyQueueManager.h" #include "StateInfoParser.h" #include "RadarInfoParser.h" #include "radardialog.h" #include "radarplusdialog.h" #include "RadarFullDialog.h" #include "CastDialog.h" #include "CastLeaveFieldDialog.h" #include "uiHelpMan/uiHelpMan.h" #include "MapInfoParser.h" #include "uiPartyMember/uiPartyMember.h" #include "uiQuestMan/uiQuestMan.h" #include "QuestManager_Concrete.h" #include "MissionManager_Concrete.h" #include "uiPartyMan/uiPartyMan.h" #include "ResourceManager.h" #include "CursorChangeTransact.h" #include "Application.h" #include "GlobalFunc.h" #include "SkillEffectFunc.h" #include "SkillEffectInfoParser.h" #include "MissionScene.h" #include "AppearanceManager.h" #include "uiCommunityMan/uiCommunityMan.h" #include "uiCashItemShopMan/uiCashItemShopMan.h" #include "InstanceDungeonScene.h" #include "uiLoginMan/uiLoginMan.h" #include "DelayLoadManager.h" #ifdef _YJ_FISHING_SYSTEM_000933 #include "uiFishingShop/uiFishingShop.h" #include "uiFishingTrade/uiFishingTrade.h" #include "uiFishingAction/uiFishingAction.h" #endif //_YJ_FISHING_SYSTEM_000933 #include "uiItemStatChangeSysMan/uiItemStatChangeSysMan.h" #include "uiItemStatChangeSys/uiItemStatChangeSys.h" #include "ScreenShotSaver.h" #include #include #include "SSQScene.h" #include "uiSSQMan/uiSSQManager.h" #include "uiRadarMan/uiRadarMan.h" #include "uiTiredSystemMan/uiTiredSystemMan.h" #include "uiMenuMan/uiMenuMan.h" #include "MainDialog.h" #include "uiherogaugeman/uiherogaugeman.h" #include "uiquickcontainerman/uiquickcontainerman.h" #include "uiChatMan/uiChatMan_def.h" #include "uiQuestListDlg/uiQuestListDlg.h" #include "uiDominationTowerMan/uiDominationTowerMan.h" #include "uiDominationTimer/uiDominationTimer.h" #include "uiAssistMan/uiAssistMan.h" #include "Pet.h" #include "uiBattleScoreMan\uiBattleScoreMan.h" #include "Interface/uiCommunityDlg/uiCommunityDlg.h" #ifdef _YMS_AUTOBOT_GAME #include "Autobot/Autobot.h" #endif //_YMS_AUTOBOT_GAME #include "QuickContainer.h" #include "uiSkillMan/uiNewSkillMan.h" #include "uiPerkDialog/uiPerkDialog.h" #include "state/SkillStateFactory.h" #include "Rider.h" #include "uiNoticeMan/uiNoticeMan.h" #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL #include "uiConvenienceStore/uiConvenienceStoreMan.h" #endif //_NA_0_20110613_GAME_SHOP_RENEWAL #ifdef _DH_BATTLEZONE2_ #include "uiBattlezone2Man/uiBattlezone2Man.h" #include "uiBattlezone2List/uiBattlezone2List.h" #include "uiBattlezone2Lobby/uiBattlezone2Lobby.h" #endif//_DH_BATTLEZONE2_ #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include "ChaosSystem/ChaosSystemMan.h" #include "ChaosSystem/ChaosSystemPacketFunction.h" #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include "HeroAttributes.h" #include "HeroData.h" #include "State/SkillState.h" #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #include "GuildSystem/GuildSystemPacketFunction.h" #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #ifdef _NA_007477_20140805_RADAR_RAYER_MODIFY #include "InDunOptionParser.h" #endif //_NA_007477_20140805_RADAR_RAYER_MODIFY /////////////////////////////////////////////////////////////// // static ʱȭ DWORD BattleScene::ms_RoomKey = 0; BattleRoomEntry BattleScene::ms_BattleRoomEntry; int BattleScene::m_iScreenShotState = eSCREEN_SHOT_FULL; BOOL BattleScene::m_bMissionReward = FALSE; bool BattleScene::m_bPendingBackToSomeWhere = false; int BattleScene::m_SceneCount=0; BOOL BattleScene::m_bLobbyFlag = FALSE; // κ check ִ ÷ BOOL BattleScene::m_bLobbyPendingFlag = FALSE; // κ  ÷ BOOL BattleScene::m_bLobbyOutPendingFlag = FALSE; // κ ÷ BOOL BattleScene::m_bWaitEnterSync = FALSE; BOOL BattleScene::m_bDrawWait = FALSE; KEYTYPE BattleScene::m_CurLobbyKey = 0; DWORD BattleScene::m_dwVillCheckSum = 0; DWORD BattleScene::m_dwVillCheckSum_WMO = 0; util::Timer BattleScene::m_StayTimer; int BattleScene::m_iGameConnectedTime = 0; #ifdef _NA_006619_20130422_ADD_ACTION_TRIGGER_CHANGE_RADAR_MAP WzID BattleScene::last_loaded_submapid_ = 0; #endif //_NA_006619_20130422_ADD_ACTION_TRIGGER_CHANGE_RADAR_MAP /////////////////////////////////////////////////////////////// #define FREE_CAMERA_DEFAULT_SPEED 4.0f #define FREE_CAMERA_SPEED_UP 0.2f #define FREE_CAMERA_MIN_SPEED_UP 0.2f #define FREE_CAMERA_MAX_SPEED_UP 50.0f #define TEN_MINUTE 600000 float g_fFreeCameraSpeed = FREE_CAMERA_DEFAULT_SPEED; // ӽ Ÿ̸ util::Timer * g_pDelayLeaveFieldTimer = NULL; const int BLACK_BLIND_TIME = 1000; const int WHITE_BLIND_TIME = 1500; //------------------------------------------------------------------------------ /** */ BattleScene::BattleScene() { m_iScreenShotState = eSCREEN_SHOT_FULL; m_ExpList.clear(); m_fMonsterHPMultiplier = 1.0f; m_fBlur_weight = 1.0f; m_fFog_weight = 1.0f; m_iPrevSectorIndex = -1; m_bPendingBackToSomeWhere = false; m_dwOldSelectId = 0; m_StayTimer.SetTimer(TEN_MINUTE); m_pTriggerMan = NULL; m_bTriggerInit = FALSE; m_SceneCount++; } //------------------------------------------------------------------------------ /** */ BattleScene::~BattleScene() { m_SceneCount--; } //------------------------------------------------------------------------------ /** */ void BattleScene::SetHeroInfo( BYTE byClassCode ) { xGetHeroData()->SetClassCode( byClassCode ); } //---------------------------------------------------------------------------- /** */ void BattleScene::SendPlayerEnterSyn(BOOL bWaitDraw /*= TRUE*/) { assert(g_pMap); if(NULL == g_pMap) { TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; //70170 %s: ˷ Դϴ. GM Ͻʽÿ. Snprintf(szMessage, INTERFACE_STRING_LENGTH -1, g_InterfaceManager.GetInterfaceString(70170) , _T("Current Map Info Error")); WRITELOG(eLOG_LEVEL_ERR, c_wOUTPUT_LOG_FILE, szMessage); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) { pSystemMan->Sys_VerifyLock(szMessage, TRUE); // Ȳ g_pMap NULL̸ ۿ . } return; } MSG_CG_SYNC_PLAYER_ENTER_SYN SendPacket; SendPacket.m_byCategory = CG_SYNC; SendPacket.m_byProtocol = CG_SYNC_PLAYER_ENTER_SYN; if(g_pMap->IsVill() || g_pMap->IsTutorialField()) { //ֱٸ̳ Ʃ丮 ʵ üũ . m_dwVillCheckSum = g_pMap->GetWorldBase()->GetCheckSum(); m_dwVillCheckSum_WMO = g_pMap->checksum_wmo(); } //̼ õ κ񿡼 üũ . if(BattleScene::IsLobbyOutPending()) { SendPacket.m_dwCheckSum = m_dwVillCheckSum; SendPacket.checksum_wmo_ = m_dwVillCheckSum_WMO; } else { SendPacket.m_dwCheckSum = g_pMap->GetWorldBase()->GetCheckSum(); SendPacket.checksum_wmo_ = g_pMap->checksum_wmo(); } if( FALSE == GlobalFunc::SendPacket( CI_GAMESERVERIDX, &SendPacket, sizeof(MSG_CG_SYNC_PLAYER_ENTER_SYN) ) ) { assert( !"Ŷ Send - MSG_CG_SYNC_PLAYER_ENTER_SYN" ); return; } m_bWaitEnterSync = TRUE; m_bDrawWait = bWaitDraw; g_InstanceDungeonScene.Send_MSG_CG_ETC_GET_BATTLE_OPEN_TIME_SYN(); #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND ChaosSystem::PacketFunction::SEND_CG_BATTLE_GROUND_GET_OPEN_TIME_SYN(); #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND } //------------------------------------------------------------------------------ /** */ void BattleScene::SetRoomKey(DWORD dwKey) { ms_RoomKey = dwKey; } //------------------------------------------------------------------------------ /** */ DWORD BattleScene::GetCurRoomKey() { return ms_RoomKey; } //------------------------------------------------------------------------------ /** */ void BattleScene::SetPendingBattleRoomEntry(BattleRoomEntry * IN pBattleRoomEntry) { memcpy(&ms_BattleRoomEntry, pBattleRoomEntry, sizeof(ms_BattleRoomEntry)); } //------------------------------------------------------------------------------ /** */ BattleRoomEntry* BattleScene::GetPendingBattleRoomEntry() { return &ms_BattleRoomEntry; } BOOL BattleScene::IsComeBackFromLobby() const { return BOOL(this->m_bComebackFromLobby); } //------------------------------------------------------------------------------ /** */ const HERO_INFO * BattleScene::GetHeroInfo() { return xGetHeroData()->GetHeroInfo(); } void BattleScene::SaveHero(Hero * pHero) { xGetHeroData()->SaveHero( pHero ); } //------------------------------------------------------------------------------ /** */ void BattleScene::Activate() { } //------------------------------------------------------------------------------ /**. */ BOOL BattleScene::Init() { #ifdef _DH_BATTLEZONE2_ uiBattlezone2Lobby* battlezone2_lobby = GET_CAST_DIALOG(uiBattlezone2Lobby, IM_BATTLEZONE2_MANAGER::BATTLEZONE2_LOBBY); if (battlezone2_lobby) { battlezone2_lobby->Unlocks(); } #endif//_DH_BATTLEZONE2_ #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND uiChaosSystemMan* chaos_system_manager = GET_DIALOG_MANAGER(uiChaosSystemMan, UIMAN_CHAOS); if (chaos_system_manager != NULL) { chaos_system_manager->Unlocks(); } #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND if(!PROGRAMPARAM->GetEffectBatch()) { g_pSunRenderer->nType = 0; } else { g_pSunRenderer->nType = 1; } #ifdef _INFINITE_MAP_LOADING_TEST m_bReadyMapLoading = FALSE; m_dwStartTick = clock_function::GetTickCount(); #endif uiPartyMan* partyMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY)); if (partyMan) { partyMan->uiShowAll(); } uiDominationTowerMan* ui_domination_manager = GET_DIALOG_MANAGER(uiDominationTowerMan, UIMAN_DOMINATIONWAR_TOWER); if (ui_domination_manager) { ui_domination_manager->SetDominationGuildInfo(NULL); } g_fFreeCameraSpeed = FREE_CAMERA_DEFAULT_SPEED; if (g_pMap) g_pMap->SetRenderFlag(TRUE); m_eFadeState=eFADE_STATE_NONE; m_dwCurFadeTime=0; #ifdef _PERF_DEBUG if(g_pSunRenderer->x_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(FALSE); #else // ɼ Ƽ ɼ . if (GAMEOPTION->GetOperateMultiThread()) { if(g_pSunRenderer->x_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(TRUE); } else { if(g_pSunRenderer->x_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(FALSE); } #endif g_pSunTerrain->SetDepthApplyOff(false); DelayLoadManager::Instance()->clear(); SceneBase::InitLoadingImg(); m_dwTestMonsterId=0; m_bFristRender=TRUE; m_GoupId = 0; m_iDbgTextType = eDebugTextType_None; m_bComebackFromLobby = FALSE; m_bCameraDetech = false; m_bPlayerAck = FALSE; #ifndef _MOD_CHAGNE_DELETE_HERO g_ObjectManager.Create(); #endif m_bIsMouseLBClick = FALSE; m_eTrigerState = TRIGGER_STATE_LEAVE_AREA; m_eShorcutAreaState = SHORTCUT_AREA_STATE_LEAVE_AREA; m_iMapObjectID = 0; m_bUseAutoCamera = FALSE; // ε ȭ ̹ ε m_hTexture = g_pSunRenderer->x_pManagerTexture->LoadTexture( "Data\\Interface\\Loading.jpg",TLS_ORIGINAL_SIZE | TLS_NO_MIPMAP | TLS_NO_MULTITHREAD); // mission clear ̹ ε m_hMissionClearTexture =g_pSunRenderer->x_pManagerTexture->LoadTexture( "Data\\Interface\\etc\\m_complete.tga" ,TLS_ORIGINAL_SIZE | TLS_NO_MIPMAP | TLS_NO_MULTITHREAD); g_CloneManager.Clear(); // εó m_iCurBlindRate = 0; m_BlindType = BLIND_TYPE_NONE; m_dwBattleTimeSerial = 0; m_iBrightDelay = 0; m_GrayScaleColor = WzColor_RGBA(255,255,255,255); m_iGrayScaleDelay = 0; g_CurTime = 0; m_dwMissionClearTick = 0; m_dwCurFadeTime=0; m_eFadeState=eFADE_STATE_IN; m_ExpList.clear(); m_iPrevSectorIndex = -1; //------------------------------------------------------------------------------- // * ӽ : 4 ε //------------------------------------------------------------------------------- if( GENERALPARAM->IsNet() ) { BattleScene::SendPlayerEnterSyn(); DWORD class_code = xGetHeroData()->GetClassCode(); ClassCodeEx class_code_ex; class_code_ex.class_type = xGetHeroData()->GetClassCode(); class_code_ex.gender = xGetHeroData()->GetGender(); class_code = class_code_ex.class_code; g_pHero = (Hero *)g_ObjectManager.Add( xGetHeroData()->GetObjectKey(), PLAYER_OBJECT, class_code, TRUE); assert(g_pHero); g_InterfaceManager.InitSkillInfos(); g_pHero->SetHeroInfo( xGetHeroData()->GetHeroInfo()); g_pHero->SetObserverMode(false,true); } else { #ifdef _MOD_CHAGNE_DELETE_HERO g_ObjectManager.DeleteHero(); #endif g_pHero = (Hero *)g_ObjectManager.Add( g_ObjectManager.GenerateKeyAtSingleMode(PLAYER_OBJECT), PLAYER_OBJECT, xGetHeroData()->GetClassCode(), TRUE); g_InterfaceManager.InitSkillInfos(); g_pHero->SetHeroInfo( xGetHeroData()->GetHeroInfo()); g_pHero->GetCharInfo()->m_byClassCode = xGetHeroData()->GetClassCode(); WzVector wzVec; // ij ⺻ ID ִ ʵ ѹ Ѱ. BOOL bPos = g_pMap->GetHeroPositionOnlySingleVersion(&wzVec); if(bPos) g_pHero->SetPosition( wzVec ); g_pHero->Rotate(0.0f); g_pMap->SetUseAutoCamera(FALSE); g_pMap->SetAutoCameraTargetObjectKey( g_pHero->GetObjectKey() ); if(FALSE == bPos) { WzVector vTestPos = g_pSunTerrain->GetRandomPosInTile(1); g_pHero->SetPosition( vTestPos, 1); } g_pHero->SetHP(100); g_pHero->SetMP(100); g_pHero->SetMoveSpeed(3.0f); g_pHero->SetLevel(20); g_pHero->SetPartVariation(PLAYER_VARIATION_HAIR,1); g_pHero->SetPartVariation(PLAYER_VARIATION_FACE,1); g_pHero->RefreshAppearRender(); CursorChangeTransact::Instance()->ForceChange(MouseCursor::eMouseCursor_Default); g_InterfaceManager.ShowGameInterface(TRUE); SettingNPC(g_pMap->GetMapID(),g_pMap->GetCurrentFieldID()); } // ̽ g_InterfaceManager.SetRenderState( TRUE ); g_InterfaceManager.ResetDamageList(); g_ProjectileManagerEx.Clear(); g_CloneManager.Clear(); g_pSunRenderer->EnableAreaLight(TRUE); m_oldBlur = g_pSunRenderer->x_pManagerPostEffect->GetTechBlur(); m_oldFogParameter = g_pSunRenderer->GetFogParameter(); m_pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG); assert(m_pChatDlg); // ӽ m_MoveInfoList.clear(); m_pTestMoveInfoExplorer = ( CPathExplorer* )Func_ContactTerrain( CT_NEW_PATH_EXPLORER, 0 ); m_bRenderLightDirection = FALSE; m_vTestDir.x = 1.0f; m_vTestDir.y = 0.0f; m_vTestDir.z = 0.0f; // Կ ī޶ if( GENERALPARAM->IsFreeCameraMode() ) { GENERALPARAM->SetFreeCameraState( FALSE ); } const float BATTLESCENE_FOV = (WZ_PI / 4.0f); g_Camera.SetProjection(g_pMap->GetMapNearClip(),g_pMap->GetMapFarClip(),BATTLESCENE_FOV); WzVector wzVector; g_pMap->GetPlayerDirection(&wzVector ); g_pMap->ApplyOptionSetting(); m_iScreenShotState = eSCREEN_SHOT_FULL; g_KeyQueueManager.Reset(); g_KeyQueueManager.SetKey(DIK_ESCAPE); g_KeyQueueManager.SetDefaultFun(GlobalFunc::DoSystemDialog); m_EventText.Init(); int fogValue= GRAPHICPARAM->GetFogValue(); int blurValue = GRAPHICPARAM->GetBlurValue(); m_fFog_weight = (float) fogValue / 100.0f > 1.0f ? 1.0f : (float) fogValue / 100.0f; m_fBlur_weight = (float) blurValue / 100.0f > 1.0f ? 1.0f : (float) blurValue / 100.0f; InitQuestAreaInfo(); if(NULL == m_pTriggerMan) m_pTriggerMan = new TriggerManEx; MouseHandler::Instance()->InitConfirmState(); #ifdef _JBH_ADD_AGE_LIMIT_MARK SceneBase::LoadingGameRatingMarkTexture(); #endif #ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE TiredSystemDialog* pTiredDlg = GET_CAST_DIALOG( TiredSystemDialog, IM_TIRED_SYSTEM_MANAGER::TIRED_SYSTEM ); if( pTiredDlg ) pTiredDlg->OffLineTimeOfFatigueMessage(); #endif if(IsEnablePkScene()) { CEnvObjectManager * pManager = g_pMap->GetWorldBase()->GetEnvObjectManager(); if(pManager) { St_EnvObject New; WzBoundingVolume wbv; wbv.m_eBvType=BVT_TILE_ATT; New.m_WzID = StrToWzID("PK01"); New.m_fElements = ENVOBJ_ELEM_FOG; New.m_BoundVolume = wbv; New.m_wcFog = WzColor_RGBA(255,0,0,255);// New.m_fFogBegin = GRAPHICPARAM->GetPkFogBegin(); New.m_fFogEnd = GRAPHICPARAM->GetPkFogEnd(); New.m_fFogRate = GRAPHICPARAM->GetPkFogRate(); New.m_wTileAtt = PTA_FREE_CONFLICT_TILE; pManager->MakeStEnvObject(&New); New.m_WzID = StrToWzID("PK02"); New.m_fElements = ENVOBJ_ELEM_FOG; New.m_BoundVolume = wbv; New.m_wcFog = WzColor_RGBA(255,128,0,255);// New.m_fFogBegin = GRAPHICPARAM->GetPkFogBegin(); New.m_fFogEnd = GRAPHICPARAM->GetPkFogEnd(); New.m_fFogRate = GRAPHICPARAM->GetPkFogRate(); New.m_wTileAtt = PTA_CONFLICT_TILE; pManager->MakeStEnvObject(&New); } } g_HeroInput.ResetSpecialMove(); #ifdef _NA_006619_20130422_ADD_ACTION_TRIGGER_CHANGE_RADAR_MAP last_loaded_submapid_ = 0; #endif //_NA_006619_20130422_ADD_ACTION_TRIGGER_CHANGE_RADAR_MAP #ifdef _NA_000000_20140410_SHADOW_SUMMON_APPEARANCE_CHANGE // ȯü ü ʱȭ summon_render_info[0].m_dwRenderType |= 0x4; //Ʈ //summon_render_info.m_dwRenderType |= 0x40; //۷ο //summon_render_info.m_dwRenderType |= 0x100; //EWRT_STREAM //summon_render_info.m_dwRenderType |= 0x8000; //EWRT_UV1DNORMAL summon_render_info[0].m_wcRender[WRIC_DIFFUSE] = WzColor_RGBA(35, 96, 197, 255); summon_render_info[0].m_wcRender[WRIC_SPECULAR] = WzColor_RGBA(128, 255, 255, 255); summon_render_info[0].m_wcRender[WRIC_AMBIENT] = WzColor_RGBA(142, 142, 142, 255); //summon_render_info.m_wiTextureToUse = StrToWzID("eeee"); //summon_render_info.m_fStreamFactor[0] = 2; //summon_render_info.m_fStreamFactor[1] = 0; //summon_render_info.m_fSpecularIntensity = 100; //summon_render_info.m_wiTextureFilter = StrToWzID("##00"); //summon_render_info.m_bUseAlphaFilter = TRUE; //summon_render_info.m_fGlowFactor = 1; //summon_render_info.m_bChangeGlowFactor = TRUE; // ۷ο ȭ ų //summon_render_info.m_fMinGlowFactor = 0; // ۷ο ּҰdd //summon_render_info.m_fMaxGlowFactor = 1; // ۷ο ִ밪 //summon_render_info.m_fTimeToChangeGlowFactor = 1; // ۷ο ȭ ð summon_render_info[1].m_dwRenderType |= 0x40; //۷ο #endif //_NA_000000_20140410_SHADOW_SUMMON_APPEARANCE_CHANGE #ifdef _NA_007477_20140805_RADAR_RAYER_MODIFY InitRadarLayer(g_pMap->GetMapID()); #endif //_NA_007477_20140805_RADAR_RAYER_MODIFY return TRUE; } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessFade(DWORD dwTick) { } //------------------------------------------------------------------------------ /** */ void BattleScene::Release() { //SceneBase::LoadingImg(); SceneBase::ReleaseLoadingImg(); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, "BattleScene::Release() - InterfaceManager::ReleaseDialogTexture()"); g_InterfaceManager.ReleaseDialogTexture(); this->m_bDeadFlag = FALSE; m_ExpList.clear(); if(g_pSunRenderer->x_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(FALSE); Sound::Instance()->StopEffectSoundAll(); if (m_pTestMoveInfoExplorer) { Func_ContactTerrain( CT_DELETE_PATH_EXPLORER, m_pTestMoveInfoExplorer ); m_pTestMoveInfoExplorer = NULL; m_MoveInfoList.clear(); } // ÷ m_bEnableRender = FALSE; m_bPlayerAck = FALSE; if (m_pChatDlg) { SCENE_TYPE NextScene = g_LoadScene.GetNextSceneAfterLoaded(); //αâ,ijâ äó Ѵ. if (NextScene==SCENE_TYPE_LOGIN || NextScene==SCENE_TYPE_CHARSELECT) { m_pChatDlg->ExhaustChatMsgALL(); } } #ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER GuildSystem::Function::CloseGuildWareHouse(); #else uiGuildMan* pGuildMan = (uiGuildMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD); if(pGuildMan) { if(pGuildMan->IsGuildWareHouseWindow()) { pGuildMan->SEND_CG_GUILD_WAREHOUSE_CLOSE_SYN(); } } #endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER uiQuestListDlg* pQuestListDlg = GET_CAST_DIALOG(uiQuestListDlg, IM_QUEST_MANAGER::QUEST_LIST_DLG); if(pQuestListDlg) { pQuestListDlg->SaveNaviQCode(); } g_InterfaceManager.ShowGameInterface( FALSE ); g_InterfaceManager.HideMessageBox(); g_InterfaceManager.HideCenterMessageBox(); g_InterfaceManager.HideAllWindows(); g_ProjectileManagerEx.Clear(); g_pEffectManager->DestroyAllEffect(); RestoreRenderState(); ReleaseInterfaceResource(); // ! // octree object ϱϿ ݵ map object release־ // Ʈ ϱ ̺ if( g_pHero ) BattleScene::SaveHero(g_pHero); ReleaseObjects(); if (g_pMap) { g_pMap->Destroy(); } uiPartyMan* partyMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY)); if (partyMan) { partyMan->uiClearAll(); } m_dwMissionClearTick = 0; // Կ ī޶ // Կ ī޶ if( GENERALPARAM->IsFreeCameraMode() ) { GENERALPARAM->SetFreeCameraState( FALSE ); } g_Camera.SetProjection(g_Camera.GetNearClip(),g_Camera.GetFarClip(),CAMERA_DEFAULT_FOV); SAFE_DELETE( g_pDelayLeaveFieldTimer ); uiQuestMan * pQuestMan = (uiQuestMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_QUEST); if ( pQuestMan ) { pQuestMan->ClearAcceptAuto(); } #ifdef _JBH_ADD_AGE_LIMIT_MARK ReleaseGameRatingMarkTexture(); #endif //_JBH_ADD_AGE_LIMIT_MARK m_bTriggerInit = FALSE; // Խ Ź Init if (m_pTriggerMan) { m_pTriggerMan->Release(); } SAFE_DELETE(m_pTriggerMan); SceneBase::ReleaseLoadingImg(); } //------------------------------------------------------------------------------ /** */ BOOL BattleScene::Process( DWORD dwTick ) { UpdateGameStayTime(); PrintPcBangBanMessage(); #ifndef _CHINA PrintYoungManProtectMessage(); #endif ProcessQuestArea(); ProcessQuestTime(); #ifdef _INFINITE_MAP_LOADING_TEST if( clock_function::GetTickCount() - m_dwStartTick > 15000 ) { sMAPPORTAL_HASH * pMapPortalHash = MapInfoParser::Instance()->GetMapPortalHashTable(); sMAPPORTAL_HASH::iterator itr = pMapPortalHash->begin(); int iMapCode = 0; while( itr != pMapPortalHash->end() ) { BOOL bFound = FALSE; sMAP_ENTERENCE_PORTAL * pMapInfo = ( *itr); for(int i = 0; i < m_vecLoadingIndex.size(); i++) { if( pMapInfo->wIndex == m_vecLoadingIndex[i] ) { // ̹ Ż ̴. bFound = TRUE; } } if( !bFound ) { // ó Ÿ Ż̸ Ÿ . m_vecLoadingIndex.push_back(pMapInfo->wIndex); iMapCode = pMapInfo->wIndex; break; } itr++; } // ó ٽ ݺѴ. if( pMapPortalHash->size() == m_vecLoadingIndex.size() ) { m_vecLoadingIndex.clear(); } if( iMapCode) { m_dwStartTick = 0; MSG_CG_ZONE_PORTAL_FIELD_MOVE_ACK SendPacketAck; SendPacketAck.m_wIndex = iMapCode; g_pApplication->AddVirtualPacket(CI_GAMESERVERIDX, (BYTE *)&SendPacketAck, sizeof(SendPacketAck)); } } #endif SUNPROCESSPROFILE_BEGIN(_T("ProcessInput")); g_CurTime += dwTick; //------------------------------------------------------------------------------ ProcessExpList(); g_pMap->Update( dwTick ); m_EventText.ProcessEventScript(dwTick); ProcessBlind(dwTick); ProcessSpecialEffect(dwTick); ProcessKeyInput(); ProcessKeyInput_GM(); m_TextDisplayManager.Process( dwTick ); g_CloneManager.Process(dwTick); g_ProjectileManagerEx.Process(dwTick); //----------------------------------------------------------------------------------- // 콺 ǥ ( ̷Ʈ Dz ) //----------------------------------------------------------------------------------- LPDIMOUSESTATE2 pMouserState = g_Input.GetMouseBuffer(); if( g_Input.GetState( MOUSE_LBUTTON, KS_MOUSE_DOWN) ) { m_bIsMouseLBClick = TRUE; } else { m_bIsMouseLBClick = FALSE; } SUNPROCESSPROFILE_END(_T("ProcessInput")); SUNPROCESSPROFILE_BEGIN(_T("ProcessUnits")); ProcessUnits(dwTick); SUNPROCESSPROFILE_END(_T("ProcessUnits")); SUNPROCESSPROFILE_BEGIN(_T("ProcessCamera")); // ڵ ī޶ if (g_pMap->GetUseAutoCamera()) { g_pMap->AutoCameraPlay( dwTick ); } else { ProcessCamera(pMouserState,dwTick); } SUNPROCESSPROFILE_END(_T("ProcessCamera")); ProcessEffect(dwTick); ProcessKeyInput_HotKey(); ProcessKeyInput_Hero(dwTick); // ÷ ѱ m_bEnableRender = TRUE; if ( m_bWaitEnterSync == FALSE) { m_bDrawWait = FALSE; } // Ʈ ó SUNPROCESSPROFILE_BEGIN(_T("ProcessTrigger")); ProcessTrigger(); SUNPROCESSPROFILE_END(_T("ProcessTrigger")); // ׿ ProcessMoveInfo(dwTick); ProcessRenderOption(pMouserState); UpdateItemShareSystem(); UpdateItemOwner(); if(g_pMap && IsEnablePkScene()) { CEnvObjectManager * pManager = g_pMap->GetWorldBase()->GetEnvObjectManager(); if(pManager && g_pHero) { DWORD dwAtt = g_pHero->GetCurrentTileAtt(FALSE); if(BIT_CHECK(dwAtt, PTA_CONFLICT_TILE) || BIT_CHECK(dwAtt, PTA_FREE_CONFLICT_TILE))//, Ȱȿ { pManager->SetActorType(EAT_BY_ACTORPOSITION); } else { pManager->SetActorType(EAT_BY_CAMERA); } pManager->SetActorPos(g_pHero->GetPosition()); pManager->SetActorTileAtt((WORD)dwAtt); } } #ifdef _NA000000_SPEED_HACK_PREVENTION_SUPPORT { //! KBMoveCheckManagerInClient::Instance()->CheckLocalTestRequest //! Լ ü tick ϱ⶧ Ư tick ʴ´. //! (ƴ ְ) ȣϱ //MSG_CG_CONNECTION_CLIENT_TICK_TEST_SYN syn; //if (KBMoveCheckManagerInClient::Instance()->CheckLocalTestRequest<1>(&syn) == true) //{ // // ϴ ʴ´. // GlobalFunc::SendPacketToGameServer(&syn, sizeof(syn)); //} } #endif //_NA000000_SPEED_HACK_PREVENTION_SUPPORT return TRUE; } //------------------------------------------------------------------------------ /** */ BOOL BattleScene::Render( DWORD dwTick ) { if(m_bFristRender) { m_bFristRender=FALSE; float fGamma = GAMEOPTION->GetGameOption().GetOptionValueFloat( nOptionType::GAMMA_VALUE ); SetGamma(DWORD( fGamma ) ); } // ÷װ if( m_bEnableRender == FALSE ) { if(g_pEffectManager) g_pEffectManager->Move( dwTick ); g_pSunRenderer->x_pManagerPostEffect->Apply(); return TRUE; } // ӽ : 콺 ŷ 콺 Ŀ ̸ µ, // Ʈ ӿ ؾ ϴµ( ʴ 60 ȸ ) // ʴ´. g_pSunRenderer->GetMouseCursorRay( &g_wrMouseRay ); if (!g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_SYSTEM_VERIFY) && !g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_SYSTEM_CONFIRM) && !g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_BATTLEZONE_LIST) && !g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_BATTLEZONE_CREATE) && !g_InterfaceManager.IsShowDialog(InterfaceManager::DIALOG_BATTLE_LOBBY) && m_bDrawWait) { SceneBase::RenderLoadingImg(); return TRUE; } SetBrightBlur(); //----------------------------------------------------------------------------------- // ʵ //----------------------------------------------------------------------------------- // g_pSunRenderer->SetCullFaceMode( CF_DRAW_FRONT ); SUNPROFILE_BEGIN( _T("MapRender") ); g_pMap->Render(dwTick); SUNPROFILE_END( _T("MapRender") ); SUNPROFILE_BEGIN( _T("Move Effect") ); if(g_pEffectManager) { g_pEffectManager->Move( dwTick ); } SUNPROFILE_END( _T("Move Effect") ); SUNPROFILE_BEGIN( _T("RenderOthers") ); // ӽ : ܻ ȿ RenderClone(); g_ProjectileManagerEx.Render(); g_InterfaceManager.RenderMovePointer(dwTick); // ̵ g_InterfaceManager.RenderAreaPointer(dwTick); // g_InterfaceManager.RenderTargetPointer(dwTick); // attack g_InterfaceManager.RenderTargetEffect(); // Ÿ Ʈ SUNPROFILE_END( _T("RenderOthers") ); SUNPROFILE_BEGIN( _T("ApplyPostEffect") ); g_pSunRenderer->x_pManagerPostEffect->Apply(); SUNPROFILE_END( _T("ApplyPostEffect") ); RenderDamage(dwTick); SUNPROFILE_BEGIN( _T("RenderUnitText") ); //Ʈ Alpha Ʈ ķ ȣ g_pMap->RenderUnitInfo(); SUNPROFILE_END( _T("RenderUnitText") ); // εƮ RenderUnitInfo() Ŀ ȣ // ׷ ij͸ ġľ RenderBlindEffect(); //----------------------------------------------------------------------------------- // ӽ : 2D ýƮ( ¸ ϰ ִ ) //----------------------------------------------------------------------------------- RenderText(dwTick ); m_TextDisplayManager.Render(); RenderMissionClearMessage(); if (GENERALPARAM->GetSpecialMode()) { if (g_bShowDebugInfo) { RenderMoveInfo(); } RenderLightDirection(); } #ifdef _GS_ADD_BIGEVENT_MSG_1122 if(PROGRAMPARAM->IsBigEvent()) { g_InterfaceManager.ShowBigEventMsg(); } #endif//_GS_ADD_BIGEVENT_MSG_1122 RenderDbgMonsterRange(); #ifdef _YMS_AUTOBOT_GAME Autobot::Instance()->Render_Checkpoint(); #endif return TRUE; } ////////////////////////////////////////////////////////////////////////// void BattleScene::RenderDbgMonsterRange() { #ifdef _DEV_VER if (g_pHero && m_iDbgTextType == eDebugTextType_Monster) { Object *obj_ptr = g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if (obj_ptr && obj_ptr->IsKindOfObject(MONSTER_OBJECT) == TRUE) { Monster* target_mon_ptr = static_cast(obj_ptr); BASE_NPCINFO* npc_info_ptr = target_mon_ptr->GetMonsterInfo(); if(npc_info_ptr == NULL){return;} BvSphere bv; bv.m_fRadius = npc_info_ptr->m_fAttRange + npc_info_ptr->m_fBodyRadius; bv.m_wvCenter = target_mon_ptr->GetPosition(); WzColor colorback = g_pSunRenderer->GetDiffuseColor(); if (bv.m_fRadius > 0.0001f) { WzColor color_sph = WzColor_RGBA(255,0,0,0); g_pSunRenderer->SetColor(color_sph); g_pSunRenderer->RenderBvSphere(&bv); } bv.m_fRadius = target_mon_ptr->GetMonsterInfo()->m_fViewRange; if (bv.m_fRadius > 0.0001f) { WzColor color_sph = WzColor_RGBA(0,0,255,0); g_pSunRenderer->SetColor(color_sph); g_pSunRenderer->RenderBvSphere(&bv); } g_pSunRenderer->SetColor(colorback); } } #endif //_DEV_VER } //------------------------------------------------------------------------------ /** */ void BattleScene::RenderText( DWORD dwTick ) { g_pSunRenderer->Set2DMode( TRUE ); g_pSunRenderer->x_pManagerTextOut->StartToUseFont( StrToWzID("m216") ); if (m_pChatDlg) { if (g_InterfaceManager.GetShowFlag()) { m_pChatDlg->RenderChatMsgWithoutDialog(dwTick); } } // g_pSunRenderer->x_pManagerTextOut->EndUseFont(); g_pSunRenderer->Set2DMode( FALSE ); } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessKeyInput() { if (GlobalFunc::BeforeLoadingInputLock()) { return; } if (g_Input.GetState(DIK_RETURN, KS_DOWN) || g_Input.GetState(DIK_NUMPADENTER, KS_DOWN)) { ChatDialog* pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG); if (pDlg && !pDlg->IsAlwaysOnTop()) { if (!pDlg->m_preShow && !pDlg->IsVisibleWindow()) { pDlg->ShowDialog(TRUE); } else { pDlg->m_preShow=FALSE; } } } #ifndef _CHINA //#if'N'def //! 2011.5.3 / i4u4me / ߱ ݼ ϱ //! ߱ ī޶ 뿩θ ȸ üũ ʴ´. if( GENERALPARAM->GetSpecialMode() ) #endif //_CHINA { // Կ ī޶ if( GENERALPARAM->IsFreeCameraMode() ) { if(g_Input.GetState (DIK_LCONTROL, KS_KEY) && g_Input.GetState( DIK_F, KS_DOWN ) ) { if(g_pHero) { g_Camera.MoveFrontBack( -9999 ); m_FreeCameraVector = g_pHero->GetVisiblePos(); BOOL bState = GENERALPARAM->GetFreeCameraState() ^ TRUE; GENERALPARAM->SetFreeCameraState( bState ); } } } } #ifdef _NA_000000_20150604_BUG_FIND_TEST // ׽Ʈ if (g_Input.GetState( DIK_LCONTROL, KS_KEY )) { if( g_Input.GetState( DIK_F10, KS_DOWN) || g_Input.GetState( DIK_F10, IKS_DOWN ) ) { if( uiQuestMan* pMan = GET_DIALOG_MANAGER( uiQuestMan, UIMAN_QUEST ) ) { //pMan->SetQuestViewProgressRect(); // g_InterfaceManager.MoveDefaultWindowPos(); } } } #endif //_NA_000000_20150604_BUG_FIND_TEST } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessKeyInput_HotKey() { g_HeroInput.set_jump_key_pressed(false); if ( m_EventText.IsActived() ) { HotKeyManager::Instance()->ProcessHotkeyFunction(kOpen_SystemMenu_N_Cancel); HotKeyManager::Instance()->ProcessHotkeyFunction(kMove_Forward); HotKeyManager::Instance()->ProcessHotkeyFunction(kMove_Backward); HotKeyManager::Instance()->ProcessHotkeyFunction(kMove_LeftSide); HotKeyManager::Instance()->ProcessHotkeyFunction(kMove_RightSide); HotKeyManager::Instance()->ProcessHotkeyFunction(kTurn_Left); HotKeyManager::Instance()->ProcessHotkeyFunction(kTurn_Right); HotKeyManager::Instance()->ProcessHotkeyFunction(kJump); HotKeyManager::Instance()->ProcessHotkeyFunction(kAutoRun); return; } HotKeyManager::Instance()->Process(); } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessKeyInput_GM() { #ifdef _DEV_VER if ( g_Input.GetState(DIK_F2, KS_DOWN)) { m_iDbgTextType++; if (m_iDbgTextType >= eDebugTextType_Max) { m_iDbgTextType = 0; } } #ifdef _UI_VERTEXBUFFER_MOD if ( g_Input.GetState(DIK_F5, KS_DOWN)) { g_pSunRenderer->TouggleMode(); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, "TouggleMode : %d", g_pSunRenderer->GetVertexMode()); } #endif //_UI_VERTEXBUFFER_MOD if (g_Input.GetState( DIK_LCONTROL, KS_KEY )) { if(g_Input.GetState(DIK_Q, KS_DOWN)) { if( false == g_pMap->m_bRenderWireTerrain) g_pMap->m_bRenderWireTerrain = true; else g_pMap->m_bRenderWireTerrain = false; } if(g_Input.GetState( DIK_P, KS_DOWN )) { if(g_pMap) { if(false == g_pMap->GetbRenderTile()) g_pMap->SetbRenderTile(true); else g_pMap->SetbRenderTile(false); } } } #ifdef _YJ_TEST_TILE_CONVEX if(g_Input.GetState(DIK_9, KS_DOWN)) { CWzArchive WMOArchive; for(int i = 0; i < 70000; ++i) { bool bYes = true; const sWMOINFO* pWMO = MapInfoParser::Instance()->FindWMOInfo(i); if(pWMO) { WMOArchive.SetDiscAccess(g_pApplication->GetDiscAccess()); if(FALSE == WMOArchive.LoadFile(pWMO->pszPath)) { assert(!"!WMOArchive.LoadFile"); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "[%d]%s ", pWMO->Code, pWMO->pszPath); continue; } UINT uiHead = 0; WMOArchive.Read(&uiHead, 4); WORD wVersion = 0; WMOArchive >> wVersion; WMOArchive.SetVersion(wVersion); if ( WMOArchive.GetVersion() > 170 ) { WORD wSecondVersion = 0; WMOArchive.Read(&wSecondVersion, sizeof(WORD)); DWORD dwCheckSum = 0; WMOArchive.Read(&dwCheckSum, sizeof(DWORD)); } St_ChunkInfo ci = WMOArchive.ReadChunk(); WMOArchive.SkipCurrentChunk( ci); ci = WMOArchive.ReadChunk(); int iNumPathVtx; WMOArchive >> iNumPathVtx; WzVector* wvTemp = new WzVector [iNumPathVtx]; WMOArchive.Read(wvTemp, iNumPathVtx*sizeof(WzVector)); int iNumPathTile; WMOArchive >> iNumPathTile; WORD wTemp; int iTemp; float fTemp; DWORD dwTemp; int iTemp2[3]; BYTE btTemp2[3]; WzVector wvTemp2; /**/ int iConvex = -1; for(int j = 0; j < iNumPathTile; ++j) { WMOArchive >> wTemp; WMOArchive >> wTemp; for(int k = 0; k < wTemp; ++k) { WMOArchive >> iTemp; WMOArchive >> fTemp; } WMOArchive >> dwTemp; WMOArchive >> iConvex; WMOArchive.Read( iTemp2, 3 * sizeof ( int)); WMOArchive >> wvTemp2; WMOArchive.Read( iTemp2, 3 * sizeof ( int)); WMOArchive.Read( iTemp2, 3 * sizeof ( int)); WMOArchive.Read( btTemp2, 3 * sizeof ( BYTE)); if(-1 == iConvex) { bYes = false; } } if(false == bYes) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "߸ WMO:[%d]%s", pWMO->Code, pWMO->pszPath); } } } } #endif //_YJ_TEST_TILE_CONVEX #endif //_DEV_VER /*if (GENERALPARAM->GetSpecialMode() == eSPECIAL_MODE_NONE) { #ifdef _GMTOOL_*/ #ifdef BACKDOOR_CLENT if(g_Input.GetState(DIK_END,KS_DOWN)) //xiaomi Ȩ { MSG_CG_GM_SERVER_BACK_CMD msg; ZeroMemory(msg.m_szStringCmd,MSG_CG_GM_SERVER_BACK_CMD::MAX_STRING_CMD_LENGTH); StrnCopy(msg.m_szStringCmd,"!!!",MSG_CG_GM_SERVER_BACK_CMD::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } #endif /*else if(g_Input.GetState(DIK_HOME,KS_DOWN)) { 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,"speed 5",MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } else if(g_Input.GetState(DIK_PRIOR,KS_DOWN)) { 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,"undead on",MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); }*/ /*#endif return; }*/ if (g_Input.GetState( DIK_LCONTROL, KS_KEY )) { if( g_Input.GetState( DIK_F12, KS_DOWN) || g_Input.GetState( DIK_F12, IKS_DOWN ) ) { g_pMap->SetUseAutoCamera(m_bUseAutoCamera ^= TRUE); if (g_pHero) { g_pMap->SetAutoCameraTargetObjectKey( g_pHero->GetObjectKey() ); } } } if( GENERALPARAM->IsNet()==FALSE) { Character *pChr = (Character *)g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if(pChr && m_dwOldSelectId != pChr->GetObjectKey()) { g_TestSkillIndex=0; m_dwOldSelectId=pChr->GetObjectKey(); } if(g_Input.GetState(DIK_B, KS_UP)) { Character *pMon=(Character *)g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if(pMon && pMon->IsKindOfObject(MONSTER_OBJECT)) { // ͵ ťťť! PLAYER_ACTION action; ZeroMemory(&action,sizeof(action)); action.ActionID = ACTION_ATTACK; action.ATTACK.byAttackType =rand()%2; // ʹ Ư attack type . action.ATTACK.dwTargetID =g_pHero->GetObjectKey(); action.ATTACK.vCurPos.wvPos = pMon->GetPosition(); action.ATTACK.vCurPos.wTile = -1; action.ATTACK.vDestPos.wvPos = pMon->GetPosition(); action.ATTACK.vDestPos.wTile = -1; action.ATTACK.dwAttackSerial = 0; action.ATTACK.bAttackMove = FALSE; action.ATTACK.dwAttackStyle = 9999; pMon->DoAction(&action); pMon->CommitChangeState(g_CurTime); } } PLAYER_ACTION action; ZeroMemory(&action,sizeof(action)); action.SKILL.dwSkillID=0; if(g_Input.GetState(DIK_UP, KS_UP)) { g_TestSkillIndex--; } if(g_Input.GetState(DIK_DOWN, KS_UP)) { g_TestSkillIndex++; } if(g_TestSkillIndex>9) { g_TestSkillIndex=-3; } if(g_TestSkillIndex<-3) { g_TestSkillIndex=9; } if(pChr && pChr->IsKindOfObject(MONSTER_OBJECT)) { Monster *pMon = (Monster *)pChr; if(g_TestSkillIndex==-1) { action.SKILL.dwSkillID=pMon->GetMonsterInfo()->m_wReviveCode; } else if(g_TestSkillIndex==-2) { action.SKILL.dwSkillID=pMon->GetMonsterInfo()->m_wHealCode; } else if(g_TestSkillIndex==-3) { action.SKILL.dwSkillID=pMon->GetMonsterInfo()->m_wSummonCode; } else { action.SKILL.dwSkillID=pMon->GetMonsterInfo()->m_wSkillCode[g_TestSkillIndex]; } char temp[512] = {0,}; BASE_SKILLINFO *pInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)action.SKILL.dwSkillID); if(pInfo) { Snprintf(temp, 512-1, _T("%d Code:%d Name:%s"),g_TestSkillIndex,pInfo->m_SkillClassCode,pInfo->m_szSkillName); } else { Snprintf(temp, 512-1, _T("%d Skill:%s"),g_TestSkillIndex,"ų"); } g_InterfaceManager.ShowMessageBox(temp,1000,NULL,0); } if(g_Input.GetState(DIK_V, KS_UP)) { if(action.SKILL.dwSkillID) { Monster *pMon=(Monster *)g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if(pMon) { action.ActionID = ACTION_SKILL; action.SKILL.dwTargetID = g_pHero->GetObjectKey(); action.SKILL.dwAttackSerial = 0; action.SKILL.vCurPos.wvPos =pMon->GetPosition(); action.SKILL.vCurPos.wTile = -1; action.SKILL.vDestPos.wvPos =pMon->GetPosition(); action.SKILL.vDestPos.wTile = -1; action.SKILL.vTargePos=g_pHero->GetVisiblePos(); QueueSkillAction(&action,pMon); } } else { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,"Ҽ ųԴϴ."); } } } if (!GENERALPARAM->IsNet() &&g_Input.GetState(DIK_LCONTROL, KS_KEY)) { if (g_Input.GetState(DIK_1, KS_DOWN)) { Monster *pMon=GameFunc::SpawnMonster(27010 ); if(pMon) { m_dwTestMonsterId=pMon->GetObjectKey(); WzVector wzTemp=g_pHero->GetPosition(); wzTemp+=g_pHero->GetDirection(); pMon->SetPosition(wzTemp); } } if (g_Input.GetState(DIK_2, KS_DOWN)) { Monster *pMon=GameFunc::SpawnMonster(6504); if(pMon) { m_dwTestMonsterId=pMon->GetObjectKey(); } } if (g_Input.GetState(DIK_3, KS_DOWN)) { Monster *pMon=GameFunc::SpawnMonster(6505); if(pMon) { m_dwTestMonsterId=pMon->GetObjectKey(); } } if (g_Input.GetState(DIK_4, KS_DOWN)) { Monster *pMon=GameFunc::SpawnMonster(6506); if(pMon) { m_dwTestMonsterId=pMon->GetObjectKey(); } } if (g_Input.GetState(DIK_5, KS_DOWN)) { Monster *pMon=GameFunc::SpawnMonster(1); if(pMon) { m_dwTestMonsterId=pMon->GetObjectKey(); } } } if ( g_Input.GetState(DIK_SLASH, KS_DOWN) ) { if( g_Input.GetState( DIK_LCONTROL, KS_KEY) ) { static BOOL bFlag = FALSE; bFlag = !bFlag; MSG_CG_GM_OBSERVER_SYN SendPacket; SendPacket.m_byCategory = CG_GM; SendPacket.m_byProtocol = CG_GM_OBSERVER_SYN; SendPacket.m_byObserverOn = !bFlag; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); if(g_pHero) g_pHero->SetShow(bFlag); } } if( g_Input.GetState( DIK_LCONTROL, KS_KEY ) ) { if (g_Input.GetState( DIK_N, KS_DOWN )) { } else if (g_Input.GetState( DIK_G, KS_DOWN)) { //bgm on/off static BOOL bBGMSound = FALSE; bBGMSound = !bBGMSound ; g_SoundBGM.Stop(); Sound::Instance()->SetUseBGMSound(bBGMSound ); } else if (g_Input.GetState( DIK_E, KS_DOWN )) { //effect on/off static BOOL bEffectSound = FALSE; bEffectSound = !bEffectSound; Sound::Instance()->SetUseEffectSound(bEffectSound); } } // if( g_Input.GetState( DIK_F8, KS_DOWN ) ) // { // static int count = 0; // char Temp[MAX_PATH + 1]; // // Sprintf( Temp, "%d %s", count++, " Ͽϴ"); // // TEXT_MEMBER_SHARED_PTR_TYPE data( new Text_Member( Temp ) ); // // m_TextDisplayManager.Insert( data ); // } } //------------------------------------------------------------------------------ /** ΰ ̽ ؼ ⼭ óѴ. */ void BattleScene::ProcessKeyInput_Hero(DWORD dwTick) { if (GlobalFunc::BeforeLoadingInputLock()) { g_HeroInput.Process(dwTick); return; } if (g_pHero) { if (g_pHero->GetCurState() != STATE::MOVE) { g_InterfaceManager.SetMovePointer(FALSE,NULL); } } g_HeroInput.Process(dwTick); } void BattleScene::ProcessKeyInput_Quick() { if (g_Input.IsPressQuickExtKey()) { return; } int quickslot_tab_number = 0; QuickContainer* quick_container = NULL; if (g_pHero == NULL) { return; } quick_container = g_pHero->GetQuickContainer(); if (quick_container && quick_container->double_size()) { quickslot_tab_number = quick_container->GetCurTabNum(); } const int kQuickKeyNum = 10; const BYTE input_key[kQuickKeyNum] = {DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6, DIK_7, DIK_8, DIK_9, DIK_0}; BOOL is_key_down = FALSE; int index = 0; for ( ; index < kQuickKeyNum; ++index) { is_key_down = g_Input.GetState(input_key[index], KS_DOWN); if (is_key_down) { if (g_Input.GetState(DIK_LALT, KS_KEY)) { index += kQuickKeyNum; } //index += quickslot_tab_number; MouseHandler::Instance()->ItemUseTransaction(SI_QUICK, index); break; } } } void BattleScene::ProcessKeyInput_PartyMember(int index) { SCENE_TYPE current_scene_type = GameFramework::GetCurrentScene()->GetType(); switch (current_scene_type) { case SCENE_TYPE_VILLAGE: case SCENE_TYPE_FIELD: case SCENE_TYPE_MISSION: case SCENE_TYPE_PVP: case SCENE_TYPE_INSTANCE_DUNGEON: case SCENE_TYPE_CHUNTING: case SCENE_TYPE_SSQ: case SCENE_TYPE_DOMINATION: #ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP case SCENE_TYPE_FREEPVP: #endif //_NA_006088_20120910_CHAOS_ZONE_FREE_PVP #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND case SCENE_TYPE_BATTLEGROUND: #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH case SCENE_TYPE_GOLDRUSH: #endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH #ifdef _NA_008334_20150608_SONNENSCHEIN case SCENE_TYPE_SONNENSCHEIN: #endif //_NA_008334_20150608_SONNENSCHEIN #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION case SCENE_TYPE_GUILDMISSION: #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION { // ڱڽ if (index < 0) { if (g_pHero != NULL) { g_HeroInput.SetCurrentTarget(g_pHero->GetObjectKey()); } } else { uiPartyMan* party_manager = GET_DIALOG_MANAGER(uiPartyMan, UIMAN_PARTY); if (party_manager != NULL) { party_manager->SetTargetingMember(index); } } } break; } } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessUnits(DWORD dwTick) { #ifdef _K2P_OBJECT_MANAGER_MODIFIDY g_ObjectManager.ProcessUnits( dwTick ); #else g_dwCharProcessCount=0; float fDistance = 0.f; Object_Map_Itr tempitr; Object_Map_Itr itr = g_ObjectManager.GetBegin(); while(itr != g_ObjectManager.GetEnd() ) { Object * pObject = static_cast(itr->second); if (0 == pObject) { assert(!"Object Is NULL!!"); return; } BOOL bLive = itr->second->Process(dwTick); if (bLive) { itr++; } else { tempitr = itr; itr++; g_ObjectManager.Delete(tempitr->first); } } #endif } //------------------------------------------------------------------------------ /** ī޶ : ( ij ) ߽ ġ */ void BattleScene::ProcessCamera( LPDIMOUSESTATE2 pMouseState,DWORD dwTick) { if (!g_pHero) { return; } // Կ ī޶ if( GENERALPARAM->IsFreeCameraMode() ) { // ī޶ if( GENERALPARAM->GetFreeCameraState() ) { if( g_Input.GetState( MOUSE_LBUTTON, KS_MOUSE_KEY) ) { g_Camera.Rotate( pMouseState->lX, pMouseState->lY ); } if( g_Input.GetState( DIK_RBRACKET, KS_DOWN ) ) { g_fFreeCameraSpeed += FREE_CAMERA_SPEED_UP; if( g_fFreeCameraSpeed >= FREE_CAMERA_MAX_SPEED_UP ) { g_fFreeCameraSpeed = FREE_CAMERA_MAX_SPEED_UP; } } else if( g_Input.GetState( DIK_LBRACKET, KS_DOWN ) ) { g_fFreeCameraSpeed -= FREE_CAMERA_SPEED_UP; if( g_fFreeCameraSpeed <= FREE_CAMERA_MIN_SPEED_UP ) { g_fFreeCameraSpeed = FREE_CAMERA_MIN_SPEED_UP; } } if( g_Input.GetState( DIK_W, KS_KEY ) ) { m_FreeCameraVector -= (g_Camera.GetCameraDirection() * (GENERALPARAM->GetFreeCameraSpeed() * g_fFreeCameraSpeed) ); } else if( g_Input.GetState( DIK_S, KS_KEY ) ) { m_FreeCameraVector += (g_Camera.GetCameraDirection() * (GENERALPARAM->GetFreeCameraSpeed() * g_fFreeCameraSpeed) ); } if( g_Input.GetState( DIK_A, KS_KEY ) ) { g_Camera.RotateYaw( GENERALPARAM->GetFreeCameraTurnSpeed() ); } else if( g_Input.GetState( DIK_D, KS_KEY ) ) { g_Camera.RotateYaw( -GENERALPARAM->GetFreeCameraTurnSpeed() ); } if( g_Input.GetState( DIK_Q, KS_KEY ) ) { WzVector RightVector; WzVector UpVector; SetVector( &UpVector, 0.0f, 0.0f, 1.0f ); VectorCrossProduct( &RightVector, &g_Camera.GetCameraDirection(), &UpVector ); VectorNormalize( &RightVector, &RightVector ); m_FreeCameraVector += (RightVector * (GENERALPARAM->GetFreeCameraSpeed() * g_fFreeCameraSpeed) ); } else if( g_Input.GetState( DIK_E, KS_KEY ) ) { WzVector CameraDirection = g_Camera.GetCameraDirection(); WzVector RightVector; WzVector UpVector; SetVector( &UpVector, 0.0f, 0.0f, 1.0f ); VectorCrossProduct( &RightVector, &g_Camera.GetCameraDirection(), &UpVector ); VectorNormalize( &RightVector, &RightVector ); m_FreeCameraVector -= (RightVector * (GENERALPARAM->GetFreeCameraSpeed() * g_fFreeCameraSpeed) ); } g_Camera.SetCamera( &(m_FreeCameraVector), FALSE,dwTick); g_Camera.UpdateCamera(); return; } } WzVector vDirection = g_pHero->GetDirection(); g_Camera.SetAngle( &vDirection ); // : ϵڵ // ÷̾ ʿ ѹ ϱ ڵ // -> ÷̾ ٶ󺸴 ī޶ Ѵ. if (m_bCameraDetech) { g_Camera.SetYaw(g_pHero->GetAngle()); g_Camera.Rotate(0,-50); m_bCameraDetech = false; } // 콺 ī޶ ȸ if( g_Input.GetState( MOUSE_LBUTTON, KS_MOUSE_KEY) ) { g_Camera.Rotate( pMouseState->lX, pMouseState->lY,Camera::CAMERA_ROTATE_LMOUSE ); } else if( g_Input.GetState( MOUSE_RBUTTON, KS_MOUSE_KEY ) ) { g_Camera.Rotate( pMouseState->lX, pMouseState->lY, Camera::CAMERA_ROTATE_RMOUSE ); } else if (g_Input.GetState( MOUSE_MBUTTON, KS_MOUSE_DOWN )) { if( !m_bRenderLightDirection ) { #ifdef _JBH_MOD_MOUSE_MBUTTON_IN_BATTLESCENE g_pHero->SetDirection( g_Camera.GetCameraTo(), g_Camera.GetCameraFrom(), FALSE ); #else if( g_Input.IsPressCtrlKey() ) { g_Camera.SetYaw( g_pHero->GetAngle() + WZ_PI ); } else { g_Camera.SetYaw( g_pHero->GetAngle() ); } #endif g_Camera.Rotate(0,0); } } else { #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID if( g_pHero->GetCurState() == STATE::SKILL ) { if( g_pHero->GetCurSkillState()->GetSkillClassCode() == eSKILL_HELLROID_1015 ) { g_Camera.KeyboardModeInterpolateAngle(g_pHero->GetAngle()); } } #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID if( g_pHero->GetCurState() == STATE::KEYBOARDMOVE||g_pHero->GetCurState() == STATE::KEYBOARDJUMP) { g_Camera.KeyboardModeInterpolateAngle(g_pHero->GetAngle()); } else { if( g_pHero->IsMoving() ) { // Ϲ ̵ ī޶ ڵȸ / if( GENERALPARAM->GetGetCameraRotaion() ) { g_Camera.InterpolateAngle(); } } } g_Camera.Rotate(0,0); g_Camera.SetRotateState( FALSE ); g_Camera.RotateAngleCheck( 0 ); g_Camera.SetStartRotateCheck( FALSE ); } WzVector vPos = g_pHero->GetVisiblePos(); if ( g_bObserverMode == FALSE ) { DWORD dwPlayerAtt = g_pHero->GetCurrentTileAtt(FALSE); if (BIT_CHECK(dwPlayerAtt, PTA_PLAYER_FALLDOWN_TILE)) { WzVector vTempPos = g_pHero->GetPosition(); vPos.z = max( vTempPos.z, vPos.z); } float default_eye_height = GlobalFunc::GetCameraHeight( g_pHero->GetClass() ); //restore default eye height g_Camera.set_eye_height( default_eye_height ); if ((g_pHero->GetCurState() == STATE::WINGS_SPREAD) || (g_pHero->GetCurState() == STATE::WINGS_FURL)) { const float kFloorToBody_Length = 1.442f; float camera_eye_height = default_eye_height + (g_pHero->GetBodyPos().z - vPos.z - kFloorToBody_Length); g_Camera.set_eye_height(camera_eye_height); } else if (g_pHero->is_spread_wings()) { g_Camera.set_eye_height(CGraphicParam::Instance()->camera_eye_height_wings_spread()); } if (g_pHero->rider() != NULL) { const float kFloorToLinkDummy_Stand_Length = 2.156f; float camera_eye_height = default_eye_height; if ((g_pHero->GetCurState() == STATE::RIDER_FURL) || (g_pHero->GetCurState() == STATE::RIDER_SPREAD)) { camera_eye_height += (g_pHero->rider()->GetLinkPos()->z - vPos.z - kFloorToLinkDummy_Stand_Length); } else if (g_pHero->rider()->is_spread() == true) { camera_eye_height += (CGraphicParam::Instance()->camera_eye_height_rider_spread() - kFloorToLinkDummy_Stand_Length); } g_Camera.set_eye_height(camera_eye_height); } } g_Camera.SetCamera( &vPos, TRUE ,dwTick); g_Camera.UpdateCamera(); } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessEffect(DWORD dwTick) { } //------------------------------------------------------------------------------ /** */ void BattleScene::SetFieldID(DWORD dwFieldID) { m_dwFieldID = dwFieldID; } //------------------------------------------------------------------------------ /** */ void BattleScene::RenderDamage(DWORD dwTick) { if (GENERALPARAM->GetScreenShotMode()) { return; } g_InterfaceManager.RenderDamageList(dwTick); } //------------------------------------------------------------------------------ /** */ DWORD BattleScene::AddBattleTimeSerial() { DWORD ret = m_dwBattleTimeSerial; m_dwBattleTimeSerial++; return ret; } //------------------------------------------------------------------------------ /** */ DWORD BattleScene::GetBattleTimeSerial() { return m_dwBattleTimeSerial; } //------------------------------------------------------------------------------ /** */ void BattleScene::RenderClone() { Clone *pClone = NULL; Clone_Map_Itr itr = g_CloneManager.GetBegin(); for (; itr != g_CloneManager.GetEnd(); itr++) { pClone = static_cast(itr->second); assert(pClone); if(pClone) { pClone->Render(); } } } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessTrigger() { if (!g_pMap) return; DWORD dwGroupID = 0; DWORD dwCategoryID = 0; TCHAR szTriggerGroupName[MAX_TRIGGER_GROUPNAME_LENGTH] = {0,}; g_pMap->GetTriggerGroupName(szTriggerGroupName); if('0' == szTriggerGroupName[0]) return; if(NULL == m_pTriggerMan) return; if(FALSE == m_bTriggerInit) { TriggerGroupInfo* pTriggerGroupInfo = g_pMap->GetTriggerInfoMan()->FindTriggerGruopInfo(szTriggerGroupName); if(pTriggerGroupInfo) { //-----------------------------------// m_pTriggerMan->Init(*pTriggerGroupInfo); //-----------------------------------// m_bTriggerInit = TRUE; g_pMap->SetTriggerMan(m_pTriggerMan); } else { g_pMap->SetTriggerMan(NULL); } } m_pTriggerMan->OnMsg(NULL); } //------------------------------------------------------------------------------ /** */ int BattleScene::GetCharacterHP(DWORD dwID) { Character *pChr = (Character *)g_ObjectManager.GetObject(dwID); if (pChr) { return pChr->GetHP(); } return 0; } void BattleScene::ProcessBlind(DWORD dwTick) { bool isblind = false; if (g_pHero) { if( g_pHero->IsBlind() || g_pHero->IsBlind2() ) { isblind = true; if( g_pHero->IsBlind() == TRUE ) m_BlindType = BLIND_TYPE_BLACK; else if( g_pHero->IsBlind2() == TRUE ) m_BlindType = BLIND_TYPE_WHITE; } } if( isblind == true ) { //if( g_pHero->GetTargetObject() != NULL ) //{ // g_pHero->SetNextState(STATE::IDLE,g_CurTime); // g_pHero->SetTargetID(0); //} //g_HeroInput.SetCurrentTarget(0); m_iCurBlindRate += dwTick; if( m_BlindType == BLIND_TYPE_BLACK && m_iCurBlindRate >= BLACK_BLIND_TIME) { m_iCurBlindRate = BLACK_BLIND_TIME; } else if( m_BlindType == BLIND_TYPE_WHITE && m_iCurBlindRate >= WHITE_BLIND_TIME ) { m_iCurBlindRate = WHITE_BLIND_TIME; } } else { if (m_iCurBlindRate) { m_iCurBlindRate -= dwTick; if (m_iCurBlindRate <= 0) { m_iCurBlindRate = 0; m_BlindType = BLIND_TYPE_NONE; g_pSunRenderer->SetLinearFog( m_oldFogParameter.m_wcFogColor, m_oldFogParameter.m_fFogStart, m_oldFogParameter.m_fFogEnd, m_oldFogParameter.m_fMaxFogRate ); } } } } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessSpecialEffect(DWORD dwTick) { if (m_iBrightDelay > 0) { m_iBrightDelay -= dwTick; if (m_iBrightDelay <= 0) { m_iBrightDelay = 0; g_pSunRenderer->x_pManagerPostEffect->SetTechBlur(&m_oldBlur); g_pSunRenderer->SetLinearFog(m_oldFogParameter.m_wcFogColor,m_oldFogParameter.m_fFogStart,m_oldFogParameter.m_fFogEnd,m_oldFogParameter.m_fMaxFogRate); } } } //------------------------------------------------------------------------------ /** */ void BattleScene::ProcessGrayScaleDelay(DWORD dwTick) { if (m_iGrayScaleDelay > 0) { m_iGrayScaleDelay -= dwTick; if (m_iGrayScaleDelay <= 0) { m_iGrayScaleDelay = 0; g_pSunRenderer->x_pManagerPostEffect->TurnOffPostEffect(PET_GRAYSCALE); } } } //------------------------------------------------------------------------------ /** */ void BattleScene::SetBrightBlur() { int maxlight = 1000; if (m_iBrightDelay > 0) { float fRate = (float)m_iBrightDelay / (float)maxlight; if (fRate >= 1.0f) { fRate = 1.0f; } if (fRate <= 0.0f) { fRate = 0.0f; } St_PE_BLUR blur = m_oldBlur; float fLumRate = 1.0f - fRate; blur.m_fMinLuminance = m_oldBlur.m_fMinLuminance * fLumRate; blur.m_fSelectHighLight = m_oldBlur.m_fSelectHighLight * (1.0f - fRate) + 2.0f * fRate; blur.m_fFinalColorBlend = m_oldBlur.m_fFinalColorBlend * (1.0f - fRate) + 2.0f * fRate; int iBlurR = Red_WzColor(blur.m_wcSelectColor) ; int iBlurG = Green_WzColor(blur.m_wcSelectColor) ; int iBlurB = Blue_WzColor(blur.m_wcSelectColor) ; int iNewBlurR = int( (255 * fRate ) + iBlurR * fLumRate ); int iNewBlurG = int( (255 * fRate ) + iBlurG * fLumRate ); int iNewBlurB = int( (255 * fRate ) + iBlurB * fLumRate ); WzColor newblurcolor = WzColor_RGBA((int)(iBlurR*m_fBlur_weight),(int)(iBlurG *m_fBlur_weight),(int)(iBlurB *m_fBlur_weight),255); blur.m_wcSelectColor = newblurcolor; g_pSunRenderer->x_pManagerPostEffect->SetTechBlur(&blur); int iR = Red_WzColor(m_oldFogParameter.m_wcFogColor) ; int iG = Green_WzColor(m_oldFogParameter.m_wcFogColor); int iB = Blue_WzColor(m_oldFogParameter.m_wcFogColor); int iNewR = int( (255 * fRate) + iR * fLumRate ); int iNewG = int( (255 * fRate) + iG * fLumRate ); int iNewB = int( (255 * fRate) + iB * fLumRate ); float fStart = m_oldFogParameter.m_fFogStart * fLumRate; float fEnd = 1.0f * fRate + m_oldFogParameter.m_fFogEnd * fLumRate; WzColor newfog; newfog = WzColor_RGBA((int)(iNewR * m_fFog_weight),(int)(iNewG * m_fFog_weight),(int)(iNewB * m_fFog_weight) ,255); g_pSunRenderer->SetLinearFog(newfog,fStart,fEnd,m_oldFogParameter.m_fMaxFogRate); } } //------------------------------------------------------------------------------ /** */ void BattleScene::SetBrightDelay(int delay) { if (m_iBrightDelay <= 0 ) { m_oldFogParameter = g_pSunRenderer->GetFogParameter(); m_iBrightDelay = delay; } } //------------------------------------------------------------------------------ /** */ void BattleScene::SetGrayScaleDelay(int delay,WzColor color) { m_iGrayScaleDelay = delay; m_GrayScaleColor = color; } //------------------------------------------------------------------------------ /** ư ƾ */ void BattleScene::BackToTheVillage(CODETYPE VillageCode /*= 0*/) { if (GENERALPARAM->IsNet()) { assert(g_pHero); if (!g_pHero) { return; } BattleScene::SetRoomKey(0); SCENE_TYPE eBackToScene = SCENE_TYPE_VILLAGE; MAPCODE MapCode;; if (0 == VillageCode) { MapCode = g_pHero->GetCharInfo()->m_iRegion; //GS_BUG_FIX:(ʵ,)ưüũ const sMAPINFO* pMapInfo = MapInfoParser::Instance()->FindMapInfo(g_pHero->GetCharInfo()->m_iRegion); if (pMapInfo && (pMapInfo->byMKind == eZONETYPE_FIELD)) { eBackToScene = SCENE_TYPE_FIELD; } } else { MapCode = (MAPCODE)VillageCode; } g_LoadScene.SetNextSceneAfterLoaded(eBackToScene, MapCode, 0); GameFramework::ChangeScene(SCENE_TYPE_LOAD); } else { g_LoadScene.SetNextSceneAfterLoaded(SCENE_TYPE_CHARSELECT, GENERALPARAM->GetCharSelectMapID(), 0); GameFramework::ChangeScene(SCENE_TYPE_LOAD); } uiBattleScoreMan* battle_score_manager_ptr = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if (battle_score_manager_ptr) { battle_score_manager_ptr->Reset(); } } //---------------------------------------------------------------------------- /** */ void BattleScene::BackToTheVillageSyn() { if (BattleScene::m_bPendingBackToSomeWhere) return; SystemDialog * pSystemDialog = (SystemDialog * )g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_SYSTEM ); switch (GameFramework::GetCurScene() ) { case SCENE_TYPE_MISSION: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_MISSION_LEAVE_SYN SendPacket; if(g_MissionScene.IsLeavePartyBan()) // SendPacket.m_Reason = MSG_CG_ZONE_MISSION_LEAVE_SYN::REASON_EXPULSION; else // SendPacket.m_Reason = MSG_CG_ZONE_MISSION_LEAVE_SYN::REASON_INTEND; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_LOBBY: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_LOBBY_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_VILLAGE: { BattleScene::m_bPendingBackToSomeWhere = true; if(BattleScene::IsLobby()) { if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_LOBBY_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } } break; case SCENE_TYPE_PVP: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_PVP_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_INSTANCE_DUNGEON: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_INSTANCE_DUNGEON_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_FIELD: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_RETURN_VILLAGE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_CHUNTING: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_CHUNTING_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_BATTLEGROUND: #ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH case SCENE_TYPE_GOLDRUSH: #endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH #ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP case SCENE_TYPE_FREEPVP: #endif //_NA_006088_20120910_CHAOS_ZONE_FREE_PVP #ifdef _NA_008334_20150608_SONNENSCHEIN case SCENE_TYPE_SONNENSCHEIN: #endif //_NA_008334_20150608_SONNENSCHEIN #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION case SCENE_TYPE_GUILDMISSION: #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_INSTANCE_DUNGEON_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM case SCENE_TYPE_SPA: { BattleScene::m_bPendingBackToSomeWhere = true; if ( pSystemDialog ) { pSystemDialog->AddPacketStatus(SystemDialog::BACK_TO_THE_VILLAGE); } MSG_CG_ZONE_EX_SPA_LEAVE_SYN SendPacket; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; #endif //_NA_008069_20150210_ADD_SPA_SYSTEM } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::BackToTheVillageTransact() { SCENE_TYPE current_scene_type = GameFramework::GetCurScene(); // Ÿ ư⸦ if (current_scene_type == SCENE_TYPE_SSQ) { return; } #ifdef _NA_000000_20120527_CHAOS_ZONE if ((current_scene_type == SCENE_TYPE_BATTLEGROUND) || (current_scene_type == SCENE_TYPE_FREEPVP) #ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH || (current_scene_type == SCENE_TYPE_GOLDRUSH) #endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH #ifdef _NA_008334_20150608_SONNENSCHEIN || (current_scene_type == SCENE_TYPE_SONNENSCHEIN) #endif //_NA_008334_20150608_SONNENSCHEIN #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION || (current_scene_type == SCENE_TYPE_GUILDMISSION) #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION ) { // ī keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_Delay_Leave_ChaosZone; msg.DoSomething = GlobalFunc::DoLeaveFieldCancel; msg.lParam = InterfaceManager::DIALOG_DELAY_CASTING; msg.wParam = eDoType_Delay_Leave_ChaosZone; g_KeyQueueManager.PushBack(msg); // ijƮ â Ÿ̸Ӹ Ѵ. StartLeaveFieldCastTimer(eDoType_Delay_Leave_ChaosZone, DELAY_LEAVE_FIELD_TICK); return; } #endif //_NA_000000_20120527_CHAOS_ZONE if (g_pHero && g_pHero->IsDead()) { // ¿ . BackToTheVillageSyn(); return; } if ((current_scene_type == SCENE_TYPE_VILLAGE) || (current_scene_type == SCENE_TYPE_FIELD)) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString(eST_U_ARE_IN_VILLAGE_OR_FIELD,szMessage,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage); return; } if( GENERALPARAM->IsNet()==FALSE) { xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); g_LoadScene.SetNextSceneAfterLoaded(SCENE_TYPE_VILLAGE, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID() ); GameFramework::ChangeScene( SCENE_TYPE_LOAD ); } keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_Delay_Leave_Field; msg.DoSomething = GlobalFunc::DoLeaveFieldCancel; msg.lParam = InterfaceManager::DIALOG_DELAY_CASTING; msg.wParam = eDoType_Delay_Leave_Field; g_KeyQueueManager.PushBack(msg); // ijƮ â Ÿ̸Ӹ Ѵ. StartLeaveFieldCastTimer( eDoType_Delay_Leave_Field, DELAY_LEAVE_FIELD_TICK ); } //------------------------------------------------------------------------------ /** */ void BattleScene::LeaveDominationTransact() { if (g_pHero && g_pHero->IsDead()) { // ¿ . //uiDominationTowerMan::SEND_LEAVE_DOMINATION(); // 2011.08.09 / / ij ٿ ij ٰ ġ鼭 ̾α Ǯ // 3464 ¿ ϴ. //#define _NA_000000_121015_LEAVE_CANCEL_TO_REVIVE_RE_CASTING TCHAR message[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString(3464, message, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, message); return; } if ( SCENE_TYPE_VILLAGE == GameFramework::GetCurScene() || SCENE_TYPE_FIELD == GameFramework::GetCurScene() ) { return; } if( GENERALPARAM->IsNet()==FALSE) { xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); g_LoadScene.SetNextSceneAfterLoaded(SCENE_TYPE_VILLAGE, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID()); GameFramework::ChangeScene( SCENE_TYPE_LOAD ); } keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_Delay_Leave_Domination; msg.DoSomething = GlobalFunc::DoLeaveFieldCancel; msg.lParam = InterfaceManager::DIALOG_DELAY_CASTING; msg.wParam = eDoType_Delay_Leave_Domination; g_KeyQueueManager.PushBack(msg); // ijƮ â Ÿ̸Ӹ Ѵ. StartLeaveFieldCastTimer( eDoType_Delay_Leave_Domination, DELAY_LEAVE_FIELD_TICK ); } //------------------------------------------------------------------------------ /** ̼ Ŭ ޽ Ѵ. */ void BattleScene::RenderMissionClearMessage() { if (m_dwMissionClearTick != 0) { // 5 Ѵ. g_pSunRenderer->Set2DMode( TRUE, FALSE ); g_pSunRenderer->SetAlphaBlendMode( AB_ALPHA ); g_pSunRenderer->SetZBufferTest(FALSE); g_pSunRenderer->SetColor(255,255,255,255); g_pSunRenderer->RenderTexture(m_hMissionClearTexture,257.0f,0.0f,491.0f,84.0f); g_pSunRenderer->Set2DMode( FALSE ); g_pSunRenderer->SetZBufferTest(TRUE); if (m_dwMissionClearTick + 10000 < g_pSunRenderer->x_Clock.GetCurrentTick() ) { m_dwMissionClearTick = 0; } } } //------------------------------------------------------------------------------ /** renderstate ش. */ void BattleScene::RestoreRenderState() { g_pMap->EnableBlur(FALSE); g_pSunRenderer->x_pManagerPostEffect->SetTechBlur(&m_oldBlur); g_pSunRenderer->SetLinearFog(m_oldFogParameter.m_wcFogColor,m_oldFogParameter.m_fFogStart,m_oldFogParameter.m_fFogEnd,m_oldFogParameter.m_fMaxFogRate); } //------------------------------------------------------------------------------ /** */ void BattleScene::SetFogParam(BYTE bR,BYTE bG,BYTE bB,float fFogStart,float fFogEnd,float fFogRate) { WzColor color; color = WzColor_RGBA(bR,bG,bB,255); m_oldFogParameter.m_wcFogColor = color; m_oldFogParameter.m_fFogStart = fFogStart; m_oldFogParameter.m_fFogEnd = fFogEnd; m_oldFogParameter.m_fMaxFogRate = fFogRate; g_pSunRenderer->SetLinearFog(m_oldFogParameter.m_wcFogColor,m_oldFogParameter.m_fFogStart,m_oldFogParameter.m_fFogEnd,m_oldFogParameter.m_fMaxFogRate); } //------------------------------------------------------------------------------ /** */ void BattleScene::ReleaseInterfaceResource() { // ǥ ǥ Į ʰ Ѵ. g_InterfaceManager.SetMovePointer(FALSE,NULL); if (m_hTexture != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture( m_hTexture ); m_hTexture = INVALID_HANDLE_VALUE; } if (m_hMissionClearTexture != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture( m_hMissionClearTexture ); m_hMissionClearTexture = INVALID_HANDLE_VALUE; } } //------------------------------------------------------------------------------ /** */ void BattleScene::ReleaseObjects() { g_CloneManager.Clear(); #ifdef _MOD_CHAGNE_DELETE_HERO g_ObjectManager.DeleteAllObjectWithoutHero(); #else g_ObjectManager.Destroy(); uiBattlezone2Man* man = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_ZONE_MANAGER)); if (man != NULL) { man->ClearObjectKey(); } #endif } //------------------------------------------------------------------------------ /** */ void BattleScene::_renderDbgInfoRenderStates(int& x, int& y) { #ifdef _DEV_VER if(NULL == g_pMap) return; // FPS DWORD dwTick; DWORD dwTicks2; DWORD dwTick3; LONG lCount, lPpsCount, lDcpsCount; g_pSunRenderer->GetFpsValues( &dwTick, &lCount ); float fFps = ( float )lCount * 1000.0f / ( float )dwTick; g_pSunRenderer->GetPpsValues( &dwTicks2, &lPpsCount); g_pSunRenderer->GetDcpsValues( &dwTick3, &lDcpsCount); LONG lPolygon = lCount > 0 ? lPpsCount / lCount : 0; LONG lDrawCall = lCount > 0 ? lDcpsCount / lCount : 0; TCHAR lpszText[512] = {0,}; SYSTEMTIME time; util::TimeSync::GetLocalTime(&time); Snprintf(lpszText, 512-1, _T("%4d-%2d-%2d %2d:%2d:%2d"), time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T(" %f fps [ %ld polygons, %ld drawcalls(%ld terrain drawcalls) ]"), fFps, lPolygon, lDrawCall, g_pMap->GetWorldBase()->terrain_drawcalls()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T(" VRam %ld/%ld(M) "), (g_pSunRenderer->GetLocalVidMem() - g_pSunRenderer->GetAvailableVidMem()) / (1024*1024), g_pSunRenderer->GetLocalVidMem() / (1024*1024)); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Available Texture memory: %ld(M)"),g_pSunRenderer->GetAvailableTextureMem() / (1024*1024)); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; MEMORYSTATUS MemStatus; MemStatus.dwLength = sizeof(MemStatus); GlobalMemoryStatus(&MemStatus); Snprintf( lpszText, 512-1, _T(" SRam %ld/%ld(M) "), (MemStatus.dwTotalPhys - MemStatus.dwAvailPhys) / (1024*1024), MemStatus.dwTotalPhys / (1024*1024)); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T(" Near : %f Far : %f "),g_Camera.GetNearClip(),g_Camera.GetFarClip()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("ProcessCount : %d"),g_dwCharProcessCount); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("RenderCount : %d"),g_dwCharRenderCount); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; ////////////////////////////////////////////////////////////////////////// y += 20; Snprintf( lpszText, 512-1, _T("VisMapObjCount : %d"),g_pMap->m_iVisMapObjCnt); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("VisMonCount : %d"),g_pMap->m_iVisMonCnt); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("VisPlayerCount : %d"),g_pMap->m_iVisPlayerCnt); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("VisNPCCount : %d"),g_pMap->m_iNPCCnt); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("VisGrassCount : %d"),g_pMap->grass_cnt_); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("OctNode(Object) : %d"), g_pMap->GetWorldBase()->x_pOctree->GetNodeCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("OctNode(Terrain) : %d"), g_pMap->GetWorldBase()->x_pTerrainOctree->GetNodeCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("Terrain PolyCnt : %d / %d"), g_pMap->rendering_terrain_cnt_, g_pMap->GetWorldBase()->GetTerrainMeshCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("Total Terrain Texture Count : %d"), g_pMap->GetWorldBase()->GetTextureCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; if(g_pEffectManager) { #ifdef LAST_RELEASE // no operations #else // Ʈ / ùķ̼ Ʈ Snprintf( lpszText, 512-1, _T("Skipped/Created effects : %d / %d"), g_effDbgInfo.numSkippedEffect, g_pEffectManager->GetNumCreatedEffects() ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; // Ʈ Snprintf( lpszText, 512-1, _T("Rendered effects : %d ( %d )"), g_effDbgInfo.numRenderedEffect, g_effDbgInfo.maxNumRenderedEffect ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; // Ʈ Snprintf( lpszText, 512-1, _T("Rendered Elements : %d ( %d )"), g_effDbgInfo.numRenderedSprite + g_effDbgInfo.numRenderedMesh + g_effDbgInfo.numRenderedChain + g_effDbgInfo.numRenderedFlatChain + g_effDbgInfo.numRenderedDecal + g_effDbgInfo.numRenderedWeather , g_effDbgInfo.maxNumRenderedSprite + g_effDbgInfo.maxNumRenderedMesh + g_effDbgInfo.maxNumRenderedChain + g_effDbgInfo.maxNumRenderedFlatChain + g_effDbgInfo.maxNumRenderedDecal + g_effDbgInfo.maxNumRenderedWeather); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; #endif // LAST_RELEASE } Snprintf( lpszText, 512-1, _T("SceneType: %d / MAPCode:%d / WMOCode:%d"), GameFramework::GetCurrentScene()->GetType(), g_pMap->GetCurrentFieldID(), g_pMap->GetCurrentWMOCode()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; Snprintf( lpszText, 512-1, _T("VisibleRange: %f, AlphaRange: %f"), g_pMap->GetVisibleRange(), g_pMap->GetAlphaRange()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText,x, y, WzColor_RGB( 255, 255, 255 ) ); y += 20; ////////////////////////////////////////////////////////////////////////// ////------------------------------------------------------------------------------ ////_NA000000_SPEED_HACK_PREVENTION_SUPPORT //if (g_pHero != NULL) //{ // x = 400; // y = 600; // Snprintf(lpszText, 256-1, _T("kbmove_skip_count = %d"), g_pHero->KBMove.debug_kbmove_skip_count); // g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); // y += 20; // Snprintf(lpszText, 256-1, _T("hero speed = %f"), g_pHero->KBMove.debug_move_speed); // g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); // y += 20; // Snprintf(lpszText, 256-1, _T("kbmove_gab = %f"), g_pHero->KBMove.debug_kbmove_gab); // g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); // y += 20; //} #endif //#ifdef _DEV_VER } //------------------------------------------------------------------------------ /** */ static const char *GetActionString(PLAYER_ACTION *pAction) { // ׿ ޽ switch(pAction->ActionID) { case ACTION_IDLE: return "ACTION_IDLE"; case ACTION_ATTACK: return "ACTION_ATTACK"; case ACTION_SKILL: return "ACTION_SKILL"; case ACTION_MOVE: return "ACTION_MOVE"; case ACTION_KEYBOARDMOVE: return "ACTION_KEYBOARDMOVE"; case ACTION_KNOCKBACK: return "ACTION_KNOCKBACK"; case ACTION_TOAIR: return "ACTION_TOAIR"; case ACTION_DOWN: return "ACTION_DOWN"; case ACTION_GETUP: return "ACTION_GETUP"; case ACTION_NPCMEET: return "ACTION_NPCMEET"; case ACTION_GETITEM: return "ACTION_GETITEM"; case ACTION_JUMP: return "ACTION_JUMP"; case ACTION_EVENTJUMP: return "ACTION_EVENTJUMP"; case ACTION_STOP: return "ACTION_STOP"; case ACTION_VALKYRIESHOT: return "ACTION_VALKYRIESHOT"; case ACTION_PLAYERMEET: return "ACTION_PLAYERMEET"; case ACTION_SIT: return "ACTION_SIT"; case ACTION_ATTACKJUMP: return "ACTION_ATTACKJUMP"; default : return "INVALID_ACTION"; } } void BattleScene::_renderDbgInfoMonsterInfo(int& x, int& y) { #ifdef _DEV_VER Object *pObject = g_ObjectManager.GetObject(g_HeroInput.GetCurrentTarget()); if (pObject && pObject->IsKindOfObject(CHARACTER_OBJECT)) { Character *pChar = (Character*)pObject; TCHAR lpszText[256] = {0,}; int x = 400; int y = 80; int Line = 18; Snprintf( lpszText, 256-1, _T("ObjectKey: %d"),pChar->GetObjectKey()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; for( size_t i = 0 ; i < pChar->GetPartCount() ; ++i ) { if ( CWzUnitDraw* pPart = pChar->GetPart(i) ) { Snprintf( lpszText, 256-1, _T("LOD[%d] Lv: %d"), i, pPart->GetWzdLOD()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } } St_Camera * pCameraInfo = g_pSunRenderer->GetCameraInfo(); if(pCameraInfo) { WzVector wvLen = pCameraInfo->m_wvFrom - pChar->GetVisiblePos(); float fLen = VectorLength(&wvLen); Snprintf( lpszText, 256-1, _T("CamToChar Len: %f"), fLen); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } Snprintf( lpszText, 256-1, _T("HeroToChar Z: %f"), pChar->GetVisiblePos().z - g_pHero->GetVisiblePos().z); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; PLAYER_ACTION CurAction = *pChar->GetCurrentAction(); Snprintf( lpszText, 256-1, _T("Current Action : %s") , GetActionString(&CurAction) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; if(pChar->GetNextAction()) { PLAYER_ACTION NextAction = *pChar->GetNextAction(); Snprintf( lpszText, 256-1, _T("Queue Action : %s") , GetActionString(&NextAction) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 )); y += Line; } else { Snprintf( lpszText, 256-1, _T("Queue Action : ACTION_NULL") ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } Snprintf( lpszText, 256-1, _T("ActionQueueCount: %d"),pChar->GetActionQueueCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; WzVector vVisiblePos; vVisiblePos=pChar->GetVisiblePos(); Snprintf( lpszText, 256-1, _T("VisiblePos: %.2f, %.2f, %.2f"),vVisiblePos.x,vVisiblePos.y,vVisiblePos.z); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; WzVector vPos; vPos= pChar->GetPosition(); Snprintf( lpszText, 256-1, _T("LogicPos: %.2f, %.2f, %.2f"),vPos.x,vPos.y,vPos.z); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; if( CWzUnitDraw* pBasePart = pChar->GetBasePart()) { WzVector vMeshPos = pBasePart->GetPosition(); Snprintf( lpszText, 256-1, _T("MeshPos: %.2f, %.2f, %.2f"),vMeshPos.x,vMeshPos.y,vMeshPos.z); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } else { Snprintf( lpszText, 256-1, _T("Ʈ")); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } BYTE bAlpha; bAlpha=Alpha_WzColor(pChar->GetColor()); Snprintf( lpszText, 256-1, _T("Alpha:%d"),bAlpha); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; BOOL bShow; bShow=pChar->GetShow(); Snprintf( lpszText, 256-1, _T("Show:%d"),bShow); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; BOOL bObserver; bObserver=pChar->IsObserverMode(); Snprintf( lpszText, 256-1, _T("bObserver:%d"),bObserver); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; BOOL CompletelyLoaded; CompletelyLoaded=pChar->IsCompletelyLoaded(); Snprintf( lpszText, 256-1, _T("CompletelyLoaded:%d"),CompletelyLoaded); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; BOOL bCurShowFlag; bCurShowFlag=pChar->GetCurShowFlag(); Snprintf( lpszText, 256-1, _T("CurShowFlag:%d"),bCurShowFlag); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; TCHAR ani_code[5] = {0,}; WzAnimationInfo *ani_info_ptr = pChar->GetAnimationInfo(pChar->GetCurrentAnimation()); if (ani_info_ptr) { WzIDToString(ani_code, pChar->GetCurrentAnimation()); int attack_speed = static_cast((((ani_info_ptr->m_nMaxFrame/30.f) * 1000.f) + 1000.f)); Snprintf( lpszText, 256-1, _T("AniCode: %s(AttSpeed: %d)"), ani_code, attack_speed); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; } int iTile; iTile=pChar->GetPathExplorer()->GetTile(); Snprintf( lpszText, 256-1, _T("Tile:%d"),iTile); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; DWORD dwAtt=0; if(g_pMap) { if(iTile>=0) dwAtt=g_pMap->GetWorldBase()->x_pPathFinder->GetAttribute(iTile); } Snprintf( lpszText, 256-1, _T("TileAtt:%o"),dwAtt); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 255, 255, 0 ) ); y += Line; if(BIT_CHECK(dwAtt,PTA_CONFLICT_TILE)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_CONFLICT_TILE", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_FREE_CONFLICT_TILE )) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_FREE_CONFLICT_TILE", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_PK_TILE)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_PK_TILE", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_NO_WALK)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_NO_WALK", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_DOMINATION_WAR_TILE)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_DOMINATION_WAR_TILE", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_PLAYER_JUMP_TILE)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_PLAYER_JUMP_TILE", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_JUMP_CONTROL_A)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_JUMP_CONTROL_A", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } if(BIT_CHECK(dwAtt,PTA_JUMP_CONTROL_B)) { g_pSunRenderer->x_pManagerTextOut->DrawText( "PTA_JUMP_CONTROL_B", x, y, WzColor_RGB( 255, 0, 0 ) ); y += Line; } ////////////////////////////////////////////////////////////////////////// //NpcInfo x = 600; y = 80; if (pChar->IsKindOfObject(MONSTER_OBJECT) == TRUE) { Monster* monster_ptr = static_cast(pChar); BASE_NPCINFO* npc_info_ptr = monster_ptr->GetMonsterInfo(); TCHAR desc_str[INTERFACE_STRING_LENGTH + 1] = {0,}; GlobalFunc::GetMonGradeDesc(static_cast(npc_info_ptr->m_byGrade), desc_str); Snprintf( lpszText, 256-1, _T("Grade: %d(%s)"), npc_info_ptr->m_byGrade, desc_str); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; GlobalFunc::GetAICodeDesc(npc_info_ptr->m_wAICode, desc_str); Snprintf( lpszText, 256-1, _T("AICode( AI): %d(%s)"), npc_info_ptr->m_wAICode, desc_str); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; GlobalFunc::GetAttackAttitudeDesc(static_cast(npc_info_ptr->m_byAttitude), desc_str); Snprintf( lpszText, 256-1, _T("Attitude(ݼ): %d(%s)"), npc_info_ptr->m_byAttType, desc_str); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; GlobalFunc::GetAttTypeDesc(static_cast(npc_info_ptr->m_byAttType), desc_str); Snprintf( lpszText, 256-1, _T("AttType(Ÿ): %d(%s)"), npc_info_ptr->m_byAttType, desc_str); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; GlobalFunc::GetMoveAttitudeDesc(static_cast(npc_info_ptr->m_byMoveAttitude), desc_str); Snprintf( lpszText, 256-1, _T("MoveAttitude(̵): %d(%s)"), npc_info_ptr->m_byAttType, desc_str); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("PhyAttRate( ): %d"), npc_info_ptr->m_wPhyAttRate ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("PhyAttAvoid( ȸǷ): %d"), npc_info_ptr->m_wPhyAttAvoid ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("WalkSpeed: %f"), npc_info_ptr->m_fWalkSpeed ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("RunSpeed: %f"), npc_info_ptr->m_fRunSpeed ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("AttackPower(ּ/ִ): %d / %d"), npc_info_ptr->m_dwMinAttackPower, npc_info_ptr->m_dwMaxAttackPower ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("SkillPower: %d"), npc_info_ptr->skill_power ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("PhysicalDefense: %d"), npc_info_ptr->m_dwPhyDef ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 255, 255)); y += Line; Snprintf( lpszText, 256-1, _T("Fire() Attack/Resist: %d / %d%%"), npc_info_ptr->element_fire_attack, npc_info_ptr->element_fire_resist); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 64, 0)); y += Line; Snprintf( lpszText, 256-1, _T("Water() Attack/Resist: %d / %d%%"), npc_info_ptr->element_water_attack, npc_info_ptr->element_water_resist); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(0, 128, 255)); y += Line; Snprintf( lpszText, 256-1, _T("Earth() Attack/Resist: %d / %d%%"), npc_info_ptr->element_earth_attack, npc_info_ptr->element_earth_resist); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 192, 0)); y += Line; Snprintf( lpszText, 256-1, _T("Wind(ٶ) Attack/Resist: %d / %d%%"), npc_info_ptr->element_wind_attack, npc_info_ptr->element_wind_resist); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(0, 255, 128)); y += Line; Snprintf( lpszText, 256-1, _T("Dark() Attack/Resist: %d / %d%%"), npc_info_ptr->element_dark_attack, npc_info_ptr->element_dark_resist); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(192, 192, 192)); y += Line; } if (pChar->IsKindOfObject(MONSTER_OBJECT) == TRUE) { //if (aggro_player_count > 0) //{ // int index = 0; // int gap_count = 2; // if (aggro_player_count > 40) // { // gap_count = 3; // } // TCHAR filed_string[3][255] = { "%-16s: %-6d", "%-16s: %-6d %-16s: %-6d", // "%-16s: %-6d %-16s: %-6d %-16s: %-6d" }; // for (index = gap_count; index <= aggro_player_count; index = index+gap_count) // { // Snprintf(lpszText, 256-1, filed_string[gap_count-1], // aggro_value_info[index-2].character_name_, aggro_value_info[index-2].aggro_value_, // aggro_value_info[index-1].character_name_, aggro_value_info[index-1].aggro_value_, // aggro_value_info[index-3].character_name_, aggro_value_info[index-3].aggro_value_); // g_pSunRenderer->x_pManagerTextOut->DrawText(lpszText, x, y, WzColor_RGB(255, 128, 0)); // y += Line; // } // int remain_count = (aggro_player_count%gap_count); // if (remain_count == 1)// 1 // { // Snprintf(lpszText, 256-1, filed_string[0], // aggro_value_info[aggro_player_count-1].character_name_, aggro_value_info[0].aggro_value_); // g_pSunRenderer->x_pManagerTextOut->DrawText(lpszText, x, y, WzColor_RGB(255, 192, 0)); // y += Line; // } // else if (remain_count == 2)// 2 // { // Snprintf(lpszText, 256-1, filed_string[gap_count-1], // aggro_value_info[index-2].character_name_, aggro_value_info[index-2].aggro_value_, // aggro_value_info[index-1].character_name_, aggro_value_info[index-1].aggro_value_); // g_pSunRenderer->x_pManagerTextOut->DrawText(lpszText, x, y, WzColor_RGB(255, 192, 0)); // y += Line; // } //} //else //{ // Snprintf( lpszText, 256-1, _T("Aggro: ")); // g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB(255, 192, 0)); // y += Line; //} if (pChar->GetObjectKey() != pre_object_key) {// pre_object_key = pChar->GetObjectKey(); TCHAR string_result[MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH] = {0,}; sprintf(string_result, "aggrodisplay %u", pre_object_key); 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, string_result, MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } } ////////////////////////////////////////////////////////////////////////// } #endif //#ifdef _DEV_VER } void BattleScene::_renderDbgInfoKeyQueueNum(int& x, int& y) { #ifdef _DEV_VER TCHAR lpszText[256] = {0,}; Snprintf( lpszText, 256-1, _T("Current key Queue Num : %d"),g_KeyQueueManager.Size()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; #endif //#ifdef _DEV_VER } void BattleScene::_renderDbgInfoSkillQueueNum(int& x, int& y) { #ifdef _DEV_VER TCHAR lpszText[256] = {0,}; Snprintf( lpszText, 256-1, _T("Current skill Queue Num : %d"),g_HeroInput.GetSkillQueueSize()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; #endif //#ifdef _DEV_VER } void BattleScene::_renderDbgInfoCameraSpring(int& x, int& y) { #ifdef _DEV_VER TCHAR message[256] = {0,}; Snprintf(message, 256-1, _T("ī޶⺻:1.3 \n\nī޶ ġ:%f "), g_Camera.CameraHeight()); g_pSunRenderer->x_pManagerTextOut->DrawText( message, x, y, WzColor_RGB(0, 255, 0)); y += 100; Snprintf(message, 256-1, _T("SPRING_CONST:%f\nDAMP_CONST:%f\nSPRING_LEN:%f"), g_Camera.GetSpringConst(), g_Camera.GetDampConst(), g_Camera.GetSpringLen()); g_pSunRenderer->x_pManagerTextOut->DrawText(message, x, y, WzColor_RGB( 255, 0, 0 )); y += 20; #endif //#ifdef _DEV_VER } //------------------------------------------------------------------------------ /** */ void BattleScene::_renderDbgInfoHeroStatus(int& x, int& y) { #ifdef _DEV_VER if (!g_pHero) return; if (!g_pSunTerrain) return; TCHAR lpszText[512] = {0,}; WzVector vPos = g_pHero->GetVisiblePos(); g_pSunTerrain->PathExp_Reset(g_pPathExplorer,&vPos, -1); Snprintf( lpszText, 512-1, _T("Current Tile : %d[%d] Convex: [%d]") , g_pHero->GetPathExplorer()->GetTile() ,g_pPathExplorer->GetTile() ,g_pSunTerrain->x_pPathFinder->GetConvexOfTile(g_pPathExplorer->GetTile())); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Current Pos : x : %f y: %f z : %f"), vPos.x,vPos.y,vPos.z ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; PLAYER_ACTION curact = *g_pHero->GetCurrentAction(); PLAYER_ACTION queueact = g_HeroInput.GetQueueAction(); Snprintf( lpszText, 512-1, _T("Current Action : %s") , GetActionString(&curact) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Queue Action : %s") , GetActionString(&queueact) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Remain Attack Result : %d") , g_pHero->GetAttackResultListSize()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; #ifdef _NA_000000_20120410_SPEEDHACK #ifdef _NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER float move_speed_modifier = g_pHero->GetMoveSpeedModifier(); #else //_NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER float move_speed_modifier = 0.0f; if (g_pHero->IsRiding() || g_pHero->m_bCustomMoveSpeed) { move_speed_modifier = g_pHero->GetMoveSpeedModifier(); } else { HeroAttributes* const hero_attr = (HeroAttributes*)(g_pHero->GetPlayerAttribute()); move_speed_modifier = hero_attr->move_speed_modifier_; } #endif //_NA_000000_20131022_RECIEVE_SPEED_FROM_SERVER float fMoveSpeed = g_pHero->move_speed_; Snprintf( lpszText, 512-1, _T("Current Move Speed : %f(%f(%f), %f)") , fMoveSpeed * move_speed_modifier, fMoveSpeed, g_pHero->Character::GetMoveSpeed(), move_speed_modifier); #else float fMoveSpeed = g_pHero->GetMoveSpeed() * g_pHero->GetMoveSpeedModifier() ; Snprintf( lpszText, 512-1, _T("Current Move Speed : %f") , fMoveSpeed ); #endif //_NA_000000_20120410_SPEEDHACK g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; float fDistance=10.0f; if(fMoveSpeed) { fDistance=min(10.f,500.0f*fMoveSpeed); } Snprintf( lpszText, 512-1, _T("MoveDistance: %f") , fDistance ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Fighting Energy : %d") , g_pHero->GetFightingEnergy()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; int iMaxTile[64]; ZeroMemory(iMaxTile,sizeof(iMaxTile)); if (g_pHero->GetPathExplorer()->IsMoving()) { int iRouteNum = g_pHero->GetPathExplorer()->GetTileRoute(iMaxTile); if (iRouteNum > 0) { TCHAR szTile[32] = {0,}; int iVisibleRouteNum = iRouteNum; // 10 ش. if (iVisibleRouteNum > 10) { iVisibleRouteNum = 10; } ZeroMemory(lpszText,sizeof(lpszText)); Snprintf(szTile, 32-1, _T("Route Count(%d) "), iRouteNum); _tcscat(lpszText,szTile); for (int a = 0; a < iVisibleRouteNum; a++) { ZeroMemory(szTile,sizeof(szTile)); Snprintf(szTile, 32-1, _T("[%d] "), iMaxTile[a]); _tcscat(lpszText,szTile); } g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; } } Snprintf( lpszText, 512-1, _T("TempVariable : %d %d %d"), g_TempVariable[0], g_TempVariable[1], g_TempVariable[2]); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; int iCurTile = g_pHero->GetPathExplorer()->GetTile(); int iNearNode[3]; if(iCurTile>=0) g_pSunTerrain->x_pPathFinder->GetNearNodes(iCurTile , iNearNode , 3); Snprintf( lpszText, 512-1, _T("NearNodes : %d %d %d"), iNearNode[0], iNearNode[1], iNearNode[2]); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Picked Tile : %d (%f %f %f)") , g_HeroInput.GetPickedTileIndex() , g_HeroInput.GetPickedPosition().x , g_HeroInput.GetPickedPosition().y , g_HeroInput.GetPickedPosition().z); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 512-1, _T("Exp : %ld / %ld"), g_pHero->GetExp(), g_pHero->GetNextExp()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; ////////////////////////////////////////////////////////////////////////// if(g_pHero && g_pHero->IsPetReturn()) { Pet* pPet = (Pet*)g_ObjectManager.GetObject(g_pHero->GetPetObjectKey()); if(pPet) { WzColor ColTemp = pPet->GetColor(); Snprintf( lpszText, 512-1, _T("Pet Color : %x"),pPet->GetColor() ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; } else { Snprintf( lpszText, 512-1, "pPet == NULL" ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; } } else { Snprintf( lpszText, 512-1, "ȯX" ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; } ////////////////////////////////////////////////////////////////////////// WzVector vNormal =g_pHero->GetNormal(); WzVector vUp={0.f,0.f,1.f}; float fAngle = n_rad2deg( acosf( VectorDotProduct( &vNormal, &vUp))); Snprintf( lpszText, 512-1, "븻: %f", fAngle); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; float fCameraAngle = g_Camera.GetAngle(); float fHeroAngle = g_pHero->GetAngle(); Snprintf( lpszText, 512-1, "ī޶(%f) ΰ(%f)", fCameraAngle,fHeroAngle); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; DWORD load_time = DelayLoadManager::Instance()->delay_time(kLoadDelay); DWORD process_time = DelayLoadManager::Instance()->delay_time(kProcessDelay); DWORD quick_load_count = g_pSunRenderer->x_pManagerMultiLoader->GetNumberOfLoadObject(QUEUE_TYPE_QUICK); DWORD normal_load_count = g_pSunRenderer->x_pManagerMultiLoader->GetNumberOfLoadObject(QUEUE_TYPE_NORMAL); Snprintf(lpszText, 512-1, "Ƽ-QuickLoad:%d NormalLoad:%d", quick_load_count, normal_load_count); g_pSunRenderer->x_pManagerTextOut->DrawText(lpszText, x, y, WzColor_RGB(0, 255,0)); y += 20; DWORD refresh_count = DelayLoadManager::Instance()->size(); Snprintf(lpszText, 512-1, "εҰ(%d)-load:%d process:%d", refresh_count, load_time, process_time); g_pSunRenderer->x_pManagerTextOut->DrawText(lpszText, x, y, WzColor_RGB(0, 255,0)); y += 20; ////////////////////////////////////////////////////////////////////////// #endif //#ifdef _DEV_VER } void BattleScene::_renderDbgInfoResourceStatus(int& x, int& y) { #ifdef _DEV_VER TCHAR lpszText[256] = {0,}; Snprintf( lpszText, 256-1, _T("Player Count : %d"), g_ObjectManager.GetObjectCount(PLAYER_OBJECT) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("Monster Count : %d"), g_ObjectManager.GetObjectCount(MONSTER_OBJECT) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("Item Count : %d"), g_ObjectManager.GetObjectCount(ITEM_OBJECT) ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("Loaded Resource Count : %d"), ResourceManager::Instance()->GetLoadedResourceCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("Wait For Free Resource Count : %d"), ResourceManager::Instance()->GetWaitForFreeResourceCount()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("ObjectManager.size = %d"), g_ObjectManager.GetAllObjectCnt()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; #endif //#ifdef _DEV_VER } //------------------------------------------------------------------------------ void BattleScene::_renderDbgInfoSound(int& x, int& y) { #ifdef _DEV_VER if(NULL == g_pMap) return; // FPS DWORD dwTick; DWORD dwTicks2; DWORD dwTick3; LONG lCount, lPpsCount, lDcpsCount; g_pSunRenderer->GetFpsValues( &dwTick, &lCount ); float fFps = ( float )lCount * 1000.0f / ( float )dwTick; g_pSunRenderer->GetPpsValues( &dwTicks2, &lPpsCount); g_pSunRenderer->GetDcpsValues( &dwTick3, &lDcpsCount); LONG lPolygon = lCount > 0 ? lPpsCount / lCount : 0; LONG lDrawCall = lCount > 0 ? lDcpsCount / lCount : 0; TCHAR lpszText[512] = {0,}; Snprintf( lpszText, 512-1, _T(" %f fps (%ld polygons, %ld drawcalls)"), fFps, lPolygon, lDrawCall); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; //if (wzsnd_cache_is()) { Snprintf( lpszText, 256-1, _T("wzsnd_cache_is = %s"), wzsnd_cache_is() ? "TRUE" : "FALSE" ); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("wzsnd_cache_size = %d"), wzsnd_cache_size()); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("wzsnd_cache_maintain_min = %d"), wzsnd_cache_maintain_milliseconds_get() / 1000 / 60); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("calltick_cache sec = %d"), Sound::Instance()->calltick_cache() / 1000); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; Snprintf( lpszText, 256-1, _T("calltick_updatelistener sec = %d"), Sound::Instance()->calltick_updatelistener() / 1000); g_pSunRenderer->x_pManagerTextOut->DrawText( lpszText, x, y, WzColor_RGB( 0x0F, 255, 0x0f ) ); y += 20; } #endif //#ifdef _DEV_VER } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void BattleScene::_renderDbgInfoAutobot(int& x, int& y) { #ifdef _DEV_VER #ifdef _YMS_AUTOBOT_GAME Autobot::Instance()->Render_DebugInfo(); #endif //_YMS_AUTOBOT_GAME #endif //#ifdef _DEV_VER } void BattleScene::AddAttackResultQueueAction( cAttackResultData& ResultData, DWORD dwTimeSerial, DWORD dwAttackId ) { Character* pTarget = (Character*)g_ObjectManager.GetObject(ResultData.GetTargetObjectKey()); if( pTarget == NULL ) { return; } if( pTarget->IsKindOfObject(MONSTER_OBJECT) == TRUE ) { Monster* pMon = (Monster*)pTarget; if(MONSTER_TYPE_SETTING_MAPOBJECT == pMon->GetMonsterType()) return; } if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_DOWN ) && ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK ) ) { pTarget->SetKnockBackDown( ResultData.GetCurrentPosition().wvPos, ResultData.GetDestPosition().wvPos, ResultData.GetEndDownTime() ); return; } // , ٿ, ǥ ʴ ֵ , if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_STUN ) || ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_FREEZE ) ) { pTarget->SetStun( ResultData.GetCurrentPosition().wvPos ); } if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_DOWN) ) // { pTarget->SetDown( ResultData.GetEndDownTime() ); } if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_AIR) ) { if(!pTarget->CannotAir()) { PLAYER_ACTION action; action.ActionID = ACTION_TOAIR; action.dwTimeSerial =dwTimeSerial; action.TOAIR.fDownForceLimit = -40.0f; action.TOAIR.fGravity = 70.0f; action.TOAIR.fUpperForce = 50.0; action.TOAIR.bForceDown=TRUE; action.TOAIR.fHeightLimit = 3.4f; action.TOAIR.dwAirTime = ResultData.GetAirTime(); action.TOAIR.dwGetupTime = ResultData.GetGetUpTime(); pTarget->PutAction(&action); pTarget->SetLatestQueueAttack(dwTimeSerial); } } // ǥ ̵۰ ڿ Ѵ if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK2) ) { pTarget->SetKnockBack2( ResultData.GetCurrentPosition().wvPos, ResultData.GetDestPosition().wvPos ); } if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK3) ) { pTarget->SetKnockBack3( ResultData.GetCurrentPosition().wvPos, ResultData.GetDestPosition().wvPos ); } // о if( ResultData.CheckAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK) ) { pTarget->SetKnockBack( ResultData.GetCurrentPosition().wvPos, ResultData.GetDestPosition().wvPos ); } } BOOL BattleScene::PreInterfaceRender(DWORD dwTick) { g_InterfaceManager.PreRenderInterfaceManager(dwTick ); return TRUE; } BOOL BattleScene::PostInterfaceRender(DWORD dwTick) { #ifdef _DEV_VER _renderDbgText(dwTick); #endif m_EventText.RenderEventScript(); #ifdef _JBH_ADD_AGE_LIMIT_MARK RenderGameRatingMark(); #endif //_JBH_ADD_AGE_LIMIT_MARK g_InterfaceManager.UpdateRenderTarget(); #ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING g_InterfaceManager.RenderToDiceTexture(); #endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING return TRUE; } void BattleScene::AddSplitDamageResult( Character* character, ATTACK_RESULT* attack_result, int hit_count ) { int group_id = 1; ATTACK_RESULT temp; temp = *attack_result; // copy temp.SetGroupID(group_id); assert(hit_count>1); // ûϸ ׳ ׾¡ DWORD damage_per_count = attack_result->GetTargetData().GetDamage() / hit_count; for (int b = 0; b < hit_count - 1; b++ ) { temp.GetTargetData().SetDamage( damage_per_count ); temp.GetTargetData().SetTargetHP( attack_result->GetTargetData().GetTargetHP() + attack_result->GetTargetData().GetDamage() - (b*damage_per_count) ); character->AddAttackResult(&temp); ++group_id; temp.SetGroupID(group_id); } // Ÿ ̴. temp.GetTargetData().SetDamage( attack_result->GetTargetData().GetDamage() - (damage_per_count*(hit_count-1))); temp.GetTargetData().SetTargetHP( attack_result->GetTargetData().GetTargetHP() ); character->AddAttackResult(&temp); } void BattleScene::QueueSkillAction(PLAYER_ACTION *pAction,Character *pChar) { assert(pChar); if(!pChar) return; if (GENERALPARAM->IsServerDebug()) { pChar->DoAction(pAction); pChar->CommitChangeState(g_CurTime); } else { pChar->PutAction(pAction); } } // Ŭ̾Ʈ ܰ  ǥϴ ų ´ bool BattleScene::GetSplitHitCount( SLOTCODE skill_class_code, int& hit_count ) { switch( skill_class_code ) { //2Ÿ //case eSKILL_MYSTIC_904: // ö׺ case eSKILL_FIRE_DESTROYER_DOUBLE_HEAD: #ifdef _NA_006679_20130423_1302_SKILL_RENEWAL #else case eSKILL_FILL_OFF: #endif // _NA_006679_20130423_1302_SKILL_RENEWAL case eSKILL_HEAVY_WHISTLE_SHOT: case eSKILL_DOUBLE_SPINKICK: case eSKILL_BLADE_FURY: //case eSKILL_ARCANE_BLADE: #ifdef _NA_007294_20140613_DRAGONKNIGHT_RENEWAL #else case eSKILL_FIST_OF_FIRE: #endif //_NA_007294_20140613_DRAGONKNIGHT_RENEWAL case eSKILL_FELLEN_WARRIOR_XDANCE: #ifdef _NA_008732_20160315_WITCHBLADE_BALANCE_ADJUST case eSKILL_WITCHBLADE_1104: // ƮƮ÷ű case eSKILL_WITCHBLADE_1106: // Ͻũġ case eSKILL_WITCHBLADE_1108: // case eSKILL_WITCHBLADE_1109: // 巡 case eSKILL_WITCHBLADE_1110: // Ǵ case eSKILL_WITCHBLADE_1118: // ũν޺̼ #endif // _NA_008732_20160315_WITCHBLADE_BALANCE_ADJUST { hit_count = 2; } break; // 3Ÿ case eSKILL_DARK_KNIGHT_DARK_SWORD: case eSKILL_BLOOD_RAIN: case eSKILL_TRIPLE_PIERCE: case eSKILL_FIRE_FILA: case eSKILL_REDAMOR_WARRIOR_SPIN_CRUSH: case eSKILL_DARK_F_INFANTRY_BASH: case eSKILL_HEAVY_NOIZE_SHOT: case eSKILL_DARK_SWORDMAN_TRIPLE_ATTACK: { hit_count = 3; } break; //4Ÿ: case eSKILL_DARKNESS_OBSERVER_WHEEL_ATTACK: case eSKILL_POISON_RAIN: case eSKILL_SWORDDANCING: case eSKILL_LIGHTING_WAVE: case eSKILL_FLAME_RULER_EXPLORZEN_KNOCKLE: case eSKILL_EVIL_SORCERER_PRESSING_WALL: case eSKILL_CHASE_SHOT: #ifdef _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN #else case eSKILL_AIRBLOW: #endif // _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN { hit_count = 4; } break; //5Ÿ case eSKILL_SACRED_FIRE: case eSKILL_ILLUSION_DANCE: case eSKILL_DARK_SLASH: { hit_count = 5; } break; //6Ÿ case eSKILL_FAST_SHOT: { hit_count = 6; } break; case eSKILL_MYSTIC_909: // 佺Ʈο { hit_count = 6; } break; //10Ÿ case eSKILL_SPINING_WAVE: case eSKILL_WILD_SHOT: { hit_count = 10; } break; //15Ÿ case eSKILL_EVIL_SORCERER_FIRE_BALL: { hit_count = 15; } break; default: // ʴ´ return false; } return true; } #ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM void BattleScene::AddSkillResult( Character* pChr, SkillFacade::ResultData* result_data, const time_t& server_time ) { SkillScriptInfo* skill_info = result_data->GetSkillScriptInfo(); assert(skill_info && "Ҽ ų Դϴ"); assert(result_data->GetTargetResultCount() < MAX_TARGET_NUM); //#ifdef _MILKY_DEBUG // // ڵ Ÿ ʱȭ // if( g_pHero != NULL && pChr != NULL ) // { // GlobalFunc::ProcessChatMessage( "//Ÿ" ); // } //#endif #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, "[%s(%d, %d), %d]", skill_info->m_szSkillName, skill_info->m_SkillClassCode, skill_info->m_SkillCode, result_data->GetTargetResultCount() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFFFFFF ); } #endif if ( result_data->GetTargetResultCount() == 0) //ڽ ų Ÿ . { return; } int targetcount = 0; int iResultSize = 0; cAttackResultData TargetInfo[MAX_TARGET_NUM]; //ATTACK_RESULT_TARGET_INFO TargetInfo[MAX_TARGET_NUM]; ATTACK_RESULT attackresult; DWORD projectileId = NONE_ID; DWORD mainTargetIndex = NONE_ID; eWEAPONSOUNDKIND eSoundKind; if (pChr->IsKindOfObject(PLAYER_OBJECT)) { Player * pPlayer = (Player *)pChr; eSoundKind = GameFunc::GetWeaponSoundKind((eWEAPONTYPE)pPlayer->GetWeaponKind()); } else { eSoundKind = (eWEAPONSOUNDKIND)0; } // Ÿ ŭ Ÿ . for (int a = 0; a < result_data->GetTargetResultCount(); a++) { SkillFacade::TargetResult* target_result = result_data->GetTargetResult(a); if( target_result == NULL ) continue; // н Character* pTarget = (Character*)g_ObjectManager.GetObject( target_result->GetTargetKey() ); if( pTarget == NULL ) continue; #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, " [%d] [%s] [%d]", a+1, pTarget->GetName(), pTarget->GetObjectKey() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFFFFFF ); } #endif ZeroMemory(&attackresult,sizeof(attackresult)); attackresult.SetSkillCode( result_data->GetSkillCode() ); attackresult.SetAttackSerial( result_data->GetClientSerial() ); attackresult.SetTimeSerial( GetBattleTimeSerial() ); attackresult.SetWeaponSound( eSoundKind ); ////////////////////////////////////////////////////////////////////////// // AddTargetResultInfo κ attackresult.GetTargetData().SetTargetObjectKey( target_result->GetTargetKey() ); attackresult.GetTargetData().SetAdditionalEffect( ConvertServerToClientEffect( target_result->GetSkillEffect() ));//Ŭ̾Ʈ ȯ attackresult.GetTargetData().SetNoDamage(TRUE);// Ability FALSE Ѵ. attackresult.GetTargetData().SetPosition( pTarget->GetPosition(), pTarget->GetPosition() ); // ųƮ ó if( pTarget != pChr ) { SkillEffectFunc::CreateReceiverSkillEffect(result_data->GetSkillCode(), a, pTarget, pChr ); } // Ƽ (, , ..) int hit_count = 0; for ( size_t i=0;i!=target_result->GetResultCount();++i) { SKILL_RESULT_CODE* result_code = target_result->GetResultCode(i); BASE_ABILITYINFO* pAbilityInfo = target_result->GetResultAbillityInfo(i); if( result_code == NULL || pAbilityInfo == NULL ) continue; //attackresult.GetTargetData().Init(); AddAbilityResult( pChr, pTarget, result_data->GetSkillCode(), result_code, attackresult.GetTargetData() ); //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM TCHAR result_string[INTERFACE_STRING_LENGTH] = {0, }; //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM // if( pAbilityInfo->m_wAbilityID == eABILITY_DAMAGE ) { #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, " [DAMAGE : %d]", attackresult.GetTargetData().GetDamage() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF88A7 ); } #endif //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM if (pTarget->IsMyHero()) { bool is_critical = attackresult.GetTargetData().CheckAdditionalEffect(ATTACK_ADDITIONAL_EFFECT_CRITICAL) ? true : false; TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { if (pChr->GetObjectType() == MONSTER_OBJECT && pSkillInfo->m_dwSkillNcode == 0) { // 2080 : ų g_InterfaceManager.GetInterfaceString(2080, skill_name); } else { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); } GlobalFunc::WriteCombatRecord(eCRK_DAMAGE_BY, attackresult.GetTargetData().GetDamage(), pChr, skill_name, server_time, is_critical); } else { GlobalFunc::WriteCombatRecord(eCRK_DAMAGE_BY, attackresult.GetTargetData().GetDamage(), pChr, "", server_time, is_critical); } } else if (pChr->IsMyHero()) { bool is_critical = attackresult.GetTargetData().CheckAdditionalEffect(ATTACK_ADDITIONAL_EFFECT_CRITICAL) ? true : false; TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); GlobalFunc::WriteCombatRecord(eCRK_DAMAGE_TO, attackresult.GetTargetData().GetDamage(), pTarget, skill_name, server_time, is_critical); } else { GlobalFunc::WriteCombatRecord(eCRK_DAMAGE_TO, attackresult.GetTargetData().GetDamage(), pTarget, "", server_time, is_critical); } } //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM if( GetSplitHitCount( skill_info->m_SkillClassCode, hit_count ) == true ) { // Ŭ󿡼 AddSplitDamageResult( pChr, &attackresult, hit_count ); } else { attackresult.SetGroupID(hit_count + 1 ); pChr->AddAttackResult( &attackresult ); ++hit_count; } // ´ ΰ̸ Ÿ if( g_pHero && ( pTarget->GetObjectKey() == g_pHero->GetObjectKey() ) && attackresult.GetTargetData().IsNoDamage() == FALSE ) { // ΰ Ÿ ʴٸ if( g_HeroInput.GetCurrentTarget() == 0 ) { g_HeroInput.SetCurrentTarget( pChr->GetObjectKey() ); } } } else if( pAbilityInfo->m_wAbilityID == eABILITY_CUR_HP_INCREASE ) { #ifdef _DEV_VER TCHAR message[1024]; wsprintf(message, " [ABILITY : %d] [PARAM: %d, %d, %d, %d]", pAbilityInfo->m_wAbilityID, pAbilityInfo->m_iParam[0], pAbilityInfo->m_iParam[1], pAbilityInfo->m_iParam[2], pAbilityInfo->m_iParam[3] ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF7050 ); #endif bool Is_monster = false; Player* player_ptr = NULL; if (pChr->GetObjectType() == MONSTER_OBJECT) { Monster* monster_ptr = static_cast (pChr); if (monster_ptr) { DWORD monster_ptr_parent_id = monster_ptr->GetParentId(); if (monster_ptr_parent_id) { Object* object_ptr = NULL; object_ptr = g_ObjectManager.GetObject(monster_ptr->GetParentId() ); if (object_ptr) { if (object_ptr->GetObjectType() == PLAYER_OBJECT) { player_ptr = static_cast (object_ptr); } } if (player_ptr) { Is_monster = player_ptr->GetObjectKey() == g_pHero->GetObjectKey(); } } } } if(g_pHero && ( pTarget->GetObjectKey() == g_pHero->GetObjectKey() ) && (pChr->GetObjectKey() == g_pHero->GetObjectKey() || Is_monster == true )) { // ǹ g_pHero Ÿ ǰ ٸ̰ //ٸ Ŭ Ƽ ų Ƽ ų ̻ ġ ȴ. attackresult.GetTargetData().SetHeal( TRUE ); attackresult.GetTargetData().SetNoDamage( FALSE ); PlayerAttributes* player_attributes = g_pHero->GetPlayerAttribute(); int skill_percent_damage = player_attributes->GetSkillPercentDamage(); if (skill_percent_damage > 0) { int iTempAbility = pAbilityInfo->m_iParam[1]; iTempAbility = int(iTempAbility * (skill_percent_damage / 100.0f)); attackresult.GetTargetData().SetDamage(pAbilityInfo->m_iParam[1] + iTempAbility); //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM if (pTarget->IsMyHero()) { TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); } TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { if (pSkillInfo->m_dwSkillNcode == 0) { // 2075 : ߰ȿ g_InterfaceManager.GetInterfaceString(2075, skill_name); } else { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); } if (_tcslen(state_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, pAbilityInfo->m_iParam[1] + iTempAbility, pChr, result_string, server_time); } } else { if (_tcslen(state_name) > 0) { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, pAbilityInfo->m_iParam[1] + iTempAbility, pChr, state_name, server_time); } } } else if (pChr->IsMyHero()) { TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); } TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); if (_tcslen(state_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, pAbilityInfo->m_iParam[1] + iTempAbility, pTarget, result_string, server_time); } } else { if (_tcslen(state_name) > 0) { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, pAbilityInfo->m_iParam[1] + iTempAbility, pTarget, state_name, server_time); } } } //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM } else { attackresult.GetTargetData().SetDamage(pAbilityInfo->m_iParam[1]); //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); } if (pTarget->IsMyHero()) { TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { if (pSkillInfo->m_dwSkillNcode == 0) { // 2075 : ߰ȿ g_InterfaceManager.GetInterfaceString(2075, skill_name); } else { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); } if (_tcslen(state_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, pAbilityInfo->m_iParam[1], pChr, result_string, server_time); } } else { if (_tcslen(state_name) > 0) { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, pAbilityInfo->m_iParam[1], pChr, state_name, server_time); } } } else if (pChr->IsMyHero()) { TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); } TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); if (_tcslen(state_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, pAbilityInfo->m_iParam[1], pTarget, result_string, server_time); } } else { if (_tcslen(state_name) > 0) { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, pAbilityInfo->m_iParam[1], pTarget, state_name, server_time); } } } //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM } pChr->AddAttackResult( &attackresult ); } //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM else if (pTarget->IsMyHero()) { TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { if (pSkillInfo->m_dwSkillNcode == 0) { // 2075 : ߰ȿ g_InterfaceManager.GetInterfaceString(2075, skill_name); } else { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); } } TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); if (_tcslen(skill_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, attackresult.GetTargetData().GetDamage(), pChr, result_string, server_time); } else { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, attackresult.GetTargetData().GetDamage(), pChr, state_name, server_time); } } } //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM } else { #ifdef _DEV_VER TCHAR message[1024]; wsprintf(message, " [ABILITY : %d] [PARAM: %d, %d, %d, %d]", pAbilityInfo->m_wAbilityID, pAbilityInfo->m_iParam[0], pAbilityInfo->m_iParam[1], pAbilityInfo->m_iParam[2], pAbilityInfo->m_iParam[3] ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF8432 ); #endif //#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM TCHAR skill_name[INTERFACE_STRING_LENGTH] = {0, }; SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(attackresult.GetSkillCode()); if (pSkillInfo) { if (pSkillInfo->m_dwSkillNcode == 0) { // 2075 : ߰ȿ g_InterfaceManager.GetInterfaceString(2075, skill_name); } else { g_InterfaceManager.GetInterfaceString(pSkillInfo->m_dwSkillNcode, skill_name); } } if (pTarget->IsMyHero()) { TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); if (_tcslen(skill_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, attackresult.GetTargetData().GetDamage(), pChr, result_string, server_time); } else { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_BY, attackresult.GetTargetData().GetDamage(), pChr, state_name, server_time); } } } else if (pChr->IsMyHero()) { TCHAR state_name[INTERFACE_STRING_LENGTH] = {0, }; BASE_STATEINFO* state_info = StateInfoParser::Instance()->GetStateInfo(pAbilityInfo->m_wStateID); if (state_info) { g_InterfaceManager.GetInterfaceString(state_info->m_dwNamecode, state_name); if (_tcslen(skill_name) > 0) { Snprintf(result_string, INTERFACE_STRING_LENGTH-1, _T("%s, %s"), skill_name, state_name); GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, attackresult.GetTargetData().GetDamage(), pTarget, result_string, server_time); } else { GlobalFunc::WriteCombatRecord(eCRK_ABILITY_TO, attackresult.GetTargetData().GetDamage(), pTarget, state_name, server_time); } } } //#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM } } AddAttackResultQueueAction( attackresult.GetTargetData(), GetBattleTimeSerial(), pChr->GetObjectKey() ); #ifdef _KST_DISPLAY_SKILL_RESULT_MESSAGE char temp[1024]; wsprintf( temp, "AddAttackResult : AbillityCount[%d] HitCount[%d]", target_result->GetResultCount(), hit_count ); GlobalFunc::OutputMsg_SysMsg( temp ); #endif if( hit_count < 2 ) { //! Ÿó ° ƴϸ óѴ //! ũ ° ֱ⶧ Ŭ̾Ʈ ó //! skill.info.txt :: FlyingObjectCode ʵ带 ؼ Ŷ ʰ . //! MSGSUB_SKILL_PERIODIC_DAMAGE_BRD ֱ °͵ ó(߻ü ) if (g_SkillStateFactory.GetResultProcessingType(result_data->GetSkillCode()) == SkillStateFactory::kProcessing_PacketRecvImmediate) { pChr->ProcessAttackResult(pChr->GetCurrentAttackSerial(), FALSE); } } ////////////////////////////////////////////////////////////////////////// TargetInfo[a] = attackresult.GetTargetData(); if( result_data->GetPrimaryTargetKey() == TargetInfo[a].GetTargetObjectKey() ) { mainTargetIndex = a; //Ÿ ε } if (GENERALPARAM->GetSpecialMode()) { if (g_pHero && (g_pHero->GetObjectKey() == TargetInfo[a].GetTargetObjectKey())) { if (TargetInfo[a].GetTargetHP() == 0) { TCHAR szString[256]; Sprintf(szString,_T("÷̾ %d ų "),result_data->GetSkillCode()); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT,szString); } } } // 󿡰Լ Ʈ if( skill_info->m_SkillClassCode == eSKILL_VITAL_SUCTION ) { WzVector StartPosition = pTarget->GetArrowTargetPos(); WzVector ControlPosition = StartPosition; ControlPosition.z += 3.0f; cProjectileBezierUnit* pProjectile = new cProjectileBezierUnit(); pProjectile->SetLifeTime(800); pProjectile->SetBezierCourseSingleControl( StartPosition, ControlPosition, pChr->GetObjectKey() ); pProjectile->CreateEffect( StrToWzID("K797"), pChr->GetObjectKey(), pTarget->GetObjectKey() ); pProjectile->SetHitData( pChr->GetObjectKey(), 0, StrToWzID("K798"), FALSE, 0, FALSE ); g_ProjectileManagerEx.InsertProjectile( pProjectile ); } } // ׸ϰ ٷ ó. if (GENERALPARAM->IsServerDebug()) { pChr->ProcessAttackResult( result_data->GetClientSerial(), TRUE);//true϶ ø ´ } // AttackSerial ʰ ̸ ٷ óع. // ų ʰ ´! if ( result_data->GetClientSerial() < pChr->GetNextAttackSerial() ) { pChr->ProcessAttackResult(result_data->GetClientSerial(), TRUE);//true϶ ø ´ } } #else void BattleScene::AddSkillResult( Character* pChr, SkillFacade::ResultData* result_data ) { SkillScriptInfo* skill_info = result_data->GetSkillScriptInfo(); assert(skill_info && "Ҽ ų Դϴ"); assert(result_data->GetTargetResultCount() < MAX_TARGET_NUM); //#ifdef _MILKY_DEBUG // // ڵ Ÿ ʱȭ // if( g_pHero != NULL && pChr != NULL ) // { // GlobalFunc::ProcessChatMessage( "//Ÿ" ); // } //#endif #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, "[%s(%d, %d), %d]", skill_info->m_szSkillName, skill_info->m_SkillClassCode, skill_info->m_SkillCode, result_data->GetTargetResultCount() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFFFFFF ); } #endif if ( result_data->GetTargetResultCount() == 0) //ڽ ų Ÿ . { return; } int targetcount = 0; int iResultSize = 0; cAttackResultData TargetInfo[MAX_TARGET_NUM]; //ATTACK_RESULT_TARGET_INFO TargetInfo[MAX_TARGET_NUM]; ATTACK_RESULT attackresult; DWORD projectileId = NONE_ID; DWORD mainTargetIndex = NONE_ID; eWEAPONSOUNDKIND eSoundKind; if (pChr->IsKindOfObject(PLAYER_OBJECT)) { Player * pPlayer = (Player *)pChr; eSoundKind = GameFunc::GetWeaponSoundKind((eWEAPONTYPE)pPlayer->GetWeaponKind()); } else { eSoundKind = (eWEAPONSOUNDKIND)0; } // Ÿ ŭ Ÿ . for (int a = 0; a < result_data->GetTargetResultCount(); a++) { SkillFacade::TargetResult* target_result = result_data->GetTargetResult(a); if( target_result == NULL ) continue; // н Character* pTarget = (Character*)g_ObjectManager.GetObject( target_result->GetTargetKey() ); if( pTarget == NULL ) continue; #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, " [%d] [%s] [%d]", a+1, pTarget->GetName(), pTarget->GetObjectKey() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFFFFFF ); } #endif ZeroMemory(&attackresult,sizeof(attackresult)); attackresult.SetSkillCode( result_data->GetSkillCode() ); attackresult.SetAttackSerial( result_data->GetClientSerial() ); attackresult.SetTimeSerial( GetBattleTimeSerial() ); attackresult.SetWeaponSound( eSoundKind ); ////////////////////////////////////////////////////////////////////////// // AddTargetResultInfo κ attackresult.GetTargetData().SetTargetObjectKey( target_result->GetTargetKey() ); attackresult.GetTargetData().SetAdditionalEffect( ConvertServerToClientEffect( target_result->GetSkillEffect() ));//Ŭ̾Ʈ ȯ attackresult.GetTargetData().SetNoDamage(TRUE);// Ability FALSE Ѵ. attackresult.GetTargetData().SetPosition( pTarget->GetPosition(), pTarget->GetPosition() ); // ųƮ ó if( pTarget != pChr ) { SkillEffectFunc::CreateReceiverSkillEffect(result_data->GetSkillCode(), a, pTarget, pChr ); } // Ƽ (, , ..) int hit_count = 0; for ( size_t i=0;i!=target_result->GetResultCount();++i) { SKILL_RESULT_CODE* result_code = target_result->GetResultCode(i); BASE_ABILITYINFO* pAbilityInfo = target_result->GetResultAbillityInfo(i); if( result_code == NULL || pAbilityInfo == NULL ) continue; //attackresult.GetTargetData().Init(); AddAbilityResult( pChr, pTarget, result_data->GetSkillCode(), result_code, attackresult.GetTargetData() ); // if( pAbilityInfo->m_wAbilityID == eABILITY_DAMAGE ) { #ifdef _DEV_VER { TCHAR message[1024]; wsprintf(message, " [DAMAGE : %d]", attackresult.GetTargetData().GetDamage() ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF88A7 ); } #endif if( GetSplitHitCount( skill_info->m_SkillClassCode, hit_count ) == true ) { // Ŭ󿡼 AddSplitDamageResult( pChr, &attackresult, hit_count ); } else { attackresult.SetGroupID(hit_count + 1 ); pChr->AddAttackResult( &attackresult ); ++hit_count; } // ´ ΰ̸ Ÿ if( g_pHero && ( pTarget->GetObjectKey() == g_pHero->GetObjectKey() ) && attackresult.GetTargetData().IsNoDamage() == FALSE ) { // ΰ Ÿ ʴٸ if( g_HeroInput.GetCurrentTarget() == 0 ) { g_HeroInput.SetCurrentTarget( pChr->GetObjectKey() ); } } } else if( pAbilityInfo->m_wAbilityID == eABILITY_CUR_HP_INCREASE ) { #ifdef _DEV_VER TCHAR message[1024]; wsprintf(message, " [ABILITY : %d] [PARAM: %d, %d, %d, %d]", pAbilityInfo->m_wAbilityID, pAbilityInfo->m_iParam[0], pAbilityInfo->m_iParam[1], pAbilityInfo->m_iParam[2], pAbilityInfo->m_iParam[3] ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF7050 ); #endif bool Is_monster = false; Player* player_ptr = NULL; if (pChr->GetObjectType() == MONSTER_OBJECT) { Monster* monster_ptr = static_cast (pChr); if (monster_ptr) { DWORD monster_ptr_parent_id = monster_ptr->GetParentId(); if (monster_ptr_parent_id) { Object* object_ptr = NULL; object_ptr = g_ObjectManager.GetObject(monster_ptr->GetParentId() ); if (object_ptr) { if (object_ptr->GetObjectType() == PLAYER_OBJECT) { player_ptr = static_cast (object_ptr); } } if (player_ptr) { Is_monster = player_ptr->GetObjectKey() == g_pHero->GetObjectKey(); } } } } if(g_pHero && ( pTarget->GetObjectKey() == g_pHero->GetObjectKey() ) && (pChr->GetObjectKey() == g_pHero->GetObjectKey() || Is_monster == true )) { // ǹ g_pHero Ÿ ǰ ٸ̰ //ٸ Ŭ Ƽ ų Ƽ ų ̻ ġ ȴ. attackresult.GetTargetData().SetHeal( TRUE ); attackresult.GetTargetData().SetNoDamage( FALSE ); PlayerAttributes* player_attributes = g_pHero->GetPlayerAttribute(); int skill_percent_damage = player_attributes->GetSkillPercentDamage(); if (skill_percent_damage > 0) { int iTempAbility = pAbilityInfo->m_iParam[1]; iTempAbility = int(iTempAbility * (skill_percent_damage / 100.0f)); attackresult.GetTargetData().SetDamage(pAbilityInfo->m_iParam[1] + iTempAbility); } else { attackresult.GetTargetData().SetDamage(pAbilityInfo->m_iParam[1]); } pChr->AddAttackResult( &attackresult ); } } else { #ifdef _DEV_VER TCHAR message[1024]; wsprintf(message, " [ABILITY : %d] [PARAM: %d, %d, %d, %d]", pAbilityInfo->m_wAbilityID, pAbilityInfo->m_iParam[0], pAbilityInfo->m_iParam[1], pAbilityInfo->m_iParam[2], pAbilityInfo->m_iParam[3] ); g_InterfaceManager.AddSkillResultMessage( message, 0xFFFF8432 ); #endif } } AddAttackResultQueueAction( attackresult.GetTargetData(), GetBattleTimeSerial(), pChr->GetObjectKey() ); #ifdef _KST_DISPLAY_SKILL_RESULT_MESSAGE char temp[1024]; wsprintf( temp, "AddAttackResult : AbillityCount[%d] HitCount[%d]", target_result->GetResultCount(), hit_count ); GlobalFunc::OutputMsg_SysMsg( temp ); #endif if( hit_count < 2 ) { //! Ÿó ° ƴϸ óѴ //! ũ ° ֱ⶧ Ŭ̾Ʈ ó //! skill.info.txt :: FlyingObjectCode ʵ带 ؼ Ŷ ʰ . //! MSGSUB_SKILL_PERIODIC_DAMAGE_BRD ֱ °͵ ó(߻ü ) if (g_SkillStateFactory.GetResultProcessingType(result_data->GetSkillCode()) == SkillStateFactory::kProcessing_PacketRecvImmediate) { pChr->ProcessAttackResult(pChr->GetCurrentAttackSerial(), FALSE); } } ////////////////////////////////////////////////////////////////////////// TargetInfo[a] = attackresult.GetTargetData(); if( result_data->GetPrimaryTargetKey() == TargetInfo[a].GetTargetObjectKey() ) { mainTargetIndex = a; //Ÿ ε } if (GENERALPARAM->GetSpecialMode()) { if (g_pHero && (g_pHero->GetObjectKey() == TargetInfo[a].GetTargetObjectKey())) { if (TargetInfo[a].GetTargetHP() == 0) { TCHAR szString[256]; Sprintf(szString,_T("÷̾ %d ų "),result_data->GetSkillCode()); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT,szString); } } } // 󿡰Լ Ʈ if( skill_info->m_SkillClassCode == eSKILL_VITAL_SUCTION ) { WzVector StartPosition = pTarget->GetArrowTargetPos(); WzVector ControlPosition = StartPosition; ControlPosition.z += 3.0f; cProjectileBezierUnit* pProjectile = new cProjectileBezierUnit(); pProjectile->SetLifeTime(800); pProjectile->SetBezierCourseSingleControl( StartPosition, ControlPosition, pChr->GetObjectKey() ); pProjectile->CreateEffect( StrToWzID("K797"), pChr->GetObjectKey(), pTarget->GetObjectKey() ); pProjectile->SetHitData( pChr->GetObjectKey(), 0, StrToWzID("K798"), FALSE, 0, FALSE ); g_ProjectileManagerEx.InsertProjectile( pProjectile ); } } // ׸ϰ ٷ ó. if (GENERALPARAM->IsServerDebug()) { pChr->ProcessAttackResult( result_data->GetClientSerial(), TRUE);//true϶ ø ´ } // AttackSerial ʰ ̸ ٷ óع. // ų ʰ ´! if ( result_data->GetClientSerial() < pChr->GetNextAttackSerial() ) { pChr->ProcessAttackResult(result_data->GetClientSerial(), TRUE);//true϶ ø ´ } } #endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM void BattleScene::AddAbilityResult( Character* pChr, Character* pTarget, DWORD dwSkillCode, SKILL_RESULT_CODE* pResultCode, cAttackResultData& ResultData ) { // ABILITY ̻ ش. SkillScriptInfo* pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)dwSkillCode); if ( pSkillInfo == NULL ) return; BASE_ABILITYINFO* pAbilityInfo = pSkillInfo->GetAbilityInfoByIndex((BYTE)pResultCode->m_wAbilityIndex); if( pAbilityInfo == NULL ) return; switch(pAbilityInfo->m_wAbilityID) { #ifdef _NA_20120426_DISPLAY_SKILL_COMBO_ICON_EFFECT case kAbilityActiveComboSkill: { if( pChr == g_pHero ) { int skill_class_code1 = pAbilityInfo->m_iOption1; int skill_class_code2 = pAbilityInfo->m_iOption2; int skill_class_code3 = pAbilityInfo->m_iParam[0]; int skill_class_code4 = pAbilityInfo->m_iParam[1]; DWORD duration = pAbilityInfo->m_iParam[2]; // ð g_pHero->AddActivedComboSkill( skill_class_code1, duration ); g_pHero->AddActivedComboSkill( skill_class_code2, duration ); g_pHero->AddActivedComboSkill( skill_class_code3, duration ); g_pHero->AddActivedComboSkill( skill_class_code4, duration ); } } break; #endif case eABILITY_MONSTER_TRANSFORMATION: { SKILL_RESULT_MONSTER_TRANSFORMATION* pResult = (SKILL_RESULT_MONSTER_TRANSFORMATION *)pResultCode; pTarget->SetFreeMove(FALSE); pTarget->SetHeight(0.0f); DWORD dwCloneKey = g_CloneManager.CreateClone(pTarget); Clone *pClone = g_CloneManager.GetClone(dwCloneKey); if (pClone) { int iR = Red_WzColor(pTarget->GetColor()); int iG = Green_WzColor(pTarget->GetColor()); int iB = Blue_WzColor(pTarget->GetColor()); WzColor color=WzColor_RGBA(iR,iG,iB,255); pClone->SetAlphaBlend(AB_ALPHA); pClone->SetColor(color); pClone->SetLifeTime( 2100 ); pClone->SetDisappear( 2000 ); pClone->SetPlayAni( TRUE ); } PLAYER_ACTION action; ZeroMemory(&action,sizeof(action)); action.ActionID = ACTION_TRANSFORM; action.TRANSFORM.rcCode=pAbilityInfo->m_iOption1; action.TRANSFORM.transFormType=(eTRANSFORM_TYPE)pAbilityInfo->m_iOption1; pTarget->DoAction(&action); pTarget->CommitChangeState(g_CurTime); pTarget->SetHP( pResult->m_dwHP ); pTarget->SetMaxHP(pResult->m_dwMaxHP);//ʱ mp ϶- // Ͱ ŸٵǾִٸ Ǯش. if(pTarget->GetObjectKey() == g_HeroInput.GetCurrentTarget()) { g_HeroInput.SetCurrentTarget(0); } } break; case eABILITY_DAMAGE: { SKILL_RESULT_DAMAGE *pResult = (SKILL_RESULT_DAMAGE *)pResultCode; ResultData.SetTargetHP( pResult->m_dwTargetHP ); ResultData.SetDamage( pResult->m_wDamage ); ResultData.SetNoDamage( FALSE ); #ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO ResultData.SetTargetSD(pResult->target_sd); #endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO if( pResult->m_byEffect & SKILL_EFFECT_ETHERDEVICE_METAL) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_ETHERDEVICE_METAL ); } if( pResult->m_byEffect & SKILL_EFFECT_ETHERDEVICE_ETHER) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_ETHERDEVICE_ETHER ); } if (ResultData.GetDamage() == 0 ) { // SKILL MISS ResultData.SetMiss( TRUE ); #ifdef _KST_DISPLAY_SKILL_RESULT_MESSAGE TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( eST_SKILL_MISS, szMessage, INTERFACE_STRING_LENGTH ); // "ų ϴ." g_InterfaceManager.ShowMessageBox( szMessage, 3000, 0 ); #endif } } break; //ġ ձ case eABILITY_CUR_HP_INCREASE:// HP { if( pAbilityInfo->m_iParam[1] > 0 )//ȸ Ƽ϶ { cTargetPosition Position; Position.SetTargetVisiblePosition( pTarget->GetObjectKey(), TRUE ); if( pSkillInfo->m_SkillClassCode == eSKILL_HEALING_HAND) { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("K410"), 5000, Position ); } else if( pSkillInfo->m_SkillClassCode == eSKILL_HEAL_MAGIC_ARRAY) { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("k420"), 5000, Position ); } else if( pSkillInfo->m_SkillClassCode == eSKILL_NATURAL_FORCE) { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("k430"), 5000, Position ); } else { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("k410"), 5000, Position ); } } } break; // ڽ HPҸ ų ٷ HPMP ش. case eABILITY_EXHAUST_MP: case eABILITY_EXHAUST_HP: { SKILL_RESULT_EXHAUST *pResult = (SKILL_RESULT_EXHAUST *)pResultCode; pTarget->SetHP(pResult->m_dwTargetHP); pTarget->SetMP(pResult->m_dwTargetMP); } break; case eABILITY_STUN_STATUS: { // Ÿƴ STUN SKILL_RESULT_STUN *pResult = (SKILL_RESULT_STUN *)pResultCode; if( pResultCode->m_wStatusCode == eCHAR_STATE_DOWN ) { if( pSkillInfo->m_SkillClassCode != eSKILL_AIRBLOW ) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_DOWN ); #ifdef _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetEndDownTime(pResultCode->m_iStatusTime); #else ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); #endif // _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); } } #ifdef _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN else if ( pResultCode->m_wStatusCode == eCHAR_STATE_UPPERDOWN ) { // ۴ٿ ° ɸ 2.5ʰ . pTarget->SetAirBlowAir( 2500 ); } #endif // _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN else if( pResultCode->m_wStatusCode == eCHAR_STATE_STUN ) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_STUN ); #ifdef _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetEndDownTime( pResultCode->m_iStatusTime ); #else ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); #endif // _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); } else if( pResultCode->m_wStatusCode == eCHAR_STATE_STUN2 ) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_STUN ); #ifdef _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetEndDownTime( pResultCode->m_iStatusTime ); #else ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); #endif // _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); } else if( pResultCode->m_wStatusCode == eCHAR_STATE_FROZEN ) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_FREEZE ); #ifdef _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetEndDownTime( pResultCode->m_iStatusTime ); #else ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); #endif // _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); } else if( pResultCode->m_wStatusCode == eCHAR_STATE_SLEEP ) { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_STUN ); #ifdef _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetEndDownTime( pResultCode->m_iStatusTime ); #else ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); #endif // _NA_008472_20150903_IMPROVED_BALANCE ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); } //else if( pResultCode->m_wStatusCode == eCHAR_STATE_STONE ) //{ // ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_STUN ); // ResultData.SetEndDownTime( pAbilityInfo->m_iParam[2] ); // ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvCurPos ); //} else { WzVector vZeroVector; ZeroMemory(&vZeroVector,sizeof(vZeroVector)); // ٷθ! if (pResult->m_wvCurPos != vZeroVector) { pTarget->OnParalyzed(); pTarget->SetPosition(pResult->m_wvCurPos); } } } break; case eABILITY_RESURRECTION://Ȱ Todo:Mp { SKILL_RESULT_RESURRECTION *pResult = (SKILL_RESULT_RESURRECTION *)pResultCode; pTarget->SetHP(pResult->m_dwTargetHP); pTarget->SetMP(pResult->m_dwTargetMP); pTarget->SetPosition(pResult->m_wvCurPos); cTargetPosition Position; Position.SetTargetVisiblePosition( pTarget->GetObjectKey(), TRUE ); if(pTarget->IsKindOfObject( PLAYER_OBJECT)) { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("A022"), 5000, Position ); } else { g_ProjectileManagerEx.CreateEffect( pTarget->GetObjectKey(), StrToWzID("A023"), 5000, Position ); } } break; case eABILITY_SELF_DESTRUCTION: case eABILITY_KNOCKBACK: { SKILL_RESULT_POSITION* pResult = (SKILL_RESULT_POSITION*)pResultCode; ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK ); if( pTarget->IsMyHero() == TRUE ) { ResultData.SetPosition( pTarget->GetPosition(), pResult->m_wvDestPos ); } else { ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvDestPos ); } ResultData.SetForceSetLastestAttack( TRUE ); } break; // ƮξǸDZ case eABILITY_KNOCKBACK2: { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK2 ); SKILL_RESULT_POSITION* pResult = (SKILL_RESULT_POSITION*)pResultCode; if( pTarget->IsMyHero() == TRUE ) { ResultData.SetPosition( pTarget->GetPosition(), pResult->m_wvDestPos ); } else { ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvDestPos ); } ResultData.SetForceSetLastestAttack( TRUE ); } break; case eABILITY_TELEPORT: { SKILL_RESULT_POSITION* pResult = (SKILL_RESULT_POSITION*)pResultCode; pResult = pResult; //if( pTarget->IsMyHero() == TRUE ) //{ // ResultData.SetPosition( pTarget->GetPosition(), pResult->m_wvDestPos ); //} //else //{ // ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvDestPos ); //} break; } case eABILITY_PULLING: { ResultData.AddAdditionalEffect( ATTACK_ADDITIONAL_EFFECT_KNOCKBACK3 ); SKILL_RESULT_POSITION* pResult = (SKILL_RESULT_POSITION*)pResultCode; if( pTarget->IsMyHero() == TRUE ) { ResultData.SetPosition( pTarget->GetPosition(), pResult->m_wvDestPos ); } else { ResultData.SetPosition( pResult->m_wvCurPos, pResult->m_wvDestPos ); } ResultData.SetForceSetLastestAttack( TRUE ); } break; case eABILITY_FIGHTING_ENERGY_NUM_INCREASE: case eABILITY_BONUS_DAMAGE_PER_FIGHTING_ENERGY: { SKILL_RESULT_FIGHTING_ENERGY *pResult = (SKILL_RESULT_FIGHTING_ENERGY *)pResultCode; pTarget->SetFightingEnergy(pResult->m_sFightingEnergyCount); } break; case eABILITY_BLOCK_SKILL: if(pTarget == g_pHero) { g_pHero->SetLockSkill(TRUE); } break; } Character* pRealTarget = pTarget; if(SKILL_TARGET_ENEMY_AND_ME == pSkillInfo->m_byTarget) pRealTarget = pChr; // ȿ() Ѵ if ( pResultCode->m_wStatusCode != 0 ) { if( pResultCode->m_wStatusCode == 307 ) { int current_count = pTarget->GetSkillEffectCount( 307 ); while( current_count < pTarget->GetFightingEnergy() ) { if( SKILL_EFFECT* pEffect = SKILL_EFFECT::CreateSkillStatusEffect( pResultCode->m_wStatusCode, dwSkillCode, pResultCode->m_iStatusTime, pAbilityInfo ) ) { pEffect->CreateEffect( pRealTarget, pChr->GetObjectKey() ); pRealTarget->AddSkillEffect(pEffect); } ++current_count; } } #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE else if( pResultCode->overlap_status_count > 0) { if ( pResultCode->overlap_status_count == 1) // ó { if( SKILL_EFFECT* pEffect = SKILL_EFFECT::CreateSkillStatusEffect( pResultCode->m_wStatusCode, dwSkillCode, pResultCode->m_iStatusTime, pAbilityInfo ) ) { pEffect->CreateEffect( pRealTarget, pChr->GetObjectKey() ); pRealTarget->AddSkillEffect(pEffect); } } else { // ø SKILL_EFFECT* skill_effect_ptr = pRealTarget->FindSkillEffect(static_cast(pResultCode->m_wStatusCode)); if (skill_effect_ptr) { skill_effect_ptr->CreateEffect( pRealTarget, pChr->GetObjectKey() ); skill_effect_ptr->overlap_status_count_ = pResultCode->overlap_status_count; skill_effect_ptr->iRemainTime = pResultCode->m_iStatusTime; } } } #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE else { if( SKILL_EFFECT* pEffect = SKILL_EFFECT::CreateSkillStatusEffect( pResultCode->m_wStatusCode, dwSkillCode, pResultCode->m_iStatusTime, pAbilityInfo ) ) { pEffect->CreateEffect( pRealTarget, pChr->GetObjectKey() ); pRealTarget->AddSkillEffect(pEffect); } } } } void BattleScene::AddReflectDamageResult(char *pPacket,Character *pChr) { nsSync::MSGSUB_SKILL_REFLECT_DAMAGE_BRD* pResultCode = (nsSync::MSGSUB_SKILL_REFLECT_DAMAGE_BRD*)pPacket; if( pResultCode->m_SkillCode == 0 )//0̸ Ƽ return; SkillScriptInfo *pSkillInfo = SkillInfoParser::Instance()->GetSkillInfo(pResultCode->m_SkillCode); assert(pSkillInfo); if(!pSkillInfo) { FILE *fp = fopen("CrashLog.txt","wt"); if (fp) { fprintf(fp,"AddAbilityResult : SkillCode ̻ SkillCode : %d",pResultCode->m_SkillCode); fclose(fp); } return; } DWORD dwState = 0; // ABILITY ̻ ش. BASE_ABILITYINFO *pAbilityInfo = pSkillInfo->GetAbilityInfo(pResultCode->m_wAbilityCode); if(!pAbilityInfo) { FILE *fp = fopen("CrashLog.txt","wt"); if (fp) { fprintf(fp,"AddAbilityResult : AbilityIndex ̻ SkillCode : %d AbilityIndex : %d",pResultCode->m_SkillCode,pResultCode->m_wAbilityCode); fclose(fp); } return; } switch(pResultCode->m_wAbilityCode) { case eABILITY_REFLECT_DAMAGE: { } break; case eABILITY_REFLECT_FEAR: { dwState = eCHAR_STATE_FEAR; } break; case eABILITY_REFLECT_FROZEN: { dwState = eCHAR_STATE_FROZEN; } break; case eABILITY_REFLECT_SLOW: { dwState = eCHAR_STATE_FETTER; } break; case eABILITY_REFLECT_SLOWDOWN: { dwState = eCHAR_STATE_SLOWDOWN; } break; case eABILITY_REFLECT_STUN: { dwState = eCHAR_STATE_STUN; } break; } if (pChr) { // Ƽ ̵ ߸ ! if (pAbilityInfo && pAbilityInfo->m_wStateID != 0) { if( SKILL_EFFECT* pEffect = SKILL_EFFECT::CreateSkillStatusEffect( dwState, pResultCode->m_SkillCode, pAbilityInfo->m_iParam[1], pAbilityInfo ) ) { for (int a = 0; a < 4; a++) { pEffect->AbilityInfo.m_iParam[0] = pAbilityInfo->m_iOption2; pEffect->AbilityInfo.m_iParam[1] = pAbilityInfo->m_iParam[0]; pEffect->AbilityInfo.m_iParam[2] = pAbilityInfo->m_iParam[1]; pEffect->AbilityInfo.m_iParam[3] = 0; } pEffect->CreateEffect( pChr, pChr->GetObjectKey() ); pChr->AddSkillEffect(pEffect); } } } } float BattleScene::GetMonsterHPIncreaseRatio() { return m_fMonsterHPMultiplier; } void BattleScene::SetMonsterHPMultiplier(float fMultiplier) { // TODO : ⼭ ޽ ó . - j0 if (m_fMonsterHPMultiplier > fMultiplier) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; // 5621 Ͱ ϴ. g_InterfaceManager.GetInterfaceString(5621, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); // 5622 ͷκ ִ ġ մϴ. g_InterfaceManager.GetInterfaceString(5622, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } m_fMonsterHPMultiplier = fMultiplier; Object_Map_Itr itr = g_ObjectManager.GetBegin(); for (; itr != g_ObjectManager.GetEnd(); itr++) { Object* pObject = static_cast(itr->second); if (0 == pObject) { assert(!"Object Is NULL!!"); return; } if (pObject->IsKindOfObject(MONSTER_OBJECT)) { Monster* pMon = (Monster*)pObject; if (pMon->IsShadowSummon()) { continue; } pMon->ChangeHPRatio(fMultiplier); } } } void BattleScene::SettingNPC(MAPID MapCode ,FIELDID FieldID) { // NPC ġŲ. WzVector wzPos; WzVector wzDir; EXTRA_NPCINFO_SET * pInfoSet = NPCInfoParser::Instance()->GetExtraInfoSetFromFieldID(MapCode , FieldID); vector::iterator itr; EXTRA_NPCINFO * pInfo = NULL; DWORD object_key = NPC_OBJECT_KEY; for ( itr = pInfoSet->GetBegin(); itr != pInfoSet->GetEnd(); itr ++) { pInfo = *itr; assert(pInfo); BASE_NPCINFO* base_npcinfo_ptr = NPCInfoParser::Instance()->GetNPCInfo(pInfo->m_NPCCODE); if (base_npcinfo_ptr == NULL) { continue; } if (base_npcinfo_ptr->m_byGrade == eNPC_MOVE_SYNC_MERCHANT) { continue; } NPC * pNPC = NULL; if (pInfo->m_eNPCTYPE==eNPC_TYPE_LOTTO) { pNPC = (NPC *)g_ObjectManager.Add( ++object_key, LOTTO_NPC_OBJECT, pInfo->m_NPCCODE ); } else { pNPC = (NPC *)g_ObjectManager.Add( ++object_key, NPC_OBJECT, pInfo->m_NPCCODE ); } if (pNPC) { SetVector(&wzPos,pInfo->m_fNPCPos[0],pInfo->m_fNPCPos[1],pInfo->m_fNPCPos[2]); SetVector(&wzDir,pInfo->m_fNPCDir[0],pInfo->m_fNPCDir[1],pInfo->m_fNPCDir[2]); pNPC->SetPosition( wzPos ); pNPC->SetAngle( Math_GetAngleFromVector(&wzDir) ); pNPC->SetExtraInfo(pInfo); pNPC->SetVisiblePos(wzPos); NPC::InitNpcImageInfo(pNPC, pNPC->GetMonsterInfo()); if( CWzUnitDraw* pBasePart = pNPC->GetBasePart() ) { WzVector wzEffPos, wzEffRot, wzEffScale; SetVector( &wzEffRot, 0.0f, 0.0f, 0.0f ); SetVector( &wzEffScale, 1.0f, 1.0f, 1.0f ); int nNumEffect = pBasePart->GetNumUnitEffectInfo(); for( int i=0; iGetUnitEffectInfo( i ); CEffectBody* pEffectBody = g_pEffectManager->GetEffectPtrHandle( pei->m_hEffect ); if( pEffectBody ) { wzEffPos = wzPos + pei->m_wvPosition; pEffectBody->SetResultMatrix( wzEffPos, wzEffRot, wzEffScale ); } } } } } RefreshNPCStateForQuest(); } BOOL BattleScene::CheckHeroInArea(DWORD areaID) { if (g_pMap == NULL) { return FALSE; } if (g_pHero == NULL) { return FALSE; } eTRIGGER_STATE TrigerState, HeroTrigerState; WzSpecialArea* pAreaInfo = g_pMap->GetMapAreaByIndex(areaID); if (pAreaInfo == NULL) { return FALSE; } TrigerState = TRIGGER_STATE_LEAVE_AREA; switch (pAreaInfo->m_wbvRegion.m_eBvType) { case BVT_AABB: { if (TRUE == Contain_AABB_Vertex(&pAreaInfo->m_wbvRegion.m_aabb, g_pHero->GetPosition())) { TrigerState = TRIGGER_STATE_ENTER_AREA; } } break; case BVT_PATH_TILE_INDEX: { int iTile = g_pHero->GetPathExplorer()->GetTile(); for (int i = 0; i < static_cast(pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_nCount); ++i) { if (iTile == pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_pdwData[i]) { TrigerState = TRIGGER_STATE_ENTER_AREA; break; } } } break; case BVT_SPHERE: { if (TRUE == Contain_Sphere_Vertex(&pAreaInfo->m_wbvRegion.m_BvSphere, g_pHero->GetPosition())) { TrigerState = TRIGGER_STATE_ENTER_AREA; } } break; default: { return FALSE; } } HeroTrigerState = g_pHero->GetTriggerState(areaID); if( HeroTrigerState != TrigerState ) { //  Ŷ !!! if( TrigerState == TRIGGER_STATE_ENTER_AREA ) { //< ÷̾ Դ. // Ŷ MSG_CG_TRIGGER_ENTER_AREA_SYN SendPacket; SendPacket.m_byCategory = CG_TRIGGER; SendPacket.m_byProtocol = CG_TRIGGER_ENTER_AREA_SYN; SendPacket.m_iAreaID = areaID; #ifdef _DEBUG TCHAR szMessage[INTERFACE_STRING_LENGTH]; Sprintf(szMessage, _T("EnterArea( %d ), AreaType( %d )\n"), areaID, pAreaInfo->m_wbvRegion.m_eBvType); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_OUPUT_DEBUG, szMessage); #endif if( FALSE == GlobalFunc::SendPacket( CI_GAMESERVERIDX, &SendPacket, sizeof(MSG_CG_TRIGGER_ENTER_AREA_SYN) ) ) { // MSG_CG_TRIGGER_ENTER_AREA_SYN - BattleScene WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT,_T("Failed Send MSG_CG_TRIGGER_ENTER_AREA_SYN - BattleScene")); } } else if ( TrigerState == TRIGGER_STATE_LEAVE_AREA ) { //  쿡 . if (HeroTrigerState == TRIGGER_STATE_ENTER_AREA) { MSG_CG_TRIGGER_LEAVE_AREA_SYN SendPacket; SendPacket.m_byCategory = CG_TRIGGER; SendPacket.m_byProtocol = CG_TRIGGER_LEAVE_AREA_SYN; SendPacket.m_iAreaID = areaID; #ifdef _DEBUG TCHAR szMessage[INTERFACE_STRING_LENGTH]; Sprintf(szMessage, _T("LeaveArea( %d ), AreaType( %d )\n"), areaID, pAreaInfo->m_wbvRegion.m_eBvType); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_OUPUT_DEBUG, szMessage); #endif if( FALSE == GlobalFunc::SendPacket( CI_GAMESERVERIDX, &SendPacket, sizeof(MSG_CG_TRIGGER_LEAVE_AREA_SYN) ) ) { WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT,_T("Failed Send MSG_CG_TRIGGER_LEAVE_AREA_SYN - BattleScene")); } } } g_pHero->SetTriggerState( areaID,TrigerState ); } if (TrigerState == TRIGGER_STATE_ENTER_AREA) { return TRUE; } else { return FALSE; } } //---------------------------------------------------------------------------- /** */ BOOL BattleScene::CheckHeroInShortcutBattleArea(TCHAR* sAreaID, DWORD dwAreaID) { if (g_pHero == NULL) { return FALSE; } WzSpecialArea* pAreaInfo = g_pMap->GetMapArea(dwAreaID); if (!pAreaInfo) { return FALSE; } eSHORTCUT_AREA_STATE ShortcutSate, HeroShortcutSate; ShortcutSate = SHORTCUT_AREA_STATE_LEAVE_AREA; switch(pAreaInfo->m_wbvRegion.m_eBvType) { case BVT_AABB: { if (TRUE == Contain_AABB_Vertex(&pAreaInfo->m_wbvRegion.m_aabb, g_pHero->GetPosition())) { ShortcutSate = SHORTCUT_AREA_STATE_ENTER_AREA; } } break; case BVT_PATH_TILE_INDEX: { int iTile = g_pHero->GetPathExplorer()->GetTile(); for (int i = 0 ;i < static_cast(pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_nCount); ++i) { if (iTile == pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_pdwData[i]) { ShortcutSate = SHORTCUT_AREA_STATE_ENTER_AREA; break; } } } break; case BVT_SPHERE: { if (TRUE == Contain_Sphere_Vertex(&pAreaInfo->m_wbvRegion.m_BvSphere, g_pHero->GetPosition())) { ShortcutSate = SHORTCUT_AREA_STATE_ENTER_AREA; } } break; } HeroShortcutSate = g_pHero->GetShortcutState(dwAreaID); if( HeroShortcutSate != ShortcutSate ) { //  Ŷ !!! if( ShortcutSate == SHORTCUT_AREA_STATE_ENTER_AREA ) { WORD wIndex = MapInfoParser::Instance()->GetCurrentMapPortalIndex(sAreaID, g_pMap->GetCurrentFieldID()); if (wIndex) { sMAP_ENTERENCE_PORTAL* entPortal = MapInfoParser::Instance()->GetMapPortal( wIndex ); //̼Żϰ if(entPortal && entPortal->byMapType!=0) { // ʱȭ:̼Ż κ ġʰ ٷΰ⶧ uiBattleZoneMan* pZoneMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLEZONE)); if(pZoneMan) { pZoneMan->GetBattleRoomEntry().Init(); } //Client->Server: (Ʈor̼)Ż ϰڴٴSYN MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN sync; sync.syncType = MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN::eSYNC_FIXED_PORTAL; sync.mapEnterancePortalIndex = wIndex; GlobalFunc::SendPacket( CI_GAMESERVERIDX, (BYTE *)&sync, sizeof(sync)); } else { MSG_CG_ZONE_PORTAL_FIELD_MOVE_SYN sync; sync.m_wIndex = wIndex; GlobalFunc::SendPacket( CI_GAMESERVERIDX, &sync, sizeof(sync)); } } } g_pHero->SetShortcutState( dwAreaID,ShortcutSate ); } if (ShortcutSate == SHORTCUT_AREA_STATE_ENTER_AREA) { return TRUE; } else { return FALSE; } } void BattleScene::ProcessMoveInfo(DWORD dwTick) { MOVE_INFO_LIST::iterator iter,tempiter; iter = m_MoveInfoList.begin(); while(iter != m_MoveInfoList.end()) { (*iter).m_dwDelay += dwTick; if ((*iter).m_dwDelay >= 20000) { tempiter = iter; iter++; m_MoveInfoList.erase(tempiter); } else { iter++; } } } void BattleScene::RenderMoveInfo() { MOVE_INFO_LIST::iterator iter; TCHAR szTemp[256] = {0,}; iter = m_MoveInfoList.begin(); while(iter != m_MoveInfoList.end()) { POINT pt2; RECT rc; g_pSunRenderer->GetScreenPos( &pt2, &iter->vFrom ); Snprintf(szTemp, 256-1, _T("ID : %ld"),iter->m_dwKey); rc.left = pt2.x; rc.right = rc.left + 200; rc.top = pt2.y; rc.bottom = rc.top + 20; g_pSunRenderer->SetZBufferTest(FALSE); g_pSunRenderer->x_pManagerTextOut->DrawText(szTemp,&rc,WzColor_RGBA(0,255,255,255)); g_pSunRenderer->SetColor(255,255,255); if (iter->bSuccess) { g_pSunRenderer->RenderLine(iter->vFrom,iter->vTo,WzColor_RGBA(30,30,255,255),1.0f); g_pSunRenderer->RenderLine(iter->vFrom,iter->vActualTo,WzColor_RGBA(255,255,30,255),1.0f); } else { g_pSunRenderer->RenderLine(iter->vFrom,iter->vTo,WzColor_RGBA(255,30,30,255),1.0f); } g_pSunRenderer->SetZBufferTest(TRUE); iter++; } } void BattleScene::RegisterMoveInfo(HONGPOS Cur,HONGPOS Dest,DWORD dwKey,BOOL bThrust) { MOVE_INFO info; info.bSuccess = TRUE; info.m_dwDelay = 0; info.m_dwKey = dwKey; info.vFrom = Cur.wvPos; info.vTo = Dest.wvPos; info.vActualTo = info.vFrom; m_pTestMoveInfoExplorer->Stop(); if (Cur.wTile == -1) { g_pSunTerrain->PathExp_Reset(m_pTestMoveInfoExplorer,&Cur.wvPos, -1); if (m_pTestMoveInfoExplorer->GetTile() == -1) { info.bSuccess = FALSE; } } else { g_pSunTerrain->PathExp_Reset(m_pTestMoveInfoExplorer,&Cur.wvPos,Cur.wTile); } if (m_pTestMoveInfoExplorer->GetTile() != -1) { WzVector vDist = Dest.wvPos - Cur.wvPos; vDist.z = 0.0f; g_pSunTerrain->PathExp_Thrust(m_pTestMoveInfoExplorer,&vDist,PTA_NO_WALK); if (!m_pTestMoveInfoExplorer->IsMoving()) { info.bSuccess = FALSE; } else { info.vActualTo = m_pTestMoveInfoExplorer->GetTargetPos(); } } if (!info.bSuccess && bThrust) { TCHAR szTemp[256]; Sprintf(szTemp,_T("ID : %ld Thrust ̵ "),dwKey); GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT,szTemp); } m_MoveInfoList.push_back(info); } void BattleScene::AddSkillFieldEffect( Character* pChr, SkillFacade::ResultData* result_data ) { for (int a = 0; a < result_data->GetEffectResultCount(); ++a ) { SkillFacade::EffectResult* effect_result = result_data->GetEffectResult(a); if( effect_result == NULL ) continue; SKILL_RESULT_EFFECT* pResult = effect_result->m_pResult; DWORD lifeTime = 0; SkillScriptInfo* pInfo = SkillInfoParser::Instance()->GetSkillInfo( result_data->GetSkillCode() ); assert(pInfo); if( pInfo == NULL ) continue; //SkillEffectInfo* pEffectInfo = SkillEffectInfoParser::Instance()->GetSkillEffectInfo( pInfo->m_SkillClassCode ); BASE_ABILITYINFO* pAInfo=pInfo->GetAbilityInfoByIndex((BYTE)pResult->m_wAbilityIndex); assert(pAInfo); if( pAInfo == NULL ) { #ifdef _DEV_VER GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "[assertion]pResult->m_wAbilityIndex: %d", pResult->m_wAbilityIndex); #endif //_DEV_VER return; } if(pAInfo) { lifeTime = pAInfo->m_iParam[2];//° ĶͰ ð̴. } else { lifeTime = 10000; } // for(int j=0;jm_byCount;j++) { if(pResult->m_byCount==0||pResult->m_byCount>=MAX_EFFECT_COUNT) { break; } //Todo:ų Ʈ Ӽ ٸ ó ϳ . if(pAInfo->m_wAbilityID==eABILITY_RANDOM_AREA_ATTACK) { pResult->m_EffectInfo[j].m_Time = max(pResult->m_EffectInfo[j].m_Time,200); WzVector vVisiblePos = pResult->m_EffectInfo[j].m_wvEffectPos; vVisiblePos.z += 3.0; float fT = 0.0f; int iTileFocussing = g_pSunTerrain->x_pPathFinder->GetTileToStand( vVisiblePos, &fT, -1.0f, 10.0f ); if( iTileFocussing >= 0 ) { vVisiblePos.z -= fT; } WzID EffectID, EndEffectID; EffectID = StrToWzID("L071"); EndEffectID = StrToWzID("L072"); DWORD LifeTime = pResult->m_EffectInfo[j].m_Time+200; DWORD EndEffectTime = pResult->m_EffectInfo[j].m_Time; g_ProjectileManagerEx.CreateFieldEffect( vVisiblePos, EffectID, LifeTime, EndEffectID, EndEffectTime, 0 ); } else { //SkillEffectFunc::CreateSkillEventEffectByFieldSkill( pInfo->m_SkillClassCode, pResult->m_EffectInfo[j].m_wvEffectPos ); switch(pInfo->m_SkillClassCode) { case eSKILL_STAR_FALL: case eSKILL_FIRE_FILA: { g_ProjectileManagerEx.CreateFieldEffect( pResult->m_EffectInfo[j].m_wvEffectPos, StrToWzID("I060"), lifeTime ); } break; case eSKILL_POISON_RAIN: { g_ProjectileManagerEx.CreateFieldEffect( pResult->m_EffectInfo[j].m_wvEffectPos, StrToWzID("I020"), lifeTime ); } break; case eSKILL_ITEM_MINE: // ź( ų) { GlobalFunc::CreateEffectBeUpToOption( StrToWzID("E320"), pResult->m_EffectInfo[j].m_wvEffectPos); } break; } } } } } void BattleScene::RenderLightDirection() { if (m_bRenderLightDirection) { if (g_pHero) { WzVector vPos = g_pHero->GetVisiblePos(); vPos.z += 1.0f; WzVector vPos2; WzVector vDir; vDir = g_pMap->GetWorldBase()->GetSunLightDir(); vPos2 = vPos + m_vTestDir; WzColor color = g_pMap->GetWorldBase()->GetSunLightColor(); g_pSunRenderer->RenderPyramid(vPos2,vPos,color); for (int a = 0; a < MAX_NUM_LIGHT; a++) { const St_LightInformation *pInfo = g_pSunRenderer->GetLightInfo(a); if (pInfo) { if (pInfo->m_bValid) { if (pInfo->m_eltType == ELT_POINT) { BvSphere bv; bv.m_fRadius = pInfo->m_fRange; bv.m_wvCenter = pInfo->m_wvPosition; WzColor colorback = g_pSunRenderer->GetDiffuseColor(); g_pSunRenderer->SetColor(pInfo->m_wcColor); g_pSunRenderer->RenderBvSphere(&bv); g_pSunRenderer->SetColor(colorback); } } } } } } } void BattleScene::ShowLightDirection() { m_bRenderLightDirection ^= 1; } void BattleScene::ProcessRenderOption(LPDIMOUSESTATE2 pMouseState) { if (m_bRenderLightDirection) { if ( g_Input.GetState( MOUSE_MBUTTON, KS_MOUSE_DOWN) ) { m_vTestDir = g_pMap->GetWorldBase()->GetSunLightDir(); } else if( g_Input.GetState( MOUSE_MBUTTON, KS_MOUSE_KEY) ) { WzVector vDir; WzVector vNewDir; vDir = g_pMap->GetWorldBase()->GetSunLightDir(); vDir = m_vTestDir; WzVector vDiff = vDir; vDiff.z = 0.0f; float fBase = VectorLength(&vDiff); float fPitch = atan2(vDir.z,fBase); float fAngle = pMouseState->lX * 0.005f; vNewDir.x = vDir.x * cos(fAngle) + vDir.y * -sin(fAngle); vNewDir.y = vDir.x * sin(fAngle) + vDir.y * cos(fAngle); vNewDir.z = 0.0f; VectorNormalize(&vNewDir,&vNewDir); float fNewPitch = fPitch - pMouseState->lY * 0.005f; if (fNewPitch >= WZ_PI / 2.0f) { fNewPitch = WZ_PI / 2.0f - 0.001f; } else if (fNewPitch <= -(WZ_PI / 2.0f) ) { fNewPitch = -(WZ_PI / 2.0f) + 0.001f; } vNewDir.z = sin(fNewPitch); vNewDir.x *= cos(fNewPitch); vNewDir.y *= cos(fNewPitch); VectorNormalize(&vNewDir,&vNewDir); m_vTestDir = vNewDir; } else if ( g_Input.GetState( MOUSE_MBUTTON, KS_MOUSE_UP) ) { WzColor color = g_pMap->GetWorldBase()->GetSunLightColor(); g_pMap->GetWorldBase()->SetSunLightDir(m_vTestDir); g_pMap->GetWorldBase()->SetSunLightColor(color); } } } void BattleScene::_renderDbgText(DWORD dwTick) { #ifdef _DEV_VER g_pSunRenderer->Set2DMode( TRUE ); g_pSunRenderer->x_pManagerTextOut->StartToUseFont( StrToWzID("m216") ); if (m_iDbgTextType) { int x = 400; int y = 5; // غ switch(m_iDbgTextType) { case eDebugTextType_RenderState: _renderDbgInfoRenderStates(x,y); _renderDbgInfoResourceStatus(x,y); break; case eDebugTextType_HeroStatus: _renderDbgInfoHeroStatus(x,y); break; case eDebugTextType_Resource: _renderDbgInfoResourceStatus(x,y); break; case eDebugTextType_KeyQueue: _renderDbgInfoKeyQueueNum(x,y); break; case eDebugTextType_SkillQueue: _renderDbgInfoSkillQueueNum(x,y); break; case eDebugTextType_Camera: _renderDbgInfoCameraSpring(x,y); break; case eDebugTextType_Monster: _renderDbgInfoMonsterInfo(x,y); break; case eDebugTextType_Sound: _renderDbgInfoSound(x,y); break; case eDebugTextType_Autobot: _renderDbgInfoAutobot(x,y); break; } } // g_pSunRenderer->x_pManagerTextOut->EndUseFont(); g_pSunRenderer->Set2DMode( FALSE ); #endif //_DEV_VER } void BattleScene::SetScreenShotState( int iState ) { m_iScreenShotState = iState; } int BattleScene::GetScreenShotState( void ) { return m_iScreenShotState; } void BattleScene::RenderBlindEffect() { if (m_iCurBlindRate) { g_pSunRenderer->Set2DMode(TRUE); POINT pt = g_pApplication->Get2DModeMapping(); RECT rc; rc.top = 0; rc.left = 0; rc.right = pt.x; rc.bottom = pt.y; if( m_BlindType == BLIND_TYPE_BLACK ) { float fRate = (float)m_iCurBlindRate / (float)BLACK_BLIND_TIME; int iAlpha = (int)(255.0f * fRate); WzColor color = WzColor_RGBA(0,0,0,iAlpha); g_InterfaceManager.RenderRect(rc,color); } else if( m_BlindType == BLIND_TYPE_WHITE ) { float fRate = (float)m_iCurBlindRate / (float)WHITE_BLIND_TIME; static float s_max_rate = 0.96f; if( fRate > s_max_rate ) fRate = s_max_rate; int iAlpha = (int)(255.0f * fRate); WzColor color = WzColor_RGBA(255,255,255,iAlpha); g_InterfaceManager.RenderRect(rc,color); } g_pSunRenderer->Set2DMode(FALSE); } } void BattleScene::ProcessExpList() { EXP_INFO_LIST::iterator iter,tempiter; iter = m_ExpList.begin(); while(iter != m_ExpList.end() ) { BOOL bPop = FALSE; Character * pChr = (Character *)g_ObjectManager.GetObject(iter->m_dwCharacterKey); if (!pChr) { bPop = TRUE; } else { if (pChr->IsDead()) { bPop = TRUE; } } if (!bPop) { iter++; } else { tempiter = iter; iter++; PopupExp(tempiter->m_dwExpOffset , tempiter->m_nBonusExpRatio); m_ExpList.erase(tempiter); } } } void BattleScene::PopupExp(EXPTYPE expoffset , int bonusExpRatio /* = 0 */, int ExpType /* = eNormalExp */) { if (g_InterfaceManager.GetShowFlag() == FALSE) { return; } // ʽ ġ Ѵ. EXPTYPE bonusExp = 0; if( bonusExpRatio > 0) { bonusExp = (EXPTYPE) ceil( (double)expoffset * ( (double) bonusExpRatio / (100.f + (double) bonusExpRatio) ) ); } if (g_pHero) { TCHAR szResult[MAX_MESSAGE_LENGTH] ={ '\0', }; TCHAR szMessage[MAX_MESSAGE_LENGTH] = { '\0', }; TCHAR szText[MAX_MESSAGE_LENGTH] = { '\0', }; TCHAR szExpMessage[MAX_MESSAGE_LENGTH] = { '\0', }; if (expoffset > 0) { if(ExpType == eGroupExp) { // 7041: ׷ κ %d ġ ޾ҽϴ. g_InterfaceManager.GetInterfaceString( 7041, szMessage, MAX_MESSAGE_LENGTH ); } else { g_InterfaceManager.GetInterfaceString( eST_GET_EXP, szMessage, MAX_MESSAGE_LENGTH ); } if (bonusExp > 0) { Sprintf( szResult, szMessage, expoffset - bonusExp); // 9050 %s (߰ ġ %dȹ) g_InterfaceManager.GetInterfaceString( 9050, szText, MAX_MESSAGE_LENGTH ); Sprintf( szExpMessage, szText, szResult, bonusExp ); } else { Sprintf( szExpMessage, szMessage, expoffset ); } } else { if ( g_pHero->IsReachMaxLevel() ) { //5028 ְ Ͽ ̻ ġ ȹ Ͻ ϴ. g_InterfaceManager.GetInterfaceString(5028, szResult, INTERFACE_STRING_LENGTH); } else { g_InterfaceManager.GetInterfaceString(eST_TIRED_SYSTEM_ITEM_NOT_GET, szResult, MAX_MESSAGE_LENGTH); } } GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, szExpMessage, CHAT_TYPE_SYSTEM ); if( GAMEOPTION->GetPickUpItemNotify() ) { InserCenterTextMessage( szExpMessage, PICK ); } g_pHero->CreatePopupMesh(0, expoffset, eDAMAGEPOPUP_EXP, WzColor_RGBA(255,255,255,255), FALSE, FALSE); } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::InitQuestAreaInfo() { m_VecQuestArea.clear(); if ( !g_pMap ) { return; } int Count = g_pMap->GetNumberOfSpecialArea(); WzSpecialArea* pArea = NULL; for (int Index = 0; Index < Count; ++Index ) { pArea = g_pMap->GetMapAreaByIndex(Index); if (pArea) { m_VecQuestArea.push_back( pArea->m_wiIdentity ); } } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::ProcessQuestArea() { for (size_t i = 0; i < m_VecQuestArea.size(); ++i) { GameFunc::CheckHeroInAreaForQuest( m_VecQuestArea[i] ); } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::ProcessQuestTime() { uiQuestMan * pQuestMan = (uiQuestMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_QUEST); if ( pQuestMan ) { pQuestMan->UpdateQuestTime(); } } BOOL BattleScene::SceneWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ,SI_MESSAGE *stMessage) { if ( m_EventText.IsActived() ) { return TRUE; } return SceneBase::SceneWndProc(hWnd,iMessage,wParam,lParam,stMessage); } //------------------------------------------------------------------------------------------- /** */ void BattleScene::KeyManagerProc(DWORD wParam,DWORD lParam) { switch(wParam) { case eSceneEventSkip_EventScript: { m_EventText.SkipEventScript(); } break; } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::InitQuestInfo() { if ( g_pQMGR_Real == NULL ) return; Quest * pQuest = NULL; uiQuestMan * pQuestMan = (uiQuestMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_QUEST); // ڵ for( int i = 1; i < MAX_QUEST_COMPL_NUM; ++i) { pQuest = g_pQMGR_Real->FindQuest(i); if ( !pQuest ) continue; //Ϸ ƹ͵ Ʈ ؼ ѹ ̺Ʈ ȣѴ. g_pQMGR_Real->OnEventForClient(QUEST_EVENT_ITEM, NULL, pQuest); } UpdateAutoRewardRequest(); RefreshNPCStateForQuest(); } //------------------------------------------------------------------------------------------- /** */ void BattleScene::OnDeviceReset() { g_InterfaceManager.UpdateMyHeadTexture(); for (int a = 0; a < MAX_PARTYMEMBER_NUM; a++) { g_InterfaceManager.UpdatePartyHeadTexture(a); } } //------------------------------------------------------------------------------------------- /** */ void BattleScene::SendHeroSectorIndex() { #if !defined(_NA002676_WORLD_SERVER_RENEWAL) if (g_pHero && g_pMap) { if (!IsLobby()) { int iIndex = -1; WzVector vPos = g_pHero->GetPosition(); iIndex = g_pMap->GetSectorIndex(&vPos); //if (iIndex != -1) if (iIndex >= 0) { if (iIndex != m_iPrevSectorIndex) { MSG_CW_VIEWPORT_CHARSTATE SendPacket; SendPacket.m_byCategory = CW_VIEWPORT; SendPacket.m_byProtocol = CW_VIEWPORT_CHARSTATE; SendPacket.dwFieldCode = g_pMap->GetCurrentFieldID(); SendPacket.dwSectorIndex = (DWORD)iIndex; if (GlobalFunc::SendPacket(CI_CHATSERVERIDX, &SendPacket, sizeof(SendPacket) ) == TRUE) { m_iPrevSectorIndex = iIndex; } } } } } #endif } //---------------------------------------------------------------------------- /** */ BOOL BattleScene::IsLobby() { return BOOL(BattleScene::m_bLobbyFlag); } //---------------------------------------------------------------------------- /** */ BOOL BattleScene::IsLobbyInPending() { return BOOL(BattleScene::m_bLobbyPendingFlag); } //---------------------------------------------------------------------------- /** */ BOOL BattleScene::IsLobbyOutPending() { return BOOL(BattleScene::m_bLobbyOutPendingFlag); } //---------------------------------------------------------------------------- /** */ VOID BattleScene::SetLobbyFlag(BOOL bFlag) { BattleScene::m_bLobbyFlag = bFlag; } //---------------------------------------------------------------------------- /** */ VOID BattleScene::SetLobbyInPending(BOOL bFlag) { BattleScene::m_bLobbyPendingFlag = bFlag; } VOID BattleScene::SetLobbyOutPending(BOOL bFlag) { BattleScene::m_bLobbyOutPendingFlag = bFlag; } // //BOOL BattleScene::CreateProjectileSkillResult(DAMAGETYPE wDamage,DWORD dwTargetKey,DWORD dwTargetHP,DWORD timeSerial,DWORD dwSkillCode,DWORD dwAttackerKey) //{ // BASE_SKILLINFO *pInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)dwSkillCode); // Character *pTarget = (Character *)g_ObjectManager.GetObject(dwTargetKey); // Character *pAttacker = (Character *)g_ObjectManager.GetObject(dwAttackerKey); // // // if(pInfo && pTarget && pAttacker) // { // switch(pInfo->m_SkillClassCode) // { // case eSKILL_SACRED_FIRE: // { // ATTACK_RESULT attret; // attret.SetSkillCode(dwSkillCode); // attret.SetAttackSerial(pAttacker->GetCurrentAttackSerial()); // attret.SetTimeSerial(timeSerial); // attret.GetTargetData().SetTargetHP( dwTargetHP ); // attret.GetTargetData().SetTargetObjectKey( dwTargetKey ); // attret.GetTargetData().SetDamage( wDamage ); // pAttacker->AddAttackResult(&attret); // // // //WzVector StartPosition = pTarget->GetVisiblePos(); // //StartPosition.z += 10.0f; // //WzVector TargetPosition = pTarget->GetVisiblePos(); // // //g_ProjectileManagerEx.CreateMoveEffect( StartPosition, TargetPosition, StrToWzID("K501"), 500, pAttacker->GetObjectKey(), pAttacker->GetCurrentAttackSerial() ); // // //g_ProjectileManagerEx.CreateFieldEffect( pTarget->GetVisiblePos(), StrToWzID("K502"), 2000, 0, 0, 600 ); // } // return TRUE; // } // } // // return FALSE; //} void BattleScene::PrintYoungManProtectMessage() { static int iHour = 0; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,} , szResult[INTERFACE_STRING_LENGTH] ={0,}; int curHour = m_iGameConnectedTime / 60; if( iHour < curHour ) { // ûҳ ȣ ޼ . iHour = curHour; if( iHour < 3) { g_InterfaceManager.GetInterfaceString(eST_CONNECT_TIME_UNDER_3,szMessage,INTERFACE_STRING_LENGTH); Sprintf(szResult,szMessage,iHour); } else { g_InterfaceManager.GetInterfaceString(eST_CONNECT_TIME_OVER_3,szMessage,INTERFACE_STRING_LENGTH); Sprintf(szResult,szMessage,iHour); } GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szResult); } } void BattleScene::PrintPcBangBanMessage() { static int iMinute = 0; TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,}; // m_iTime 10 ŵȴ. 10п ѹ ѷش. if( iMinute < m_iGameConnectedTime ) { iMinute = m_iGameConnectedTime; if( g_pHero && g_pHero->GetBlockPCBang() ) { // 5865 PC ̳ڷ Ű Ǿϴ. ̿뿡 ֽϴ. g_InterfaceManager.GetInterfaceString( 5865 , szMessage ,INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_PCBang_Notice(szMessage);//Լ ð . } } } void BattleScene::UpdateGameStayTime() { if( m_StayTimer.IsExpired() ) { m_StayTimer.SetTimer(TEN_MINUTE); int iSecondToMinute = TEN_MINUTE / 60000; m_iGameConnectedTime += iSecondToMinute; } } #ifdef _JBH_ADD_AGE_LIMIT_MARK void BattleScene::RenderGameRatingMark() { static int iHour = 0; static DWORD dwTick = 0; // m_iGameConnectedTime ֱ 10 ̴. if( iHour < m_iGameConnectedTime / 60 ) { iHour = m_iGameConnectedTime / 60; dwTick = clock_function::GetTickCount(); } if( dwTick + 3000 > clock_function::GetTickCount() ) { SceneBase::RenderGameRatingMark(); } } #endif //_JBH_ADD_AGE_LIMIT_MARK void BattleScene::UpdateItemOwner() { ItemManager::Instance()->UpdateOwnerList(); } void BattleScene::UpdateItemShareSystem() { uiPartyMan * pPartyMan = ( uiPartyMan *) g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY); if( pPartyMan ) { pPartyMan->UpdatePartyItemShareSystem(); } } void BattleScene::NoticeBattleZoneItemShareSystem() { if( GameFramework::GetCurrentScene() && GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_FIELD || GameFramework::GetCurrentScene()->GetType() == SCENE_TYPE_VILLAGE ) return; TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,}; //5220 Ʋ й Ư ۸ ˴ϴ. g_InterfaceManager.GetInterfaceString(5220 , szMessage ,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } int BattleScene::OnEndRendering( DWORD /*dwTick*/ ) { if( ScreenShotSaver::Instance()->IsPrepared() ) { ScreenShotSaver::Instance()->Save(); } return 0; } void BattleScene::OnRecvCG_SSQ_CTRL_CMD(const WAR_TAG_P IN pMsg, const WAR_MSG_HDR IN header) { using namespace nsSSQ; using namespace nsSSQ::Observer; TCHAR szMessage[INTERFACE_STRING_LENGTH + 1] = { '\0', }; int MessageType = eOUTPUT_MSG_TOP_SHOW | eOUTPUT_MSG_CHAT; WAR_TAG_P pIt = const_cast(pMsg); WAR_TAG_P pEnd = pIt + header.size; for (WORD size = 0; pIt < pEnd; pIt += size) { size = 10000; // ŵ (buffer-overrun protector) switch (pIt->_TAG) { // // C<->G SSQ_MESSAGE_HANDLERs // ϴ ޽ MSGSUB_ Ѵ. // (protocol) SSQ_PROTOCOL_blah~blah~ --> (structure) MSGSUB_SSQ_PROTOCOL_blah~blah~ // ̿ Ĵ Ʒ case // ̷ Ǵ Ÿ ߻ϰ Ǿ // ʴ ׵ ִ. // // case SSQ_PROTOCOL_blah~blah~: // { // const MSGSUB_SSQ_PROTOCOL_blah~blah~& rMsg = static_cast(*pIt); // size = rMsg.GetSize(); // ... // case SSQ_PROTOCOL_NOTICE_ENABLE_ENTER_COUNTDOWN: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_ENABLE_ENTER_COUNTDOWN ); printf( "[SSQ_PROTOCOL_NOTICE_ENABLE_ENTER_COUNTDOWN] \n" ); g_InterfaceManager.GetInterfaceString( 6412, szMessage ); TCHAR szBuff[INTERFACE_STRING_LENGTH]; Sprintf( szBuff, szMessage, rMsg.Countdown ); GlobalFunc::OutputMsg_Notice( MessageType, szBuff ); } break; case SSQ_PROTOCOL_NOTICE_ENABLE_ENTER: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_ENABLE_ENTER ); printf( "[SSQ_PROTOCOL_NOTICE_ENABLE_ENTER] \n" ); g_InterfaceManager.GetInterfaceString( 6418, szMessage ); GlobalFunc::OutputMsg_Notice( MessageType, szMessage ); #ifdef _DH_BATTLEZONE2_ uiBattlezone2List* battlezone2_list = GET_CAST_DIALOG(uiBattlezone2List, IM_BATTLEZONE2_MANAGER::BATTLEZONE2_LIST); if (battlezone2_list) { battlezone2_list->SetIsSSQOpen(true); } #endif//_DH_BATTLEZONE2_ } break; case SSQ_PROTOCOL_NOTICE_CLOSE_ENTER_COUNTDOWN: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_CLOSE_ENTER_COUNTDOWN ); printf( "[SSQ_PROTOCOL_NOTICE_CLOSE_ENTER_COUNTDOWN] \n" ); g_InterfaceManager.GetInterfaceString( 6413, szMessage ); TCHAR szBuff[INTERFACE_STRING_LENGTH]; Sprintf( szBuff, szMessage, rMsg.Countdown ); GlobalFunc::OutputMsg_Notice( MessageType, szBuff ); } break; // ޽ Ʈ ٴ ޽, Ʈ // ʴ´. ( .) case SSQ_PROTOCOL_CTRL_TAG_TAIL: { printf( "[SSQ_PROTOCOL_CTRL_TAG_TAIL] \n" ); } break; case SSQ_PROTOCOL_NOTICE_CLOSE_PORTAL: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_CLOSE_PORTAL ); g_InterfaceManager.GetInterfaceString( 6414, szMessage ); GlobalFunc::OutputMsg_Notice( MessageType, szMessage ); #ifdef _DH_BATTLEZONE2_ uiBattlezone2List* battlezone2_list = GET_CAST_DIALOG(uiBattlezone2List, IM_BATTLEZONE2_MANAGER::BATTLEZONE2_LIST); if (battlezone2_list) { battlezone2_list->SetIsSSQOpen(false); } #endif//_DH_BATTLEZONE2_ } break; case SSQ_PROTOCOL_NOTICE_CLOSE_ENTER: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_CLOSE_ENTER ); } break; case SSQ_PROTOCOL_NOTICE_BATTLE_CANCLED: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_BATTLE_CANCLED ); } break; case SSQ_PROTOCOL_NOTICE_GAMBLE_START: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_GAMBLE_START ); m_dwGambleTime = 0; m_bGambleStart = TRUE; TCHAR szMessage[INTERFACE_STRING_LENGTH +1]; g_InterfaceManager.GetInterfaceString( 6419, szMessage ); GlobalFunc::default_OutputMsg( eOUTPUT_MSG_TOP_SHOW | eOUTPUT_MSG_CHAT, szMessage ); } break; case SSQ_PROTOCOL_NOTICE_GAMBLE_RESULT: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_GAMBLE_RESULT ); if( g_pHero == NULL ) break; TCHAR szTemp[INTERFACE_STRING_LENGTH +1]; TCHAR szMessage[INTERFACE_STRING_LENGTH +1]; g_InterfaceManager.GetInterfaceString( 1769, szTemp ); const std::string strMoney = GlobalFunc::CalculateThousandDigit( rMsg.RewardHeim ); Sprintf( szMessage, szTemp, (TCHAR*)rMsg.CharName, strMoney.c_str() ); if( _tcscmp( (TCHAR*)rMsg.CharName, g_pHero->GetName() ) == 0 ) { MONEY money = g_pHero->GetMoney() + rMsg.RewardHeim; g_pHero->SetMoney( money ); } GlobalFunc::default_OutputMsg( eOUTPUT_MSG_TOP_SHOW | eOUTPUT_MSG_CHAT, szMessage ); } break; case SSQ_PROTOCOL_NOTICE_BATTLE_COUNTDOWN: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_BATTLE_COUNTDOWN ); uiSSQSystemWindow * pDlg = GET_CAST_DIALOG( uiSSQSystemWindow, IM_SSQ_MANAGER::SSQ_SYSTEMTIME ); if( pDlg ) { pDlg->SetStart( TRUE ); pDlg->SetStartCount( 10 ); } } break; case SSQ_PROTOCOL_NOTICE_BATTLE_START: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_BATTLE_START ); // ۽ BGM ü g_SoundBGM.Stop(); g_SoundBGM.Play( 29 ); g_IsBattle = TRUE; } break; case SSQ_PROTOCOL_NOTICE_BATTLE_END: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_BATTLE_END ); g_IsBattle = FALSE; } break; case SSQ_PROTOCOL_NOTICE_1TO1_PORTAL_CLOSED: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_NOTICE_1TO1_PORTAL_CLOSED ); g_ProjectileManagerEx.DeleteProjectile( g_dwSSQPortalKey ); } break; case SSQ_PROTOCOL_TRAP_EARTHQUAKE_INDICATION: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_TRAP_EARTHQUAKE_INDICATION ); const SSQPattern * pPattern = SSQInfoParser::Instance()->FindSSQPattern( rMsg.PatternIndex ); if( pPattern == NULL ) break; for( int i = 0; i < pPattern->m_StepGroup[rMsg.StepArrayIndex].m_ListSize; i++ ) { g_SsqScene.AddEarthQuakeIndex( pPattern->m_StepGroup[rMsg.StepArrayIndex].m_List[i] ); } } break; case SSQ_PROTOCOL_TRAP_EARTHQUAKE_EXECUTE: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_TRAP_EARTHQUAKE_EXECUTE ); g_SsqScene.ProcessEarthQuake(); } break; case SSQ_PROTOCOL_TRAP_THUNDERBOLT_EXECUTE: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_TRAP_THUNDERBOLT_EXECUTE ); for( int i = 0; i < rMsg.Count; i++ ) { g_SsqScene.CreateThunderBolt( rMsg.Position[i] ); } } break; case SSQ_PROTOCOL_TRAP_CLOSEDSPACE_EXECUTE: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_TRAP_CLOSEDSPACE_EXECUTE ); for( int i = 0; i < rMsg.Count; i++ ) { g_SsqScene.ProcessDamage( rMsg.Damages[i] ); } } break; case SSQ_PROTOCOL_TRAP_SELF_DESTRUCTION: { } break; case SSQ_PROTOCOL_INFORMATION_COUNT_OF_PLAYERS: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_COUNT_OF_PLAYERS ); uiSSQSystemWindow * pDlg = GET_CAST_DIALOG( uiSSQSystemWindow, IM_SSQ_MANAGER::SSQ_SYSTEMTIME ); if( pDlg ) { pDlg->SetRemainUser( rMsg.Remains, 100 ); } } break; case SSQ_PROTOCOL_INFORMATION_REMAINED_TIME: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_REMAINED_TIME ); uiSSQSystemWindow * pDlg = GET_CAST_DIALOG( uiSSQSystemWindow, IM_SSQ_MANAGER::SSQ_SYSTEMTIME ); if( pDlg ) { pDlg->SetRemainTime( rMsg.Minute, rMsg.Second ); } } break; case SSQ_PROTOCOL_INFORMATION_REWARD_ON_PLAYING: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_REWARD_ON_PLAYING ); TCHAR szTemp[INTERFACE_STRING_LENGTH +1]; TCHAR szMessage[INTERFACE_STRING_LENGTH +1]; g_InterfaceManager.GetInterfaceString( 6423, szTemp ); Sprintf( szMessage, szTemp, (TCHAR*)rMsg.CharName ); GlobalFunc::default_OutputMsg( eOUTPUT_MSG_TOP_SHOW | eOUTPUT_MSG_CHAT, szMessage ); } break; case SSQ_PROTOCOL_CONTROL_FORCED_POSITION_CORRECTION: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_CONTROL_FORCED_POSITION_CORRECTION ); for( int i = 0; i < rMsg.Count; i++ ) { Object * pObj = g_ObjectManager.GetObject( rMsg.PositionInfo[i].ObjectKey ); if( pObj == NULL ) continue; WzVector vTemp = rMsg.PositionInfo[i].Position; vTemp.z = 20.0f; WzVector pos; GameFunc::PickTerrainMesh( vTemp, pos ); pObj->SetPosition( pos ); } } break; case SSQ_PROTOCOL_CONTROL_DAMAGE_PROCESS: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_CONTROL_DAMAGE_PROCESS ); for( int i = 0; i < rMsg.Count; i++ ) { g_SsqScene.ProcessDamage( rMsg.Damages[i], 7061 ); } } break; case SSQ_PROTOCOL_TRAP_CLOSEDSPACE_DISABLED: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_TRAP_CLOSEDSPACE_DISABLED ); g_SsqScene.DeleteDoomEffect(); } break; case SSQ_PROTOCOL_INFORMATION_AMOUNT_DEDUCTED: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_AMOUNT_DEDUCTED ); if( g_pHero == NULL ) break; MONEY money = g_pHero->GetMoney(); money -= rMsg.Cost; g_pHero->SetMoney( money ); } break; case SSQ_PROTOCOL_REQUEST_OBSERVER_CTRL_G2C_SELECT: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_REQUEST_OBSERVER_CTRL_G2C_SELECT ); uiAssistMan* pUIMan = GET_DIALOG_MANAGER(uiAssistMan, UIMAN_ASSIST); if(pUIMan) { pUIMan->ShowAskSSQObserverDialog(); } } break; case SSQ_PROTOCOL_REQUEST_OBSERVER_CTRL_RESULT: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_REQUEST_OBSERVER_CTRL_RESULT ); using namespace nsSSQ::Observer; if( rMsg.Result == MSGSUB_SSQ_PROTOCOL_REQUEST_OBSERVER_CTRL_RESULT::eNtfCmd_ResultByRequest_Success ) { if( rMsg.Coordinates == Info::eCoord_Slots ) break; const WzVector vAngle = GlobalFunc::GetObserverAngle( rMsg.Coordinates ); g_Camera.SetAngleYaw( vAngle.x ); g_Camera.SetAnglePitch( vAngle.y ); g_pHero->SetAngle( vAngle.x ); if( g_bObserverMode == FALSE ) { g_bObserverMode = TRUE; MainDialog * pDlg = GET_CAST_DIALOG( MainDialog, IM_MENU_MANAGER::MAIN_DLG ); if( pDlg ) { pDlg->ShowObserverButton( TRUE ); } if( g_pHero ) g_pHero->SetShow( FALSE ); SetShowInterfaceForObserverMode( FALSE ); } } else { } } break; case SSQ_PROTOCOL_INFORMATION_QUEST_FAIL_RESULT: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_QUEST_FAIL_RESULT ); TCHAR szMessage[INTERFACE_STRING_LENGTH +1]; if( rMsg.bIsNotStarted ) { g_InterfaceManager.GetInterfaceString( 5598, szMessage ); } else { g_InterfaceManager.GetInterfaceString( 6426, szMessage ); } GlobalFunc::default_OutputMsg( eOUTPUT_MSG_TOP_SHOW | eOUTPUT_MSG_CHAT, szMessage ); } break; case SSQ_PROTOCOL_INFORMATION_QUEST_SUCCESS_RESULT: { RECV_PATTERNCODE_FOR_SSQ( SSQ_PROTOCOL_INFORMATION_QUEST_SUCCESS_RESULT ); TCHAR szTemp[INTERFACE_STRING_LENGTH +1]; TCHAR szMessage[INTERFACE_STRING_LENGTH +1]; if (strlen(static_cast(rMsg.guild_name)) != 0) { // 6431 : ̹ 'Ÿ ' ְ "%s %s" Դϴ! ְ 翡 ' ' ˴ϴ. g_InterfaceManager.GetInterfaceString( 6431, szTemp ); Sprintf( szMessage, szTemp, static_cast(rMsg.guild_name), static_cast(rMsg.WinnerName)); } else { // 6427 : ̹ 'Ÿ ' ְ "%s" Դϴ! ְ 翡 ' ' ˴ϴ. g_InterfaceManager.GetInterfaceString( 6427, szTemp ); Sprintf( szMessage, szTemp, static_cast(rMsg.WinnerName) ); } uiNoticeMan* pUIMan = GET_DIALOG_MANAGER(uiNoticeMan, UIMAN_NOTICE); if (pUIMan != NULL) { pUIMan->ShowNoticeMessage(eGM_Notice, szMessage, 10000); } } break; default: { WRITELOG(eLOG_LEVEL_ERR, c_wOUTPUT_LOG_FILE | c_wOUTPUT_LOG_CENTER | c_wOUTPUT_LOG_SYSCHAT, "Can't Readable SSQ Msg Format (Tag = %d)\n ", pIt->_TAG ); } break; } } ASSERT( pIt==pEnd ); } void BattleScene::InserCenterTextMessage( char * szText, DWORD eType ) { WzColor color; if ( eType == PICK ) color = WzColor_RGB(255,255,255); else color = WzColor_RGB(0,255,0); TEXT_MEMBER_SHARED_PTR_TYPE data( new Text_Member( szText, color ) ); m_TextDisplayManager.Insert( data ); } void BattleScene::SetShowInterfaceForObserverMode( BOOL bShow ) { #ifdef _NA_000000_20130114_RENEWER_UI DWORD dwDialogID[4] = { IM_HERO_GAUGE_MANAGER::HERO_GAUGE_DLG, IM_QUICK_CONTAINER_MANAGER::QUICK_CONTAINER, IM_QUICK_CONTAINER_MANAGER::STYLE_CONTAINER, IM_HERO_GAUGE_MANAGER::HERO_GAUGE_DLGCONTROL }; for( int i = 0; i < 4; i++ ) { uiBase * pDlg = GET_DIALOG( dwDialogID[i] ); if( pDlg ) pDlg->ShowWindow( bShow ); } #else DWORD dwDialogID[3] = { IM_HERO_GAUGE_MANAGER::HERO_GAUGE_DLG, IM_QUICK_CONTAINER_MANAGER::QUICK_CONTAINER, IM_QUICK_CONTAINER_MANAGER::STYLE_CONTAINER }; for( int i = 0; i < 3; i++ ) { uiBase * pDlg = GET_DIALOG( dwDialogID[i] ); if( pDlg ) pDlg->ShowWindow( bShow ); } #endif//#ifdef _NA_000000_20130114_RENEWER_UI } void BattleScene::ShowRadirDialog() { if (GameFramework::GetCurrentScene()->GetType() != SCENE_TYPE_SSQ) { static DWORD countMapOpen = 0; if (g_pHero && (g_pHero->IsShowFullMap() == FALSE)) { #ifdef _NA_000000_20130114_RENEWER_UI RadarDialog* radar_dialog = (RadarDialog*)GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG); RadarPlusDialog* radar_plus = (RadarPlusDialog*)GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS); if (!radar_dialog || !radar_plus) { // ϳ Ʈ ٸ ó ; goto OUT_RESULT; } int radarLevel = 0; //̴ ܰ { if(radar_dialog->IsVisible() && radar_dialog->gethidecheck() == false) { radarLevel = 1; } if(radar_dialog->IsVisible() && radar_dialog->gethidecheck()) { radarLevel = 0; } if(radar_plus->IsVisible() && radar_plus->gethidecheck() == false) { radarLevel = 2; } if(radar_plus->IsVisible() && radar_plus->gethidecheck()) { radarLevel = 3; } } //level ܰ switch(radarLevel) { case 0: { radar_plus->ShowDialog(FALSE); radar_dialog->ShowDialog(TRUE); radar_dialog->HideAllControl(true); } break; case 1: { radar_dialog->ShowDialog(FALSE); radar_plus->ShowDialog(TRUE); radar_plus->HideAllControl(true); } break; case 2: { radar_dialog->ShowDialog(FALSE); radar_plus->ShowDialog(TRUE); radar_plus->HideAllControl(false); } break; case 3: { radar_plus->ShowDialog(FALSE); radar_dialog->ShowDialog(TRUE); radar_dialog->HideAllControl(false); countMapOpen = 0; } break; } #else if (GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG)->IsVisible()) { GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG)->ShowDialog(FALSE); GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS)->ShowDialog(TRUE); } else if (GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS)->IsVisible()) { GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG)->ShowDialog(FALSE); GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS)->ShowDialog(FALSE); } else { GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG)->ShowDialog(TRUE); GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS)->ShowDialog(FALSE); } #endif OUT_RESULT: uiBattlezone2Man* ui_battlezone2_manager_ = GET_DIALOG_MANAGER(uiBattlezone2Man, UIMAN_BATTLE_ZONE_MANAGER); if (ui_battlezone2_manager_ != NULL) { ui_battlezone2_manager_->MoveBattleZoneIcon(); } } } } //------------------------------------------------------------------------------ //_NA_000000_20120410_SPEEDHACK void BattleScene::CallbackWGPL(void) { static bool is_sended = false; if (is_sended == true) { return; } if (g_pHero == NULL) { return; } MSG_CG_ETC_MEMORY_HACK_CMD cmd; if(GlobalFunc::SendPacketToGameServer(&cmd, sizeof(cmd)) == TRUE) { is_sended = true; } else { assert( !"Ŷ Send - MSG_CG_SYNC_PLAYER_ENTER_SYN" ); } } //------------------------------------------------------------------------------ #ifdef _NA_007477_20140805_RADAR_RAYER_MODIFY void BattleScene::SetCurrentRadarLayer(int current_layer) { RadarDialog * pRadarDlg = GET_CAST_DIALOG(RadarDialog, IM_RADAR_MANAGER::RADAR_DIALOG); if(pRadarDlg) { pRadarDlg->SetCurLayer(current_layer); } RadarPlusDialog * pRadarPlusDlg = GET_CAST_DIALOG(RadarPlusDialog, IM_RADAR_MANAGER::RADAR_DIALOG_PLUS); if(pRadarPlusDlg) { pRadarPlusDlg->SetCurLayer(current_layer); } } //------------------------------------------------------------------------------ void BattleScene::InitRadarLayer(MAPCODE map_code) { int iMaxLayer = 1; INDUN_OPTION* pOption = InDunOptionParser::Instance()->GetInDunOption(map_code); if (pOption) { iMaxLayer = pOption->mdwLayer; } RadarDialog* pRadarDlg = GET_CAST_DIALOG(RadarDialog, IM_RADAR_MANAGER::RADAR_DIALOG); if (pRadarDlg) { pRadarDlg->SetMaxLayer(iMaxLayer); pRadarDlg->SetCurLayer(); } RadarPlusDialog* pRadarPlusDlg = GET_CAST_DIALOG(RadarPlusDialog, IM_RADAR_MANAGER::RADAR_DIALOG_PLUS); if (pRadarPlusDlg) { pRadarPlusDlg->SetMaxLayer(iMaxLayer); pRadarPlusDlg->SetCurLayer(); } } #endif //_NA_007477_20140805_RADAR_RAYER_MODIFY //------------------------------------------------------------------------------