/************************************************
 * Ïä·¤«¤±¤é¤ì¤¿»þ¤Î½èÍý
 ************************************************/
void NPC_PrintpassmanTalked( int meindex , int talkerindex , char *msg ,
							 int color )
{
	int i;
	int charnum;
	/* ¥×¥ì¥¤¥ä¡¼¤¬¥É¥¢¥Þ¥ó¤Î2¥°¥ê¥Ã¥É°ÊÆâ¤Ê¤éÈ¿±þ¤¹¤ë¡£ */
	if(NPC_Util_CharDistance( talkerindex, meindex ) > 2)return;
	
	/* ¼«Ê¬ÍѤδÉÍý¿Í¤Î̾Á°¤ò¸¡º÷¤¹¤ë*/
	charnum  = CHAR_getCharNum();
	for(i= CHAR_getPlayerMaxNum() +CHAR_getPetMaxNum();
		i<charnum;
		i++){

		if( CHAR_getCharUse(i) &&
			CHAR_getInt( i ,CHAR_WHICHTYPE) == CHAR_TYPEROOMADMIN ){
			if( strcmp( CHAR_getWorkChar(i,CHAR_WORKCHAR_MYNAME),
						CHAR_getWorkChar( meindex, CHAR_WORKCHAR_ADMNAME))
				==0 )
			{
				break;
			}
		}
	}
	if( i < charnum ) {
		NPC_RoomAdminNew_DspRoomPasswd( meindex, i, talkerindex);
	}
	else {
		CHAR_talkToCli( talkerindex, meindex, "¡C¡C¡C", NPC_RANKING_MSGCOLOR);
	}
}
/*-----------------------------------------------
 * ¼¡²ó³«ºÅ»þ´Ö¡¤Éô²°¤ò¸À¤¦
 *----------------------------------------------*/
static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex)
{
	char    msgbuf[2048];
	time_t  closetime;
	
	closetime = CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME);
	/* ¼¡¤Î³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡Ö·è¤Þ¤Ã¤Æ¤Þ¤»¤ó¡£¡×¥á¥Ã¥»¡¼¥¸*/
	if( closetime == 0 ) {
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
	}
	else {
		int     doorindex;
		char    argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
		char    explain[1024];      /*ÀâÌÀ*/
		char	buff[16];
		struct  tm tmwk;
		int     difftime;
		/* Éô²°¾ðÊó¤ò¼èÆÀ */
		doorindex = NPC_DoorSearchByName( 
					CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
		NPC_Util_GetArgStr( doorindex, argstr, sizeof( argstr));
		getStringFromIndexWithDelim(argstr, "|" , 9 , explain,sizeof(explain));
		/* Éô²°¾ðÊó*/
		if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
			strcpy( buff, "¸¹«Ç");
		}
		else {
			buff[0] = '\0';
		}
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1,
					explain,
					CHAR_getChar( doorindex, CHAR_NAME),
					buff
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
		/* Äù¤áÀÚ¤ê»þ´Ö */
		memcpy( &tmwk, localtime( &closetime), sizeof( tmwk));
		difftime = closetime - NowTime.tv_sec;
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2,
					tmwk.tm_hour,
					tmwk.tm_min,
					difftime / 3600,
					(difftime % 3600) / 60
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
		
		/* ²¼¸Â¶â³Û */
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3,
					CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT)
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
	}
	
}
예제 #3
0
void NPC_SysinfoTalked( int meindex, int tindex, char *msg, int color)
{
	char	*msgwk;
	char	*buff;
	int		len;
	int		msgno;

	len = strlen( msg)+1;
	msgwk = calloc( 1, sizeof(char)*len);
	buff = calloc( 1, sizeof(char)*len);
	strcpy( msgwk, msg);
	/* 旦矢□旦毛引午户月 */
	deleteSequentChar( msgwk, " ");
	if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE) == 0 ) {
		msgno = 0;
		if( strncmp( msgwk, cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg,
					strlen( cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg)) == 0)
		{
			if( getStringFromIndexWithDelim( msgwk, " ", 2, buff, len)
				== TRUE )
			{
				if( strcmp( buff, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_PASSWD))
					== 0 )
				{
					CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 1);
					CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, tindex);
					CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec);
					CHAR_talkToCli( tindex, meindex,
								"已移到指令模式。按下help即会出现说明档。",
								CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
					CHAR_talkToCli( tindex, meindex,
								"可以在enemystate 中了解敌人的产生和行动数。",
								CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));

				}
			}
		}
		if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE ) == 0 ) {
			NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG);
		}
	}else {
		if( tindex == CHAR_getWorkInt( meindex, CHAR_WORK_PLAYER)) {
			int		i;
			for( i = NPC_SYSINFO_MSG_ENDINFO; i < NPC_SYSINFO_MSG_NUM; i ++ ) {
				if( strncmp( msgwk, cmd_msg[i].msg, strlen( cmd_msg[i].msg)) == 0) {
					if( functbl[i] != NULL ) {
						functbl[i]( meindex, tindex, msgwk);
					}
					break;
				}
			}
			CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec);
		}
		else {
			NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG);
		}
	}
	free( msgwk);
	free( buff);
}
예제 #4
0
int NPC_DoorGetPasswd( int meindex, char *out , int len )
{
    char *m = CHAR_getWorkChar( meindex , CHAR_WORKDOORPASSWD );
    if( m == NULL )return -1;
    strcpysafe( out ,len , m );
    return 0;
}
/************************************************
 * Ïä·¤«¤±¤é¤ì¤¿»þ¤Î½èÍý
 ************************************************/
void NPC_RankingTalked( int meindex , int talkerindex , char *msg ,
							 int color )
{
	/* ¥×¥ì¥¤¥ä¡¼¤¬¥É¥¢¥Þ¥ó¤Î1¥°¥ê¥Ã¥É°ÊÆâ¤Ê¤éÈ¿±þ¤¹¤ë¡£ */
	if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;
	
	CHAR_talkToCli( talkerindex, meindex,
					NPC_ROOMADMINNEW_MSG_RANKING_INFO, 
					NPC_RANKING_MSGCOLOR);
	
	NPC_RoomAdminNew_ReadScoreFile( meindex, talkerindex, 
						CHAR_getWorkChar( meindex, CHAR_WORKCHAR_ADMNAME));
	
}
예제 #6
0
int NPC_DoorSearchByName( char *name )
{
    int i;
    int charnum = CHAR_getCharNum();

    for(i= CHAR_getPlayerMaxNum()  + CHAR_getPetMaxNum();
        i<charnum;
        i++){

        if( CHAR_getCharUse(i) &&
            CHAR_getInt( i ,CHAR_WHICHTYPE) == CHAR_TYPEDOOR ){
            if( strcmp( CHAR_getWorkChar(i,CHAR_WORKDOORNAME),name)==0 ){
                return i;
            }
        }
    }
    return -1;
}
예제 #7
0
void NPC_DoorTalked( int meindex , int talkerindex , char *msg , int color )
{
    char *m = CHAR_getWorkChar( meindex , CHAR_WORKDOORPASSWD );
    if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;
    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) != 1 ){
        return;
    }
    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) >= 1 &&
        ((unsigned long)NowTime.tv_sec) > (unsigned long)
                CHAR_getWorkInt( meindex , CHAR_WORKDOOREXPIRETIME )){
        print( "RINGO: passdoor expired ( talked )\n" );
        return;
    }
    if( m[0] == '\0' )return;
    cutDotsTail( msg );
    if( strcmp( m , msg ) == 0 ){
        NPC_DoorFlip( meindex , talkerindex );
    }else {
        CHAR_talkToCli( talkerindex , -1 , "密码不正确啦!", CHAR_COLORWHITE );
    }
}
/*-----------------------------------------------
 * Ïä·¤«¤±¤é¤ì¤¿¿Í¤¬Éô²°¤ò¼Ú¤ê¤Æ¤¤¤¿¤é¥Ñ¥¹¥ï¡¼¥É¤òɽ¼¨¤¹¤ë
 *----------------------------------------------*/
static void NPC_RoomAdminNew_DspRoomPasswd( int index, int adminindex, int talkerindex)
{
	int     i, rc, flg = FALSE;
	char    argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char    argstr2[NPC_UTIL_GETARGSTR_BUFSIZE];
	char    *cdkey;
	char    buf[128];
	char	buff[16];
	char    buf2[1024];

	NPC_ROOMINFO    info;

    //getcdkeyFromCharaIndex( talkerindex, cdkey, sizeof(cdkey));
	cdkey = CHAR_getChar( talkerindex, CHAR_CDKEY);
	
	NPC_Util_GetArgStr( adminindex, argstr, sizeof( argstr));
	for( i = 3; ; i ++ ) {
		if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) {
			rc = NPC_RoomAdminNew_ReadFile( buf, &info);
			if( rc == TRUE ) {
				/* CDKEY ¤È¥­¥ã¥é¤Î̾Á°¤¬°ìÃפ·¤¿¤é */
				if( strcmp( info.cdkey, cdkey) == 0 &&
					strcmp( info.charaname, 
							CHAR_getChar( talkerindex, CHAR_NAME)) == 0 )
				{
					int doorindex;
					char    msgbuf[256];
					/* Éô²°¾ðÊó¼èÆÀ */
					doorindex = NPC_DoorSearchByName( buf);
					NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2));
					getStringFromIndexWithDelim( argstr2, "|" , 9 , 
												 buf2,sizeof(buf2) );
					/* Éô²°¾ðÊó*/
					if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
						strcpy( buff, "¸¹«Ç");
					}
					else {
						buff[0] = '\0';
					}
					
					/* ¥á¥Ã¥»¡¼¥¸¥»¥Ã¥È */
					snprintf( msgbuf, sizeof( msgbuf), 
								NPC_ROOMADMINNEW_MSG_DSPPASSWD1,
								buf2,
								CHAR_getChar( doorindex, CHAR_NAME),
								buff
							);
					/* ¥á¥Ã¥»¡¼¥¸Á÷¿® */
					CHAR_talkToCli( talkerindex, index,msgbuf, 
									NPC_ROOMADMINNEW_MSGCOLOR);

					/* ¥á¥Ã¥»¡¼¥¸¥»¥Ã¥È */
					snprintf( msgbuf, sizeof( msgbuf), 
								NPC_ROOMADMINNEW_MSG_DSPPASSWD2,
								CHAR_getWorkChar(doorindex, CHAR_WORKDOORPASSWD)
							);
					/* ¥á¥Ã¥»¡¼¥¸Á÷¿® */
					CHAR_talkToCli( talkerindex, index,msgbuf, 
									NPC_ROOMADMINNEW_MSGCOLOR);
					flg = TRUE;
				}
			}
		}
		else {
			break;
		}
	}
	if( !flg) {
		CHAR_talkToCli( talkerindex, index,
						NPC_ROOMADMINNEW_MSG_PRINTPASSWD_NONE,
						NPC_ROOMADMINNEW_MSGCOLOR);
	}
}
예제 #9
0
/*
 * 玉失日仄中涩烂毛允月卞反}仇仇匹
 * maxhp , maxmp , level , str , tough 毛0卞允月午方中[
 *
 */
int NPC_DoorInit( int meindex )
{
    char arg[NPC_UTIL_GETARGSTR_BUFSIZE];
    char settingdir[1024];
    char buf[256];

    NPC_Util_GetArgStr( meindex, arg, sizeof( arg));
    CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC);

    getStringFromIndexWithDelim(arg, "|" , 1 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOOROPENG , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 2 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSEG , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 3 , buf,sizeof(buf) );
    CHAR_setWorkChar( meindex , CHAR_WORKDOORNAME , buf );
    strcpysafe( settingdir,sizeof( settingdir) , buf );
    getStringFromIndexWithDelim(arg, "|" , 4 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORSWITCHCOUNT , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 5 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSETIME , atoi( buf ));

    CHAR_setInt( meindex , CHAR_MERCHANTLEVEL , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 6 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORSOONFLG , atoi( buf ));

    getStringFromIndexWithDelim(arg, "|" , 7 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG , atoi( buf ));
    CHAR_setWorkInt( meindex , CHAR_WORKDOORORIGINALGRAPHIC,
                     CHAR_getInt( meindex,CHAR_BASEIMAGENUMBER ));
    CHAR_setInt( meindex, CHAR_LV, 0 );
    if( getStringFromIndexWithDelim( arg , "|" , 8 , buf ,sizeof( buf ))){
        if( strncmp( buf , "title" ,5 ) == 0 ){
            print( "This is a title door:'%s'\n" , buf );
            CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG ,0 );
            CHAR_setWorkChar( meindex , CHAR_WORKDOORTITLE , buf );
            CHAR_setInt( meindex, CHAR_LV, 1 );
        } else if( isdigit( buf[0] )){
            if( getStringFromIndexWithDelim(arg, "|" , 8 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORGOLDLIMIT, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 10 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORWEEK, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 11 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORHOUR, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 12 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORMINUTE, buf);
        }
    }

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    {
        int g = CHAR_getWorkInt( meindex , CHAR_WORKDOOROPENG );
        if( g >= 11900 && g <= 11915 ){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 15 );
        } else if( g >= 11916 && g <= 11931 ){

            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 16 );
        } else {
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -1 );
        }
        if(CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG )==2){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -2 );
        }
        if( CHAR_getInt( meindex , CHAR_BASEIMAGENUMBER ) ==
            ROPEGRAPHIC ){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID,-2 );
        }
    }

    {
        int closeg = CHAR_getWorkInt( meindex , CHAR_WORKDOORCLOSEG );
        int dir = -1;
        switch( closeg ){
            case 11900: dir = 6; break;  /* 霁及玉失 夫分曰仄凶 */
            case 11902: dir = 0; break;  /*          夫分曰丹尹 */
            case 11904: dir = 2; break;  /*          心亢丹尹 */
            case 11906: dir = 4; break;  /*          心亢仄凶 */

            case 11908: dir = 6; break;  /* 赢中霁及玉失 夫分曰仄凶 */
            case 11910: dir = 0; break;  /*              夫分曰丹尹 */
            case 11912: dir = 2; break;  /*              心亢丹尹 */
            case 11914: dir = 4; break;  /*              心亢仄凶 */

            case 11916: dir = 6; break;  /* 嗡及玉失 夫分曰仄凶 */
            case 11918: dir = 0; break;  /*          夫分曰丹尹 */
            case 11920: dir = 2; break;  /*          心亢丹尹 */
            case 11922: dir = 4; break;  /*          心亢仄凶 */

            case 11924: dir = 6; break;  /* 赢中嗡及玉失 夫分曰仄凶 */
            case 11926: dir = 0; break;  /*              夫分曰丹尹 */
            case 11928: dir = 2; break;  /*              心亢丹尹 */
            case 11930: dir = 4; break;  /*              心亢仄凶 */

            case 11958: dir = 2; break;  /* 赢中  及玉失 心亢丹尹 */
            case 11960: dir = 4; break;  /*              心亢仄凶 */
            case 11962: dir = 6; break;  /*              夫分曰仄凶 */
            case 11964: dir = 0; break;  /*              夫分曰丹尹 */

            case 11966: dir = 2; break;  /*   及玉失 心亢丹尹 */
            case 11968: dir = 4; break;  /*          心亢仄凶 */
            case 11970: dir = 6; break;  /*          夫分曰仄凶 */
            case 11972: dir = 0; break;  /*          夫分曰丹尹 */

            case 11978: dir = 2; break;  /* 赢中嗯及玉失 心亢丹尹 */
            case 11980: dir = 4; break;  /*              心亢仄凶 */
            case 11982: dir = 6; break;  /*              夫分曰仄凶 */
            case 11984: dir = 0; break;  /*              夫分曰丹尹 */

            case 11986: dir = 2; break;  /* 嗯及玉失 心亢丹尹 */
            case 11988: dir = 4; break;  /*          心亢仄凶 */
            case 11990: dir = 6; break;  /*          夫分曰仄凶 */
            case 11992: dir = 0; break;  /*          夫分曰丹尹 */

            default: break;
        }
        if( dir >= 0 )CHAR_setInt(meindex,CHAR_DIR,dir);
    }

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDOOR );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    CHAR_setInt( meindex , CHAR_WORKDOORSWITCHCURRENT , 0 );
    CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, 0xffffffff);
    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) == 1){
        NPC_ROOMINFO roominfo;
        if( NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME), &roominfo) == TRUE ){
            NPC_DoorSetPasswd( meindex, roominfo.passwd);
            CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, roominfo.expire);
        }else {
            NPC_DoorSetPasswd( meindex, "8hda8iauia90494jasd9asodfasdf89" );
            if( getStringFromIndexWithDelim(arg, "|" , 13 , buf,sizeof(buf) ))
            if( strlen( buf) != 0 )
                NPC_DoorSetPasswd( meindex, buf );
        }
    }

    CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER , CHAR_getWorkInt(meindex, CHAR_WORKDOORCLOSEG));
    NPC_DoorRefreshOverFlg( meindex );
    CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_NPC);
    return TRUE;
}
예제 #10
0
void NPC_DoorLooked( int meindex , int lookedindex )
{
    int needkey;

    if( CHAR_getInt( meindex , CHAR_LV )){
        char token[32];
        char *p = CHAR_getWorkChar( meindex , CHAR_WORKDOORTITLE );
        int i,j,ok=FALSE;
        for(i = 0 ; ; i++ ){
            int r;
            r = getStringFromIndexWithDelim( p,":",2+i,token ,sizeof(token));
            if(r){
                int titleind = atoi( token );
                for(j=0;j<CHAR_TITLEMAXHAVE;j++){
                    if(CHAR_getCharHaveTitle( lookedindex , j ) == titleind ){
                        ok = TRUE;
                        break;
                    }
                    if( ok )break;
                }
            } else {
                break;
            }
            if( ok ) break;
        }
        if( ok ){
            NPC_DoorFlip( meindex , lookedindex );
        } else {
            char arg[512];
            char buf[512];
            NPC_Util_GetArgStr( meindex , arg,sizeof(arg));
            getStringFromIndexWithDelim( arg,"|" , 9 , buf,sizeof(buf));
            CHAR_talkToCli( lookedindex,-1,buf,CHAR_COLORWHITE);
        }
        return;
    }

    if( CHAR_getWorkInt( meindex, CHAR_WORKDOORORIGINALGRAPHIC)==
        ROPEGRAPHIC ){
        return;
    }
    if( CHAR_getInt( meindex , CHAR_DIR ) == -1 ){
        NPC_DoorFlip( meindex , lookedindex );
        return;
    }

    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORSOONFLG ) == 0 &&
        NPC_Util_isBackContact( meindex , lookedindex ) == TRUE ){
        NPC_DoorFlip( meindex , lookedindex);
        return;
    }

    if( CHAR_getWorkInt( meindex, CHAR_WORKDOORPASSFLG)>=1 ){
        if( NPC_Door_isOpen( meindex ) ){
            NPC_DoorFlip( meindex , lookedindex );
            return;
        }
#define		NPC_DOOR_EXPIRE_MSG		"%s 的房间有效期限至 %d/%d %d:%d"
        else {
            if( CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME)
                != 0xffffffff ){
                struct tm tmwk;
                time_t	expire = CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME);
                char	msgbuf[128];

                NPC_ROOMINFO roominfo;
                /* 由旦午  躲渝蜃毛本永玄允月 */
                NPC_RoomAdminNew_ReadFile(
                        CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME),
                        &roominfo);
                memcpy( &tmwk, localtime( &expire), sizeof( tmwk));
                snprintf( msgbuf, sizeof( msgbuf), NPC_DOOR_EXPIRE_MSG,
                          roominfo.charaname,
                          tmwk.tm_mon+1, tmwk.tm_mday,
                          tmwk.tm_hour, tmwk.tm_min);
                CHAR_talkToCli( lookedindex, meindex, msgbuf, CHAR_COLORWHITE);
            }
        }
#undef NPC_DOOR_EXPIRE_MSG
        return;
    }
    needkey = CHAR_getWorkInt( meindex , CHAR_WORKDOORKEYITEMID );
    if( needkey >= 0 ){
        if( NPC_Util_countHaveItem( lookedindex , needkey ) > 0 ){
            NPC_DoorFlip( meindex , lookedindex);
        } else {
            CHAR_talkToCli( lookedindex , -1 , NPC_DOOR_CANTOPENMSG , CHAR_COLORWHITE );
        }
    } else if( needkey == -1 ){
        NPC_DoorFlip(meindex , lookedindex );
    } else {
        CHAR_talkToCli( lookedindex , -1 , "这扇门似乎怎麽也打不开!" , CHAR_COLORWHITE);
    }
}
/*-----------------------------------------------
 * Í¼Ô¥é¥ó¥­¥ó¥°¥Á¥§¥Ã¥¯¡õ¥Õ¥¡¥¤¥ë½ñ¤­¹þ¤ß
 *
 * ¥Õ¥¡¥¤¥ë̾¤Ï"ºÞ²zªÌªº¦W¦r.score"
 * ¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë̾¤Ï"ºÞ²zªÌªº¦W¦r.score.tmp"
 *
 * ¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¡¤
 * gold|time|cdkey|charaname|owntitle
 * ¤Ç£±£°¹Ô¤Þ¤Ç¡£
 *
 * Ìá¤êÃÍ¡§ À®¸ù¡§¥é¥ó¥­¥ó¥°²¿°Ì¤«ÊÖ¤¹¡£¥é¥ó¥­¥ó¥°¤ËÆþ¤é¤Ê¤±¤ì¤Ð£°¡£
 *          ¼ºÇÔ¡§-1
 *----------------------------------------------*/
static int NPC_RoomAdminNew_WriteScoreFile( int meindex, int pindex)
{
#define NPC_RANKING_DEFAULT     10
	int     ret = 0;
	char    *cdkey;
	char    charaname[32*2],owntitle[32*2];
	char    filename_dest[128],filename[128];
	char    outbuf[1024], line[1024];
	FILE    *fp_src, *fp_dest;

	/* ¥Õ¥¡¥¤¥ë̾¤òÀ¸À® */
	strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
	strcat( filename, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_MYNAME));
	strcpy( filename_dest, filename);
	strcat( filename, NPC_ROOMADMINNEW_RANKING_EXTENSION);
	strcat( filename_dest, NPC_ROOMADMINNEW_RANKING_EXTENSION_TMP);
	
	/* Í¤·¤¿¿Í¤Î£Ã£Ä¥­¡¼ */
	//getcdkeyFromCharaIndex( pindex , cdkey , sizeof(cdkey ));
	cdkey = CHAR_getChar( pindex, CHAR_CDKEY);
	
	/* Í¤·¤¿¿Í¤Î¥­¥ã¥é̾ */
	makeEscapeString(  CHAR_getChar( pindex, CHAR_NAME),
						charaname, sizeof( charaname));
	
	/* Í¤·¤¿¿Í¤Î¾Î¹æ */
	makeEscapeString(  CHAR_getChar( pindex, CHAR_OWNTITLE),
						owntitle, sizeof( owntitle));

	/* ¥Ç¥ê¥ß¥¿¤Ç¤¯¤¯¤ë */
	snprintf( outbuf, sizeof( outbuf), "%d|%d|%s|%s|%s|\n",
				CHAR_getInt( pindex, CHAR_GOLD),
				CHAR_getWorkInt( meindex,CHAR_WORKINT_NEXTTIME),
				cdkey, charaname, owntitle );


	fp_dest = fopen( filename_dest, "w");
	if( !fp_dest) return -1;
	
	fp_src = fopen( filename, "r");
	if( !fp_src ) {
		/* ºÇ½é¤Î°ì·ï¤Ê¤Î¤Ç¤½¤Î¤Þ¤Þ½ñ¤¤¤Æ½ª¤ï¤ê */
		fclose( fp_dest);
		fp_src = fopen( filename, "w");
		if( !fp_src) return -1;
		fputs( outbuf, fp_src);
		fclose( fp_src);
		return 1;
	}
	else {
		int cnt = 1;
		char buf[128];
		while( fgets( line, sizeof( line), fp_src)) {
			getStringFromIndexWithDelim( line, "|" , 1 , buf,sizeof(buf) );
			if( ret == 0 ) {
				/* Í¶â³ÛÈæ³Ó */
				if( atoi( buf) < CHAR_getInt( pindex, CHAR_GOLD) ) {
					/* ¶â³Û¤¬¾¡¤Ã¤Æ¤¤¤ë¤Î¤ÇÁÞÆþ */
					fputs( outbuf, fp_dest);
					fputs( line, fp_dest);
					ret = cnt;
					cnt ++;
				}
				else {
					/* ¤½¤ì°Ê³°¤Ï¤½¤Î¤Þ¤Þ½ñ¤¯ */
					fputs( line, fp_dest);
				}
			}
			else {
				/* ¤½¤ì°Ê³°¤Ï¤½¤Î¤Þ¤Þ½ñ¤¯ */
				fputs( line, fp_dest);
			}
			cnt ++;
			if( cnt > NPC_RANKING_DEFAULT ) break;
		}
		/* ¥é¥ó¥­¥ó¥°¤¬£±£°¸Ä¤½¤í¤Ã¤Æ¤¤¤Ê¤¤»þ */
		if( ret == 0 && cnt <= NPC_RANKING_DEFAULT ) {
			fputs( outbuf, fp_dest);
			ret = cnt;
		}
	}
	fclose( fp_src);
	fclose( fp_dest);
	/* Ãæ¿ÈÆþ¤ì´¹¤¨ */
	/* 狼¥Õ¥¡¥¤¥ë¥³¥Ô¡¼¤¹¤ë´Êñ¤ÊÊýË¡ÃΤäƤ¿¤éÊѤ¨¤Æ²¼¤µ¤¤¡£ */
	fp_src = fopen( filename_dest, "r");
	if( !fp_src) return -1;
	fp_dest = fopen( filename, "w");
	if( !fp_dest) {
		fclose( fp_src);
		return -1;
	}
	while( fgets( line, sizeof( line), fp_src)) {
		fputs( line, fp_dest);
	}
	fclose( fp_dest);
	fclose( fp_src);
	return( ret);
#undef  NPC_RANKING_DEFAULT
}
예제 #12
0
void NPC_DoormanTalked( int meindex , int talkerindex , char *msg ,
                     int color )
{
    char mode[128];
    char opt[256];
    char	arg[NPC_UTIL_GETARGSTR_BUFSIZE];

    /* 皿伊奶乩□互玉失穴件及1弘伉永玉动  卅日反氏及丹 */
    if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;

	NPC_Util_GetArgStr( meindex, arg, sizeof( arg));

    if( !getStringFromIndexWithDelim( arg, "|", 1, mode, sizeof( mode )))
        return;

    if( !getStringFromIndexWithDelim( arg, "|", 2, opt, sizeof( opt ) ))
        return;

    if( strcmp( mode , "gold" ) == 0 ){
        int g = atoi( opt );
        int yn = NPC_Util_YN( msg );
        /*char *nm = CHAR_getChar( meindex , CHAR_NAME );*/
        char msg[256];

        if( g > 0 && yn < 0 ){
            snprintf( msg ,sizeof( msg ) ,
                      "打开门需要给我%d的金子这样可以吗?", g );
            CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );
        } else if( g > 0 && yn == 0 ){
            snprintf( msg , sizeof( msg ),
                      "打开门 %d的金子是必要的。", g );
        } else if( g > 0 && yn == 1 ){
            int now_g = CHAR_getInt( talkerindex, CHAR_GOLD );
            if( now_g < g ){
                snprintf( msg , sizeof( msg ) ,
                          "打开门 %d的金子是必要的。", g );
            	CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );
            } else {
                snprintf( msg , sizeof( msg ),
                          "%d 收到金子了。现在就来开门。", g );
            	CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );

                /* 云嗯毛必永玄 */
                now_g -= g;
                CHAR_setInt( talkerindex , CHAR_GOLD , now_g );
                /* 丐凶日仄中旦  □正旦毛霜耨 */
                CHAR_send_P_StatusString(talkerindex, CHAR_P_STRING_GOLD);

                /* 玉失夫日仁 */
                NPC_DoormanOpenDoor(
                    CHAR_getWorkChar( meindex, CHAR_WORKDOORMANDOORNAME));
            }
        }
    } else if( strcmp( mode , "item" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "尚在未支援模式。",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "itemhave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "尚在未支援模式。",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "itemnothave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "尚在未支援模式。",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "titlehave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "尚在未支援模式。",
                        CHAR_COLORWHITE);

    } else if( strcmp( mode , "roomlimit" ) == 0 ){

		/*   盒及谛醒孺蜃互丐月桦宁 */
		char szOk[256], szNg[256], szBuf[32];
		int checkfloor;
		int maxnum, i, iNum;

	    if( !getStringFromIndexWithDelim( arg, "|", 2, szBuf, sizeof( szBuf ) ))
    	    return;

		/* 譬屯月白夫失午    谛醒 */
		if( sscanf( szBuf, "%d:%d", &checkfloor, &maxnum ) != 2 ){
			return;
		}

		for( iNum = 0,i = 0; i < getFdnum(); i ++ ){
			/* 皿伊奶乩□动陆卞反饬  互  中 */
			if( CHAR_getCharUse( i ) == FALSE )continue;
			if( CHAR_getInt( i, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue;
			/* 隙烂及白夫失动陆卞饬  互  中 */
			if( CHAR_getInt( i, CHAR_FLOOR ) != checkfloor )continue;
			iNum++;
		}
	    if( !getStringFromIndexWithDelim( arg, "|", 5, szNg, sizeof( szNg ))){
   			strcpy( szNg, "。。。。" );	/* 凤伞卅仄及本伉白 */
		}
    	if( !getStringFromIndexWithDelim( arg, "|", 4, szOk, sizeof( szOk ))){
   			strcpy( szOk, "开门吧。。。" );	/* 凤伞丐曰及本伉白 */
   		}

		if( iNum >= maxnum ){
			/*     毛译尹化中月桦宁 */
	        CHAR_talkToCli( talkerindex, meindex ,szNg, CHAR_COLORWHITE);
		}else{
			/*     卞  凶卅中桦宁 */
	        CHAR_talkToCli( talkerindex, meindex ,szOk, CHAR_COLORWHITE);
            NPC_DoormanOpenDoor(
                    CHAR_getWorkChar( meindex, CHAR_WORKDOORMANDOORNAME));
		}

    } else if( strcmp( mode , "titlenothave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "尚在未支援模式。",
                        CHAR_COLORWHITE);
    }
}
예제 #13
0
파일: battle_ai.c 프로젝트: BlueKarl/gmsv
static int BATTLE_ai_normal( int turn, int charaindex,
							BATTLE_ENTRY *pEntry,
							struct B_AI_RESULT *result)
{
	int		at[B_AI_NORMAL_ATTACKSUBOPTIONNUM] = { 0,0,0}; 		/*   »«×óÃóÆËÒà¼þ */
	int		gu[B_AI_NORMAL_GUARDSUBOPTIONNUM] = {0}; 		/* ×óÃóÆËÒà¼þ */
	int		ma[B_AI_NORMAL_MAGICSUBOPTIONNUM] = {0}; 		/* ×óÃóÆËÒà¼þ */
	int		es[B_AI_NORMAL_ESCAPESUBOPTIONNUM] = {0}; 			/* ×óÃóÆËÒà¼þ */
	int		wa[B_AI_NORMAL_WAZASUBOPTIONNUM] = {0,0,0,0, 0,0,0};/* ×óÃóÆËÒà¼þ */
#ifdef _ENEMY_ATTACK_AI
    int		rn[B_AI_NORMAL_RANDOMOPTIONNUM] = {1};
#endif
	int		target[BATTLE_ENTRY_MAX];
	int		cnt;
	int		i;
	int		r;
	int		rc;
	int		mode=0;
	char	buff[256];
	char	buff2[256];

	if( turn == 1 ) {
		print( "Ó¦¸ÃûÕâ»ØÊ¡£\n" );
		return FALSE;
	}
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
									B_AI_NORMAL_ATTACKOPTION, buff, sizeof( buff)) != NULL ){
		for( i = 1; i < B_AI_NORMAL_ATTACKSUBOPTIONNUM + 1; i ++ ) {
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));
			if( rc != TRUE ) {
				print( "battle_ai.c:Invarid Param [%s]\n",
						CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION));
				return FALSE;
			}
			at[i-1] = atoi( buff2);
		}
	}

	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
									B_AI_NORMAL_GUARDOPTION, buff, sizeof( buff)) != NULL ){
		for( i = 1; i < B_AI_NORMAL_GUARDSUBOPTIONNUM + 1; i ++ ) {
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));
			if( rc != TRUE ) {
				print( "battle_ai.c:Invarid Param [%s]\n",
						CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION));
				return FALSE;
			}
			gu[i-1] = atoi( buff2);
		}
	}
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
									B_AI_NORMAL_MAGICOPTION,
									buff, sizeof( buff)) != NULL ){
		for( i = 1; i < B_AI_NORMAL_MAGICSUBOPTIONNUM + 1; i ++ ) {
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));
			if( rc != TRUE ) {
				print( "battle_ai.c:Invarid Param [%s]\n",
						CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION));
				return FALSE;
			}
			ma[i-1] = atoi( buff2);

		}
	}
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
									B_AI_NORMAL_ESCAPEOPTION,
									buff, sizeof( buff)) != NULL ){
		for( i = 1; i < B_AI_NORMAL_ESCAPESUBOPTIONNUM + 1; i ++ ) {
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));

			if( rc != TRUE ) {
				print( "battle_ai.c:Invarid Param [%s]\n",
						CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION));
				return FALSE;
			}
			es[i-1] = atoi( buff2);
		}
	}
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
									B_AI_NORMAL_WAZAOPTION,
									buff, sizeof( buff)) != NULL ){
		for( i = 1; i < B_AI_NORMAL_WAZASUBOPTIONNUM + 1; i ++ ) {
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));
			if( rc != TRUE ) {
			}else{
				wa[i-1] = atoi( buff2);
			}
		}
	}
#ifdef _ENEMY_ATTACK_AI
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION),
	  								B_AI_NORMAL_RANDAOPTION,
									buff, sizeof( buff))!=NULL){
		for( i=1; i<B_AI_NORMAL_RANDOMOPTIONNUM+1; i++){
			rc = getStringFromIndexWithDelim( buff, ";", i, buff2, sizeof( buff2));
			if(rc!=TRUE){
				print( "battle_ai.c:Invarid Param [%s]\n",
						CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_TACTICSOPTION));
				return FALSE;
			}
			rn[i-1] = atoi( buff2);
		}
	}
#endif
#ifdef _BATTLENPC_WARP_PLAYER
	if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_ACT_CONDITION),
		"tn", buff, sizeof( buff))!=NULL){
		int sTurn = atoi( buff);
		if(CHAR_getWorkInt( charaindex, CHAR_WORKTURN)==0)
			CHAR_setWorkInt( charaindex, CHAR_WORKTURN, 1);
		else
			CHAR_setWorkInt( charaindex, CHAR_WORKTURN, CHAR_getWorkInt( charaindex, CHAR_WORKTURN)+1);
		if(sTurn==CHAR_getWorkInt( charaindex, CHAR_WORKTURN)){
			result->command = BATTLE_COM_WARP;
			return TRUE;
		}
	}
#endif
	if( at[0] == 0 && gu[0] == 0 && ma[0] == 0 && es[0] == 0 ){
		for( i = 0; i < B_AI_NORMAL_WAZASUBOPTIONNUM; i ++ ){
			if( wa[i] != 0 )break;
		}
		if( i >= B_AI_NORMAL_WAZASUBOPTIONNUM ){
			print( "ÎÞÖ¸¶¨ÈκεĹ¥»÷·½Ê½¡£\n" );
			return FALSE;
		}
	}
	while( !mode ) {
		int work = 0;
		work = at[0]+gu[0]+ma[0]+es[0];
		for( i = 0; i < B_AI_NORMAL_WAZASUBOPTIONNUM; i ++ ){
			work += wa[i];
		}
		r = RAND( 0, work - 1 );
		if( at[0] != 0 && r < at[0] ) 						mode = B_AI_ATTACKMODE;
		else if( gu[0] != 0 && r < at[0] + gu[0]) 			mode = B_AI_GURADMODE;
		else if( ma[0] != 0 && r < at[0] + gu[0] + ma[0]) 	mode = B_AI_MAGICMODE;
		else if( es[0] != 0 && r < at[0] + gu[0] + ma[0] + es[0] ){
			mode = B_AI_ESCAPEMODE;
		}
		if( mode ) break;
		work = at[0] + gu[0] + ma[0] + es[0];
		for( i = 0; i < B_AI_NORMAL_WAZASUBOPTIONNUM; i ++ ){
			work += wa[i];
			if( wa[i] != 0 && r < work ){
				mode = B_AI_WAZAMODE0+i;
				break;
			}
		}
	}
	if( mode == B_AI_ATTACKMODE	|| ( B_AI_WAZAMODE0 <= mode && mode <= B_AI_WAZAMODE6 )){
		while( 1 ) {
			for( i = 0 ; i < BATTLE_ENTRY_MAX; i ++ ) {
				target[i] = -1;
			}
			cnt = 0;
			for( i = 0; i < BATTLE_ENTRY_MAX ; i ++ ) {
				int tindex = (pEntry+i)->charaindex;
				if( !CHAR_CHECKINDEX( tindex ))continue;
				if( CHAR_getFlg( tindex, CHAR_ISDIE)) continue;
				if( CHAR_getWorkInt( tindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_RESCUE ) continue;
				switch( at[1]) {
				  case B_AI_NORMAL_TARGET_PLAYER:
				  	if( CHAR_getInt( tindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){
				  		target[cnt++] = i;
				  	}
				  	break;
				 case B_AI_NORMAL_TARGET_PET:
				  	if( CHAR_getInt( tindex, CHAR_WHICHTYPE) == CHAR_TYPEPET){
				  		target[cnt++] = i;
				  	}
				  	break;
#ifdef _ENEMY_ATTACK_AI
                 case B_AI_NORMAL_TARGET_LEADER:
					 if( CHAR_getWorkInt( tindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER) {
						 target[cnt++] = i;
					 }else if(!RAND( 0, 2)) {
						 target[cnt++] = i;
					 }
					 break;
#endif
				  default:
					target[cnt++] = i;
					break;
				}
			}
			if( cnt == 0 && at[1] == B_AI_NORMAL_TARGET_ALL ) return FALSE;
			if( cnt > 0 ) break;
			at[1] = B_AI_NORMAL_TARGET_ALL;
		}
		result->command = BATTLE_COM_NONE;
		if( at[2] == B_AI_NORMAL_SELECT_RANDOM ) {
			r = RAND( 0, cnt-1);
			result->command = BATTLE_COM_ATTACK;
			result->target = target[r];
		}else if( at[2] == B_AI_NORMAL_SELECT_HP_MAX ||	at[2] == B_AI_NORMAL_SELECT_HP_MIN ){
			int top = 0;
			for( i = 0; i < cnt; i ++ ) {
				if( i ==0 ) top = target[i];
				else {
					int		tophp  = CHAR_getInt((pEntry+top)->charaindex, CHAR_HP);
					int 	comphp = CHAR_getInt((pEntry+target[i])->charaindex, CHAR_HP);
					if( at[2] == B_AI_NORMAL_SELECT_HP_MAX ) {
						if(  comphp > tophp ) top = target[i];
					}
					else {
						if( comphp < tophp ) top = target[i];
					}
				}
			}
#ifdef _ENEMY_ATTACK_AI
			if(!RAND( 0, rn[0]))
				result->target = target[RAND( 0, cnt-1)];
			else
				result->target  = top;
			result->command = BATTLE_COM_ATTACK;
#else
			result->command = BATTLE_COM_ATTACK;
			result->target = top;
#endif
		}
#ifdef _ENEMY_ATTACK_AI
		else if(at[2] == B_AI_NORMAL_SELECT_STR_MAX) {
			int top = 0;
			for( i=0; i<cnt; i++) {
				if(i==0) top = target[i];
				else {
					int	topstr  = CHAR_getInt( (pEntry+top)->charaindex, CHAR_STR);
					int	compstr = CHAR_getInt( (pEntry+target[i])->charaindex, CHAR_STR);
					if(compstr>topstr) top = target[i];
				}
			}
			if(!RAND( 0, rn[0]))
				result->target = target[RAND( 0, cnt-1)];
			else
				result->target  = top;
			result->command = BATTLE_COM_ATTACK;
		}
		else if(at[2] == B_AI_NORMAL_SELECT_DEX_MAX ||
			    at[2] == B_AI_NORMAL_SELECT_DEX_MIN) {
			int top = 0;
			for( i=0; i<cnt; i++) {
				if(i==0) top = target[i];
				else {
					int	topdex  = CHAR_getInt( (pEntry+top)->charaindex, CHAR_DEX);
					int	compdex = CHAR_getInt( (pEntry+target[i])->charaindex, CHAR_DEX);
					if(at[2]==B_AI_NORMAL_SELECT_DEX_MAX) {
						if(compdex>topdex) top = target[i];
					}else {
						if(compdex<topdex) top = target[i];
					}
				}
			}
			if(!RAND( 0, rn[0]))
				result->target = target[RAND( 0, cnt-1)];
			else
				result->target  = top;
			result->command = BATTLE_COM_ATTACK;
		}
		else if(at[2] == B_AI_NORMAL_SELECT_ATT_SUBDUE) {
			int top = 0;
			for( i=0; i<cnt; i++) {
				if(i==0) top = target[i];
				else {
					switch(GetSubdueAttribute(charaindex))
					{
					case AI_ATT_EARTHAT:
						{
							int	topatt  = CHAR_getWorkInt( (pEntry+top)->charaindex, CHAR_WORKFIXEARTHAT);
					        int	compatt = CHAR_getWorkInt( (pEntry+target[i])->charaindex, CHAR_WORKFIXEARTHAT);
					        if(compatt>topatt) top = target[i];
						}
						break;
					case AI_ATT_WATERAT:
						{
							int	topatt  = CHAR_getWorkInt( (pEntry+top)->charaindex, CHAR_WORKFIXWATERAT);
					        int	compatt = CHAR_getWorkInt( (pEntry+target[i])->charaindex, CHAR_WORKFIXWATERAT);
					        if(compatt>topatt) top = target[i];
						}
						break;
					case AI_ATT_FIREAT:
						{
							int	topatt  = CHAR_getWorkInt( (pEntry+top)->charaindex, CHAR_WORKFIXFIREAT);
					        int	compatt = CHAR_getWorkInt( (pEntry+target[i])->charaindex, CHAR_WORKFIXFIREAT);
					        if(compatt>topatt) top = target[i];
						}
						break;
					case AI_ATT_WINDAT:
						{
							int	topatt  = CHAR_getWorkInt( (pEntry+top)->charaindex, CHAR_WORKFIXWINDAT);
					        int	compatt = CHAR_getWorkInt( (pEntry+target[i])->charaindex, CHAR_WORKFIXWINDAT);
					        if(compatt>topatt) top = target[i];
						}
						break;
					default:
						break;
					}
				}
			}
			if(!RAND( 0, rn[0]))
				result->target = target[RAND( 0, cnt-1)];
			else
				result->target  = top;
			result->command = BATTLE_COM_ATTACK;
		}
#endif
		else{
			return FALSE;
		}
		if( B_AI_WAZAMODE0 <= mode && mode <= B_AI_WAZAMODE6 ){
			if( PETSKILL_Use( charaindex, mode - B_AI_WAZAMODE0, result->target,NULL ) == TRUE ){
				result->command = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1 );
				return TRUE;
			}else{
				//print( "´ËÏî¼¼ÄÜÉÐδÉ趨(%s):(%d)\n",
				//	CHAR_getUseName( charaindex), mode - B_AI_WAZAMODE0 );
				return FALSE;
			}
		}else
		if( mode == B_AI_ATTACKMODE ){
			result->command = BATTLE_COM_ATTACK;
			return TRUE;
		}
	}else if( mode == B_AI_GURADMODE ) {
		result->command = BATTLE_COM_GUARD;
		return TRUE;
	}else if( mode == B_AI_ESCAPEMODE ) {
		result->command = BATTLE_COM_ESCAPE;
		return TRUE;
	}
	return FALSE;
}
/*-----------------------------------------------
 * ¼¡¤Î¥ª¡¼¥¯¥·¥ç¥ó¤Î»þ´Ö¤ÈÉô²°Ì¾¤ò¥ï¡¼¥¯¤Ë¥»¥Ã¥È¤¹¤ë
 *----------------------------------------------*/
static BOOL NPC_RoomAdminNew_SetNextAuction( int meindex)
{
	int     i, j;
	int     hitindex = -1;
	int     charnum = CHAR_getCharNum();
	char    argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	struct  tm  tmwk;
	
	/* ÍËÆü¤Ê¤É¤ò¼èÆÀ¤¹¤ë*/
	memcpy( &tmwk, localtime( ( time_t *)&NowTime.tv_sec), sizeof( tmwk));
	
	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));

	/* ¥É¥¢¤ò¸¡º÷¤¹¤ë¡£NPC_DoorSearchByName()¤ò»È¤Ã¤¿¤é³Ú¤À¤±¤É
	 *  ̵Â̤¬Â¿¤¯¤Ê¤ê¤½¤¦¤Ê¤Î¤Ç¤³¤³¥ª¥ê¥¸¥Ê¥ë
	 */
	for( i = CHAR_getPlayerMaxNum()+ CHAR_getPetMaxNum(); 
		 i < charnum;
		 i ++ )
	{
		if( CHAR_getInt( i, CHAR_WHICHTYPE) != CHAR_TYPEDOOR) {
			continue;
		}
		if( CHAR_getWorkInt( i, CHAR_WORKDOORPASSFLG) == 0 ) {
			continue;
		}
		/* ̾Á°¤¬´É³í¤Î¤â¤Î¤«¥Á¥§¥Ã¥¯¤¹¤ë */
		for( j = 3; ; j ++ ) {
			int rc;
			char    *doorname;
			char    buf[256];
			int     dataexist;
			NPC_ROOMINFO data;
			
			rc = getStringFromIndexWithDelim( argstr, "|" , j,
												buf,sizeof(buf) );
			if( rc != TRUE ) {
				break;
			}
			doorname = CHAR_getWorkChar( i, CHAR_WORKDOORNAME);
			/* ¥É¥¢Ì¾¤¬°ìÃפ·¤¿ */
			if( strcmp( buf, doorname ) != 0 ) {
				continue;
			}
			/* ÍËÆü¤¬°ìÃפ¹¤ë */
			if( atoi( CHAR_getWorkChar( i, CHAR_WORKDOORWEEK)) != tmwk.tm_wday) {
				break;
			}
			/* °ì±þ½é´ü²½ */
			memset( &data, 0, sizeof( data));
			/* ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤òÆɤà */
			if( NPC_RoomAdminNew_ReadFile( doorname, &data) ) {
				struct tm   tmdoor;
				/* ¤³¤³¤Ç´ü¸ÂÀÚ¤ì¥Á¥§¥Ã¥¯¤ò¤ä¤Ã¤Æ¤ä¤ë¡£
				 * ´ü¸Â¤¬ÀÚ¤ì¤Æ¤¤¤¿¤é¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
				 * »ÅÍÍŪ¤Ë¤¢¤Þ¤ê¤³¤Î¥ë¡¼¥Á¥óÄ̤ë»ö¤Ï¤Ê¤¤¤È»×¤¦¡£
				 */
				if( data.expire < NowTime.tv_sec) {
					NPC_RoomAdminNew_WriteDataFile( meindex, -1,doorname, NULL, 0);
					/* ¥É¥¢¤â¤­¤ì¤¤¤Ë*/
					NPC_DoorSetPasswd( i, "8hda8iauia90494jasd9asodfasdf89");
					CHAR_setWorkInt( i, CHAR_WORKDOOREXPIRETIME, 0xffffffff);
					
					break;
				}
				/* º£Æü¤ÇÀÚ¤ì¤ëʪ·ï¤Ê¤é£Ï£Ë */
				memcpy( &tmdoor, localtime( ( time_t *)&data.expire), sizeof( tmdoor));
				if( tmdoor.tm_mon != tmwk.tm_mon ||
					tmdoor.tm_mday != tmwk.tm_mday)
				{
					break;
				}
				dataexist = TRUE;
			}
			else {
				dataexist = FALSE;
			}
			/* ¸½ºß¤Î»þ´Ö¤è¤ê¸å¤Ç¤¢¤ë»ö¡£ */
			if( tmwk.tm_hour > atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))){
				break;
			}
			if( tmwk.tm_hour == atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))) {
				if( tmwk.tm_min >= atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE))) {
					break;
				}
			}
			/* ¤³¤³¤Þ¤Ç¤­¤¿¤é¤È¤ê¤¢¤¨¤º¤³¤Î¥É¥¢¤Ï¼¡³«ºÅ¤Ë½Ð¤ë»ñ³Ê¤¬
			 * ¤¢¤ë¤È¤¤¤¦»ö¡£¤³¤ì¤«¤é¾¤Î¥É¥¢¤È¥Á¥§¥Ã¥¯¤¹¤ë¡£
			 */
			if( hitindex == -1 ) {
				hitindex = i;
			}
			else {
				/* ³«ºÅ»þ´Ö¤¬Á᤯¡¤¸½ºß¼Ú¤ê¤é¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤Î¤¬Í¥Àè½ç°Ì */
				if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR)) 
					> atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR)))
				{
					hitindex = i;
				}
				else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR)) 
						== atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR)))
				{
					if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE)) 
						> atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE)))
					{
						hitindex = i;
					}
					else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE)) 
						== atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE)))
					{
						NPC_ROOMINFO    datawk;
						int     hitindexdataexist;
						hitindexdataexist = NPC_RoomAdminNew_ReadFile( 
									CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME),
									&datawk);
						if( hitindexdataexist < dataexist ) {
							hitindex = i;
						}
						/* ¤³¤³¤Þ¤ÇÍè¤ë¤è¤¦¤Ê¤éÀè¤Îindex¤Î¤Þ¤Þ¤È¤¹¤ë¡£*/
						
					}
				}
			}
		}
	}
	if( hitindex > 0 ) {
		/* ³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */
		tmwk.tm_sec = 0;
		tmwk.tm_min = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE));
		tmwk.tm_hour = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR));
		CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, mktime( &tmwk));
		/* Éô²°Ì¾¤ò¥»¥Ã¥È */
		CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM,
						 CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME));
		
	}
	else {
		CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, 0);
		/* Éô²°Ì¾¤ò¥»¥Ã¥È */
		CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM,"" );
	
	}
	/* ¸¡º÷»þ´Ö¤ò¥»¥Ã¥È */
	CHAR_setWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME, NowTime.tv_sec);
	return( TRUE);
}
/*-----------------------------------------------
 * °ìÈÖ¤ª¶â¤ò¿¤¯»ý¤Ã¤Æ¤¤¤ë¥×¥ì¥¤¥ä¡¼¤òõ¤¹
 *----------------------------------------------*/
static int NPC_RoomAdminNew_SearchPlayerHasMostMoney( int meindex)
{
	int     i,j, range;
	int     fl,x,y, gold;
	int     doorindex;
	int     topindex;
	
	fl = CHAR_getInt( meindex, CHAR_FLOOR);
	x  = CHAR_getInt( meindex, CHAR_X);
	y  = CHAR_getInt( meindex, CHAR_Y);
	range = CHAR_getWorkInt( meindex , CHAR_WORKINT_RANGE);
	topindex = -1;
	
	/* Éô²°¤Î̾Á°¤«¤éºÇÄãÍ¶â³Û¤òÄ´¤Ù¤ë */
	doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, 
														CHAR_WORKCHAR_NEXTROOM));
	gold = atoi( CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT));
	/* ÈÏ°ÏÆâ¤Ë¤¤¤ë¥­¥ã¥é¤Î¿ô¤òÄ´¤Ù¤ë */
	for( i = x-range ; i <= x+range ; i++ ){
		for( j = y-range ; j <= y+range ; j ++ ){
			OBJECT  object;
			for( object = MAP_getTopObj( fl, i,j); object; 
				 object = NEXT_OBJECT(object) ) 
			{
				int objindex = GET_OBJINDEX( object);
				if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){
					int     index;
					index = OBJECT_getIndex(objindex);
					if( CHAR_getInt( index,
								 CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER )
					{
						if( CHAR_getInt( index, CHAR_GOLD) >= gold ) {
							if( topindex == -1 ) {
								topindex =  index;
							}
							else {
								/* ¥È¥Ã¥×¤Î¿Í¤È¤ª¶âÈæ³Ó */
								int nowgold,topgold;
								nowgold = CHAR_getInt( index, CHAR_GOLD );
								topgold = CHAR_getInt( topindex, CHAR_GOLD);
								if( nowgold > topgold ) {
									topindex = index;
								}
								else if( nowgold == topgold ) {
									/* °ì½ï¤Ê¤é¥ì¥Ù¥ë¤¬Ä㤤¿Í */
									int nowlv, toplv;
									nowlv = CHAR_getInt( index, CHAR_LV );
									toplv = CHAR_getInt( topindex, CHAR_LV);
									if( nowlv < toplv ) {
										topindex = index;
									}
									/* ¤½¤ì¤Ç¤â²ò·è¤·¤Ê¤¤¤ó¤Ê¤é¥é¥ó¥À¥à¤¸¤ã*/
									/* index¤¬Àè¤Î¿Í¤¬¤Á¤ç¤Ã¤ÈÉÔÍø¤À¤±¤É */
									else if( nowlv == toplv ) {
										if( RAND( 0,1)) {
											topindex = index;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	return( topindex);
}
/*-----------------------------------------------
 * Äù¤áÀÚ¤é¤ì¤¿»þ¤Î½èÍý
 *----------------------------------------------*/
static void NPC_RoomAdminNew_CloseProc( int meindex)
{
	int     pindex;
	char    buff[256];
	char    pname[32];
	int     failed = TRUE;
	
	/* °ìÈÖ¤ª¶â¤ò¿¤¯»ý¤Ã¤Æ¤¤¤ë¥×¥ì¥¤¥ä¡¼¤òõ¤¹ */
	pindex = NPC_RoomAdminNew_SearchPlayerHasMostMoney( meindex);
	/* ³ºÅö¼Ô¥¢¥ê */
	if( pindex != -1) {
		/* £±²ó¤ÇÈ´¤±¤ë¥ë¡¼¥×¤Ç¤¹ */
		while( 1) {
			char    passwd[9];
			int		doorindex;
			doorindex = NPC_DoorSearchByName( 
							CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
			/* ¥Ñ¥¹¥ï¡¼¥É¤òÀ¸À®¤¹¤ë */
			NPC_RoomAdminNew_CreatePasswd( passwd, sizeof( passwd));
			/* ¥Õ¥¡¥¤¥ë¤Ë¤³¤Î¿Í¤Î£Ã£Ä¥­¡¼¡¤¥­¥ã¥é̾¡¤Éô²°Ì¾¡¤¥Ñ¥¹¤ò½ñ¤­¹þ¤à */
			if( NPC_RoomAdminNew_WriteDataFile( meindex, pindex,
							CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM),
												passwd, 1)
				== FALSE) 
			{
				break;
			}
			/* ¥É¥¢¤Ë¥Ñ¥¹¤ò¥»¥Ã¥È */
			if( NPC_DoorSetPasswd( doorindex, passwd) == -1 ) {
				break;
			}
			/* Í­¸ú´ü¸Â¤ò¥»¥Ã¥È */
			CHAR_setWorkInt( doorindex, CHAR_WORKDOOREXPIRETIME, 
							CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME)
							+ NPC_ROOMADMINNEW_2WEEK);
			/* Í¼Ô¥é¥ó¥­¥ó¥°¥Á¥§¥Ã¥¯¡õ¥Õ¥¡¥¤¥ë½ñ¤­¹þ¤ß */
			NPC_RoomAdminNew_WriteScoreFile( meindex, pindex);

			CHAR_setInt( pindex, CHAR_GOLD, 0);

			CHAR_send_P_StatusString( pindex , CHAR_P_STRING_GOLD);
			
			/* ¤ª¤á¤Ç¤È¤¦¡ª¥á¥Ã¥»¡¼¥¸ */
			strcpy( pname, CHAR_getChar( pindex, CHAR_NAME));
			snprintf( buff, sizeof(buff), 
						NPC_ROOMADMINNEW_MSG_CONGRATULATION, pname, pname, pname);
			failed = FALSE;
			break;
		}
	}
	
	/* ³ºÅö¼Ô¥Ê¥·¤Þ¤¿¤Ï½èÍý¼ºÇԤλþ */
	if( failed) {
		/* ¥Õ¥¡¥¤¥ë¤«¤é¤³¤ÎÉô²°¤Î¾ðÊó¤ò¾Ã¤¹ */
		NPC_RoomAdminNew_WriteDataFile( meindex, -1,
					CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM),
										NULL, 0);
		/* ³ºÅö¼Ô¤Ï¤¤¤Þ¤»¤ó¥á¥Ã¥»¡¼¥¸ */
		snprintf( buff, sizeof(buff), 
				NPC_ROOMADMINNEW_MSG_NONE);
	}
	/* ¤³¤Î¥Õ¥í¥¢¤Ë¤¤¤ë¿ÍÁ´°÷¤ËÁ÷¿® */
	NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff);
	
	/* ¼¡¤Îʪ·ï¤È¥ª¡¼¥¯¥·¥ç¥ó³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */
	NPC_RoomAdminNew_SetNextAuction( meindex);
	
}
/************************************************
 * ¥ë¡¼¥×½èÍý
 * ¸Æ¤Ó½Ð¤·ÉÑÅ٤Ϥ½¤ó¤Ê¤ËÉÑÈˤǤʤ¯¤Æ¤â¤¤¤¤¡£
 * ¤Ç¤âÀäÂФˣ±Ê¬Ì¤Ëþ¤Ë¤¹¤ë»ö
 ************************************************/
void NPC_RoomAdminNewLoop( int meindex )
{
	int     hun;
	/* ¤â¤·¤â³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿¤é¼èÆÀ¤·¤Ê¤ª¤¹ */
	if( CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) == 0 ) {
		/* Á°²ó¸¡º÷¤·¤¿Æü¤¬°ã¤¨¤Ð¸¡º÷¤·¤Ê¤ª¤¹ */
		struct  tm      tm1,tm2;
		time_t          t;
		memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
		t = CHAR_getWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME);
		memcpy( &tm2, localtime( &t), 
								sizeof( tm2));
		if( tm1.tm_year != tm2.tm_year ||
			tm1.tm_mday != tm2.tm_mday ||
			tm1.tm_mon != tm2.tm_mon )
		{
			NPC_RoomAdminNew_SetNextAuction( meindex);
		}
		return;
	}
	
	hun = ceil((double)(CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) - 
		   NowTime.tv_sec) / 60.0);
	/* ¤â¤·¤â¤Î»þ¤Î°Ù¤Ëhun¤¬¥Þ¥¤¥Ê¥¹¤Î»þ¤Ï£°¤ËÌ᤹ */
	if( hun < 0 ) hun = 0;
	
	if( hun < NPC_ROOMADMINNEW_PRINTCLOSETIME_DEFAULT ) {
		/* Äù¤áÀÚ¤ê¶á¤¯¤Ë¤Ê¤Ã¤¿¤é¡ÖÄù¤áÀڤꡩʬÁ°¤Ç¤¹¡×¤È¸À¤ï¤¹ */
		if( hun != CHAR_getWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME)) {
			char    buff[256];
			if( hun != 0 ) {
				char    buf2[1024];
				char	msgbuff[16];
				char    argstr2[NPC_UTIL_GETARGSTR_BUFSIZE];
				int		doorindex;

				/* Éô²°¾ðÊó¼èÆÀ */
				doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
				NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2));
				getStringFromIndexWithDelim( argstr2, "|" , 9 , 
											 buf2,sizeof(buf2) );
				/* Éô²°¾ðÊó*/
				if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
					strcpy( msgbuff, "¸¹«Ç");
				}
				else {
					msgbuff[0] = '\0';
				}
				/* ¡ÖÄù¤áÀڤꡩʬÁ°¤Ç¤¹¡× */
				snprintf( buff, sizeof(buff), 
							NPC_ROOMADMINNEW_MSG_CLOSE_BEFORE, 
							buf2,
							CHAR_getChar( doorindex, CHAR_NAME),
							msgbuff,
							hun);
				
				CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, hun);
			}
			else {
				/* ¡ÖÄù¤áÀÚ¤ê¤Þ¤·¤¿¡× */
				strcpy( buff, NPC_ROOMADMINNEW_MSG_CLOSE);
				CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0);
			}
			/* ¤³¤Î¥Õ¥í¥¢¤Ë¤¤¤ë¿ÍÁ´°÷¤ËÁ÷¿® */
			NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff);
		}
	}
	/* Äù¤áÀڤä¿»þ¤Î½èÍý */
	if( hun == 0 ) {
		NPC_RoomAdminNew_CloseProc( meindex);
	}
}
예제 #18
0
void NPC_DoormanTalked( int meindex , int talkerindex , char *msg ,
                     int color )
{
    char mode[128];
    char opt[256];
    char	arg1[NPC_UTIL_GETARGSTR_BUFSIZE];
    char *arg;

    /* ¥×¥ì¥¤¥ä¡¼¤¬¥É¥¢¥Þ¥ó¤Î1¥°¥ê¥Ã¥É°Ê  ¤Ê¤é¤Ï¤ó¤Î¤¦ */
    if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;

	arg = NPC_Util_GetArgStr( meindex, arg1, sizeof( arg1));

    if( !getStringFromIndexWithDelim( arg, "|", 1, mode, sizeof( mode )))
        return;

    if( !getStringFromIndexWithDelim( arg, "|", 2, opt, sizeof( opt ) ))
        return;

    if( strcmp( mode , "gold" ) == 0 ){
        int g = atoi( opt );
        int yn = NPC_Util_YN( msg );
        /*char *nm = CHAR_getChar( meindex , CHAR_NAME );*/
        char msg[256];

        if( g > 0 && yn < 0 ){
            snprintf( msg ,sizeof( msg ) ,
                      "¥´¶}ªù»Ý­nµ¹§Ú%dªºª÷¤l³o¼Ë¥i¥H¶Ü¡H", g );
            CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );
        } else if( g > 0 && yn == 0 ){
            snprintf( msg , sizeof( msg ),
                      "¥´¶}ªù %dªºª÷¤l¬O¥²­nªº¡C", g );
        } else if( g > 0 && yn == 1 ){
            int now_g = CHAR_getInt( talkerindex, CHAR_GOLD );
            if( now_g < g ){
                snprintf( msg , sizeof( msg ) ,
                          "¥´¶}ªù %dªºª÷¤l¬O¥²­nªº¡C", g );
            	CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );
            } else {
                snprintf( msg , sizeof( msg ),
                          "%d ¦¬¨ìª÷¤l¤F¡C²{¦b´N¨Ó¶}ªù¡C", g );
            	CHAR_talkToCli( talkerindex, meindex , msg, CHAR_COLORWHITE );

                /* ¶³¶â¤ò¥²¥Ã¥È */
                now_g -= g;
                CHAR_setInt( talkerindex , CHAR_GOLD , now_g );
                /* ¤¢¤¿¤é¤·¤¤¥¹  ¡¼¥¿¥¹¤òÁ÷¿® */
                CHAR_send_P_StatusString(talkerindex, CHAR_P_STRING_GOLD);

                /* ¥É¥¢¤Ò¤é¤¯ */
                NPC_DoormanOpenDoor(
                    CHAR_getWorkChar( meindex, CHAR_WORKDOORMANDOORNAME));
            }
        }
    } else if( strcmp( mode , "item" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "©|¦b¥¼¤ä´©¼Ò¦¡¡C",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "itemhave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "©|¦b¥¼¤ä´©¼Ò¦¡¡C",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "itemnothave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "©|¦b¥¼¤ä´©¼Ò¦¡¡C",
                        CHAR_COLORWHITE);
    } else if( strcmp( mode , "titlehave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "©|¦b¥¼¤ä´©¼Ò¦¡¡C",
                        CHAR_COLORWHITE);

    } else if( strcmp( mode , "roomlimit" ) == 0 ){

		/*   ²°¤Î¿Í¿ôÀ©¸Â¤¬¤¢¤ë¾ì¹ç */
		char szOk[256], szNg[256], szBuf[32];
		int checkfloor;
		int maxnum, i, iNum;

	    if( !getStringFromIndexWithDelim( arg, "|", 2, szBuf, sizeof( szBuf ) ))
    	    return;

		/* Ä´¤Ù¤ë¥Õ¤Ò¥¢¤È    ¿Í¿ô */
		if( sscanf( szBuf, "%d:%d", &checkfloor, &maxnum ) != 2 ){
			return;
		}

		for( iNum = 0,i = 0; i < getFdnum(); i ++ ){
			/* ¥×¥ì¥¤¥ä¡¼°Ê³°¤Ë¤Ï¶½  ¤¬  ¤¤ */
			if( CHAR_getCharUse( i ) == FALSE )continue;
			if( CHAR_getInt( i, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue;
			/* »ØÄê¤Î¥Õ¤Ò¥¢°Ê³°¤Ë¶½  ¤¬  ¤¤ */
			if( CHAR_getInt( i, CHAR_FLOOR ) != checkfloor )continue;
			iNum++;
		}
	    if( !getStringFromIndexWithDelim( arg, "|", 5, szNg, sizeof( szNg ))){
   			strcpy( szNg, "¡C¡C¡C¡C" );	/* »ñ³Ê¤Ê¤·¤Î¥»¥ê¥Õ */
		}
    	if( !getStringFromIndexWithDelim( arg, "|", 4, szOk, sizeof( szOk ))){
   			strcpy( szOk, "¶}ªù§a¡C¡C¡C" );	/* »ñ³Ê¤¢¤ê¤Î¥»¥ê¥Õ */
   		}

		if( iNum >= maxnum ){
			/*     ¤òĶ¤¨¤Æ¤¤¤ë¾ì¹ç */
	        CHAR_talkToCli( talkerindex, meindex ,szNg, CHAR_COLORWHITE);
		}else{
			/*     ¤Ë  ¤¿¤Ê¤¤¾ì¹ç */
	        CHAR_talkToCli( talkerindex, meindex ,szOk, CHAR_COLORWHITE);
            NPC_DoormanOpenDoor(
                    CHAR_getWorkChar( meindex, CHAR_WORKDOORMANDOORNAME));
		}

    } else if( strcmp( mode , "titlenothave" ) == 0 ){
        CHAR_talkToCli( talkerindex, meindex ,
                        "©|¦b¥¼¤ä´©¼Ò¦¡¡C",
                        CHAR_COLORWHITE);
    }
}
예제 #19
0
파일: battle_ai.c 프로젝트: BlueKarl/gmsv
int BATTLE_ai_all( int battleindex, int side, int turn)
{
	int					i;
	int					rc = FALSE;
	BATTLE_ENTRY 		*pEntry;
	struct B_AI_RESULT	result;

	if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX;
	if( BATTLE_CHECKSIDE( side ) == FALSE )return BATTLE_ERR_PARAM;
	if( BATTLE_CHECKSIDE( side ^1) == FALSE )return BATTLE_ERR_PARAM;
	if( BattleArray[battleindex].Side[side].type != BATTLE_S_TYPE_ENEMY ) return FALSE;
	pEntry = BattleArray[battleindex].Side[side^1].Entry;
	for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){
		int charaindex = BattleArray[battleindex].Side[side].Entry[i].charaindex;
		int mode;
		if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue;

		mode = CHAR_getWorkInt( charaindex, CHAR_WORKTACTICS);
		if( mode < 0 || mode >= arraysizeof( functbl)){
			print( "BATTLE_ai_all ÖÐ,Õ½¶·Âß¼­Ä£Ê½ºÜÆæ¹Ö(%s)(%d)\n",
				CHAR_getUseName( charaindex ), mode );
			mode = 1;
		}
		if( BATTLE_IsCharge( charaindex ) == TRUE ){
			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
			continue;
		}
		if( BattleArray[battleindex].Side[side].flg & BSIDE_FLG_SURPRISE) {
			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );
			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
		}else {
			if( functbl[mode] != NULL ) {
				rc = functbl[mode]( turn, charaindex, pEntry, &result);
				if( BATTLE_CanMoveCheck( charaindex ) == FALSE ){
					result.command = BATTLE_COM_NONE;
				}
			}
			if( rc ) {
#ifdef _BATTLENPC_WARP_PLAYER
				if(result.command==BATTLE_COM_WARP){
					for( i=0; i<BATTLE_ENTRY_MAX; i++){
						int tindex = (pEntry+i)->charaindex;
						if( !CHAR_CHECKINDEX( tindex ))continue;
						if( CHAR_getFlg( tindex, CHAR_ISDIE)) continue;
						if( CHAR_getWorkInt( tindex, CHAR_WORKBATTLEMODE)
							== BATTLE_CHARMODE_RESCUE ) continue;
						if( CHAR_getInt( tindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER){
							char sBuff[1024]="", sBuff1[1024]="";
							int  ss[3];
							int  sii;
							int  rc = 1;
							if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_ACT_CONDITION),
								"wp", sBuff, sizeof( sBuff))!=NULL){
								for( sii=1; sii<=3; sii++){
									if(getStringFromIndexWithDelim( sBuff, ";", sii, sBuff1, sizeof( sBuff1)))
									{ss[sii-1]=atoi(sBuff1);}
									else
									{rc=0;}
								}
								if(rc){
									CHAR_warpToSpecificPoint( tindex, ss[0], ss[1], ss[2]);
									BATTLE_WatchStop( tindex);
								}
							}
						}
					}
				}
#endif

				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, result.command );
				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2,
								result.target + (side^1)*SIDE_OFFSET);
				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
				//CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);

			}
		}
	}
	return TRUE;
}
예제 #20
0
void CHAR_playerWatchfunc( int objmeindex, int objmoveindex,
                           CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen )
{
    int     fd;
    int     meindex;
    if( !CHECKOBJECTUSE(objmeindex) )return;
    if( !CHECKOBJECTUSE(objmoveindex))return;
    if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA )return;

    meindex = OBJECT_getIndex(objmeindex);
    if( CHAR_getInt( meindex,CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )return;

    fd = getfdFromCharaIndex( meindex );
    if( fd == -1 )return;
    switch( OBJECT_getType(objmoveindex) ){
    case OBJTYPE_CHARA:
    {
        char    buf[128];
        if( !CHAR_getFlg( OBJECT_getIndex(objmoveindex),CHAR_ISVISIBLE) )
            return;

        switch( act ){
        case CHAR_ACTSTAND:
        case CHAR_ACTWALK:
        case CHAR_ACTATTACK:
        case CHAR_ACTDEAD:
        case CHAR_ACTMAGIC:
        case CHAR_ACTITEM:
		case CHAR_ACTDOWN:
		case CHAR_ACTSIT:
		case CHAR_ACTHAND:
		case CHAR_ACTPLEASURE:
		case CHAR_ACTANGRY:
		case CHAR_ACTSAD:
        case CHAR_ACTDAMAGE:
		case CHAR_ACTGUARD:
		case CHAR_ACTTURN:
		case CHAR_ACTWARP:
		case CHAR_ACTACTIONWALK:
		case CHAR_ACTNOD:
		case CHAR_ACTTHROW:
		case CHAR_ACTACTIONSTAND:
			if( CHAR_makeCADefaultString(objmoveindex,buf,sizeof(buf),act) ) {
                CONNECT_appendCAbuf( fd,buf,strlen(buf));
            }
            break;
        // shan begin
        case CHAR_ACTTRADE:
            if( optlen == 1 )
                if( CHAR_makeCAOPT1String( objmoveindex, buf,
                                               sizeof( buf), act, opt[0] ) )
                    CONNECT_appendCAbuf( fd, buf, strlen(buf));
            break;

#ifdef _ANGEL_SUMMON
        case CHAR_ACTANGEL:
            if( optlen == 1 )
                if( CHAR_makeCAOPT1String( objmoveindex, buf,
                                               sizeof( buf), act, opt[0] ) )
                    CONNECT_appendCAbuf( fd, buf, strlen(buf));
            break;
#endif

		// shan end
#ifdef _MIND_ICON
		case CHAR_MIND:			
			if( optlen == 1 )
                if( CHAR_makeCAOPT1String( objmoveindex, buf,
                                               sizeof(buf), act, opt[0]))
                    CONNECT_appendCAbuf( fd, buf, strlen(buf));
            break;
#endif
#ifdef _STREET_VENDOR
		case CHAR_STREETVENDOR_OPEN:
			if(CHAR_makeCAOPTString(objmoveindex,buf,sizeof(buf),
				 act,CHAR_getWorkChar(OBJECT_getIndex(objmoveindex),CHAR_STREETVENDOR_NAME)))
				 CONNECT_appendCAbuf(fd,buf,strlen(buf));
			break;
		case CHAR_STREETVENDOR_CLOSE:
			if(CHAR_makeCAOPTString(objmoveindex,buf,sizeof(buf),
				 act,CHAR_getWorkChar(OBJECT_getIndex(objmoveindex),CHAR_STREETVENDOR_NAME)))
				 CONNECT_appendCAbuf(fd,buf,strlen(buf));
			break;
#endif
#ifdef _ITEM_CRACKER
		case CHAR_ITEM_CRACKER:			
			if( optlen == 1 )
                if( CHAR_makeCAOPT1String( objmoveindex, buf,
                                               sizeof(buf), act, opt[0]))
                    CONNECT_appendCAbuf( fd, buf, strlen(buf));
            break;
#endif
        case CHAR_ACTEFFECT:
            if( optlen == 1 )
                if( CHAR_makeCAOPT1String(objmoveindex,buf,
                                               sizeof(buf),act,opt[0] ) )
                    CONNECT_appendCAbuf( fd,buf,strlen(buf));
            break;
		case CHAR_ACTPOPUPNAME:
		case CHAR_ACTLEADER:
		case CHAR_ACTBATTLEWATCH:
            if( optlen == 1 )
                if( CHAR_makeCAOPT1String(objmoveindex,buf,
                                               sizeof(buf),act,opt[0] ) )
                    CONNECT_appendCAbuf( fd,buf,strlen(buf));
			break;
		case CHAR_ACTBATTLE:
            if( optlen == 3 )
                if( CHAR_makeCAOPT3String( objmoveindex,buf, sizeof(buf),
                						   act,opt[0],opt[1],opt[2] ) )
                    CONNECT_appendCAbuf( fd,buf,strlen(buf));
			break;
        default:
            break;
        }

        break;
    }
    case OBJTYPE_ITEM:
    case OBJTYPE_GOLD:
        CHAR_sendSpecifiedobjindexCToCharaindex(meindex,objmoveindex);
        break;
    default:
        break;
    }

}