/*------------------------------------------------------------ * ϶�ý�ľ�� į����įëܰ�����£ۺֽ�ئ�Ȼ������գ�ܰ����ئ�� * ¦�� * charaindex int ƽ�ҷ��̼������͵� * titleindex int ��į�̼������͵� * ߯Ի�� * ܰ������index * ܰ����ئ������ FALSE(0) ------------------------------------------------------------*/ BOOL TITLE_addtitle( int charaindex, int titleindex ) { int i; int firstfindempty=-1; if( CHAR_CHECKINDEX(charaindex) == FALSE )return FALSE; /*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/ if( TITLE_getTitleIndex( titleindex) == -1 ) return FALSE; for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ ){ if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex ) /* ��ƥ�� �Ȼ����¾���������ئ�� */ return FALSE; if( firstfindempty == -1 && CHAR_getCharHaveTitle(charaindex,i) == -1 ){ firstfindempty = i; } } return CHAR_setCharHaveTitle( charaindex,firstfindempty,titleindex ); }
/*------------------------------------------------------------ * �ͷ���ʧ������έ���±�į�� ٯ ë���� * ¦�� * title Title* ��ƽ�� * charaindex int ��įë �Ȼ�����ƽ�ҷ¼��̼������͵� * ߯Ի�� * char* ------------------------------------------------------------*/ char* TITLE_makeTitleStatusString( int charaindex,int havetitleindex ) { int attach; int index; /* ���� ���̼������͵����շ�����ë�������� */ index = CHAR_getCharHaveTitle( charaindex,havetitleindex ); attach = TITLE_getTitleIndex( index); if( attach == -1 ) { TITLE_statusStringBuffer[0] = '\0'; return TITLE_statusStringBuffer; } switch( TITLE_table[attach].functype ){ case TITLE_FUNCTYPENONE: snprintf( TITLE_statusStringBuffer, sizeof(TITLE_statusStringBuffer ),"%s" , TITLE_table[attach].name ); break; case TITLE_FUNCTYPEUSERFUNC: { char string[256]={""}; void (*function)(int,char* buf,int buflen); function = TITLE_table[attach].definefunction; if( function ) function( charaindex,string,sizeof(string) ); strcpysafe( TITLE_statusStringBuffer, sizeof(TITLE_statusStringBuffer ),string ); } break; default: TITLE_statusStringBuffer[0] = '\0'; return TITLE_statusStringBuffer; break; } return TITLE_statusStringBuffer; }
/*------------------------------------------------------------ * ϶�ý�ľ�� į����į��ؤ�����մ������£�ئ��������������ئ�У� * ����ؤ�������� ���ʣ� * ¦�� * charaindex int ƽ�ҷ��̼������͵� * titleindex int ��į�̼������͵� * ߯Ի�� * �������� TRUE(1) * ������ئ������ FALSE(0) ------------------------------------------------------------*/ BOOL TITLE_deltitle( int charaindex, int titleindex ) { int i; BOOL del=FALSE; int index; if( CHAR_CHECKINDEX(charaindex) == FALSE )return FALSE; /*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/ index = TITLE_getTitleIndex( titleindex); if( index == -1 ) return FALSE; for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ ) if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex ){ /* ���л����Ȼ�����֧��ئ���ɣ���ľ��ئ�Ʊ����� */ if( CHAR_getInt(charaindex, CHAR_INDEXOFEQTITLE) == i ){ CHAR_setInt(charaindex, CHAR_INDEXOFEQTITLE, -1 ); } /* �Ȼ����¾������� */ CHAR_setCharHaveTitle( charaindex,i,-1); del = TRUE; } return del; }
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); } }