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

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

?? npc_fmwarpman.c

?? 最新主流石器時代源代碼,包含諸多目前流行功能代碼.
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include "version.h"
#include <time.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npc_fmwarpman.h"
#include "npc_scheduleman.h"
#include "readmap.h"
#include "log.h"
#include "battle.h"
#include "handletime.h"
#include "family.h"
#include "errno.h"

#define FMWARPMAN_INIT_LOOPTIME		600	// 0.1秒
#define FMWARPMAN_FREE_LOOPTIME		9000	// 1.5秒
#define FMWARPMAN_BUSY_LOOPTIME		3000	// 0.5秒
#define FMWARPMAN_WAIT_LOOPTIME		18000	// 3秒
#define FMWARPMAN_CLEANPLACE		59
//#define FMWARPMAN_CLEANPLACE		9
#define	TRUE	1
#define FALSE	0
// CoolFish Rem 2002/2/25
// #define MANOR	4

enum {
	NPC_WORK_MODEFLAG =  CHAR_NPCWORKINT1,
	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT2,
	NPC_WORK_WARPFLOOR = CHAR_NPCWORKINT3,
	NPC_WORK_FMNUMI = CHAR_NPCWORKINT4,
	NPC_WORK_FMNUMII = CHAR_NPCWORKINT5,
	NPC_WORK_ID = CHAR_NPCWORKINT6,
	NPC_WORK_TIMEFLAG = CHAR_NPCWORKINT9,
	NPC_WORK_TALKFLAG = CHAR_NPCWORKINT10,
	NPC_WORK_CleanTime = CHAR_NPCWORKINT11,
};

enum {
	NPC_STATEINIT,
	NPC_STATEFREE,
	NPC_STATEBUSY,
	NPC_STATEWAIT,
};

enum {
	NPC_WORK_WINFMNAME = CHAR_NPCWORKCHAR1,
};

void NPC_ERR_FMDiSP(int meindex, int talker, int errNO);
static void NPC_FMWarpMan_selectWindow(int meindex, int toindex, int num, int select);
void NPC_FMBATTLESET(int floor, int index1, int index2, int flag);
void NPC_WarpFamily(int floor, int index1, int index2, int fl, int x, int y);
void NPC_BattleOut(int fmindex, int fmindex1);
void NPC_CleanPK(int floor, int meindex);
int NPC_FMFloorUse(int floor);
void NPC_talkToFloor(int floor, int index1, int index2, char *data);
void CheckLeavePK(int npcindex, int floor, int index1, int index2);

void CHECK_FMPknumInFloor( int meindex)
{
	int fmnum1 = 0, fmnum2 = 0;
	int fmpks_pos;

	fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID) * MAX_SCHEDULE;
	// Nuke 20040920: Bug fix 莊園人數滿時要檢查總人數
	//print("<<%d %d>>",fmpks_pos,MAX_SCHEDULEMAN);
	//if( fmpks_pos < 0 || fmpks_pos >= MAX_SCHEDULEMAN ) return;
	if( fmpks_pos < 0 || fmpks_pos >= MAX_SCHEDULEMAN * MAX_SCHEDULE ) return;
	NPC_GetPKFMNum(CHAR_getWorkInt(meindex, NPC_WORK_WARPFLOOR),
		         		fmpks[fmpks_pos].host_index,
		         		fmpks[fmpks_pos].guest_index,
		         		&fmnum1, &fmnum2 );

	CHAR_setWorkInt( meindex, NPC_WORK_FMNUMI , fmnum1);
	CHAR_setWorkInt( meindex, NPC_WORK_FMNUMII, fmnum2);
}

extern int familyMemberIndex[FAMILY_MAXNUM][FAMILY_MAXMEMBER];

