作者itoc, 信區: itoc
標題[遊戲] bet.c 賭盤 (開獎程式)
時間05/06/08
作者: chwaian (無言) 看板: itoc
標題: Re: 想請問有做賭盤的站長
時間: 2004/08/23 Mon 20:20:27 Updated: 2005/06/08
: crontab -e
: 請將下面加入 crontab 的排程
# 每天 6:30 瘋狂賭盤開盤
30 6 * * * bin/bet_open > /dev/null 2>&1
: src/util/Makefile
EXE = ... bet_open
: src/util/ 底下增加bet_open.c這隻程式
/*-------------------------------------------------------*/
/* util/bet_open.c ( NTHU CS MapleBBS Ver 3.00 ) */
/*-------------------------------------------------------*/
/* target : 賭盤開盤程式 */
/* create : / / */
/* update : / / */
/*-------------------------------------------------------*/
#include "bbs.h"
#define TAX 1 /* 系統抽稅百分之幾 */
#define CMMTN 5 /* 開盤者抽稅百分之幾 */
#define maxboard 40
static void
add_money(userid, money)
char *userid;
int money;
{
char fpath[64];
PAYCHECK paycheck;
memset(&paycheck, 0, sizeof(PAYCHECK));
time(&paycheck.tissue);
paycheck.gold = money;
strcpy(paycheck.reason, "[瘋狂賭盤] 中獎");
usr_fpath(fpath, userid, FN_PAYCHECK);
rec_add(fpath, &paycheck, sizeof(PAYCHECK));
}
static void
mail_to_him(userid, money, owner) /* itoc.011115: 寄檔案給 userid */
char *userid; /* 收件人 */
int money;
int owner; /* 1:開局者 0:一般玩家 */
{
char folder[64], fpath[64];
FILE *fp;
HDR hdr;
sprintf(fpath, "tmp/bet.%d", userid);
if (fp = fopen(fpath, "w"))
{
/* 文章檔頭 */
fprintf(fp, "%s %s (%s)\n", STR_AUTHOR1, STR_SYSOP, SYSOPNICK);
fprintf(fp, "標題: 賭盤發錢\n時間: %s\n\n", Now());
/* 文章內容 */
if (owner)
fprintf(fp, "舉辦賭盤,抽頭%d 元\n", money);
else
fprintf(fp, "恭喜您參加賭盤,贏得 %d 元\n", money);
fclose(fp);
usr_fpath(folder, userid, FN_DIR);
hdr_stamp(folder, HDR_LINK, &hdr, fpath);
strcpy(hdr.owner, STR_SYSOP);
strcpy(hdr.title, "賭盤發錢");
rec_add(folder, &hdr, sizeof(HDR));
unlink(fpath);
}
}
/* ----------------------------------------------------- */
/* keep log in board */
/* ----------------------------------------------------- */
static BCACHE *bshm;
static void
init_bshm()
{
bshm = shm_new(BRDSHM_KEY, sizeof(BCACHE));
if (bshm->uptime <= 0)
exit(0);
}
static void
update_btime(brdname)
char *brdname;
{
BRD *brdp, *bend;
brdp = bshm->bcache;
bend = brdp + bshm->number;
do
{
if (!strcmp(brdname, brdp->brdname))
{
brdp->btime = -1;
break;
}
} while (++brdp < bend);
}
static void
keeplog(fnlog, board, title, mode)
char *fnlog;
char *board;
char *title;
int mode; /* 0:load 1:rename 2:unlink */
{
HDR hdr;
char folder[64], fpath[64];
int fd;
FILE *fp;
if (!dashf(fnlog)) /* Kudo.010804: 檔案是空的就不 keeplog */
return;
if (!board)
board = BN_RECORD;
brd_fpath(folder, board, FN_DIR);
fd = hdr_stamp(folder, 'A', &hdr, fpath);
if (fd < 0)
return;
if (mode == 1)
{
close(fd);
/* rename(fnlog, fpath); */
f_mv(fnlog, fpath); /* Thor.990409: 可跨partition */
}
else
{
fp = fdopen(fd, "w");
fprintf(fp, "作者: %s (%s)\n標題: %s\n時間: %s\n\n",
STR_SYSOP, SYSOPNICK, title, Btime(&hdr.chrono));
f_suck(fp, fnlog);
fclose(fp);
close(fd);
if (mode)
unlink(fnlog);
}
strcpy(hdr.title, title);
strcpy(hdr.owner, STR_SYSOP);
rec_add(folder, &hdr, sizeof(HDR));
update_btime(board);
}
static void
init_bet(no) /* 更新第no盤的資料 */
int no;
{
FILE *inf, *fs;
time_t close_time;
int i, betmoney;
char dd[100], dscrpt[100];
if (fs = fopen("etc/game/bet/bet.list", "r"))
{
inf = fopen("etc/game/bet/bet.list.w", "w");
for (i = 0; i < maxboard; i++)
{
fscanf(fs, "%d %ld %s\n", &betmoney, &close_time, dd);
fgets(dscrpt, 60, fs);
if (i + 1 == no)
fprintf(inf, "0 111 dsyan\ndsyan\n");
else
fprintf(inf, "%d %ld %s\n%s", betmoney, close_time, dd, dscrpt);
}
fclose(fs);
fclose(inf);
f_mv("etc/game/bet/bet.list.w", "etc/game/bet/bet.list");
}
}
int
main()
{
time_t close_time;
int i, ans, now, all, ch[9], tmp, b, betmoney, money;
float haha;
char buf[250], dd[100], tmpb[201], id[13], dscrpt[100], fpath[64];
FILE *inf, *fs, *logfile;
chdir(BBSHOME);
inf = fopen("etc/game/bet/bet.lock", "w");
fprintf(inf, "\n本檔案存在為系統發錢時間, 無法壓注.\n");
fclose(inf);
init_bshm();
for (now = 1; now < (maxboard + 1); now++)
{
sprintf(buf, "etc/game/bet/bet.ans%d", now);
if (inf = fopen(buf, "r"))
{
fscanf(inf, "%d", &ans);
fclose(inf);
logfile = fopen("etc/game/bet/bet.log", "w");
fprintf(logfile, "\033[44;1m【第 %d 個開局宗旨】\033[m\n", now);
sprintf(buf, "etc/game/bet/bet.scr%d", now);
if (fs = fopen(buf, "r"))
{
while (fgets(tmpb, 200, fs))
fprintf(logfile, tmpb);
fclose(fs);
}
if (fs = fopen("etc/game/bet/bet.list", "r"))
{
for (i = 0; i < maxboard; i++)
{
fscanf(fs, "%d %ld %s\n", &betmoney, &close_time, dd);
fgets(dscrpt, 60, fs);
if (i + 1 == now)
break;
}
fclose(fs);
}
i = strlen(dscrpt) - 1;
dscrpt[i] = 0;
fprintf(logfile, "\n\033[44;1m編號 開局者 單價 "
"項目敘述 \033[m\n");
fprintf(logfile, "\033[32;1m %2d %12s %5d %-30s\033[m\n\n",
now, dd, betmoney, dscrpt);
sprintf(buf, "etc/game/bet/bet.cho%d", now);
if (fs = fopen(buf, "r"))
{
fscanf(fs, "%d\n%d\n", &tmp, &all);
for (i = 0; i < tmp; i++)
{
fgets(buf, 200, fs);
fscanf(fs, "%d\n", &ch[i]);
if (i + 1 == ans)
fprintf(logfile, "\033[1;33m%d)%6d %3.3f %s\033[m",
i + 1, ch[i], (float)all / ch[i], buf);
else
fprintf(logfile, "%d)%6d %3.3f %s",
i + 1, ch[i], (float)all / ch[i], buf);
}
fclose(fs);
}
haha = (float)all / ch[ans - 1];
fprintf(logfile, "\n\n[開獎結果]:%d\n\n恭喜下列使用者!\n", ans);
sprintf(buf, "etc/game/bet/bet.cho%d.%d", now, ans);
if (fs = fopen(buf, "r"))
{
while (fscanf(fs, "%s %d\n", id, &b) != EOF)
{
money = b * betmoney * haha * (100 - TAX - CMMTN) / 100;
fprintf(logfile, "\033[%d;1m %12s 贏得 %10d\033[m\n",
2 + 31, id, money);
add_money(id, money);
mail_to_him(id, money, 0);
}
fclose(fs);
sprintf(fpath, "etc/game/bet/bet.cho%d.*", now);
unlink(fpath);
}
money = all * betmoney * (CMMTN) / 100;
add_money(dd, money);
mail_to_him(dd, money, 1);
fprintf(logfile, "\n\n[開局者] \033[33;1m%s\033[m 抽成 (%d%%) "
"==> \033[32;1m%d\033[m\n", dd, CMMTN, money);
fprintf(logfile, "[系統抽成] (%d%%) ==> \033[32;1m%d\033[m\n\n\n\n",
TAX, money / 5);
sprintf(fpath, "etc/game/bet/bet.cho%d", now);
unlink(fpath);
sprintf(fpath, "etc/game/bet/bet.ans%d", now);
unlink(fpath);
sprintf(fpath, "etc/game/bet/bet.scr%d", now);
unlink(fpath);
fclose(logfile);
init_bet(now);
sprintf(buf, "盤號[%d] %s", now, dscrpt);
keeplog("etc/game/bet/bet.log", BN_BET, buf, 2);
}
}
unlink("etc/game/bet/bet.lock");
return 0;
}
--
╭┼ Origin: Maple-itoc˙動力核心 processor.tfcis.org
┼┘ Author: chwaian 從 218-171-119-168.dynamic.hinet.net 發表精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