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

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

?? char_angel.c

?? 最新主流石器時代源代碼,包含諸多目前流行功能代碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "version.h"
#ifdef _ANGEL_SUMMON
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>   // shan
#include <ctype.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include "common.h"
#include "char_base.h"
#include "char_data.h"
#include "char.h"
#include "lssproto_serv.h"
#include "item.h"
#include "item_event.h"
#include "buf.h"
#include "object.h"
#include "map_deal.h"
#include "saacproto_cli.h"
#include "readmap.h"
#include "handletime.h"
#include "char_event.h"
#include "npccreate.h"
#include "addressbook.h"
#include "item_event.h"
#include "magic_base.h"
#include "magic.h"
#include "chatmagic.h"
#include "configfile.h"
#include "log.h"
#include "anim_tbl.h"
#include "encount.h"
#include "battle.h"
#include "pet_skill.h"
#include "util.h"
#include "enemy.h"
#include "npcutil.h"
#include "pet.h"
#include "family.h"
#include "defend.h"
#include "npcserver.h"


struct MissionInfo missionlist[MAXMISSION];
int mission_num =0;
struct MissionTable missiontable[MAXMISSIONTABLE];

//#define ANGELITEM 2884 //20701	//使者的信物 道具編號
//#define HEROITEM 2885 //20702	//勇者的信物 道具編號

extern int AngelReady;

char* getMissionNameInfo( int charaindex, char* nameinfo)
{
	sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	return nameinfo;
}

int checkIfAngel( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
		else if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfOnlyAngel( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfOnlyHero( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfAngelByName( char* nameinfo)
{
	int i;

	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
		else if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}


void addAngelData( int angelindex, int heroindex, int mission, int flag)
{
	int i;
	char buf[1024];
	char angelinfo[512];
	char heroinfo[512];

	//if( checkIfAngel( angelindex) != -1 || checkIfAngel( heroindex) != -1 )
	//	return;
	//sprintf( angelinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME) );
	getMissionNameInfo( angelindex, angelinfo);
	//sprintf( heroinfo, "%s:%s", CHAR_getChar( heroindex, CHAR_CDKEY), CHAR_getChar( heroindex, CHAR_NAME) );
	getMissionNameInfo( heroindex, heroinfo);
	
	sprintf( buf, "%s|%s|%d|%d", angelinfo, heroinfo, mission, flag );
	//saacproto_ACMissionTable_send( acfd, -1, 2, buf, angelindex);
	saacproto_ACMissionTable_send( acfd, -1, 2, buf, angelinfo);

	return;
}

//void selectAngel( int charaindex)
void selectAngel( int charaindex, int heroindex, int mission, int gm_cmd)
{
	// gm_cmd 表示是否由GM指令產生, 

	//int heroindex =-1;
	int findindex, startindex;
	char msg[1024];
	int max_char;
	//int mission;
	
	if( AngelReady <= 0 && gm_cmd == FALSE)
		return;

	sprintf( msg, " 使者資格檢查: %s %s ", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME));
	print( msg);
	LogAngel( msg);

	// 天使條件檢查
	if( gm_cmd == FALSE )
	{
		if( checkIfAngel( charaindex) != -1) // 是否天使或勇者
		{
			print(" ANGEL已經是天使或勇者了 ");
			return;
		}
		
		if( CHAR_getInt( charaindex, CHAR_LV) < 30 || !NPC_EventCheckFlg( charaindex, 4 ) )
		{
			print(" ANGEL資格不符 ");
			return;
		}
		
		srand( time(NULL));
		if( rand()%3 == 0 )	// 天使的機率 2/3
		{
			print(" ANGEL機率檢查不通過 ");
			return;
		}
	}
	print(" ANGEL決定 ");

	
	// 挑選勇者
	if( heroindex == -1 )
	{
		//heroindex = -1;
		max_char = CHAR_getPlayerMaxNum();
		startindex = RAND( 0, max_char-1);
		findindex = startindex;
		while(1) {
			if( findindex == startindex-1)	break;
			findindex = (findindex+1) % max_char;
			if( !CHAR_CHECKINDEX( findindex) ) continue;
			if( CHAR_getInt( findindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) continue;
			if( findindex == charaindex ) continue;
			if( checkIfAngel( findindex) != -1)	continue; // 是否天使或勇者
			if( CHAR_getInt( findindex, CHAR_LV) < 80 || !NPC_EventCheckFlg( findindex, 4 ) ) continue; // 勇者的條件
			if( rand()%3 == 0 )	continue; // 勇者的機率 2/3
			
			heroindex = findindex;
			
			print(" ANGEL勇者決定 ");
			
			break;
		}
		if( heroindex < 0) {
			sprintf( msg, " 沒有找到勇者人選!! ");
			print( msg);
			//LogAngel( msg);
			return;
		}
	}

	// 決定任務
	if( mission == -1 )
	{
		int mlist[MAXMISSION]; // 符合條件的任務列表
		char eventlist[1024];
		char buf[64];
		int i, j, mindex =0;
		
		memset( mlist, 0, sizeof(mlist));
		for( i =0; i <MAXMISSION; i++) {
			int checked =TRUE;
			if( missionlist[i].id <= 0) continue;
			if( CHAR_getInt( heroindex, CHAR_LV) < missionlist[i].level )
				continue;
			strcpy( eventlist, missionlist[i].eventflag); // 檢查必要旗標
			j =0;
			while(1) {
				j++;
				if( getStringFromIndexWithDelim( eventlist, ";", j, buf, sizeof(buf)) == FALSE )
					break;
				if( buf[0] != '!') { // 必要旗標或禁止旗標
					if( !NPC_EventCheckFlg( heroindex, atoi(buf) )) {
						checked = FALSE;
						break;
					}
				}
				else {
					if( NPC_EventCheckFlg( heroindex, atoi(buf+1) )) {
						checked = FALSE;
						break;
					}
				}
			}
			if( checked ) {
				mlist[mindex] = missionlist[i].id;
				print(" mlist[%d]=%d ", mindex, mlist[mindex]);
				mindex++;
			}
		}
		if( mindex <= 0 ) {
			sprintf( msg, " 找不到合適的任務 ");
			print( msg);
			//LogAngel( msg);
			return;
		}
		
		mission = mlist[rand()%mindex];
	}


	addAngelData( charaindex, heroindex, mission, MISSION_WAIT_ANSWER); // 傳到AC

	// 清除旗標 event8 224~255 為精靈召喚專用
	CHAR_setInt( charaindex, CHAR_NOWEVENT8, 0);
	CHAR_setInt( charaindex, CHAR_ENDEVENT8, 0);
	CHAR_setInt( heroindex, CHAR_NOWEVENT8, 0);
	CHAR_setInt( heroindex, CHAR_ENDEVENT8, 0);

	if( gm_cmd == FALSE )
		AngelReady = 0; // 清除缺額
	
	{
		sprintf( msg, " 產生 %s 天使候補: %s %s Lv:%d 勇者候補: %s %s Lv:%d 任務:%d ci=%d hi=%d ",
				gm_cmd ? ("(GM指令)") : (" "),
				CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME), CHAR_getInt( charaindex, CHAR_LV),
				CHAR_getChar( heroindex, CHAR_CDKEY), CHAR_getChar( heroindex, CHAR_NAME), CHAR_getInt( heroindex, CHAR_LV),
				mission, charaindex, heroindex);
		print( msg);
		LogAngel( msg);
	}
}

void sendAngelCleanToCli( int fd)
{
	lssproto_WN_send( fd, //getfdFromCharaIndex(charaindex),
			WINDOW_MESSAGETYPE_ANGELMESSAGE, -1,
			CHAR_WINDOWTYPE_ANGEL_CLEAN,
			-1,	"");
}

int AngelCreate( int angelindex)
{
	int emptyitem1, emptyitem2;
	int angeltokenindex, herotokenindex;
	char msgbuf[1024]/*, nameinfo[1024]*/;
	int mindex, mission;
	char heroname[64];

	if( !CHAR_CHECKINDEX( angelindex))	return FALSE;

	print(" 天使答應了!! ");
	
	mindex = checkIfAngel( angelindex);
	if( mindex == -1 || missiontable[mindex].flag == MISSION_TIMEOVER ) {
		//print("\n ANGEL錯誤!!Table逾時或無資料??:%d ", angelindex );
		CHAR_talkToCli( angelindex, -1, "很抱歉,你太晚回答,已經逾時了。", CHAR_COLORYELLOW);
		
		sprintf( msgbuf, " 回答逾時或無資料 i:%d 使者:%s %s ", mindex, CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME));
		print( msgbuf);
		LogAngel( msgbuf);
		
		return FALSE;
	}

	if( missiontable[mindex].flag != MISSION_WAIT_ANSWER ) {
		print(" 旗標不符:%d ", missiontable[mindex].flag);
		return FALSE;
	}

	if( CHAR_findEmptyItemBoxNo( angelindex ) < 2 ){
		CHAR_talkToCli( angelindex, -1, "空間欄位不足。至少要有兩個空道具欄位。", CHAR_COLORYELLOW);
		return TRUE;
	}

	getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 2, heroname, sizeof(heroname));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久影院| 五月激情综合网| 亚洲国产成人av| 狠狠v欧美v日韩v亚洲ⅴ| 色狠狠综合天天综合综合| 日韩欧美国产综合| 亚洲激情成人在线| 国产精品一线二线三线精华| 91久久精品网| 国产欧美日本一区视频| 日本不卡的三区四区五区| 色综合天天性综合| 久久嫩草精品久久久久| 免费在线观看视频一区| 91美女片黄在线观看| 国产日韩欧美一区二区三区综合| 亚洲第一精品在线| 91捆绑美女网站| 国产精品欧美综合在线| 韩国毛片一区二区三区| 日韩一区二区在线看片| 亚洲国产视频直播| 欧美综合亚洲图片综合区| 中文字幕一区二| a在线播放不卡| 国产精品色婷婷| 成人激情电影免费在线观看| 久久久久久久久久久久久女国产乱 | 国产三级三级三级精品8ⅰ区| 亚洲一区在线观看免费| 色婷婷综合久色| 中文字幕制服丝袜一区二区三区| 国产一二精品视频| 国产网站一区二区三区| 亚洲午夜激情av| 在线免费观看一区| 亚洲精品日韩综合观看成人91| 不卡一二三区首页| 亚洲素人一区二区| 色视频一区二区| 亚洲精品老司机| 91年精品国产| 亚洲一区二区美女| 欧美肥妇bbw| 麻豆成人在线观看| 欧美成人精品高清在线播放| 亚洲伊人色欲综合网| 天天综合日日夜夜精品| 亚洲国产精品一区二区www| 久久成人久久鬼色| 日韩欧美国产系列| 国产九九视频一区二区三区| 国产色爱av资源综合区| 床上的激情91.| 一区二区三区四区五区视频在线观看| 91视频免费观看| 五月天激情综合| 日韩精品中文字幕在线不卡尤物| 国产综合色在线视频区| 国产精品久久久久久久久快鸭 | 91麻豆swag| 一区二区三区丝袜| 欧美妇女性影城| 国产一区二区成人久久免费影院| 国产欧美视频一区二区| 99久久精品免费看| 麻豆专区一区二区三区四区五区| 亚洲国产精品成人综合| 欧美另类一区二区三区| 国产精品一级片在线观看| 亚洲欧洲三级电影| 欧美精品久久一区二区三区| 狠狠色丁香婷综合久久| 樱花影视一区二区| 久久久精品中文字幕麻豆发布| 91麻豆文化传媒在线观看| 蜜臀va亚洲va欧美va天堂| 国产精品丝袜一区| 欧美一三区三区四区免费在线看| 国产一区二区女| 天堂久久一区二区三区| 国产精品日韩精品欧美在线| 欧美一级免费大片| 色综合久久中文综合久久牛| 久久99精品久久久久久动态图| 亚洲日本在线a| 精品福利一二区| 91久久精品网| 成人av网址在线观看| 天堂av在线一区| 亚洲美女一区二区三区| 国产日韩av一区| 91精品在线一区二区| 色综合天天视频在线观看| 国产精品中文欧美| 美脚の诱脚舐め脚责91| 亚洲综合网站在线观看| 亚洲国产精品99久久久久久久久| 日韩欧美一级在线播放| 欧美久久久久久久久久| 欧美午夜宅男影院| av在线不卡观看免费观看| 国产一区不卡视频| 老司机精品视频线观看86| 午夜精品福利视频网站| 一区二区三区成人在线视频| 成人免费视频在线观看| 国产欧美精品在线观看| 久久久久亚洲蜜桃| 精品国产乱码久久久久久图片 | 亚洲欧美激情插| 中文字幕一区二区三区四区不卡| 国产亚洲欧美激情| 欧美xingq一区二区| 欧美mv和日韩mv国产网站| 欧美日本乱大交xxxxx| 欧美三级日本三级少妇99| 色94色欧美sute亚洲线路一久| 972aa.com艺术欧美| 99精品视频在线观看| 91色porny在线视频| 91伊人久久大香线蕉| 色噜噜夜夜夜综合网| 一本大道av一区二区在线播放| 91玉足脚交白嫩脚丫在线播放| thepron国产精品| 色综合久久久久综合体桃花网| 91蜜桃传媒精品久久久一区二区| 91免费在线看| 欧美日韩国产不卡| 日韩精品中午字幕| 久久久久久久久久久黄色| 国产农村妇女精品| 亚洲免费毛片网站| 亚洲午夜av在线| 免费高清在线一区| 国产成人自拍在线| 91成人免费网站| 538在线一区二区精品国产| 在线电影国产精品| 久久免费的精品国产v∧| 一区在线观看免费| 日韩精品1区2区3区| 激情综合色综合久久综合| www.视频一区| 欧美美女一区二区三区| 亚洲精品一区二区在线观看| 国产欧美综合色| 亚洲一区二区三区中文字幕在线| 免费国产亚洲视频| jiyouzz国产精品久久| 欧美日韩五月天| 国产欧美日韩另类一区| 亚洲一区二区三区视频在线| 美女视频一区二区| 91香蕉视频在线| 欧美电影免费观看完整版| 亚洲丝袜美腿综合| 九色综合国产一区二区三区| 99精品国产91久久久久久| 欧美撒尿777hd撒尿| 久久久久久久久久电影| 亚洲成人精品一区| 国产成人综合精品三级| 337p亚洲精品色噜噜| 国产精品高潮久久久久无| 日本不卡一区二区三区高清视频| 成人一区二区视频| 日韩女优制服丝袜电影| 一区二区不卡在线播放 | 欧美亚洲综合久久| 久久婷婷国产综合精品青草| 一区二区三区日韩| 国产精品一区二区久久不卡 | 韩国av一区二区三区四区| 欧美亚洲高清一区| 中文字幕精品在线不卡| 免费精品视频在线| 欧美日韩一区不卡| 亚洲精品中文字幕在线观看| 国产91综合一区在线观看| 欧美一区二区三区日韩视频| 亚洲黄色免费电影| 9久草视频在线视频精品| wwww国产精品欧美| 免费成人在线视频观看| 欧美人与性动xxxx| 亚洲柠檬福利资源导航| 风流少妇一区二区| 国产亚洲欧美一区在线观看| 欧美aⅴ一区二区三区视频| 欧洲精品一区二区| 亚洲欧美激情一区二区| av午夜精品一区二区三区| 国产精品视频免费看| 国产不卡在线一区| 国产日本欧洲亚洲| 国产成人高清在线| 国产亚洲一二三区| 国产不卡视频在线播放|