📄 px_ls_map.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 + -