npc_itemshop.c

来自「石器时代8.0服务端完整源代码。可以直接编译」· C语言 代码 · 共 1,386 行 · 第 1/3 页

C
1,386
字号
#endif					k++;#ifdef _ITEM_TYPETABLE					for(j = 0 ; j < cmpmaxitem ; j++){#else					for(j = 0 ; j < ITEM_CATEGORYNUM+3 ; j++){#endif						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));#ifdef _NPC_SHOPALTER01								print("Change->itemtype = %d",itemtype);								print("Change->token2:%s\n",token2);								print("Change->token3:%s\n",token3);								if( sLimt )								{									if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){										sprintf(sLimt,"%s|%s",sLimt,sbuf);										if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);    											if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);  												if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){													sprintf(sLimt,"%s|%s",sLimt,sbuf);    												}											}										}									}								}#endif								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));#ifdef _NPC_SHOPALTER01									print("Change->itemtype = 30");									print("Change->token2:%s\n",token2);									print("Change->token3:%s\n",token3);									if( sLimt )									{										if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);											if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);    												if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){													sprintf(sLimt,"%s|%s",sLimt,sbuf); 													if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){														sprintf(sLimt,"%s|%s",sLimt,sbuf);    													}												}											}										}									}#endif									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));#ifdef _NPC_SHOPALTER01									print("Change->itemtype = 40");									print("Change->token2:%s\n",token2);									print("Change->token3:%s\n",token3);									if( sLimt )									{										if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);											if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);    												if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){													sprintf(sLimt,"%s|%s",sLimt,sbuf); 													if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){														sprintf(sLimt,"%s|%s",sLimt,sbuf);    													}												}											}										}									}#endif									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));#ifdef _NPC_SHOPALTER01									print("Change->itemtype = 50");									print("Change->token2:%s\n",token2);									print("Change->token3:%s\n",token3);									if( sLimt )									{										if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);											if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);    												if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){													sprintf(sLimt,"%s|%s",sLimt,sbuf);    													if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){														sprintf(sLimt,"%s|%s",sLimt,sbuf);    													}												}											}										}									}#endif									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));#ifdef _NPC_SHOPALTER01							print("Change->1\n");							print("Change->token2:%s\n",token2);							print("Change->token3:%s\n",token3);							if( sLimt )							{								if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){									sprintf(sLimt,"%s|%s",sLimt,sbuf);									if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){										sprintf(sLimt,"%s|%s",sLimt,sbuf);    										if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);    											if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);    											}										}									}								}							}#endif							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));#ifdef _NPC_SHOPALTER01							print("Change->2\n");							print("Change->token2:%s\n",token2);							print("Change->token3:%s\n",token3);							if( sLimt )							{								if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){									sprintf(sLimt,"%s|%s",sLimt,sbuf);									if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){										sprintf(sLimt,"%s|%s",sLimt,sbuf);    										if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){											sprintf(sLimt,"%s|%s",sLimt,sbuf);											if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){												sprintf(sLimt,"%s|%s",sLimt,sbuf);    											}										}									}								}							}#endif							okflg = 1;						}					}				}			}						if(okflg == 0) {				cost = NPC_GetSellItemList(itemindex, 1, argstr, token3, i, sell);				if(sell != -1) return -1;				strncat( token2, token3, sizeof( token3));#ifdef _NPC_SHOPALTER01				print("Change->4\n");				print("Change->token2:%s\n",token2);				print("Change->token3:%s\n",token3);				if( sLimt )				{					if( getStringFromIndexWithDelim(token3 , "|" , 2, sbuf, sizeof( sbuf)) ){						sprintf(sLimt,"%s|%s",sLimt,sbuf);						if( getStringFromIndexWithDelim(token3 , "|" , 3, sbuf, sizeof( sbuf)) ){							sprintf(sLimt,"%s|%s",sLimt,sbuf);    							if( getStringFromIndexWithDelim(token3 , "|" , 6, sbuf, sizeof( sbuf)) ){								sprintf(sLimt,"%s|%s",sLimt,sbuf);  								if( getStringFromIndexWithDelim(token3 , "|" , 7, sbuf, sizeof( sbuf)) ){									sprintf(sLimt,"%s|%s",sLimt,sbuf);    								}							}						}					}				}#endif			}					}	}	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,#ifdef _ITEM_PILENUMS			"%s|%d|%d|%d|%s|%d|%d|",#else			"%s|%d|%d|%d|%s|%d|",#endif			name, flg, cost,			ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),			escapedname, select#ifdef _ITEM_PILENUMS			,ITEM_getInt( itemindex, ITEM_USEPILENUMS)#endif	);	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);#ifdef _ITEM_PILENUMS	getStringFromIndexWithDelim(data , "|" ,2, token, sizeof( token));	sellnum = atoi(token);#endif	if( select < CHAR_STARTITEMARRAY || select >= CHAR_MAXITEMHAVE ) return FALSE;	k = select;	itemindex = CHAR_getItemIndex( talker , k);#ifdef _NPC_SHOPALTER01	cost = NPC_GetLimtItemList( talker,argstr, token2,select, NULL);#else	cost = NPC_GetLimtItemList( talker,argstr, token2,select);#endif	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;	}#ifdef _ITEM_PILENUMS	if( NPC_DelItem( talker, k, sellnum) == FALSE ) return FALSE;#else	{		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);#endif	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 + =
减小字号Ctrl + -
显示快捷键?