chuyiwen_gmsv/npc/npc_simpleshop.c
2017-01-14 00:37:03 +09:00

727 lines
24 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "version.h"
#include <ctype.h>
#include "object.h"
#include "char_base.h"
#include "char.h"
#include "item.h"
#include "util.h"
#include "handletime.h"
#include "anim_tbl.h"
#include "npc_door.h"
#include "lssproto_serv.h"
#include "npcutil.h"
#include "npccreate.h"
#include "log.h"
/*
*
*
* 健丹奶矛件玄: init, talked, specialtalked
*
*
*/
static void NPC_SimpleShopOpenShopWindow( int meindex, int cliindex,
char *npcarg );
static void NPC_SimpleShopGetEscapedItemString( int shopindex,
int cliindex, char *str );
static BOOL NPC_SimpleShopProcessBuyMsg( char *msg, int shop, int cli );
static BOOL NPC_SimpleShopProcessSellMsg( char *msg, int shop, int cli );
static BOOL NPC_LimitBuyInShopProcessSellMsg(char *msg,int shop,int cli);
static BOOL NPC_SimpleShopFillItem( int meindex, char *npcarg );
static int NPC_SimpleShopGetItemNum( int meindex );
static void NPC_SimpleShopNormalWindow( int meindex,
int playerindex, char *str );
static int NPC_ShopWindowIndexToItemTableIndex( int charindex,
int shopwindowindex );
static BOOL NPC_SimpleShopOpenShopOrNot( char *msg, char *openshopstr );
//static void NPC_SimpleShopSetLeakLevel( int meindex );
#define NPC_SIMPLESHOPMAXBUYPRICE 9999
#define SIMPLESHOPTALKBUFSIZE 256
#define SIMPLESHOP_FATALERRSTR "好痛!对不起,最近状况不太佳。。。"
#define SIMPLESHOP_MAXINFINITITEM 40
enum{
OPENSHOPTOKEN=1,
MSGTOKEN,
MAINTOKEN,
BUYTOKEN,
OKBUYTOKEN,
SELLTOKEN,
OKSELLTOKEN,
POORTOKEN,
ITEMFULLTOKEN,
ANOTHERPLAYERTOKEN,
RAREITEMTOKEN,
THANKYOUTOKEN,
ITEMLISTTOKEN,
BUYINITEMLISTTOKEN,
};
void NPC_SimpleShopTalked( int meindex, int talker, char *msg, int color )
{
#define SHOPRANGE 3
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX];
if( CHAR_getInt( talker,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ){
return;
}
if( NPC_Util_charIsInFrontOfChar( talker, meindex, SHOPRANGE )
&& ! CHAR_getFlg( talker,CHAR_ISDIE ) ){
NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));
getStringFromIndexWithDelim( npcarg,"|", OPENSHOPTOKEN,token, sizeof(token));
if( NPC_SimpleShopOpenShopOrNot( msg, token )
&& NPC_Util_isFaceToFace( meindex, talker, SHOPRANGE ) ){
CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, talker );
NPC_SimpleShopOpenShopWindow( meindex, talker, npcarg );
}else{
int tokennum;
int i;
char tmp[NPC_UTIL_GETARGSTR_LINEMAX];
getStringFromIndexWithDelim( npcarg,"|", MSGTOKEN,token, sizeof(token));
tokennum = 1;
for( i=0;token[i]!='\0';i++ ){
if( token[i] == ',' ) tokennum++;
}
getStringFromIndexWithDelim( token,",", rand()%tokennum+1,tmp, sizeof(tmp));
CHAR_talkToCli( talker, meindex, tmp, CHAR_COLORWHITE );
}
}
}
void NPC_SimpleShopSpecialTalked( int meindex, int talker, char *msg, int color )
{
if( CHAR_getInt(talker,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER
&& NPC_Util_isFaceToFace( meindex, talker, SHOPRANGE ) ){
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX];
NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));
switch( tolower(msg[0]) ){
case 's':
{
int ret;
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX)!= talker ){
getStringFromIndexWithDelim( npcarg,"|",ANOTHERPLAYERTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow( meindex, talker, token );
return;
}
ret = getStringFromIndexWithDelim( msg, "|", 3, token, sizeof(token));
if( ret == FALSE ){
token[0] = 'e';
token[1] = '\0';
}
switch( tolower(token[0])){
case 'b':
if( (ret=NPC_SimpleShopProcessBuyMsg(msg,meindex,talker))
<0){
switch( ret ){
case -2:
getStringFromIndexWithDelim( npcarg,"|",POORTOKEN,
token,sizeof(token));
NPC_SimpleShopNormalWindow( meindex,talker,token);
break;
case -3:
getStringFromIndexWithDelim( npcarg,"|",
ITEMFULLTOKEN,
token,sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
break;
case -1:
default:
NPC_SimpleShopNormalWindow(meindex, talker,
SIMPLESHOP_FATALERRSTR
);
break;
}
}else{
NPC_SimpleShopFillItem( meindex, npcarg );
getStringFromIndexWithDelim(npcarg,"|",THANKYOUTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
}
break;
case 's':
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX) != talker ){
getStringFromIndexWithDelim( npcarg,"|",
ANOTHERPLAYERTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow( meindex, talker, token );
return;
}
if((ret=NPC_SimpleShopProcessSellMsg(msg,meindex,talker)) <0 ){
switch(ret){
case -2:
getStringFromIndexWithDelim( npcarg,"|",
RAREITEMTOKEN,
token, sizeof(token) );
NPC_SimpleShopNormalWindow( meindex,talker,token);
break;
case -1:
default:
NPC_SimpleShopNormalWindow(meindex, talker,
SIMPLESHOP_FATALERRSTR );
break;
}
}else{
getStringFromIndexWithDelim(npcarg,"|",THANKYOUTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
}
break;
case 'e':
default:
CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 );
break;
}
break;
}
case 'i':
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX)
== talker ){
NPC_SimpleShopOpenShopWindow( meindex, talker, npcarg );
}
break;
default:
break;
}
}
}
void NPC_LimitBuyInShopSpecialTalked( int meindex, int talker, char *msg, int color )
{
if( CHAR_getInt(talker,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER
&& NPC_Util_isFaceToFace( meindex, talker, SHOPRANGE ) ){
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX];
NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));
switch( tolower(msg[0]) ){
case 's':
{
int ret;
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX) != talker ){
getStringFromIndexWithDelim( npcarg,"|",
ANOTHERPLAYERTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow( meindex, talker, token );
return;
}
ret = getStringFromIndexWithDelim( msg, "|", 3, token, sizeof( token));
if( ret == FALSE ){
token[0] = 'e';
token[1] = '\0';
}
switch( tolower(token[0])){
case 'b':
if( ( ret = NPC_SimpleShopProcessBuyMsg( msg, meindex, talker)) < 0){
switch( ret ){
case -2:
getStringFromIndexWithDelim( npcarg,"|",POORTOKEN,
token,sizeof(token));
NPC_SimpleShopNormalWindow( meindex,talker,token);
break;
case -3:
getStringFromIndexWithDelim( npcarg,"|",
ITEMFULLTOKEN,
token,sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
break;
case -1:
default:
NPC_SimpleShopNormalWindow(meindex, talker,
SIMPLESHOP_FATALERRSTR
);
break;
}
}else{
NPC_SimpleShopFillItem( meindex, npcarg );
getStringFromIndexWithDelim(npcarg,"|",THANKYOUTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
}
break;
case 's':
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX) != talker ){
getStringFromIndexWithDelim( npcarg,"|",
ANOTHERPLAYERTOKEN,
token, sizeof(token));
NPC_SimpleShopNormalWindow( meindex, talker, token );
return;
}
if((ret=NPC_LimitBuyInShopProcessSellMsg(
msg,meindex,talker))<0){
switch(ret){
case -2:
getStringFromIndexWithDelim( npcarg,"|",
RAREITEMTOKEN,
token,sizeof(token));
NPC_SimpleShopNormalWindow( meindex,talker,token);
break;
case -1:
default:
NPC_SimpleShopNormalWindow(meindex, talker, SIMPLESHOP_FATALERRSTR
);
break;
}
}else{
getStringFromIndexWithDelim(npcarg,"|",THANKYOUTOKEN, token, sizeof(token));
NPC_SimpleShopNormalWindow(meindex,talker,token);
}
break;
case 'e':
default:
CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 );
break;
}
break;
}
case 'i':
if( CHAR_getWorkInt(meindex,CHAR_WORKSHOPCLIENTINDEX)
== talker ){
NPC_SimpleShopOpenShopWindow( meindex, talker, npcarg );
}
break;
default:
break;
}
}
}
/*
* int meindex : 饕及index
* int playerindex : 它奶件玉它毛请允皿伊奶乩□及index
* char *str :
*/
static void NPC_SimpleShopNormalWindow( int meindex, int playerindex,
char *str )
{
int fd;
int objindex;
char tmp[512], *name;
objindex = CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX);
name = CHAR_getChar( meindex, CHAR_NAME );
snprintf(tmp,sizeof(tmp),"W|%d|N|%s|123|%s", objindex, name, str );
fd = getfdFromCharaIndex(playerindex);
if( fd == -1 ) return;
lssproto_TK_send(fd,-1,tmp,CHAR_COLORWHITE );
}
/*
* 娄醒
* int charindex:平乓仿及奶件犯弁旦
* 忒曰袄
*/
static int NPC_ShopWindowIndexToItemTableIndex( int charindex,
int shopwindowindex )
{
int i, counter;
counter = 0;
for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){
if( ITEM_CHECKINDEX( CHAR_getItemIndex(charindex,i) ) ){
if( shopwindowindex == counter ) return i;
counter++;
}
}
return -1;
}
static BOOL NPC_SimpleShopProcessBuyMsg(char *msg, int shopindex,
int playerindex )
{
int shopwindowindex, itemtableindex,itemind;
int price, tmpgold;
char buf[64];
if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex))
return -1;
if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){
return -1;
}
shopwindowindex = atoi(buf);
itemtableindex=NPC_ShopWindowIndexToItemTableIndex( shopindex, shopwindowindex );
itemind = CHAR_getItemIndex(shopindex,itemtableindex );
if( ! ITEM_CHECKINDEX(itemind) ) return -1;
price = ITEM_getInt( itemind, ITEM_COST )
* NPC_Util_buyRate(playerindex);
tmpgold = CHAR_getInt(playerindex,CHAR_GOLD);
if( tmpgold < price ){
return -2;
}
if( ! NPC_Util_moveItemToChar(playerindex,itemind,TRUE ) ){
return -3;
}
CHAR_AddGold( playerindex, price );
CHAR_sendStatusString( playerindex , "P");
return 1;
}
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;
}
/*
*/
static int NPC_SimpleShopGetItemNum( int meindex )
{
int counter, i;
counter = 0;
for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){
if( ITEM_CHECKINDEX( CHAR_getItemIndex(meindex,i) ) ){
counter++;
}
}
return counter;
}
/*
* int meindex:愤坌及(饕及)奶件犯弁旦
* int cliindex:菸及奶件犯弁旦
*/
static void NPC_SimpleShopOpenShopWindow( int meindex, int cliindex,
char *npcarg )
{
int fd;
int objindex;
char tmp[1024*12], itemstr[1024 * 8];
char maincaption[SIMPLESHOPTALKBUFSIZE];
char buycaption[SIMPLESHOPTALKBUFSIZE];
char okbuycaption[SIMPLESHOPTALKBUFSIZE];
char sellcaption[SIMPLESHOPTALKBUFSIZE];
char oksellcaption[SIMPLESHOPTALKBUFSIZE];
char poorcaption[SIMPLESHOPTALKBUFSIZE];
char itemfullcaption[SIMPLESHOPTALKBUFSIZE];
getStringFromIndexWithDelim( npcarg,"|",MAINTOKEN,
maincaption,sizeof(maincaption) );
getStringFromIndexWithDelim( npcarg,"|",BUYTOKEN,
buycaption,sizeof(buycaption) );
getStringFromIndexWithDelim( npcarg,"|",OKBUYTOKEN,
okbuycaption,sizeof(okbuycaption) );
getStringFromIndexWithDelim( npcarg,"|",SELLTOKEN,
sellcaption,sizeof(sellcaption) );
getStringFromIndexWithDelim( npcarg,"|",OKSELLTOKEN,
oksellcaption,sizeof(oksellcaption) );
getStringFromIndexWithDelim( npcarg,"|",POORTOKEN,
poorcaption,sizeof(poorcaption));
getStringFromIndexWithDelim( npcarg,"|",ITEMFULLTOKEN,
itemfullcaption,sizeof(itemfullcaption));
tmp[0] = 0;
NPC_SimpleShopGetEscapedItemString( meindex, cliindex, itemstr );
objindex = CHAR_getWorkInt( meindex,CHAR_WORKOBJINDEX );
snprintf( tmp,sizeof(tmp),"S|%d|%s|%s|%s|"
"%s|%s|%s|%s|"
"-1|%d%s", objindex,
maincaption,
buycaption,
okbuycaption,
sellcaption,
oksellcaption,
poorcaption,
itemfullcaption,
NPC_SimpleShopGetItemNum( meindex ),
itemstr );
fd = getfdFromCharaIndex( cliindex );
if( fd == -1 )return;
lssproto_TK_send(fd, -1 ,tmp, CHAR_COLORWHITE );
}
/*
*/
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_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;
}
/*
*/
BOOL NPC_SimpleShopInit( int meindex )
{
unsigned int mlevel;
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
int createindex = CHAR_getInt( meindex, CHAR_NPCCREATEINDEX );
/* print("shopinit start\n" );*/
if( NPC_CHECKCREATEINDEX(createindex) ){
NPC_create[createindex].intdata[NPC_CREATETIME] = -1;
}
CHAR_setInt( meindex , CHAR_HP , 0 );
CHAR_setInt( meindex , CHAR_MP , 0 );
CHAR_setInt( meindex , CHAR_MAXMP , 0 );
CHAR_setInt( meindex , CHAR_STR , 0 );
CHAR_setInt( meindex , CHAR_TOUGH, 0 );
CHAR_setInt( meindex , CHAR_LV , 0 );
mlevel = ((100<<16)|(100<<0)); /* 晓匏2田奶玄互 丹午五及
票匏2田奶玄互 月午五及 */
CHAR_setInt( meindex, CHAR_MERCHANTLEVEL, mlevel );
CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 );
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESHOP );
CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );
CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));
if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){
print( "SHOP INIT ERROR: npcarg=%s\n", npcarg );
return FALSE;
}
/* print("shopinit end\n" );*/
return TRUE;
}
/*
* npcarg及中匀仇户及玄□弁件卞
* 仇氏卞切反,仍户氏仁分今中,仁分今中卅
*
* 娄醒
* 忒曰袄
* 钒仁卅日TRUE, 钒井卅中卅日FALSE
*/
static BOOL NPC_SimpleShopOpenShopOrNot( char *msg, char *openshopstr )
{
int i;
char buf[256];
i=1;
while(getStringFromIndexWithDelim(openshopstr,",",i,buf,sizeof(buf))){
if( strstr( msg, buf ) ) return TRUE;
i++;
}
return FALSE;
}