static BOOL NPC_SimpleShopFillItem( int meindex, char *npcarg ) { char token[256], buf[16]; int i,itemid, num; getStringFromIndexWithDelim( npcarg,"|",ITEMLISTTOKEN,token, sizeof(token) ); for( i=1; i<=SIMPLESHOP_MAXINFINITITEM;i++ ){ if( getStringFromIndexWithDelim( token,",",i,buf,sizeof(buf) )){ itemid = atoi( buf ); if( itemid == 0 ){ NPC_Util_ReleaseHaveItemAll(meindex); return FALSE; } num=NPC_Util_countHaveItem(meindex,itemid); if( num < 0 ){ return FALSE;/* æØ¿ÒئidئÉý¼°fatal err */ }else if( num == 0 ){ /* ÊÖÔÈ»¯Ø¦¾®ÔÈÐ×ÈÕ Ïº */ NPC_Util_createItemToChar( meindex,itemid, FALSE); }else if( num>=2 ){ /* ÊÖÇÐÔÊ¿º¼°èëÄþ´ÂÂÖ */ NPC_Util_RemoveItemByID(meindex,itemid,FALSE); } }else{ break; } } /* Óò¼ÔØÆÎåÍ͹´½ñľÐ×ÇÁÚرåÔÊÔ */ //NPC_SimpleShopSetLeakLevel( meindex ); return TRUE; }
/* * Ź¤¬ ¸Â¤Ë ¤Ã¤Æ¤¤¤ë¥¢¥¤ ¥à¤ò ¤¿¤»¤ë¡e½é´ü²½»þ¤È¼è¤ê°ú¤¤Î * ¤Ë¸Æ¤Ö¡e */ static BOOL NPC_SimpleShopFillItem( int meindex, char *npcarg ) { char token[256], buf[16]; int i,itemid, num; getStringFromIndexWithDelim( npcarg,"|",ITEMLISTTOKEN,token, sizeof(token) ); for( i=1; i<=SIMPLESHOP_MAXINFINITITEM;i++ ){ if( getStringFromIndexWithDelim( token,",",i,buf,sizeof(buf) )){ itemid = atoi( buf ); if( itemid == 0 ){ NPC_Util_ReleaseHaveItemAll(meindex); return FALSE; } num=NPC_Util_countHaveItem(meindex,itemid); if( num < 0 ){ return FALSE;/* ÉÔÀµ¤Êid¤Ê¤É¤Îfatal err */ }else if( num == 0 ){ /* ¤â¤Ã¤Æ¤Ê¤«¤Ã¤¿¤é ½¼ */ NPC_Util_createItemToChar( meindex,itemid, FALSE); }else if( num>=2 ){ /* ¤â¤Á¤¹¤®¤Î¾ì¹çºï½ü */ NPC_Util_RemoveItemByID(meindex,itemid,FALSE); } }else{ break; } } /* °ì²ó¤·¤¤Ù¤Ä¤µ¤ì¤¿¾õÂ֤ˤ¹¤ë */ //NPC_SimpleShopSetLeakLevel( meindex ); return TRUE; }
static BOOL NPC_SimpleShopProcessSellMsg(char *msg, int shopindex, int playerindex ) { int sellwindowindex, itemtableindex,itemind, id; int price, tmpgold; char buf[64]; if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex)) return -1; if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){ return -1; } sellwindowindex = atoi(buf); itemtableindex = sellwindowindex + CHAR_STARTITEMARRAY; itemind = CHAR_getItemIndex(playerindex,itemtableindex ); if( ! ITEM_CHECKINDEX(itemind) ) return -1; price = ITEM_getInt( itemind, ITEM_COST ); if( price <= 0 || price > NPC_SIMPLESHOPMAXBUYPRICE ){ return -2; } price *= NPC_Util_sellRate(playerindex); CHAR_AddGold( playerindex, price ); CHAR_sendStatusString( playerindex , "P"); id = ITEM_getInt(itemind,ITEM_ID); { LogItem( CHAR_getChar( playerindex, CHAR_NAME ), /* ƽÅÒ·Â */ CHAR_getChar( playerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemind, #else ITEM_getInt( itemind, ITEM_ID ), /* ʧÄÌ Ø© į */ #endif "Sell", CHAR_getInt( playerindex,CHAR_FLOOR), CHAR_getInt( playerindex,CHAR_X ), CHAR_getInt( playerindex,CHAR_Y ), ITEM_getChar( itemind, ITEM_UNIQUECODE), ITEM_getChar( itemind, ITEM_NAME), ITEM_getInt( itemind, ITEM_ID) ); } if( ! NPC_Util_moveItemToChar( shopindex,itemind,TRUE ) ){ return -1; } NPC_Util_RemoveItemByID(shopindex,id,FALSE); return 1; }
static BOOL NPC_LimitBuyInShopProcessSellMsg(char *msg, int shopindex, int playerindex ) { int sellwindowindex, itemtableindex,itemind, id,i,buyokflag, setid; int price, tmpgold; char buf[BUFSIZ]; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX]; if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex)) return -1; if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){ return -1; } sellwindowindex = atoi(buf); itemtableindex = sellwindowindex + CHAR_STARTITEMARRAY; itemind = CHAR_getItemIndex(playerindex,itemtableindex ); if( ! ITEM_CHECKINDEX(itemind) ) return -1; id = ITEM_getInt(itemind,ITEM_ID); NPC_Util_GetArgStr( shopindex, npcarg, sizeof(npcarg)); getStringFromIndexWithDelim( npcarg, "|", BUYINITEMLISTTOKEN, token, sizeof( token) ); buyokflag = FALSE; for( i=1;getStringFromIndexWithDelim(token,",",i,buf,sizeof(buf)); i++){ char *tok1 = NULL; char *tok2 = NULL; int no1=0, no2=0; tok1 = strtok( buf, "-" ); tok2 = strtok( NULL, "-" ); setid = atoi(buf); if( tok1 == NULL || tok2 == NULL ){ if( setid == 0 ) return -2; if( setid == id ) buyokflag = TRUE; } else { no1 = atoi( tok1 ); no2 = atoi( tok2 ); if( no1 <= id && id <= no2 ){ buyokflag = TRUE; } } } if( buyokflag == FALSE ) return -2; price = ITEM_getInt( itemind, ITEM_COST ); price *= NPC_Util_sellRate(playerindex); CHAR_AddGold( playerindex, price ); CHAR_sendStatusString( playerindex , "P"); if( ! NPC_Util_moveItemToChar( shopindex,itemind,TRUE ) ){ return -1; } { LogItem( CHAR_getChar( playerindex, CHAR_NAME ), /* ƽÅÒ·Â */ CHAR_getChar( playerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemind, #else ITEM_getInt( itemind, ITEM_ID ), /* ʧÄÌ Ø© į */ #endif "Sell", CHAR_getInt( playerindex,CHAR_FLOOR), CHAR_getInt( playerindex,CHAR_X ), CHAR_getInt( playerindex,CHAR_Y ), ITEM_getChar( itemind, ITEM_UNIQUECODE), ITEM_getChar( itemind, ITEM_NAME), ITEM_getInt( itemind, ITEM_ID) ); } NPC_Util_RemoveItemByID(shopindex,id,FALSE); return 1; }