Ejemplo n.º 1
0
int MAPPOINT_getMapWarpGoal( int ps, int ofl, int ox, int oy, int *fl, int *x, int *y)
{
	if( !MAPPOINT_CHECKINDEX( ps) ){
		print("获取传送点PS:%d 错误!!\n", ps);
		return -1;
	}

	if( MapWarppoint[ps].ofloor != ofl ||
		MapWarppoint[ps].ox != ox || MapWarppoint[ps].oy != oy ){
		print( "不正常传送点: 旧的有问题传送点 %d %d %d !!\n" , ofl,ox,oy );
		int newmappointtime = time(NULL);
			if(newmappointtime-resetmappointtime>=60){
				MAPPOINT_resetMapWarpPoint( 1);
				MAPPOINT_loadMapWarpPoint();
				resetmappointtime = newmappointtime;
			}
		return -1;
	}
	//可加判断条件
	if( MAP_IsValidCoordinate( MapWarppoint[ps].floor, MapWarppoint[ps].x, MapWarppoint[ps].y)== FALSE ){
		print( "不正常传送点:有问题 %d %d %d !!\n" ,
			MapWarppoint[ps].floor,MapWarppoint[ps].x, MapWarppoint[ps].y );
		return -1;
	}
	*fl = MapWarppoint[ps].floor;
	*x  = MapWarppoint[ps].x;
	*y  = MapWarppoint[ps].y;
	return 1;
}
Ejemplo n.º 2
0
BOOL NPC_WarpManInit( int meindex )
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
	char buff2[256];
	char buf[1024];
	int fl,x,y;
		
	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
		print("WarpMan:GetArgStrErr");
		return FALSE;
	}
   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );
#ifdef _NEW_WARPMAN
	if( strstr( npcarg,"NEWWARPMAN") )      {
			//timeman 功能
			CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1);
			if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){
				CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000);
			}
#ifdef _TREASURE_BOX
			CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE);
			if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){
				if( strstr( buff2, "ON") != NULL ){
					CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);
					CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec);
					if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL )
						CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2));
					if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL )
						CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2));
					CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 );
				}
			}

#endif
			return TRUE;
	}else{
#endif
		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
			char filename[256];
			 if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL )
				 print("\n Warpman Err -> file:%s", filename);
			return FALSE;
		}
		getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
		fl=atoi(buff2);
		getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
		x=atoi(buff2);
		getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
		y=atoi(buff2);
		if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
			char filename[256];
			NPC_Util_CheckAssignArgFile( meindex, filename);
			print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y );
			return FALSE;
		}
#ifdef _NEW_WARPMAN
	}
#endif
	return TRUE;
}
Ejemplo n.º 3
0
int NPC_WarpInit(int charaindex) {
  char arg[NPC_UTIL_GETARGSTR_BUFSIZE];
  int ret;
  int floor = -1, x = -1, y = -1;
  char token[128];

  CHAR_setInt(charaindex, CHAR_WHICHTYPE, CHAR_TYPEWARP);
  if(NPC_Util_GetArgStr(charaindex, arg, sizeof(arg)) == NULL) {
    print("\n GetArgStr ERR!!");
    return FALSE;
  }
#ifdef _NEW_WARPPOINT
  if(strstr(arg, "FREEMORE") != NULL) {
    CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
  } else {
#endif
    return FALSE;
    ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token));
    if(ret) floor = atoi(token);
    ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token));
    if(ret) x = atoi(token);
    ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token));
    if(ret) y = atoi(token);
    if(MAP_IsValidCoordinate(floor, x, y) == FALSE) {
      NPC_WarpsetNeverMake(charaindex);
      //print( "Warp NPC:Invalid arg:%s\n", arg );
      print("Warp Npc Err:%d:%d:%d->(%s)\n",
            CHAR_getInt(charaindex, CHAR_FLOOR),
            CHAR_getInt(charaindex, CHAR_X),
            CHAR_getInt(charaindex, CHAR_Y),
            arg);
      return FALSE;
    }
    ret = getStringFromIndexWithDelim(arg, "|", 4, token, sizeof(token));
    if(ret == TRUE) {
      int day;
      day = NPC_TimeWarpCheck(charaindex, token, 0);
      if(day == 0) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT);
      } else if(day == 1) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING);
      } else if(day == 2) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON);
      } else {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
      }
    } else {
      CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
    }
