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