作者itoc.bbs@xeon.tfcis.org (看了題目就知道該放棄) 看板: plan
標題Re: [問題] 不能undef錢幣系統嗎?
時間動力核心 (Mon, 18 Aug 2003 01:39:01 +0800 (CST)) Updated: 2005/11/28
※ 引述《qask (qask)》之銘言:
> 感謝itoc大的回應,不過我還是想試試拿掉code,
> (雖然眼不見為淨,可是浪費資源在運算上面了:p)
> 可以稍微指點一下code大概分布在哪裡嗎
首先改 struct ACCT
- int money; /* 銀幣 */
- int gold; /* 金幣 */
+ int useless1; /* 空欄一 */
+ int useless2; /* 空欄二 */
把這二個欄位換成空欄位,這樣就無需轉換 .ACCT
如果你是架一個新站的話,那麼可以直接刪除這二行,而不需增加 useless 欄位
然後重新 make clean os-type
所有出現的 error 都是相關的
你的目標就是將所有的 error 都排除
使能 make 成功
----------------------------------------------------
[種類] 用錢買服務,直接刪除該段即可
[範例] song.c
- if (cuser.money < 1000)
- {
- vmsg("要 1000 銀幣才能點歌到看板喔");
- return XO_FOOT;
- }
- cuser.money -= 1000;
----------------------------------------------------
[種類] 用錢建立起來的金融制度
bank.c 整支刪除,也要同步修改 so/Makefile
刪除了 bank.c,那麼在 menu.c 所有呼叫 bank.so 的選單都要拿掉
----------------------------------------------------
[種類] 用錢建立起來的遊戲制度
在 menu.c 中的 menu_game2[] 的全部、menu_game3[] 的部分
都是用錢才能玩的賭博遊戲
刪除 menu.c 的這部分
並刪除這些 *.so 對應的 so/*.c,也要同步修改 so/Makefile
pip/* 全部刪除,menu.c 中的電子雞拿掉
----------------------------------------------------
[種類] 顯示用的,直接刪除該段即可
[範例] acct.c
- prints(" \033[32m我的暱稱:\033[37m%-35s\033[32m擁有銀幣:\033[37m%d\n",
- u->username, u->money);
+ prints(" \033[32m我的暱稱:\033[37m%-35s\033[32m\n", u->username);
----------------------------------------------------
[種類] 設定用的,直接刪除該段即可
[範例] acct.c
- sprintf(buf, "%d", u->money);
- vget(++i, 0, "銀 幣:", buf, 10, GCARRY);
- if ((num = atoi(buf)) >= 0)
- x.money = num;
----------------------------------------------------
[種類] 加錢用的,循線刪除
[範例] post.c:do_post()
- addmoney(mode);
而 mode 顯然就不需要了
- mode = BMIN(wordsnum, spendtime) / 10;
而 spendtime 也是因為要算錢才新增的
- time_t spendtime;
- spendtime = time(0);
- spendtime = time(0) - spendtime; /* itoc.010712: post 總共花的時間(秒數) */
----------------------------------------------------
[種類] 因為錢幣系統,為了避免 multi 而新增的
[範例] bbsd.c:u_exit()
- if (cutmp->status & STATUS_COINLOCK)
- {
- cuser.money = tuser.money;
- cuser.gold = tuser.gold;
- }
- else
- {
- if (cuser.money < 0) cuser.money = 0;
- if (cuser.gold < 0) cuser.gold = 0;
- }
這些都刪除沒問題,但是 STATUS_COINLOCK 又是什麼呢?
一路 trace 回去,就知道這是為了檢查 multi 而新增的
所以來到 ufo.h
- #define STATUS_COINLOCK BFLAG(4) /* 錢幣鎖定 */
接著來到 bbsd.c:tn_login()
- int attempts, multi;
+ int attempts;
- multi = 0;
- /* itoc.020619: 即使刪除重複的 login 還是算 multi,不能儲存金錢 */
- multi = 1;
- if (multi)
- cutmp->status |= STATUS_COINLOCK;
進而來到 acct.c 以及 so/*.c
- if (cutmp->status & STATUS_COINLOCK)
- {
- vmsg(MSG_COINLOCK);
- return XEASY;
- }
----------------------------------------------------
[種類] 其他
一路 trace 回去,通通刪除
[範例] talk.c:do_query()
- if (acct->money >= 1000000)
- {
- if (acct->gold >= 100) userno = 3;
- else userno = 2;
- }
- else
- {
- if (acct->money >= 50000) userno = 1;
- else userno = 0;
- }
顯然可看出這段是利用 gold/money 來決定 userno,所以也可以刪除下面這行
- prints(" [財產] %s", fortune[userno]); /* 借用 userno */
看到了 fortune,找一找也沒別的地方用,所以也可以刪除
- /* itoc.010408: query 時出現對方的財富狀況 */
- char fortune[4][5] = {"乞丐", "一般", "小康", "財閥"};
----------------------------------------------------
----------------------------------------------------
[結論] 基本上作法就是這樣,由於錢幣制度已經深植很久了
而且是直接寫在 .ACCT 裡面,而不是放在 .ATTR 裡面
所以要拔除的話,的確是要花一些功夫的
反正就是跟 STATUS_COINLOCK、MSG_COINLOCK、money、gold 相關的
一路 trace 回去,通通不要
--
=[﹎:�摃�◣��:﹎ Origin ]|[ �吨O�痐� processor.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊ Author ]|[ itoc.dorm11.nctu.edu.tw ]|[���插�﹊:]=