作者BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀) 看板: plan
標題Re: [閒聊] 避免 so/vote.c 在賭盤發錢時數值溢位
時間吟風‧眺月‧擎天崗 (2005/06/26 Sun 15:52:31) Updated: 2005/06/26
※ 引述《BioStar (澎湖小雲雀)》之銘言:
> 剛才想到......
> 賭注能不能是金幣呢?
> 超極富豪大火拼......
> 應該更刺激......
: include/struct.h struct VCH 中從 nouse 拿一個來用......
- char nouse[96];
+ char gold; /* 記錄賭注單位是金幣:1 或銀幣:0 */
+ char nouse[95];
: so/vote.c:vch_edit()
else if (echo == DOECHO) /* 只有新增時才能改變賭盤的票價 */
{
/* 賭盤就只能選一項 */
vch->maxblt = 1;
+ if (vans("賭注單位要用金幣嗎(Y/N)?[N] ") == 'y')
+ {
+ vget(b_lines - 5, 0, "請問每票售價多少金幣?(100~1000):",
+ ans, 7, DOECHO);
+ vch->gold = 1;
+ }
+ else
+ {
vget(b_lines - 5, 0, "請問每票售價多少銀幣?(100~100000):",
ans, 7, DOECHO);
+ vch->gold = 0;
+ }
: so/vote.c:delvch()
while (read(fd, &vlog, sizeof(VLOG)) == sizeof(VLOG))
{
+ if (vch->gold)
+ paycheck.gold = vlog.numvotes * vch->price;
+ else
paycheck.money = vlog.numvotes * vch->price;
usr_fpath(buf, vlog.userid, FN_PAYCHECK);
rec_add(buf, &paycheck, sizeof(PAYCHECK));
}
: so/vote.c:viote_join()
if (vch->vgamble == '$')
{
- if (cuser.money < vch->price)
+ if ((vch->gold && cuser.gold < vch->price) ||
+ (!vch->gold && cuser.money < vch->price))
{
vmsg("您的錢不夠參加賭盤");
return XO_FOOT;
}
(中略)
+ if (vch->gold)
+ sprintf(buf, "每張賭票 %d 金幣,請問要買幾張?[1] ", vch->price)
+ else
sprintf(buf, "每張賭票 %d 銀幣,請問要買幾張?[1] ", vch->price);
(中略)
- if (cuser.money >= fd)
+ if ((vch->gold && cuser.gold >= fd) ||
+ (!vch->gold && cuser.money >= fd))
break;
(中略)
if (vch->vgamble == '$')
{
+ if (vch->gold)
+ cuser.gold -= fd; /* fd 是要付的賭金 */
+ else
cuser.money -= fd; /* fd 是要付的賭金 */
}
: so/vote.c:vlog_pay()
+ if (vch->gold)
+ fprintf(fp, "板主 %s 抽頭,可獲得 %d 金幣\n", vch->owner, money);
+ else
fprintf(fp, "板主 %s 抽頭,可獲得 %d 銀幣\n", vch->owner, money);
memset(&paycheck, 0, sizeof(PAYCHECK));
time(&paycheck.tissue);
+ if (vch->gold)
+ paycheck.gold = money;
+ else
paycheck.money = money;
(中略)
+ if (vch->gold)
+ {
+ fprintf(fp, "%s 買了 %d 張,共可獲得 %d 金幣\n",
+ vlog.userid, vlog.numvotes, money);
+ paycheck.gold = money;
+ }
+ else
+ {
fprintf(fp, "%s 買了 %d 張,共可獲得 %d 銀幣\n",
vlog.userid, vlog.numvotes, money);
paycheck.money = money;
+ }
sprintf(paycheck.reason, "[賭盤] %s", currboard);
--
→↓ Origin: 彰化師大生物系˙吟風‧眺月‧擎天崗 micro.bio.ncue.edu.tw
↑← Author: BioStar 從 61-64-116-235-adsl-zha.STATIC.so-net.net.tw 發表