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

📄 npccreate.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#define __NPCCREATE__#include <stdio.h>#include <string.h>#include "common.h"#include "npccreate.h"#include "npctemplate.h"#include "util.h"#include "buf.h"#include "readmap.h"#include "char_data.h"#include "handletime.h"#include "configfile.h"INLINE int NPC_CHECKCREATEINDEX(int index){    if(  NPC_createnum <= index || index < 0 )return FALSE;    return TRUE;}INLINE int NPC_CHECKCREATEINTINDEX( int index){    if(  NPC_CREATEINTNUM <= index || index < 0 )return FALSE;    return TRUE;}INLINE int NPC_setCreateInt( int index , NPC_CREATEINT element, int data ){    int buf;    buf = NPC_create[index].intdata[element];    NPC_create[index].intdata[element] = data;    return buf;}INLINE int NPC_getCreateInt( int index , NPC_CREATEINT element ){    return NPC_create[index].intdata[element];}BOOL NPC_initCreateArray( int createnum ){    NPC_createnum = createnum;    NPC_create  = (NPC_Create*)allocateMemory( sizeof( NPC_Create ) * NPC_createnum );	print( "开启大小:%d. 创建数量:%d.\n", sizeof( NPC_Create ), createnum);    if( NPC_create == NULL ){		return FALSE;	}    NPC_create_readindex = 0;    return TRUE;}void NPC_setDefaultNPCCreate( NPC_Create*  cr ){    if( cr == NULL )return;    cr->intdata[NPC_CREATEFLOORID]=0;    cr->intdata[NPC_CREATEBORNLEFTUPX]=0;    cr->intdata[NPC_CREATEBORNLEFTUPY]=0;    cr->intdata[NPC_CREATEBORNRIGHTDOWNX]=0;    cr->intdata[NPC_CREATEBORNRIGHTDOWNY]=0;    cr->intdata[NPC_CREATEMOVELEFTUPX]=0;    cr->intdata[NPC_CREATEMOVELEFTUPY]=0;    cr->intdata[NPC_CREATEMOVERIGHTDOWNX]=0;    cr->intdata[NPC_CREATEMOVERIGHTDOWNY]=0;    cr->intdata[NPC_CREATEDIR]=0;	//jeffrey 1231#ifdef _ADD_ACTION	cr->intdata[NPC_CREATEACTION] = 0;#endif    cr->intdata[NPC_CREATEBASEIMAGENUMBER]=-1;    cr->intdata[NPC_CREATETIME]=0;    cr->intdata[NPC_CREATEBORNNUM]=0;    cr->intdata[NPC_CREATEENEMYNUM]=0;    cr->intdata[NPC_CREATEBOUNDARY]=1;    cr->intdata[NPC_CREATEIGNOREINVINCIBLE]=0;    cr->intdata[NPC_CREATEDATE]=0;        cr->intdata[NPC_CREATEFAMILY]=0;    cr->chardata[NPC_CREATENAME].string[0]= '\0';    cr->workdata[NPC_CREATEWORKENEMYNUM]=0;    cr->workdata[NPC_CREATEWORKMAKESTARTSEC]=0;    cr->workdata[NPC_CREATEWORKMAKESTARTUSEC]=0;    cr->workdata[NPC_CREATEWORKNEVERMAKE]=0;        {        int i;        for( i=0 ; i<arraysizeof(cr->templateindex) ; i++ ){            cr->templateindex[i] = -1;            cr->arg[i].string[0] = '\0';        }    }}BOOL NPC_IsNPCCreateFile( char* filename ){    FILE*   f;    char    line1[128];    char*   ret;    /*  ~匹蔽月白央奶伙反卅仄卞允月 */    if( filename == NULL        || strlen( filename ) < 1        || filename[strlen(filename)-1] == '~'        || filename[0] == '#'        || strcmptail( filename, ".bak" ) == 0 )return FALSE;    f= fopen( filename , "r" );    if( f == NULL ) goto RETURNFALSE;    ret = fgets( line1, sizeof( line1 ), f );    if( ret == NULL )goto FCLOSERETURNFALSE;    if( strcasecmp( NPC_CREATEFILEMAGIC, line1 ) == 0 ){        fclose(f);        return TRUE;    }FCLOSERETURNFALSE:    fclose(f);RETURNFALSE:    return FALSE;}static int NPC_readCreateFile( char* filename ){    FILE*   f;    char    line[512];    int     linenum=0;    int     start=OFF;    NPC_Create  cr;    int     enemyreadindex=0;    typedef struct tagPOINT    {        int x,y;    }POINT;    typedef struct tagREC    {        int w,h;    }REC;    POINT   center[2]={{0,0},{0,0}};     /*  born 互 0 匹 move 互 1 */    REC     wh[2]    ={{0,0},{0,0}};      /*  born 互 0 匹 move 互 1 */    POINT   lu[2]    ={{0,0},{0,0}};     /*  born 互 0 匹 move 互 1 */    POINT   rd[2]    ={{0,0},{0,0}};     /*  born 互 0 匹 move 互 1 */    int     defborn=FALSE;              /*  born 毛涩烂仄凶井升丹井 */    int     defmove=FALSE;              /*  move 毛涩烂仄凶井升丹井 */    int     deflurd[2]={FALSE,FALSE};   /*  lu,rd 匹涩烂仄凶井升丹井 */    char*   ret;    if( NPC_create_readindex >= NPC_createnum ){        print("创建超过配置缓冲\n" );        print("配置缓冲数目是 %d\n",NPC_createnum);        print("没用文件 %s\n",filename);        return FALSE;    }    NPC_setDefaultNPCCreate( &cr );    f= fopen( filename ,"r");    if( f == NULL )return FALSE;    ret = fgets( line, sizeof( line ), f );    if( ret == NULL )goto FCLOSERETURNFALSE;    if( strcmp( NPC_CREATEFILEMAGIC, line ) != 0 ){        print( "这不是一个create文件.\n" );        goto FCLOSERETURNFALSE;    }    linenum = 1;    while( fgets( line , sizeof( line ) , f ) ){        linenum++;        if( line[0] == '#' )continue;        /* comment */        if( line[0] == '\n' )continue;       /* none    */        chomp( line );        switch( line[0] ){        case '{':            if( start == ON ){                fprint( "Find {. But already START state. %s:%d\n",                        filename, linenum);                fprint( "退出\n" );                goto FCLOSERETURNFALSE;            }else{                NPC_setDefaultNPCCreate( &cr );                start = ON;            }            break;        case '}':            if( start == ON ){                int     err = FALSE;                if( enemyreadindex == 0 ){                    err = TRUE;                    print( "这不是遇敌数据  %s:%d\n",                           filename,linenum);                }else if( MAP_IsThereSpecificFloorid(                    cr.intdata[NPC_CREATEFLOORID]) == FALSE ){                    err = TRUE;                    print( "地图ID号有毛病 %s:%d-floor:%d\n",                           filename,linenum, cr.intdata[NPC_CREATEFLOORID]);                }else if( defborn == FALSE ){                    err = TRUE;                    print( "这些不是 born 安装 %s:%d\n",                           filename,linenum);                }                if( err == FALSE ){                    cr.intdata[NPC_CREATEENEMYNUM] = enemyreadindex;                    if( deflurd[0] ){                        cr.intdata[NPC_CREATEBORNLEFTUPX] =                            min(lu[0].x,rd[0].x);                        cr.intdata[NPC_CREATEBORNRIGHTDOWNX] =                            max(lu[0].x,rd[0].x);                        cr.intdata[NPC_CREATEBORNLEFTUPY] =                            min(lu[0].y,rd[0].y);                        cr.intdata[NPC_CREATEBORNRIGHTDOWNY] =                            max(lu[0].y,rd[0].y);                    }else{                        cr.intdata[NPC_CREATEBORNLEFTUPX] =                            center[0].x-wh[0].w/2;                        cr.intdata[NPC_CREATEBORNRIGHTDOWNX] =                            center[0].x+wh[0].w/2;                        cr.intdata[NPC_CREATEBORNLEFTUPY] =                            center[0].y-wh[0].h/2;                        cr.intdata[NPC_CREATEBORNRIGHTDOWNY] =                            center[0].y+wh[0].h/2;                    }                    if( defmove ){                        if( deflurd[0] ){                            cr.intdata[NPC_CREATEMOVELEFTUPX] =                                min(lu[1].x,rd[1].x);                            cr.intdata[NPC_CREATEMOVERIGHTDOWNX] =                                max(lu[1].x,rd[1].x);                            cr.intdata[NPC_CREATEMOVELEFTUPY] =                                min(lu[1].y,rd[1].y);                            cr.intdata[NPC_CREATEMOVERIGHTDOWNY] =                                max(lu[1].y,rd[1].y);                        }else{                            cr.intdata[NPC_CREATEMOVELEFTUPX] =                                center[1].x-wh[1].w/2;                            cr.intdata[NPC_CREATEMOVERIGHTDOWNX] =                                center[1].x+wh[1].w/2;                            cr.intdata[NPC_CREATEMOVELEFTUPY] =                                center[1].y-wh[1].h/2;                            cr.intdata[NPC_CREATEMOVERIGHTDOWNY] =                                center[1].y+wh[1].h/2;                        }                    }else{                        /*  born 毛戊疋□允月 */                        cr.intdata[NPC_CREATEMOVELEFTUPX] =                            cr.intdata[NPC_CREATEBORNLEFTUPX];                        cr.intdata[NPC_CREATEMOVERIGHTDOWNX] =                            cr.intdata[NPC_CREATEBORNRIGHTDOWNX];                        cr.intdata[NPC_CREATEMOVELEFTUPY] =                            cr.intdata[NPC_CREATEBORNLEFTUPY];                        cr.intdata[NPC_CREATEMOVERIGHTDOWNY] =                            cr.intdata[NPC_CREATEBORNRIGHTDOWNY];                    }                    memcpy( &NPC_create[NPC_create_readindex], &cr,                            sizeof( NPC_Create ) );                    NPC_create_readindex++;                    if( NPC_create_readindex >= NPC_createnum ){                        print("创建超过配置缓冲\n" );                        print("配置创建文件数目 %d\n",                              NPC_createnum);                        print("没用文件:%s\n",filename);                        goto FCLOSERETURNFALSE;                    }                }                NPC_setDefaultNPCCreate( &cr );                enemyreadindex=0;                defborn=FALSE;                defmove=FALSE;                deflurd[0]=FALSE;                deflurd[1]=FALSE;                start = OFF;            }else{                fprint( "未解决 '}' at %s:%d\n",filename,linenum);                goto FCLOSERETURNFALSE;            }            break;        default:        {             char    firstToken[256];

⌨️ 快捷键说明

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