Files
Client/GameTools/GLOBALSCRIPT/Creature/NPC/NPCList.h
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

214 lines
4.7 KiB
C++

// NPCList.h: interface for the CNPCList class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_)
#define AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <windows.h>
#include <vector>
#define TRIGGER_START 0
#define TRIGGER_PUTON 1
#define TRIGGER_GETON 2
#define TRIGGER_TALK 3
#define TRIGGER_KILL 4
#define TRIGGER_PICK 5
#define EVENT_DISAPPEAR 0
#define EVENT_GET 1
#define EVENT_SPAWN 2
#define EVENT_MONSTERDROP 3
#define EVENT_DROP 4
#define EVENT_AWARD 5
#define EVENT_MSGBOX 6
#define EVENT_PHASE 7
using namespace std;
typedef struct ITEMNode
{
unsigned short m_wKindItem;
unsigned short m_wSkill;
unsigned short m_wSkillLevel;
unsigned short m_wTabPage;
unsigned long m_dwIndexPosition;
} ITEMNode, *LPITEMNode;
typedef struct DialogNode
{
unsigned short m_wKindWord;
unsigned short m_wDialogFlag;
unsigned long m_dwFlag;
char *m_strWord;
} DialogNode, *LPDialogNode;
typedef struct WarpNode
{
unsigned short m_wNumber;
unsigned short m_wZoneNumber;
float m_fPosX;
float m_fPosY;
float m_fPosZ;
} WarpNode, *LPWarpNode;
typedef struct EventNode
{
unsigned long m_dwEventKind;
unsigned long m_dwEventNumber;
unsigned long m_dwEventAmount;
float m_fPosX;
float m_fPosY;
float m_fPosZ;
char *m_strWord;
} EventNode, *LPEventNode;
typedef struct TriggerNode
{
unsigned long m_dwTriggerKind;
unsigned long m_dwTriggerID;
unsigned long m_dwZoneID;
float m_fPosX;
float m_fPosY;
float m_fPosZ;
float m_fDistance;
vector<LPEventNode> m_lstEvent;
} TriggerNode, *LPTriggerNode;
typedef struct PhaseNode
{
unsigned long m_dwPhaseNumber;
char *m_strPhaseDesc;
vector<LPTriggerNode> m_lstTrigger;
} PhaseNode, *LPPhaseNode;
typedef struct QuestNode
{
unsigned short m_wQuestID;
unsigned short m_wMaxPhase;
unsigned short m_wMinLevel;
unsigned short m_wMaxLevel;
unsigned long m_dwClass;
unsigned long m_dwCompletedQuest;
char *m_strQuestTitle;
vector<LPPhaseNode> m_lstPhase;
} QuestNode, *LPQuestNode;
typedef struct NPCNode
{
unsigned long m_dwUID;
unsigned long m_dwJob;
float m_fDirection;
float m_fPosX, m_fPosY, m_fPosZ;
char *m_strNpcSkin;
char *m_strNpcName;
vector<LPITEMNode> m_lstItem;
vector<LPDialogNode> m_lstScript;
vector<LPWarpNode> m_lstWarpZone;
vector<LPQuestNode> m_lstQuest;
LPITEMNode GetITEMNode(unsigned short wKindItem)
{
vector<LPITEMNode>::iterator it;
for(it = m_lstItem.begin(); it != m_lstItem.end(); it++)
{
if((*it)->m_wKindItem == wKindItem) return (*it);
}
return NULL;
}
LPDialogNode GetScript(unsigned short wPage)
{
vector<LPDialogNode>::iterator it;
for(it = m_lstScript.begin(); it != m_lstScript.end(); it++)
{
if((*it)->m_wKindWord == wPage) return (*it);
}
return NULL;
}
LPWarpNode GetWarpNode(unsigned short wNumber)
{
vector<LPWarpNode>::iterator it;
for(it = m_lstWarpZone.begin(); it != m_lstWarpZone.end(); it++)
{
if((*it)->m_wNumber == wNumber) return (*it);
}
return NULL;
}
LPQuestNode GetQuestforID(unsigned short wQuestID)
{
vector<LPQuestNode>::iterator it;
for(it = m_lstQuest.begin(); it != m_lstQuest.end(); it++)
{
if((*it)->m_wQuestID == wQuestID) return (*it);
}
return NULL;
}
LPQuestNode GetQuestforNumber(unsigned short wNumber)
{
if(m_lstQuest.size() > wNumber)
{
return m_lstQuest[wNumber];
}
return NULL;
}
const char *GetGreeting(void)
{
vector<LPDialogNode>::iterator it;
for(it = m_lstScript.begin(); it != m_lstScript.end(); it++)
{
if((*it)->m_wKindWord == 0) return (*it)->m_strWord;
}
return NULL;
}
void SearchQuestList(unsigned long m_dwLevel, unsigned long m_dwClass, unsigned short *m_lstCompleted, unsigned short m_wNumCompleted, unsigned short *m_lstQuestList);
} NPCNode, *LPNPCNode;
class CNPCList
{
protected:
vector<LPNPCNode> m_lstNpcNode;
unsigned long m_dwZone;
public:
LPQuestNode m_lpQuestNode;
LPPhaseNode m_lpPhaseNode;
LPTriggerNode m_lpTriggerNode;
const char *GetGreeting(unsigned long dwUID);
void DestroyNPCList(void);
LPITEMNode GetITEMNode(unsigned short wKindItem);
LPNPCNode GetNPCNode(unsigned long dwUID);
LPNPCNode GetNPCNodeByOrder(unsigned long dwOrder) { return m_lstNpcNode[dwOrder]; }
void AddNpc(LPNPCNode lpNewNode);
BOOL IsExistNpc(unsigned long dwUID);
CNPCList();
~CNPCList();
BOOL Load(const char *strScriptFile, const char *strQuestFile, unsigned long dwZone = 1);
void Create(void);
unsigned long GetNpcNum(void) { return m_lstNpcNode.size(); }
unsigned long GetZone(void) { return m_dwZone; }
};
extern CNPCList g_NPCList;
#endif // !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_)