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; }
/* * TK¤ÇÁ÷¤ë¤¿¤á¤Î »ú ¤ò¤Ä¤¯¤ë¡e */ static void NPC_SimpleShopGetEscapedItemString( int shopindex, int cliindex, char *str ) { int i, cost, cl, imageno, itemindex; char *itemname; char tmp[1024]; char escapedname[256]; // char *oli; /* oli means onelineinfo */ str[0] = '\0'; /* ¤Þ¤ºÅ¹¤Î ¤Á ¤Î¥ê¥¹¥È */ for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex=CHAR_getItemIndex( shopindex , i ); if( ITEM_CHECKINDEX(itemindex) ){ itemname = ITEM_getChar( itemindex, ITEM_SECRETNAME ); makeEscapeString( itemname, escapedname, sizeof(escapedname)); cost = ITEM_getInt( itemindex, ITEM_COST ); /* ¶â³Û¤ÎÄ´À°¡eMERCHANTLEVEL¤Ë¤è¤Ã¤Æ ¤ï¤ë¡e */ cost *= NPC_Util_buyRate(cliindex); cl = ITEM_getInt( itemindex, ITEM_LEVEL ); imageno = ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER ); //oli = ITEM_getMemo( itemindex ); #if 0 snprintf( tmp, sizeof(tmp), "|%s|%d|%d|%d|%s", escapedname, cost, cl, imageno, oli ); #endif snprintf( tmp, sizeof(tmp), "|%s|%d|%d|%d|", escapedname, cost, cl, imageno ); strcat( str, tmp ); } } /* ±¤Ë¡bµÒ¤Î ¤Á ¤Î¥ê¥¹¥È */ for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex=CHAR_getItemIndex( cliindex , i ); if( ITEM_CHECKINDEX(itemindex) ){ cost = ITEM_getInt( itemindex, ITEM_COST ); /* ¶â³Û¤ÎÄ´À°¡eMERCHANTLEVEL¤Ë¤è¤Ã¤Æ ¤ï¤ë¡e */ cost *=NPC_Util_sellRate(cliindex); snprintf( tmp, sizeof(tmp), "|%d", cost ); strcat( str, tmp ); }else{ /* ¥¢¥¤ ¥à¤ò ¤Ã¤Æ¤Ê¤¤¾ì½ê¤Ë¤Ï0¤ò¤¤¤ì¤ë */ strcat( str, "|0" ); } } }
static void NPC_SimpleShopGetEscapedItemString( int shopindex, int cliindex, char *str ) { int i, cost, cl, imageno, itemindex; char *itemname; char tmp[1024]; char escapedname[256]; // char *oli; /* oli means onelineinfo */ str[0] = '\0'; for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex=CHAR_getItemIndex( shopindex , i ); if( ITEM_CHECKINDEX(itemindex) ){ itemname = ITEM_getChar( itemindex, ITEM_SECRETNAME ); makeEscapeString( itemname, escapedname, sizeof(escapedname)); cost = ITEM_getInt( itemindex, ITEM_COST ); cost *= NPC_Util_buyRate(cliindex); cl = ITEM_getInt( itemindex, ITEM_LEVEL ); imageno = ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER ); //oli = ITEM_getMemo( itemindex ); snprintf( tmp, sizeof(tmp), "|%s|%d|%d|%d|", escapedname, cost, cl, imageno ); strcat( str, tmp ); } } for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex=CHAR_getItemIndex( cliindex , i ); if( ITEM_CHECKINDEX(itemindex) ){ cost = ITEM_getInt( itemindex, ITEM_COST ); cost *=NPC_Util_sellRate(cliindex); snprintf( tmp, sizeof(tmp), "|%d", cost ); strcat( str, tmp ); }else{ strcat( str, "|0" ); } } }
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; }