chuyiwen_gmsv/npc/npc_gamblemaster.c
2017-01-14 00:37:03 +09:00

601 lines
21 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "version.h"
#include <string.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "handletime.h"
#include "readmap.h"
#include "log.h"
#include "npc_eventaction.h"
#ifdef _GAMBLE_ROULETTE
#include "npc_gamblemaster.h"
void defPlayerGold( int meindex, int flg);
void NPC_GAMBLEMASTER_RESET( int meindex);
void Codef_Gold( int meindex, int toindex, int stone, int flg, char *token);
void NPC_GambleRoulette_selectWindow(int meindex,int toindex,int num,int select);
enum
{
ROULETTE_START=0,
ROULETTE_SELECT,
ROULETTE_LOOK,
ROULETTE_END,
};
enum
{
roulette1 = 11, roulette2, roulette3, roulette4, roulette5, roulette6, roulette7,
roulette8, roulette9, roulette10, roulette11, roulette12, roulette13, roulette14,
roulette15, roulette16, roulette17, roulette18, roulette19, roulette20,
roulette21 = 41, roulette22, roulette23, roulette24, roulette25, roulette26,
roulette27, roulette28, roulette29, roulette30, roulette31, roulette32,
roulette33, roulette34, roulette35, roulette36, roulette37, roulette38,
roulette39, roulette40,
roulette41 = 71, roulette42, roulette43, roulette44, roulette45,
roulette51 = 101, roulette52=102, roulette53=103,
roulette61 = 111, roulette62=112,
};
typedef struct tagGambleMaster
{
int m_fx;
int m_fy;
int m_type; //号码
int m_RG; //红绿1 2
int m_EO; //单双1 2
int m_SI;
int m_IN;
char str_type[56];
int m_nums;
}GambleEndType;
GambleEndType EndTypedef[60]={
{22, 8 , roulette1 , roulette41, roulette43, roulette51, roulette61, "号码红1", 0},
{7 , 8 , roulette1 , roulette41, roulette43, roulette51, roulette61, "号码红1", 0},
{22, 10, roulette3 , roulette41, roulette43, roulette51, roulette61, "号码红3", 0},
{7 , 6 , roulette3 , roulette41, roulette43, roulette51, roulette61, "号码红3", 0},
{20, 11, roulette5 , roulette41, roulette43, roulette51, roulette61, "号码红5", 0},
{9 , 5 , roulette5 , roulette41, roulette43, roulette51, roulette61, "号码红5", 0},
{19, 5 , roulette6 , roulette41, roulette44, roulette53, roulette61, "号码红6", 0},
{10, 11, roulette6 , roulette41, roulette44, roulette53, roulette61, "号码红6", 0},
{17, 5 , roulette8 , roulette41, roulette44, roulette53, roulette61, "号码红8", 0},
{12, 11, roulette8 , roulette41, roulette44, roulette53, roulette61, "号码红8", 0},
{16, 5 , roulette9 , roulette41, roulette43, roulette53, roulette61, "号码红9", 0},
{13, 11, roulette9 , roulette41, roulette43, roulette53, roulette61, "号码红9", 0},
{15, 5 , roulette10, roulette41, roulette44, roulette53, roulette61, "号码红10", 0},
{14, 11, roulette10, roulette41, roulette44, roulette53, roulette61, "号码红10", 0},
{12, 5 , roulette13, roulette41, roulette43, roulette52, roulette62, "号码红13", 0},
{17, 11, roulette13, roulette41, roulette43, roulette52, roulette62, "号码红13", 0},
{22, 6 , roulette17, roulette41, roulette43, roulette53, roulette62, "号码红17", 0},
{7 , 10, roulette17, roulette41, roulette43, roulette53, roulette62, "号码红17", 0},
{22, 5 , roulette18, roulette41, roulette44, roulette52, roulette62, "号码红18", 0},
{7 , 11, roulette18, roulette41, roulette44, roulette52, roulette62, "号码红18", 0},
{22, 9 , roulette22, roulette42, roulette44, roulette51, roulette61, "号码绿2", 0},
{7 , 7 , roulette22, roulette42, roulette44, roulette51, roulette61, "号码绿2", 0},
{21, 11, roulette24, roulette42, roulette44, roulette51, roulette61, "号码绿4", 0},
{8 , 5 , roulette24, roulette42, roulette44, roulette51, roulette61, "号码绿4", 0},
{18, 5 , roulette27, roulette42, roulette43, roulette53, roulette61, "号码绿7", 0},
{11, 11, roulette27, roulette42, roulette43, roulette53, roulette61, "号码绿7", 0},
{19, 11, roulette31, roulette42, roulette43, roulette51, roulette62, "号码绿11", 0},
{10, 5 , roulette31, roulette42, roulette43, roulette51, roulette62, "号码绿11", 0},
{18, 11, roulette32, roulette42, roulette44, roulette51, roulette62, "号码绿12", 0},
{11, 5 , roulette32, roulette42, roulette44, roulette51, roulette62, "号码绿12", 0},
{16, 11, roulette34, roulette42, roulette44, roulette52, roulette62, "号码绿14", 0},
{14, 5 , roulette34, roulette42, roulette44, roulette52, roulette62, "号码绿14", 0},
{15, 11, roulette35, roulette42, roulette43, roulette52, roulette62, "号码绿15", 0},
{13, 5 , roulette35, roulette42, roulette43, roulette52, roulette62, "号码绿15", 0},
{22, 7 , roulette36, roulette42, roulette44, roulette53, roulette62, "号码绿16", 0},
{7 , 9 , roulette36, roulette42, roulette44, roulette53, roulette62, "号码绿16", 0},
{21, 5 , roulette39, roulette42, roulette43, roulette52, roulette62, "号码绿19", 0},
{8 , 11, roulette39, roulette42, roulette43, roulette52, roulette62, "号码绿19", 0},
{20, 5 , roulette40, roulette42, roulette44, roulette52, roulette62, "号码绿20", 0},
{9 , 11, roulette40, roulette42, roulette44, roulette52, roulette62, "号码绿20", 0},
{22,11, roulette45, 0, 0, roulette52, 0, "号码00"},
{ 7, 5, -1, -1, -1, -1, -1, "号码X", 0},
{ -1, -1, -1, -1, -1, -1, -1, "", 0},
};
enum {
/*
NPC_WORK_ROUTETOX = CHAR_NPCWORKINT1,
NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2,
NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3,
*/
NPC_WORK_NPCAI = CHAR_NPCWORKINT3,
NPC_WORK_NPCACTION = CHAR_NPCWORKINT3,
NPC_WORK_MASTERSTONE = CHAR_NPCWORKINT4,
NPC_WORK_MODE = CHAR_NPCWORKINT5,
NPC_WORK_SYSTIME = CHAR_NPCWORKINT6,
NPC_WORK_GAMEFLG = CHAR_NPCWORKINT7,
NPC_WORK_GAMBLECODE = CHAR_NPCWORKINT8,
NPC_WORK_MASTERFLG = CHAR_NPCWORKINT9,
NPC_WORK_ENDPOINT = CHAR_NPCWORKINT10,
};
#define ROULETTE_ERRTIME 500
#define ROULETTE_STANDBY1 40
#define ROULETTE_LOOPTIME 3000
BOOL NPC_Gamble_MasterInit( int meindex )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256];
if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL ) {
print("\n not found argstr ");
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( argstr, "gamble_code",buf1, sizeof(buf1)) == NULL ) {
print("\n gamble_code error: not found !!");
return FALSE;
}
CHAR_setWorkInt( meindex, NPC_WORK_GAMBLECODE, atoi( buf1));
//游戏阶段
CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 0);
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_GAMBLEMASTER );
// NPC_WORK_MODE 主持人状态 0: 等待 1:GAME START 2:GAME END
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
CHAR_setWorkInt( meindex, NPC_WORK_MASTERFLG, 30);
CHAR_setWorkInt( meindex, NPC_WORK_MASTERSTONE, 0);
CHAR_setWorkInt( meindex, NPC_WORK_NPCAI, 0);
//设定LOOP TIMER
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, ROULETTE_LOOPTIME);
//用来记录时间点
CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec);
return TRUE;
}
void NPC_Gamble_MasterTalked( int meindex , int talkerindex , char *szMes , int color )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL ) {
print("\n not found argstr ");
return;
}
// 0 选单 11 - 19 规则 21 - 29 积分
CHAR_setWorkInt(talkerindex , CHAR_WORKSHOPRELEVANT,0);
NPC_GambleRoulette_selectWindow( meindex, talkerindex, ROULETTE_START, -1 );
}
void NPC_GambleRoulette_selectWindow(int meindex,int toindex,int num,int select)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256],buf2[256];
char token[256];
int buttontype = 0, windowtype = 0, windowno = 0;
int fd = getfdFromCharaIndex( toindex);
int pagenum=0, i;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL ) {
print("\n not found npcarg ");
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT,0);
return;
}
switch( num) {
case ROULETTE_START:
i = 1;
strcpy( token, "\0");
sprintf( buf2,"%s%d", "gamble_msg0", i);
while( NPC_Util_GetStrFromStrWithDelim( npcarg, buf2, buf1, sizeof( buf1) ) != NULL ) {
if( strstr( buf1, "NULL" ) == NULL ) {
strcat( token , buf1);
strcat( token, "\n");
}else {
strcat( token, "\n");
}
i++;
sprintf( buf2,"%s%d", "gamble_msg0", i);
}
windowtype=WINDOW_MESSAGETYPE_SELECT;
windowno = WINDOWTYPE_GAMBLEROULETTE_START;
break;
break;
case ROULETTE_SELECT:
//页 select
pagenum = CHAR_getWorkInt( toindex , CHAR_WORKSHOPRELEVANT);
strcpy( token, "\0");
if( select >= 0 ) {
sprintf( buf2,"%s%2d", "page_num", select);
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANT, select+1);
}else {
sprintf( buf2,"%s%2d", "page_num", pagenum );
pagenum+=1;
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANT, pagenum);
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, buf2, token, sizeof( token) ) == NULL ) {
print("\n error: not found token:%s", token);
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANT,0);
return;
}
sprintf( buf2,"%s%2d", "page_num", CHAR_getWorkInt( toindex , CHAR_WORKSHOPRELEVANT));
if( NPC_Util_GetStrFromStrWithDelim( npcarg, buf2, buf1, sizeof( buf1) ) == NULL ) {
windowno = WINDOWTYPE_GAMBLEROULETTE_END;
buttontype = WINDOW_BUTTONTYPE_OK;
}else {
windowno = WINDOWTYPE_GAMBLEROULETTE_SELECT;
buttontype = WINDOW_BUTTONTYPE_NEXT;
}
break;
case ROULETTE_LOOK:
{ //显示时补回积分
int G_num = CHAR_getInt( toindex, CHAR_GAMBLENUM );
if( CHAR_getWorkInt( toindex, CHAR_WORKSTAKEFLAG) != FALSE) {
for( i=0; i<5; i++) {
if( CHAR_getWorkInt( toindex, i+CHAR_WORKSTAKETYPE1) > 0 )
G_num++;
}
}
if( G_num < 0 ) G_num = 0;
sprintf( token,"你的游乐场积分为%d。", G_num );
windowno = WINDOWTYPE_GAMBLEROULETTE_END;
buttontype = WINDOW_BUTTONTYPE_OK;
}
break;
case ROULETTE_END:
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "page_endmsg", token, sizeof( token) ) == NULL ) {
print("\n error: not found end_msg");
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANT,0);
return;
}
windowno = WINDOWTYPE_GAMBLEROULETTE_END;
buttontype = WINDOW_BUTTONTYPE_OK;
break;
}
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);
}
void NPC_Gamble_MasterWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
int pagenum=0;
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
switch( seqno ) {
case WINDOWTYPE_GAMBLEROULETTE_START:
pagenum = atoi( data);
if( pagenum == 4 ) {
NPC_GambleRoulette_selectWindow( meindex, talkerindex, ROULETTE_END, -1 );
}else {
if( pagenum == 3 ) { //ROULETTE_LOOK
NPC_GambleRoulette_selectWindow( meindex, talkerindex, ROULETTE_LOOK, -1 );
}else {
pagenum = (pagenum*10)+1;
NPC_GambleRoulette_selectWindow( meindex, talkerindex, ROULETTE_SELECT, pagenum );
}
}
break;
case WINDOWTYPE_GAMBLEROULETTE_SELECT:
NPC_GambleRoulette_selectWindow( meindex, talkerindex, ROULETTE_SELECT, -1 );
break;
case WINDOWTYPE_GAMBLEROULETTE_END:
CHAR_setWorkInt(talkerindex , CHAR_WORKSHOPRELEVANT, 0);
break;
}
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),"");
}else if( (EndTypedef[End_type].m_IN - 100 ) == 12 ) {
snprintf( buff, sizeof( buff),"");
}
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分钟後重新开始!!", 1);
NPC_MAPCLEANGOLD( meindex , CHAR_getInt( meindex, CHAR_FLOOR ));
//defPlayerGold( meindex , FALSE);
CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec + ROULETTE_ERRTIME);
}
#endif