197 lines
4.9 KiB
C++
197 lines
4.9 KiB
C++
#include "stdafx.h"
|
|
|
|
#include <Object/WiseCharacter.h>
|
|
#include <Sessions/UserSessionMgr.h>
|
|
|
|
//
|
|
#include <SinTable.h>
|
|
#include <SCPlayer.h>
|
|
#include <PublicMath.h>
|
|
//
|
|
//
|
|
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// <MOVE LOGIC FLOW>
|
|
LF_ACTIVE_HANDLER_IMPL(S_003000_START_MARK_LF)
|
|
{
|
|
DEBUGGING_CODE_L3("");
|
|
return LFRET_SUCCESS_DEFAULT;
|
|
}
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003010_CHECK_MOVING_POLICY_LF)
|
|
{
|
|
DEBUGGING_CODE_L3("");
|
|
|
|
LF_RESULT lfRET = LFRET_SUCCESS_DEFAULT;
|
|
|
|
// 이동하는 방법 결정한 뒤 특정 위치로 점프하도록 수정해야 할 것이다.
|
|
// 일단 Default를 통해 TEST_MOVING을 수행한다.
|
|
|
|
return lfRET;
|
|
}
|
|
|
|
// Moving test LF
|
|
LF_ACTIVE_HANDLER_IMPL(S_003100_START_MARK_LF)
|
|
{
|
|
//DEBUGGING_CODE_L3("");
|
|
//return LFRET_SUCCESS_DEFAULT;
|
|
return LFRET_SUCCESS_LOOP;
|
|
}
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// 키보드 이동을 통한 원하는 위치로 가기
|
|
// S_003110_PRECHECK_CURRENT_POS_FOR_KBMOVE_LF
|
|
// SHARED_LF::MOVE::CALC_NEXT_POSITION_KBMOVE
|
|
// S_003120_SEND_CG_SYNC_KBMOVE_SYN_LF
|
|
// S_003130_POSTCHECK_CURRENT_POS_FOR_KBMOVE_LF (goto S_003110_PRECHECK_CURRENT_POS_FOR_KBMOVE_LF)
|
|
//
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003110_PRECHECK_CURRENT_POS_FOR_KBMOVE_LF)
|
|
{
|
|
//DEBUGGING_CODE_L3("");
|
|
|
|
WiseUser* pUser = pDelegator->GetWiseUser();
|
|
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
|
|
|
|
UserSessionMgr& rMGR = pUser->GetSessionMgr();
|
|
ZoneControl& rZONE = pUser->ZoneController();
|
|
SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
|
|
|
|
// 목표하는 좌표 있는지 판단. 있으면, 해당 위치로 가지 위한 Vector계산
|
|
// 그렇지 않을 경우 랜덤 이동.
|
|
sMAP_POS_ARG rPOS;
|
|
|
|
BOOL bRET = SHARED_LF::MOVE::CALC_NEXT_POSITION_KBMOVE(pDelegator, &rPOS, FALSE, /**/ TRUE, KEYBOARDMOVE_FOWARD);
|
|
|
|
LF_RESULT lfRET = bRET ? LFRET_SUCCESS_DEFAULT : LFRET_SUCCESS_LOOP;
|
|
|
|
return lfRET;
|
|
}
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003120_SEND_CG_SYNC_KBMOVE_SYN_LF)
|
|
{
|
|
//DEBUGGING_CODE_L3("");
|
|
|
|
WiseUser* pUser = pDelegator->GetWiseUser();
|
|
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
|
|
|
|
UserSessionMgr& rMGR = pUser->GetSessionMgr();
|
|
ZoneControl& rZONE = pUser->ZoneController();
|
|
SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
|
|
|
|
|
|
MSG_CG_SYNC_KBMOVE_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_SYNC_KBMOVE_SYN>();
|
|
|
|
sMAP_POS_ARG rPOS;
|
|
rZONE.MapPosCmd(ZoneControl::CMD_POS_GET_CUR_INFO, &rPOS);
|
|
|
|
rMsgSYN.m_byMoveState = (BYTE)rPOS.SUBCMD;
|
|
CopyMemory(&rMsgSYN.wvCurPos, rPOS.XYZ_DEST, sizeof(rMsgSYN.wvCurPos));
|
|
rMsgSYN.m_wAngle = (WORD)rPOS.ANGLE;
|
|
rMsgSYN.m_wTileIndex = 100; // g_pHero->GetPathExplorer()->GetTile();
|
|
|
|
rMsgSYN.Encode();
|
|
|
|
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
|
|
|
|
return LFRET_SUCCESS_DEFAULT;
|
|
}
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003130_POSTCHECK_CURRENT_POS_FOR_KBMOVE_LF)
|
|
{
|
|
//DEBUGGING_CODE_L3("");
|
|
|
|
WiseUser* pUser = pDelegator->GetWiseUser();
|
|
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
|
|
|
|
UserSessionMgr& rMGR = pUser->GetSessionMgr();
|
|
ZoneControl& rZONE = pUser->ZoneController();
|
|
SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
|
|
|
|
sMAP_POS_ARG rPOS;
|
|
rZONE.MapPosCmd(ZoneControl::CMD_POS_GET_CUR_INFO, &rPOS);
|
|
|
|
CopyMemory(rPOS.XYZ_CUR, rPOS.XYZ_DEST, sizeof(rPOS.XYZ_CUR));
|
|
rZONE.MapPosCmd(ZoneControl::CMD_POS_SET_CUR_INFO, &rPOS);
|
|
// ...
|
|
|
|
static FLOAT ubat[3] = //유배트위치
|
|
{
|
|
-45.32f,
|
|
37.3f,
|
|
-23.14f
|
|
};
|
|
|
|
WzVector diff = *(WzVector*)rPOS.XYZ_CUR - *(WzVector*)ubat ;
|
|
FLOAT fLength = Math_Vector2DLength(&diff);
|
|
|
|
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
|
|
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_JUMP_STEP;
|
|
sSIG_STEP_ARG& rSIG_ARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
|
|
|
|
//if(fLength < 10.0f)
|
|
// rSIG_ARG.SetInfo(LFG_MOVE, S_003900_EOL_FLOW_CONTROL_LF);
|
|
//else
|
|
rSIG_ARG.SetInfo(LFG_MOVE, S_003110_PRECHECK_CURRENT_POS_FOR_KBMOVE_LF);
|
|
pDelegator->OnMsg(&rSIGNAL);
|
|
|
|
return LFRET_SUCCESS_JUMP;
|
|
}
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003140_FAULT_TOLERENCE_POSITION_LF)
|
|
{
|
|
DEBUGGING_CODE_L3("");
|
|
return LFRET_SUCCESS_DEFAULT;
|
|
}
|
|
|
|
struct sFFF
|
|
{
|
|
ITimerBase A;
|
|
ITimerBase B;
|
|
};
|
|
|
|
static BOOL __StartTimer(ITimerBase& rTimer)
|
|
{
|
|
rTimer.Configure(ITimerBase::eTIMER_MODE::LOOP, 3*1000, TRUE);
|
|
rTimer.StartTimer();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
LF_ACTIVE_HANDLER_IMPL(S_003900_EOL_FLOW_CONTROL_LF)
|
|
{
|
|
//DEBUGGING_CODE_L3("");
|
|
static ITimerBase sTimer;
|
|
static BOOL bsRET = __StartTimer(sTimer);
|
|
|
|
static DWORD dwStartTick = GetTickCount();
|
|
if(sTimer.IsExpired())
|
|
{
|
|
DWORD dwEndTick = GetTickCount();
|
|
//printf("sizeof %u\t%u\n", sizeof(ITimerBase), sizeof(testobject));
|
|
//printf("IDX %u %u %u %u\n", offsetof(testobject, iA),offsetof(testobject, iTimer),offsetof(testobject, ib),offsetof(testobject, ic));
|
|
printf("itimerbase*2 %u\n", sizeof(sFFF));
|
|
printf("Expired %u %u\n", dwEndTick, dwEndTick-dwStartTick);
|
|
}
|
|
return LFRET_SUCCESS_LOOP;
|
|
}
|
|
|
|
LF_ACTIVE_HANDLER_IMPL(S_003999_CLOSURE_MARK_LF)
|
|
{
|
|
DEBUGGING_CODE_L3("");
|
|
return LFRET_SUCCESS_DEFAULT;
|
|
}
|
|
|
|
//
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|