summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/mbbsd/gamble.c90
-rw-r--r--pttbbs/util/openticket.c31
2 files changed, 67 insertions, 54 deletions
diff --git a/pttbbs/mbbsd/gamble.c b/pttbbs/mbbsd/gamble.c
index 92148a8c..b30f630d 100644
--- a/pttbbs/mbbsd/gamble.c
+++ b/pttbbs/mbbsd/gamble.c
@@ -4,6 +4,7 @@
#define MAX_ITEM 8 //最大 賭項(item) 個數
#define MAX_ITEM_LEN 30 //最大 每一賭項名字長度
#define MAX_SUBJECT_LEN 650 //8*81 = 648 最大 主題長度
+#define NARROW_ITEM_WIDTH 8 // old (narrow) item width
static int
load_ticket_record(const char *direct, int ticket[])
@@ -53,14 +54,14 @@ show_ticket_data(char betname[MAX_ITEM][MAX_ITEM_LEN],const char *direct, int *p
for (count = 0; fgets(betname[count], MAX_ITEM_LEN, fp) &&
count < MAX_ITEM; count++) {
chomp(betname[count]);
- if (strlen(betname[count]) > 8)
+ if (strlen(betname[count]) > NARROW_ITEM_WIDTH)
wide = 1;
}
fclose(fp);
prints(ANSI_COLOR(32) "站規:" ANSI_RESET
" 1.可購買以下不同類型的彩票。每張要花 " ANSI_COLOR(32) "%d"
- ANSI_RESET " 元。\n"
+ ANSI_RESET " " MONEYNAME "。\n"
" 2.%s\n"
" 3.開獎時只有一種彩票中獎, 有購買該彩票者, 則可依購買的張數均分總賭金。\n"
" 4.每筆獎金由系統抽取 5%% 之稅金%s。\n"
@@ -69,7 +70,7 @@ show_ticket_data(char betname[MAX_ITEM][MAX_ITEM_LEN],const char *direct, int *p
ANSI_COLOR(32) "%s:" ANSI_RESET, *price,
bh ? "此賭盤由板主負責舉辦並決定開獎時間結果, 站方不管, 願賭服輸。" :
"系統每天 2:00 11:00 16:00 21:00 開獎。",
- bh ? ", 其中 0.05%% 分給開獎板主, 最多 500 元" : "",
+ bh ? ", 其中 0.05%% 分給開獎板主, 最多 500" : "",
bh ? "板主自訂規則及說明" : "前幾次開獎結果");
snprintf(genbuf, sizeof(genbuf), "%s/" FN_TICKET, direct);
@@ -83,18 +84,22 @@ show_ticket_data(char betname[MAX_ITEM][MAX_ITEM_LEN],const char *direct, int *p
total = load_ticket_record(direct, ticket);
- outs(ANSI_COLOR(33));
for (i = 0; i < count; i++) {
+ prints(ANSI_COLOR(0;1) "%d."
+ ANSI_COLOR(0;33)"%-*s: "
+ ANSI_COLOR(36)"%-7d%s",
+ i + 1, (wide ? IDLEN : 8), betname[i],
+ ticket[i], wide ? " " : "");
if (wide) {
- prints("%d.%-*s: %-7d ", i + 1, IDLEN, betname[i], ticket[i]);
- if (i % 3 == 2) outc('\n');
+ if (i % 3 == 2)
+ outc('\n');
} else {
- prints("%d.%-8s: %-7d", i + 1, betname[i], ticket[i]);
- if (i == 3) outc('\n');
+ if (i % 4 == 3)
+ outc('\n');
}
}
- prints(ANSI_RESET "\n" ANSI_COLOR(42) " 下注總金額:"
- ANSI_COLOR(31) " %d 元 " ANSI_RESET, total * (*price));
+ prints(ANSI_RESET "\n已下注總額: "
+ ANSI_COLOR(1;36) "%d" ANSI_RESET, total * (*price));
if (end) {
outs(",賭盤已經停止下注\n");
return -count;
@@ -203,7 +208,8 @@ ticket(int bid)
}
move(20, 0);
reload_money();
- prints(ANSI_COLOR(44) "錢: %-10d " ANSI_RESET "\n" ANSI_COLOR(1) "請選擇要購買的種類(1~%d)"
+ prints("仍有 " MONEYNAME ": " ANSI_COLOR(1;31) "%d" ANSI_RESET "\n"
+ ANSI_COLOR(1) "請選擇要購買的種類(1~%d)"
"[Q:離開]" ANSI_RESET ":", cuser.money, count);
ch = vkey();
/*--
@@ -268,28 +274,21 @@ openticket(int bid)
lockreturn0(TICKET, LOCK_MULTI);
do {
do {
- getdata(20, 0,
- ANSI_COLOR(1) "選擇中獎的號碼(0:不開獎 99:取消退費)"
- ANSI_RESET ":"
- , buf, 3, LCECHO);
+ getdata(20, 0, "選擇中獎的號碼(0:不開獎 99:取消退費):",
+ buf, 3, LCECHO);
bet = atoi(buf);
- move(0, 0);
- clrtoeol();
} while ((bet < 0 || bet > count) && bet != 99);
if (bet == 0) {
unlockutmpmode();
return 0;
}
if (bet == 99) {
- move(22, 0);
- SOLVE_ANSI_CACHE();
- clrtoeol();
+ move(22, 0); SOLVE_ANSI_CACHE(); clrtoeol();
prints(ANSI_COLOR(1;31) "請注意: 取消要扣手續費 $%d" ANSI_RESET,
price * 10);
}
- getdata(21, 0,
- ANSI_COLOR(1) "再次確認輸入號碼" ANSI_RESET ":"
- , buf, 3, LCECHO);
+ getdata(21, 0, "再次輸入號碼以確認:", buf, 3, LCECHO);
+ move(21, 0); SOLVE_ANSI_CACHE(); clrtoeol();
} while (bet != atoi(buf));
// before we fork to process,
@@ -355,35 +354,50 @@ openticket(int bid)
}
setbfile(outcome, bh->brdname, FN_TICKET_OUTCOME);
if ((fp = fopen(outcome, "w"))) {
+ int wide = 0;
fprintf(fp, "賭盤說明\n");
while (fgets(buf, sizeof(buf), fp1)) {
buf[sizeof(buf)-1] = 0;
fputs(buf, fp);
}
- fprintf(fp, "下注情況\n");
- fprintf(fp, ANSI_COLOR(33));
+ fprintf(fp, "\n下注情況\n");
+ for (i = 0; i < count && !wide; i++) {
+ if (strlen(betname[i]) > NARROW_ITEM_WIDTH)
+ wide = 1;
+ }
for (i = 0; i < count; i++) {
- fprintf(fp, "%d.%-8s: %-7d", i + 1, betname[i], ticket[i]);
- if (i == 3)
- fprintf(fp, "\n");
+ fprintf(fp,
+ ANSI_COLOR(0;1) "%d."
+ ANSI_COLOR(0;33)"%-*s: "
+ ANSI_COLOR(36)"%-7d%s",
+ i + 1, (wide ? IDLEN : 8), betname[i],
+ ticket[i], wide ? " " : "");
+ if (wide) {
+ if (i % 3 == 2)
+ fputc('\n', fp);
+ } else {
+ if (i % 4 == 3)
+ fputc('\n', fp);
+ }
}
- fprintf(fp, ANSI_RESET "\n");
+ fprintf(fp, ANSI_RESET "\n");
+
if (bet != 98) {
- fprintf(fp, "\n\n開獎時間: %s \n\n"
- "開獎結果: %s \n\n"
- "所有金額: %d 元 \n"
- "中獎比例: %d張/%d張 (%f)\n"
+ fprintf(fp, "開獎時間: %s\n"
+ "開獎結果: %s\n"
+ "下注總額: %d\n"
+ "中獎比例: %d張/%d張 (%f)\n"
"每張中獎彩票可得 %d " MONEYNAME "\n\n",
Cdatelite(&now), betname[bet], total * price, ticket[bet], total,
(float)ticket[bet] / total, money);
- fprintf(fp, "%s 賭盤開出:%s 所有金額:%d 元 獎金/張:%d 元 機率:%1.2f\n\n",
+ fprintf(fp, "%s 開出:%s 總額:%d 彩金/張:%d 機率:%1.2f\n\n",
Cdatelite(&now), betname[bet], total * price, money,
total ? (float)ticket[bet] / total : 0);
} else
- fprintf(fp, "\n\n賭盤取消退費: %s \n\n", Cdatelite(&now));
+ fprintf(fp, "賭盤取消退回: %s\n\n", Cdatelite(&now));
} // XXX somebody may use fp even fp==NULL
fclose(fp1);
@@ -398,14 +412,14 @@ openticket(int bid)
while (fscanf(fp1, "%s %d %d\n", userid, &mybet, &i) != EOF) {
if (bet == 98 && mybet >= 0 && mybet < count) {
if (fp)
- fprintf(fp, "%-*s 買了 %3d 張 %s, 退回 %5d 枚"
- MONEYNAME "\n",
+ fprintf(fp, "%-*s 買了 %3d 張 %s, 退回 %5d "
+ MONEYNAME "\n",
IDLEN, userid, i, betname[mybet], money * i);
snprintf(buf, sizeof(buf),
"%s 賭場退費! $ %d", bh->brdname, money * i);
} else if (mybet == bet) {
if (fp)
- fprintf(fp, "恭喜 %-*s 買了 %3d 張 %s, 獲得 %5d 枚"
+ fprintf(fp, "恭喜 %-*s 買了 %3d 張 %s, 獲得 %5d "
MONEYNAME "\n",
IDLEN, userid, i, betname[mybet], money * i);
snprintf(buf, sizeof(buf), "%s 中獎咧! $ %d", bh->brdname, money * i);
diff --git a/pttbbs/util/openticket.c b/pttbbs/util/openticket.c
index e34248da..699b3827 100644
--- a/pttbbs/util/openticket.c
+++ b/pttbbs/util/openticket.c
@@ -110,19 +110,19 @@ void create_new_items(char items[MAX_ITEM][MAX_ITEM_LEN],
}
#ifdef USE_SERIOUS_ID_CHECK_FOR_TICKETS
{
+ const int need_exactly_perm = PERM_LOGINOK | PERM_POST;
userec_t u = {0};
passwd_query(unum, &u);
- if (!(u.uflag & PERM_LOGINOK) ||
- !(u.uflag & PERM_POST) ||
- u.numlogindays < 365) {
+ if ((u.userlevel & need_exactly_perm) != need_exactly_perm ||
+ u.numposts < 100 || u.numlogindays < 365) {
i--;
unum++;
continue;
}
log_filef(FN_LOGFILE, LOG_CREAT,
- "%d: [usernum:%d] %s -> shm=%s (%d days)\n",
- i + 1, unum, SHM->userid[unum - 1], u.userid,
- u.numlogindays);
+ "%d: [usernum:%d] %s -> shm=%s (level=0x%08X, %d days)\n",
+ i + 1, unum, SHM->userid[unum - 1],
+ u.userid, u.userlevel, u.numlogindays);
}
#endif
@@ -205,15 +205,15 @@ int main()
fputs(des[n], fp);
}
- printf("\n\n開獎時間: %s\n\n"
- "開獎結果: %s\n\n"
- "下注總金額: %d00 " MONEYNAME "\n"
- "中獎比例: %d張/%d張 (%f)\n"
- "每張中獎彩票可得 %d 枚" MONEYNAME "\n\n",
+ printf("\n\n開獎時間: %s\n\n"
+ "開獎結果: %s\n\n"
+ "下注總額: %d00\n"
+ "中獎比例: %d張/%d張 (%f)\n"
+ "每張中獎彩票可得 %d " MONEYNAME "\n\n",
Cdatelite(&now), betname[bet], total, ticket[bet], total,
(float) ticket[bet] / total, money);
- fprintf(fp, "%s 開出:%s 總金額:%d00 獎金/張:%d 機率:%1.2f\n",
+ fprintf(fp, "%s 開出:%s 總額:%d00 彩金/張:%d 機率:%1.2f\n",
Cdatelite(&now), betname[bet], total, money,
(float) ticket[bet] / total);
fclose(fp);
@@ -231,7 +231,7 @@ int main()
if (mybet == bet)
{
int oldm, newm;
- printf("恭喜 %-*s 買了%9d 張 %s, 獲得 %d 枚" MONEYNAME "\n",
+ printf("恭喜 %-*s 買了%9d 張 %s, 獲得 %d " MONEYNAME "\n",
IDLEN, userid, num, betname[mybet], money * num);
if((uid=searchuser(userid, userid))==0 ||
!is_validuserid(userid))
@@ -252,12 +252,11 @@ int main()
sprintf(mymail.title, "[%s] 中獎囉! $ %d", Cdatelite(&now), money * num);
unlink(genbuf);
Link("etc/ticket", genbuf);
- sprintf(genbuf, "home/%c/%s/.DIR", userid[0], userid);
+ sethomedir(genbuf, userid);
append_record(genbuf, &mymail, sizeof(mymail));
sendalert_uid(uid, ALERT_NEW_MAIL);
} else {
- printf(" %-*s 買了%9d 張 %s\n", IDLEN, userid, num,
- betname[mybet]);
+ printf(" %-*s 買了%9d 張 %s\n", IDLEN, userid, num, betname[mybet]);
}
}
}