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

📄 px_ls_uninit.c

📁 MMORPG游戏服务器端架构及函数
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 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 <winsock2.h>

//program specify include
#include "..\ProjectX_Common\ProjectX_Shared.h"
#include "..\ProjectX_Common\ProjectX_Utils.h"
#include "..\ProjectX_Common\ProjectX_MessageCode.h"
#include "px_ls_common.h"
#include "px_ls_config.h"
#include "px_ls_state.h"
#include "px_ls_statistic.h"
#include "px_ls_time_service.h"
#include "px_ls_ui.h"

#include "px_ls_account.h"
#include "px_ls_antihack.h"
#include "px_ls_battle_guid.h"
#include "px_ls_blacklist.h"
#include "px_ls_char.h"
#include "px_ls_char_class.h"
#include "px_ls_charge.h"
#include "px_ls_chat_radio.h"
#include "px_ls_chat_video.h"
#include "px_ls_community.h"
#include "px_ls_friends.h"
#include "px_ls_gm.h"
#include "px_ls_item.h"
#include "px_ls_log.h"
#include "px_ls_lottery.h"
#include "px_ls_map.h"
#include "px_ls_marriage.h"
#include "px_ls_master_prentice.h"
#include "px_ls_module_dbes.h"
#include "px_ls_module_rs.h"
#include "px_ls_module_work.h"
#include "px_ls_monster.h"
#include "px_ls_npc.h"
#include "px_ls_passive_effect.h"
#include "px_ls_pet.h"
#include "px_ls_pk.h"
#include "px_ls_roup.h"
#include "px_ls_skill.h"
#include "px_ls_speed_frame.h"
#include "px_ls_stranger.h"
#include "px_ls_task.h"
#include "px_ls_team.h"
#include "px_ls_trade.h"
#include "px_ls_trap.h"
#include "px_ls_version.h"
#include "px_ls_war_guid.h"

#include "px_ls_uninit.h"
/* extern variant define */
/* frame base */
extern FRAME_FBS_BASE			*	frame_fbs_base_head;			/* fbs */
extern FRAME_FCE_BASE			*	frame_fce_base_head;			/* fce */
extern FRAME_FCM_BASE			*	frame_fcm_base_head;			/* fcm */	
extern FRAME_FCP_BASE			*	frame_fcp_base_head;			/* fcp */
extern FRAME_FCR_BASE			*	frame_fcr_base_head;			/* fcr */
extern FRAME_FHR_BASE			*	frame_fhr_base_head;			/* fhr */
extern FRAME_FLR_BASE			*	frame_flr_base_head;			/* flr */
extern FRAME_FMR_BASE			*	frame_fmr_base_head;			/* fmr */
extern FRAME_FMS_BASE			*	frame_fms_base_head;			/* fms */
extern FRAME_FPR_BASE			*	frame_fpr_base_head;			/* fpr */
extern FRAME_FSR_BASE			*	frame_fsr_base_head;			/* fsr */
extern FRAME_FSS_BASE			*	frame_fss_base_head;			/* fss */

extern PX_LS_EXP_BASE			*	exp_base_head;					/* exp */

/* item_defence base */
extern ITEM_AMULET_BASE			*	item_amulet_base_head;			/* 项链 */
extern ITEM_ARMOR_BASE			*	item_armor_base_head;			/* 衣服 */
extern ITEM_BELT_BASE			*	item_belt_base_head;			/* 腰带 */
extern ITEM_BOOT_BASE			*	item_boot_base_head;			/* 靴子 */
extern ITEM_EYE_BASE			*	item_eye_base_head;				/* 眼罩 */
extern ITEM_GLOVE_BASE			*	item_glove_base_head;			/* 护手 */
extern ITEM_GUARDIANSHIP_BASE	*	item_guardianship_base_head;	/* 守护 */
extern ITEM_HELM_BASE			*	item_helm_base_head;			/* 头盔 */
extern ITEM_LEGGUARD_BASE		*	item_legguard_base_head;		/* 护腿 */
extern ITEM_MANTLE_BASE			*	item_mantle_base_head;			/* 披风 */
extern ITEM_RING_BASE			*	item_ring_base_head;			/* 戒指 */
extern ITEM_SHIELD_BASE			*	item_shield_base_head;			/* 盾牌 */
extern ITEM_SHIRT_BASE			*	item_shirt_base_head;			/* 内衣 */
extern ITEM_WING_BASE			*	item_wing_base_head;			/* 翅膀 */
extern ITEM_TALISMAN_BASE		*	item_talisman_base_head;		/* 护身符 */

/* item_weapon base */
extern ITEM_AX_BASE				*	item_ax_base_head;				/* 斧子 */
extern ITEM_BOW_BASE			*	item_bow_base_head;				/* 弓 */
extern ITEM_CROSSBOW_BASE		*	item_crossbow_base_head;		/* 弩 */
extern ITEM_DANGGER_BASE		*	item_dangger_base_head;			/* 匕首 */
extern ITEM_DECONTICATETOOL_BASE *	item_deconticatetool_base_head;	/* 剥皮工具 */
extern ITEM_HERBALTOOL_BASE		*	item_herbaltool_base_head;		/* 收集草药工具 */
extern ITEM_LEAF_BASE			*	item_leaf_base_head;			/* 亡灵荷叶 */
extern ITEM_MACE_BASE			*	item_mace_base_head;			/* 顶头锤 */
extern ITEM_MAGICSTAFF_BASE		*	item_magicstaff_base_head;		/* 法杖 */
extern ITEM_MININGTOOL_BASE		*	item_miningtool_base_head;		/* 采矿工具 */
extern ITEM_POWERSTAFF_BASE		*	item_powerstaff_base_head;		/* 权杖 */
extern ITEM_REAMER_BASE			*	item_reamer_base_head;			/* 刀 */
extern ITEM_SHAFT_BASE			*	item_shaft_base_head;			/* 矛 */
extern ITEM_SPEAR_BASE			*	item_spear_base_head;			/* 枪 */
extern ITEM_STAVE_BASE			*	item_stave_base_head;			/* 棍棒 */
extern ITEM_SWORD_BASE			*	item_sword_base_head;			/* 剑 */

/* item_staff base */
extern ITEM_CONSUMER_BASE		*	item_consumer_base_head;		/* 消耗品 */
extern ITEM_GEM_BASE			*	item_gem_base_head;				/* 珠宝 */
extern ITEM_GUID_BASE			*	item_guid_base_head;			/* 战盟或者血盟物品 */
extern ITEM_PET_SPAWN_BASE		*	item_pet_spawn_base_head;		/* 宠物 */
extern ITEM_RESTORE_BASE		*	item_restore_base_head;			/* 恢复药剂 */
extern ITEM_SKILL_BASE			*	item_skill_base_head;			/* 技能书或者技能石 */
extern ITEM_SPECIAL_BASE		*	item_special_base_head;			/* 特殊物品 */
extern ITEM_STATE_BASE			*	item_state_base_head;			/* 恢复状态类 */
extern ITEM_TASK_BASE			*	item_task_base_head;			/* 任务 */

/* entity base */
extern PET_BASE					*	pet_base_head;
extern TASK_BASE				*	task_base_head;
extern TRAP_BASE				*	trap_base_head;					/* 陷阱基配置 */
extern MONSTER_BASE				*	monster_base_head;				/* 怪物基配置 */
extern NPC_BASE					*	npc_base_head;					/* npc基配置 */
extern TELEPORT_POINT_BASE		*	teleport_point_base_head;		/* 传送点基配置 */

/* entity refresh base */
extern MONSTER_REFRESH			*	refresh_monster_head;			/* 怪物刷新 */
extern REVENGE_MONSTER_REFRESH	*	refresh_revenge_monster_head;	/* 复仇怪物刷新 */
extern NPC_REFRESH				*	refresh_npc_fix_head;			/* 仅刷新一次的NPC */
extern NPC_REFRESH				*	refresh_npc_nofix_head;			/* 需要连续不停的刷新的npc */
extern TRAP_REFRESH				*	refresh_trap_head;				/* 陷阱刷新 */

/* entity search key */

extern ACCOUNT_KEY				*	account_key_head;				/* 帐号 */
extern CHAR_GROP_INFO			*	char_group_info_key_head;		/* 集群内LS服务器链表 */
extern BATTLE_GUID_KEY			*	battle_guid_key_head;			/* 血盟 */
extern CHAT_RADIO_KEY			*	chat_radio_key_head;
extern CHAT_VIDEO_KEY			*	chat_video_key_head;
extern LOTTERY_KEY				*	lottery_key_head;
extern ROUP_KEY					*	roup_key_head;					/* 拍卖 */
extern WAR_GUID_KEY				*	war_guid_key_head;				/* 战盟 */
extern MONSTER_KEY				*	monster_key_head;				/* 怪物 */
extern TEAM_KEY					*	team_key_head;					/* 组队 */
extern TRAP_KEY					*	trap_key_head;					/* 陷阱 */
extern SCROLL_DOOR_KEY			*	scroll_door_key_head;			/* 传送门 */
extern NPC_KEY					*	npc_key_head;					/* npc */
extern GM_KEY					*	gm_key_head;						/* gm */				
extern TRADE_KEY				*	trade_key_head;					/* 交易 */
extern MARRIAGE_KEY				*	marriage_key_head;				/* 婚姻 */
extern MASTER_PRENTICE_KEY		*	master_prentice_key_head;		/* 师徒关系 */
extern ITEM_GROUND_KEY			*	item_ground_key_head;			/* 处于地面上或者类似的道具 */
extern PK_PVP_KEY				*	pk_pvp_key_head;					/* single player vs single player using pk */
extern PK_WVW_KEY				*	pk_wvw_key_head;					/* war_guid vs war_guid using pk */
extern PK_TVT_KEY				*	pk_tvt_key_head;					/* team vs team using pk */

