Merge pull request #37 from SunTrustDev/bugfix/std-1

This commit is contained in:
rtw1x1
2025-12-26 07:03:28 +00:00
committed by GitHub
6 changed files with 36 additions and 0 deletions

View File

@@ -132,6 +132,7 @@ class CInputMain : public CInputProcessor
void QuestInputString(LPCHARACTER ch, const void * pvData); void QuestInputString(LPCHARACTER ch, const void * pvData);
void QuestConfirm(LPCHARACTER ch, const void* pvData); void QuestConfirm(LPCHARACTER ch, const void* pvData);
void QuestCancel(LPCHARACTER ch);
void Target(LPCHARACTER ch, const char * pcData); void Target(LPCHARACTER ch, const char * pcData);
void Warp(LPCHARACTER ch, const char * pcData); void Warp(LPCHARACTER ch, const char * pcData);
void SafeboxCheckin(LPCHARACTER ch, const char * c_pData); void SafeboxCheckin(LPCHARACTER ch, const char * c_pData);

View File

@@ -2056,6 +2056,12 @@ void CInputMain::QuestConfirm(LPCHARACTER ch, const void* c_pData)
} }
} }
void CInputMain::QuestCancel(LPCHARACTER ch)
{
sys_log(0, "QuestCancel from %s pid %u", ch->GetName(), ch->GetPlayerID());
quest::CQuestManager::Instance().Cancel(ch->GetPlayerID());
}
void CInputMain::Target(LPCHARACTER ch, const char * pcData) void CInputMain::Target(LPCHARACTER ch, const char * pcData)
{ {
TPacketCGTarget * p = (TPacketCGTarget *) pcData; TPacketCGTarget * p = (TPacketCGTarget *) pcData;
@@ -3272,6 +3278,10 @@ int CInputMain::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
QuestConfirm(ch, c_pData); QuestConfirm(ch, c_pData);
break; break;
case HEADER_CG_QUEST_CANCEL:
QuestCancel(ch);
break;
case HEADER_CG_TARGET: case HEADER_CG_TARGET:
Target(ch, c_pData); Target(ch, c_pData);
break; break;

View File

@@ -34,6 +34,7 @@ enum
HEADER_CG_SCRIPT_ANSWER = 29, HEADER_CG_SCRIPT_ANSWER = 29,
HEADER_CG_QUEST_INPUT_STRING = 30, HEADER_CG_QUEST_INPUT_STRING = 30,
HEADER_CG_QUEST_CONFIRM = 31, HEADER_CG_QUEST_CONFIRM = 31,
HEADER_CG_QUEST_CANCEL = 32,
HEADER_CG_SHOP = 50, HEADER_CG_SHOP = 50,
HEADER_CG_FLY_TARGETING = 51, HEADER_CG_FLY_TARGETING = 51,
@@ -806,6 +807,11 @@ typedef struct command_quest_confirm
uint32_t requestPID; uint32_t requestPID;
} TPacketCGQuestConfirm; } TPacketCGQuestConfirm;
typedef struct command_quest_cancel
{
uint8_t header;
} TPacketCGQuestCancel;
/* /*
* 서버 측에서 보내는 패킷 * 서버 측에서 보내는 패킷
*/ */

View File

@@ -174,6 +174,7 @@ CPacketInfoCG::CPacketInfoCG()
Set(HEADER_CG_SCRIPT_BUTTON, sizeof(TPacketCGScriptButton), "ScriptButton", true); Set(HEADER_CG_SCRIPT_BUTTON, sizeof(TPacketCGScriptButton), "ScriptButton", true);
Set(HEADER_CG_QUEST_INPUT_STRING, sizeof(TPacketCGQuestInputString), "QuestInputString", true); Set(HEADER_CG_QUEST_INPUT_STRING, sizeof(TPacketCGQuestInputString), "QuestInputString", true);
Set(HEADER_CG_QUEST_CONFIRM, sizeof(TPacketCGQuestConfirm), "QuestConfirm", true); Set(HEADER_CG_QUEST_CONFIRM, sizeof(TPacketCGQuestConfirm), "QuestConfirm", true);
Set(HEADER_CG_QUEST_CANCEL, sizeof(TPacketCGQuestCancel), "QuestCancel", true);
Set(HEADER_CG_MOVE, sizeof(TPacketCGMove), "Move", true); Set(HEADER_CG_MOVE, sizeof(TPacketCGMove), "Move", true);
Set(HEADER_CG_SYNC_POSITION, sizeof(TPacketCGSyncPosition), "SyncPosition", true); Set(HEADER_CG_SYNC_POSITION, sizeof(TPacketCGSyncPosition), "SyncPosition", true);

View File

@@ -381,6 +381,23 @@ namespace quest
} }
} }
void CQuestManager::Cancel(unsigned int pc)
{
PC * pPC = GetPC(pc);
if (pPC && pPC->IsRunning())
{
sys_log(0, "QUEST: Dialog cancelled by player %u, cleaning up quest state (quest: %s)", pc, pPC->GetCurrentQuestName().c_str());
CloseState(*pPC->GetRunningQuestState());
pPC->CancelRunning();
}
else
{
sys_log(0, "QUEST: Cancel requested for player %u but no quest is running", pc);
}
}
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
// //
// Quest Event 관련 // Quest Event 관련

View File

@@ -114,6 +114,7 @@ namespace quest
void SelectItem(unsigned int pc, unsigned int selection); void SelectItem(unsigned int pc, unsigned int selection);
void LogoutPC(LPCHARACTER ch); void LogoutPC(LPCHARACTER ch);
void Cancel(unsigned int pc);
void DisconnectPC(LPCHARACTER ch); void DisconnectPC(LPCHARACTER ch);
QuestState * GetCurrentState() { return m_CurrentRunningState; } QuestState * GetCurrentState() { return m_CurrentRunningState; }