/*------------------------------------------------------------------------ * * int NPC_Util_WalkCharToChar( int fromindex, int toindex, int mode) * * 0:toindex�������Ȼ� * ------------------------------------------------------------------------*/ int NPC_Util_WalkCharToChar( int fromindex, int toindex, int mode, int suberi) { int ret = -1; int dir; if( CHAR_getInt( fromindex, CHAR_FLOOR) != CHAR_getInt( toindex, CHAR_FLOOR)) { return( -1); } dir = NPC_Util_GetDirCharToChar( fromindex, toindex, mode ); if( dir != -1) { if( suberi) { dir = NPC_Util_SuberiWalk( fromindex, dir ); } } if( dir >= 0 ) { ret = CHAR_walk(fromindex,dir,0); if( ret == CHAR_WALKSUCCESSED ) ret = dir; else ret = -1; } return( ret); }
void ADDRESSBOOK_addAddressBook( int meindex, int toindex) { char tmpstring[CHARNAMELEN + ADDRESSBOOK_FIXEDMESSAGE_MAXLEN]; int hisblank; int myblank; int myaddindex, toaddindex; int dir; char *cdkey; hisblank = ADDRESSBOOK_findBlankEntry( toindex ); if( hisblank < 0 ) { CHAR_talkToCli( meindex, -1, ADDRESSBOOK_HISTABLEFULL, CHAR_COLORWHITE); return ; } myblank = ADDRESSBOOK_findBlankEntry( meindex ); if( myblank < 0 ){ CHAR_talkToCli( meindex , -1, ADDRESSBOOK_MYTABLEFULL, CHAR_COLORWHITE ); return ; } cdkey = CHAR_getChar( toindex, CHAR_CDKEY); myaddindex = ADDRESSBOOK_getIndexInAddressbook( meindex, cdkey, CHAR_getChar( toindex, CHAR_NAME)); cdkey = CHAR_getChar( meindex, CHAR_CDKEY); toaddindex = ADDRESSBOOK_getIndexInAddressbook( toindex, cdkey, CHAR_getChar(meindex, CHAR_NAME)); if( myaddindex < 0 ){ ADDRESSBOOK_entry hisentry; if( ADDRESSBOOK_makeEntryFromCharaindex(toindex,&hisentry) == FALSE ){ return ; } CHAR_setAddressbookEntry( meindex, myblank,&hisentry ); snprintf( tmpstring, sizeof( tmpstring), toaddindex < 0 ? ADDRESSBOOK_ADDED: ADDRESSBOOK_GIVEADDRESS, hisentry.charname); CHAR_talkToCli( meindex , -1,tmpstring, CHAR_COLORWHITE ); ADDRESSBOOK_sendAddressbookTableOne( meindex, myblank); }else{ snprintf( tmpstring, sizeof( tmpstring), ADDRESSBOOK_TAKEADDRESS1, CHAR_getChar( toindex, CHAR_NAME)); CHAR_talkToCli( meindex, -1, tmpstring, CHAR_COLORWHITE); } if( toaddindex < 0 ) { ADDRESSBOOK_entry meae; if( ADDRESSBOOK_makeEntryFromCharaindex(meindex,&meae) == FALSE) { return; } CHAR_setAddressbookEntry( toindex, hisblank,&meae ); snprintf( tmpstring , sizeof( tmpstring), myaddindex < 0 ? ADDRESSBOOK_ADDED : ADDRESSBOOK_GIVEADDRESS, CHAR_getChar( meindex, CHAR_NAME ) ); CHAR_talkToCli( toindex, -1, tmpstring, CHAR_COLORWHITE); ADDRESSBOOK_sendAddressbookTableOne( toindex , hisblank); }else { if( myaddindex < 0 ) { snprintf( tmpstring , sizeof( tmpstring), ADDRESSBOOK_TAKEADDRESS2, CHAR_getChar( meindex, CHAR_NAME ) ); CHAR_talkToCli( toindex, -1, tmpstring, CHAR_COLORWHITE); } } dir = NPC_Util_GetDirCharToChar( toindex, meindex, 0); if( dir != -1) { if( CHAR_getInt( toindex, CHAR_DIR) != dir) { CHAR_setInt( toindex, CHAR_DIR, dir); } CHAR_sendWatchEvent( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), CHAR_ACTNOD,NULL,0,TRUE); CHAR_setWorkInt( toindex, CHAR_WORKACTION, CHAR_ACTNOD); CHAR_sendWatchEvent( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), CHAR_ACTNOD,NULL,0,TRUE); CHAR_setWorkInt( meindex, CHAR_WORKACTION, CHAR_ACTNOD); } return; }
void PET_Watchfunc( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen ) { int pindex; int petindex; int petputtime; if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return; pindex = OBJECT_getIndex( objmoveindex); if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return; petindex = OBJECT_getIndex( objmeindex); petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME); if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { //宠邮不处理 }else if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){ if( NowTime.tv_sec >= (petputtime + 60*60) ) { int ownerindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( CHAR_CHECKINDEX( ownerindex) ){ if( CHAR_pickupFollowPet( ownerindex, petindex ) ) { return; } CHAR_talkToCli( ownerindex, -1, "溜宠太久,宠物走失了!!", CHAR_COLORYELLOW ); } #ifdef _PET_LOSTPET CHAR_CharSaveLostPet( petindex, 1); LogPet( "系统", "Watchfunc", CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(系统扣留-溜宠自由宠)", CHAR_getInt( petindex, CHAR_FLOOR), CHAR_getInt( petindex,CHAR_X ), CHAR_getInt( petindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); print("系统扣留-溜宠自由宠:%s\n", CHAR_getUseName( petindex)); CHAR_CharaDelete( petindex); #else CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NONE); LogPet( CHAR_getChar( pindex, CHAR_NAME ), CHAR_getChar( pindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(溜宠太久,宠物走失))", CHAR_getInt( pindex,CHAR_FLOOR), CHAR_getInt( pindex,CHAR_X ), CHAR_getInt( pindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); #endif return; } }else{ PET_CHECKFreePetIsIt( petindex); } if( CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE3 || CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE2){ if( act == CHAR_ACTATTACK) { if( NPC_Util_isFaceToChara( pindex,petindex,1 ) == TRUE ) { int action[2] = { CHAR_ACTDAMAGE, CHAR_ACTGUARD}; CHAR_sendWatchEvent( objmeindex, action[RAND(0,1)], NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); } } }else if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { ; }else if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI) >= 100 ) { int workpindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( act == CHAR_ACTWALK && CHAR_CHECKINDEX( workpindex) && workpindex == pindex ){ dir = NPC_Util_GetDirCharToChar( petindex, pindex, 0); if( dir != -1 ) { if( CHAR_getInt( petindex, CHAR_DIR) != dir ) { CHAR_setInt( petindex, CHAR_DIR, dir); CHAR_sendWatchEvent( CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX), CHAR_ACTTURN,NULL,0,TRUE); } } }else if( NPC_Util_isFaceToFace( petindex, pindex, 2 ) == TRUE ) { switch( act) { case CHAR_ACTATTACK: case CHAR_ACTDAMAGE: case CHAR_ACTDOWN: case CHAR_ACTSTAND: case CHAR_ACTACTIONWALK: case CHAR_ACTGUARD: case CHAR_ACTACTIONSTAND: CHAR_sendWatchEvent( objmeindex, act, NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); break; default: break; } } }else { } return; }