⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 px_ls_map.h

📁 MMORPG游戏服务器端架构及函数
💻 H
字号:
#pragma	  once

/* must been first include begin */
#include "..\ProjectX_Common\ProjectX_Copyright.h"
#include "..\ProjectX_Common\ProjectX_Common.h"
/* must been first include end */

/* std and common include */
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>


//以下为定义地图上处于第一层的地图点属性

#define MAP_LEVEL_LOW_NORMAL					1				//普通地面
#define MAP_LEVEL_LOW_SHOAL						2				//浅水区
#define MAP_LEVEL_LOW_DEEPWATER					3				//深水区
#define MAP_LEVEL_LOW_MAGMA						4				//岩浆
#define MAP_LEVEL_LOW_MARISH					5				//沼泽
#define MAP_LEVEL_LOW_TPPOINTER					6				//传送点
#define MAP_LEVEL_LOW_RAMPART					7				//城墙
#define MAP_LEVEL_LOW_HILLOCK					8				//小土堆
#define MAP_LEVEL_LOW_BOX						9				//木箱
#define MAP_LEVEL_LOW_TREE						10				//树木
#define MAP_LEVEL_LOW_DEADLINE					11				//死亡地带
#define MAP_LEVEL_LOW_SPACE						12				//空地带,为服务器没使用区域
#define MAP_LEVEL_LOW_CITYGATE					13				//城门
#define MAP_LEVEL_LOW_ISOLATION					14				//隔离地带,为完全隔离

//以下为定义在游戏中可能出现的主体类别

#define ACITVITY_TYPE_NONE						0				//什么也没有
#define ACTIVITY_TYPE_PLAYER					1				//玩家
#define ACTIVITY_TYPE_NPC						2				//NPC
#define ACTIVITY_TYPE_GENIUS					4				//精灵
#define ACITVITY_TYPE_MONSTER					5				//怪物
#define ACTIVITY_TYPE_BEASTIE					6				//小动物
#define ACTIVITY_TYPE_MACHINE_BEAST				7				//机械兽
#define ACTIVITY_TYPE_GM						8				//GM
#define ACTIVITY_TYPE_COUNTRY_GUARDER			9				//守城佣者
#define ACTIVITY_TYPE_COUNTRY_AGGRESSER			10				//入侵城堡佣者
#define ACTIVITY_TYPE_FUNNER					11				//特殊搞笑小丑
#define ACTIVITY_TYPE_CARD_TOUR					12				//卡片传播者
#define ACTIVITY_TYPE_TRAP						13				//陷阱
#define ACTIVITY_TYPE_DRAGON					14				//龙,由于版本为非正式版本,没有在地图上提供AH支持,谨约定可以出现,但结果不确定
#define ACTIVITY_TYPE_ITEM						15				//道具
#define ACTIVITY_TYPE_SCROLL_DOOR				16				//传送门

#define MAX_MAPNAME_LEN							20	

typedef struct tagTrance_Entity {
	int		sessionid;
	struct tagTrance_Entity * pNext;
}TRANCE_ENTITY, * LPTRANCE_ENTITY;

//以下为定义地图上单个矩阵点所属属性及内容
typedef struct tagPOINTER_STRUCT {
	/*
	been commentted,just because MMap's tow dimesion has index the right pos of X and Y
	byte	posx;											//X坐标
	byte	posy;											//Y坐标
	*/
	int		id1;											//第一层占据者id
	int		id2;											//第二层占据者id
	byte	posz;											//Z坐标
	byte	property;										//属性和状态
	byte	type1;											//第一层占据者类别
	byte	type2;											//第二层占据者类别
}POINTER_STRUCT, * LPPOINTER_STRUCT;

typedef struct tagMap_Header {
	char	name[8];										// "ProjectX";
	char	version[17];									// "Version 1.00.0143";
	char	author[2];										// "MS";
	char	platform[7];									// "win-x86";
	char	copyright[4];									// "TRUE";
}MAP_HEADER, * LPMAP_HEADER;

typedef struct tagSingle_Point {
	byte	posx;
	byte	posy;
	byte	posz;
	byte	property;
}SINGLE_POINT, * LPSINGLE_POINT;

typedef struct tagPx_LS_Map {
	int						mapUID;							//地图uid
	char					name[MAX_MAPNAME_LEN];			//地图名称
	int						mapLevel;						//地图等级
	int						request_level_low;				//进入此地图最低等级
	int						request_level_high;				//推荐进入此地图的最高等级
	BOOL					vip_map;						//VIP专属地图?
	BOOL					pk_support;						//是否运行在此地图区域进行pk行为
	BOOL					pk;								//当前是否正在举行pk赛
	int						pk_start_frame;					//pk开始帧数
	int						pk_interval;					//pk赛举行间隔时间,以服务器开始运行时间计
	int						last_pk_time;					//上一此pk结束时间
	int						pk_persist_time;				//pk持续时间
	POINTER_STRUCT			mp[MAP_SIZEX][MAP_SIZEY];		//地图数据载体

	TRANCE_ENTITY	*		ptrance_scroll_door;			/* 传送门 */
	TRANCE_ENTITY	*		ptrance_trap;					/* 陷阱 */
	TRANCE_ENTITY	*		ptrance_monster;				/* 怪物 */
	TRANCE_ENTITY	*		ptrance_player;					/* 玩家 */	
	TRANCE_ENTITY	*		ptrance_npc;					/* NPC */	
	TRANCE_ENTITY	*		ptrance_gm;						/* GM */
	TRANCE_ENTITY	*		ptrance_item;					/* 道具 */
}PX_LS_MAP, * LPPX_LS_MAP;

/*
*	传送点
*/
typedef struct tagTeleport_Point_Base {
	int			index;
	int			src_mapid;
	byte		src_mapx;
	byte		src_mapy;
	byte		src_range;
	int			dest_mapid;
	byte		dest_mapx;
	byte		dest_mapy;
	byte		teleport_range;
}TELEPORT_POINT_BASE, * LPTELEPORT_POINT_BASE;


/************************************************************************

此文件为有关map的详细实现说明,
约定:
1	:所有链表内部的sessionid值,由global_entity_counter的相应值为上限,
当有同类实体需要动态创建时,此上限值加1,同时赋值为链表内部的新
sessionid,若在动态创建时,发现原有链表内部有可以重用的条目,即其状态
值state为freeuse,其sessionid不变,且相应上限不变
2	:采用1所示实现方式,在某一特殊情况下,服务器有可能在性能上有一定出入,
但长久运行,可以实现动态负载平衡
3	:由于在LS及所有ProjectX模块中,帐号及角色为特殊实体,并且考虑到单一LS
服务器设计可以承载的数量为0-10000数量之间,同时在LS内部,帐号或者角色
是采用sessionid作为通信凭证,固采用了全局raw c lang 数组实现,而非使用
动态数组实现方式,在同第三方实体进行交互时请区别对待
4	:support FIXME!

************************************************************************/

//关于地图单一矩阵点的属性编码格式及代表内容说明,此属性占用1*sizeof(char)大小,即8bits,具体编码格式为:
//		[1 1 1 1 ]			  [1]			 [ 1]			  [ 1 1]
//		[为此点属性,如沼泽] + [是否可以pk] + [是否为安全区] + [是否为攻城区域]
//详细说明:
//first 4bits 是说明此点的物理类型,如是普通地面,在为0001,浅水区则是0010,等...
//5th bit 是说明此点是否为可以pk区域,若是为1,否为0
//6tg bit 是说明此点是否为安全区域,但不包括此地图上可以用来做为攻城的城池内部安全区
//last 2bits 是说明此点是否为攻城区域,若此点不是攻城区域,在攻城期间,此点维持不变,即为00,
//但若此但为攻城区域,在攻城期间,若之前pk为1,则将更改为11,否则,将更改为10,同时在攻城结束之后,左相应的复原.

/************************************************************************

|			|
topleft	|	 top	|  topright
--------|-----------|--------
|			|
left	|	center	|  right
|			|
--------|-----------|--------
bottomleft	|	bottom	|  bottomright
|			|

************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -