?? npc_gamblemaster.c
字號:
#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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -