📄 npc_gamblebank.c
字号:
#include "version.h"
#include <string.h>
#include <math.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "enemy.h"
#include "log.h"
#include "battle.h"
#include "readmap.h"
#include "handletime.h"
#include "configfile.h"
#ifdef _GAMBLE_BANK
#include "npc_gamblebank.h"
static void NPC_GambleBank_selectWindow( int meindex, int toindex, int num, int flg);
int NPC_GambleBank_DoGold( int meindex, int toindex, int Gold, int flg);
BOOL NPC_GambleBank_AddItem( int meindex, int toindex, int itemId, int count);
enum {
GAMBLE_START = 0,
GAMBLE_SELET,
GAMBLE_MAN_BANK,
GAMBLE_MAN_CHANG1,
GAMBLE_MAN_CHANG2,
GAMBLE_END,
};
enum {
NPC_WORK_INDEX = CHAR_NPCWORKINT1,
NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2, // 0,-1 = NULL 2 = 银行 3 = 换币 4 = BOTH
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,
NPC_WORK_PAGE = CHAR_NPCWORKINT4,
/*
NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2,
NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3,
NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4,
NPC_WORK_MODE = CHAR_NPCWORKINT5,
NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6,
NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7,
NPC_WORK_WAITTIME = CHAR_NPCWORKINT8,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9,
NPC_WORK_SEFLG = CHAR_NPCWORKINT10,
*/
};
#define _GAMBLEBANK_U_NOLOCK //同时对多人
#define GAMBLEBANK_LOOPTIME 80
#define GAMBLEBANK_STANDBY 5000
#define GAMBLEBANK_DEF 3 //手续费 / 100
#define GAMBLEBANK_GETMAX 1000000
#define GAMBLEBANK_GETMIN 100
#define LIST_PAGE 7
BOOL NPC_GambleBankInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256];
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_GAMBLEBANK );
#ifdef _GAMBLEBANK_U_NOLOCK
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, GAMBLEBANK_STANDBY);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
#endif
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return FALSE;
}
if(NPC_Util_GetStrFromStrWithDelim( npcarg,"GAMBLE_TYPE", buf1,sizeof( buf1) ) == NULL) {
print("GAMBLE_TYPE err !");
return FALSE;
}
CHAR_setWorkInt( meindex, NPC_WORK_WORKTYPE, atoi( buf1) );
return TRUE;
}
//CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_GOLD);
void NPC_GambleBankLoop( int meindex)
{
#ifdef _GAMBLEBANK_U_NOLOCK
int fulltime = GAMBLEBANK_LOOPTIME;
if( ( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) >= NowTime.tv_sec )
return;
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
#endif
return;
}
void NPC_GambleBankTalked( int meindex , int talkerindex , char *szMes ,int color )
{
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
int work_type;
if( !CHAR_CHECKINDEX( talkerindex) || !CHAR_CHECKINDEX( meindex) )
return;
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, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return;
}
#ifdef _FIX_GAMBLENUM
if( CHAR_getInt( talkerindex, CHAR_GAMBLENUM) < 0 ) {
CHAR_setInt( talkerindex, CHAR_GAMBLENUM, 0);
}
#endif
if(NPC_Util_GetStrFromStrWithDelim( npcarg,"GAMBLE_TYPE", buf1,sizeof( buf1) ) == NULL) {
print("GAMBLE_TYPE err !");
return;
}
CHAR_setWorkInt( meindex, NPC_WORK_WORKTYPE, atoi( buf1) );
work_type = CHAR_getWorkInt( meindex, NPC_WORK_WORKTYPE);
if( work_type < 1 || work_type > 4 ) { // 0 or -1
strcpy( buf1,"暂时停止服务。");
CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
#ifdef _GAMBLEBANK_U_NOLOCK
#else
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 ) {
strcpy( buf1,"我正忙着!");
CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW);
return;
}else {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
}
#endif
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 1);
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_START, 1);
}
static void NPC_GambleBank_selectWindow( int meindex, int toindex, int num, int flg)
{
char token[256];
char buf1[256],buf2[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
int buttontype = 0, windowtype = 0, windowno = 0;
int fd = getfdFromCharaIndex( toindex);
int i;
int page=-1;
//flg <= 0 错误 1 正常 flg = 2 钱不够 3 = 个人存款将满
// 4 = 个人银行将满 5 = 提领上限 6 = 提领下限
char Gamble_End[][56] = {
"error_msg", "end_msg", "money_msg", "full_msg1",
"full_msg2","getmax_msg","getmin_msg",
};
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GambleBank:GetArgStrErr");
return;
}
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
switch( num) {
case GAMBLE_START:
if( NPC_Util_GetStrFromStrWithDelim( npcarg,"gamble_start", token, sizeof( token) ) == NULL) {
print("gamble_start msg err !");
return;
}
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowno = NPC_GambleBank_START;
break;
case GAMBLE_SELET:
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 = NPC_GambleBank_SELECT;
break;
case GAMBLE_MAN_BANK: //银行
sprintf( token,"%d", CHAR_getInt( toindex, CHAR_PERSONAGOLD ) );
windowtype = WINDOW_MESSAGETYPE_BANK;
windowno = NPC_GambleBank_BANK;
break;
case GAMBLE_MAN_CHANG1: //换物
{
char snum[256];
page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
strcpy( token, "换物");
sprintf( token, "你有%d积分,想换哪一个奖品呢?\n", CHAR_getInt( toindex, CHAR_GAMBLENUM));
for( i=(page*LIST_PAGE);i<(page*LIST_PAGE+LIST_PAGE);i++) {
if( i>=arraysizeof( GB_ITEMS)) {
break;
}
if( !strcmp( GB_ITEMS[i].name,"NEXT") ) {
strcat( token, " 下一页");
break;
}
if( !strcmp( GB_ITEMS[i].name,"END") ) {
strcat( token, " 取消\n");
break;
}
sprintf( snum,"%s%d\t%s",
"积分:", GB_ITEMS[i].Gnum,
GB_ITEMS[i].name);
snum[36] = 0;
strcat( token, snum);
strcat( token,"\n");
strcpy( snum, "\0");
}
windowtype = WINDOW_MESSAGETYPE_SELECT;
buttontype = WINDOW_BUTTONTYPE_NONE;
windowno = NPC_GambleBank_CHANG1;
}
break;
case GAMBLE_END:
CHAR_send_P_StatusString( toindex, CHAR_P_STRING_GOLD);
if( flg < 0 || flg > 6) {
flg = 0;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, Gamble_End[flg], token, sizeof( token) ) == NULL) {
print("Gamble_End[%d] noe found !", flg);
return;
}
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1);
#ifdef _GAMBLEBANK_U_NOLOCK
#else
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
#endif
windowno = NPC_GambleBank_END;
buttontype = WINDOW_BUTTONTYPE_OK;
break;
}
lssproto_WN_send( fd, windowtype,
buttontype,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -