?? npccreate.c
字號(hào):
print( "Find error at %s in line %d. Ignore\n",
filename , linenum);
break;
}
ret = getStringFromIndexWithDelim( line, "=", 2, secondToken,
sizeof( secondToken ) );
if( ret == FALSE ){
print( "Find error at %s in line %d. Ignore\n",
filename , linenum);
break;
}
if( strcasecmp("floorid",firstToken) == 0 ){
cr.intdata[NPC_CREATEFLOORID] = atoi(secondToken);
}else if( strcasecmp("borncenter", firstToken) == 0 ){
getFourIntsFromString(secondToken,¢er[0].x,
¢er[0].y,&wh[0].w,&wh[0].h );
defborn = TRUE;
}else if( strcasecmp("borncorner", firstToken) == 0 ){
getFourIntsFromString(secondToken,&lu[0].x,&lu[0].y,
&rd[0].x,&rd[0].y );
defborn = TRUE;
deflurd[0]=TRUE;
}else if( strcasecmp("movecenter", firstToken) == 0 ){
getFourIntsFromString(secondToken,¢er[1].x,
¢er[1].y,&wh[1].w,&wh[1].h );
defmove = TRUE;
}else if( strcasecmp("movecorner", firstToken) == 0 ){
getFourIntsFromString(secondToken,&lu[1].x,&lu[1].y,
&rd[1].x,&rd[1].y );
defmove = TRUE;
deflurd[1]=TRUE;
}else if( strcasecmp("dir",firstToken) == 0 ){
cr.intdata[NPC_CREATEDIR] = atoi( secondToken );
}else if( strcasecmp("graphicname",firstToken) == 0 ){
cr.intdata[NPC_CREATEBASEIMAGENUMBER]
= CHAR_seekGraphicNumberFromString(secondToken);
}else if( strcasecmp("name",firstToken) == 0 ){
strcpysafe( cr.chardata[NPC_CREATENAME].string,
sizeof(cr.chardata[NPC_CREATENAME].string),
secondToken );
}else if( strcasecmp("time",firstToken) == 0 ){
cr.intdata[NPC_CREATETIME] = atoi( secondToken );
}else if( strcasecmp("date",firstToken) == 0 ){
cr.intdata[NPC_CREATEDATE] = atoi( secondToken );
}else if( strcasecmp("createnum",firstToken) == 0 ){
cr.intdata[NPC_CREATEBORNNUM] = atoi( secondToken );
}else if( strcasecmp( "boundary", firstToken) == 0 ){
cr.intdata[NPC_CREATEBOUNDARY] = atoi( secondToken );
}else if( strcasecmp( "ignoreinvincible", firstToken) == 0 ){
cr.intdata[NPC_CREATEIGNOREINVINCIBLE] = atoi( secondToken );
//jeffrey 1231
#ifdef _ADD_ACTION
}else if( strcasecmp( "action", firstToken) == 0 ){
cr.intdata[NPC_CREATEACTION] = atoi( secondToken );
#endif
// Robin 0731
}else if( strcasecmp( "family", firstToken) == 0 ){
cr.intdata[NPC_CREATEFAMILY] = atoi( secondToken );
}else if( strcasecmp("enemy", firstToken) == 0 ){
/* 婁醒毛 六月方丹卞允月 */
int templateindex;
char enemyname[64];
/* 雁釵瞬民尼永弁 */
if( enemyreadindex <= arraysizeof(cr.templateindex) )
/* OK */
;
else
break;
/* secondToken 毛 儂 卞坌荸允月 */
getStringFromIndexWithDelim(secondToken,"|",1,enemyname,
sizeof(enemyname) );
templateindex= NPC_templateGetTemplateIndex(enemyname);
if( templateindex != -1 ){
cr.templateindex[enemyreadindex] = templateindex;
{
/* 婁醒毛質(zhì) 允月 */
char tmp[2];
int ret;
ret = getStringFromIndexWithDelim( secondToken,
"|",2,tmp,
sizeof(tmp) );
if( ret == FALSE )
cr.arg[enemyreadindex].string[0] = '\0';
else
strcpysafe( cr.arg[enemyreadindex].string,
sizeof( cr.arg[enemyreadindex].
string ),
secondToken+strlen(enemyname)+1 );
}
enemyreadindex++;
}else
fprint( "沒(méi)有這種模塊:\n[%s(%d)%s] enemy:%s\n",
filename ,linenum,secondToken, enemyname);
}else{
fprint( "沒(méi)有這種登陸 %s %s:%d\n",firstToken,filename,
linenum );
}
}
}
}
fclose(f);
return TRUE;
FCLOSERETURNFALSE:
fclose(f);
return FALSE;
}
BOOL NPC_readNPCCreateFiles( char* topdirectory ,int createsize)
{
STRING64 *filenames;
int filenum;
int i;
filenames = (STRING64 *)allocateMemory( sizeof( STRING64 ) *
(int)getFilesearchnum( ) );
if( filenames == NULL ){
print( "讀取NPC創(chuàng)建文件... 內(nèi)存錯(cuò)誤\n" );
return FALSE;
}
filenum = rgetFileName( topdirectory ,filenames ,getFilesearchnum( ) );
if( filenum == -1 ){
freeMemory( filenames );
return FALSE;
}
if( filenum >= getFilesearchnum( ) ){
print( "文件搜索數(shù)目失敗 %d\n", getFilesearchnum( ) );
while( 1 );
}
if( !NPC_initCreateArray( createsize ) ){
fprint( "開(kāi)啟創(chuàng)建數(shù)組錯(cuò)誤\n" );
freeMemory( filenames );
return FALSE;
}
print( "讀取NPC創(chuàng)建文件..." );
for( i = 0 ; i < filenum ; i ++ )
if( NPC_IsNPCCreateFile( filenames[i].string ))
if( NPC_readCreateFile( filenames[i].string ) == -1 )
break;
print( "正確創(chuàng)建NPC %d ..." , NPC_create_readindex );
NPC_createnum=NPC_create_readindex;
#ifdef DEBUG
/* 99/4/8 By Kawata csv溥摯卞仄化支月 */
print( "Npc_Create's\n");
for( i = 0 ; i < NPC_createnum ; i ++ ){
int j;
/*print( "NPC_create[%d]:\n", i);*/
print( "%d,", i);
for( j = 0 ; j < NPC_CREATECHARNUM ; j ++ )
print("%s," , NPC_create[i].chardata[j].string );
/*print( "\tIntdata\t" );*/
for( j = 0 ; j < NPC_CREATEINTNUM ; j ++ )
print("%d," , NPC_create[i].intdata[j] );
/***print("\n" );
print( "\tChardata\t" );***/
for( j = 0 ; j < NPC_create[i].intdata[NPC_CREATEENEMYNUM]; j ++ )
print("%d" , NPC_create[i].templateindex[j] );
/*print("\n" );*/
print("\n" );
}
#endif /*DEBUG*/
freeMemory( filenames );
return TRUE;
}
/*------------------------------------------------------------
* createindex 井日 boundary 互澀爛今木化中月井升丹井毛葦月
* 婁醒
* createindex int create及奶件犯永弁旦
* 忒曰襖
* 澀爛今木化中月 TRUE(1)
* 澀爛今木化中卅中 FALSE(0)
------------------------------------------------------------*/
BOOL NPC_isBoundarySet( int createindex )
{
if( NPC_CHECKCREATEINDEX(createindex) == FALSE )return FALSE;
return NPC_create[createindex].intdata[NPC_CREATEBOUNDARY];
}
/*------------------------------------------------------------
* createindex 井日 仃月 區(qū)及RECT 毛菲戶月[
* 婁醒
* createindex int 件皿伊□玄及奶件犯永弁旦
* r RECT* 襖毛熬仃午月RECT 及禾奶件正
* 忒曰襖
* 岳 TRUE(1)
* 撩 FALSE(0)
------------------------------------------------------------*/
BOOL NPC_createGetRECT( int createindex,RECT* r )
{
if( NPC_CHECKCREATEINDEX(createindex) == FALSE )return FALSE;
r->x = NPC_create[createindex].intdata[NPC_CREATEMOVELEFTUPX];
r->y = NPC_create[createindex].intdata[NPC_CREATEMOVELEFTUPY];
r->width
= NPC_create[createindex].intdata[NPC_CREATEMOVERIGHTDOWNX]
- NPC_create[createindex].intdata[NPC_CREATEMOVELEFTUPX];
r->height
= NPC_create[createindex].intdata[NPC_CREATEMOVERIGHTDOWNY]
- NPC_create[createindex].intdata[NPC_CREATEMOVELEFTUPY];
return TRUE;
}
/*------------------------------------------------------------
* 凜棉井日綜勻化手中中井升丹井民尼永弁允月[
* 婁醒
* cindex int 奶件犯永弁旦
* 忒曰襖
* BOOL 綜勻化中中樺寧 TRUE(1)
* BOOL 綜勻化中仃卅中樺寧 FALSE(0)
------------------------------------------------------------*/
BOOL NPC_createCheckGenerateFromTime( int cindex )
{
struct timeval old;
if( !NPC_CHECKCREATEINDEX(cindex) )
return FALSE;
if( NPC_create[cindex].workdata[NPC_CREATEWORKNEVERMAKE] )
return FALSE;
if( NPC_create[cindex].intdata[NPC_CREATEBORNNUM]
<= NPC_create[cindex].workdata[NPC_CREATEWORKENEMYNUM] )
return FALSE;
if( NPC_create[cindex].intdata[NPC_CREATETIME] < 0 )return FALSE;
old.tv_sec = NPC_create[cindex].workdata[NPC_CREATEWORKMAKESTARTSEC];
old.tv_usec= NPC_create[cindex].workdata[NPC_CREATEWORKMAKESTARTUSEC];
if( time_diff_us( NowTime , old ) <=
NPC_create[cindex].intdata[NPC_CREATETIME]*1000 )
return FALSE;
return TRUE;
}
/*------------------------------------------------------------
* 綜月凜及凜棉及澀爛毛賡渝祭允月[
* 婁醒
* tindex int 奶件犯永弁旦
* 忒曰襖
* 卅仄
------------------------------------------------------------*/
void NPC_createInitTime( int index )
{
/* 綜月儀卞卅勻兇井日襖毛澀爛 */
NPC_create[index].workdata[NPC_CREATEWORKMAKESTARTSEC] =
NowTime.tv_sec;
NPC_create[index].workdata[NPC_CREATEWORKMAKESTARTUSEC] =
NowTime.tv_usec;
}
/*------------------------------------------------------------
* 襯毛綜勻兇 卞市它件玄醒毛 支允楮醒
* 婁醒
* index int 奶件犯永弁旦
* 忒曰襖
* 卅仄
------------------------------------------------------------*/
void NPC_createIncreaseEnemynum( int index )
{
if( !NPC_CHECKCREATEINDEX(index) )return;
NPC_create[index].workdata[NPC_CREATEWORKENEMYNUM] ++;
}
/*------------------------------------------------------------
* 襯互韶氏匹市它件玄醒毛蛹日允楮醒
* 婁醒
* index int 奶件犯永弁旦
* 忒曰襖
* 卅仄
------------------------------------------------------------*/
void NPC_createDecreaseEnemynum( int index )
{
if( !NPC_CHECKCREATEINDEX(index) )return;
NPC_create[index].workdata[NPC_CREATEWORKENEMYNUM] --;
}
/*------------------------------------------------------------
* 市它件玄醒互漆 井譬屯月楮醒
* 婁醒
* index int 奶件犯永弁旦
* 忒曰襖
* TRUE:MAX FALSE:啜丹
------------------------------------------------------------*/
BOOL NPC_createCheckMaxEnemynum( int index )
{
if( NPC_create[index].intdata[NPC_CREATEBORNNUM]
<= NPC_create[index].workdata[NPC_CREATEWORKENEMYNUM] )
return TRUE;
else
return FALSE;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -