📄 px_ls_init.c
字号:
/* 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 + -