#ifdef _NEW_WARPPOINT
  }
#endif
  CHAR_setFlg(charaindex, CHAR_ISVISIBLE, 0);
  CHAR_setFlg(charaindex, CHAR_ISOVERED, 1);
  CHAR_setFlg(charaindex, CHAR_ISATTACKED, 0);
  CHAR_setFlg(charaindex, CHAR_ISATTACK, 0);
  return TRUE;
}
Ejemplo n.º 4
0
void NPC_PairUserAndWarp( int meindex, int toindex, int forindex, char *arg)
{
	char buf1[256];
	int fl=-1, x=-1, y=-1;

	if( !CHAR_CHECKINDEX( toindex)) return;
	CHAR_setWorkInt( toindex, CHAR_MYPAIRINDEX, -1);
	CHAR_setWorkInt( toindex, CHAR_MYPAIRFLG, -1);
	if( !CHAR_CHECKINDEX( forindex)) return;
	CHAR_setWorkInt( forindex, CHAR_MYPAIRINDEX, -1);
	CHAR_setWorkInt( forindex, CHAR_MYPAIRFLG, -1);

	if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return;
	if( CHAR_getWorkInt( forindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return;

	if( NPC_Util_GetStrFromStrWithDelim( arg, "PAIRTOPOINT", buf1, sizeof( buf1) ) != NULL){
		char buf2[256];
		if( getStringFromIndexWithDelim( buf1,",",1,buf2,sizeof( buf2)) != FALSE )
			fl = atoi( buf2);
		if( getStringFromIndexWithDelim( buf1,",",2,buf2,sizeof( buf2)) != FALSE )
			x = atoi( buf2);
		if( getStringFromIndexWithDelim( buf1,",",3,buf2,sizeof( buf2)) != FALSE )
			y = atoi( buf2);
	}
	CHAR_DischargePartyNoMsg( toindex);//解散团队
	CHAR_DischargePartyNoMsg( forindex);//解散团队
	if( MAP_IsValidCoordinate( fl, x, y) != FALSE ){
		CHAR_warpToSpecificPoint( toindex, fl, x, y);
		CHAR_warpToSpecificPoint( forindex, fl, x, y);
	}

	CHAR_JoinParty_Main( toindex, forindex);
	//lssproto_PR_send( fd, 0, 1);
	{
		int i;
		for( i=0; i<MAXPAIRNUMS; i++)	{
			if( PairList[0][i].use > 0 ){
				if( PairList[0][i].pindex == toindex ||
					PairList[0][i].pindex == forindex ){
					PairList[0][i].pindex = -1;
					PairList[0][i].use = -1;
				}
			}
			if( PairList[1][i].use > 0 ){
				if( PairList[1][i].pindex == toindex ||
					PairList[1][i].pindex == forindex ){
					PairList[1][i].pindex = -1;
					PairList[1][i].use = -1;
				}
			}
		}
	}
}
Ejemplo n.º 5
0
/*********************************
* ������
*********************************/
BOOL NPC_FMPKManInit( int meindex )
{

    char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
    char buf[1024];
    char buff2[256];
    int fl, x, y, meid;

    if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL) {
        print("FMPKMan:GetArgStrErr");
        return FALSE;
    }

    /*--������ɬ�ý�ľ�����¾�----*/
    /*--������ɬ�ý�ľ��ئ��ľ��NPCë����ئ�г��������--*/
    if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL) {
        print("FMPKMan Err is %s",npcarg);
        print("FMPKMan Err");
        return FALSE;
    }

    /*--������ɬ�ý�ľ���л��ַ������ƻ�ئ��ľ������Ƿ��NPCë����ئ��--*/
    getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
    fl=atoi(buff2);
    getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
    x=atoi(buff2);
    getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
    y=atoi(buff2);

    if( MAP_IsValidCoordinate( fl,x,y )== FALSE ) {
        print( "FMWarp NPC:Invalid warpman ERR" );
        return FALSE;
    }

    meid = NPC_Util_GetNumFromStrWithDelim(npcarg, "ID");
    if ((meid < 0) || (meid >= MAX_SCHEDULEMAN))
    {
        print("FMPKMAN NPC: Init error Invalid ID:%d", meid);
        return	FALSE;
    }
    CHAR_setWorkInt(meindex, NPC_WORK_ID, meid);

    /*--������ɬ��--*/
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );

    return TRUE;

}
Ejemplo n.º 6
0
/*********************************
* âÙÓåÖÊ  
*********************************/
BOOL NPC_FMPKManInit( int meindex )
{

	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf[1024];
	char buff2[256];
	int fl, x, y, meid;

	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){
		print("FMPKMan:GetArgStrErr");
		return FALSE;
	}

	/*--·¥¡õÃó»¥É¬Àýñľ»¯ÖÐÔ¾®----*/
	/*--·¥¡õÃó»¥É¬Àýñľ»¯Ø¦ØêľÈÉNPCë×ÛÈÕئÖгðÎç±åÔÊÔÂ--*/
	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
	        print("FMPKMan Err is %s",npcarg);
		print("FMPKMan Err");
		return FALSE;
	}

	/*--·¥¡õÃó»¥É¬Àýñľ»¯Öл¯ÊÖ·¥¡õÃóÛÆ»¥Ø¦ØêľÈÉÊÖÇÐÇ·ÊÏNPCë×ÛÈÕئÖÐ--*/
	getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
	fl=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
	x=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
	y=atoi(buff2);

	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
		print( "FMWarp NPC:Invalid warpman ERR" );
		return FALSE;
	}
	
	meid = NPC_Util_GetNumFromStrWithDelim(npcarg, "ID");
	if ((meid < 0) || (meid >= MAX_SCHEDULEMAN))
	{
		print("FMPKMAN NPC: Init error Invalid ID:%d", meid);
		return	FALSE;
	}
	CHAR_setWorkInt(meindex, NPC_WORK_ID, meid);

	/*--ÕýÄÌÃóɬÀÃ--*/
   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );

    return TRUE;

}
Ejemplo n.º 7
0
/*********************************
* ½é´ü½èÍý
*********************************/
BOOL NPC_FMPKManInit( int meindex )
{

	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf[1024];
	char buff2[256];
	int fl, x, y, meid;

	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){
		print("FMPKMan:GetArgStrErr");
		return FALSE;
	}

	/*--¥ï¡¼¥×¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤«----*/
	/*--¥ï¡¼¥×¤¬ÀßÄꤵ¤ì¤Æ¤Ê¤±¤ì¤ÐNPC¤òºî¤é¤Ê¤¤¤³¤È¤Ë¤¹¤ë--*/
	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
	        print("FMPKMan Err is %s",npcarg);
		print("FMPKMan Err");
		return FALSE;
	}

	/*--¥ï¡¼¥×¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Æ¤â¥ï¡¼¥×À褬¤Ê¤±¤ì¤Ð¤â¤Á¤í¤óNPC¤òºî¤é¤Ê¤¤--*/
	getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
	fl=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
	x=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
	y=atoi(buff2);

	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
		print( "FMWarp NPC:Invalid warpman ERR" );
		return FALSE;
	}
	
	meid = NPC_Util_GetNumFromStrWithDelim(npcarg, "ID");
	if ((meid < 0) || (meid >= MAX_SCHEDULEMAN))
	{
		print("FMPKMAN NPC: Init error Invalid ID:%d", meid);
		return	FALSE;
	}
	CHAR_setWorkInt(meindex, NPC_WORK_ID, meid);

	/*--¥¿¥¤¥×ÀßÄê--*/
   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );

    return TRUE;

}
Ejemplo n.º 8
0
BOOL NPC_OldmanInit( int meindex )
{

#if 0
    int     oldmanid=0, bornfl=0, bornx=0 ,borny=0;
    char*   npcarg;
    char    token[32]="";
/*    print( "長老的引數: '%s'\n" , CHAR_getChar(
                         meindex, CHAR_NPCARGUMENT ));*/
    npcarg = CHAR_getChar(meindex,CHAR_NPCARGUMENT);

    getStringFromIndexWithDelim( npcarg,"|",1,token,sizeof(token));
    oldmanid = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",2,token,sizeof(token));
    bornfl = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",3,token,sizeof(token));
    bornx = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",4,token,sizeof(token));
    borny = atoi( token );

    /* 贏  反ID毛創尹化雲仁瓜伉 */
    CHAR_setWorkInt( meindex , CHAR_WORKOLDMANID ,oldmanid );
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEHEALER );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );

    if( MAP_IsValidCoordinate( bornfl,bornx,borny )== TRUE
        /*  白夫失ID互中中井升丹井毛譬屯月  */
        &&
        CHAR_ElderSetPosition( oldmanid ,bornfl,bornx, borny ) 
        == TRUE ){
        /* 贏  及匏  毛賡渝祭允月卅曰 */
        return TRUE;
    }else{
        printf( "Invalid elder npcarg=%s\n", npcarg );
        
        /* 丐引曰卞褐邰卅巨仿□卅及匹}neverMake仄卅中〔
             莢巨仿□丟永本□斥請今六月 */
        return FALSE;
    }
#endif

	return FALSE;

}
Ejemplo n.º 9
0
void Check_EnemyWarpMe( int meindex, char *args )
{

	char buf1[256];
	int objindex,index;
	int nfl, nx, ny;
	OBJECT obj;

	memset( buf1, 0, sizeof( buf1));
	if( NPC_Util_GetStrFromStrWithDelim( args, "REPLACEMENT", buf1, sizeof( buf1)) == NULL ) {
		return;
	}
	GetRand_WarpPoint( buf1, &nfl, &nx, &ny );

	if( MAP_IsValidCoordinate( nfl, nx, ny ) == FALSE ){
		char filename[256];
		NPC_Util_CheckAssignArgFile( meindex, filename);
		print( "NPCENEMY REPLACEMENT: %s .Invalid POINT( %d, %d, %d)\n", filename, nfl, nx, ny );
		return;
	}
	{
		int ofl, ox, oy;
		ofl = CHAR_getInt( meindex, CHAR_FLOOR );
		ox = CHAR_getInt( meindex, CHAR_X );
		oy = CHAR_getInt( meindex, CHAR_Y );

		for ( obj=MAP_getTopObj( nfl, nx, ny); obj; obj=NEXT_OBJECT( obj) ) {
			objindex = GET_OBJINDEX( obj);
			if (OBJECT_getType( objindex) != OBJTYPE_CHARA) continue;
			index = OBJECT_getIndex( objindex);
			if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER &&
				CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) != CHAR_TYPEPET )	{
				CHAR_warpToSpecificPoint( index, ofl, ox, oy);
				CHAR_sendCToArroundCharacter( objindex);
				break;
			}
		}
	}
	objindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX);
	CHAR_warpToSpecificPoint( meindex, nfl, nx, ny);
	CHAR_sendCToArroundCharacter( objindex);
}
Ejemplo n.º 10
0
/*********************************
* 赓渝质  
*********************************/
BOOL NPC_FMPKCallManInit( int meindex )
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf[1024];
	char buff2[256];
	int fl, x, y;

	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){
		print("FMPKCallMan:GetArgStrErr");
		return FALSE;
	}

	/*--伐□皿互涩烂今木化中月井----*/
	/*--伐□皿互涩烂今木化卅仃木壬NPC毛综日卅中仇午卞允月--*/
	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
	        print("FMPKCallMan Err is %s",npcarg);
		print("FMPKCallMan Err");
		return FALSE;
	}

	/*--伐□皿互涩烂今木化中化手伐□皿燮互卅仃木壬手切欠氏NPC毛综日卅中--*/
	getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
	fl=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
	x=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
	y=atoi(buff2);

	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
		print( "FMWarp NPC:Invalid warpman ERR" );
		return FALSE;
	}

	/*--正奶皿涩烂--*/
   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );

    return TRUE;
}
Ejemplo n.º 11
0
BOOL NPC_NPCEnemyInit( int meindex )
{
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
	char	buf[64];
	int		tmp, gym;


	if((argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1))) == NULL )	{
		print("Can't GetArgStr !!");
		return FALSE;
	}
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "sktype", buf, sizeof( buf)) != NULL ){
		CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, atoi( buf));
	}else{
		CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, 0);
	}

	if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ){
		char filename[256];
		NPC_Util_CheckAssignArgFile( meindex, filename);
		print( "NPCEnemy: nothing parameter [enemyno]:\n%s\n", filename);
		return FALSE;
	}else {
		int		i;
		for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) {
			int		curEnemy;
			char	data[128];
			int		ret;
			ret = getStringFromIndexWithDelim( buf,",", i + 1, data, sizeof(data));
			if( ret == FALSE)
				break;
			curEnemy = ENEMY_getEnemyArrayFromId( atoi( data));
			if( !ENEMY_CHECKINDEX( curEnemy) ) {
				char filename[256];
				NPC_Util_CheckAssignArgFile( meindex, filename);
				print( "NPCEnemy: invalid param [enemyno:%d data:%s curEnemy:%d]\nfile:%s\n",i+1, data, curEnemy, filename );
				return FALSE;
			}
		}
	}
	
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) == NULL ) {
			print( "NPCEnemy:有指定steal而沒有指定item,很奇怪\n");
			return FALSE;
		}
	}

	gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym");

	if( gym > 0 ){
		CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,
			gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] );
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,
			CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER ) );
		CHAR_setInt( meindex, CHAR_LV, gym );
	}
	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");
	if( tmp != 1 ) 
		tmp = 0;
	CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);
	if( strstr( argstr, "NEWNPCENEMY") != 0 )	{
		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, 0 );
		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, 0 );
		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, 0 );
	}else	{
		if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 1 ) {
			char buff1[256];
			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpfl", buff1, sizeof( buff1) ) == NULL) {
				print( "NPCENEMY: nothing warp_floor %s\n", buff1);
				return FALSE;
			}
			tmp = atoi( buff1);
			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, tmp);
			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpx", buff1, sizeof( buff1) ) == NULL) {
				print( "NPCENEMY: nothing warp_x\n");
				return FALSE;
			}
			tmp = atoi( buff1);
			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, tmp);
			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpy", buff1, sizeof( buff1) ) == NULL) {
				print( "NPCENEMY: nothing warp_y\n");
				return FALSE;
			}
			tmp = atoi( buff1);
			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, tmp);
			if( MAP_IsValidCoordinate( CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ) == FALSE ){
				char filename[256];
				NPC_Util_CheckAssignArgFile( meindex, filename);
				print( "NPCENEMY: %s: .\n %s.\nInvalid fl=%d,x=%d,y=%d\n", filename, argstr,
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) );
				return FALSE;
			}
		}
	}
	//andy_end
	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "entype");
	if( tmp != 1 && tmp != 2)
		tmp = 0;
	CHAR_setWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE, tmp);

	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "onebattle");
	if( tmp != 1 )
		tmp = 0;
	CHAR_setWorkInt( meindex, CHAR_WORK_ONEBATTLE, tmp);

	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time");
	if( tmp == -1 )
		tmp = NPC_ENEMY_REVIVALTIMA_DEFAULT;
	CHAR_setWorkInt( meindex, CHAR_WORK_REVIVALTIME, tmp);

	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPENPCENEMY );
	CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
	CHAR_setWorkInt( meindex, CHAR_WORK_BASEIMGBAK,
						CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER));
	return TRUE;
}
Ejemplo n.º 12
0
void NPC_WarpWarpCharacter(int warpnpcindex, int charaindex) {
  char arg[NPC_UTIL_GETARGSTR_BUFSIZE];
  int i = 0;
#ifdef _NEW_WARPPOINT
  char buf1[256], buf2[256], buf3[256], freemsg[256];
  int nBefind = FALSE;
  struct wapepoints {
    int m_floor;
    int m_x;
    int m_y;
  } Wpoint[10] = {
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0},
      {-1, 0, 0}
  };
  int iRand = 0;
