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

📄 px_ls_monster.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>


#include "px_ls_discharge_skill.h"
#include "px_ls_passive_effect.h"
/************************************************************************
约定:
普通级别怪物可以具有2种攻击技能
普通boss级怪物可以具有2+1种技能
地图级boss可以具有2+2种技能
精英级怪物可以具有2+3种技能
每一种怪物最多可以同时为4个不同的组队或者类似主体开放经验获得
************************************************************************/

/* common macro define */
#define MAX_MONSTER_NAME_LEN	12	/* 怪物名称 */

//以下为定义怪物的种类
#define MONSTER_TYPE_NORMAL							1				//普通怪物
#define MONSTER_TYPE_DEFENCE_COUNTRY				2				//在攻城战中,被守城一方购买的佣兵
#define MONSTER_TYPE_ATTACK_COUNTRY					3				//在攻城战中,被攻城一方购买的佣兵
#define MONSTER_TYPE_SPECIFY						4				//特别的怪物
#define MONSTER_TYPE_REVENGE						5				//复仇怪物,用来平衡服务器内玩家而设
#define MONSTER_TYPE_REVENGE_BOSS					6				//复仇怪物头目
#define MONSTER_TYPE_TASK_ONLY						7				//任务怪物	
#define MONSTER_TYPE_DEFENCE_COUNTRY_BOSS			8				//守城boss级佣兵
#define MONSTER_TYPE_ATTACK_COUNTRY_BOSS			9				//攻城boss级佣兵
#define MONSTER_TYPE_NORMAL_BOSS					10				//普通boss级怪物
#define MONSTER_TYPE_MAPAREA_BOSS					11				//地图区域级boss怪物
#define MONSTER_TYPE_ELIT_BOSS						12				//超级精英类怪物

/*
*	怪物的各种状态,没有实现
*/
#define MONSTER_STATE_NORMAL						1				//普通
#define MONSTER_STATE_ENRAGE						2				//激怒

/*
*	怪物技能
*/
typedef struct tagMonster_Skill {
	int		skill_id;	/* 技能基id */
	byte	ratio;		/* 此技能施放的几率,0~100 之间 */
}MONSTER_SKILL, * LPMONSTER_SKILL;

/*
*	怪物基础
*/
typedef struct tagMonster_Base {
	int			baseid;								/* 序号或者基id  */
	char		name[MAX_MONSTER_NAME_LEN];			/* 名称  */
	int			level;								/* 等级 */
	float		drop_ratio_money;					/* 金钱掉落几率  */
	float		drop_ratio_otheritem;				/* 其他道具掉落几率  */
	byte		max_num_drop_item;					/* 最大掉落道具数目  */
	byte		monster_type;						// 怪物种类
	BOOL		active_attack;						/* 是否主动攻击型怪物  */
	WORD		hp;									/* hp  */
	WORD		mana;								/* mana  */
	WORD		damage_min;							/* 最小攻击力  */
	WORD		damage_max;							/* 最大攻击力  */
	WORD		defence;							/* 防御  */
	WORD		attack_veracity;					/* 攻击准确性  */
	byte		move_range;							/* 活动范围  */
	int			exp_give;							/* 经验 */	
	int			item_task;							/* 任务道具 */
	float		ratio_item_task;					/* 任务道具掉落几率 */
	/* resist */
	byte		physic_resist;						/* 物理抵抗  */
	byte		magic_resist;						/* 魔法抵抗  */
	byte		cold_resist;						/* 冰系抵抗  */
	byte		poison_resist;						/* 毒系抵抗  */
	byte		ligthing_resist;					/* 电系抵抗  */
	byte		fire_resist;						/* 火系抵抗  */
	/* fast recovery and protect */
	byte		fbs;								/* 快速格挡速度			fbs(fast block speed) */
	byte		fce;								/* 快速施法速度 - 元素	fce(fast cast element skill) */
	byte		fcm;								/* 快速施法速度 - 魔法	fcm(fast cast magic skill) */
	byte		fcp;								/* 快速施法速度 - 物理	fcp(fast cast physic skill) */
	byte		fcr;								/* 快速冰冻恢复			fcr(fast colden recovery) */
	byte		fhr;								/* 快速打击恢复			fhr(fast hit recovery) */
	byte		flr;								/* 快速撕裂伤口恢复		flr(fast lancaster damage recovery) */
	byte		fmr;								/* 快速魔法伤害恢复		fmr(fast magic damage recvovery) */
	byte		fms;								/* 快速移动速度			fms(fast move speed) */
	byte		fpr;								/* 快速中毒恢复			fpr(fast poison recovery) */
	byte		fsr;								/* 快速打晕恢复			fsr(fast stun recovery) */
	byte		fss;								/* 快速召唤速度			fss(fast summon speed) */
	/* skill */
	MONSTER_SKILL monster_skill[5];					/* 怪物技能  */

}MONSTER_BASE, * LPMONSTER_BASE;

/*
*	怪物复仇事件
*	仅发生在服务器支持,且复仇条件满足的情况下
*	发生此事件时,怪物的各种属性等都相应提升15~30%,但各种frame影响数做相应下调
*	同时怪物掉落顶级道具的几率提升30~50%或者配置
*	revenge
*/
typedef struct tagEvent_Revenge {	
	float		property_enhance_ratio;				/* 怪物或者类似主体属性增强? */
	float		item_toplevel_drop_level_add;		/* 顶级道具掉落率提升? */
	int			start_frame;
	int			persist_frame;
}EVENT_REVENGE, * LPEVENT_REVENGE;

/*
*	复仇怪物刷新
*/
typedef struct tagRevenge_Monster_Refresh {
	int			baseid;						/* 此刷新怪物基id */
	int			mapid;						/* 刷新地图id */
	byte		mapx;						/* 坐标x */
	byte		mapy;						/* 坐标y */
	byte		num_refresh;				/* 刷新数量 */	
	int			session_start;				/* 会话开始id */
	int			interval_seconds;			/* 刷新间隔时间,以秒计 */
}REVENGE_MONSTER_REFRESH, * LPREVENGE_MONSTER_REFRESH;
/*
*	怪物刷新结构
*/
typedef struct tagMonster_Refresh {
	int			baseid;						/* 此刷新怪物基id */
	int			mapid;						/* 刷新地图id */
	byte		mapx;						/* 坐标x */
	byte		mapy;						/* 坐标y */
	byte		num_refresh;				/* 刷新数量 */	
	int			session_start;				/* 会话开始id */
	int			interval_seconds;			/* 刷新间隔时间,以秒计 */
}MONSTER_REFRESH, * LPMONSTER_REFRESH;

/*
*	怪物
*/
typedef struct tagMonster {
	int		session_id;						/* 会话id */
	int		baseid;							/* 怪物的基础id */
	int		state;							/* 当前状态 */
	int		level;							/* 怪物等级 */
	byte	check_code;						//校验码

	int		mapid;							/* 所在地图id */
	byte	mapx;							/* 坐标x */
	byte	mapy;							/* 坐标y */
	byte	mapz;							/* 坐标z */
	byte	direction;						/* 当前面向方向 */
	WORD	move_range;						/* 活动范围  */

	float	move_speed;						/* 移动速度,为一帧移动距离 */
	byte	move_state;						/* 移动状态,走动?加速至跑动状态?跑动?飞行?飞行停止过程中?跑动停止过程中? */

	float	hp_increase_frame;				/* hp每帧恢复数值 */
	float	mana_increast_frame;			/* mana每帧恢复数值 */
	float	sp_increase_frame;				/* sp每帧恢复数值 */
	int		base_frame;						/* 帧数基值 */
	WORD	last_handled_frame;				/* 最后一次处理帧数 */


	byte	physic_resist;					/* 物理抵抗  */
	byte	magic_resist;					/* 魔法抵抗  */
	byte	cold_resist;					/* 冰系抵抗  */
	byte	poison_resist;					/* 毒系抵抗  */
	byte	ligthing_resist;				/* 电系抵抗  */
	byte	fire_resist;					/* 火系抵抗  */

	byte	curr_skill_type;				/* 当前技能类型 */
	int		curr_skill_id;					/* 当前技能id */

	BOOL	active_attack;					/* 是否主动攻击型怪物  */
	WORD	attack_veracity;				/* 攻击准确性  */
	WORD	damage_min;						/* 最小攻击力  */
	WORD	damage_max;						/* 最大攻击力  */
	byte	damage_resist_base;				/* 与攻击相关的施加抵抗基值 */
	WORD	hp_curr;						/* 当前hp */
	WORD	mana_curr;						/* 当前mana */
	WORD	sp_curr;						/* 当前sp */
	WORD	defence_curr;					/* 当前防御 */
	byte	block_ratio;					/* 格挡率 */
	byte	attack_ratio;					/* 攻击成功率 */
	byte	physics_damage_decrease_ratio;	/* 物理伤害减免率 */
	byte	magic_damage_decrease_ratio;	/* 魔法伤害减免率 */
	byte	element_damage_decrease_ratio;	/* 元素伤害减免率 */

	byte	block_frame;					/* 快速格挡帧数 */
	byte	start_cast_frame;				/* 技能启动帧数 */
	byte	cast_frame;						/* 技能释放帧数 */
	byte	cold_frame;						/* 技能冷却帧数 */
	byte	delay_frame;					/* 技能延迟帧数 */
	byte	cold_recovery_frame;			/* 冰冻恢复帧数 */
	byte	hit_recovery_frame;				/* 打击恢复帧数 */
	byte	lancinate_recovery_frame;		/* 撕裂伤口恢复帧数 */
	byte	magic_damage_recovery_frame;	/* 魔法伤害恢复帧数 */
	byte	poison_recovery_frame;			/* 中毒恢复帧数 */
	byte	stun_recovery_frame;			/* 打晕恢复帧数 */
	byte	curse_recovery_frame;			/* 诅咒恢复帧数 */

	WORD	last_block_frame;				/* 最后一次格挡帧数 */
	WORD	last_cast_frame;				/* 最后一次释放帧数 */
	WORD	last_hit_recovery_frame;		/* 最后一次打击恢复帧数 */
	WORD	last_lancinate_recovery_frame;	/* 最后一次撕裂伤口恢复帧数 */
	WORD	last_magic_damage_recovery_frame;/* 最后一次魔法上海恢复帧数 */
	WORD	last_stun_recovery_frame;		/* 最后一次打晕恢复帧数 */
	byte	lancinate_surplus_frame;		/* 撕裂伤口剩余帧数 */
	byte	magic_damage_surplus_frame;		/* 魔法伤害剩余帧数 */

	DISCHARGE_SKILL * pdischarge_skill;
	PASSIVE_EFFECT * ppassive_effect;
}MONSTER, * LPMONSTER;

/*
*	怪物搜索键
*/
typedef struct tagMonster_Key {
	byte	state;									/* 状态 */
	MONSTER * pmonster;								/* 指向怪物 */
}MONSTER_KEY, * LPMONSTER_KEY;

void handle_all_monster_staff(void);
void handle_all_monster_ai(void);
void refresh_monster(void);

⌨️ 快捷键说明

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