Files
Sun1602/Tools/WiseClient/Logic/S_ACTIVE/S_0018xx_MOVE_LF.cpp
T
2022-10-26 12:25:11 +08:00

304 lines
6.6 KiB
C++

#include "stdafx.h"
#include <Object/WiseCharacter.h>
#include <Sessions/UserSessionMgr.h>
//
#include <SinTable.h>
#include <SCPlayer.h>
//
//
LF_ACTIVE_HANDLER_IMPL(S_001800_START_MARK_LF)
{
DEBUGGING_CODE_L3("");
return LFRET_SUCCESS_DEFAULT;
}
LF_ACTIVE_HANDLER_IMPL(S_001810_MOVING_LF)
{
DEBUGGING_CODE_L3("");
return LFRET_SUCCESS_DEFAULT;
}
LF_ACTIVE_HANDLER_IMPL(S_001820_MOVING_CONTROL_LF)
{
DEBUGGING_CODE_L3("");
return LFRET_SUCCESS_DEFAULT;
}
LF_ACTIVE_HANDLER_IMPL(S_001830_KBMOVING_LF)
{
DEBUGGING_CODE_L3("");
WiseUser* pUser = pDelegator->GetWiseUser();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
ZoneControl& rZONE = pUser->ZoneController();
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
//////////////////////////////////////////////////////////////////////////
static BOOL bINIT_GM = FALSE;
if(!bINIT_GM)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
//strncpy(rMsgSYN.m_szStringCmd, "부활" ,sizeof(rMsgSYN.m_szStringCmd));
//rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
strncpy(rMsgSYN.m_szStringCmd, "회복" ,sizeof(rMsgSYN.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
}
static float rVec[3] =
{
-37.32f, 59.3f, -25.14f
};
static float rVecSrc[3] =
{
-37.32f, 59.3f, -25.14f
};
static BOOL bINIT_WARP = FALSE;
static DWORD dwTeleport = 0;
// ---TEST---
if(!bINIT_WARP)
// ---TEST---
//if((dwTeleport % 20) == 0)
// ---TEST---
{
do
{
MSG_CG_MAP_TELEPORT_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_MAP_TELEPORT_SYN>();
static BOOL bFalse = FALSE;
static DWORD dwCC = 0;
dwCC = 0x109391*(dwCC>>23) + (0x62999384+dwCC);
CHAR cRndCC1 = (CHAR)(dwCC>>24);
dwCC = 0x109631*(dwCC>>24) + (0x32999384+dwCC);
CHAR cRndCC2 = (CHAR)(dwCC>>24);
cRndCC1 %= 10;
cRndCC2 %= 10;
if(bFalse)
{
rVec[0] += 1.0f+cRndCC1;
rVec[1] += 1.0f+cRndCC2;
//rVec[2] += 4.0f;
}
else
{
//Sleep(1000);
rVec[0] -= 1.0f+cRndCC1;
rVec[1] += 1.0f+cRndCC2;
////rVec[2] -= 4.0f;
}
bFalse = !bFalse;
CopyMemory(&rMsgSYN.vPos, &rVec, sizeof(rVec));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
//if((++dwCC % 5) == 0)
{
//dwCC = (dwCC+1)%10;
CopyMemory(rVec, rVecSrc, sizeof(rVec));
++dwTeleport;
//return LFRET_SUCCESS_LOOP;
}
} while(0);
// ---TEST---
bINIT_WARP = TRUE;
// ---TEST---
}
++dwTeleport;
//static DWORD mod = 0;
// MSG_CG_BATTLE_PLAYER_ATTACK_SYN pATK_SYN[1];
// //memcpy(&msgBASE[0].m_byCategory, protocols, sizeof(WORD));
// pATK_SYN->dwClientSerial = mod;
// pATK_SYN->byAttackType = mod%3;
// pATK_SYN->dwTargetKey = 50001;
// CopyMemory(&pATK_SYN->wvCurPos, rVec, sizeof(rVec));
// CopyMemory(&pATK_SYN->wvDestPos, rVec, sizeof(rVec));
// pATK_SYN->Encode();
// rMGR.SendPacket(AGENT_SESSION, pATK_SYN, sizeof(MSG_CG_BATTLE_PLAYER_ATTACK_SYN));
//++mod;
// ---TEST---
//return LFRET_SUCCESS_LOOP;
// ---TEST---
return LFRET_SUCCESS_DEFAULT;
// ---TEST---
static DWORD dwPOS_CNT = 0;
static WORD wDIR = 1;
if(dwPOS_CNT % 10 == 0)
wDIR = wDIR==1 ? 0 : 1;
dwPOS_CNT++;
do
{
static DWORD dwCC = 0;
static WORD wAA = 0;
static WORD dwI = 0;
static BYTE bystate = 1;
dwCC = 0x109391*(dwCC>>23) + (0x62999384+dwCC);
CHAR cRndCC1 = (CHAR)(dwCC>>24);
dwCC = 0x109631*(dwCC>>24) + (0x32999384+dwCC);
CHAR cRndCC2 = (CHAR)(dwCC>>24);
cRndCC1 %= 360;
cRndCC2 %= 10;
BYTE byMoveState = 1;
static BYTE stateIDs[4] =
{
KEYBOARDMOVE_FOWARD,
KEYBOARDMOVE_BACKWARD,
KEYBOARDMOVE_LEFTSTEP,
KEYBOARDMOVE_RIGHTSTEP,
};
bystate = stateIDs[dwCC%4];
MSG_CG_SYNC_KBMOVE_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_SYNC_KBMOVE_SYN>();
rMsgSYN.m_byMoveState = (BYTE)byMoveState;
CopyMemory(&rMsgSYN.wvCurPos, rVec, sizeof(rVec));
rMsgSYN.m_wAngle = (WORD) ((60+cRndCC1) * 180.0f / WZ_PI);
rMsgSYN.m_wTileIndex = 100+dwI; // g_pHero->GetPathExplorer()->GetTile();
++dwI;
WORD wAngle = rMsgSYN.m_wAngle;
BOOL bFastMove = FALSE;
WzVector vFinalDir;
wAngle = wAngle % 360;
vFinalDir.x = g_SinTable.FSIN(wAngle); vFinalDir.y = -g_SinTable.FCOS(wAngle); vFinalDir.z = 0.0f;
WzVector wvDir1, wvDir2;
//SetVector(&vFinalDir, 0.0f, 0.0f, 0.0f);
SetVector(&wvDir1, 0.0f, 0.0f, 0.0f); // 전후진 벡터
SetVector(&wvDir2, 0.0f, 0.0f, 0.0f); // 좌우 벡터
if(bFastMove)
{
if(byMoveState == CMS_TUMBLING_RIGHT)
{
wvDir2.x = vFinalDir.y;
wvDir2.y = -vFinalDir.x;
}
else if(byMoveState == CMS_TUMBLING_LEFT)
{
wvDir2.x = -vFinalDir.y;
wvDir2.y = vFinalDir.x;
}
else if(byMoveState == CMS_TUMBLING_BACK)
{
wvDir1 = -vFinalDir;
}
// 전진 숏대시
else
{
wvDir1 = vFinalDir;
}
}
else
{
// 전후진 벡터중 선택
if(byMoveState & KEYBOARDMOVE_FOWARD)
{
// 전진
wvDir1 = vFinalDir;
}
else if(byMoveState & KEYBOARDMOVE_BACKWARD)
{
// 후진
wvDir1 = -vFinalDir;
}
// 좌게걸음, 우게걸음 벡터중 선택
if(byMoveState & KEYBOARDMOVE_RIGHTSTEP)
{
wvDir2.x = vFinalDir.y; // sin(a - 90) = -cos(a) = wvDir.y;
wvDir2.y = -vFinalDir.x; // -cos(a - 90) = -sin(a) = -wvDir.x;
}
else if(byMoveState & KEYBOARDMOVE_LEFTSTEP)
{
wvDir2.x = -vFinalDir.y; // sin(a + 90) = cos(a) = -wvDir.y;
wvDir2.y = vFinalDir.x; // -cos(a + 90) = sin(a) = wvDir.x;
}
}
// 전후진 벡터와 좌우 벡터를 더한 벡터를 노멀라이즈 한 것이 최종 방향
WzVector addVec = wvDir1 + wvDir2;
VectorNormalize(&vFinalDir, &addVec);
//(*(WzVector*)&rVec) += vFinalDir;
(*(WzVector*)&rVec) += addVec;
//CopyMemory(rVec, &vFinalDir, sizeof(rVec));
rMsgSYN.Encode();
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
//if((++dwCC % 10) == 0)
//{
// wAA += 10;
//}
} while(0);
//DWORD* pD = (DWORD*)&rVec;
//static DWORD vTime = GetTickCount();
//if(vTime + 2000 > GetTickCount())
//{
// static DWORD vRnd = GetTickCount();
// vRnd = 0x440392*vRnd + (0x29133849+(vRnd>>8));
// for(DWORD i=0 ; i<3 ; ++i, ++pD)
// {
// *pD = vRnd;
// vRnd = 0x440392*vRnd + (0x29133849+(vRnd>>8));
// }
// rMsgSYN.vPos = rVec;
// rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
//}
return LFRET_SUCCESS_LOOP;
}
LF_ACTIVE_HANDLER_IMPL(S_001840_KBMOVING_CONTROL_LF)
{
DEBUGGING_CODE_L3("");
return LFRET_SUCCESS_DEFAULT;
}
LF_ACTIVE_HANDLER_IMPL(S_001900_EOL_FLOW_CONTROL_LF)
{
//DEBUGGING_CODE_L3("");
// 현재 존 상태, 그리고 새롭게 이동할 경우에 대한 처리를 담당하자.
// 그외의 상태는 현재 존 상태를 유지하면서 필요한 부분을 처리하자.
return LFRET_SUCCESS_LOOP;
}