#endif
  if(CHAR_getInt(charaindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) {
    return;
  }

  if(NPC_Util_GetArgStr(warpnpcindex, arg, sizeof(arg)) == NULL) {
    return;
  }

  {
    char token[16];
    int floor = 0, x = 0, y = 0;
    int ret;

#ifdef _NEW_WARPPOINT
    i = 1;
    if(strstr(arg, "FREEMORE") != NULL) {
      int k = 1, pw = -1;
      while(getStringFromIndexWithDelim(arg, "OVER", i, buf1, sizeof(buf1)) != FALSE) {
        i++;
        if(NPC_Util_GetStrFromStrWithDelim(buf1, "FREE", buf2, sizeof(buf2)) == NULL)
          continue;
        if(NPC_ActionPassCheck(warpnpcindex, charaindex, buf2) == FALSE) {
          continue;
        } else {
          iRand = 0;
          if(NPC_Util_GetStrFromStrWithDelim(buf1, "TO", buf2, sizeof(buf2)) != FALSE) {
            k = 1;
            while(getStringFromIndexWithDelim(buf2, "&", k, freemsg, sizeof(freemsg)) != FALSE) {
              k++;
              if(getStringFromIndexWithDelim(freemsg, ",", 1, buf3, sizeof(buf3)) == FALSE)
                break;
              Wpoint[iRand].m_floor = atoi(buf3);
              if(getStringFromIndexWithDelim(freemsg, ",", 2, buf3, sizeof(buf3)) == FALSE)
                break;
              Wpoint[iRand].m_x = atoi(buf3);
              if(getStringFromIndexWithDelim(freemsg, ",", 3, buf3, sizeof(buf3)) == FALSE)
                break;
              Wpoint[iRand].m_y = atoi(buf3);
              iRand++;
              nBefind = TRUE;
              if(iRand >= arraysizeof(Wpoint))
                break;
            }
            break;
          }
        }
        if(nBefind == TRUE)
          break;
      }

      if(nBefind == FALSE || iRand <= 0) {  //没找到条件
        floor = CHAR_getInt(warpnpcindex, CHAR_FLOOR);
        x = CHAR_getInt(warpnpcindex, CHAR_X);
        y = CHAR_getInt(warpnpcindex, CHAR_Y);
      } else {
        pw = RAND(0, (iRand - 1));
        floor = Wpoint[pw].m_floor;
        x = Wpoint[pw].m_x;
        y = Wpoint[pw].m_y;
        if(NPC_Util_GetStrFromStrWithDelim(arg, "CHECKPARTY", buf1, sizeof(buf1)) != NULL) {
          if(strstr(buf1, "TRUE") != NULL) {
            if(CHAR_getWorkInt(charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER) {
              CHAR_DischargeParty(charaindex, 0); // 拆队
            }
          }
        }
        if(MAP_IsValidCoordinate(floor, x, y) == FALSE) {
          print("*Warp NPC:Invalid %d %d %d", floor, x, y);
          return;
        }
        k = 0;
      }
    } else {
#endif
      ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token));
      if(ret == FALSE)return;
      floor = atoi(token);

      ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token));
      if(ret == FALSE)return;
      x = atoi(token);

      ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token));
      if(ret == FALSE)return;
      y = atoi(token);
#ifdef _NEW_WARPPOINT
    }
#endif
    {
      int ff = floor;

      int of = CHAR_getInt(charaindex, CHAR_FLOOR);
      int fd = CHAR_getWorkInt(charaindex, CHAR_WORKFD);
      int eqen = getEqNoenemy(fd);
      if(eqen < 200) {
        if(eqen >= 120) {
          if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400) || (ff == 500)) {
            if((of != 100) && (of != 200) && (of != 300) && (of != 400) && (of != 500)) {
              CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE);
            }
          } else {
            if((of == 100) || (of == 200) || (of == 300) || (of == 400) || (of == 500)) {
              CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE);
            }
          }
        } else if(eqen >= 80) {
          if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400)) {
            if((of != 100) && (of != 200) && (of != 300) && (of != 400)) {
              CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE);
            }
          } else {
            if((of == 100) || (of == 200) || (of == 300) || (of == 400)) {
              CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE);
            }
          }
        } else if(eqen >= 40) {
          if((ff == 100) || (ff == 200)) {
            if((of != 100) && (of != 200)) {
              CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE);
            }
          } else {
            if((of == 100) || (of == 200)) {
              CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE);
            }
          }
        }
      }
    }

#ifdef _DROPSTAKENEW
    {
      i = 0;
      for(i = 0; i < MAXSTAKENUM; i++) {
        if(CHAR_getWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i) > 0) {
          char tmpbuf[256];
          snprintf(tmpbuf, sizeof(tmpbuf), "由於你离开了房间,所以将无法取回彩券!");
          CHAR_setWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i, 0);
          CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW);
        }
      }
      CHAR_setWorkInt(charaindex, CHAR_WORKSTAKEFLAG, 0);
#ifdef _FIX_GAMBLENUM
      if(CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0)
        CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0);
#endif
    }
#endif
    if(floor == -1) {
      return;
    } else {
      if(MAP_IsValidCoordinate(floor, x, y) == FALSE) {
        print("Warp NPC:Invalid %d %d %d", floor, x, y);
        return;
      }

      CHAR_warpToSpecificPoint(charaindex, floor, x, y);
    }
  }
}
Ejemplo n.º 13
0
BOOL NPC_WarpInit( int charaindex )
{
	char arg1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *arg;
    int ret;
    int floor=-1,x=-1,y=-1;
    char    token[128];

#ifdef _RECORD_NPCMAN_ //紀錄
	char evtype[256];
	char evtime[256];
	char argfile[256];

	if( NPC_Util_CheckAssignArgFile( charaindex, argfile) == NULL )
		sprintf( argfile, "NULL");
#endif

	CHAR_setInt( charaindex, CHAR_WHICHTYPE , CHAR_TYPEWARP );
    if((arg = NPC_Util_GetArgStr( charaindex, arg1, sizeof( arg1))) == NULL )	{
		print("\n GetArgStr ERR!!");
		return FALSE;
	}
#ifdef _NEW_WARPPOINT
	if( strstr( arg, "FREEMORE") != NULL )	{
#ifdef _RECORD_NPCMAN_ //紀錄
		sprintf( evtype, "FREE");
		sprintf( evtime, "NULL");
#endif
		CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
	}else	{
#endif
#ifdef _MAP_WARPPOINT
		return FALSE;
#endif
#ifdef _RECORD_NPCMAN_ //紀錄
		sprintf( evtype, "NONE");
#endif
		ret=getStringFromIndexWithDelim(arg,"|", 1,token,sizeof(token));
		if( ret ) floor = atoi( token );
		ret=getStringFromIndexWithDelim(arg,"|", 2,token,sizeof(token));
		if( ret ) x = atoi( token );
		ret=getStringFromIndexWithDelim(arg,"|", 3,token,sizeof(token));
		if( ret ) y = atoi( token );
		if( MAP_IsValidCoordinate( floor,x,y )== FALSE ){
			NPC_WarpsetNeverMake( charaindex );
			//print( "Warp NPC:Invalid arg:%s\n", arg );
			print( "Warp Npc Err:%d:%d:%d->(%s)\n",
        		CHAR_getInt( charaindex, CHAR_FLOOR ),
        		CHAR_getInt( charaindex, CHAR_X ),
        		CHAR_getInt( charaindex, CHAR_Y ),
        		arg );
			return FALSE;
		}
		ret=getStringFromIndexWithDelim(arg,"|",4,token,sizeof(token));
		if(ret==TRUE){
			int day;
			day=NPC_TimeWarpCheck(charaindex,token,0);
				if(day==0){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "N");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT);
				}else if(day==1){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "M");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING);
				}else if(day==2){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "A");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON);
				}else{
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "NULL");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
				}
		}else{
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "NULL");
#endif
			CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
		}
#ifdef _NEW_WARPPOINT
	}
#endif
    CHAR_setFlg( charaindex,CHAR_ISVISIBLE, 0 );
    CHAR_setFlg( charaindex,CHAR_ISOVERED,1 );
    CHAR_setFlg( charaindex,CHAR_ISATTACKED,0 );
    CHAR_setFlg( charaindex,CHAR_ISATTACK,0 );

#ifdef _RECORD_NPCMAN_ //紀錄
	{
		FILE *fp=NULL;
		char filename[256];
		sprintf( filename,"./data/npc/%s", "mapwarp.txt");
		if( (fp = fopen( filename, "a+")) != NULL ) {
			fprintf( fp, "%s:%s:%d,%d,%d:%d,%d,%d:%s\n",
				evtype, evtime,
				CHAR_getInt( charaindex, CHAR_FLOOR),
				CHAR_getInt( charaindex, CHAR_X),
				CHAR_getInt( charaindex, CHAR_Y),
				floor, x, y, argfile );
			fclose( fp);
		}else {
		}
	}
#endif
    return TRUE;
}