亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? trade.c

?? 最新主流石器時代源代碼,包含諸多目前流行功能代碼.
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include "version.h"
#include "correct_bug.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "readmap.h"
#include "object.h"
#include "char.h"
#include "char_base.h"
#include "lssproto_serv.h"
#include "npcutil.h"
#include "trade.h"
#include "log.h"
#include "handletime.h"
#include "buf.h"
#include "net.h"
#include "char_base.h"
#include "battle.h"
#include "npc_bus.h"
#include "char_talk.h"
#ifdef _TRADESYSTEM2	// (不可開) Syu ADD 新交易系統
#include "pet_skill.h"
#endif

#define TRADE_WAIT		"請稍候,連絡%s中···"
#define TRADE_NONE		"前方什麼人也沒有!"
#define	TRADE_OVERPLAYER	"前方不只一位玩家喔!"
#define	TRADE_NOWILL		"真是抱歉,對方不愿意跟你交易!"
#define	TRADE_TRADING		"%s正在與其他人交易···"
#define	TRADE_VANISHITEM	"丟在地上會消失的物品無法交易!"
#define TRADE_PETFULL		"%s寵物欄已滿,交易取消!"
#define	TRADE_ITEMFULL		"%s物品欄已滿,請整理後再交易~"
#define TRADE_CANCEL		"%s將交易取消了!"
#define TRADE_POOR		"%s錢不夠,無法交易!"
#define	TRADE_RICH		"%s金錢交易請勿超過一百萬!"
#define TRADE_TOORICH		"%s金錢將會超過一百萬!"
#define TRADE_POORLV		"%s等級不夠,無法照顧交易後的寵物!"
#define	TRADE_LOCK		"交易鎖定···"
#define	TRADE_SUCCESS		"交易OK!"
#define	TRADE_FAILED		"交易失敗!"
#define TRADE_FMPET		"家族守護獸無法交易!"

#define TRADE_RDCANCEL	"交易取消!"



#ifdef _ITEM_PILEFORTRADE
enum{
	TRADE_ITEM=0,
	TRADE_PET,
	TRADE_GOLD,
};

#define MAX_TRADELISTNUM 100
typedef struct _tagTradeList{
	int charaindex;
	int fd;
	int PetTi[5];
	int ItemTi[15];
	int ItemNum[15];
	int Golds;
	int use;
}STradeList;

STradeList TradeList[MAX_TRADELISTNUM][2];

void TRADE_ResetTradeList( int ti);
int TRADE_getTradeListIndex( void);
int TRADE_getMyTarget( int meindex );
BOOL TRADE_setTradeListIndex( int ti, int meindex, int toindex);
BOOL TRADE_addSomeTradeList( int meindex, int usTi, int *num, int type);
BOOL TRADE_getSomeTradeList( int meindex, STradeList *temp);

void TRADE_InitTradeList( void)
{
	int i;
	print("初始化交易系統...");
	for( i=0; i<MAX_TRADELISTNUM; i++){
		TRADE_ResetTradeList( i);
	}
	print("完成\n");
}

void TRADE_ResetTradeList( int ti)
{
	int i, fd;
	if( ti<0 || ti >= MAX_TRADELISTNUM )return;
	for( i=0; i<5; i++){
		TradeList[ti][0].PetTi[i] = -1;
		TradeList[ti][1].PetTi[i] = -1;
	}
	for( i=0; i<15; i++){
		TradeList[ti][0].ItemTi[i] = -1;
		TradeList[ti][0].ItemNum[i] = -1;
		TradeList[ti][1].ItemTi[i] = -1;
		TradeList[ti][1].ItemNum[i] = -1;
	}

	TradeList[ti][0].Golds = 0;
	TradeList[ti][1].Golds = 0;

	
	if( CHAR_CHECKINDEX(TradeList[ti][0].charaindex)){
		fd = getfdFromCharaIndex( TradeList[ti][0].charaindex);
		CONNECT_setTradeList( fd, -1);
	}
	if( CHAR_CHECKINDEX(TradeList[ti][1].charaindex)){
		fd = getfdFromCharaIndex( TradeList[ti][1].charaindex);
		CONNECT_setTradeList( fd, -1);
	}

	TradeList[ti][0].charaindex = -1;
	TradeList[ti][1].charaindex = -1;
	TradeList[ti][0].fd = -1;
	TradeList[ti][1].fd = -1;
	
	TradeList[ti][0].use = 0;
	TradeList[ti][1].use = 0;

}

int TRADE_getTradeListIndex( void)
{
	int i;
	static int tradeTi=0;
	if( tradeTi < 0 ) tradeTi = 0;
	for( i=0; i<MAX_TRADELISTNUM; i++){
		if( TradeList[tradeTi][0].use == 0 && TradeList[tradeTi][1].use == 0 ){
			return tradeTi;
		}
		tradeTi++;
		if( tradeTi >= MAX_TRADELISTNUM ) tradeTi = 0;

	}
	return -1;
}

BOOL TRADE_setTradeListIndex( int ti, int meindex, int toindex)
{
	int fd;
	if( ti<0 || ti >= MAX_TRADELISTNUM ) return FALSE;
	if( TradeList[ti][0].use == 1 || TradeList[ti][1].use == 1 ) return FALSE;
	TRADE_ResetTradeList( ti);
	TradeList[ti][0].charaindex = meindex;
	TradeList[ti][1].charaindex = toindex;
	TradeList[ti][0].use = 1;
	TradeList[ti][1].use = 1;

	fd = getfdFromCharaIndex( meindex);
	TradeList[ti][0].fd = fd;
	CONNECT_setTradeList( fd, ti);

	fd = getfdFromCharaIndex( toindex);
	TradeList[ti][1].fd = fd;
	CONNECT_setTradeList( fd, ti);
	return TRUE;
}

void TRADE_CheckTradeListUser( void)
{
	int i, usenum=0, replace=0, freenum=0;
	for( i=0; i<MAX_TRADELISTNUM; i++){
		if( TradeList[i][0].use == 0 && TradeList[i][1].use == 0 ){
			freenum++;
			continue;
		}
		if( CHAR_CHECKINDEX( TradeList[i][0].charaindex ) &&
			CHAR_getWorkInt( TradeList[i][0].charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE &&
			CHAR_CHECKINDEX( TradeList[i][1].charaindex ) &&
			CHAR_getWorkInt( TradeList[i][1].charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){
			usenum++;
			continue;
		}else{
			TRADE_ResetTradeList( i);
			replace ++;
		}
	}
}

int TRADE_getMyTarget( int meindex )
{
	int i, fd, ti, side=-1;
	fd = getfdFromCharaIndex( meindex);
	ti = CONNECT_getTradeList( fd);

	if( ti<0 || ti >= MAX_TRADELISTNUM ) return -1;
	if( TradeList[ti][0].use == 0 || TradeList[ti][1].use == 0 ) return -1;

	for( i=0; i<2; i++){
		if( TradeList[ti][i].charaindex == meindex &&
			TradeList[ti][i].fd == fd ){
			side = (i+1)%2;
			if( !CHAR_CHECKINDEX( TradeList[ti][side].charaindex) ) return -1;
			if( TradeList[ti][side].charaindex == meindex ) return -1;
			if( TradeList[ti][side].fd != getfdFromCharaIndex( TradeList[ti][side].charaindex) ) return -1;

			return TradeList[ti][side].charaindex;
		}
	}
	return -1;
}

BOOL TRADE_addSomeTradeList( int meindex, int usTi, int *num, int type)
{
	int i, fd, ti, side=-1, toindex=-1;
	fd = getfdFromCharaIndex( meindex);
	ti = CONNECT_getTradeList( fd);
	if( ti <0 || ti >= MAX_TRADELISTNUM ) return FALSE;
	toindex =-1;
	if( TradeList[ti][0].use != 1 || TradeList[ti][1].use != 1 ) return FALSE;
	for( i=0; i<2; i++){
		if( TradeList[ti][i].charaindex != meindex ){
			continue;
		}
		side = i;
		toindex = TradeList[ti][((side+1)%2)].charaindex;
		if( !CHAR_CHECKINDEX( toindex) ) return FALSE;
		break;
	}
	if( side == -1 ) return FALSE;
	switch( type){
	case TRADE_ITEM:
		{
			int itemindex, MeMaxPile;
			MeMaxPile = CHAR_getMyMaxPilenum( meindex);//最大堆疊數
			if( usTi < CHAR_STARTITEMARRAY || usTi >= CHAR_MAXITEMHAVE ) return FALSE;
			itemindex = CHAR_getItemIndex( meindex, usTi );
			if( !ITEM_CHECKINDEX( itemindex))	return FALSE;

			if( ITEM_getInt( itemindex, ITEM_VANISHATDROP) == 1 ){
				char buf[256];
				sprintf( buf, "%s無法交易。", ITEM_getChar( itemindex, ITEM_NAME) );
				CHAR_talkToCli( meindex, -1, buf, CHAR_COLORYELLOW);
				return FALSE;
			}

			if( ITEM_getInt( itemindex, ITEM_CANBEPILE) == 1 ){//可堆疊
				int itemMaxPile = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
				if( itemMaxPile < 0  ) return FALSE;
				//ITEM_USEPILENUMS
				for( i=0; i<15; i++){
					if( TradeList[ti][side].ItemTi[i] != usTi ) continue;
					if( TradeList[ti][side].ItemNum[i] >= MeMaxPile ||
						TradeList[ti][side].ItemNum[i] >= itemMaxPile ) return FALSE;

					TradeList[ti][side].ItemNum[i] += 1;
					if( num != NULL ) *num = TradeList[ti][side].ItemNum[i];
					return TRUE;
				}
			}
			for( i=0; i<15; i++){
				if( TradeList[ti][side].ItemTi[i] != -1 ) continue;
				TradeList[ti][side].ItemTi[i] = usTi;
				TradeList[ti][side].ItemNum[i] = 1;
				if( num != NULL ) *num = TradeList[ti][side].ItemNum[i];
				return TRUE;
			}
		}
		break;
	case TRADE_PET:
		{
			int petindex;
			if( usTi < 0 || usTi >= CHAR_MAXPETHAVE ) return FALSE;
			petindex = CHAR_getCharPet( meindex, usTi );
			if( !CHAR_CHECKINDEX(petindex))	return FALSE;
			if( CHAR_getInt( petindex, CHAR_PETFAMILY) == 1 ){
				CHAR_talkToCli( meindex, -1, "家族守護獸無法交易。", CHAR_COLORYELLOW);
				return FALSE;//家族守護獸
			}
			if( CHAR_getWorkInt( toindex, CHAR_PickAllPet) != TRUE ){
				if( CHAR_getInt( petindex, CHAR_LV) > (CHAR_getInt( toindex, CHAR_LV)+5) &&
					(CHAR_getInt( toindex, CHAR_TRANSMIGRATION ) <= 0 ) ){
					CHAR_talkToCli( meindex, -1, "對方無法照顧該寵物。", CHAR_COLORYELLOW);
					return FALSE;
				}
			}
			for( i=0; i<5; i++){
				if( TradeList[ti][side].PetTi[i] == usTi ) return FALSE;
			}
			for( i=0; i<5; i++){
				if( TradeList[ti][side].PetTi[i] != -1 ) continue;
				TradeList[ti][side].PetTi[i] = usTi;
				return TRUE;
			}
		}
		break;
	case TRADE_GOLD:
		TradeList[ti][side].Golds = usTi;
		return TRUE;
		break;
	}

	return FALSE;
}

BOOL TRADE_getSomeTradeList( int meindex, STradeList *temp)
{
	int i, fd, ti, side=-1;
	fd = getfdFromCharaIndex( meindex);
	ti = CONNECT_getTradeList( fd);
	if( ti <0 || ti >= MAX_TRADELISTNUM ) return FALSE;
	if( TradeList[ti][0].use != 1 || TradeList[ti][1].use != 1 ) return FALSE;
	for( i=0; i<2; i++){
		if( TradeList[ti][i].charaindex != meindex ) continue;
		side = i;
		break;
	}
	if( side == -1 ) return FALSE;
	
	memcpy( temp, &TradeList[ti][side], sizeof( STradeList) );
	return TRUE;
}
BOOL TRADE_CheckTradeList( int meindex, STradeList *temp1, int toindex, STradeList *temp2);
#endif

void TRADE_Will(int fd, int meindex, char* message);
void TRADE_ShowItem(int fd, int meindex, char* message);
void TRADE_Close(int fd, int meindex, char* message);

void TRADE_SwapItem(int meindex, int toindex, char* message, int fd, char* mycharaname, int tofd, char* tocharaname);

int TRADE_CheckItembuf(int fd, int meindex, int toindex, int tofd, char* mycharaname, char* tocharaname);
//BOOL TRADE_ChangeItem(int meindex, int toindex, char *a, char *b, int item1, int item2, int itemindex1, int itemindex2);
BOOL TRADE_HandleItem( int meindex, int showindex, char *message, char *outmess);
BOOL TRADE_HandleGold( int meindex, int showindex, char *message, char *outmess);
BOOL TRADE_HandlePet( int meindex, int showindex, char *message, char *outmess);



void CHAR_Trade(int fd, int index, char* message)
{
   char		firstToken[64];
   // shan 以下注掉是不必要的動作  2002/03/05
   //char		messageeraseescape[512];
   char*	messagebody;
   
   {   		
   	if (*message == 0) 	return;
    if (!CHAR_CHECKINDEX(index))	return;

   	CHAR_getMessageBody( message, firstToken, sizeof(firstToken), &messagebody);

	switch( tolower( firstToken[0]) ){
	   case 'd':	// 尋找前方玩家
		
		TRADE_Search(fd, index, message);
	   	break;
/*	   case 'c':
	   	TRADE_Will(fd, index, message);
	   	break;
*/	   case 't':	// 顯示交易的物品、金錢、寵物
	   	TRADE_ShowItem(fd, index, message);
	   	break;
	   case 'w':	// 關閉交易
		print(" TRADE_Close:%d ", index);
		TRADE_Close(fd, index, message);
	   	break;
	   default:
	   	break;
	}
   }
}

BOOL TRADE_Search(int fd, int meindex, char* message)
{
   int		objbuf[16];
   int		front_x, front_y, i, found_count;
   BOOL		found =  FALSE, searchflg = FALSE;
   int 		cnt = 0, tofd = -1, checkfd = -1;
   char		msgbuf[1024], mycharaname[256], tocharaname[256];
   char		token[256];

   if (!CHAR_CHECKINDEX(meindex))	return FALSE;

#if 0	// Robin fix
//#ifdef _DEATH_FAMILY_GM_COMMAND	// WON ADD 家族戰GM指令
	{
		char	msgbuf[512];
		snprintf( msgbuf, sizeof( msgbuf), "跨星系家族PK,無法交易");
		CHAR_talkToCli( meindex, -1, msgbuf, CHAR_COLORWHITE);
		return FALSE;
	}
#endif

   // 若玩家狀態為交易中或交易鎖定中則不予處理
   if (CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_TRADING
   	|| CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_LOCK)
   		return FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产真实乱对白精彩久久| 五月婷婷欧美视频| 精品国产麻豆免费人成网站| 欧美日韩国产高清一区二区三区| 91视频www| 欧美专区在线观看一区| 欧美日韩一区二区在线观看视频| 在线观看免费成人| 91精品一区二区三区久久久久久| 欧美乱妇一区二区三区不卡视频| 欧美精品精品一区| 精品免费日韩av| 欧美国产日产图区| 亚洲黄色av一区| 免费在线欧美视频| 国产宾馆实践打屁股91| 99久久国产综合精品色伊| 91福利国产精品| 日韩欧美国产精品| 国产精品免费av| 亚洲愉拍自拍另类高清精品| 免费看欧美女人艹b| 国产精品小仙女| 欧亚洲嫩模精品一区三区| 日韩欧美亚洲一区二区| 中文字幕第一区综合| 亚洲成人动漫在线免费观看| 久久国产麻豆精品| 99国产精品一区| 欧美成人精品二区三区99精品| 中文字幕免费不卡在线| 午夜久久久影院| 国产.欧美.日韩| 欧美日韩国产另类一区| 国产免费久久精品| 日韩成人免费电影| 97久久精品人人做人人爽50路| 欧美一卡在线观看| 亚洲日本乱码在线观看| 久久97超碰色| 欧美日韩免费在线视频| 国产精品色哟哟| 另类中文字幕网| 欧美日韩综合一区| 成人欧美一区二区三区| 另类小说视频一区二区| 色综合久久中文综合久久牛| 久久影视一区二区| 美女视频黄 久久| 欧美写真视频网站| 成人欧美一区二区三区白人| 国产精品主播直播| 精品99一区二区| 日韩av一区二| 欧美日本韩国一区| 一区二区三区四区精品在线视频 | 91麻豆免费在线观看| 日韩欧美国产电影| 日韩av成人高清| 欧美日韩国产首页| 日韩国产在线观看| 欧美亚洲一区二区在线| 亚洲日本一区二区| 99久久国产综合精品女不卡| 国产精品国产三级国产aⅴ中文| 激情综合网天天干| 欧美精品一区二区高清在线观看 | 精品国产百合女同互慰| 免费成人在线观看| 日韩欧美色综合| 久久精品国产一区二区三| 欧美一级高清大全免费观看| 天堂影院一区二区| 制服丝袜亚洲网站| 美洲天堂一区二卡三卡四卡视频| 制服丝袜亚洲播放| 久久精品国产久精国产| 久久精品一区二区三区四区| 国产精品99久久久久久有的能看| 国产午夜精品福利| 不卡电影一区二区三区| 亚洲日本在线a| 欧美日韩高清在线| 看片网站欧美日韩| 国产精品青草综合久久久久99| 国产iv一区二区三区| 亚洲同性gay激情无套| 色婷婷av久久久久久久| 五月综合激情日本mⅴ| 26uuu欧美日本| 91视频免费观看| 日本一不卡视频| 久久久久久麻豆| 94-欧美-setu| 日韩高清在线一区| 日本一区二区三区电影| 欧美影片第一页| 精品一区二区三区在线播放| 亚洲天堂精品在线观看| 51精品国自产在线| 成人自拍视频在线| 午夜精品aaa| 国产精品青草综合久久久久99| 在线一区二区三区| 国产精品一区在线| 午夜视频在线观看一区二区 | 国产精品女上位| 欧美日韩亚洲丝袜制服| 国产成人免费xxxxxxxx| 亚洲美腿欧美偷拍| www久久精品| 欧美性一二三区| 国产精品99久久久久久似苏梦涵| 一区二区日韩av| 久久久精品日韩欧美| 欧美在线制服丝袜| 国产ts人妖一区二区| 午夜欧美一区二区三区在线播放| 久久久久久久久久久久久夜| 欧美午夜精品免费| 成人丝袜高跟foot| 精品一区二区三区在线播放视频| 亚洲另类一区二区| 欧美激情综合在线| 欧美成人aa大片| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产乱人伦偷精品视频不卡| 日本三级韩国三级欧美三级| 1区2区3区精品视频| 久久精品视频网| 精品福利一区二区三区免费视频| 欧美日韩色一区| 欧美最新大片在线看| 99国产精品视频免费观看| 国产伦精品一区二区三区在线观看| 亚洲国产欧美一区二区三区丁香婷| 中文字幕成人在线观看| 久久久精品综合| 久久综合九色综合欧美亚洲| 欧美一区二区三区在线电影| 欧美精品在线一区二区三区| 欧美视频一二三区| 色天天综合色天天久久| 日本韩国精品在线| 91黄视频在线观看| 在线免费精品视频| 欧日韩精品视频| 欧美日韩免费在线视频| 精品婷婷伊人一区三区三| 欧美亚洲高清一区| 91精品国产一区二区| 欧美videofree性高清杂交| 91精品国产色综合久久ai换脸| 日韩一区二区免费视频| 欧美精品一区二区三区在线| 久久久精品国产免大香伊| 国产欧美日韩在线看| 1024国产精品| 亚洲精品美国一| 亚洲高清免费观看 | 久久久久久电影| 久久蜜桃一区二区| 中文字幕不卡的av| 亚洲人成精品久久久久| 亚洲国产精品久久一线不卡| 丝袜美腿亚洲色图| 国产一区二区三区久久悠悠色av| 国产精品一二三在| 色综合夜色一区| 色哟哟在线观看一区二区三区| 成人av在线一区二区| 色悠悠久久综合| 欧美精选一区二区| 久久久久久夜精品精品免费| 亚洲色图.com| 日本三级亚洲精品| av一二三不卡影片| 欧美另类一区二区三区| 久久久久久久久99精品| 一区二区理论电影在线观看| 奇米精品一区二区三区在线观看| 国产精品白丝jk白祙喷水网站| 97se亚洲国产综合在线| 日韩免费在线观看| 亚洲欧美日韩久久精品| 另类小说欧美激情| 91免费精品国自产拍在线不卡| 欧美一个色资源| 亚洲免费资源在线播放| 狠狠网亚洲精品| 欧美男生操女生| 1024成人网| 国产在线精品免费av| 欧美日韩一级黄| 中文字幕日韩一区| 国产一区二区影院| 欧美日韩在线一区二区| 国产精品灌醉下药二区| 韩国午夜理伦三级不卡影院| 欧美三级视频在线|