#include "version.h" #include #include "char.h" #include "object.h" #include "char_base.h" #include "npcutil.h" #include "npc_pauctionman.h" #include "lssproto_serv.h" #include "saacproto_cli.h" #include "readmap.h" #include "battle.h" #include "log.h" #include "enemy.h" #include "handletime.h" #include "npc_eventaction.h" #include "longzoro/sasql.h" #include "pet.h" //特地从天堂高薪挖角来的"传送师" #ifdef _PAUCTION_MAN enum { WINDOW_PAUCTION_START=1, WINDOW_PAUCTION_SELECT, WINDOW_PAUCTION_NEW, WINDOW_PAUCTION_AUCTIONSURVEY, WINDOW_PAUCTION_LIST_BUY_ALL, WINDOW_PAUCTION_LIST_BUY_PET, WINDOW_PAUCTION_LIST_BUY_ITEM, WINDOW_PAUCTION_LIST_MODIFY, }; enum { NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1, /* 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 STANDBYTIME 50 static void NPC_Pauction_selectWindow( int meindex, int toindex, int seqno, int select, char *data); BOOL NPC_PauctionInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return FALSE; } // CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TRANSERMANS); //CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return TRUE; } //CHAR_setWorkInt(talkerindex,CHAR_WORKSHOPRELEVANT,1); void NPC_PauctionTalked( int meindex, int talkerindex, char *msg, int color ) { 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; } CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_START, 0, 0); } void NPC_PauctionWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { if( select == WINDOW_BUTTONTYPE_CANCEL || select == WINDOW_BUTTONTYPE_NO) return; switch( seqno) { case NPC_PAUCTION_START: break; case NPC_PAUCTION_SELECT: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_SELECT, select, data); break; case NPC_PAUCTION_NEW: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_NEW, select, data); break; case NPC_PAUCTION_AUCTIONSURVEY: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_AUCTIONSURVEY, select, data); break; case NPC_PAUCTION_LIST_BUY_ALL: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_LIST_BUY_ALL, select, data); break; case NPC_PAUCTION_LIST_BUY_PET: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_LIST_BUY_PET, select, data); break; case NPC_PAUCTION_LIST_BUY_ITEM: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_LIST_BUY_ITEM, select, data); break; case NPC_PAUCTION_LIST_MODIFY: NPC_Pauction_selectWindow( meindex, talkerindex, WINDOW_PAUCTION_LIST_MODIFY, select, data); break; } } static void NPC_Pauction_selectWindow( int meindex, int toindex, int seqno, int select, char *data) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[1024]; char buf[1024]; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); windowtype = WINDOW_MESSAGETYPE_MESSAGE; buttontype = WINDOW_BUTTONTYPE_OK; if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE) return; } memset( npcarg, 0, sizeof( npcarg)); if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("Pauction_MAN: GetArgStrErr!!"); return; } memset( token, 0, sizeof( token)); switch( seqno) { case WINDOW_PAUCTION_START: sprintf(token, "3\n ★委托拍卖交易大王★\n\n" "有什么需要我为你服务呢?\n" " 《我要委托一项交易》\n" " 《查看所有委托列表》\n" " 《查看宠物委托列表》\n" " 《查看物品委托列表》\n" " 《查看个人委托列表》\n" ); windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_PAUCTION_SELECT; break; case WINDOW_PAUCTION_SELECT: { int num = 0; if(atoi(data)==1){ windowtype = WINDOW_MESSAGETYPE_AUCTIONNEW; windowno = NPC_PAUCTION_NEW; }else if(atoi(data)==2 || atoi(data)==3 || atoi(data)==4){ CHAR_setWorkInt( toindex, CHAR_WORK_LISTPAGE, 0); if(atoi(data)==2){ num = sasql_getPauctionList(token, 0, 0, ""); windowno = NPC_PAUCTION_LIST_BUY_ALL; }else if(atoi(data)==3){ num = sasql_getPauctionList(token, 0, 1, ""); windowno = NPC_PAUCTION_LIST_BUY_PET; }else if(atoi(data)==4){ num = sasql_getPauctionList(token, 0, 2, ""); windowno = NPC_PAUCTION_LIST_BUY_ITEM; } windowtype = WINDOW_MESSAGETYPE_AUCTIONLIST_BUY; }else if(atoi(data)==5){ num = sasql_getPauctionList(token, 0, 0, CHAR_getChar(toindex, CHAR_CDKEY)); windowtype = WINDOW_MESSAGETYPE_AUCTIONLIST_MODIFY; windowno = NPC_PAUCTION_LIST_MODIFY; } if(num>10){ buttontype = WINDOW_BUTTONTYPE_NEXT; } } break; case WINDOW_PAUCTION_NEW: { char effect[128]; char info[128]; char tmp[128]; char *string = ""; makeStringFromEscaped(data); getStringFromIndexWithDelim( data, "|", 1, tmp, sizeof( tmp)); int type = atoi(tmp); getStringFromIndexWithDelim( data, "|", 2, tmp, sizeof( tmp)); int id = atoi(tmp); getStringFromIndexWithDelim( data, "|", 3, effect, sizeof( effect)); if(strlen(effect)==0){ sprintf(token, "委托失败,请填写委托叙述~"); break; } getStringFromIndexWithDelim( data, "|", 4, tmp, sizeof( tmp)); int cost = atoi(tmp); if(cost<=0){ sprintf(token, "委托价格不能为0~"); break; } if(type == 1){ int petindex = CHAR_getCharPet( toindex, id); if( !CHAR_CHECKINDEX(petindex)){ sprintf(token, "你并没有你要委托的宠物~"); break; } #ifdef _PET_ITEM int i; for(i=0;i1){ sprintf(token, "叠加物品无法拍卖~"); break; } sprintf(info, "%s|%d|%d|%s|", ITEM_getChar(itemindex, ITEM_NAME), ITEM_getInt(itemindex, ITEM_BASEIMAGENUMBER), #ifdef _ITEM_COLOER ITEM_getInt( itemindex, ITEM_COLOER), #else CHAR_COLORWHITE, #endif ITEM_getChar(itemindex, ITEM_EFFECTSTRING)); string = ITEM_makeStringFromItemIndex(itemindex, 0); if( string == "\0" ){ sprintf(token, "委托物品失败,请与管理员联系~"); break; } CHAR_DelItem( toindex, id); } char *cdkey = CHAR_getChar(toindex, CHAR_CDKEY); char *name = CHAR_getChar(toindex, CHAR_NAME); sasql_addPauctionInfo(cdkey, name, effect, cost, type, info, string); sprintf(token, "成功为您登记了一条委托交易信息,我们会尽心尽力为您服务,如有一切动态,我们会第一时间通知您!"); } break; case WINDOW_PAUCTION_LIST_BUY_ALL: case WINDOW_PAUCTION_LIST_BUY_PET: case WINDOW_PAUCTION_LIST_BUY_ITEM: case WINDOW_PAUCTION_LIST_MODIFY: { if(select == WINDOW_BUTTONTYPE_PREV || select == WINDOW_BUTTONTYPE_NEXT){ int page = 0; int num=0; windowtype = WINDOW_MESSAGETYPE_AUCTIONLIST_BUY; if(select == WINDOW_BUTTONTYPE_PREV){ page = CHAR_getWorkInt( toindex, CHAR_WORK_LISTPAGE) - 1; if(page<0) page = 0; }else if(select == WINDOW_BUTTONTYPE_NEXT){ page = CHAR_getWorkInt( toindex, CHAR_WORK_LISTPAGE) + 1; if(page>8) page = 8; } if(seqno==WINDOW_PAUCTION_LIST_BUY_ALL){ num = sasql_getPauctionList(token, page * 10, 0, ""); windowno = NPC_PAUCTION_LIST_BUY_ALL; }else if(seqno==WINDOW_PAUCTION_LIST_BUY_PET){ num = sasql_getPauctionList(token, page * 10, 1, ""); windowno = NPC_PAUCTION_LIST_BUY_PET; }else if(seqno==WINDOW_PAUCTION_LIST_BUY_ITEM){ num = sasql_getPauctionList(token, page * 10, 2, ""); windowno = NPC_PAUCTION_LIST_BUY_ITEM; }else if(seqno==WINDOW_PAUCTION_LIST_MODIFY){ num = sasql_getPauctionList(token, page * 10, 0, CHAR_getChar(toindex, CHAR_CDKEY)); windowno = NPC_PAUCTION_LIST_MODIFY; windowtype = WINDOW_MESSAGETYPE_AUCTIONLIST_MODIFY; } buttontype = 0; if(num>(page + 1) * 10){ buttontype |= WINDOW_BUTTONTYPE_NEXT; } if(page > 0){ buttontype |= WINDOW_BUTTONTYPE_PREV; } CHAR_setWorkInt( toindex, CHAR_WORK_LISTPAGE, page); }else if(select==1){ char string[1024]; char buff[256]; int type = sasql_getMyPauction(string, atoi(data), CHAR_getChar(toindex, CHAR_CDKEY)); if(type == 1){ int havepetelement = CHAR_getCharPetElement( toindex); if( havepetelement < 0 ) { sprintf(token, "很抱歉,你身上宠物已满,请空出一个宠物栏位!"); break; } Char petone; int ret = CHAR_makePetFromStringToArg( string , &petone, 0 ); if( ret == TRUE ){ int existpetindex; existpetindex = PET_initCharOneArray( &petone ); if( existpetindex < 0 ){ sprintf(token, "取回宠物失败!"); break; } CHAR_setWorkInt( existpetindex, CHAR_WORKPLAYERINDEX, toindex); CHAR_setCharPet( toindex, havepetelement, existpetindex); CHAR_complianceParameter( existpetindex); snprintf( buff, sizeof( buff ), "K%d", havepetelement ); CHAR_sendStatusString( toindex, buff ); snprintf( buff, sizeof( buff ), "W%d", havepetelement ); CHAR_sendStatusString( toindex, buff ); sasql_delPauctionBuy(atoi(data), CHAR_getChar(toindex, CHAR_CDKEY)); } sprintf(token, "成功取回你的宠物!"); break; }else if(type == 2){ int emptyitemindexinchara = CHAR_findEmptyItemBox( toindex ); if( emptyitemindexinchara < 0 ){ sprintf(token, "很抱歉,你身上物品已满,请空出一个物品栏位!"); break; } ITEM_Item itmone; BOOL ret = ITEM_makeExistItemsFromStringToArg( string, &itmone, 0); if( ret == TRUE ){ int itemindex = ITEM_initExistItemsOne( &itmone ); if( itemindex == -1 ){ sprintf(token, "取回物品失败!"); break; }else{ CHAR_setItemIndex( toindex, emptyitemindexinchara, itemindex ); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,toindex); CHAR_sendItemDataOne( toindex, emptyitemindexinchara); sasql_delPauctionBuy(atoi(data), CHAR_getChar(toindex, CHAR_CDKEY)); } } sprintf(token, "成功取回你的物品!"); break; }else{ sprintf(token, "??????????"); } }else if(select==4){ sasql_getPauctionSurvey(token, atoi(data)); windowno = NPC_PAUCTION_AUCTIONSURVEY; windowtype = WINDOW_MESSAGETYPE_AUCTIONSURVEY; } } break; case WINDOW_PAUCTION_AUCTIONSURVEY: { char string[1024]; char buff[256]; int type = sasql_getMyPauction(string, atoi(data), ""); if(type == 1){ int havepetelement = CHAR_getCharPetElement( toindex); if( havepetelement < 0 ) { sprintf(token, "很抱歉,你身上宠物已满,请空出一个宠物栏位!"); break; } int flg = sasql_PauctionOK(atoi(data), CHAR_getChar(toindex, CHAR_CDKEY)); if(flg == 1){ Char petone; int ret = CHAR_makePetFromStringToArg( string , &petone, 0 ); if( ret == TRUE ){ int existpetindex; existpetindex = PET_initCharOneArray( &petone ); if( existpetindex < 0 ){ sprintf(token, "取回宠物失败!"); break; } CHAR_setWorkInt( existpetindex, CHAR_WORKPLAYERINDEX, toindex); CHAR_setCharPet( toindex, havepetelement, existpetindex); CHAR_complianceParameter( existpetindex); snprintf( buff, sizeof( buff ), "K%d", havepetelement ); CHAR_sendStatusString( toindex, buff ); snprintf( buff, sizeof( buff ), "W%d", havepetelement ); CHAR_sendStatusString( toindex, buff ); sasql_delPauctionBuy(atoi(data), ""); } sprintf(token, "成功购买委托宠物!"); }else if(flg == -1){ sprintf(token, "你所要购买的委托宠物不存在或已被他人购买了!"); }else if(flg == -2){ sprintf(token, "很抱歉,你身上的重回币数不够购买!"); }else{ sprintf(token, "数据库操作错误,请与管理员联系!"); } }else if(type == 2){ int emptyitemindexinchara = CHAR_findEmptyItemBox( toindex ); if( emptyitemindexinchara < 0 ){ sprintf(token, "很抱歉,你身上物品已满,请空出一个物品栏位!"); break; } int flg = sasql_PauctionOK(atoi(data), CHAR_getChar(toindex, CHAR_CDKEY)); if(flg == 1){ ITEM_Item itmone; BOOL ret = ITEM_makeExistItemsFromStringToArg( string, &itmone, 0); if( ret == TRUE ){ int itemindex = ITEM_initExistItemsOne( &itmone ); if( itemindex == -1 ){ sprintf(token, "取回物品失败!"); break; }else{ CHAR_setItemIndex( toindex, emptyitemindexinchara, itemindex ); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,toindex); CHAR_sendItemDataOne( toindex, emptyitemindexinchara); sasql_delPauctionBuy(atoi(data), ""); } } sprintf(token, "成功购买委托物品!"); }else if(flg == -1){ sprintf(token, "你所要购买的委托物品不存在或已被他人购买了!"); }else if(flg == -2){ sprintf(token, "很抱歉,你身上的重回币数不够购买!"); }else{ sprintf(token, "数据库操作错误,请与管理员联系!"); } }else{ sprintf(token, "??????????"); break; } } break; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString(token, buf, sizeof( buf) )); } void NPC_PauctionLoop( int meindex) { } #endif