BOOL NPC_FMWarpManInit( int meindex )
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buff2[256];
	char buf[1024];
	int fl, x, y, meid;
	// shan
	int fl1, x1, y1;

	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
		print("FMWarpMan:GetArgStrErr");
		return FALSE;
	}

	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP1", buf, sizeof( buf))==NULL){
	        print("FMWarpman Err is %s",npcarg);
		print("FMWarpman Err");
		return FALSE;
	}

	getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
	fl=atoi(buff2);
	CHAR_setWorkInt(meindex, NPC_WORK_WARPFLOOR, fl);
	getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
	x=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
	y=atoi(buff2);

	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
		print( "FMWarp NPC:Invalid warpman ERR" );
		return FALSE;
	}

    // shan begin
	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP2", buf, sizeof( buf))==NULL){
	        print("FMWarpman Err is %s",npcarg);
		print("FMWarpman Err");
		return FALSE;
	}
	getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
	fl1=atoi(buff2);
	CHAR_setWorkInt(meindex, NPC_WORK_WARPFLOOR, fl);
	getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
	x1=atoi(buff2);
	getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
	y1=atoi(buff2);
	if( MAP_IsValidCoordinate( fl1,x1,y1 )== FALSE ){
		print( "FMWarp NPC:Invalid warpman ERR" );
		return FALSE;
	}
	// shan end
	
	meid = NPC_Util_GetNumFromStrWithDelim(npcarg, "ID");
	if ((meid < 0) || (meid >= MAX_SCHEDULEMAN))
	{
		print("FMWARP NPC: Init error invalid ID:%d\n", meid);
		return FALSE;
	}

	/*--正奶皿澀爛--*/
	CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_INIT_LOOPTIME);
   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );
	CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEINIT);
	CHAR_setWorkInt(meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
	CHAR_setWorkInt(meindex, NPC_WORK_TIMEFLAG, 0);
	CHAR_setWorkInt(meindex, NPC_WORK_TALKFLAG, -1);
	CHAR_setWorkInt(meindex, NPC_WORK_ID, meid);
	CHAR_setWorkInt(meindex, NPC_WORK_FMNUMI, 0);
	CHAR_setWorkInt(meindex, NPC_WORK_FMNUMII, 0);

	CHAR_setWorkInt( meindex, NPC_WORK_CleanTime, 6*10);
	
    return TRUE;
}

void NPC_FMWarpManTalked(int meindex, int talkerindex, char *szMes, int color)
{
	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
	
	CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
	
    if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
    	return;
    }

	if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
		if(NPC_Util_isFaceToChara(talkerindex,meindex,1 )==FALSE) return;
	}

	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
		print("GetArgStrErr");
		return ;
	}

	if(CHAR_getWorkInt(talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
		NPC_ERR_FMDiSP( meindex, talkerindex, 1);
	}

	CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD , 0 );
	NPC_FMWarpMan_selectWindow( meindex, talkerindex, 0, -1);
}

void NPC_FMWarpManLoop(int meindex)
{
	struct tm tm1;
	struct tm *tm2;
	int fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID) * MAX_SCHEDULE;
	int floor = CHAR_getWorkInt(meindex, NPC_WORK_WARPFLOOR);
#ifdef _DEATH_FAMILY_GM_COMMAND	// WON ADD 家族戰GM指令
	int i;
	int playernum = CHAR_getPlayerMaxNum();
#endif
	
	// WON ADD 修正snprintf會導致當機的bug
	if( (tm2=localtime((time_t *)&NowTime.tv_sec) ) == NULL ){
		print("\n won ==> time err !! ");
		return;
	}
	memcpy(&tm1, localtime((time_t *)&NowTime.tv_sec), sizeof(tm1));
	
#ifdef _DEATH_FAMILY_GM_COMMAND	// WON ADD 家族戰GM指令
	{
		static int next_time[5] = {10,20,30,40,50}, flag[5] = {0};
		int now_time = time(NULL);
		int j, ID = 0;
		 
		ID = CHAR_getWorkInt(meindex, NPC_WORK_ID) - MANORNUM ;
		 
		if( flag[ ID - 1 ] == 0 ){
			next_time[ ID - 1 ] += now_time;
			flag[ ID -1 ] = 1;
		}
		 
		if( now_time > next_time[ID - 1] ){	
			next_time[ID -1] = now_time + (60 * 5);
			 
			for( i=0; i<MAX_SCHEDULE; i++ ){
				if( fmpks[ fmpks_pos + i ].flag == FMPKS_FLAG_SCHEDULED &&
					CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG) == NPC_STATEFREE ){
					 
					char msg[128] = {0};
					int pk_min = fmpks[fmpks_pos + i ].prepare_time;
					 
					sprintf(msg, "[%s] VS [%s] 於(%d:%d) 在場地 %d 開打", 				
									fmpks[ fmpks_pos + i ].host_name,
									fmpks[ fmpks_pos + i ].guest_name,
									tm1.tm_hour + i, pk_min,  
									CHAR_getWorkInt(meindex, NPC_WORK_ID) - 9 );
					 
					for( j=0; j< playernum; j++ ){
						if( CHAR_CHECKINDEX( j ) != FALSE )	
						CHAR_talkToCli( j, -1, msg, CHAR_COLORYELLOW);
					}
				}
			} 
		}
	}
#endif
		
	if (tm1.tm_min == 0)
   	CHAR_setWorkInt(meindex, NPC_WORK_TIMEFLAG, tm1.tm_min);
	if (CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG) == NPC_STATEINIT)
	{
		if (tm1.tm_sec == 0)
		{
			CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEFREE);
			CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_FREE_LOOPTIME);
		}
	}
	if (CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG) == NPC_STATEFREE)
	{
		// 取得目前系統時間,若目前時間 >= 準備時間則設定BUSY狀態
		
		if (tm1.tm_min > CHAR_getWorkInt(meindex, NPC_WORK_TALKFLAG)
			&& tm1.tm_min == 0)
		{
			// 通知成員進場
			if (fmpks[fmpks_pos].flag == FMPKS_FLAG_SCHEDULED)
				NPC_talkToFloor(CHAR_getInt(meindex, CHAR_FLOOR),
				fmpks[fmpks_pos].host_index,
				fmpks[fmpks_pos].guest_index, "可以準備進場了!");
			CHAR_setWorkInt(meindex, NPC_WORK_TALKFLAG, tm1.tm_min);
		}
		if ((fmpks[fmpks_pos].prepare_time > 0) && (fmpks[fmpks_pos].flag == FMPKS_FLAG_SCHEDULED))
		{
			int clock = 0;
			
			NPC_FMBATTLESET(floor, fmpks[fmpks_pos].host_index,
				fmpks[fmpks_pos].guest_index, -1);
			if (tm1.tm_hour - (fmpks[fmpks_pos].dueltime / 100) < 0)
				clock = (fmpks[fmpks_pos].dueltime % 100) + fmpks[fmpks_pos].prepare_time - 60;
			else
				clock = fmpks[fmpks_pos].dueltime - (tm1.tm_hour * 100) + fmpks[fmpks_pos].prepare_time;
			
			if ((tm1.tm_min >= clock) && (fmpks[fmpks_pos].prepare_time > 0))
			{
				
				NPC_talkToFloor(floor, fmpks[fmpks_pos].host_index,
					fmpks[fmpks_pos].guest_index, "開戰羅~!!");
				CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEBUSY);
				CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_BUSY_LOOPTIME);
				NPC_FMBATTLESET(floor, fmpks[fmpks_pos].host_index,
					fmpks[fmpks_pos].guest_index, 1);
				
				print("\n won ==> set fmwaperman state busy !!");
				
				
#ifdef _DEATH_FAMILY_GM_COMMAND	// WON ADD 家族戰GM指令
				{
					int num1 = 0, num2 = 0;
					int winflag = 0;
					int floor = CHAR_getWorkInt(meindex, NPC_WORK_WARPFLOOR);
					
					NPC_GetPKFMNum(floor, fmpks[fmpks_pos].host_index,
						fmpks[fmpks_pos].guest_index, &num1, &num2);
					
					if( num2 < 20 ){
						NPC_WarpFamily(floor, -1,
							fmpks[fmpks_pos].guest_index,
							CHAR_getInt(meindex, CHAR_FLOOR),
							CHAR_getInt(meindex, CHAR_X),
							CHAR_getInt(meindex, CHAR_Y));
						NPC_talkToFloor( floor,  -1, fmpks[fmpks_pos].guest_index, "因未滿二十人而離場" );
#ifdef _DEATH_FAMILY_STRUCT		// WON ADD 家族戰存放勝負資料
						{
							char out[256];
							sprintf( out, "[%s](%d) 因未滿二十人棄權",  fmpks[fmpks_pos].guest_name, num2 );
							saacproto_FM_PK_STRUCT_send( acfd, out );
						}
#endif
					}
					
					if( num1 < 20 ){
						NPC_WarpFamily(floor, fmpks[fmpks_pos].host_index,
							-1,
							CHAR_getInt(meindex, CHAR_FLOOR),
							CHAR_getInt(meindex, CHAR_X),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美卡1卡2卡| 另类欧美日韩国产在线| 综合在线观看色| 最新日韩av在线| 国产精品无人区| 亚洲欧洲日产国码二区| 一色桃子久久精品亚洲| 日韩毛片一二三区| 夜夜精品视频一区二区| 亚洲影视在线观看| 日韩二区在线观看| 久久国产精品72免费观看| 国产一区二区0| 97久久超碰国产精品电影| 91原创在线视频| 欧美日本在线一区| 日韩一区二区电影网| 精品国产百合女同互慰| 国产亚洲欧美激情| 亚洲天堂免费在线观看视频| 亚洲国产视频a| 日韩电影在线一区| 国产成人在线电影| 色天使色偷偷av一区二区| 欧美日韩亚洲高清一区二区| 日韩精品资源二区在线| 久久精品免费在线观看| 亚洲视频图片小说| 人人精品人人爱| 国产成人精品影视| 91高清在线观看| 欧美一级日韩不卡播放免费| 欧美国产乱子伦| 亚洲丶国产丶欧美一区二区三区| 美女网站视频久久| 99热这里都是精品| 亚洲三级理论片| 蜜臀久久久久久久| 成人福利在线看| 欧美日韩成人一区二区| 2023国产精品视频| 亚洲视频一区二区在线观看| 丝袜美腿成人在线| 成人黄色777网| 91麻豆精品国产91久久久久久| 久久久夜色精品亚洲| 亚洲一级二级三级在线免费观看| 精品一区二区在线视频| 色乱码一区二区三区88| 精品国产亚洲在线| 一区二区在线观看视频| 寂寞少妇一区二区三区| 色拍拍在线精品视频8848| 久久综合资源网| 亚洲资源中文字幕| 国产精品1024| 欧美高清视频一二三区| 国产精品久久久久9999吃药| 日本不卡一区二区| 色综合天天综合网天天狠天天| 欧美变态tickling挠脚心| 一区二区三区精品视频在线| 国产精品一区二区三区网站| 欧美日韩成人综合在线一区二区| 国产精品美女久久久久久 | 亚洲国产sm捆绑调教视频| 国产美女精品人人做人人爽| 欧美午夜一区二区| 国产精品久久久久久久久免费樱桃 | 色香蕉成人二区免费| 精品国产91洋老外米糕| 亚洲国产综合在线| 成人97人人超碰人人99| 久久久午夜精品理论片中文字幕| 日本午夜精品一区二区三区电影| 91麻豆高清视频| 亚洲国产精品黑人久久久| 加勒比av一区二区| 欧美一区二区福利视频| 亚洲成人av福利| 91九色最新地址| 国产精品久久久久影视| 国产激情视频一区二区三区欧美| 日韩欧美中文一区| 视频在线观看一区二区三区| 欧美三区在线观看| 亚洲综合一二区| 91久久一区二区| 成人av网站免费观看| 久久众筹精品私拍模特| 另类小说综合欧美亚洲| 日韩欧美在线观看一区二区三区| 视频一区二区三区中文字幕| 欧美系列日韩一区| 亚洲一二三级电影| 在线国产亚洲欧美| 一区二区三区四区蜜桃| 91美女片黄在线观看| 亚洲天堂成人网| 色综合亚洲欧洲| 亚洲精品国产一区二区精华液 | 亚洲人精品午夜| 不卡欧美aaaaa| 亚洲欧美怡红院| 色综合久久综合中文综合网| 椎名由奈av一区二区三区| 91网站最新网址| 亚洲最新在线观看| 欧美四级电影在线观看| 日韩黄色在线观看| 日韩欧美电影在线| 国产一区91精品张津瑜| 欧美高清一级片在线观看| 成人激情图片网| 亚洲精品国产品国语在线app| 99久久精品一区二区| 一区二区三区中文字幕精品精品| 在线观看网站黄不卡| 日韩激情视频网站| 26uuu国产电影一区二区| 国产成人免费视频精品含羞草妖精| 日本一区二区视频在线观看| 成人av在线电影| 亚洲一区二区三区爽爽爽爽爽| 欧美日韩午夜在线视频| 久久99久久99小草精品免视看| 国产午夜亚洲精品午夜鲁丝片| 91在线视频免费观看| 亚洲高清在线精品| 日韩精品中文字幕在线不卡尤物| 国产黑丝在线一区二区三区| 亚洲欧美激情在线| 4438x成人网最大色成网站| 国产综合成人久久大片91| 亚洲欧洲一区二区在线播放| 欧美乱妇20p| 国产伦理精品不卡| 亚洲激情校园春色| 欧美不卡123| 99re成人在线| 久久激情五月激情| 日韩美女视频19| 日韩一级完整毛片| 成人av在线电影| 日本中文字幕不卡| 中文字幕中文字幕在线一区| 欧美三级电影一区| 国产高清成人在线| 亚洲mv在线观看| 国产一区视频在线看| 亚洲精品国产精华液| 精品1区2区在线观看| 91精品福利视频| 国产一区二区三区国产| 亚洲一区二区三区视频在线播放| 久久久久久久久久久99999| 在线精品视频小说1| 国产精品538一区二区在线| 亚洲综合免费观看高清完整版在线| 精品久久久久久久久久久久包黑料| 99久久久国产精品| 精品一二三四在线| 亚洲国产精品久久一线不卡| 中文字幕免费在线观看视频一区| 欧美日韩国产a| av爱爱亚洲一区| 精品一区二区三区在线播放视频| 亚洲综合无码一区二区| 国产精品色哟哟| 欧美不卡激情三级在线观看| 欧美色偷偷大香| aaa亚洲精品一二三区| 激情欧美日韩一区二区| 视频在线观看一区| 亚洲在线视频一区| 中文久久乱码一区二区| 亚洲一区二区美女| 欧美在线999| 成人网页在线观看| 狠狠久久亚洲欧美| 日韩经典中文字幕一区| 亚洲人成网站精品片在线观看| 久久九九全国免费| 欧美成人官网二区| 91精品国产综合久久久久| 欧美色图天堂网| 91在线免费播放| 成人黄色在线网站| 国产91丝袜在线播放0| 老色鬼精品视频在线观看播放| 亚洲第一电影网| 亚洲国产美国国产综合一区二区| 亚洲人成网站影音先锋播放| 综合色中文字幕| 日韩久久一区二区| 中文字幕欧美一| 中文字幕日韩一区| 亚洲免费观看高清完整版在线| 国产精品女同一区二区三区| 国产亚洲美州欧州综合国|