回精華區
作者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 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