/************************************************ * Ïä·¤«¤±¤é¤ì¤¿»þ¤Î½èÍý ************************************************/ 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); } }
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); }
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)); }
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; }
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); } }
/* * 玉失日仄中涩烂毛允月卞反}仇仇匹 * 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; }
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 }
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); } }
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); } }
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); } }
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; }
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; } }