summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/include/proto.h17
-rw-r--r--pttbbs/mbbsd/bbs.c158
-rw-r--r--pttbbs/mbbsd/gamble.c160
3 files changed, 169 insertions, 166 deletions
diff --git a/pttbbs/include/proto.h b/pttbbs/include/proto.h
index 78a03ee5..449cfece 100644
--- a/pttbbs/include/proto.h
+++ b/pttbbs/include/proto.h
@@ -271,6 +271,8 @@ void setfriendfile(char *fpath, int type);
int ticket_main(void);
int openticket(int bid);
int ticket(int bid);
+int hold_gamble(void);
+int join_gamble(int, const fileheader_t *, const char *);
/* go */
void gochess(int s, ChessGameMode mode);
@@ -427,19 +429,19 @@ int pmore2(const char *fpath, int promptend, void *ctx,
int (*footer_handler)(int ratio, int width, void *ctx),
int (*help_handler) (int y, void *ctx));
/* piaip's new telnet, telnet.c */
-extern void telnet_init(int do_init_cmd);
-extern ssize_t tty_read(unsigned char *buf, size_t max);
-extern void telnet_turnoff_client_detect(void);
+void telnet_init(int do_init_cmd);
+ssize_t tty_read(unsigned char *buf, size_t max);
+void telnet_turnoff_client_detect(void);
/* name */
typedef int (*gnc_comp_func)(int, const char*, int);
typedef int (*gnc_perm_func)(int);
typedef char* (*gnc_getname_func)(int);
-extern void namecomplete2(const struct Vector *namelist, const char *prompt, char *data);
-extern void namecomplete3(const struct Vector *namelist, const char *prompt, char *data, const char *defval);
-extern int ShowVector(struct Vector *self, int row, int column, const char *prompt, int idx);
-extern void ToggleVector(struct Vector *list, int *recipient, const char *listfile, const char *msg);
+void namecomplete2(const struct Vector *namelist, const char *prompt, char *data);
+void namecomplete3(const struct Vector *namelist, const char *prompt, char *data, const char *defval);
+int ShowVector(struct Vector *self, int row, int column, const char *prompt, int idx);
+void ToggleVector(struct Vector *list, int *recipient, const char *listfile, const char *msg);
void usercomplete(const char *prompt, char *data);
void usercomplete2(const char *prompt, char *data, const char *defval);
@@ -653,7 +655,6 @@ int isvisible_stat(const userinfo_t * me, const userinfo_t * uentp, int fri_stat
int cmpwatermtime(const void *a, const void *b);
void getmessage(msgque_t msg);
void my_write2(void);
-int t_idle(void);
void check_water_init(void);
const char *modestring(const userinfo_t * uentp, int simple);
int t_users(void);
diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c
index 1ce0a44f..94ce9d0a 100644
--- a/pttbbs/mbbsd/bbs.c
+++ b/pttbbs/mbbsd/bbs.c
@@ -2523,164 +2523,6 @@ b_man(void)
NULL, backup_path);
}
-#ifndef NO_GAMBLE
-static int
-stop_gamble(void)
-{
- boardheader_t *bp = getbcache(currbid);
- char fn_ticket[128], fn_ticket_end[128];
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- if (!bp->endgamble || bp->endgamble > now)
- return 0;
-
- setbfile(fn_ticket, currboard, FN_TICKET);
- setbfile(fn_ticket_end, currboard, FN_TICKET_END);
-
- rename(fn_ticket, fn_ticket_end);
- if (bp->endgamble) {
- bp->endgamble = 0;
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
- }
- return 1;
-}
-static int
-join_gamble(int eng GCC_UNUSED, const fileheader_t * fhdr GCC_UNUSED,
- const char *direct GCC_UNUSED)
-{
- if (!HasBasicUserPerm(PERM_LOGINOK))
- return DONOTHING;
- if (stop_gamble()) {
- vmsg("目前未舉辦賭盤或賭盤已開獎");
- return DONOTHING;
- }
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- ticket(currbid);
- return FULLUPDATE;
-}
-static int
-hold_gamble(void)
-{
- char fn_ticket[128], fn_ticket_end[128], genbuf[128], msg[256] = "",
- yn[10] = "";
- char tmp[128];
- boardheader_t *bp = getbcache(currbid);
- int i;
- FILE *fp = NULL;
-
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- if (!(currmode & MODE_BOARD))
- return 0;
- if (bp->brdattr & BRD_NOCREDIT ) {
- vmsg("本看板目前被設定為發文無獎勵,無法使用賭盤");
- return 0;
- }
-
- setbfile(fn_ticket, currboard, FN_TICKET);
- setbfile(fn_ticket_end, currboard, FN_TICKET_END);
- setbfile(genbuf, currboard, FN_TICKET_LOCK);
-
- if (dashf(fn_ticket)) {
- getdata(b_lines - 1, 0, "已經有舉辦賭盤, "
- "是否要 [停止下注]?(N/y):", yn, 3, LCECHO);
- if (yn[0] != 'y')
- return FULLUPDATE;
- rename(fn_ticket, fn_ticket_end);
- if (bp->endgamble) {
- bp->endgamble = 0;
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
-
- }
- return FULLUPDATE;
- }
- if (dashf(fn_ticket_end)) {
- getdata(b_lines - 1, 0, "已經有舉辦賭盤, "
- "是否要開獎 [否/是]?(N/y):", yn, 3, LCECHO);
- if (yn[0] != 'y')
- return FULLUPDATE;
- if(cpuload(NULL) > MAX_CPULOAD/4)
- {
- vmsg("負荷過高 請於系統負荷低時開獎..");
- return FULLUPDATE;
- }
- openticket(currbid);
- return FULLUPDATE;
- } else if (dashf(genbuf)) {
- vmsg(" 目前系統正在處理開獎事宜, 請結果出爐後再舉辦.......");
- return FULLUPDATE;
- }
- getdata(b_lines - 2, 0, "要舉辦賭盤 (N/y):", yn, 3, LCECHO);
- if (yn[0] != 'y')
- return FULLUPDATE;
- getdata(b_lines - 1, 0, "賭什麼? 請輸入主題 (輸入後編輯內容):",
- msg, 20, DOECHO);
- if (msg[0] == 0 ||
- veditfile(fn_ticket_end) < 0)
- return FULLUPDATE;
-
- clear();
- showtitle("舉辦賭盤", BBSNAME);
- setbfile(tmp, currboard, FN_TICKET_ITEMS ".tmp");
-
- //sprintf(genbuf, "%s/" FN_TICKET_ITEMS, direct);
-
- if (!(fp = fopen(tmp, "w")))
- return FULLUPDATE;
- do {
- getdata(2, 0, "輸入彩票價格 (價格:10-10000):", yn, 6, NUMECHO);
- i = atoi(yn);
- } while (i < 10 || i > 10000);
- fprintf(fp, "%d\n", i);
- if (!getdata(3, 0, "設定自動封盤時間?(Y/n)", yn, 3, LCECHO) || yn[0] != 'n') {
- bp->endgamble = gettime(4, now, "封盤於");
- assert(0<=currbid-1 && currbid-1<MAX_BOARD);
- substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
- }
- move(6, 0);
- snprintf(genbuf, sizeof(genbuf),
- "\n請到 %s 板 按'f'參與賭博!\n\n"
- "一張 %d " MONEYNAME ", 這是%s的賭博\n%s%s\n",
- currboard,
- i, i < 100 ? "小賭式" : i < 500 ? "平民級" :
- i < 1000 ? "貴族級" : i < 5000 ? "富豪級" : "傾家蕩產",
- bp->endgamble ? "賭盤結束時間: " : "",
- bp->endgamble ? Cdate(&bp->endgamble) : ""
- );
- strcat(msg, genbuf);
- outs("請依次輸入彩票名稱, 需提供2~8項. (未滿八項, 輸入直接按Enter)\n");
- //outs(ANSI_COLOR(1;33) "注意輸入後無法修改!\n");
- for( i = 0 ; i < 8 ; ++i ){
- snprintf(yn, sizeof(yn), " %d)", i + 1);
- getdata(7 + i, 0, yn, genbuf, 9, DOECHO);
- if (!genbuf[0] && i > 1)
- break;
- fprintf(fp, "%s\n", genbuf);
- }
- fclose(fp);
-
- setbfile(genbuf, currboard, FN_TICKET_RECORD);
- unlink(genbuf); // Ptt: 防堵利用不同id同時舉辦賭場
- setbfile(genbuf, currboard, FN_TICKET_USER);
- unlink(genbuf); // Ptt: 防堵利用不同id同時舉辦賭場
-
- setbfile(genbuf, currboard, FN_TICKET_ITEMS);
- setbfile(tmp, currboard, FN_TICKET_ITEMS ".tmp");
- if(!dashf(fn_ticket))
- Rename(tmp, genbuf);
-
- snprintf(genbuf, sizeof(genbuf), TN_ANNOUNCE " %s 板 開始賭博!", currboard);
- post_msg(currboard, genbuf, msg, cuser.userid);
- post_msg("Record", genbuf + 7, msg, "[馬路探子]");
- /* Tim 控制CS, 以免正在玩的user把資料已經寫進來 */
- rename(fn_ticket_end, fn_ticket);
- /* 設定完才把檔名改過來 */
-
- vmsg("賭盤設定完成");
- return FULLUPDATE;
-}
-#endif
-
static int
cite_post(int ent GCC_UNUSED, const fileheader_t * fhdr,
const char *direct GCC_UNUSED)
diff --git a/pttbbs/mbbsd/gamble.c b/pttbbs/mbbsd/gamble.c
index e6f46e0b..c91b4f78 100644
--- a/pttbbs/mbbsd/gamble.c
+++ b/pttbbs/mbbsd/gamble.c
@@ -266,6 +266,7 @@ doesnt_catch_up:
return -1;
}
+#ifndef NO_GAMBLE
int
openticket(int bid)
{
@@ -478,6 +479,165 @@ openticket(int bid)
}
int
+stop_gamble(void)
+{
+ boardheader_t *bp = getbcache(currbid);
+ char fn_ticket[128], fn_ticket_end[128];
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ if (!bp->endgamble || bp->endgamble > now)
+ return 0;
+
+ setbfile(fn_ticket, currboard, FN_TICKET);
+ setbfile(fn_ticket_end, currboard, FN_TICKET_END);
+
+ rename(fn_ticket, fn_ticket_end);
+ if (bp->endgamble) {
+ bp->endgamble = 0;
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
+ }
+ return 1;
+}
+
+int
+join_gamble(int eng GCC_UNUSED, const fileheader_t * fhdr GCC_UNUSED,
+ const char *direct GCC_UNUSED)
+{
+ if (!HasBasicUserPerm(PERM_LOGINOK))
+ return DONOTHING;
+ if (stop_gamble()) {
+ vmsg("目前未舉辦賭盤或賭盤已開獎");
+ return DONOTHING;
+ }
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ ticket(currbid);
+ return FULLUPDATE;
+}
+
+int
+hold_gamble(void)
+{
+ char fn_ticket[128], fn_ticket_end[128], genbuf[128], msg[256] = "",
+ yn[10] = "";
+ char tmp[128];
+ boardheader_t *bp = getbcache(currbid);
+ int i;
+ FILE *fp = NULL;
+
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ if (!(currmode & MODE_BOARD))
+ return 0;
+ if (bp->brdattr & BRD_NOCREDIT ) {
+ vmsg("本看板目前被設定為發文無獎勵,無法使用賭盤");
+ return 0;
+ }
+
+ setbfile(fn_ticket, currboard, FN_TICKET);
+ setbfile(fn_ticket_end, currboard, FN_TICKET_END);
+ setbfile(genbuf, currboard, FN_TICKET_LOCK);
+
+ if (dashf(fn_ticket)) {
+ getdata(b_lines - 1, 0, "已經有舉辦賭盤, "
+ "是否要 [停止下注]?(N/y):", yn, 3, LCECHO);
+ if (yn[0] != 'y')
+ return FULLUPDATE;
+ rename(fn_ticket, fn_ticket_end);
+ if (bp->endgamble) {
+ bp->endgamble = 0;
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
+
+ }
+ return FULLUPDATE;
+ }
+ if (dashf(fn_ticket_end)) {
+ getdata(b_lines - 1, 0, "已經有舉辦賭盤, "
+ "是否要開獎 [否/是]?(N/y):", yn, 3, LCECHO);
+ if (yn[0] != 'y')
+ return FULLUPDATE;
+ if(cpuload(NULL) > MAX_CPULOAD/4)
+ {
+ vmsg("負荷過高 請於系統負荷低時開獎..");
+ return FULLUPDATE;
+ }
+ openticket(currbid);
+ return FULLUPDATE;
+ } else if (dashf(genbuf)) {
+ vmsg(" 目前系統正在處理開獎事宜, 請結果出爐後再舉辦.......");
+ return FULLUPDATE;
+ }
+ getdata(b_lines - 2, 0, "要舉辦賭盤 (N/y):", yn, 3, LCECHO);
+ if (yn[0] != 'y')
+ return FULLUPDATE;
+ getdata(b_lines - 1, 0, "賭什麼? 請輸入主題 (輸入後編輯內容):",
+ msg, 20, DOECHO);
+ if (msg[0] == 0 ||
+ veditfile(fn_ticket_end) < 0)
+ return FULLUPDATE;
+
+ clear();
+ showtitle("舉辦賭盤", BBSNAME);
+ setbfile(tmp, currboard, FN_TICKET_ITEMS ".tmp");
+
+ //sprintf(genbuf, "%s/" FN_TICKET_ITEMS, direct);
+
+ if (!(fp = fopen(tmp, "w")))
+ return FULLUPDATE;
+ do {
+ getdata(2, 0, "輸入彩票價格 (價格:10-10000):", yn, 6, NUMECHO);
+ i = atoi(yn);
+ } while (i < 10 || i > 10000);
+ fprintf(fp, "%d\n", i);
+ if (!getdata(3, 0, "設定自動封盤時間?(Y/n)", yn, 3, LCECHO) || yn[0] != 'n') {
+ bp->endgamble = gettime(4, now, "封盤於");
+ assert(0<=currbid-1 && currbid-1<MAX_BOARD);
+ substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
+ }
+ move(6, 0);
+ snprintf(genbuf, sizeof(genbuf),
+ "\n請到 %s 板 按'f'參與賭博!\n\n"
+ "一張 %d " MONEYNAME ", 這是%s的賭博\n%s%s\n",
+ currboard,
+ i, i < 100 ? "小賭式" : i < 500 ? "平民級" :
+ i < 1000 ? "貴族級" : i < 5000 ? "富豪級" : "傾家蕩產",
+ bp->endgamble ? "賭盤結束時間: " : "",
+ bp->endgamble ? Cdate(&bp->endgamble) : ""
+ );
+ strcat(msg, genbuf);
+ outs("請依次輸入彩票名稱, 需提供2~8項. (未滿八項, 輸入直接按Enter)\n");
+ //outs(ANSI_COLOR(1;33) "注意輸入後無法修改!\n");
+ for( i = 0 ; i < 8 ; ++i ){
+ snprintf(yn, sizeof(yn), " %d)", i + 1);
+ getdata(7 + i, 0, yn, genbuf, 9, DOECHO);
+ if (!genbuf[0] && i > 1)
+ break;
+ fprintf(fp, "%s\n", genbuf);
+ }
+ fclose(fp);
+
+ setbfile(genbuf, currboard, FN_TICKET_RECORD);
+ unlink(genbuf); // Ptt: 防堵利用不同id同時舉辦賭場
+ setbfile(genbuf, currboard, FN_TICKET_USER);
+ unlink(genbuf); // Ptt: 防堵利用不同id同時舉辦賭場
+
+ setbfile(genbuf, currboard, FN_TICKET_ITEMS);
+ setbfile(tmp, currboard, FN_TICKET_ITEMS ".tmp");
+ if(!dashf(fn_ticket))
+ Rename(tmp, genbuf);
+
+ snprintf(genbuf, sizeof(genbuf), TN_ANNOUNCE " %s 板 開始賭博!", currboard);
+ post_msg(currboard, genbuf, msg, cuser.userid);
+ post_msg("Record", genbuf + 7, msg, "[馬路探子]");
+ /* Tim 控制CS, 以免正在玩的user把資料已經寫進來 */
+ rename(fn_ticket_end, fn_ticket);
+ /* 設定完才把檔名改過來 */
+
+ vmsg("賭盤設定完成");
+ return FULLUPDATE;
+}
+#endif
+
+int
ticket_main(void)
{
ticket(0);