Files
2022-10-26 12:25:11 +08:00

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;
}
//
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