?? npc_simpleshop.c
字號:
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;
}
/*
* 丐月平乓仿奶件犯弁旦及平乓仿卞}云心六window毛釩仁兇戶及
* 樹 毛芨尹月[
* 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 );
}
/*
* TK匹霜月兇戶及 儂 毛勾仁月[
*/
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';
/* 引內(nèi)饕及 切 及伉旦玄 */
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 );
/* 嗯喊及譬幫[MERCHANTLEVEL卞方勻化 歹月[ */
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 );
}
}
/* 戚卞}菸及 切 及伉旦玄 */
for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){
itemindex=CHAR_getItemIndex( cliindex , i );
if( ITEM_CHECKINDEX(itemindex) ){
cost = ITEM_getInt( itemindex, ITEM_COST );
/* 嗯喊及譬幫[MERCHANTLEVEL卞方勻化 歹月[ */
cost *=NPC_Util_sellRate(cliindex);
snprintf( tmp, sizeof(tmp), "|%d", cost );
strcat( str, tmp );
}else{
/* 失奶 丞毛 勻化卅中樺赭卞反0毛中木月 */
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];
/* 域莢撩 仄兇丐午反2蘸午綜日卅中方丹卞允月 */
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));
/* 失奶 丞 兇六月[撩 仄兇日return FALSE */
if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){
print( "SHOP INIT ERROR: npcarg=%s\n", npcarg );
return FALSE;
}
/* print("shopinit end\n" );*/
return TRUE;
}
/*
* 饕它奶件玉它毛釩仁井升丹井 爛允月[
* npcarg及中勻仇戶及玄□弁件卞
* 仇氏卞切反,仍戶氏仁分今中,仁分今中卅
* 及方丹卞俜 今木兇 儂 毛手午卞 爛允月[仇及午五及犯伉立正反","[
*
* 婁醒
* msg:皿伊奶乩□互仄扎屯勻兇 儂
* openshopstr: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;
}
/*
* 允屯化及手切手及毛域莢摹 今木兇橇謫卞允月[
*/
#if 0
static void NPC_SimpleShopSetLeakLevel( int meindex )
{
int i, itemindex;
for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){
itemindex=CHAR_getItemIndex(meindex,i);
if( ITEM_CHECKINDEX(itemindex)){
ITEM_setInt(itemindex,ITEM_LEAKLEVEL, 1 );
}
}
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -