📄 role.h
字号:
#pragma once
#include <vector> //标准容器类
using namespace std; //Std命名空间
//---脚步--------
#define UpFace 1
#define DownFace 5
#define LeftFace 7
#define RightFace 3
#define LUFace 0
#define RUFace 2
#define LDFace 6
#define RDFace 4
#define MouseNpc 100
//////////////////////
#define _AStarD //允许走斜线
//Flysky 第二版,最近很烦
struct stRoleC
{
//判断
bool IsNPC; //是不是NPC
//----------Role基本--------------
char *Name; //NPC名字
bool VS; //是否有这个人物(是否可见)
int x,y; //人物的XY坐标值
RECT roler; //人物矩形
int face; //NPC面向的方向 0. 下 1. 上 2.左 3.右
char *facePic;
//----------属性值-------------
int HP,MP; //目前的HP,MP
int MaxHP,MaxMP; //满HP和MP
int Level; //目前的等级
int Exp; //目前的经验
int MaxExp; //满血的经验
//----------寻路相关--------------
bool move;
int movex,movey; //移动目标点
//----------NPC相关---------------
char *EScrFName; //当触发人民的脚本文件名
};
struct stRole
{
//判断
bool IsNPC; //是不是NPC
//----------Role基本--------------
char Name[32]; //NPC名字
bool VS; //是否有这个人物(是否可见)
int x,y; //人物的XY坐标值
int oldx,oldy; //人物上一步的XY值
RECT roler; //人物矩形
POINT PicS; //距像素坐标的偏移
int face; //NPC面向的方向 0. 下 1. 上 2.左 3.右
bool facejd; //上一步的站向
char facePic[64];
int facej; //NPC方向的脚步 0 1 2 3
vector<POINT> zd; //遮挡列表
//----------属性值-------------
int HP,MP; //目前的HP,MP
int MaxHP,MaxMP; //满HP和MP
int Level; //目前的等级
int Exp; //目前的经验
int MaxExp; //满血的经验
//----------寻路相关--------------
bool move;
vector<POINT> Path; //各个步数
int PathSteps; //步数
int PathCSteps; //已经走过步数
int movex,movey; //移动目标点
//----------NPC相关---------------
char *EScrFName; //当触发人民的脚本文件名
bool WalkLoop; //是向前走还是倒退
//----------Surface--------------
LPDIRECTDRAWSURFACE7 lpDDS_ROLEP; //Role的图片
LPDIRECTDRAWSURFACE7 lpDDS_ROLEL; //Role的logo
};
struct stFindTable //索引表结构
{
int ID; //ID号
int value; //内容,就是X+Y是多少
};
class CRole
{
private:
CFont rfont;
vector<stRole> rl; //结构容器
vector<int> actor; //主角ID容器
vector<int> npc;//NPC ID容器
vector<stFindTable> RlFind; //显示表
CMap *Map; //地图指针
int PX,PY;
int PRole; //主要的主角ID,用来跟踪镜头
char IniFileName[MAX_PATH];
private:
//索引表
bool DRole(int ID);
int TableAdd(stFindTable sf); //向索引表中插入
int TableAdd(int ID,int value); //向索引表中插入
bool TablePX(); //排序表
int FindDataT(int Value);//返回最后一个
vector<int> FindDataTV(int Value);//返回一个容器
private:
void NPCZDS(int rlID); //遮挡计算
void OrderC(int x,int y); //队形整理
stRole StCToSt(stRoleC tmpc); //转换
private:
POINT getPY(); //获取偏移量
void Show(int ID,LPDIRECTDRAWSURFACE7 DDSurface); //总表显示一个人
void Show(int IsNPC,int ID,LPDIRECTDRAWSURFACE7 DDSurface); //IsNPC是,NPC显示,否则Actor显示
void Show(LPDIRECTDRAWSURFACE7 DDSurface); //全部显示
public:
CRole(CMap &cm); //构造函数
CRole(CMap &cm,char *FileName); //构造函数
~CRole(); //析构函数
void LoadRoleIni(char *FileName); //读取所有的Role
//添加删除
bool AddNPC(stRoleC tnpcc); //添加一个NPC
bool AddNPC(char *FileName); //从列表添加NPC
void DeleteNPC(int ID); //删除一个NPC
bool AddActor(stRoleC tactc); //添加一个NPC
bool AddActor(char *RoleIDent); //添加一个NPC
void DeleteActor(int ID); //删除一个NPC
//显示
void CheckLoop(LPDIRECTDRAWSURFACE7 DDSurface); //显示循环
//接口函数
int GetActorNum(); //获取角色数量
int GetNpcNum(); //获取角色数量
POINT ActorXy(int ID); //获取主角坐标
BOOL ActorXy(int ID,int &x,int &y); //获取主角坐标 引用
POINT NpcXy(int ID); //获取NPC坐标
BOOL NpcXy(int ID,int &x,int &y); //获取NPC坐标 引用
POINT RoleXy(int ID); //获取角色坐标
BOOL RoleXy(int ID,int &x,int &y); //获取角色坐标 引用
//角色脚本
char * GetRoleScriptName(int x,int y); //这里有没有脚本
char * GetRoleScriptName(); //主角1号的旁边是否有脚本
void RoleScript(bool IsMouse,int x=0,int y=0); //主角脚本判断
//以下都是取第一个
int NPCNameToID(char *Name); //NPC名字转ID
int ActorNameToID(char *Name); //主角名字转ID
int NameToID(char *Name); //角色名字转ID
//以上都是取第一个
//移动函数
void AMoveTo(bool IsScreen,int x,int y,bool FindPath); //主角移动
void NMoveTo(bool IsScreen,int ID,int x,int y,bool FindPath,bool ChFace=false); //NPC移动
void NAMove(bool IsScreen,bool FT,int ID,int x,int y); //NPC自动走动
void MoveTo(bool IsScreen,int ID,int x,int y,bool FindPath); //角色移动
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -