作者qazq.bbs@bbs.cs.nchu.edu.tw (少做、少想、多放開) 看板: plan
標題[功能] 簡易的讓使用者動態更詳細。
時間中興資科 (Mon, 13 Oct 2003 02:22:47 +0800 (CST)) Updated: 2003/10/19
目前在使用者列表所看到的動態,全部都定義在 ~/src/include/modes.h
而有些動態會加在 modes.h 定義的後面,是利用 cutmp->mateid 辦到的。
所以只要利用一個空字串的 mode 加上隨時可以修改的 cutmp->mateid
就可以讓使用者名單的動態多樣化。
不過在使用者列表所看到的動態和查詢畫面的不太一樣。
查詢畫面的是不完整的。(無法顯示 cutmp->mateid )
例如,列表看到『查詢qazq』,但是查詢該使用者的動態只會顯示『查詢』。
所以 talk.c 要相對的作一下修改。
不然因為是利用一個空的 mode,會導致查詢使用者的時候就會出現空白...
(不改其實也沒差啦,列表是完整正確的即可。 ^^a)
下面有修改方法和範例...
==============================================================================
: src/include/modes.h
"呼叫", /* M_PAGE */
"查詢", /* M_QUERY */
- "發呆", /* M_IDLE */
+ "", /* M_IDLE */
"其他" /* M_XMODE */
在這邊,我是直接現成的 M_IDLE 改成空字串。
因為影響不大....
也可以自己另外定義一個 M_IDLE2 (名稱自己想吧 :P)
當然,下面的程式自己就要做一下相對的調整。
(或許 talk.c:bmode() 也要做一下修改....^^a)
上面的改好之後,基本上就可以讓動態更多樣化了.....
只要在要顯示動態的程式一進入,馬上把主動態改成 M_IDLE
然後接著修改 cutmp->mateid
下面是範例.....
: src/so/dreye.c:main_dreye()
int
main_dreye()
{
char ans[3];
char word[30];
clear();
+ utmp_mode(M_IDLE); /* qazq.031011: 加入詳細動態 */
+ strcpy(cutmp->mateid, "譯點通字典");
while (1)
{
: src/maple/ulist.c:ulist_nickchange()
if (!cuser.userlevel)
return XO_NONE;
/* 暱稱是 cuser. cumtp-> 都一起換 */
+ utmp_mode(M_IDLE); /* qazq.031011: 加入詳細動態 */
+ strcpy(cutmp->mateid, "變換暱稱中");
strcpy(buf, str = cuser.username);
==============================================================================
基本上就是這樣,在進入該程式的時候,就做出這樣的修改....
utmp_mode(M_IDLE);
strcpy(cutmp->mateid, "XXXXXXXXXX");
XXXXXXXXXX 就是想要顯示的動態。
不過!注意!最多只能10個字元!!
下面的修改是為了讓查詢的時候可以完整顯示動態。
可做可不做...
==============================================================================
: src/maple/talk.c:do_query()
UTMP *up;
int userno;
! char *userid, buf[20];
.....
.....
up = utmp_find(userno);
+ if (up && can_see(cutmp, up)) /* qazq.031010: 完整的查詢動態顯示 */
+ {
+ sprintf(buf, "%s%s", bmode(up, 1),
+ (up->mode >= M_TALK && up->mode <= M_IDLE) ? up->mateid : "");
+ }
+ else
+ sprintf(buf, "不在站上");
.....
.....
prints("[認證] %s通過認證 [動態] %-16.16s [財產] %s%s\n",
acct->userlevel & PERM_VALID ? "已經" : "尚未",
- (up && can_see(cutmp, up)) ? bmode(up, 1) : "不在站上",
+ buf,
fortune[rich],
m_query(userid) ? " \033[1;31m有新信件\033[m" : "");
: src/maple/talk.c:bmode()
if (mode == M_TALK)
{
/* itoc.020829: up 在 Talk 時,若 up->mateid 隱形則看不見 */
if (!utmp_get(mateid))
mateid = "無名氏";
}
- sprintf(modestr, "%s:%s", word, mateid);
+ sprintf(modestr, "%s%s", word, mateid); /* 拿掉冒號 */
return (modestr);
}
--
┌┼ Author: 中興資科˙中興資科 e資獨秀 csNCHU.twbbs.org
└┘ Origin: qazq 從 61-216-137-57.HINET-IP.hinet.net 發表