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

📄 px_ls_init.c

📁 MMORPG游戏服务器端架构及函数
💻 C
📖 第 1 页 / 共 5 页
字号:
		g_config->item_drop_ratio = atof(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* OpenFestival */
	if ((strncmp(str_t,"OpenFestival",strlen("OpenFestival")) == 0)&&(strlen("OpenFestival") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->festival_support = TRUE;
		}else{
			g_config->festival_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* MaxUserOnline */
	if ((strncmp(str_t,"MaxUserOnline",strlen("MaxUserOnline")) == 0)&&(strlen("MaxUserOnline") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->max_online = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* WriteLog */
	if ((strncmp(str_t,"WriteLog",strlen("WriteLog")) == 0)&&(strlen("WriteLog") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->writelog_support = TRUE;
		}else{
			g_config->writelog_support = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* Interval_Trade */
	if ((strncmp(str_t,"Interval_Trade",strlen("Interval_Trade")) == 0)&&(strlen("Interval_Trade") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->tradeInterval = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* TradeDistanceWithPlayer */
	if ((strncmp(str_t,"TradeDistanceWithPlayer",strlen("TradeDistanceWithPlayer")) == 0)&&(strlen("TradeDistanceWithPlayer") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->tradedistance_no_npc = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* TradeDistanceWithNPC */
	if ((strncmp(str_t,"TradeDistanceWithNPC",strlen("TradeDistanceWithNPC")) == 0)&&(strlen("TradeDistanceWithNPC") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->tradedistance_npc = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* PointWhenLevelUp */
	if ((strncmp(str_t,"PointWhenLevelUp",strlen("PointWhenLevelUp")) == 0)&&(strlen("PointWhenLevelUp") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->pointer_levelup = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* DisconnectHackUser */
	if ((strncmp(str_t,"DisconnectHackUser",strlen("DisconnectHackUser")) == 0)&&(strlen("DisconnectHackUser") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		if (strncmp(str_t,"TRUE",strlen("TRUE")) == 0) {
			g_config->disconnectHackUser = TRUE;
		}else{
			g_config->disconnectHackUser = FALSE;
		}
		strcfg[0] = '\0';
		return;
	}
	/* MaxTeamMember */
	if ((strncmp(str_t,"MaxTeamMember",strlen("MaxTeamMember")) == 0)&&(strlen("MaxTeamMember") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->max_num_team_member = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* BattleGuidLevelCreate */
	if ((strncmp(str_t,"BattleGuidLevelCreate",strlen("BattleGuidLevelCreate")) == 0)&&(strlen("BattleGuidLevelCreate") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->level_create_battleguid_req = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* BattleGuidMaxMember */
	if ((strncmp(str_t,"BattleGuidMaxMember",strlen("BattleGuidMaxMember")) == 0)&&(strlen("BattleGuidMaxMember") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->max_num_battleguid_member = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_interval_monster */
	if ((strncmp(str_t,"Reuse_interval_monster",strlen("Reuse_interval_monster")) == 0)&&(strlen("Reuse_interval_monster") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_monster = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_account */
	if ((strncmp(str_t,"Reuse_Interval_account",strlen("Reuse_Interval_account")) == 0)&&(strlen("Reuse_Interval_account") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_account = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_team */
	if ((strncmp(str_t,"Reuse_Interval_team",strlen("Reuse_Interval_team")) == 0)&&(strlen("Reuse_Interval_team") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_team = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_War_Guid */
	if ((strncmp(str_t,"Reuse_Interval_War_Guid",strlen("Reuse_Interval_War_Guid")) == 0)&&(strlen("Reuse_Interval_War_Guid") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_war_guid = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_Battle_Guid */
	if ((strncmp(str_t,"Reuse_Interval_Battle_Guid",strlen("Reuse_Interval_Battle_Guid")) == 0)&&(strlen("Reuse_Interval_Battle_Guid") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_battle_guid = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_Npc */
	if ((strncmp(str_t,"Reuse_Interval_Npc",strlen("Reuse_Interval_Npc")) == 0)&&(strlen("Reuse_Interval_Npc") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_npc = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_Roup */
	if ((strncmp(str_t,"Reuse_Interval_Roup",strlen("Reuse_Interval_Roup")) == 0)&&(strlen("Reuse_Interval_Roup") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_roup = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_Marriage */
	if ((strncmp(str_t,"Reuse_Interval_Marriage",strlen("Reuse_Interval_Marriage")) == 0)&&(strlen("Reuse_Interval_Marriage") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_marriage = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	/* Reuse_Interval_Trade */
	if ((strncmp(str_t,"Reuse_Interval_Trade",strlen("Reuse_Interval_Trade")) == 0)&&(strlen("Reuse_Interval_Trade") == strlen(str_t))) {
		PopLeftString(strcfg,str_t);
		g_config->reuse_interval_trade = atoi(str_t);
		strcfg[0] = '\0';
		return;
	}
	return;
}
/************************************************************************/
/*  version control and ipban config                                    */
/************************************************************************/
void init_read_cl_version(){
	char			filename[FILENAME_MAX];
	int				nlines;
	int				i;
	int				nconfig;
	char		*	pstr;
	char			cache[FILENAME_MAX];
	PX_LS_CL_VERSION	*	pcv;
	filename[0] = '\0';
	strcpy(filename,base_path);
	strcat(filename,"\\configuration\\ls_cl_version.txt");
	nlines = GetnLinesOfFile(filename);
	init_read_specify_file(filename,nlines);
	nconfig = init_get_valid_num_config(nlines);
	if (nconfig <= 0) {
		return;
	}
	g_stat->num_key_cl_version = nconfig;
	g_cl_version_head = (LPPX_LS_CL_VERSION)ms_malloc(nconfig*sizeof(PX_LS_CL_VERSION));
	memset(g_cl_version_head,0,nconfig*sizeof(PX_LS_CL_VERSION));
	pcv = g_cl_version_head;
	for(i = 0;i < nlines;i++){
		pstr = pcfg_buf[i];
		if (pstr[0] == '\0') {
			continue;
		}
		PopLeftString(pstr,cache);
		strcpy(pcv->version,cache);
		PopLeftString(pstr,cache);
		strcpy(pcv->md5_code,cache);
		PopLeftString(pstr,cache);
		if (strcmp(cache,"TRUE") == 0) {
			pcv->can_use = TRUE;
		}else{
			pcv->can_use = FALSE;
		}
		PopLeftString(pstr,cache);
		strcpy(pcv->antihack_code,cache);
		pcv++;
	}
	init_free_cache(nlines);
	return;
}
void init_read_ipban(){
	char		filename[FILENAME_MAX];
	int			nlines;
	int			i;
	int			nconfig;
	unsigned int ip_t;
	char	*	pstr;
	char		cache[FILENAME_MAX];
	PX_LS_IPBAN	*	pipb;
	filename[0] = '\0';
	strcpy(filename,base_path);
	strcat(filename,"\\configuration\\LS_IPBan.txt");
	nlines = GetnLinesOfFile(filename);
	init_read_specify_file(filename,nlines);
	nconfig = init_get_valid_num_config(nlines);
	if (nconfig <= 0) {
		return;
	}
	g_stat->num_key_ip_ban = nconfig;
	g_ip_ban_head = (LPPX_LS_IPBAN)ms_malloc(nconfig*sizeof(PX_LS_IPBAN));
	memset(g_ip_ban_head,0,nconfig*sizeof(PX_LS_IPBAN));
	pipb = g_ip_ban_head;
	for(i = 0;i < nlines;i++){
		pstr = pcfg_buf[i];
		if (pstr[0] == '\0') {
			continue;
		}
		PopLeftString(pstr,cache);
		if (strcmp(cache,"SingleIP") == 0) {
			PopLeftString(pstr,cache);
			pipb->ip_start = get_ip_by_string(cache);
			pipb->ip_end = pipb->ip_start;
		}else{
			PopLeftString(pstr,cache);
			pipb->ip_start = get_ip_by_string(cache);
			PopLeftString(pstr,cache);
			pipb->ip_end = get_ip_by_string(cache);
		}
		PopLeftString(pstr,cache);
		if (strcmp(cache,"TRUE") == 0) {
			pipb->can_use = TRUE;
		}else{
			pipb->can_use = FALSE;
		}
		pipb++;
	}
	init_free_cache(nlines);
	return;
}
/************************************************************************/
/*  main map_base config read                                           */
/************************************************************************/
void init_read_minor_map_setting(){
	int nlines = 0;
	char cfg_file[FILENAME_MAX];
	int i;
	int nconfig;
	cfg_file[0] = '\0';
	strcpy(cfg_file,base_path);
	strcat(cfg_file,"\\configuration\\LS_Map_cfg.txt");
	nlines = GetnLinesOfFile(cfg_file);
	init_read_specify_file(cfg_file,nlines);
	nconfig = init_get_valid_num_config(nlines);
	g_stat->num_key_map = nconfig;
	g_map_head = (LPPX_LS_MAP)ms_malloc(nconfig*sizeof(PX_LS_MAP));
	for(i = 0;i < nconfig;i++){
		(g_map_head + i)->name[0] = '\0';
	}
	for(i = 0;i < nlines;i++){
		DeleteCommentAndSpace(pcfg_buf[i]);
	}
	for(i = 0;i < nlines;i++){
		init_read_real_minor_map_setting(pcfg_buf[i]);
	}
	init_free_cache(nlines);
	return;
}

void init_read_real_minor_map_setting(char * str){
	char str_t[FILENAME_MAX];
	PX_LS_MAP		*	pmb_t;
	PX_LS_MAP		**	pmb;
	FILE			*	fp;
	int					map_size;
	int i;
	MAP_HEADER			map_header;
	SINGLE_POINT		single_point;
	BOOL				valid = FALSE;
	if (str[0] == '\0') {
		return;
	}
	PopLeftString(str,str_t);
	for(i = 0;i < g_stat->num_key_map;i++){
		if ((g_map_head + i)->name[0] == '\0') {
			pmb_t = g_map_head + i;
			break;
		}
	}
	pmb_t->mapUID = atoi(str_t);
	PopLeftString(str,str_t);
	strcpy(pmb_t->name,str_t);
	PopLeftString(str,str_t);
	if (strcmp(str_t,"TRUE") == 0) {
		pmb_t->vip_map = TRUE;
	}else{
		pmb_t->vip_map = FALSE;
	}
	PopLeftString(str,str_t);
	pmb_t->request_level_low = atoi(str_t);
	PopLeftString(str,str_t);
	pmb_t->request_level_high = atoi(str_t);
	PopLeftString(str,str_t);
	pmb_t->mapLevel = atoi(str_t);
	PopLeftString(str,str_t);
	if (strcmp(str_t,"TRUE") == 0) {
		pmb_t->pk_support = TRUE;
	}else{
		pmb_t->pk_support = FALSE;
	}
	str[0] = '\0';
	/* read minor map data */
	str_t[0] = '\0';
	strcpy(str_t,base_path);
	strcat(str_t,"\\MAP\\");
	strcat(str_t,pmb_t->name);
	strcat(str_t,".map");
	fp = fopen(str_t,"rb");
	if (fp == NULL) {
		return;
	}
	map_size = (int)ftell(fp);
	map_size = map_size - sizeof(MAP_HEADER);
	if ((map_size <= 0)||(map_size%sizeof(SINGLE_POINT) != 0)) {
		fclose(fp);
		return;
	}
	rewind(fp);
	fread(&map_header,sizeof(MAP_HEADER),1,fp);
	valid = init_validate_map(&map_header);
	if (!valid) {
		fclose(fp);
		return;
	}
	fread(&single_point,sizeof(SINGLE_POINT),1,fp);
	while (!feof(fp)) {
		(pmb_t->mp)[single_point.posx][single_point.posy].posz = single_point.posz;
		(pmb_t->mp)[single_point.posx][single_point.posy].property = single_point.property;
		fread(&single_point,sizeof(SINGLE_POINT),1,fp);
	}
	fclose(fp);
	/* init pmb_t(PX_LS_MAP) other struct member */
	pmb_t->ptrance_gm = NULL;
	pmb_t->ptrance_monster = NULL;
	pmb_t->ptrance_npc = NULL;
	pmb_t->ptrance_player = NULL;
	pmb_t->ptrance_scroll_door = NULL;
	pmb_t->ptrance_trap = NULL;
	return;

}

BOOL init_validate_map(MAP_HEADER * mh){
	/*
	*	because current projectx version is test only,no futhur version check support,just a replace,may be FIXME!
	*/
	BOOL valid = FALSE;
	valid = valid|strcmp(mh->name,"ProjectX");
	valid = valid|strcmp(mh->version,"Version 1.00.0143");
	valid = valid|strcmp(mh->author,"MS");
	valid = valid|strcmp(mh->platform,"win-x86");
	valid = valid|strcmp(mh->copyright,"TRUE");
	return valid?FALSE:TRUE;
}
/************************************************************************/
/*  main active or inactive entity base config read                     */
/************************************************************************/
/* main entry */
void init_read_entity(){
	init_read_entity_trap();
	init_read_entity_monster();
	init_read_entity_npc();
	init_read_entity_gm();	
	init_read_entity_teleport_point();
	init_read_frame();
	init_read_entity_exp();
	return;
}	

/* 陷阱 */
void init_read_entity_trap(){
	char			filename[FILENAME_MAX];
	int				nlines;
	int				i;
	int				nconfig;
	char		*	pstr;
	char			cache[FILENAME_MAX];
	TRAP_BASE	*	ptb;
	filename[0] = '\0';
	strcpy(filename,base_path);
	strcat(filename,"\\configuration\\entity_trap.txt");
	nlines = GetnLinesOfFile(filename);
	init_read_specify_file(filename,nlines);
	nconfig = init_get_valid_num_config(nlines);
	if (nconfig <= 0) {

⌨️ 快捷键说明

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