作者cache.bbs@cpu.tfcis.org (make OK!) 看板: itoc
標題[功能] 優劣文
時間動力核心 (2009/06/09 Tue 11:56:25)
感覺對小站的影響力比較沒有那麼大
不過鼓勵優良文章的作者和討論風氣卻是非常有意義的 :P
src/util/tran/transacct.c
在做這個功能之前必須先要先對全站帳號執行 transacct
在 struct NEW 新增下面兩行
+ int goodart; /* 優文 */
+ int badart; /* 劣文 */
修改完後執行 transacct 進行轉換
src/include/battr.h
+ #define BRD_EVALUATE 0x0400 /* 優劣文看板 */
! #define NUMBATTRS 11
! #define STR_BATTR "zTcsvA%fpuE"
"發文文章類別", /* BRD_PREFIX */
"觀看進板記錄", /* BRD_USIES*/
! "優劣文看板" /* BRD_EVALUATE*/
src/include/struct.h: ACCT struct
int bmw_count;
#endif
+ int goodart; /* 優文 */
+ int badart; /* 劣文 */
};
src/maple/bbsd.c: void u_exit()
+ cuser.goodart = cutmp->goodart;
+ cuser.badart = cutmp->badart;
cuser.userlevel = tuser.userlevel;
cuser.tvalid = tuser.tvalid;
src/maple/bbsd.c: static void utmp_setup ()
strcpy(utmp.userid, cuser.userid);
+ utmp.goodart = cuser.goodart;
+ utmp.badart = cuser.badart;
#ifdef DETAIL_IDLETIME
utmp.idle_time = ap_start;
src/maple/bbsd.c: acct_apply()
sprintf(cuser.email, "%s.bbs@%s", cuser.userid, str_host);
+ cuser.goodart = 0; //新使用者優劣文皆0篇
+ cuser.badart = 0;
+
/* Ragnarok.050528: 可能二人同時申請同一個 ID,在此必須再檢查一次 */
usr_fpath(buf, userid, NULL);
src/maple/bbsd.c: static int post_mark ()
改寫成m文時詢問是否設為優文
static int
post_mark(xo)
XO *xo;
{
if (bbstate & STAT_BOARD)
{
HDR *hdr;
int pos, cur, xmode, userno;;
char ans,buf[40];
pos = xo->pos;
cur = pos - xo->top;
hdr = (HDR *) xo_pool + cur;
xmode = hdr->xmode;
BRD *oldbrd, newbrd;
oldbrd = bshm->bcache + currbno;
memcpy(&newbrd, oldbrd, sizeof(BRD));
//cache.090602: 核定優文
if(newbrd.battr & BRD_EVALUATE)
{
if(hdr->xmode & POST_MARKED)
{
hdr->xmode = xmode ^ POST_MARKED;
currchrono = hdr->chrono;
rec_put(xo->dir, hdr, sizeof(HDR), xo->key == XZ_XPOST ? hdr->xid : pos, cmpchrono);
move(3 + cur, 7);
outc(post_attr(hdr));
ans = vans("◎ 是否將本篇取消優文 Y)是 N)否 ?(預設=否) ");
if(ans == 'y' || ans == 'Y')
{
if((userno = acct_userno(hdr->owner)) > 0)
{
extern UCACHE *ushm;
int online = 0;
UTMP *uentp, *uceil;
uentp = ushm->uslot;
uceil = (void *) uentp + ushm->offset;
do
{
if(uentp->userno == userno)
{
/* 在線上,寫入 utmp-> */
if(uentp->goodart > 0)
uentp->goodart--;
online = 1;
sprintf(buf, "設定完畢! %s 優文篇數減為 %d 篇。", uentp->userid, uentp->goodart);
}
} while (++uentp <= uceil);
if(online)
vmsg(buf);
else /* 不在線上,寫入 .ACCT (thanks to gaod) */
{
ACCT acct;
if(acct_load(&acct, hdr->owner) >= 0)
{
if(acct.goodart > 0)
acct.goodart--;
acct_save(&acct);
sprintf(buf, "設定完畢! %s 優文篇數減為 %d 篇。", acct.userid, acct.goodart);
vmsg(buf);
}
}//if online
}//if userno
}//if ans
}//if MARKED
else
{
hdr->xmode = xmode ^ POST_MARKED;
currchrono = hdr->chrono;
rec_put(xo->dir, hdr, sizeof(HDR), xo->key == XZ_XPOST ? hdr->xid : pos, cmpchrono);
move(3 + cur, 7);
outc(post_attr(hdr));
ans = vans("◎ 是否將本篇設為優文 Y)是 N)否 ?(預設=否) ");
if(ans == 'y' || ans == 'Y')
{
if((userno = acct_userno(hdr->owner)) > 0)
{
extern UCACHE *ushm;
int online = 0;
UTMP *uentp, *uceil;
uentp = ushm->uslot;
uceil = (void *) uentp + ushm->offset;
do
{
if(uentp->userno == userno)
{
/* 在線上,寫入 utmp-> */
uentp->goodart++;
online = 1;
sprintf(buf, "設定完畢! %s 優文篇數增為 %d 篇。", uentp->userid, uentp->goodart);
}
} while (++uentp <= uceil);
if(online)
vmsg(buf);
else /* 不在線上,寫入 .ACCT (thanks to gaod) */
{
ACCT acct;
if(acct_load(&acct, hdr->owner) >= 0)
{
acct.goodart++;
acct_save(&acct);
sprintf(buf, "設定完畢! %s 優文篇數增為 %d 篇。", acct.userid, acct.goodart);
vmsg(buf);
}
}//online
}//if userno
}//if ans
}//else
}//if EVALUATE
hdr->xmode = xmode ^ POST_MARKED;
currchrono = hdr->chrono;
rec_put(xo->dir, hdr, sizeof(HDR), xo->key == XZ_XPOST ? hdr->xid : pos, cmpchrono);
move(3 + cur, 7);
outc(post_attr(hdr));
}
return XO_FOOT;
}
src/maple/post.c: post_delete()
改寫成板主刪文時詢問是否設為劣文
- int pos, cur, by_BM;
+ int pos, cur, by_BM, userno;
HDR *hdr;
char buf[80];
if (!cuser.userlevel ||
!strcmp(currboard, BN_DELETED) ||
!strcmp(currboard, BN_JUNK))
return XO_NONE;
pos = xo->pos;
cur = pos - xo->top;
hdr = (HDR *) xo_pool + cur;
if ((hdr->xmode & POST_MARKED) || (!(bbstate & STAT_BOARD) && !is_author(hdr)))
return XO_NONE;
by_BM = bbstate & STAT_BOARD;
if (vans(msg_del_ny) == 'y')
{
currchrono = hdr->chrono;
+ BRD *oldbrd, newbrd;
+ oldbrd = bshm->bcache + currbno;
+ memcpy(&newbrd, oldbrd, sizeof(BRD));
+ char ans;
+
+ //cache.090602: 劣退文章
+ if((newbrd.battr & BRD_EVALUATE) && (bbstate & STAT_BOARD))
+ {
+ ans = vans("◎ 是否將本篇設為劣文 Y)是 N)否 ?(預設=否) ");
+ if(ans == 'y' || ans == 'Y')
+ {
+ if((userno = acct_userno(hdr->owner)) > 0)
+ {
+ extern UCACHE *ushm;
+ int online = 0;
+ UTMP *uentp, *uceil;
+ uentp = ushm->uslot;
+ uceil = (void *) uentp + ushm->offset;
+ do
+ {
+ if(uentp->userno == userno)
+ {
+ /* 在線上,寫入 utmp-> */
+ uentp->badart++;
+ online = 1;
+ sprintf(buf, "設定完畢! %s 劣文篇數增為 %d 篇。", uentp->userid, uentp->badart);
+ }
+ } while (++uentp <= uceil);
+
+ if(online)
+ vmsg(buf);
+ else /* 不在線上,寫入 .ACCT (thanks to gaod) */
+ {
+ ACCT acct;
+ if(acct_load(&acct, hdr->owner) >= 0)
+ {
+ acct.badart++;
+ acct_save(&acct);
+ sprintf(buf, "設定完畢! %s 劣文篇數增為 %d 篇。", acct.userid, acct.badart);
+ vmsg(buf);
+ }
+ }//if online
+ }//if userno
+ }//if ans
+ }//if battr
+
if (!rec_del(xo->dir, sizeof(HDR), xo->key == XZ_XPOST ? hdr->xid : pos, cmpchrono))
{
pos = move_post(hdr, xo->dir, by_BM, 0);
if (!by_BM && !(currbattr & BRD_NOCOUNT) && !(hdr->xmode & POST_BOTTOM))
bbs/src/maple/acct.c: void acct_show()
讓使用者查詢的時候會顯示自己的優劣文
! prints(" \033[32m上站次數:\033[37m%-35d\033[32m文章篇數:\033[37m%d
(優:%d/劣:%d)\n", u->numlogins, u->numposts, u->goodart, u->badart);
bbs/src/maple/acct.c: void acct_setup()
讓站務可以修改使用者的優劣文數
vget(++i, 0, "上站地點:", x.lasthost, sizeof(x.lasthost), GCARRY);
vget(++i, 0, "郵件信箱:", x.email, sizeof(x.email), GCARRY);
+
+ sprintf(buf, "%d", u->goodart);
+ vget(++i, 0, "優文數目:", buf, 10, GCARRY);
+ if ((num = atoi(buf)) >= 0)
+ x.goodart = num;
+
+ sprintf(buf, "%d", u->badart);
+ vget(++i, 0, "劣文數目:", buf, 10, GCARRY);
+ if ((num = atoi(buf)) >= 0)
+ x.badart = num;
src/maple/talk.c: static void do_query()
查詢網友時會顯示該名使用者的優劣文資訊
+ prints("[成就] 優文 %d 篇/劣文 %d 篇\n", acct->goodart, acct->badart);
showplans(userid);
vmsg(NULL);
}
--
=[﹎:�摃�◣��:﹎Origin ]|[ ���O���� cpu.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊Author ]|[118-171-140-61.dynamic.hin]|[���插�﹊:]=