/* activity or event base */
extern EVENT_REVENGE			*	event_revenge_base_head;

/* 以下为服务器全局变量 */
extern PX_LS_CONFIG				*	g_config;						/* LS服务器配置信息 */
extern PX_LS_CL_VERSION			*	g_cl_version_head;				/* cl版本访问控制 */
extern PX_LS_IPBAN				*	g_ip_ban_head;					/* ip访问控制 */
extern PX_LS_STATISTIC			*	g_stat;							/* 统计信息 */
extern PX_LS_TIME_SERVICE		*	g_time_service;					/* 服务器时间服务 */
extern PX_LS_MAP				*	g_map_head;						/* 小型地图,适用于MapVersion > 1.00.0142 */	
extern char						**	pcfg_buf;
extern PX_LS_STATE				*	g_state;								/* 服务器全局状态 */
extern HANDLE						h_winsock2;						/* winsock2 句柄 */
extern char							base_path[FILENAME_MAX];				/* 程序基文件地址 */
/* 总入口 */
void ls_uninit_subproc(){
	ls_uninit_basepath();					
	ls_uninit_configuration();
	ls_uninit_base_map();
	ls_uninit_entity();
	ls_uninit_item();
	ls_uninit_event();
	ls_uninit_refresh();
	ls_uninit_stat();
	return;
}						

/*
*	stat uninit
*/
void ls_uninit_stat(){
	if (g_stat != NULL) {
		ms_free(g_stat);
		g_stat = NULL;
	}
	return;
}
/*
*	basepath & configuration uninit
*/
void ls_uninit_basepath(){
	base_path[0] = '\0';
	return;
}						
void ls_uninit_configuration(){
	if (g_config != NULL) {
		ms_free(g_config);
		g_config = NULL;
	}
	return;
}
/*
*	base map uninit 
*/
void ls_uninit_base_map(){
	/* pass */
	int i;
	PX_LS_MAP * pmb;
	TRANCE_ENTITY * pte;
	TRANCE_ENTITY * pnte;		/* pNext trance entity */
	for(i = 0;i < g_stat->num_key_map;i++){
		pmb = g_map_head + i;
		/* 传送卷轴 */
		for(pte = pmb->ptrance_scroll_door;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_scroll_door = NULL; /* need? FIXME! */	
		/* 陷阱 */
		for(pte = pmb->ptrance_trap;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_trap = NULL; /* need? FIXME! */
		/* 怪物 */
		for(pte = pmb->ptrance_monster;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_monster = NULL; /* need? FIXME! */
		/* 玩家 */
		for(pte = pmb->ptrance_player;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_player = NULL; /* need? FIXME! */
		/* NPC */
		for(pte = pmb->ptrance_npc;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_npc = NULL; /* need? FIXME! */
		/* GM */
		for(pte = pmb->ptrance_gm;pte != NULL;pte = pnte){
			pnte = pte->pNext;
			ms_free(pte);
		}
		pmb->ptrance_gm = NULL; /* need? FIXME! */
	}
	ms_free(g_map_head);
	g_map_head = NULL;
	return;
}
/*
*	entity uninit
*/
/* main entry */
void ls_uninit_entity(){
	ls_uninit_entity_trap();
	ls_uninit_entity_monster();
	ls_uninit_entity_player();
	ls_uninit_entity_npc();
	ls_uninit_entity_gm();
	ls_uninit_entity_teleport_point();
	ls_uninit_frame();
	return;
}								
/* 陷阱 */
void ls_uninit_entity_trap(){
	if (trap_base_head != NULL) {
		ms_free(trap_base_head);
		trap_base_head = NULL;
	}
	return;
}								
								
/* 怪物 */
void ls_uninit_entity_monster(){
	if (monster_base_head != NULL) {
		ms_free(monster_base_head);
		monster_base_head = NULL;
	}
	return;
}							
/* 玩家 */
void ls_uninit_entity_player(){
	/* current no config read,then got no uninit */
	return;
}																
/* npc */
void ls_uninit_entity_npc(){
	if (npc_base_head != NULL) {
		ms_free(npc_base_head);
		npc_base_head = NULL;
	}
	return;
}								
/* gm */
void ls_uninit_entity_gm(){
	/* current no config read,then got no uninit */
	return;
}								
/* 地图上的传送点标志 */
void ls_uninit_entity_teleport_point(){
	if (teleport_point_base_head != NULL) {
		ms_free(teleport_point_base_head);
		teleport_point_base_head = NULL;
	}
	return;
}						
/* 读取与帧数相关的配置 */
void ls_uninit_frame(){
	ls_uninit_frame_fbs();
	ls_uninit_frame_fce();
	ls_uninit_frame_fcm();
	ls_uninit_frame_fcp();
	ls_uninit_frame_fcr();
	ls_uninit_frame_fhr();
	ls_uninit_frame_flr();
	ls_uninit_frame_fmr();
	ls_uninit_frame_fms();
	ls_uninit_frame_fpr();
	ls_uninit_frame_fsr();
	ls_uninit_frame_fss();
	ls_uninit_entity_exp();
	return;
}									
/* fbs */
void ls_uninit_frame_fbs(){
	if (frame_fbs_base_head != NULL) {
		ms_free(frame_fbs_base_head);
		frame_fbs_base_head = NULL;
	}
	return;
}								
/* fce */
void ls_uninit_frame_fce(){
	if (frame_fce_base_head != NULL) {
		ms_free(frame_fce_base_head);
		frame_fce_base_head = NULL;
	}
	return;
}									
/* fcm */
void ls_uninit_frame_fcm(){
	if (frame_fcm_base_head != NULL) {
		ms_free(frame_fcm_base_head);
		frame_fcm_base_head = NULL;
	}
	return;
}								
/* fcp */
void ls_uninit_frame_fcp(){
	if (frame_fcp_base_head != NULL) {
		ms_free(frame_fcp_base_head);
		frame_fcp_base_head = NULL;
	}
	return;
}								
/* fcr */
void ls_uninit_frame_fcr(){
	if (frame_fcr_base_head != NULL) {
		ms_free(frame_fcr_base_head);
		frame_fcr_base_head = NULL;
	}
	return;
}								
/* fhr */
void ls_uninit_frame_fhr(){
	if (frame_fhr_base_head != NULL) {
		ms_free(frame_fhr_base_head);
		frame_fhr_base_head = NULL;
	}
	return;
}								
/* flr */
void ls_uninit_frame_flr(){
	if (frame_flr_base_head != NULL) {
		ms_free(frame_flr_base_head);
		frame_flr_base_head = NULL;
	}
	return;
}								
/* fmr */
void ls_uninit_frame_fmr(){
	if (frame_fmr_base_head != NULL) {
		ms_free(frame_fmr_base_head);
		frame_fmr_base_head = NULL;
	}
	return;
}									
/* fms */
void ls_uninit_frame_fms(){
	if (frame_fms_base_head != NULL) {
		ms_free(frame_fms_base_head);
		frame_fms_base_head = NULL;
	}
	return;
}								
/* fpr */
void ls_uninit_frame_fpr(){
	if (frame_fpr_base_head != NULL) {
		ms_free(frame_fpr_base_head);
		frame_fpr_base_head = NULL;
	}
	return;
}									
/* fsr */
void ls_uninit_frame_fsr(){
	if (frame_fsr_base_head != NULL) {
		ms_free(frame_fsr_base_head);
		frame_fsr_base_head = NULL;
	}
	return;
}									
/* fss */
void ls_uninit_frame_fss(){
	if (frame_fss_base_head != NULL) {
		ms_free(frame_fss_base_head);
		frame_fss_base_head = NULL;
	}
	return;
}									
/* exp */
void ls_uninit_entity_exp(){
	if (exp_base_head != NULL) {
		ms_free(exp_base_head);
		exp_base_head = NULL;
	}
	return;
}								
/*
*	item uninit
*/
/* main item entry */
void ls_uninit_item(){
	ls_uninit_item_defence();
	ls_uninit_item_weapon();
	ls_uninit_item_staff();
	return;
}										
/* main sub_item_defence entry */
void ls_uninit_item_defence(){
	ls_uninit_item_defence_armor();
	ls_uninit_item_defence_boot();
	ls_uninit_item_defence_eye();
	ls_uninit_item_defence_shirt();
	ls_uninit_item_defence_helm();
	ls_uninit_item_defence_belt();
	ls_uninit_item_defence_glove();
	ls_uninit_item_defence_ring();
	ls_uninit_item_defence_shield();
	ls_uninit_item_defence_amulet();
	ls_uninit_item_defence_wing();
	ls_uninit_item_defence_guardianship();
	ls_uninit_item_defence_legguard();
	ls_uninit_item_defence_mantle();
	ls_uninit_item_defence_talisman();
	return;
}								
/* main sub_item_weapon entry */
void ls_uninit_item_weapon(){
	ls_uninit_item_weapon_ax();
	ls_uninit_item_weapon_bow();

⌨️ 快捷键说明

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