?? npc_gamblemaster.c
字號:
return;
}
void NPC_Gamble_MasterLoop( int meindex)
{
int objmeindex = -1;
int full_time;
//int Master_Stone = 0;
int timeNum = 0;
//int time_run=0;
//int act;
objmeindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX);
switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
case 0: // 等待
full_time = ROULETTE_STANDBY1;
timeNum = CHAR_getWorkInt( meindex, NPC_WORK_MASTERFLG );
if( ( CHAR_getWorkInt( meindex, NPC_WORK_SYSTIME) + full_time) < NowTime.tv_sec ) {
if( timeNum == 30 ) { //倒數20秒
//0 null 1 準備 2 跑 3 停
CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 1);
showString( meindex, "下注時間剩下20秒。", 0);
}else if( timeNum == 10 ) {
showString( meindex, "standby_msg", 0); //廣播
SetCasinoMap( meindex, 0, 0); //設定地圖不可下注
}else if( timeNum <= 6 ) { //開始
//0 null 1 準備 2 跑 3 停
CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 2);
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 1);
showString( meindex, "start_msg", 0); //廣播
}
CHAR_setWorkInt( meindex, NPC_WORK_MASTERFLG, timeNum - 2 );
}
break;
case 1: // GAME START
if( CHAR_getWorkInt( meindex, NPC_WORK_GAMEFLG) == 3 ) {
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 2);
}
break;
case 2: // GAME END
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 3);
defPlayerGold( meindex , TRUE); //計算輸贏
CHAR_setWorkInt( meindex, NPC_WORK_ENDPOINT, 0);
NPC_MAPCLEANGOLD( meindex , CHAR_getInt( meindex, CHAR_FLOOR ));
LogGamble(
CHAR_getChar( meindex, CHAR_NAME ), "master",
"ROULETTE", CHAR_getInt( meindex, CHAR_FLOOR),
CHAR_getInt( meindex, CHAR_X ),
CHAR_getInt( meindex, CHAR_Y ) ,
CHAR_getWorkInt( meindex, NPC_WORK_MASTERSTONE), 0, 0, 0, 2
);
break;
case 3:
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 0);
showString( meindex, "end_msg", 0); //廣播
SetCasinoMap( meindex, 0, 1); //設定地圖可下注
CHAR_setWorkInt( meindex, NPC_WORK_MASTERFLG, 30 );
CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec);
break;
default:
NPC_GAMBLEMASTER_RESET( meindex);
break;
}
}
void defPlayerGold( int meindex , int flg)
{
int X,Y;
int endpoint;
int End_type = 0;
int toindex=0, i, master_floor;
int player_type;
int gamble_num;
//float def;
char token[256], buff[256];
char buf1[56],buf2[56];
BOOL GAMBLE_YES = FALSE;
endpoint = CHAR_getWorkInt( meindex, NPC_WORK_ENDPOINT);
X = (endpoint >> 16 );
Y = (endpoint & 0xffff);
for( End_type = 0; End_type < arraysizeof(EndTypedef) ; End_type++ ) {
if( (X == EndTypedef[ End_type].m_fx) && (Y == EndTypedef[ End_type].m_fy )) {
break;
}
}
if( End_type == arraysizeof(EndTypedef) ) {
print("\n\n **********GAMBLE MASTER ERROR !! **************");
print("\n NOT FOUND : X=%d Y=%d EndTypedef[I] !!", X, Y);
return;
}
/*Log=====================================
{ //記錄用
FILE *fp;
int kp=0,pn=0;;
fp = fopen("./data/npc/roulette/lookgamble.txt","w+");
if( fp != NULL ) {
if( EndTypedef[ End_type].m_nums < 10000 )
EndTypedef[ End_type].m_nums = EndTypedef[ End_type].m_nums+1;
for( kp=0; kp<arraysizeof( EndTypedef)-1; kp++ ) {
if( EndTypedef[ kp].m_nums > 0 && EndTypedef[ kp].m_type > 0 ) {
fprintf( fp," %s 中獎次數 [%d] ", EndTypedef[ kp].str_type, EndTypedef[ kp].m_nums );
if( (pn+1)%2 == 0 ) {
fprintf( fp," \n");
}
pn ++;
}
}
fclose( fp);
}
}
//========================================*/
if( EndTypedef[ End_type].m_type <= 0 ) {
showString( meindex, "號碼X,通殺!", 0);
}else {
sprintf( token ,"中獎號碼 : %s ", EndTypedef[End_type].str_type );
showString( meindex, token, 0 );
}
if( EndTypedef[ End_type].m_EO == roulette43 ) {
sprintf( buf1,"單");
}else {
sprintf( buf1,"雙");
}
if( EndTypedef[ End_type].m_RG == roulette41 ) {
sprintf( buf2,"紅");
}else {
sprintf( buf2,"綠");
}
//找在場的人
toindex = -1;
master_floor = CHAR_getInt( meindex , CHAR_FLOOR);
while( toindex < 10000 ) {
toindex++;
if( !CHAR_CHECKINDEX( toindex) )
continue;
if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )
continue;
if( master_floor != CHAR_getInt( toindex, CHAR_FLOOR ) ) //是否在賭場
continue;
if( CHAR_getWorkInt( toindex, CHAR_WORKSTAKEFLAG) == FALSE ) //是否有下注
continue;
//是否賭中
GAMBLE_YES = FALSE;
CHAR_setWorkInt( toindex, CHAR_WORKSTAKEFLAG, FALSE);
for( i=0; i<5; i++) {
player_type = CHAR_getWorkInt( toindex, i+CHAR_WORKSTAKETYPE1);
gamble_num = 0;
if( player_type > 0 ) {
if( player_type == EndTypedef[End_type].m_type ) { //中了號碼
if( EndTypedef[End_type].m_type == roulette45 ) {
gamble_num += 40;
}else {
gamble_num += 20;
}
GAMBLE_YES = TRUE;
//算錢
Codef_Gold( meindex, toindex, gamble_num, 0, EndTypedef[End_type].str_type );
}else if( player_type == EndTypedef[End_type].m_RG ) { //中了紅綠
gamble_num += 1;
GAMBLE_YES = TRUE;
Codef_Gold( meindex, toindex, gamble_num, 0, buf2 );
}else if( player_type == EndTypedef[End_type].m_EO ) { //中了單雙
gamble_num += 1;
GAMBLE_YES = TRUE;
Codef_Gold( meindex, toindex, gamble_num, 0, buf1 );
}else if( player_type == EndTypedef[End_type].m_SI ) { //橫列
gamble_num += 2;
GAMBLE_YES = TRUE;
sprintf( token,"%s%d", "橫列", EndTypedef[End_type].m_SI-100 );
Codef_Gold( meindex, toindex, gamble_num, 0, token );
}else if( player_type == EndTypedef[End_type].m_IN ) { //1-10 11-20
gamble_num += 1;
GAMBLE_YES = TRUE;
if( (EndTypedef[End_type].m_IN - 100 ) == 11 ) {
snprintf( buff, sizeof( buff),"1-10");
}else if( (EndTypedef[End_type].m_IN - 100 ) == 12 ) {
snprintf( buff, sizeof( buff),"11-20");
}
sprintf( token,"%s%s", " 圍", buff );
Codef_Gold( meindex, toindex, gamble_num, 0, token );
}else { //沒中 扣積分
if( (player_type>>16) == EndTypedef[End_type].m_type ||
(player_type&0xffff) == EndTypedef[End_type].m_type
) { //中雙號
gamble_num += 10;
GAMBLE_YES = TRUE;
sprintf( token,"%s%s", "雙號-", EndTypedef[End_type].str_type );
Codef_Gold( meindex, toindex, gamble_num, 0, token );
}else if( player_type > 0 ) { //72 73 74 75 沒中 扣積分
strcpy( token, "\0");
if( player_type >= roulette41 && player_type <= roulette44 ) { //紅綠單雙
sprintf( token,"%s", "押注 紅綠單雙 沒中");
}else if( player_type == roulette45 ) { //數字00
sprintf( token,"%s", "押注 數字00 沒中");
}else if( player_type >= roulette51 && player_type <= roulette53 ) { //橫列
sprintf( token,"%s", "押注 橫列 沒中");
}else if( player_type >= roulette61 && player_type <= roulette62 ) { // 圍
sprintf( token,"%s", "押注 圍 沒中");
}else if( player_type > (1<<16) ) { //雙號
sprintf( token,"%s", "押注 雙號 沒中");
}else { //數字
sprintf( token,"%s", "押注 數字 沒中");
}
gamble_num -= 1;
Codef_Gold( meindex, toindex, gamble_num, 1, token );
}
}
}
//清空
CHAR_setWorkInt( toindex, i+CHAR_WORKSTAKETYPE1, 0);
}
if( CHAR_getInt( toindex, CHAR_GAMBLENUM) < 0 ) {
CHAR_setInt( toindex, CHAR_GAMBLENUM, 0 );
}else if( CHAR_getInt( toindex, CHAR_GAMBLENUM) > 10000 ) {
CHAR_setInt( toindex, CHAR_GAMBLENUM, 10000 );
}
sprintf( token, "你的游樂場積分累計為%d分。", CHAR_getInt( toindex, CHAR_GAMBLENUM));
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
if( GAMBLE_YES == FALSE ) {
sprintf( token, "你所有押注都沒中獎!");
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
continue;
}
}
return;
}
void Codef_Gold( int meindex, int toindex, int stone,int flg, char *token)
{
char buf1[256];
int dnum=-1;
int Master_gnum=0;
Master_gnum = CHAR_getWorkInt( meindex, NPC_WORK_MASTERSTONE);
Master_gnum += stone;
if( !flg ) {
sprintf( buf1,"恭喜你中了:%s,可拿得 %d 點積分", token, stone);
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
#ifdef _FIX_GAMBLENUM
stone += 1; //加上一開始下注扣的積分
#endif
CHAR_setInt( toindex, CHAR_GAMBLENUM, CHAR_getInt( toindex, CHAR_GAMBLENUM) + stone);
}else {
dnum = stone;
if( stone < 0 ) {
dnum = (dnum*(-1));
}
sprintf( buf1,"%s,扣 %d 點積分", token, dnum);
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
#ifdef _FIX_GAMBLENUM
#else
CHAR_setInt( toindex, CHAR_GAMBLENUM, CHAR_getInt( toindex, CHAR_GAMBLENUM) + stone);
#endif
}
LogGamble(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
"ROULETTE",
CHAR_getInt( toindex, CHAR_FLOOR),
CHAR_getInt( toindex, CHAR_X ),
CHAR_getInt( toindex, CHAR_Y ),
CHAR_getInt( toindex, CHAR_GOLD),
stone,
0,
CHAR_getInt( toindex, CHAR_GAMBLENUM ),
1
);
//紀錄盈虧
if( Master_gnum > 5000000 ) Master_gnum = 5000000;
if( Master_gnum < 0 ) Master_gnum = 0;
CHAR_setWorkInt( meindex, NPC_WORK_MASTERSTONE, Master_gnum);
return;
}
//重置 錯誤處理
void NPC_GAMBLEMASTER_RESET( int meindex)
{
//錯誤處理
print("\n 錯誤處理");
CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 0);//0 null 1 準備 2 跑
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
showString( meindex, "本回合不算!等5分鐘後重新開始?。?quot;, 1);
NPC_MAPCLEANGOLD( meindex , CHAR_getInt( meindex, CHAR_FLOOR ));
//defPlayerGold( meindex , FALSE);
CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec + ROULETTE_ERRTIME);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -