精華區beta SetupBBS 關於我們 聯絡資訊
板友:故名思義,就是顯示站上和你看同一板的使用者。 此功能是從 ptt 那裏看來的,自己 implement。 做法:在下列內容裏,有 "*" 皆代表 Ctrl+U(除了註解以外) 1. 修改 struct.h struct user_info { int uid; /* Used to find user name in passwd file */ pid_t pid; /* kill() to notify user of talk request */ int sockaddr; /* ... */ int destuid; /* talk uses this to identify who called */ struct user_info* destuip; uschar active; /* When allocated this field is true */ uschar invisible; /* Used by cloaking function in Xyz menu */ uschar sockactive; /* Used to coordinate talk requests */ usint userlevel; uschar mode; /* UL/DL, Talk Mode, Chat Mode, ... */ uschar pager; /* pager toggle, YEA, or NA */ uschar in_chat; /* for in_chat commands */ uschar sig; /* signal type */ char userid[IDLEN + 1]; char chatid[11]; /* chat id, if in chat mode */ char realname[20]; char username[24]; char from[27]; /* machine name the user called in from */ int from_alias; char birth; /* 是否是生日 Ptt*/ char tty[11]; /* tty port */ ushort friend[MAX_FRIEND]; ushort reject[MAX_REJECT]; uschar msgcount; msgque msgs[MAXMSGS]; time_t uptime; time_t lastact; /* 上次使用者動的時間 */ usint brc_id; uschar lockmode; /* add by TJSheu */ char board[IDLEN + 2]; /* 是否為板友 */ char pad[12]; /* */ }; typedef struct user_info user_info; 2. 修改 talk.c ------------------- typedef struct { user_info *ui; linkuser_info *lui; time_t idle; usint friend; /* add by TJSheu */ usint board_friend; /* */ } pickup; ------------------- int friends_number; int override_number; int rejected_number; /* add by TJSheu */ int board_friend_number; char *fcolor[8] = {"", "*[1;32m", "*[1;33m", "*[1;37m", "*[31m", "*[1;35m" , "*[1;36m", "*[36m"}; /* */ ------------------- /* add by TJSheu */ int is_board_friend(ui) user_info *ui; { if ( (strcmp(currboard, ui->board)==0) && (ui->uid != currutmp->uid) && (ui->mode == READING) ) { board_friend_number++; return 7; } else return 0; } /* */ -------------------- switch (pickup_way) { case 0: { register int friend; if (friend = j->friend - i->friend) return friend; } /* add by TJSheu */ { register int board_friend; if (board_friend = j->board_friend - i->board_friend) return board_friend; } /* */ case 1: ------------------- if (pickup_way !=5 && utmpshm->uptime > freshtime) { time(&freshtime); /* modify by TJSheu */ board_friend_number=friends_number = override_number = rejected_number = actor = ch = 0; /* */ while (ch < USHM_SIZE) ------------------- #endif pklist[actor].friend = head; pklist[actor].ui = uentp; /* add by TJSheu */ pklist[actor].board_friend = is_board_friend(uentp); /* */ actor++; } ------------------- else if( pickup_way==5 ) /* Ptt */ { time(&freshtime); /* modify by TJSheu */ friends_number = override_number = rejected_number = actor = ch = 0; /* */ for (ch = 0;ch < luser->number;ch++) { luentp = &(luser->uinfo[ch]); ------------------- if (state >= US_ACTION) { showtitle((cuser.uflag & FRIEND_FLAG)? "好友列表": "休閒聊天", BoardName) /*modify by TJSheu */ prints("排序方式:[%s]*[1;36m教室人數:%-4d*[1;32m我的朋友:%-3d*[33m 與我為友:%-3d*[31m壞人:%-3d*[m*[36m板友:%-3d*[m\n" "*[1;33;44m %s P%c代號 %-17s%-17s%-13s%-10s*[0m\n", msg_pickup_way[pickup_way], actor, friends_number, override_number, badman,board_friend_number, #ifdef SHOWUID show_uid ? "UID" : ------------------ if (PERM_HIDE(uentp)) state = PERM_HIDE(currutmp) ? 5 : 0; if (PERM_HIDE(currutmp) && state == 3) state = 6; /* add by TJSHeu */ if (state ==0) state = pklist[ch].board_friend; ------------------ 3. 修改 board.c if (strcmp(currboard, boardname) == 0) { return brc_num; } brc_update(); strcpy(currboard, boardname); /* add by TJSheu */ if (strcmp(currboard, boardname) == 0) { return brc_num; } brc_update(); strcpy(currboard, boardname); /* add by TJSheu */ strcpy(currutmp->board,currboard); /* */ currbrdattr = bcache[getbnum(currboard)-1].brdattr; read_brc_buf(); ptr = brc_buf;