Example #1
0
/*
 * 称号をもってるかどうかしらべる
 *
 * 0 :もってない
 * 1 : もってる
 * 負 : Error
 */
BOOL NPC_Util_HaveTitle( int charindex , int titleindex )
{
    int i;
    Char *c;
    if( !CHAR_CHECKINDEX( charindex ) )return -1;
        
    c = CHAR_getCharPointer( charindex );
    for(i=0;i<CHAR_TITLEMAXHAVE;i++){
        if( c->indexOfHaveTitle[i] == titleindex ){
            return TRUE;
        }
    }
    return FALSE;
}
Example #2
0
BOOL NPC_Util_AddOneTitle( int charindex, int titleindex )
{
    int i;
    Char *c ;

    if( !CHAR_CHECKINDEX( charindex ) )return FALSE;

    c = CHAR_getCharPointer( charindex );
	// CoolFish: +1 2001/11/05
	if (!c)	return FALSE;

    for(i=0;i<CHAR_TITLEMAXHAVE;i++){
        if( c->indexOfHaveTitle[i] == -1 ){
            c->indexOfHaveTitle[i] = titleindex;
            return TRUE;
        }
    }
    return FALSE;
}
Example #3
0
void NPC_NPCEnemyLoop( int meindex )
{

	if( NowTime.tv_sec > CHAR_getWorkInt( meindex, CHAR_WORK_DIETIME) +
						 CHAR_getWorkInt( meindex, CHAR_WORK_REVIVALTIME)){
		Char	*ch;
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,	CHAR_getWorkInt( meindex, CHAR_WORK_BASEIMGBAK));
		print("bbi---->bi11");

		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
		CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
		MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y));
	    ch  = CHAR_getCharPointer( meindex);
	    if( ch != NULL ) {
			strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
						sizeof( ch->charfunctable[CHAR_LOOPFUNC]),	"");
			CHAR_constructFunctable( meindex);
//			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 0);
		}
	}
}
Example #4
0
int NPC_NPCEnemy_Dying( int battleindex, int meindex )
{
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
	char	buf[64];
	int	i,toindex=-1;
	int tmp=-1;

	if( !CHAR_CHECKINDEX( meindex)) {
		return FALSE;
	}
	argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));

#ifdef _NEW_WARPMAN
	if( strstr( argstr, "NEWNPCENEMY") )    {
	}else	{
#endif
	/* 蠅    及陲太 */
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) {
		for( i = 0; i < 5; i ++ ) {
			/* 爵  卞輔笛仄化中月蟈夠卞丟永本□斥 */
			int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
			if( CHAR_CHECKINDEX( toindex) )	{
				CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW );
			}
		}

	}
#ifdef _NEW_WARPMAN
	}
#endif
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {
		print("\n steal TRUE !!");
		if( atoi( buf) == 1 ) {
			int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
			NPC_NPCEnemy_StealItem( argstr, meindex, charaindex);
		}
		
	}
#ifdef _ALLDOMAN // (不可開) Syu ADD 排行榜NPC
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) {
			int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
			CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ;
			// Syu ADD 
			if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) )
				CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ; 
	}

#endif
	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");
	if( tmp != 1 ) 
		tmp = 0;
	CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);
	if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) {
	    Char 	*ch;
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0);
		print("bbi---->bi10");
		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));

		CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE);
		MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y));
	    ch  = CHAR_getCharPointer( meindex);
	    if( ch != NULL ) {
			strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
						sizeof( ch->charfunctable[CHAR_LOOPFUNC]),
						"NPCEnemyLoop");
			CHAR_constructFunctable( meindex);
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000);
			CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec);
		}else {
			print( "NPCENEMY:err\n");
		}
	}else {
		for( i = 0; i < 5; i ++ ) {
			toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
			if( CHAR_CHECKINDEX( toindex) ) {
#ifdef _NEW_WARPMAN
				if( strstr( argstr, "NEWNPCENEMY") )    {
					BOOL Party=TRUE;
					if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE )       {
						continue;
					}
					if( Party == TRUE )	{
					}else	{
						if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER )	{
							if( NPC_WarpAllMsg( meindex, toindex ) == TRUE )	{
								return TRUE;
							}
						}
						continue;
					}
				}
				CHAR_DischargeParty( toindex, 0); // 拆隊
				CHAR_warpToSpecificPoint( toindex,
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
					);

#else
				CHAR_warpToSpecificPoint( toindex,
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
								);
#endif
#ifdef _NPC_REPLACEMENT
				Check_EnemyWarpMe( meindex, argstr);
#endif
			}
		}
	}
	return TRUE;
}
Example #5
0
/*#ifdef _JZ_NPCBUF
		CHAR_NPCBUFPOINT = CHAR_WORKEQUITFIRE,   					//NPC arg文件緩存指針
		CHAR_NPCTIMERH32 = CHAR_WORKEQUITTHUNDER,					//NPC 計時器(高32位)
		CHAR_NPCTIMERL32 = CHAR_WORKEQUITICE,							//NPC 計時器(低32位)
		CHAR_NPCFILECTIMEH32 = CHAR_WORKEQUITWEAKEN,			//讀NPC arg文件的時間(高32位)
		CHAR_NPCFILECTIMEL32 = CHAR_WORKEQUITBARRIER,			//讀NPC arg文件的時間(低32位)
		//CHAR_NPCFILECTIME_HOUR = CHAR_WORKEQUITNOCAST,		//讀NPC arg文件時的時鐘
		//CHAR_NPCFILECTIME_MIN = CHAR_WORKEQUITFALLRIDE,		//讀NPC arg文件時的分鐘
#endif*/
char *NPC_Util_GetArgStr( int index, char *argstr, int len)
{
	char	filename[128];
	Char *ch;
	char	*cret = NULL;
	struct stat buff;
	int fd;
	char	opfile[128];
	if( (ch = CHAR_getCharPointer( index)) == NULL ) {
		print("GetArgStr Not get CharPointer\n");
		return NULL;				//獲得NPC結構指針
	}
	if( NPC_Util_CheckAssignArgFile( index, filename) != NULL ) {

		sprintf( opfile, "%s/%s", getNpcdir(),filename);
		if(stat(opfile,&buff)!=0)
		{
			print("NPC緩存機制 stat error:%s\n",strerror( errno ));
			buff.st_size = NPC_UTIL_GETARGSTR_BUFSIZE;
		}else{
			buff.st_size++;
		}
		//if(buff.st_size > len)buff.st_size = len;
		cret = (char *)ch->workint[CHAR_NPCBUFPOINT];												//獲得NPC緩存指針
		if( cret == NULL ) {																								//首先判斷NPC緩存是否已經加載數據
			//未加載緩存,申請內存,並將文件內容讀到緩存中
loadarg:
			cret = allocateMemory((unsigned int)buff.st_size);															//申請內存
			memset( cret, 0,buff.st_size);
			if( cret == NULL ) {																							//判斷申請內存是否成功,如果不成功則採用舊的模式
				//舊的文件即時讀取模式
				//print("NPC BUF OLD LOAD FILE %d\n",buff.st_size);
				if( NPC_Util_MargeStrFromArgFile( opfile, argstr, len) != NULL ) {
					cret = argstr;
				}
			}else{
				//新的NPC緩存模式
				//print("NPC BUF NEW LOAD FILE %d\n",buff.st_size);
				if( NPC_Util_MargeStrFromArgFile( opfile, cret, buff.st_size) != NULL ) {
					//memcpy(cret,argstr,buff.st_size);
					ch->workint[CHAR_NPCBUFPOINT] = (int)cret;
					ch->workint[CHAR_NPCFILECTIMEH32] = (unsigned long)buff.st_mtime;
				}else{
					freeMemory(cret);
					cret = NULL;
				}
			}
		}else
		{
			//print("NPC BUF NEW %d\n",buff.st_size);
			//已加載緩存,判斷是否數據被更改,如果沒被更改直接返回緩存指針,如果更改的話則GOTO到未加載緩存的代碼
			//2個計時器暫時不用
			//if(buff.st_size > NPC_UTIL_GETARGSTR_BUFSIZE)buff.st_size = NPC_UTIL_GETARGSTR_BUFSIZE;
			if((unsigned long)ch->workint[CHAR_NPCFILECTIMEH32] != (unsigned long)buff.st_mtime)
			{
					print("npc updata:%s\n",opfile);
					freeMemory(cret);
					cret = NULL;
					goto loadarg;
			}
			//memcpy(argstr,cret,buff.st_size);
			//cret = argstr;
		}
	}else {
		if( CHAR_getChar( index, CHAR_NPCARGUMENT) != NULL ){
			strcpy( argstr, CHAR_getChar( index, CHAR_NPCARGUMENT));
			cret = argstr;
		}else{
			cret = NULL;
		}
	}
	if( cret == NULL ) print("File:%s\n", NPC_Util_CheckAssignArgFile( index, opfile));

	return( cret);

/*	if( NPC_Util_CheckAssignArgFile( index, filename) != NULL ) {
		if( NPC_Util_MargeStrFromArgFile( filename, argstr, len) != NULL ) {
			cret = argstr;
		}
	}else {
		if( CHAR_getChar( index, CHAR_NPCARGUMENT) != NULL ){
			strcpy( argstr, CHAR_getChar( index, CHAR_NPCARGUMENT));
			cret = argstr;
		}else{
			cret = NULL;
		}
	}
	if( cret == NULL ) print("File:%s\n", NPC_Util_CheckAssignArgFile( index, filename));

	return( cret);*/
}