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

📄 px_ls_init.c

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

/* 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];				/* 程序基文件地址 */

/************************************************************************/
/*  main init prototype and entry									    */
/************************************************************************/
void init_subproc(){
	g_stat = (LPPX_LS_STATISTIC)ms_malloc(sizeof(PX_LS_STATISTIC));
	memset(g_stat,0,sizeof(PX_LS_STATISTIC));
	init_get_basepath();
	init_read_configuration();
	init_read_cl_version();
	init_read_ipban();
	init_read_minor_map_setting();
	init_read_entity();
	init_read_item();
	init_read_event();
	init_read_refresh();
	init_global_key();
	return;
}

/************************************************************************/
/*  main ls server global config read                                   */
/************************************************************************/
void init_read_configuration(){
	int nlines = 0;
	char cfg_file[FILENAME_MAX];
	int i;
	if (g_config == NULL) {
		g_config = (LPPX_LS_CONFIG)ms_malloc(sizeof(PX_LS_CONFIG));
	}
	cfg_file[0] = '\0';
	strcpy(cfg_file,base_path);
	strcat(cfg_file,"\\configuration\\ls_cfg.txt");
	nlines = GetnLinesOfFile(cfg_file);
	init_read_specify_file(cfg_file,nlines);
	for(i = 0; i < nlines;i++){
		DeleteCommentAndSpace(pcfg_buf[i]);
	}
	for(i = 0; i < nlines;i++){
		init_read_lscfg(pcfg_buf[i]);
	}
	init_free_cache(nlines);
	return;
}

void init_read_lscfg(char * strcfg){
	char str_t[255];
	if (strcfg[0] == '\0') {
		return;
	}
	str_t[0] = '\0';
	PopLeftString(strcfg,str_t);
	/* ServerName */
	if ((strncmp(str_t,"ServerName",strlen("ServerName")) == 0)&&(strlen("ServerName") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		memcpy(&(g_config->name),str_t,MAX_SERVERNAME_LEN);
		strcfg[0] = '\0';
		return;
	}
	/* ServerIp */
	if ((strncmp(str_t,"ServerIp",strlen("ServerIp")) == 0)&&(strlen("ServerIp") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		memcpy(&(g_config->ip),str_t,MAX_IPADDRESS_LEN);
		strcfg[0] = '\0';
		return;
	}
	/* ServerPort */
	if ((strncmp(str_t,"ServerPort",strlen("ServerPort")) == 0)&&(strlen("ServerPort") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->port = (WORD)atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Ip_to_routing_server */
	if ((strncmp(str_t,"Ip_to_routing_server",strlen("Ip_to_routing_server")) == 0)&&(strlen("Ip_to_routing_server") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		memcpy(&(g_config->ip_to_rs),str_t,MAX_IPADDRESS_LEN);
		strcfg[0] = '\0';
		return;
	}
	/* Port_to_routing_server */
	if ((strncmp(str_t,"Port_to_routing_server",strlen("Port_to_routing_server")) == 0)&&(strlen("Port_to_routing_server") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->port_to_rs = (WORD)atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Ip_to_dbes */
	if ((strncmp(str_t,"Ip_to_dbes",strlen("Ip_to_dbes")) == 0)&&(strlen("Ip_to_dbes") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		memcpy(&(g_config->ip_to_dbes),str_t,MAX_IPADDRESS_LEN);
		strcfg[0] = '\0';
		return;
	}
	/* Port_to_dbes */
	if ((strncmp(str_t,"Port_to_dbes",strlen("Port_to_dbes")) == 0)&&(strlen("Port_to_dbes") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->port_to_dbes = (WORD)atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Trade */
	if ((strncmp(str_t,"Trade",strlen("Trade")) == 0)&&(strlen("Trade") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->trade_support = TRUE;
		}else{
			g_config->trade_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* AntiHackLevel */
	if ((strncmp(str_t,"AntiHackLevel",strlen("AntiHackLevel")) == 0)&&(strlen("AntiHackLevel") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->ah_level = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* CreateAccount */
	if ((strncmp(str_t,"CreateAccount",strlen("CreateAccount")) == 0)&&(strlen("CreateAccount") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->createAccount_support = TRUE;
		}else{
			g_config->createAccount_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* CreateChar */
	if ((strncmp(str_t,"CreateChar",strlen("CreateChar")) == 0)&&(strlen("CreateChar") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->createChar_support = TRUE;
		}else{
			g_config->createChar_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* MAX_Num_char */
	if ((strncmp(str_t,"MAX_Num_char",strlen("MAX_Num_char")) == 0)&&(strlen("MAX_Num_char") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->max_num_char = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* ExperienceRate */
	if ((strncmp(str_t,"ExperienceRate",strlen("ExperienceRate")) == 0)&&(strlen("ExperienceRate") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->exp_ratio = atof(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* ItemSerialCheck */
	if ((strncmp(str_t,"ItemSerialCheck",strlen("ItemSerialCheck")) == 0)&&(strlen("ItemSerialCheck") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->item_serial_check_support = FALSE;
		strcfg[0] = '\0';
		return;
	}
	/* GuidCreateLevel */
	if ((strncmp(str_t,"GuidCreateLevel",strlen("GuidCreateLevel")) == 0)&&(strlen("GuidCreateLevel") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->createGuidLevel = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* GuidCreate */
	if ((strncmp(str_t,"GuidCreate",strlen("GuidCreate")) == 0)&&(strlen("GuidCreate") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->createGuid_support = TRUE;
		}else{
			g_config->createGuid_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* GuidDelete */
	if ((strncmp(str_t,"GuidDelete",strlen("GuidDelete")) == 0)&&(strlen("GuidDelete") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->deleteGuid_support = TRUE;
		}else{
			g_config->deleteGuid_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* PK_Degression_num */
	if ((strncmp(str_t,"PK_Degression_num",strlen("PK_Degression_num")) == 0)&&(strlen("PK_Degression_num") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->spd_pkvalue_decrease = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* PKDropItem */
	if ((strncmp(str_t,"PKDropItem",strlen("PKDropItem")) == 0)&&(strlen("PKDropItem") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->pk_drop_item = TRUE;
		}else{
			g_config->pk_drop_item = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* PKLevelProtect */
	if ((strncmp(str_t,"PKLevelProtect",strlen("PKLevelProtect")) == 0)&&(strlen("PKLevelProtect") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->pk_protect_level = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* MonsterHP */
	if ((strncmp(str_t,"MonsterHP",strlen("MonsterHP")) == 0)&&(strlen("MonsterHP") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->hp_monster = atof(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* MonsterMana */
	if ((strncmp(str_t,"MonsterMana",strlen("MonsterMana")) == 0)&&(strlen("MonsterMana") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->mana_monster = atof(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* ItemDropRate */
	if ((strncmp(str_t,"ItemDropRate",strlen("ItemDropRate")) == 0)&&(strlen("ItemDropRate") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);

⌨️ 快捷键说明

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