📄 npc_itemshop.c
字号:
{ return FALSE; } return TRUE; } i++; } }else{ /*--失奶 丞互 15-25 及溥匹霜日木凶桦宁--*/ int start; int end; /* "-"匹嗉濠日木凶铵户及醒袄午 及醒袄毛潸 --*/ getStringFromIndexWithDelim( buff2, "-", 1, argstr, sizeof(argstr)); start = atoi( argstr); getStringFromIndexWithDelim( buff2, "-", 2 ,argstr, sizeof(argstr)); end = atoi( argstr); end++; /*-- 寞互菅卞卅匀化中凶日} 木赘尹月**/ if(start > end){ gold = start; start = end; end = gold; } /*--"-"匹嗉濠日木凶坌及失奶 丞毛树 毛 月--*/ for(; start < end ; start++ ) { if( ITEM_getcostFromITEMtabl( start) != -1) { if ( i == select) { /*---失奶 丞及综岳---*/ /*--蜊醒坌综岳--*/ if(NPC_AddItemBuy(meindex, talker, start, kosuu, rate) != TRUE) { return FALSE; } return TRUE; } i++; } } } } } return FALSE;}/*--------------------------------------------- *失奶 丞及馨笛毛垫丹 *--------------------------------------------*/BOOL NPC_AddItemBuy(int meindex, int talker,int itemID,int kosuu,double rate){ int itemindex; int i; int gold; int ret; int maxgold; gold = ITEM_getcostFromITEMtabl( itemID); gold = (int)(gold * rate); maxgold = gold * kosuu; if(CHAR_getInt( talker, CHAR_GOLD) < maxgold ) return FALSE; if( addNpcFamilyTax( meindex, talker, maxgold*0.4 ) ) print(" FamilyTaxDone! "); else print(" FamilyTaxError!"); for(i = 0 ; i < kosuu ; i++){ itemindex = ITEM_makeItemAndRegist( itemID); if(itemindex == -1) return FALSE; ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { print( "npc_itemshop.c: additem error itemindex[%d]\n", itemindex); ITEM_endExistItemsOne( itemindex); return FALSE; } CHAR_sendItemDataOne( talker, ret); } CHAR_DelGold( talker, maxgold); //CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD); return TRUE;}//选择 (买,卖,出去) 的小视窗void NPC_ItemShop_Menu(int meindex,int talker){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[NPC_UTIL_GETARGSTR_LINEMAX]; char buff[256]; int fd = getfdFromCharaIndex( talker); //argstr取得整个设定档的讯息: 例如->buy_rate:1.0|sell_rate:0.2|buy_msg:买,购买,感谢您,kau,buy............. (中间的分格号是读入时加入的) if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("shop_GetArgStr_Err"); return; } //token为视窗上面的title文字 例如: 萨姆吉尔的防具店|欢迎光临 NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff)); snprintf(token, sizeof(token),"%s|%s",CHAR_getChar( meindex, CHAR_NAME), buff); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMENU, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}void NPC_ItemShop_SellMain(int meindex,int talker,int before){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[NPC_UTIL_GETARGSTR_BUFSIZE]; int fd = getfdFromCharaIndex( talker); //取得npc设定资料 if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("shop_GetArgStr_Err"); return; } if(before != -1) { sprintf(token,"1|0"); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN +CHAR_getWorkInt(meindex,NPC_SHOP_WORK_NO), WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }else{ char token2[NPC_UTIL_GETARGSTR_BUFSIZE]; char buff2[256]; char buff[256]; NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff)); NPC_Util_GetStrFromStrWithDelim( argstr, "sell_main", buff2, sizeof( buff)); sprintf( token, "1|1|%d|%s|%s|%s|", CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG, CHAR_getChar( meindex, CHAR_NAME), buff, buff2); NPC_Util_GetStrFromStrWithDelim( argstr, "stone_msg", buff, sizeof( buff)); if(CHAR_getWorkInt(meindex,NPC_SHOP_WORK_EXPRESS) == 1 ) { NPC_Util_GetStrFromStrWithDelim( argstr, "exrealy_msg", buff2, sizeof(buff2)); }else{ NPC_Util_GetStrFromStrWithDelim( argstr, "realy_msg", buff2, sizeof( buff2)); } sprintf( token2,"%s|%s|", buff, buff2); NPC_GetLimtItemList( talker,argstr, token2, -1);//详细玩家要卖出的道具资料 strncat( token, token2, sizeof( token)); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN+ CHAR_getWorkInt(meindex,NPC_SHOP_WORK_NO), WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }}int NPC_GetLimtItemList(int talker, char *argstr, char* token2,int sell){ char token[NPC_UTIL_GETARGSTR_LINEMAX]; char buff[NPC_UTIL_GETARGSTR_LINEMAX]; char token3[NPC_UTIL_GETARGSTR_LINEMAX]; int k = 0 , i = 1 , j = 0; int imax; int itemtype = 0; int itemindex; int okflg = 0; char buf[256]; int flg=0; int cost; if(sell == -1 ){ i = CHAR_STARTITEMARRAY; imax = CHAR_MAXITEMHAVE; flg = -1; }else{ i= sell; imax= sell + 1; flg = 1; } for( ; i < imax ; i++ ){ okflg=0; itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX( itemindex) ){ if( NPC_Util_GetStrFromStrWithDelim( argstr,"LimitItemType", buff, sizeof( buff)) != NULL ){ k = 1; while(getStringFromIndexWithDelim(buff , "," , k, token, sizeof(token)) != FALSE ){ k++; for(j = 0 ; j < ITEM_CATEGORYNUM+3 ; j++){ if(strcmp( TypeTable[ j].arg , token) == 0 ) { itemtype = TypeTable[ j].type; if(ITEM_getInt(itemindex,ITEM_TYPE) == itemtype) { cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat( token2, token3, sizeof( token3)); okflg = 1; }else if(itemtype == 30){ if( 8 <= ITEM_getInt(itemindex,ITEM_TYPE) && (ITEM_getInt(itemindex,ITEM_TYPE) <= 15) ){ cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat(token2,token3,sizeof(token3)); okflg = 1; } }else if(itemtype == 40){ if(( 0 <= ITEM_getInt(itemindex,ITEM_TYPE) && (ITEM_getInt(itemindex,ITEM_TYPE) <= 4)) || (17 <= ITEM_getInt(itemindex,ITEM_TYPE) && (ITEM_getInt(itemindex,ITEM_TYPE) <= 19))) { cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat(token2,token3,sizeof(token3)); okflg = 1; } }else if(itemtype == 50){ if( 5 <= ITEM_getInt(itemindex,ITEM_TYPE) && (ITEM_getInt(itemindex,ITEM_TYPE) <= 7) ){ cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat(token2,token3,sizeof(token3)); okflg = 1; } } break; } } if(okflg == 1) break; } } if( (NPC_Util_GetStrFromStrWithDelim( argstr, "LimitItemNo", buff,sizeof( buff))!= NULL) && okflg == 0 ){ k = 1; while(getStringFromIndexWithDelim(buff , "," , k, token, sizeof(token)) != FALSE ){ k++; if(strstr( token, "-")==NULL && strcmp(token,"") != 0) { if(ITEM_getInt(itemindex,ITEM_ID) == atoi(token)) { cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat(token2,token3,sizeof(token3)); okflg=1; } }else if (strstr( token, "-") != NULL){ int start, end; int work; if( getStringFromIndexWithDelim( token, "-", 1, buf, sizeof(buf)) == FALSE ) return -1; start = atoi( buf); if( getStringFromIndexWithDelim( token, "-", 2 ,buf, sizeof(buf)) == FALSE ) return -1; end = atoi( buf); if(start > end){ work = start; start = end; end = work; } end++; if( (start <= ITEM_getInt(itemindex,ITEM_ID)) && (ITEM_getInt(itemindex,ITEM_ID) < end) ){ cost = NPC_GetSellItemList(itemindex,0,argstr,token3,i,sell); if(cost != -1) return cost; strncat(token2,token3,sizeof(token3)); okflg = 1; } } } } if(okflg == 0) { cost = NPC_GetSellItemList(itemindex, 1, argstr, token3, i, sell); if(sell != -1) return -1; strncat( token2, token3, sizeof( token3)); } } } return -1;}/*---------------------------------------------------------- 弁仿奶失件玄卞霜耨允月皿夫玄戊伙及综岳 *----------------------------------------------------------*/int NPC_GetSellItemList(int itemindex,int flg, char *argstr,char *argtoken,int select,int sell){ char buff[256]; double rate = 0.2; char buff2[256]; char buff3[64]; int k = 1; int cost = -1; if(NPC_Util_GetStrFromStrWithDelim( argstr,"special_item",buff, sizeof( buff)) != NULL){ if(NPC_Util_GetStrFromStrWithDelim( argstr,"special_rate",buff2, sizeof( buff2)) != NULL ){ rate = atof(buff2); }else{ rate = 1.2; } while(getStringFromIndexWithDelim(buff , "," , k, buff2, sizeof(buff2)) !=FALSE ){ k++; if(strstr( buff2, "-") == NULL && strcmp(buff2,"") != 0) { if(ITEM_getInt(itemindex,ITEM_ID) == atoi(buff2)){ cost = NPC_SellItemstrsStr( itemindex,0, rate, argtoken,select,sell); return cost; } }else if (strstr( buff2, "-") != NULL){ int start; int end; int work; getStringFromIndexWithDelim( buff2, "-", 1, buff3, sizeof(buff3)); start = atoi( buff3); getStringFromIndexWithDelim( buff2, "-", 2 ,buff3, sizeof(buff3)); end = atoi( buff3); if(start > end){ work = start; start = end; end = work; } end++; if( (start <= ITEM_getInt(itemindex,ITEM_ID)) && (ITEM_getInt(itemindex,ITEM_ID) < end) ){ cost = NPC_SellItemstrsStr( itemindex,0, rate, argtoken,select,sell); return cost; } } } } if( NPC_Util_GetStrFromStrWithDelim( argstr,"sell_rate",buff, sizeof( buff)) != NULL ){ rate = atof(buff); cost = NPC_SellItemstrsStr( itemindex, flg ,rate, argtoken,select,sell); return cost; } return cost;}int NPC_SellItemstrsStr(int itemindex,int flg,double rate,char *argtoken,int select,int sell){ int cost; char escapedname[256]; char name[256]; char *eff; cost = ITEM_getInt( itemindex, ITEM_COST); cost = (int)(cost * rate); if(sell != -1) return cost; strcpy( escapedname, ITEM_getChar( itemindex, ITEM_SECRETNAME)); makeEscapeString( escapedname, name, sizeof( name)); eff=ITEM_getChar(itemindex, ITEM_EFFECTSTRING); makeEscapeString( eff, escapedname, sizeof(escapedname)); sprintf( argtoken, "%s|%d|%d|%d|%s|%d|", name, flg, cost, ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER), escapedname, select ); return -1;}BOOL NPC_SellNewItem(int meindex,int talker,char *data){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[256], token2[256]; int cost, k, select, itemindex; int MyGold, MaxGold, sellnum=1; MaxGold = CHAR_getMaxHaveGold( talker); MyGold = CHAR_getInt( talker, CHAR_GOLD); if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("GetArgStrErr"); return FALSE; } getStringFromIndexWithDelim(data , "|" ,1, token, sizeof( token)); select = atoi(token); if( select < CHAR_STARTITEMARRAY || select >= CHAR_MAXITEMHAVE ) return FALSE; k = select; itemindex = CHAR_getItemIndex( talker , k); cost = NPC_GetLimtItemList( talker,argstr, token2,select); if( cost == -1 || (cost*sellnum)+MyGold >= MaxGold || !ITEM_CHECKINDEX( itemindex) ){ int fd = getfdFromCharaIndex( talker); sprintf(token,"\n\n哎呀!对不起" "\n\n对不起啊 ! 可不可以再选一次呢?" ); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWITEMSHOP_LIMIT, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return FALSE; } { LogItem( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ),#endif "Sell(卖道具)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } CHAR_DelItem( talker, k); CHAR_AddGold( talker, cost*sellnum); CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD); return TRUE;}void NPC_LimitItemShop(int meindex,int talker,int select){ int fd = getfdFromCharaIndex( talker); char token[NPC_UTIL_GETARGSTR_LINEMAX]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; if( NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("shop_GetArgStr_Err"); return; } if(NPC_Util_GetStrFromStrWithDelim( argstr, "sellonly_msg", buf, sizeof( buf))!=NULL){ sprintf(token,"\n\n%s", buf); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YESNO, CHAR_WINDOWTYPE_WINDOWITEMSHOP_LIMIT, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }else{ CHAR_talkToCli( talker, meindex, "这是买卖专门店。",CHAR_COLORWHITE); } return;}void NPC_ExpressmanCheck(int meindex,int talker){ int fd = getfdFromCharaIndex( talker); char token[1024]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; if( NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { print("shop_GetArgStr_Err"); return; } NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buf, sizeof( buf)); sprintf(token,"4\n %s\n\n%s" "\n\n < 打工 > " "\n\n <交付行李>" ,CHAR_getChar(meindex,CHAR_NAME),buf); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT, WINDOW_BUTTONTYPE_CANCEL, CHAR_WINDOWTYPE_WINDOWITEMSHOP_EXPRESS, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -