Files
Client/Server/RylServerProject/RylGameLibrary/Network/Dispatch/GameClient/SendCharQuest.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

132 lines
4.4 KiB
C++

#include "stdafx.h"
#include "SendCharQuest.h"
#include <Network/Stream/SendStream.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
#include <Creature/Character/Character.h>
bool GameClientSendPacket::SendCharStartQuest(CSendStream& SendStream, unsigned long dwCharID,
unsigned long dwNPCID, unsigned short wQuestID, unsigned short wError)
{
char* lpBuffer = SendStream.GetBuffer(sizeof(PktStartQuest));
if (NULL == lpBuffer) { return false; }
PktStartQuest* lpPktSQAck = reinterpret_cast<PktStartQuest*>(lpBuffer);
lpPktSQAck->m_dwCharID = dwCharID;
lpPktSQAck->m_dwNPCID = dwNPCID;
lpPktSQAck->m_wQuestID = wQuestID;
return SendStream.WrapCrypt(sizeof(PktStartQuest), CmdCharStartQuest, 0, wError);
}
bool GameClientSendPacket::SendCharOperateTrigger(CSendStream& SendStream, unsigned long dwCharID, unsigned short wQuestID, unsigned char cPhase,
unsigned char cTrigger, unsigned char cCount, unsigned short wError)
{
char* lpBuffer = SendStream.GetBuffer(sizeof(PktOperateTrigger));
if (NULL == lpBuffer) { return false; }
PktOperateTrigger* lpPktOTAck = reinterpret_cast<PktOperateTrigger*>(lpBuffer);
lpPktOTAck->m_dwCharID = dwCharID;
lpPktOTAck->m_wQuestID = wQuestID;
lpPktOTAck->m_cPhase = cPhase;
lpPktOTAck->m_cTrigger = cTrigger;
if (PktOperateTrigger::NO_SERVER_ERR != wError)
{
cCount++;
}
lpPktOTAck->m_cCount = cCount;
return SendStream.WrapCrypt(sizeof(PktOperateTrigger), CmdCharOperateTrigger, 0, wError);
}
bool GameClientSendPacket::SendCharQuestInfo(CSendStream& SendStream, CCharacter* lpCharacter)
{
const int MAX_BUFFER = sizeof(PktQuestDB) + PktQuestDB::MAX_EXECUTING_QUEST * sizeof(PktQuestDB::ExecutingQuest) +
PktQuestDB::MAX_HISTORY_QUEST * sizeof(unsigned short);
char szBuffer[MAX_BUFFER];
PktQuestDB* lpPktQuestDB = reinterpret_cast<PktQuestDB *>(szBuffer);
lpPktQuestDB->m_dwUID = lpCharacter->GetUID();
lpPktQuestDB->m_dwCID = lpCharacter->GetCID();
lpPktQuestDB->m_wExecuteQuestSize = 0;
lpPktQuestDB->m_wHistoryQuestSize = 0;
Quest::ExecutingQuest* ExecutingQuest = lpCharacter->GetExecutingQuest();
unsigned short *wHistoryQuest = lpCharacter->GetHistoryQuest();
int nIndex = 0;
for (nIndex = 0; nIndex < PktQuestDB::MAX_EXECUTING_QUEST; nIndex++)
{
if (NULL == ExecutingQuest[nIndex].m_QuestNode)
{
break;
}
PktQuestDB::ExecutingQuest* ExecuteQuest =
reinterpret_cast<PktQuestDB::ExecutingQuest *>(szBuffer + sizeof(PktQuestDB) + lpPktQuestDB->m_wExecuteQuestSize);
ExecuteQuest->m_wQuestID = ExecutingQuest[nIndex].m_QuestNode->m_wQuestID;
ExecuteQuest->m_cPhase = ExecutingQuest[nIndex].m_cPhase;
::memcpy(ExecuteQuest->m_cTriggerCount, ExecutingQuest[nIndex].m_cTriggerCount,
sizeof(unsigned char) * PktQuestDB::MAX_TRIGGER);
lpPktQuestDB->m_wExecuteQuestSize += sizeof(PktQuestDB::ExecutingQuest);;
}
for (nIndex = 0; nIndex < PktQuestDB::MAX_HISTORY_QUEST; nIndex++)
{
if (0 == wHistoryQuest[nIndex]) { break; }
unsigned short* wHistoryQuestForPkt =
reinterpret_cast<unsigned short *>(szBuffer + sizeof(PktQuestDB) +
lpPktQuestDB->m_wExecuteQuestSize + lpPktQuestDB->m_wHistoryQuestSize);
*wHistoryQuestForPkt = wHistoryQuest[nIndex];
lpPktQuestDB->m_wHistoryQuestSize += sizeof(unsigned short);
}
return SendStream.WrapCompress(szBuffer, sizeof(PktQuestDB) + lpPktQuestDB->m_wExecuteQuestSize + lpPktQuestDB->m_wHistoryQuestSize,
CmdQuestDB, 0, 0);
}
bool GameClientSendPacket::SendCharEndQuest(CSendStream& SendStream, unsigned long dwCharID, unsigned short wQuestID, bool bSave)
{
char* lpBuffer = SendStream.GetBuffer(sizeof(PktEndQuest));
if (NULL == lpBuffer) { return false; }
PktEndQuest* lpPktEQ = reinterpret_cast<PktEndQuest*>(lpBuffer);
lpPktEQ->m_dwCharID = dwCharID;
lpPktEQ->m_wQuestID = wQuestID;
lpPktEQ->m_bSave = bSave;
return SendStream.WrapCrypt(sizeof(PktEndQuest), CmdCharEndQuest, 0, 0);
}
bool GameClientSendPacket::SendCharCancelQuest(CSendStream& SendStream, unsigned long dwCharID,
unsigned short wQuestID, unsigned short wError)
{
char* lpBuffer = SendStream.GetBuffer(sizeof(PktCancelQuest));
if (NULL == lpBuffer) { return false; }
PktCancelQuest* lpPktCQ = reinterpret_cast<PktCancelQuest*>(lpBuffer);
lpPktCQ->m_dwCharID = dwCharID;
lpPktCQ->m_wQuestID = wQuestID;
return SendStream.WrapCrypt(sizeof(PktCancelQuest), CmdCharCancelQuest, 0, wError);
}