⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_itemshop.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
						{							return FALSE;						}						return TRUE;					}					i++;						}			}else{				/*--失奶  丞互  15-25  及溥匹霜日木凶桦宁--*/				int start;				int end;				/* "-"匹嗉濠日木凶铵户及醒袄午  及醒袄毛潸  --*/				getStringFromIndexWithDelim( buff2, "-", 1, argstr, sizeof(argstr));				start = atoi( argstr);				getStringFromIndexWithDelim( buff2, "-", 2 ,argstr, sizeof(argstr));				end = atoi( argstr);				end++;				/*--  寞互菅卞卅匀化中凶日}  木赘尹月**/				if(start > end){					gold = start;					start = end;					end = gold;				}				/*--"-"匹嗉濠日木凶坌及失奶  丞毛树  毛  月--*/				for(; start < end ; start++ ) {					if( ITEM_getcostFromITEMtabl( start) != -1) {						if ( i == select) {							/*---失奶  丞及综岳---*/							/*--蜊醒坌综岳--*/							if(NPC_AddItemBuy(meindex, talker, start, kosuu, rate) != TRUE)							{								return FALSE;							}							return TRUE;						}						i++;					}				}			}		}	}	return FALSE;}/*--------------------------------------------- *失奶  丞及馨笛毛垫丹 *--------------------------------------------*/BOOL NPC_AddItemBuy(int meindex, int talker,int itemID,int kosuu,double rate){	int itemindex;	int i;	int gold;	int ret;	int maxgold;	gold = ITEM_getcostFromITEMtabl( itemID);	gold = (int)(gold * rate);	maxgold = gold * kosuu;	if(CHAR_getInt( talker, CHAR_GOLD) < maxgold ) return FALSE;	if( addNpcFamilyTax( meindex, talker, maxgold*0.4 ) )		print(" FamilyTaxDone! ");	else		print(" FamilyTaxError!");	for(i = 0 ; i < kosuu ; i++){		itemindex = ITEM_makeItemAndRegist( itemID);				if(itemindex == -1) return FALSE;		ret = CHAR_addItemSpecificItemIndex( talker, itemindex);		if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {			print( "npc_itemshop.c: additem error itemindex[%d]\n", itemindex);			ITEM_endExistItemsOne( itemindex);			return FALSE;		}		CHAR_sendItemDataOne( talker, ret);	}	CHAR_DelGold( talker, maxgold);	//CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD);	return TRUE;}//选择 (买,卖,出去) 的小视窗void NPC_ItemShop_Menu(int meindex,int talker){		char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char	token[NPC_UTIL_GETARGSTR_LINEMAX];	char buff[256];	int fd = getfdFromCharaIndex( talker);    //argstr取得整个设定档的讯息: 例如->buy_rate:1.0|sell_rate:0.2|buy_msg:买,购买,感谢您,kau,buy............. (中间的分格号是读入时加入的)    if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {		print("shop_GetArgStr_Err");       	return;    }    	//token为视窗上面的title文字  例如: 萨姆吉尔的防具店|欢迎光临    NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff));	snprintf(token, sizeof(token),"%s|%s",CHAR_getChar( meindex, CHAR_NAME), buff);	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMENU, 				WINDOW_BUTTONTYPE_NONE, 				CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG,				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),				token);}void NPC_ItemShop_SellMain(int meindex,int talker,int before){	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char	token[NPC_UTIL_GETARGSTR_BUFSIZE];	int fd = getfdFromCharaIndex( talker);	//取得npc设定资料    if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {       	print("shop_GetArgStr_Err");       	return;    }	if(before != -1) {		sprintf(token,"1|0");		lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN							+CHAR_getWorkInt(meindex,NPC_SHOP_WORK_NO), 					WINDOW_BUTTONTYPE_NONE, 					CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG,					CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),					token);		}else{		char token2[NPC_UTIL_GETARGSTR_BUFSIZE];		char buff2[256];	   	char buff[256];		NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff));		NPC_Util_GetStrFromStrWithDelim( argstr, "sell_main", buff2, sizeof( buff));		sprintf( token, "1|1|%d|%s|%s|%s|", CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG,				CHAR_getChar( meindex, CHAR_NAME), buff, buff2);		NPC_Util_GetStrFromStrWithDelim( argstr, "stone_msg", buff, sizeof( buff));		if(CHAR_getWorkInt(meindex,NPC_SHOP_WORK_EXPRESS) == 1 ) {			NPC_Util_GetStrFromStrWithDelim( argstr, "exrealy_msg", buff2, sizeof(buff2));		}else{			NPC_Util_GetStrFromStrWithDelim( argstr, "realy_msg", buff2, sizeof( buff2));		}		sprintf( token2,"%s|%s|", buff, buff2);		NPC_GetLimtItemList( talker,argstr, token2, -1);//详细玩家要卖出的道具资料		strncat( token, token2, sizeof( token));		lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN+					CHAR_getWorkInt(meindex,NPC_SHOP_WORK_NO), 					WINDOW_BUTTONTYPE_NONE, 					CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG,					CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),					token);	}}int NPC_GetLimtItemList(int talker, char *argstr, char* token2,int sell){	char token[NPC_UTIL_GETARGSTR_LINEMAX];	char buff[NPC_UTIL_GETARGSTR_LINEMAX];	char token3[NPC_UTIL_GETARGSTR_LINEMAX];	int k = 0 , i = 1 , j = 0;	int imax;	int itemtype = 0;	int itemindex;	int okflg = 0;	char buf[256];	int flg=0;	int cost;	if(sell == -1 ){		i = CHAR_STARTITEMARRAY;		imax = CHAR_MAXITEMHAVE;		flg = -1;	}else{		i= sell;		imax= sell + 1;		flg = 1;	}		for( ; i < imax ; i++ ){		okflg=0;		itemindex = CHAR_getItemIndex( talker , i );				if( ITEM_CHECKINDEX( itemindex) ){			if( NPC_Util_GetStrFromStrWithDelim( argstr,"LimitItemType", buff, sizeof( buff)) != NULL ){				k = 1;				while(getStringFromIndexWithDelim(buff , "," , k, token, sizeof(token)) != FALSE ){					k++;					for(j = 0 ; j < ITEM_CATEGORYNUM+3 ; j++){						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));								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));									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));									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));									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));							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));							okflg = 1;						}					}				}			}						if(okflg == 0) {				cost = NPC_GetSellItemList(itemindex, 1, argstr, token3, i, sell);				if(sell != -1) return -1;				strncat( token2, token3, sizeof( token3));			}					}	}	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,			"%s|%d|%d|%d|%s|%d|",			name, flg, cost,			ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),			escapedname, select	);	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);	if( select < CHAR_STARTITEMARRAY || select >= CHAR_MAXITEMHAVE ) return FALSE;	k = select;	itemindex = CHAR_getItemIndex( talker , k);	cost = NPC_GetLimtItemList( talker,argstr, token2,select);	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;	}	{		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);	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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -