📄 npc_gamblebank.c
字号:
windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
void NPC_GambleBankWindowTalked ( int meindex, int talkerindex, int seqno, int select, char *data)
{
int stone_gold = 0;
int flg=1;
int work_type=-1;
int type;
type = atoi( data);
if( !CHAR_CHECKINDEX( talkerindex) || !CHAR_CHECKINDEX( meindex) )
return;
work_type = CHAR_getWorkInt( meindex, NPC_WORK_WORKTYPE );
if( work_type < 1 || work_type > 4 ) {
return;
}
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
#ifdef _GAMBLEBANK_U_NOLOCK
#else
{
char buf1[256];
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != talkerindex ) {
strcpy( buf1,"我正忙着呢!");
CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW);
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
}
#endif
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {
return;
}
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
switch( seqno) {
case NPC_GambleBank_START:
if( select == WINDOW_BUTTONTYPE_YES ) {
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_SELET, flg);
}else {
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_END, flg);
}
break;
case NPC_GambleBank_SELECT:
if( type == 1 ) { //银行
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 2);
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_MAN_BANK, flg);
}else if( type == 2 ) { //换物
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_MAN_CHANG1, flg);
}else {
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_END, flg);
}
break;
case NPC_GambleBank_BANK: //2
if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != 2 ) //错误程序
return;
if( work_type != 2 && work_type != 4 ) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
if( select == 4 && atoi( data) != 0 ) {
stone_gold = atoi( data);
flg = NPC_GambleBank_DoGold( meindex, talkerindex, stone_gold, select);
//flg = 1 正常 flg = 2 钱不够 flg <= 0 错误
if( flg == 1 ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
}
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_END, flg);
break;
case NPC_GambleBank_CHANG1: //换物
{
int page,ItemID;
int count;
type -=1;
page = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT)*LIST_PAGE;
if( work_type != 3 && work_type != 4 ) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
if( page < 0 ) //错误对话程序
return;
if( (page+type) < 0 || (page+type) >= arraysizeof( GB_ITEMS) ) {
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_END, flg);
}else if( !strcmp( GB_ITEMS[page+type].name,"NEXT") ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT,
CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) + 1);
NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_MAN_CHANG1, flg);
}else if( !strcmp( GB_ITEMS[page+type].name,"END") ){
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}else {
if( type < 7 && type >= 0 ) {
if( GB_ITEMS[page+type].name == NULL ||
!strcmp( GB_ITEMS[page+type].name, "\0") ) {
}else {
ItemID = GB_ITEMS[page+type].ItemId; //ID
count = GB_ITEMS[page+type].Gnum; //积分
NPC_GambleBank_AddItem( meindex, talkerindex, ItemID, count);
}
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
}
}
break;
case NPC_GambleBank_END:
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
break;
}
}
int NPC_GambleBank_DoGold( int meindex, int toindex, int Gold, int flg)
{
//flg = 1 正常 flg = 2 钱不够 flg <= 0 错误 3 = 个人存款将满 4 = 个人银行将满 5 = 单次最高金额
char buf1[256];
int player_gold = CHAR_getInt( toindex, CHAR_GOLD );
int stone_def = 0; //手续费
// int def = GAMBLEBANK_DEF;
//不作无意义的存取款
if( flg != 4 )
return 0;
if( Gold == 0 ) {
return 0;
}
if( Gold < 0 ) { //取款
Gold *=-1;
//stone_def = (Gold * def) /100;
stone_def = 300;
if( Gold > GAMBLEBANK_GETMAX ) {
return 5;
}else if( Gold < GAMBLEBANK_GETMIN ) {
return 6;
}
if( ( player_gold + Gold ) > CHAR_getMaxHaveGold(toindex) ) {
return 3; //取款後将超过个人金额
}else if( (Gold + stone_def)> CHAR_getInt( toindex, CHAR_PERSONAGOLD ) ) { //银行存款不够
return 2;
}
CHAR_setInt( toindex, CHAR_PERSONAGOLD, (CHAR_getInt( toindex, CHAR_PERSONAGOLD )-(Gold+stone_def)));
CHAR_AddGold( toindex, Gold);
sprintf( buf1,"取款:%d ,手续费:%d,银行剩馀:%d 。", Gold, stone_def, CHAR_getInt( toindex, CHAR_PERSONAGOLD ));
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
LogBankStone( CHAR_getChar( toindex, CHAR_NAME ), CHAR_getChar( toindex, CHAR_CDKEY ),
toindex, Gold,
"GB_Bank_Get(银行取款)",
CHAR_getInt( toindex, CHAR_FLOOR),
CHAR_getInt( toindex, CHAR_X ), CHAR_getInt( toindex, CHAR_Y ) ,
CHAR_getInt( toindex, CHAR_GOLD ),
CHAR_getInt( toindex, CHAR_PERSONAGOLD )
);
return 1;
}else if( Gold > 0 ) { //存款
if( Gold > player_gold ) {
return 2;
}else if( (Gold + CHAR_getInt( toindex, CHAR_PERSONAGOLD ) ) > CHAR_MAXPERSONAGOLD ) {
return 4;
}
CHAR_DelGold( toindex, Gold );
CHAR_setInt( toindex, CHAR_PERSONAGOLD, (CHAR_getInt( toindex, CHAR_PERSONAGOLD ) + Gold ) );
sprintf( buf1,"存款:%d ,银行剩馀:%d 。", Gold, CHAR_getInt( toindex, CHAR_PERSONAGOLD ));
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
LogBankStone( CHAR_getChar( toindex, CHAR_NAME ), CHAR_getChar( toindex, CHAR_CDKEY ),
toindex, Gold,
"GB_Bank_save(银行存款)",
CHAR_getInt( toindex, CHAR_FLOOR),
CHAR_getInt( toindex, CHAR_X ), CHAR_getInt( toindex, CHAR_Y ),
CHAR_getInt( toindex, CHAR_GOLD ),
CHAR_getInt( toindex, CHAR_PERSONAGOLD )
);
return 1;
}
return 0;
}
BOOL NPC_GambleBank_AddItem( int meindex, int toindex, int itemId, int count)
{
int i=-1,itemindex=-1;
int ret=-1;
char token[256];
strcpy( token,"\0");
if( count < 0 || itemId < 0 )
return FALSE;
if( CHAR_getInt( toindex, CHAR_GAMBLENUM) < count ) {
sprintf( token,"游乐场积分不足!");
CHAR_talkToCli( toindex, -1,token,CHAR_COLORWHITE);
return FALSE;
}
for( i = 0 ; i < CHAR_MAXITEMHAVE ; i++ ){
itemindex=CHAR_getItemIndex( toindex , i );
if( itemindex == -1 ) {
break;
}
}
if( i == CHAR_MAXITEMHAVE ) {
snprintf( token,sizeof( token), "物品栏空间不足!!");
CHAR_talkToCli( toindex, -1, token, CHAR_COLORWHITE);
return FALSE;
}
itemindex = ITEM_makeItemAndRegist( itemId);
if(itemindex == -1)
return FALSE;
ret = CHAR_addItemSpecificItemIndex( toindex, itemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
ITEM_endExistItemsOne( itemindex);
return FALSE;
}
LogItem(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID ),
#endif
"G_BANK(游乐场积分兑换道具)",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( toindex, -1,token,CHAR_COLORWHITE);
CHAR_sendItemDataOne( toindex, ret);
CHAR_setInt( toindex, CHAR_GAMBLENUM, CHAR_getInt( toindex, CHAR_GAMBLENUM) - count);
sprintf( token,"游乐场积分剩馀: %d", CHAR_getInt( toindex, CHAR_GAMBLENUM));
CHAR_talkToCli( toindex, -1,token,CHAR_COLORWHITE);
return TRUE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -